1 PRINT"BCBC: copyright (c) 1984, T.N.T. Software, Inc.":PRINT"Portions copyright (c) 1978-1981, Microsoft Corp." 2 PRINT"Version 1.22: 11-14-84" 10 GOTO 50 20 FOR X1=1 TO LEN(X$):X2=ASC(MID$(X$,X1,1)) 30 IF X2>95 THEN X2=X2 AND 95:MID$(X$,X1,1)=CHR$(X2) 40 NEXT X1:RETURN 50 DEFINT A-Z 60 DEF FNS$(A)=MID$(STR$(A),2) 70 DEF FNP$(A$,B$)=LEFT$(A$,INSTR(A$,B$)-1) 80 DIM R$(50),L$(10),F(100),V$(500),LN(500),NXT$(9),S(500) 90 MAX=1000:T$=CHR$(9):FIL=0:Q$="LHLD Z":P$="SHLD Z":H$="LXI H,":D$="LXI D,":B$="LXI B,":PH$="PUSH H":SW$="!XCHG!":S1$="XCHG":I$="!INX H!":I1$="!DAD D!":I2$="DAD D":S$="!DCX H!":IS$="DCX H":E$="!" 100 DATA PRINT,LPRINT,IF,THEN,GOTO,GOSUB,RETURN,INPUT,RUN,STOP,OPEN,CLOSE 110 DATA VAL(,STR$(,INKEY$,LEN(,POKE,PEEK(,IPOKE,IPEEK(,VARPTR(,CHR$(,ASC( 120 DATA STRUCTURE(,DIM,SIZE(,MID$(,LEFT$(,RIGHT$(,STRING$(,CALL,MEM,GET 130 DATA PUT,LSET,RSET,FOR,NEXT,END 140 I=1:WHILE (R$(I-1)<>"END"):READ R$(I):I=I+1:WEND 150 TOKENS=I:U=0 160 DATA AND,OR,NOT,XOR,MOD 170 FOR I=1 TO 5:READ L$(I):NEXT 180 LINE INPUT"NAME OF PROGRAM TO COMPILE (DEFAULT TYPE IS .BAS): ";F$ 190 LINE INPUT"NAME OF DESIRED OUTPUT FILE (TYPE WILL BE .ASM) : ";O$ 200 IF INSTR(F$,".")<1 THEN F$=F$+".BAS" 210 IF O$<" " THEN O$=F$ 220 IF INSTR(O$,".") THEN O$=FNP$(O$,".") 230 O$=O$+".ASM":X$=F$:GOSUB 20:F$=X$::X$=O$:GOSUB 20:O$=X$: 240 PRINT"DO YOU WANT COMPLETE DOCUMENTATION IN YOUR ASSEMBLER":PRINT"LISTING OUTPUT (Y/N)?"; 250 LINE INPUT C$:X$=C$:GOSUB 20:C$=X$::IF INSTR("YN",C$)<1 THEN 240 260 LINE INPUT"WHICH DRIVE LETTER IS BCBC.LIB ON: ";LD$:X$=LD$:GOSUB 20:LD$=X$: 270 IF LEN(LD$)>1 OR LD$>"P" OR LD$<"A" THEN PRINT"!?!":GOTO 260 280 OPEN"I",1,F$:I=0 290 IF EOF(1) THEN 320 300 LINE INPUT #1,L$:IF VAL(L$) THEN LN(I)=VAL(L$):I=I+1 310 GOTO 290 320 CLOSE 1 330 OPEN"I",1,F$:OPEN"O",2,O$ 340 PRINT#2,T$"ORG 0100H ;STANDARD CP/M ORIGIN":PRINT#2,T$"LXI SP,STACK":GOTO 420 350 IF LEN(U$)<1 THEN RETURN 360 JX=1:WHILE JX1 THEN U$=MID$(U$,JX) 380 IF LEN(U$)<2 THEN RETURN 390 JX=LEN(U$):WHILE JX>1 AND MID$(U$,JX,1)<=" ":JX=JX-1:WEND 400 IF JX0 THEN L$=MID$(L$,INSTR(L$," ")):LZ=LZ+1:ELSE LN=OLN 460 IF INSTR(L$,"#ALL") THEN FOR PULL%=0 TO 33:F%(PULL%)=1:NEXT PULL% 470 IF INSTR(L$,"#ASM")>0 THEN ASM%=1:GOTO 420 480 IF ASM%<1 THEN 510 490 IF INSTR(L$,"#ENDASM")>0 THEN ASM%=0:GOTO 420 500 PRINT #2,L$:GOTO 420 510 A$="" 520 L1$="":U$=L$:GOSUB 350:L$=U$:IF L$<=" " THEN 420 530 IF LEFT$(L$,1)="'" OR INSTR(L$,"REM")=1 THEN 420 540 I=1:WHILE (INSTR(L$,R$(I))<>1 AND I<=TOKENS):I=I+1:WEND 550 OK=0:GOSUB 580:IF OK THEN 520 560 IF L1$>STRING$(LEN(L1$),32) THEN L$=L1$:GOTO 520 570 GOTO 420 580 K1=1:K3=0 590 J=INSTR(K1,L$,":"):IF J THEN FOR K2=1 TO J:K3=ABS(K3-(MID$(L$,K2,1)=CHR$(34))):NEXT 600 IF J>0 AND K3=1 THEN K1=J+1:GOTO 590 610 IF J THEN L1$=MID$(L$,J+1):L$=LEFT$(L$,J-1) 620 IF INSTR(L$,"PRINT")<>1 AND INSTR(L$,"LPRINT")<>1 THEN 840 630 J=6-(INSTR(L$,"LPRINT")=1):WHILE MID$(L$,J,1)<=" " AND JCHR$(34) THEN 750 660 J=INSTR(L$,CHR$(34)):K=INSTR(J+1,L$,CHR$(34)) 670 IF K=J+1 THEN IF INSTR(L$,"LPRINT")=1 THEN PRINT#2,T$B$"5":GOTO 730:ELSE IF K=J+1 THEN PRINT#2,T$B$"2":GOTO 730 680 PRINT#2,T$"JMP I"FNS$(LN)CHR$(W+1):PRINT#2,"I"FNS$(LN)CHR$(W)": DB ";:W=W+1:FOR L=J+1 TO K-1:PRINT#2,FNS$(ASC(MID$(L$,L,1)));:IF (L-J-1) MOD 15=14 AND L="A" AND MID$(L$,K3,1)<="Z") OR (MID$(L$,K3,1)>="0" AND MID$(L$,K3,1)<="9"):L2$=L2$+MID$(L$,K3,1):K3=K3+1:WEND 800 F(1)=1:IF VAL(L2$) THEN PRINT#2,H$L2$:ELSE PRINT#2,Q$L2$ 810 PRINT#2,T$B$;:IF INSTR(L$,"LPRINT")=1 THEN PRINT#2,"5":ELSE PRINT#2,"2" 820 F(1)=1:PRINT#2,T$"CALL PNUM":IF INSTR(J,L$,";")<1 THEN PRINT#2,T$"CALL PLNE" 830 RETURN 840 IF I<>TOKENS THEN 2010 850 IF INSTR(L$,"++")=1 THEN PRINT#2,T$Q$MID$(L$,3)I$P$MID$(L$,3):RETURN 860 IF INSTR(L$,"--")=1 THEN PRINT#2,T$Q$MID$(L$,3)S$P$MID$(L$,3):RETURN 870 U$=FNP$(L$,"="):GOSUB 350:V$=U$:J=0:WHILE (V$(J)<>"" AND V$(J)<>V$ AND J="A" AND V1$<="Z" THEN 930 910 IF INSTR(V1$,"+")>0 OR INSTR(V1$,"-")>0 OR INSTR(V1$,"*")>0 OR INSTR(V1$,"/")>0 THEN 930 920 PRINT#2,T$H$V1$:PRINT#2,T$P$V$:RETURN 930 YES=0:GOSUB 1180:IF YES THEN RETURN 940 EX=0 950 K=1:WHILE (MID$(V1$,K,1)>="A" AND MID$(V1$,K,1)<="Z") OR (MID$(V1$,K,1)>="0" AND MID$(V1$,K,1)<="9"):K=K+1:WEND 960 K1=K:V4=0 970 IF K1<=LEN(V1$) THEN IF MID$(V1$,K1,1)<=" " THEN K1=K1+1:GOTO 970 980 V3$=LEFT$(V1$,1):OF=0:IF V3$>="0" AND V3$<="9" THEN OF=1 990 IF OF=1 THEN PRINT#2,T$H$VAL(V1$) 1000 V3=0:IF OF=0 AND EX MOD 2=0 AND (MID$(V1$,1,1)="-") THEN V3=1:V2=2 1010 IF OF=0 AND EX MOD 2=0 AND INSTR(V1$,"NOT")=1 THEN V3=1:V2=7 1020 IF EX=0 AND V3=1 THEN PRINT#2,T$D$"0" 1030 IF OF=0 AND V3<>1 THEN PRINT#2,T$Q$LEFT$(V1$,K-1) 1040 IF V3=1 THEN V3=0:V4=1:K=K1+V2\2:K1=K:GOTO 970 1050 EX=EX+V4:IF EX MOD 2<>1 THEN 1080 1060 IF V2=1 THEN PRINT#2,T$I2$:GOTO 1080 1070 PRINT#2,T$"CALL ARITH"FNS$(V2):F(3+V2)=1 1080 V2=0:U$=MID$(V1$,K1):GOSUB 350:V2$=LEFT$(U$,1):IF V2$>" " THEN V2=INSTR("+-*/",V2$) 1090 IF V2<1 THEN L=1:WHILE L<6 AND V2<1:V2=INSTR(U$,L$(L)):V2=-(L+4)*(V2=1):L=L+1:WEND:IF V2<1 AND V2$>" " THEN 2960 1100 IF V2<1 THEN V1$=MID$(V1$,K1):GOTO 1160 1110 IF V2>4 THEN K=K1+LEN(L$(V2-4)):ELSE IF V2>0 THEN K=K1+1 1120 V1$=MID$(V1$,K):K=1:K1=1 1130 IF EX MOD 2=0 THEN EX=EX+1 1140 PRINT#2,T$S1$:IF LEN(V1$)>0 THEN WHILE (MID$(V1$,K,1)<=" " AND K<=LEN(V1$)):K=K+1:WEND:V1$=MID$(V1$,K):K=1 1150 IF V1$>" " THEN 950 1160 IF V1$>STRING$(LEN(V1$)," ") THEN 2960 1170 PRINT#2,T$P$LEFT$(L$,J-2):RETURN 1180 K=1:WHILE INSTR(V1$,R$(K))<>1 AND K<=TOKENS:K=K+1:WEND 1190 IF K>TOKENS THEN RETURN 1200 YES=1 1210 IF R$(K)="VAL(" THEN 1390 1220 IF R$(K)="STR$(" THEN 1410 1230 IF R$(K)="LEN(" THEN 1420 1240 IF R$(K)="PEEK(" THEN 1430 1250 IF R$(K)="IPEEK(" THEN 1450 1260 IF R$(K)="VARPTR(" THEN 1470 1270 IF R$(K)="CHR$(" THEN 1480 1280 IF R$(K)="ASC(" THEN 1520 1290 IF R$(K)="LEFT$(" THEN 1530 1300 IF R$(K)="RIGHT$(" THEN 1600 1310 IF R$(K)="MID$(" THEN 1660 1320 IF R$(K)="STRING$(" THEN 1820 1330 IF R$(K)="INKEY$" THEN 1350 1340 YES=0:RETURN 1350 PRINT#1,T$"MVI C,11! CALL 0005! ORA A! JNZ $+12" 1360 PRINT#1,T$H$"0!"P$V$"+2!JMP $+20" 1370 PRINT#1,T$"MVI E,255!MVI C,6!CALL 0005!"H$"1!"P$V$"+2!"Q$V$"!MOV M,A" 1380 RETURN 1390 F(30)=1:V2$=MID$(V1$,5):V2$=FNP$(V2$,")") 1400 PRINT#2,T$Q$V2$SW$Q$V2$"+2":PRINT#2,T$"MOV B,H!MOV C,L!CALL ASCBIN":PRINT#2,T$P$V$:RETURN 1410 F(31)=1:V2$=MID$(V1$,6):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:PRINT#2,T$D$"Z"V$E$Q$V2$"!CALL STR":RETURN 1420 V2$=MID$(V1$,5):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:PRINT#2,T$Q$V2$"+2!"P$V$:RETURN 1430 V2$=MID$(V1$,6):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:IF V2$<"A" THEN PRINT#2,T$H$;:ELSE PRINT#2,T$Q$; 1440 PRINT#2,V2$"!MOV A,M!"H$"0!MOV L,A!"P$V$:RETURN 1450 V2$=MID$(V1$,7):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:IF V2$<"A" THEN PRINT#2,T$H$;:ELSE PRINT#2,T$Q$; 1460 PRINT#2,V2$"!MOV E,M"I$"MOV D,M"SW$P$V$:RETURN 1470 V2$=MID$(V1$,8):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:PRINT#2,T$H$"Z"V2$E$P$V$:RETURN 1480 V2$=MID$(V1$,6):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:IF MID$(V2$,1,1)<="9" AND MID$(V2$,1,1)>="0" THEN V2=VAL(V2$):GOTO 1500 1490 PRINT#2,T$Q$V$SW$Q$V2$"!MOV A,L!STAX D":GOTO 1510 1500 PRINT#2,T$Q$V$"!MVI A,"V2"!MOV M,A" 1510 PRINT#2,T$H$"1!"P$V$"+2":RETURN 1520 V2$=MID$(V1$,5):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$:PRINT#2,T$Q$V2$"!MOV A,M!MOV L,A!MOV H,0!"P$V$:RETURN 1530 F(32)=1:V2$=MID$(V1$,7):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$ 1540 V3$=FNP$(V2$,","):V4$=MID$(V2$,INSTR(V2$,",")+1) 1550 U$=V4$:GOSUB 350:V4$=U$:U$=V3$:GOSUB 350:V3$=U$ 1560 IF V4$<"A" THEN PRINT#2,T$H$V4$:ELSE PRINT#2,T$Q$V4$ 1570 PRINT#2,T$P$V$"+2" 1580 IF V$=V3$ THEN RETURN:ELSE PRINT#2,T$PH$ 1590 PRINT#2,T$Q$V$"!MOV D,H!MOV E,L!"Q$V3$"!POP B":PRINT#2,T$"CALL STRMV":RETURN 1600 F(32)=1:V2$=MID$(V1$,8):U$=FNP$(V2$,")"):GOSUB 350:V2$=U$ 1610 V3$=FNP$(V2$,","):V4$=MID$(V2$,INSTR(V2$,",")+1) 1620 U$=V4$:GOSUB 350:V4$=U$:U$=V3$:GOSUB 350:V3$=U$ 1630 IF V4$<"A" THEN PRINT#2,T$H$V4$:ELSE PRINT#2,T$Q$V4$ 1640 PRINT#2,T$P$V$"+2" 1650 PRINT#2,T$PH$E$PH$E$Q$V3$SW$Q$V3$"+2!"I2$:PRINT#2,T$"POP D!MOV A,D!CMA!MOV D,A!MOV A,E!CMA!MOV E,A":PRINT#2,T$"INX D!"I2$SW$Q$V$SW$"POP B":PRINT#2,T$"CALL STRMV":RETURN 1660 F(32)=1:V2$=MID$(V1$,6):V2$=FNP$(V2$,")") 1670 V3=INSTR(V2$,","):V4=INSTR(V3+1,V2$,",") 1680 IF V4=0 THEN 1770 1690 V3$=LEFT$(V2$,V3-1):V4$=MID$(V2$,V3+1,V4-V3-1):V5$=MID$(V2$,V4+1):U$=V3$:GOSUB 350:V3$=U$:U$=V4$:GOSUB 350:V4$=U$:U$=V5$:GOSUB 350:V5$=U$ 1700 PRINT#2,T$Q$V$E$PH$E$Q$V3$E$PH$ 1710 IF V4$<"A" THEN PRINT#2,T$H$V4$:ELSE PRINT#2,T$Q$V4$ 1720 PRINT#2,T$"POP D"I1$IS$E$PH$ 1730 IF V5$<"A" THEN PRINT#2,T$H$V5$:ELSE PRINT#2,T$Q$V5$ 1740 PRINT#2,T$P$V$"+2" 1750 PRINT#2,T$PH$E$"POP B!POP H!POP D!CALL STRMV" 1760 RETURN 1770 V3$=LEFT$(V2$,V3-1):V4$=MID$(V2$,V3+1):U$=V3$:GOSUB 350:V3$=U$:U$=V4$:GOSUB 350:V4$=U$ 1780 PRINT#2,T$Q$V$E$PH$E$Q$V3$E$PH$ 1790 IF V4$<"A" THEN PRINT#2,T$H$V4$:ELSE PRINT#2,T$Q$V4$ 1800 PRINT#2,T$"POP D"I1$IS$E$PH$ 1810 PRINT#2,T$PH$E$Q$V3$SW$Q$V3$"+2!"I2$:PRINT#2,T$"POP D!MOV A,D!CMA!MOV D,A!MOV A,E!CMA!MOV E,A":PRINT#2,T$"INX D!"I2$I$PH$"!POP B!POP H!POP D":PRINT#2,T$"CALL STRMV":RETURN 1820 V2$=MID$(V1$,9):V3=INSTR(V2$,","):V3$=MID$(V2$,V3+1):V2$=LEFT$(V2$,V3-1):U$=V2$:GOSUB 350:V2$=U$:U$=LEFT$(V3$,INSTR(V3$,")")-1):GOSUB 350:V3$=U$ 1830 IF V2$>="A" THEN PRINT#2,T$"LHLD "V2$E$P$V$"+2!"S1$:ELSE PRINT#2,T$D$V2$E$H$V2$E$P$V$"+2" 1840 PRINT#2,T$Q$V$:IF V3$>="A" THEN PRINT#2,T$PH$E$Q$V3$"!MOV A,M!POP H!STA $+4!MVI A,0":ELSE PRINT#2,T$"MVI A,"VAL(V3$) 1850 PRINT#2,T$"MOV M,A!DCX D"I$"MOV A,D!ORA E!JNZ $-7":RETURN 1860 J=INSTR(L$,"=")+1:IF J THEN V1$=MID$(L$,J):ELSE 1880 1870 U$=V1$:GOSUB 350:V1$=U$:YES=0:GOSUB 1180:IF YES THEN RETURN 1880 J=INSTR(L$,CHR$(34))+1:K=INSTR(J,L$,CHR$(34))-1:IF J=1 AND K=-1 THEN 1930 1890 IF KK THEN PRINT#2,T$"INX H" 1920 NEXT:PRINT#2,T$H$K-J+1;E$P$V$"+2":RETURN 1930 J=INSTR(L$,"=")+1:V2$=MID$(L$,J):K=1:U$=V2$:GOSUB 350:V2$=U$:K=INSTR(V2$,"$"):V3$=LEFT$(V2$,K):V2$=MID$(V2$,K+1):U$=V3$:GOSUB 350:V3$=U$:U$=V2$:GOSUB 350:V2$=U$ 1940 IF V3$=V$ THEN 1990 1950 PRINT#2,T$Q$V3$"+2!"PH$"!POP B":PRINT#2,T$Q$V$E$S1$:PRINT#2,T$Q$V3$:PRINT#2,T$"CALL STRMV":PRINT#2,T$Q$V3$"+2!"P$V$"+2":F(32)=1:IF V2$<=STRING$(LEN(V2$),32) THEN RETURN 1960 U$=V2$:GOSUB 350:V2$=U$:IF LEFT$(V2$,1)<>"+" THEN 2960 1970 V2$=MID$(V2$,2):U$=V2$:GOSUB 350:V2$=U$:K=INSTR(V2$,"$"):V3$=LEFT$(V2$,K):V2$=MID$(V2$,K+1):U$=V3$:GOSUB 350:V3$=U$:U$=V2$:GOSUB 350:V2$=U$:PRINT#2,T$Q$V3$"+2!"PH$"!POP B":PRINT#2,T$Q$V$SW$Q$V$"+2"I1$S1$ 1980 PRINT#2,T$Q$V3$"!CALL STRMV":PRINT#2,T$Q$V3$"+2"SW$Q$V$"+2!"I2$:PRINT#2,T$P$V$"+2" 1990 IF V2$>STRING$(LEN(V2$),32) THEN 1960 2000 RETURN 2010 IF INSTR(L$,"SIZE(")<>1 THEN 2060 2020 V2$=MID$(L$,6):U$=FNP$(V2$,","):GOSUB 350:UV=VAL(MID$(L$,INSTR(L$,",")+1)):J=0:WHILE (V$(J)<>"" AND V$(J)<>U$ AND J1 THEN 2080 2070 V=VAL(MID$(L$,5)):V$=FNS$(V):PRINT#2,T$"JMP I"V$:RETURN 2080 IF INSTR(L$,"GOSUB")<>1 THEN 2090:ELSE V=VAL(MID$(L$,6)):V$=FNS$(V):PRINT#2,T$"CALL I"V$:RETURN 2090 IF INSTR(L$,"RETURN")<>1 THEN 2100:ELSE PRINT#2,T$"RET":RETURN 2100 IF INSTR(L$,"END")<>1 THEN 2110:ELSE PRINT#2,T$"JMP 000H":RETURN 2110 IF INSTR(L$,"STOP")<>1 THEN 2120:ELSE PRINT#2,T$"JMP 000H":RETURN 2120 IF INSTR(L$,"INPUT")<>1 THEN 2170 2130 U$=MID$(L$,6):GOSUB 350:V$=U$:J=0:WHILE V$(J)<>V$ AND V$(J)<>"" AND J0 THEN 2160 2150 F(13)=1:PRINT#2,T$"CALL GETNUM":PRINT#2,T$P$V$:RETURN 2160 PRINT#2,T$Q$V$:PRINT#2,T$S1$:PRINT#2,T$"CALL GETSTR!"P$V$"+2":F(14)=1:RETURN 2170 IF INSTR(L$,"IF")<>1 THEN 2450 2180 K1=1:K2=0 2190 K=INSTR(K1,L$,"THEN"):IF K<1 THEN 2960 2200 FOR K3=1 TO K:K2=ABS(K2+(MID$(L$,K3,1)=CHR$(34))):NEXT:IF K2 THEN K1=K+1:GOTO 2190 2210 V1$="":V2$="":V3$="" 2220 K1=3:WHILE MID$(L$,K1,1)<>"<" AND MID$(L$,K1,1)<>">" AND MID$(L$,K1,1)<>"=":IF MID$(L$,K1,1)>" " THEN V1$=V1$+MID$(L$,K1,1) 2230 K1=K1+1:WEND 2240 WHILE MID$(L$,K1,1)<"A" AND (MID$(L$,K1,1)>"9" OR MID$(L$,K1,1)<"0"):IF MID$(L$,K1,1)="<" OR MID$(L$,K1,1)=">" OR MID$(L$,K1,1)="=" THEN V2$=V2$+MID$(L$,K1,1) 2250 K1=K1+1:WEND 2260 WHILE K1" " THEN V3$=V3$+MID$(L$,K1,1) 2270 K1=K1+1:WEND 2280 IF V1$="" OR V2$="" OR V3$="" THEN 2960 2290 U$=V1$:GOSUB 350:V1$=U$:U$=V2$:GOSUB 350:V2$=U$:U$=V3$:GOSUB 350:V3$=U$:K3=0:K2=INSTR(V1$,"$"):IF V2$="=" THEN K3=1:IF K2 THEN U$="SC":F(15)=1 2300 IF V2$="<>" OR V3$="><" THEN K3=2:IF K2 THEN U$="SC4":F(16)=1 2310 IF V2$="=<" OR V2$="<=" THEN K3=3:IF K2 THEN U$="SC9":F(19)=1 2320 IF V2$=">=" OR V2$="=>" THEN K3=4:IF K2 THEN U$="SC8":F(18)=1 2330 IF V2$="<" THEN K3=5:IF K2 THEN U$="SC5":F(17)=1 2340 IF V2$=">" THEN K3=6:IF K2 THEN U$="SCA":F(20)=1 2350 IF K3=0 THEN 2960 2360 IF K2 THEN PRINT#2,T$D$"Z"V1$E$H$"Z"V3$"!CALL "U$:GOTO 2430 2370 IF MID$(V1$,1,1)<="9" AND MID$(V1$,1,1)>="0" THEN PRINT#2,T$D$V1$:ELSE PRINT#2,T$Q$V1$E$S1$ 2380 IF MID$(V3$,1,1)<="9" AND MID$(V3$,1,1)>="0" THEN PRINT#2,T$H$V3$:ELSE PRINT#2,T$Q$V3$ 2390 IF K3=1 THEN U$="NC":F(21)=1:ELSE IF K3=2 THEN U$="NC1":F(22)=1 2400 IF K3=3 THEN U$="NC5":F(26)=1:ELSE IF K3=4 THEN U$="NC3":F(24)=1 2410 IF K3=5 THEN U$="NC2":F(23)=1:ELSE IF K3=6 THEN U$="NC4":F(25)=1 2420 PRINT#2,T$"CALL "U$ 2430 PRINT#2,T$"ORA A!JZ I"FNS$(LN(LZ)) 2440 L1$=MID$(L$,K+4)+":"+L1$:RETURN 2450 IF INSTR(L$,"POKE")<>1 THEN 2520 2460 K1=5 2470 V1$="":WHILE MID$(L$,K1,1)<"0":K1=K1+1:WEND:V1$=MID$(L$,K1):K1=INSTR(V1$,",")-1:V2$=LEFT$(V1$,K1) 2480 K1=K1+2:WHILE MID$(V1$,K1,1)<"0":K1=K1+1:WEND:IF K1>1 THEN V1$=MID$(V1$,K1):K1=1:WHILE MID$(V2$,K1,1)<"0":K1=K1+1:WEND:IF K1>1 THEN V2$=LEFT$(V1$,K1) 2490 IF LEFT$(V2$,1)<"A" THEN PRINT#2,T$D$V2$:ELSE PRINT#2,T$Q$V2$E$S1$ 2500 IF LEFT$(V1$,1)<"A" THEN PRINT#2,T$H$V1$:ELSE PRINT#2,T$Q$V1$ 2510 PRINT#2,T$"MOV A,L!STAX D":RETURN 2520 IF INSTR(L$,"IPOKE")<>1 THEN 2540 2530 K1=6:GOSUB 2470:PRINT#2,T$"INX D!MOV A,H!STAX D":RETURN 2540 IF INSTR(L$,"CALL")<>1 THEN 2580 2550 XP=5:WHILE MID$(L$,XP,1)<=" ":XP=XP+1:WEND 2560 IF MID$(L$,XP,1)>="A" THEN XP2=XP+1:WHILE (XP2="0"):XP2=XP2+1:WEND:PRINT#2,T$Q$MID$(L$,XP,XP2-XP)E$"SHLD $+4!CALL 9999":RETURN 2570 PRINT#2,T$"CALL "VAL(MID$(L$,XP)):RETURN 2580 IF INSTR(L$,"OPEN")<>1 THEN 2650 2590 F(28)=1:XP=5:WHILE (MID$(L$,XP,1)>"9" OR MID$(L$,XP,1)<"1") AND XPCHR$(34):PRINT#2,MID$(L$,XX,1);:XX=XX+1:WEND 2640 PRINT#2,"'":W=W+1:PRINT#2,"I"FNS$(W)": "H$FNS$(W-1)E$D$"FCB"FNS$(FIL)"!MVI B,"XX-XP-1;"!CALL ROPEN":RETURN 2650 IF INSTR(L$,"GET")<>1 AND INSTR(L$,"PUT")<>1 THEN 2700 2660 F(28)=1:FIL=VAL(MID$(L$,4)):IF FIL=0 THEN 2960 2670 XP=INSTR(L$,","):XP=XP+1:XQ=INSTR(XP,L$,","):U$=MID$(L$,XQ+1):GOSUB 350:BUF$=U$:XX$=MID$(L$,XP,XQ-XP):IF VAL(XX$)<1 THEN 2690 2680 PRINT#2,T$Q$BUF$"!MOV B,H!MOV C,L":PRINT#2,T$D$"FCB"FNS$(FIL):PRINT#2,T$H$XX$S$"CALL RGET":RETURN 2690 PRINT#2,T$Q$BUF$"!MOV B,H!MOV C,L":PRINT#2,T$D$"FCB"FNS$(FIL):U$=XX$:GOSUB 350:XX$=U$:PRINT#2,T$Q$XX$S$"CALL R"LEFT$(L$,3):RETURN 2700 IF INSTR(L$,"CLOSE")<>1 THEN 2740 2710 F(28)=1 2720 FIL=VAL(MID$(L$,6)):IF FIL<1 THEN 2960 2730 PRINT#2,T$D$"FCB"FNS$(FIL)"!CALL FCLOS":RETURN 2740 IF INSTR(L$,"FOR")<>1 THEN 2930 2750 U=U+1:Z$=L$:U$=MID$(L$,4,INSTR(L$,"TO")-4):GOSUB 350:L$=U$:I=TOKENS:GOSUB 840:L$=Z$:XP=INSTR(L$,"TO"):XP1=INSTR(L$,"STEP"):NX=U-N-1:NX$=FNS$(U)+CHR$(13)+CHR$(10)+"NXT"+FNS$(U)+":" 2760 XP=XP+2:WHILE MID$(L$,XP,1)<=" ":XP=XP+1:WEND:U$=MID$(L$,XP):GOSUB 350:Z$=U$:IF Z$<"A" THEN 2780 2770 IF Z$>="A" THEN 2900:ELSE 2960 2780 PRINT#2,"FOR"FNS$(U)": "D$VAL(Z$) 2790 IF XP1 THEN 2810 2800 F(23)=1:PRINT#2,T$"CALL NC2!ORA A!JNZ NXT"FNS$(U):NXT$(NX)=T$+Q$+V$+I$+P$+V$+"!JMP FOR"+NX$:RETURN 2810 Z$=MID$(L$,XP1+5):WHILE LEFT$(Z$,1)<=" ":Z$=MID$(Z$,2):WEND:IF LEFT$(Z$,1)="-" THEN 2860 2820 F(23)=1:PRINT#2,T$"CALL NC2!ORA A!JNZ NXT"FNS$(U) 2830 IF Z$<"A" THEN IF VAL(Z$)<6 THEN NXT$(NX)=T$+Q$+V$+E$:FOR XP=1 TO VAL(Z$):NXT$(NX)=NXT$(NX)+"INX H!":NEXT XP:NXT$(NX)=NXT$(NX)+P$+V$+"!JMP FOR"+NX$:RETURN 2840 IF Z$<"A" THEN NXT$(NX)=T$+Q$+V$+E$+D$+Z$+I1$+P$+V$+"!JMP FOR"+NX$:RETURN 2850 NXT$(NX)=T$+Q$+V$+SW$+Q$+Z$+I1$+P$+V$+"!JMP FOR"+NX$:RETURN 2860 F(23)=1:PRINT#2,T$"CALL NC4!ORA A!JNZ NXT"FNS$(U) 2870 IF Z$<"A" THEN IF VAL(Z$)>-6 THEN NXT$(NX)=T$+Q$+V$+E$:FOR XP=1 TO VAL(Z$):NXT$(NX)=NXT$(NX)+IS$+E$:NEXT XP:NXT$(NX)=NXT$(NX)+P$+V$+"!JMP FOR"+NX$:RETURN 2880 IF Z$<"A" THEN NXT$(NX)=T$+Q$+V$+E$+D$+FNS$(ABS(VAL(Z$)))+SW$+"CALL ARITH2!"+P$+V$+"!JMP FOR"+NX$:F(5)=1:RETURN 2890 NXT$(NX)=T$+Q$+V$+SW$+Q$+MID$(Z$,2)+"!CALL ARITH2!"+P$+V$+"!JMP FOR"+NX$:F(5)=1:RETURN 2900 XP=1:WHILE MID$(Z$,XP,1)>="A" AND XP1 THEN 2950 2940 N=N+1:PRINT#2,NXT$(U-N):RETURN 2950 RETURN 2960 PRINT"SYNTAX ERROR IN LINE":PRINT LN;L$:END 2970 PRINT#2,T$"CALL 0000H" 2980 IF F(28) THEN FOR J=1 TO 3:PRINT#2,"FCB"FNS$(J)": DB"T$;:FOR TOT=1 TO 35:PRINT#2,"0,";:NEXT TOT:PRINT#2,"0":NEXT J 2990 GOSUB 3020:TOT=0:J=0:WHILE V$(J)<>"":IF INSTR(V$(J),"$") THEN MAX=S(J):IF MAX<1 THEN MAX=80 3000 IF INSTR(V$(J),"$") THEN TOT=TOT+MAX:J$=FNS$(257+TOT-MAX):PRINT#2,"Z"V$(J)": DW STACK+"J$",0":ELSE PRINT#2,"Z"V$(J)": DW 0" 3010 J=J+1:WEND:PRINT#2,T$"DS 64":PRINT#2,"STACK:":PRINT#2,"SAREA: DW 0":PRINT#2,T$"END":CLOSE:END 3020 CLOSE 1:A$="" 3030 OPEN"I",1,LD$+":BCBC.LIB" 3040 IF F(1) THEN F(0)=1:F(2)=1 3050 IF F(12) THEN F(7)=1 3060 IF F(16) THEN F(15)=1 3070 IF F(18) THEN F(17)=1 3080 IF F(19) THEN F(17)=1:F(15)=1 3090 IF F(20) THEN F(19)=1:F(17)=1:F(15)=1 3100 IF F(22) OR F(23) THEN F(21)=1 3110 IF F(24) OR F(25) THEN F(23)=1:F(21)=1 3120 IF F(26) THEN F(25)=1:F(23)=1:F(21)=1 3130 IF F(31) THEN F(2)=1 3140 FOR I=0 TO 33:IF F(I) THEN A=I+1:GOSUB 3160 3150 NEXT I:RETURN 3160 WHILE VAL(A$)A+1:LINE INPUT #1,A$ 3180 IF EOF(1) THEN 3260 3190 IF C$="N" THEN IF INSTR(A$,";")<1 AND VAL(A$)<1 THEN PRINT#2,A$ 3200 IF C$="Y" THEN IF VAL(A$)<1 THEN PRINT#2,A$ 3210 WEND 3220 RETURN 3230 PRINT"ERROR: LIBRARY (BCBC.LIB) NOT FOUND!" 3240 PRINT"CORRECT YOUR LIBRARY DRIVE LETTER (NOW "LD$"): ";:INPUT LD$ 3250 GOTO 3020 3260 PRINT"FATAL ERROR: UNEXPECTED END OF LIBRARY (BCBC.LIB)":END