10
20
30
40 :
50 MODE&83:IF HIMEM-TOP>5000 MODE&80
60 :
70
80
90 reset$=CHR$27+"E"+CHR$27+"&k2G" :
100 nlq0$="":nlq1$="" :
110 bold0$=CHR$27+"(s0B":bold1$=CHR$27+"(s3B" :
120 comp0$=CHR$27+"&l6D"+CHR$27+"(s10H":comp1$=CHR$27+"&l12D"+CHR$27+"(s24H"
130 :
140 doubl0$=CHR$27+"(s0B":doubl1$=CHR$27+"(s3B" :
150 super0$="":super1$="" :
160 sub0$="":sub1$="" :
170 wide1$=CHR$27+"(s5H"+CHR$27+"&l3D"
180 wide0$=CHR$27+"(s10H"+CHR$27+"&l6D"
190 wide1$=CHR$27+"(s"+CHR$5+"H"
200 wide0$=CHR$27+"(s"+CHR$10+"H"
210
220 high0$=CHR$27+"w0":high1$=CHR$27+"w1" :
230 dwi0$=CHR$27+"h0":dwi1$=CHR$27+"h1" :
240 quad1$=CHR$27+"(s3H"+CHR$27+"&l1D" :
250 quad0$=CHR$27+"(s10H"+CHR$27+"&l6D"
260 ital0$=CHR$27+"(s0S":ital1$=CHR$27+"(s1S" :
270 iFlg%=FALSE :
280 charsel$=CHR$27+"(" :
290 USchar$=charsel$+"10U" :
300 UKchar$=charsel$+"1E" :
310 pound$=UKchar$+"#"+USchar$:Ipound$=UKchar$+CHR$(35+128)+USchar$
320 under0$=CHR$27+"&d@":under1$=CHR$27+"&d1D" :
330 font0$="!R! FSET 0p10h12v0s0b3T; EXIT;" :
340 font1$="!R! FSET 1p12v0s0b5T; EXIT;" :
350 font2$="!R! FSET 1p12v0s0b4T; EXIT;" :
360 font3$="!R! FSET 1p12v0s0b6T; EXIT;" :
370 lf%=1 :
380 :
390 :
400 :
410 high%=TRUE:prn%=FALSE:reset%=TRUE:pl%=66:l%=60:ff%=TRUE:ffl%=FALSE
420 rr%=82:ds%=1:nlq%=FALSE:pound%=TRUE:pound2%=TRUE:code%=FALSE:op%=TRUE
430 :
440 ON ERROR IF FNerr END
450 C%=0:under%=0:bold%=0:REPEAT:*.
460 PRINT"Press SHIFT-Escape to exit."
470 REPEAT:REPEAT:IF ADVAL(-4)<63 PRINT;63-ADVAL(-4);" bytes in printer buffer. ";ADVAL(-4);" bytes free."
480 INPUTLINE"File: "F$:IF LEFT$(F$,1)="*" OSCLIF$
490 UNTIL(LEFT$(F$,1)<>"*" AND F$<>"")
500 C%=OPENIN(F$):IF C%=0 PRINT"Can't open '"F$"'"'
510 UNTILC%<>0:prn%=FNyn("Printer",prn%)
520 REPEAT:INPUT"First page (1) "sp%
530 INPUT"Last page (255) "ep%:IF ep%<1 ep%=255
540 UNTILep%>=sp%
550 IFop% PROCoptions:op%=FALSE ELSE IFFNyn("Change options",FALSE) PROCoptions
560 CLS:IF prn% VDU2:IF reset% PROCprn(reset$)
570 IFprn% PROCprn(USchar$)
580 IFprn% ANDnlq% PROCprn(nlq1$)
590 IFcode% VDU23,128,0,0,8,4,254,4,8,0,23,129,0,0,&F8,8,&2A,&1C,8,0
600 IFsp%>1 VDU3
610 line%=0:page%=0:it%=0:PROCprn(STRING$(ll%," ")):REPEAT B%=BGET#C%
620 IFB%>31 AND B%<127 AND B%<>96:VDUB%+it% ELSE PROCchar(B%)
630 IF(B%=32 AND POS>rr%+ll%)OR(POS>78 AND rr%<80) PROCchar(13)
640 IFline%=l% ANDep% ANDpage%=ep%-1 VDU3
650 IFline%=l% MOVE 0,32:DRAW 1279,32:PROCcls:PROCprn(STRING$(ll%," ")):line%=0:page%=page%+1:IFsp%ANDpage%=sp%-1 CLS:PRINT"Printing from page ";sp%:VDU2:sp%=0
660 UNTILEOF#C%:CLOSE#C%:C%=0
670 IFprn% PROCcls:VDU3
680 IFline%=0 line%=l%:page%=page%-1
690 PRINT'"'"+F$+"' printed. ";page%+1;" pages with ";line%;" lines on the last page."
700 UNTIL0
710 DEFPROCoptions
720 high%=FNyn("Use VIEW highlight 2 as escape char",high%)
730 IFprn% reset%=FNyn("Reset printer",reset%)
740 REPEAT:PRINT"Printer page length (";pl%;:INPUT") "pl2%:IF pl2%<>0 pl%=pl2%
750 IFpl%<40 PRINT"Too short"
760 UNTILpl%>39
770 REPEAT:PRINT"Text page length (";l%;:INPUT") "l2%:IF l2%<>0 l%=l2%
780 IFl%<4 PRINT"Too short"
790 UNTILl%>3
800 ff%=FNyn("Force FF at end of page",ff%)
810 IF NOTff% AND l%<>pl% ffl%=FNyn("Send LFs to advance to next page",ffl%)
820 INPUT"Lefthand margin (RETURN for non, 79=max): "ll%:IF ll%>30 ll%=0
830 PRINT"Righthand margin (RETURN for non, ";79+ll%;:INPUT "=max): "rr%:IF rr%<30 rr%=82+ll%
840 PRINT"Line spacing (";ds%;:INPUT") "ds2%:IF ds2%<>0 ds%=ds2%
850 nlq%=FNyn("Set NLQ",nlq%)
860 pound%=FNyn("Convert CHR$96 (`) into pound symbols",pound%)
870 pound2%=FNyn("Convert CHR$163 (£) into pound symbols",pound2%)
880 code%=FNyn("Show codes",code%)
890 eol$=LEFT$(CHR$13+CHR$10,lf%+1)+STRING$(ll%," ")
900 ENDPROC
910 DEFPROCchar(B%):z%=0:IF B%=221 B%=9
920 IFB%=10:B%=13
930 IFB%=13 ANDcode%:PROCvdu(CHR$129+CHR$8)
940 IFB%=13 ANDprn%:PROCprn(eol$)
950 IFB%=13 ANDprn% ANDds%>1:FORz%=1 TO ds%:PROCprn(eol$):NEXT
960 IFB%=13:line%=line%+1:PROCvdu(CHR$13+CHR$10):ENDPROC
970 IFB%=12 ANDprn%:PROCcls:PROCprn(STRING$(ll%," ")):line%=l%:ENDPROC
980 IFB%=12:line%=l%:ENDPROC
990 IFB%=9 ANDcode%:PROCvdu(CHR$128+CHR$8)
1000 IFB%=9 ANDprn%=0:PRINTSTRING$(8-((POS+1) MOD 8),CHR$9);:ENDPROC
1010 IFB%=9:PRINTSPC(8-((POS+1) MOD 8));:ENDPROC
1020 IFB%=&1C ANDprn% ANDunder%=0:PROCprn(under1$):under%=under%EOR 1:ENDPROC
1030 IFB%=&1C ANDprn% ANDunder%=1:PROCprn(under0$):under%=under%EOR 1:ENDPROC
1040 IFB%=&1D ANDhigh%:PROCmark2:ENDPROC
1050 IFB%=&1D ANDprn% ANDbold%=0:PROCprn(bold1$):bold%=bold%EOR 1:ENDPROC
1060 IFB%=&1D ANDprn% ANDbold%=1:PROCprn(bold0$):bold%=bold%EOR 1:ENDPROC
1070 IFprn%ANDiFlg%IF(B%=96 ANDpound%)OR(B%=163 ANDpound2%) PROCprn(Ipound$):ENDPROC
1080 IFprn%IF(B%=96 ANDpound%)OR(B%=163 ANDpound2%) PROCprn(pound$):ENDPROC
1090 IFB%=96 OR B%=163:VDUB%+it%:ENDPROC
1100 IFB%=&1A AND(code%=0 ORprn%):VDU32:ENDPROC
1110 IFB%=&1A ANDcode%:PROCvdu(CHR$130):ENDPROC
1120 IFB%>159 ANDcode% ANDprn%=0:VDU9,8:COLOUR129:COLOUR0:VDUB-128:COLOUR1:COLOUR128:ENDPROC
1130 IFB%>126 ANDcode% ANDprn%=0:VDU9,9,9,9,9,8,8,8,8,8:COLOUR129:COLOUR0:PRINT"[";B;"]";:COLOUR1:COLOUR128:ENDPROC
1140 IFprn%=0 VDU9,9,8,8:COLOUR129:COLOUR0:VDU94,B%+64:COLOUR1:COLOUR128:ENDPROC
1150 ENDPROC
1160 DEFPROCcls
1170 IFpl%<l% ENDPROC
1180 IFff% PROCprn(CHR$12):ENDPROC
1190 IFlf% FORz%=line% TO pl%-1:PROCprn(CHR$10):NEXT
1200 ENDPROC
1210 DEFPROCmark2:B$=CHR$BGET#C%:IFprn%=0:ENDPROC
1220 IFB$="!":PROCprn(CHR$13):REPEATz%=BGET#C%:UNTILz%=13 ORz%=10:ENDPROC
1230 IFB$="B":PROCprn(bold1$):ENDPROC
1240 IFB$="b":PROCprn(bold0$):ENDPROC
1250 IFB$="C":PROCprn(comp1$):ENDPROC
1260 IFB$="c":PROCprn(comp0$):ENDPROC
1270 IFB$="D":PROCprn(doubl1$):ENDPROC
1280 IFB$="d":PROCprn(doubl0$):ENDPROC
1290 IFB$="I" ANDiFlg%:it%=128:ENDPROC
1300 IFB$="i" ANDiFlg%:it%=0:ENDPROC
1310 IFB$="I":PROCprn(ital1$):ENDPROC
1320 IFB$="i":PROCprn(ital0$):ENDPROC
1330 IFB$="N":PROCprn(nlq1$):ENDPROC
1340 IFB$="n":PROCprn(nlq0$):ENDPROC
1350 IFB$="Q":PROCprn(quad1$):ENDPROC
1360 IFB$="q":PROCprn(quad0$):ENDPROC
1370 IFB$="S":PROCprn(super1$):ENDPROC
1380 IFB$="s":PROCprn(super0$):ENDPROC
1390 IFB$="T":PROCprn(high1$):ENDPROC
1400 IFB$="t":PROCprn(high0$):ENDPROC
1410 IFB$="W":PROCprn(wide1$):ENDPROC
1420 IFB$="w":PROCprn(wide0$):ENDPROC
1430 IFB$="X":PROCprn(dwi1$):ENDPROC
1440 IFB$="x":PROCprn(dwi0$):ENDPROC
1450 IFB$="Y":PROCprn(sub1$):ENDPROC
1460 IFB$="y":PROCprn(sub0$):ENDPROC
1470
1480
1490
1500 IFB$="0":PROCprn(font0$):ENDPROC
1510 IFB$="1":PROCprn(font1$):ENDPROC
1520 IFB$="2":PROCprn(font2$):ENDPROC
1530 IFB$="3":PROCprn(font3$):ENDPROC
1540 ENDPROC
1550 DEFFNerr:PRINT:VDU3:COLOUR1:COLOUR128:REPORT:IFC%:A%=C%:C%=0:CLOSE#A%
1560 PRINTERL:=ERR=17 AND INKEY-1
1570 DEFPROCvdu(A$):*FX3,4
1580 PRINTA$;:*FX3
1590 ENDPROC
1600 DEFPROCprn(A$):LOCAL z%
1610 FOR z%=1 TO LEN A$:VDU1,ASCMID$(A$,z%,1):NEXT
1620 ENDPROC
1630 DEFFNyn(A$,F%):LOCAL K%:PRINTA$;"? (";CHR$(78-11*F%);") ";
1640 REPEAT:K%=GET AND&DF:UNTILK%=89 OR K%=78 OR K%=F% OR K%=13:PRINTSTRING$(4,CHR$8);:IF K%=13 K%=78-11*F%
1650 IF K%=78:PRINT"No ":=FALSE
1660 IF K%=89:PRINT"Yes":=TRUE
1670 PRINTCHR$K%;" ":=K%