10 REM PRINTER
20 REM PROGRAM TO DEAL WITH THE IBM 80 CPS PRINTER
30 REM FUNCTIONS:  SETUP PRINTER MODES
40 REM             PRINT PAGINATED LISTINGS OF TEXT FILES
50 REM             ISSUE CONTROLS TO PRINTER
60 REM AUTHOR:  WILL FASTIE
70 REM CREATED: 12 DEC 1981
80 REM EDITED:  26 JAN 1982  2355
90 REM SOURCE:  PRINTER.BAS
100 REM NOTE:   OPERATES ON CURRENT DISPLAY DEVICE, CURRENT MODE
110 REM ***** CONSTANTS
120 PROG$ = "PRINTER v1.01  26 JAN 1982"
130 ESC$=CHR$(27)
140 CLRLPT$=ESC$+"Q"+ESC$+"5"+ESC$+"F"+ESC$+"H"
150 PWIDTH=80
160 REM ***** INITIAL MENU
170 KEY OFF: CLS: SCREEN 0,0,0
180 PRINT PROG$: PRINT
190 PRINT "THE PRINTER MUST BE ONLINE TO"
200 PRINT "PERFORM THESE FUNCTIONS."
210 PRINT
220 PRINT "FUNCTIONS:";
230 PRINT TAB(13);"P - PRINT A TEXT FILE"
240 PRINT TAB(13);"S - SETUP PRINTER"
250 PRINT TAB(13);"R - RESET PRINTER"
260 PRINT TAB(13);"T - ADVANCE PAPER TO TOP"
270 PRINT TAB(13);"Q - QUIT (RETURN TO DOS)"
280 PRINT TAB(13);"X - EXIT TO BASIC"
290 MENSEL = CSRLIN+1
300 PLOC = MENSEL: GOSUB 1270
310 INPUT "   ENTER FUNCTION:   ",X$:  IF X$="" THEN BEEP: GOTO 300
320 GOSUB 1210
330 X = INSTR("PSRTQX",X$): IF X = 0 THEN BEEP: GOTO 300
340 ON X GOSUB 360, 770, 1080, 1120, 1150, 1180
350 GOTO 160
360 REM ***** PRINT PAGINATED LISTING
370 CLS
380 PRINT PROG$: PRINT
390 PRINT "ADJUST THE PAPER IN THE PRINTER SO THAT"
400 PRINT "THE PERFORATION IS AT THE PAPER BAIL."
410 PRINT "PUT THE PRINTER ONLINE."
420 PRINT
430 PRINT "FILES MUST BE ASCII TEXT FILES."
440 PRINT
450 PRINT "NO FILENAME EXTENSION IS ASSUMED,"
460 PRINT "SO ENTER THE FILENAME EXACTLY."
470 PRINT "DEPRESS ENTER KEY TO RETURN TO MENU."
480 PRINT "PRESS ESC KEY TO ABORT PRINTING."
490 PRINT
500 INPUT "FILE TO PRINT:  ",X$
510 IF LEN(X$) = 0 THEN RETURN
520 GOSUB 1210
530 WIDTH "lpt1:",PWIDTH
540 OPEN X$ FOR INPUT AS 1
550 PAGENR = 0
560 LINENR = 1
570 IF EOF  (1) THEN 650
580 LINE INPUT #1, L$
590 IF LINENR = 1 THEN GOSUB 690
600 LPRINT L$
610 IF INKEY$ = ESC$ THEN 650
620 LINENR = LINENR + INT((LEN(L$)+79)/80)
630 IF LINENR > 54 THEN LINENR = 1
640 GOTO 570
650 REM CLOSE FILE AND RETURN
660 CLOSE
670 GOSUB 1120
680 GOTO 500
690 REM ***** SUBROUTINE TO PRINT PAGE HEADING
700 IF PAGENR <> 0 THEN LPRINT CHR$(12);
710 PAGENR = PAGENR + 1
720 LPRINT: LPRINT
730 LPRINT ESC$+"S";X$;" ";ESC$+"T";
740 LPRINT "-- PRINTED ON ";DATE$;" AT ";TIME$;" -- PAGE";PAGENR
750 LPRINT: LPRINT
760 RETURN
770 REM ***** SETUP PRINTER
780 CLS: PRINT PROG$
790 PRINT: PRINT "PRINTER ENHANCEMENTS ARE:"
800 PRINT
810 PRINT "    IT - ITALICS CHAR. SET"
820 PRINT "    C  - COMPRESSED PRINT"
830 PRINT "    E  - EMPHASIZED PRINT"
840 PRINT "    DS - DOUBLE STRIKE"
850 PRINT
860 PRINT "ENTER ENHANCEMENTS SEPARATED BY SPACES."
870 PRINT
880 PRINT "EXAMPLES:"
890 PRINT
900 PRINT "   C E    - ILLEGAL"
910 PRINT "          - 10   CPI, NORMAL"
920 PRINT "   E      - 10   CPI, BOLD"
930 PRINT "   DS C   -16.5  CPI, DOUBLE"
940 PRINT
950 INPUT "    ENTER ENHANCEMENTS:  ",O$
960 X$=O$: GOSUB 1210: O$=X$
970 LPRINT CLRLPT$;
980 IF INSTR(O$,"IT") THEN LPRINT ESC$;"4";
990 IF INSTR(O$,"C")  THEN LPRINT ESC$;"P";
1000 IF INSTR(O$,"E") THEN LPRINT ESC$;"E";
1010 IF INSTR(O$,"DS") THEN LPRINT ESC$;"G";
1020 PRINT
1030 PLOC=CSRLIN
1040 GOSUB 1270
1050 INPUT "ENTER DESIRED LINE WIDTH:  ",PWIDTH
1060 IF 1 > PWIDTH OR PWIDTH > 132 THEN 1040
1070 RETURN
1080 REM ***** RESET PRINTER TO DEFAULTS
1090 LPRINT CLRLPT$;
1100 PWIDTH=80
1110 RETURN
1120 REM ***** FORM FEED TO PRINTER
1130 LPRINT CHR$(12);
1140 RETURN
1150 REM ***** RETURN TO DOS
1160 CLS
1170 SYSTEM
1180 REM ***** EXIT TO BASIC
1190 CLS
1200 END
1210 REM ***** SUBROUTINE TO UPPERFY A STRING (IN X$)
1220 FOR X = 1 TO LEN(X$)
1230   XC$ = MID$(X$,X,1)
1240   IF "a" <= XC$ AND XC$ <= "z" THEN MID$(X$,X,1) = CHR$(ASC(XC$)- 32)
1250 NEXT X
1260 RETURN
1270 REM ***** SUBROUTINE AT SPECIFIED LINE AND CLEAR IT
1280 LOCATE PLOC,1
1290 PRINT STRING$(40," ");
1300 LOCATE PLOC,1
1310 RETURN
1320 REM ***** SUBROUTINE TO WAIT FOR ANY KEYSTROKE
1330 PRINT "DEPRESS ANY KEY TO CONTINUE...";
1340 GOSUB 1360
1350 RETURN
1360 REM ***** SUBROUTINE TO GET A KEYSTROKE INTO X$
1370 X$ = INKEY$
1380 IF X$ = "" THEN 1370
1390 RETURN