10 REM > MakeLP 20 MODE&87:PROCG(&D00):MODE&84:G$="1.13":PROCM:DIMH%&300:ONERRORIFFNJPRINT" at line ";ERL:END 30 *FX4 40 REPEATUNTILFNG:*FX4 50 END 60 DEFPROCM:j%=FALSE:g%=FALSE:h%=FALSE:M%=FALSE:G%=FALSE:c$="Code for ":Q%=66:R%=60:b%=TRUE:_%=FALSE:T%=TRUE:N%=TRUE:I%=TRUE:D%=TRUE:E%=TRUE:J%=TRUE:L%=TRUE:e%=0:M=&FFEE:YA=&FFE3:N=&FFCE:b=&FFD7:DIMA$(101):FORl%=32TO101:A$(l%)=" ":NEXT:FORl%=32TO101:READA$(l%):IFA$(l%)<>""A$(l%)=EVALA$(l%)ELSEA$(l%)="" 70 NEXT 80 DATA CHR$27+"@",,CHR$27+"E",,CHR$27+"G",,,,,CHR$27+"4",,,,,,,,,,CHR$27+"S0",,,,CHR$27+"W1",,CHR$27+"S1",,,,,, 90 DATA CHR$27+"R"+CHR$3+"#"+CHR$27+"R"+CHR$0,,CHR$27+"F",,CHR$27+"H",,,,,CHR$27+"5",,,,,,,,,,CHR$27+"T",,,,CHR$27+"W0",,CHR$27+"T",,,,,, 100 DATA CHR$27+"-0",CHR$27+"-1",,,,,,,,,,,,,, 110 ENDPROC 120 DEFFNB(A$):LOCALl%,B$:B$="":IFA$="++":="Set bit 7" 130 IFA$="--":="Clear bit 7" 140 IFA$=""="" 150 FORl%=1TOLENA$:m$=MID$(A$,l%,1):IFl%<>1 B$=B$+"," 160 IFASCm$<32ORASCm$>126 B$=B$+STR$ASCm$ELSEIF(m$>="0"ANDm$<="9")ORm$=","B$=B$+CHR$34+m$+CHR$34ELSEB$=B$+m$ 170 NEXT:=B$ 180 DEFFNG:CLS:PRINTSPC4"Printer Driver Generator ";G$'SPC4;STRING$(29,"="):PRINT'SPC9"(C)1992 J.G.Harston":PRINT''SPC5"1 : General settings":PRINT'SPC5"2 : Letter extensions":PRINT'SPC5"3 : Save settings":PRINT'SPC5"4 : Load settings":PRINT'SPC5"5 : (Create View Driver)":PRINT'SPC5"6 : Create lp Program" 190 PRINT''SPC5"0 : Exit"'':PRINTSPC5"Press a key: ";:REPEATREPEATA$=GET$:UNTILINSTR("0123456*"+CHR$13+CHR$0,A$):IFA$<>"*"PRINTA$ 200 IFA$="*"INPUTLINE"*"A$:OSCLIA$:A$="":PRINT":"; 210 IFA$=CHR$0PRINT"Saving...";:OSCLI"SAVE "+MID$($(PAGE+4),INSTR($(PAGE+4),">")+1)+" "+STR$~PAGE+" "+STR$~TOP+" FFFF0000 FFFFFB00" 220 IFA$="1"PROCC 230 IFA$="2"PROCH 240 IFA$="3"PROCN 250 IFA$="4"PROCO 260 IFA$="5"PROCI 270 IFA$="6"PROCJ 280 UNTILA$<>"":=A$="0" 290 DEFFNJ:IFERR=17ANDINKEY-1=0=0 300 LOCALA$:REPORT:A$=GET$:=INKEY-1 310 DEFPROCC:CLS:PRINTSPC10"General Parameters"':PRINT"Auto linefeed? "FND(b%)''"Paper length: ";Q%''"Text page length: ";R%:PRINT'"FF at end of page? "FND(_%)''"LF at end of page? "FND(T%):PRINT'"FF after last page? "FND(N%):PRINT'"Convert CHR$96 (`) to pound? "FND(J%) 320 PRINT"Convert CHR$163 ("CHR$163") to pound? "FND(L%):PRINTc$"pound: "FNB(A$(64)):PRINT'"Highlight 1:":PRINTc$"underline on: ";FNB(A$(97)):PRINTc$"underline off: ";FNB(A$(96)):PRINT'"Use extended highlights? ";FND(I%)':IFI%PRINT' 330 IFNOTI%PRINT"Highlight 2:"'c$"bold on: ";FNB(A$(98))'c$"bold off: ";FNB(A$(99)) 340 PRINT'':PRINTSTRING$(40,"=")"Printer reset with code '@' (see page 2)Pound also defined with code '`'";:REPEATPRINTTAB(13,2);:b%=FNC(b%):INPUTTAB(18,4);x%:PROCx(18,4):IFx%>10 Q%=x%:PRINTTAB(14,4);x%;" " 350 INPUTTAB(22,6);x%:PROCx(22,6):IFx%>10 R%=x%:PRINTTAB(18,6);x%;" " 360 PRINTTAB(17,8);:_%=FNC(_%):IF_%T%=FALSE:PRINTTAB(19,10);"No " 370 IFNOT_%PRINTTAB(17,10);:T%=FNC(T%) 380 PRINTTAB(18,12);:IF_%+T%=0 N%=0:PRINT"? No "ELSEN%=FNC(N%) 390 PRINTTAB(27,14);:J%=FNC(J%):PRINTTAB(28,15);:L%=FNC(L%):PRINTTAB(0,17)"Code: ";:INPUTLINE""x$:PROCx(0,17):IFx$<>""A$(64)=FNA(x$):PRINTTAB(16,16)FNB(A$(64));:PROCx(POS,VPOS):IFx$=" "A$(64)="" 400 PRINTTAB(0,21)c$"on: ";:INPUTLINE""x$:PROCx(0,21):IFx$<>""A$(97)=FNA(x$):PRINTTAB(24,19)FNB(A$(97));:PROCx(POS,VPOS):IFx$=" "A$(97)="" 410 PRINTTAB(0,21)c$"off: ";:INPUTLINE""x$:PROCx(0,21):IFx$<>""A$(96)=FNA(x$):PRINTTAB(24,20)FNB(A$(96));:PROCx(POS,VPOS):IFx$=" "A$(96)="" 420 PRINTTAB(23,22);:I%=FNC(I%):PRINT:IFI%PROCx(POS,VPOS):PROCx(0,VPOS+1):PROCx(0,VPOS+1)ELSEPRINT"Highlight 2:"'c$"bold on: ";FNB(A$(98))'c$"bold off: ";FNB(A$(99)) 430 IFNOTI%PRINTTAB(0,27)c$"on: ";:INPUTLINE""x$:PROCx(0,27):IFx$<>""A$(98)=FNA(x$):PRINTTAB(19,25)FNB(A$(98));:PROCx(POS,VPOS):IFx$=" "A$(98)="" 440 IFNOTI%PRINTTAB(0,27)c$"off: ";:INPUTLINE""x$:PROCx(0,27):IFx$<>""A$(99)=FNA(x$):PRINTTAB(19,26)FNB(A$(99));:PROCx(POS,VPOS):IFx$=" "A$(99)="" 450 PRINTTAB(0,28)"Ok";:i%=FNC(FALSE):PROCx(0,28):UNTILi%:ENDPROC 460 DEFPROCx(X%,Y%):PRINTTAB(X%,Y%);SPC(39-POS);:ENDPROC 470 DEFFND(F%):IFF%:="Yes"ELSE="No " 480 DEFFNH(l%):IFl%=D%:="Set bit 7" 490 IFl%<>E%:=FNB(A$(l%))ELSE="Clear bit 7" 500 DEFPROCD(A%):CLS:FORl%=0TO31:PRINTTAB(0,l%);CHR$(l%+A%+32);" ";FNH(l%+A%);TAB(20,l%);CHR$(l%+A%+64);" ";FNH(l%+A%+32);:NEXT:ENDPROC 510 DEFPROCH:t%=32:PROCD(t%):*FX4,1 520 l%=0:REPEATREPEATPRINTTAB(1+20*((l%DIV32)AND1),l%MOD32);":";TAB(20,31);CHR$(l%+t%+32);" ";LEFT$(FNB(A$(l%+t%)),16);SPC(38-POS);TAB(20,31);:K%=GET:m%=l%:IFK%=136 m%=l%-32 530 IFK%=137 m%=l%+32 540 IFK%=138 m%=l%+1 550 IFK%=139 m%=l%-1 560 IFK%=135 t%=t%EOR32:PROCD(t%) 570 IFm%<0ORm%>62 m%=l% 580 IFm%<>l%PRINTTAB(1+20*((l%DIV32)AND1),l%MOD32);" ";:l%=m% 590 UNTILK%<127ANDK%>31:PROCT:UNTIL0:ENDPROC 600 DEFPROCT:PRINTTAB(22,31);SPC16;TAB(22,31);:C$=FNA(FNE(CHR$K%,17)):IFLEFT$(C$,1)=" "C$="" 610 IFC$=""ANDD%=l%D%=TRUE 620 IFC$=""ANDE%=l%E%=TRUE 630 IFC$="++"ANDD%>TRUEIF((D%-t%)AND&FFC0)=0PRINTTAB(2+20*((D%-t%)DIV32),D%AND31);SPC18; 640 IFC$="--"ANDE%>TRUEIF((E%-t%)AND&FFC0)=0PRINTTAB(2+20*((E%-t%)DIV32),E%AND31);SPC18; 650 IFC$="++"C$="":D%=(l%+t%)OR(l%+t%<32) 660 IFC$="--"C$="":E%=(l%+t%)OR(l%+t%<32) 670 A$(l%+t%)=C$:PRINTTAB(2+20*((l%DIV32)AND1),l%MOD32);FNH(l%+t%);SPC(20-(POSMOD20));:UNTIL0 680 DEFFNA(A$):LOCALl%,B$:l%=1:REPEATm$=MID$(A$,l%,1):IF(m$<"0"ORm$>"9")ANDm$<>CHR$34 B$=B$+m$:l%=l%+1 690 IFm$=CHR$34ANDMID$(A$,l%+2,1)=CHR$34 B$=B$+MID$(A$,l%+1,1):l%=l%+3 700 IF(m$>="0"ANDm$<="9")B$=B$+CHR$VALMID$(A$,l%):l%=l%+INSTR(MID$(A$,l%)+",",",")-1 710 IFMID$(A$,l%,1)=","l%=l%+1 720 UNTILl%>LENA$:=B$ 730 DEFFNE(A$,`%):LOCALB%,l%:$H%=A$:l%=LENA$:PRINTA$;:REPEATB%=GET:IFB%=127ANDl%<>0VDU127:l%=l%-1 740 IFB%>31ANDB%<127ANDl%<`%VDUB%:H%?l%=B%:l%=l%+1 750 UNTILB%=13:H%?l%=13:=$H% 760 DEFPROCI:INPUT"Filename to save by: "F$:IFF$=""F$="drv" 770 PRINT'"Assembling View Printer Driver";:FORP=0TO1:C%=P*3+4:P%=&400:O%=H%:O%=H%:[OPTC%:JMPv:JMPQA:JMPIA:RTS:.RA:BRK:.`A:BRK:RTS:]:PROCB(C%):[OPTC%:.QA:LDA#2:JMP&FFEE:.IA:LDA#3:JMP&FFEE:.v:]:IFI%[OPTC%:BITRA:BMIw:] 780 [OPTC%:CMP#&81:BEQx:CMP#&80:BEQy:CMP#13:BEQj:]:IFJ%[OPTC%:CMP#96:BEQq:] 790 IFL%[OPTC%:CMP#163:BEQr:] 800 [OPTC%:JMP&FFEE:.w:.q:.r:.y:.x:.j:RTS:]NEXT:OSCLI"*SAVE "+F$+" "+STR$~H%+" "+STR$~O%+" 400 400":PRINT"...":IFGET 810 ENDPROC 820 DEFFNF:G%=0:M%=TRUE:l%=0:REPEATIFA$(l%)<>""FORm%=1TOLENA$(l%):G%=G%OR(ASCMID$(A$(l%),m%,1)>127):NEXT 830 l%=l%+1:UNTILl%=102ORG%:IFG%:=FNI 840 l%=0:REPEATIFA$(l%)<>""ANDLEFT$(A$(l%),1)<>CHR$27 M%=0 850 l%=l%+1:UNTILl%=102ORM%=0:=0 860 DEFFNI:M%=0:f%=0:l%=0:REPEATIFA$(l%)<>""FORm%=1TOLENA$(l%):PROCQ(ASCMID$(A$(l%),m%,1)):NEXT 870 l%=l%+1:UNTILl%=102OR(M%ANDf%):IFM%ANDf%PRINT"Can't build table with both 0 and 255";:f%=GET:=TRUEELSE=0 880 DEFPROCQ(A%):IFA%=0 M%=TRUE:ENDPROC 890 IFA%=&FF f%=TRUE 900 ENDPROC 910 DEFPROCB(C%):U%=(M%AND128)+(b%AND64)+(_%AND32)+(T%AND16)+(I%AND8)+(J%AND4)+(L%AND2)+(N%AND1):W%=(G%AND128)+(e%AND64):[OPTC%:EQUBU%:EQUB(Q%AND31)+(((E%-32)*4)AND&E0):EQUB(R%AND31)+(((E%-32)*32)AND&E0):EQUBW%+((D%-32)AND(D%>0ANDE%>0)):.F:]:FORl%=0TO101:IFA$(l%)<>""PROCU 920 NEXT:[OPTC%:EQUB255:]:ENDPROC 930 DEFPROCU:[OPTC%:EQUBl%+1:]:IFG%[OPTC%:EQUSA$(l%):EQUBM%AND&FF:]:ENDPROC 940 IFM%[OPTC%:EQUSMID$(A$(l%),2,LENA$(l%)-2):EQUB128+ASCRIGHT$(A$(l%),1):]:ENDPROC 950 [OPTC%:EQUSLEFT$(A$(l%),LENA$(l%)-1):EQUB128+ASCRIGHT$(A$(l%),1):]:ENDPROC 960 DEFPROCJ:PRINT"Create 'lp' program":IFFNFENDPROC 970 INPUT"Filename to save by: "F$:IFF$=""F$="lp" 980 D$=F$:IFINSTR(D$,".")REPEATD$=MID$(D$,INSTR(D$,".")+1):UNTILINSTR(D$,".")=0 990 PRINT"Assembling ";F$:Z%=&FFFF0900:B=0:REPEATO%=H%:P%=Z%:z=B:PROCA(4):IFB>&B00 Z%=&FFFF08C0 1000 UNTILB=z:O%=H%:P%=Z%:PROCA(6):PRINT"Saving ";F$'"Start: &";~Z%AND&FFFF;" End: &";~B:OSCLI"SAVE "+F$+" "+STR$~H%+" "+STR$~O%+" "+STR$~(d%OR&FFFF0000)+" "+STR$~Z%:ENDPROC 1010 DEFPROCA(C%):PROCB(C%):PROCK(C%):PROCE(C%):PROCL(C%):PROCF(C%):PROCP(C%):ENDPROC 1020 DEFPROCK(C%):[OPTC%:.O:LDA#1:STAQ:RTS:.AA:TYA:PHA:JSRO:LDA#124:JSR&FFF4:LDA#15:JSR&FFF4:PLA:TAY:.OA:]:IFN%[OPTC%:JSRn:] 1030 [OPTC%:DECQ:BEQBA:LDA#0:STA&A8:STA&A9:STA&AA:STA&AB:LDX#&A8:LDA#1:JSR&FFDA:._:JSR`:STAo:JMPD:.BA:LDA#3:JSRM:LDA#0:]:IFB<&B00 [OPTC%:JMPN:] 1040 IFB>&AFF [OPTC%:JSRN:LDA#0:LDX#1:JSR&FFF4:CPX#3:BCSSA:LDA#18:JMP&FFF4:.SA:RTS:] 1050 ENDPROC 1060 DEFPROCE(C%):[OPTC%:.R:JSRJA:LDAL:CMP#R%:BCCD:JSRn:.D:LDX#1:]:ENDPROC 1070 DEFPROCL(C%):[OPTC%:.E:BIT&FF:BMIAA:JSRb:BCSOA:]:ENDPROC 1080 DEFPROCF(C%):[OPTC%:CMP#32:BCCTA:]:IF(D%ORE%)>0 [OPTC%:ORAbit7:] 1090 IFJ%[OPTC%:CMP#96:BEQS:] 1100 IFL%[OPTC%:CMP#163:BEQS:] 1110 [OPTC%:.PA:INX:JSRC:JMPE:.TA:CMP#13:BEQR:CMP#10:BEQR:CMP#9:BEQZA:CMP#12:BEQCA:CMP#28:BEQc:CMP#29:]:IFI%[OPTC%:BEQf:]ELSE[OPTC%:BEQUA:] 1120 [OPTC%:BNEE:]:IFJ%ORL%[OPTC%:.S:LDA#64:BNEI:] 1130 [OPTC%:.CA:JSRn:JMPD:]:IFI%[OPTC%:.VA:JMPOA:.f:JSRb:BCSVA:SBC#31:BMIE:CMP#95:BCSE:] 1140 IF(E%ORD%)>0:[OPTC%:CMP#D%:BEQWA:CMP#E%:BNEI:LDA#0:.KA:STAXA:JMPE:.WA:LDA#128:BMIKA:] 1150 [OPTC%:.I:JSRG:JMPE:.c:LDAH:EOR#1:STAH:AND#1:ORA#96:.DA:JSRG:JMPE:]:IFNOTI%[OPTC%:.UA:LDAH:EOR#2:STAH:LSRA:AND#1:ORA#98:BNEDA:] 1160 [OPTC%:.ZA:TXA:AND#7:TAX:.EA:LDA#32:JSRC:INX:TXA:CMP#8:BNEEA:JMPE:.LA:LDA#27:BNEU:.C:.U:PHA:LDA#1:JSRk:PLA:.k:JMPM:]:IF_%[OPTC%:.n:LDA#12:JSRU:] 1170 IFT%[OPTC%:.FA:JSRa:.n:LDAL:CMP#Q%:BCCFA:] 1180 [OPTC%:INCo:.`:LDA#0:STAL:RTS:.JA:BITH:BVCa:JSRa:.a:]:IFb%[OPTC%:LDA#10:JSRC:] 1190 [OPTC%:INCL:LDA#13:JMPC:.G:STXJ:CLC:ADC#1:LDX#0:.GA:CMPF,X:BEQl:BCCK:PHA:.T:INX:LDAF,X:]:IFG%=0 [OPTC%:BPLT:] 1200 IFG%ANDM%[OPTC%:CMP#&FF:] 1210 IFG%[OPTC%:BNET:] 1220 [OPTC%:PLA:INX:BNEGA:.l:]:IFG%=0ANDM%[OPTC%:JSRLA:] 1230 [OPTC%:.V:INX:LDAF,X:]:IFG%ANDM%[OPTC%:CMP#&FF:] 1240 IFG%[OPTC%:BEQK:] 1250 IFG%=0 [OPTC%:AND#127:] 1260 [OPTC%:JSRC:]:IFG%=0 [OPTC%:LDAF,X:BPLV:]ELSE[OPTC%:JMPV:] 1270 [OPTC%:.K:LDXJ:RTS:]:ENDPROC 1280 DEFPROCP(C%):o%=O%:p%=P%:[OPTC%:.Q:BRK:.W:BRK:.L:BRK:.o:BRK:.H:BRK:.J:]:IF(E%ORD%)>0:[OPTC%:.XA:BRK:] 1290 O%=o%:P%=p%:[OPTC%:.d%:LDX#&A8:LDY#0:JSRO:STYW:JSR&FFDA:LDA(&A8),Y:CMP#13:BEQp:LDX#0:CMP#ASC"+":BNEs:LDX#&40:JSRZ:BEQp:.s:STXH:TYA:PHA:.MA:INY:LDA(&A8),Y:CMP#ASC"!":BCSMA:JSRg:BEQh:JSRi:STAQ:JSRg:BEQh:JSRi:STAW:.h:PLA:CLC:ADC&A8:TAX 1300 LDA#0:ADC&A9:TAY:LDA#&40:JSRN:TAY:BEQm:LDA#2:JSRM:LDA#32:JSRG:JMP_:.p:._A:BRK:EQUB220:EQUS"Syntax: "+D$+" (+) ()":.m:BRK:EQUB214:EQUS"Not found":BRK:.i:LDA#0:.NA:STA&AA:LDA(&A8),Y:CMP#ASC"0":BCCHA:AND#15:PHA 1310 LDA&AA:ASLA:ASLA:ADC&AA:ASLA:STA&AA:PLA:ADC&AA:INY:BNENA:.HA:LDA&AA:RTS:.Z:INY:.g:LDA(&A8),Y:CMP#ASC" ":BEQZ:CMP#13:RTS:EQUS"V"+G$:BRK:.B:]:ENDPROC 1320 DEFPROCN:IFFNFENDPROC 1330 PRINT'"Save settings":INPUT"Filename: "F$:P%=H%:PROCB(0):OSCLI"SAVE "+F$+" "+STR$~H%+" "+STR$~P%+" 0 0":ENDPROC 1340 DEFPROCO:PRINT'"Load settings":INPUT"Filename: "F$:OSCLI"LOAD "+F$+" "+STR$~H%:V%=H%:IF?V%=&4CANDV%?3=&4CANDV%?6=&4C V%=V%+13 1350 U%=?V%:Q%=V%?1:R%=V%?2:W%=V%?3:a%=V%?4:E%=8*(Q%DIV32)+R%DIV32:Q%=48+(Q%AND31EOR16):R%=48+(R%AND31EOR16):D%=W%AND31:IFD%=0 D%=TRUE:E%=TRUEELSED%=D%+32:E%=E%+32 1360 M%=(U%AND128)<>0:b%=(U%AND64)<>0:_%=(U%AND32)<>0:T%=(U%AND16)<>0:I%=(U%AND8)<>0:J%=(U%AND4)<>0:L%=(U%AND2)<>0:N%=(U%AND1)<>0:G%=(W%AND128)<>0:e%=(W%AND64)<>0:IFM%E$=CHR$27ELSEE$="" 1370 IFa%=0PROCR:ENDPROC 1380 IFa%>80PRINT"Unknown format";:a%=GET:ENDPROC 1390 x%=1:IFa%=1 x%=-31 1400 m%=V%+4:IFG%PROCS:ENDPROC 1410 FORl%=0TO101:A$(l%)="":IF?m%=l%+x%:REPEATm%=m%+1:A$(l%)=A$(l%)+CHR$(?m%AND127):UNTIL?m%>127:m%=m%+1:A$(l%)=E$+A$(l%) 1420 NEXT:ENDPROC 1430 DEFPROCS:FORl%=0TO101:A$(l%)="":IF?m%=l%+1:REPEATm%=m%+1:A$(l%)=A$(l%)+CHR$?m%:UNTIL?m%=(M%AND&FF):m%=m%+1:A$(l%)=LEFT$(A$(l%),LENA%(l%)-1) 1440 NEXT:ENDPROC 1450 DEFPROCR:m%=V%+84:FORl%=4TO73:`%=?(V%+l%+1)-V%?l%:IF`%>0 A$(l%+28)=E$:FORn%=1TO`%:A$(l%+28)=A$(l%+28)+FNK(?m%):m%=m%+1:NEXTELSEA$(l%+28)="" 1460 NEXT:E%=TRUE:D%=TRUE:ENDPROC 1470 DEFFNK(c%):IFG%ANDc%>127:=CHR$27+CHR$(c%AND127)ELSE=CHR$c% 1480 DEFFNC(F%):LOCALK%:PRINT"? (";CHR$(78-F%*11);")";:REPEATK%=GET:IFK%>95 K%=K%AND&DF 1490 UNTILK%=13ORK%=89ORK%=78:IFK%=13 K%=F%ELSEK%=K%=89 1500 PRINTSTRING$(3,CHR$127);:IFK%PRINT"Yes"ELSEPRINT"No " 1510 =K% 1520 DEFPROCG(S%):A%=133:X%=&84:A%=(USR&FFF4AND&FFFF00)DIV256:IFA%-TOP>S%ENDPROC 1530 B%=(PAGE+(A%-TOP-S%))AND&FF00:PRINT"Relocating to &";~B%:*K.0 RUN|M 1540 *FX225,1 1550 *FX138,0,128 1560 FORA%=0TOTOP-PAGE+4STEP4:B%!A%=A%!PAGE:NEXT:PAGE=B%:END