1 REM************************************************************* 2 REM******PROGRAM TO CHANGE DARTMOUTH BASIC INTO BASIC PLUS****** 3 REM***WRITTEN BY ADAM SCHNEIDER,CLASS OF '74,AND MODIFIED BY**** 4 REM********BRUCE WHITE, CLASS OF '76*************************** 5 REM************************************************************* 10 DIM C$(2,32) 20 MAT READ C$ 30 DATA "'",REM,DATA,&,ASC,DAT$,STR,POS,CLK$,TIME,RESET,MOD,FILE,# 35 DATA LINPUT,PER,TYP,SUB,SEG$,USR$,BIT,CALL,SCRATCH 36 DATA"IF END","IF MORE",MARGIN,LOF,LOC,"MARGIN CONTROL" 37 DATA TIM,"MAT PRINT USING",NUL$ 40DATA"!",REM,DATA,"+",ASCII,DATE$(0%),NUM,INSTR,TIME$(0%),"*",RESTORE 45 DATA FNA1,"*","#","INPUT LINE","*","*","*","*" 46 DATA "*","*","*","*","*","*","*","*","*","*" 47 DATA TIME(1%),"*","*" 50 INPUT"PROGRAM";A$:OPEN A$ AS FILE1 80 INPUT"OUTPUT PROGRAM";B$:OPEN B$ AS FILE2 100 ON ERROR GOTO 197 110 INPUTLINE#1,A$ 120 FOR I=1 TO 32 130 LET P=0 140 P=INSTR(P+1,A$,C$(1,I)) 142 IF A9=0 THEN 150 !NO APOS? 144 IF P>A9 THEN 190 !IGNORE 150 IF P=0 THEN 190 160 GOSUB 205 170 IF F=1 THEN 140 !YES--FLAG IS SET. IGNORE. 180 ON I GOTO 300,195,195,300,300,300,300,360,300,710,300,430,560, 650,300,710,710,710,800,710,710,710,710,710,710,710,710 ,710,710,710,300,710,710 190 NEXT I 195 ,A$ 196 A9=0:F=0:GOTO110 197 IF ERR=11 THEN RESUME 1400 ELSE RESUME 0 200 GOTO 1400 205 ! 207 ! QUOTE ROUTINE. IS SEG$(A$,P,P) IN QUOTES? F=1 IF TRUE. 210 !Q=# OF QUOTES(CHR$(34),Q1=POSITION OF QUOTE. 211 Q=0:Q1=0:F=0 220 Q1=INSTR(Q1+1,A$,CHR$(34%)) 240 IF Q1=0 THEN 270 245 LET Q=Q+1 250 IF Q1

1 THEN 350 344 LET A9=P!DONT'T CHANGE ANYTHING AFTER "'" 345 IF I=6 THEN &"WARNING- DATE$ HAS BEEN CHANGED TO";: &"DATE$(0%) IN":&A$:IFF4=0THEN&"THIS MAY OR MAY NOT CAUSE FURTHER";: &"DIFFICULTIES-CHECK PROGRAM":F4=1 346 IF I=9 THEN&"WARNING-CLK$ HAS BEEN REPLACED BY TIME$(0%) IN";: &A$:IF F3=0 THEN &"THESE FUNCTIONS ARE NOT TOTALLT INTER-";: &"CHANGEABLE-CHECK PROGRAM CAREFULLY":F3=1 350 GOTO 140 360 ! 370 ! POS FUNCTION ===> INSTR 380 ! 390 GOSUB 860 ! FINDS ARGUMENTS OF POS(A$,B$,N) 400 ! POS(A$,B$,N)===>INSTR(N,A$,B$) 410 A$=MID(A$,1,P-1)+"INSTR("+A3$+","+A1$+","+A2$+") "+ MID(A$,N9,LEN(A$)-N9+1) 420 GOTO 140 430 ! 440 ! MOD FUNCTION. OUTPUT A WARNING AND CONTINUE. 450 ! 460 IF F2=1 THEN 300 !WARNING OUTPUT ALREADY? DON'T. 470 LET F2=1 480 PRINT 490 PRINT "WARNING: 'MOD' FUNCTION FOLLOWING HAS BEEN CHANGED" 500 PRINT "TO 'FNA1'. DEFINE 'FNA1' BY GOING:" 510 PRINT 520 PRINT " DEF FNA1(X,Y)=X-Y*INT(X/Y)" 530 PRINT 535 PRINT "ORIGINAL LINE IS:" 540 PRINT A$ 550 GOTO 300 560 ! 570 ! FILE STATEMENT..NEW FORMAT. 580 ! 590 X=INSTR(1,A$,":") 595 X1=INSTR(1,A$,"#") 600 IF X*X1=0 THEN 710 !FORMAT ERROR 605 PRINT 610 PRINT "WARNING: 'FILE' STATEMENT IN #";MID(A$,1,P-1-1+1) 620 ,MID(A$,1,P-1)+"OPEN"+MID(A$,X+1,LEN(A$))+"AS FILE"+ MID(A$,X1+1,1) 630 PRINT 640 GOTO 196 650 ! 660 ! # (FILE OPERATION [READ #, WRITE #...]) OUTPUT WARNING. 670 ! 675 PRINT 680 PRINT "FILE OPERATION--CHANGE IT:" 690 PRINT A$ 695 PRINT 700 GOTO 195 !CONTINUE 710 ! 720 ! ROUTINE TO OUTPUT AN ERROR MESSAGE (GENERAL) 730 ! 740 ! 750 IF I<>18 THEN 755 752 IF INSTR(1,A$,"GO")

