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 " 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