10 REM Headed Paper Printer 20 REM by Steven Flintham 30 REM 40 REM Thursday 11th April 1991 50 : 60 MODE 135 70 VDU 23;8202;0;0;0; 80 PROCdisable 90 PROCinit 100 REPEAT 110 REPEAT 120 print%=FNmenu 130 copies%=FNnum_of_copies 140 UNTIL copies%>0 150 continuous%=FNcont 160 parallel%=FNparallel 170 PROCprint(print%,copies%,continuous%,parallel%) 180 UNTIL FALSE 190 END 200 : 210 DEF PROCdisable 220 *FX229,1 230 *FX4,2 240 ENDPROC 250 : 260 DEF PROCenable 270 *FX229,0 280 *FX4,0 290 ENDPROC 300 : 310 DEF PROCinit 320 ON ERROR MODE 135:PROCerror:END 330 max_size%=&5100 340 DIM lhead% max_size%,oscli% 64 350 ENDPROC 360 : 370 DEF PROCoscli($oscli%) 380 LOCAL X%,Y% 390 X%=oscli% MOD 256 400 Y%=oscli% DIV 256 410 CALL &FFF7 420 ENDPROC 430 : 440 DEF PROCerror 450 *FX3,4 460 VDU 3 470 REPORT 480 PRINT " at line ";ERL 490 PROCenable 500 ENDPROC 510 : 520 DEF FNmenu 530 LOCAL menu% 540 PROCtitle 550 PRINT'"Please select the heading to print:" 560 PRINT'TAB(2);"1) Steven Flintham" 570 PRINT'TAB(2);"2) LHPRN" 580 PRINT'"Please choose: "; 590 REPEAT 600 menu%=GET-48 610 IF menu%>=-15 AND menu%<=-7 THEN menu%=menu%+16 620 UNTIL menu%>=1 AND menu%<=2 630 PRINT STR$(menu%) 640 =menu% 650 : 660 DEF PROCtitle 670 CLS 680 PRINTTAB(6,0);CHR$141;CHR$132;CHR$157;CHR$131;"Headed Paper Printer ";CHR$156 690 PRINTTAB(6,1);CHR$141;CHR$132;CHR$157;CHR$131;"Headed Paper Printer ";CHR$156 700 ENDPROC 710 : 720 DEF FNparallel 730 LOCAL key$ 740 PRINT'"Are you using a parallel printer? "; 750 REPEAT 760 key$=CHR$(GET AND &DF) 770 UNTIL key$="Y" OR key$="N" 780 IF key$="Y" THEN PRINT "Yes":=TRUE 790 PRINT "No":=FALSE 800 : 810 DEF FNnum_of_copies 820 PRINT'"How many copies do you require? "; 830 =VAL(FNinput(3,0)) 840 : 850 DEF FNinput(max_len%,min_len%) 860 LOCAL input$,key% 870 input$="" 880 REPEAT 890 REPEAT 900 *FX21,0 910 key%=GET 920 UNTIL key%=13 OR key%=127 OR (key%>=32 AND key%<=126) 930 IF key%=127 AND LEN(input$)=0 THEN PROCbleep 940 IF key%<>127 AND key%<>13 AND LEN(input$)=max_len% THEN PROCbleep 950 IF key%<>127 AND key%<>13 AND LEN(input$)0 THEN VDU 8,32,8:input$=LEFT$(input$,LEN(input$)-1) 970 UNTIL key%=13 AND LEN(input$)>min_len% 980 PRINT 990 =input$ 1000 : 1010 DEF PROCbleep 1020 SOUND 3,-10,101,5 1030 ENDPROC 1040 : 1050 DEF FNcont 1060 LOCAL key$ 1070 PRINT'"Are you using continuous paper? "; 1080 REPEAT 1090 key$=CHR$(GET AND &DF) 1100 UNTIL key$="Y" OR key$="N" 1110 IF key$="Y" THEN PRINT "Yes":=TRUE 1120 PRINT "No":=FALSE 1130 : 1140 DEF PROCprint(print%,copies%,cont%,parallel%) 1150 LOCAL read%,fname$,length%,copy%,print_one_copy% 1160 IF parallel% THEN PROCoscli("FX5,1") ELSE PROCoscli("FX5,2") 1170 RESTORE 1610 1180 FOR read%=1 TO print% 1190 READ fname$ 1200 NEXT 1210 length%=FNlength(fname$) 1220 IF length%<=max_size% THEN PROCoscli("LOAD "+fname$+" "+STR$~lhead%) ELSE PROCprint_from_disc(fname$,copies%,cont%):ENDPROC 1230 IF cont% THEN PRINT'"Printing..." 1240 FOR copy%=1 TO copies% 1250 IF NOT cont% THEN PRINT'"Printing..." 1260 VDU 2 1270 FOR print_one_copy%=lhead% TO lhead%+length%-1 1280 VDU 1,?print_one_copy% 1290 NEXT 1300 IF cont% THEN VDU 1,12 1310 VDU 3 1320 IF NOT cont% AND copies%>1 AND copy%1 AND copy%