ILLEGAL INSTRUCTION/FUNCTION CALL.." 780 PRINT 790 GOTO 195 800 ! 810 ! SEG$(A$,A,B) ===>MID(A$,A,(B-A)+1) 820 ! 830 GOSUB 860 !ARGUMENT ROUTINE 835 B3$="(("+A3$+")-" 836 B2$="("+A2$+")" 837 B4$=B3$+B2$+"+1)" 840 A$=LEFT(A$,P-1)+"MID("+A1$+","+A2$+","+B4$+")"+ MID(A$,N9,LEN(A$)-N9+1) 850 GOTO 140 860 ! 870 ! SUBROUTINE TO FIND ARGUMENTS OF A FUNCTION (SEG$ & POS) 880 ! A1$=FIRST ARGUMENT, A2$=2ND ARGUMENT, A3$=3RD ARG. 890 ! N9= END OF FUNCTION CALL 900 ! 910 ! 911 &"P=";P; 920 A1$="":A2$="":A3$="" 930 S=0:N9=0:P7=0:T=0 940 FOR J= P+1 TO LEN(A$) 950 LET T=P 952 LET P=J 955 GO SUB 205 957 P=T:B$=MID(A$,J,1):IF F=1 THEN 1330 960 IF B$="(" GOTO 1190 970 IF B$=")" GOTO 1230 980 IF B$<>"," GOTO 1330 ! IGNORE ALL BUT (,), AND "," 990 ! 1000 ! WE HAVE A COMMA. DOES IT END AN ARGUMENT? 1010 ! 1020 IF P7*S=0 THEN&"ERROR WITH PARENTHESES AT 1020":GOTO1140 !ERROR! NO OPEN PAIR YET UNCLOSED 1030 IF S<>1 THEN 1330 ! IGNORE 1040 Q$=MID(A$,P7+1,J-(P7+1)) 1050 IF A1$<>"" GOTO 1100 !FIRST USED UP? 1060 LET A1$=Q$ 1070 LET P7=J !CURRENT ARGUMENT START 1080 GOTO 1330 1090 ! 1100 IF A2$<>""THEN&"ERROR WITH A2$ AT 1100":GOTO1140 !2ND USED?ERROR! 1110 LET A2$=Q$ 1120 GOTO 1070 !AND PROCESS 1130 ! 1140 PRINT 1142 PRINT "ERROR IN FUNCTION CALL: ";C$(1,I) 1150 GOTO 760 !FINISH UP. 1180 ! 1190 ! OPEN PARENTHESES. INCREMENT COUNTER 1200 ! 1210 S=S+1 1215 IF S<>1 THEN 1220 1217 P7=J 1220 GOTO 1330 1230 ! 1240 ! CLOSE PARENTHESES. DECREMENT COUNTER, CHECK IF CALL IF 1250 ! ENDED. 1255 ! 1260 IF S>1 THEN S=S-1:GOTO1330 1280 IF A2$=""THEN&"ERROR WITH A2$ AT 1280":GOTO1140 !ERR-END OF CALL BUT WE'RE NOT FINISHED 1290 A3$=MID(A$,P7+1,J-(P7+1)) ! LAST ARG. 1300 N9=J+1 1305 IF A3$="" THEN&"ERROR WITH A3$ AT 1305":GOTO1140 !ERROR! 1310 RETURN 1320 ! 1330 NEXT J 1340 &"ERR AT 1340-A1$="A1$;"A2$="A2$;"A3$=";A3$:STOP 1350 GOTO1140 1400 END U