1 'SPIN 'N' PRINT - By John Klein (256 character version)
10 SCREEN 0: WIDTH 80: COLOR 7, 0, 0: CLS : KEY OFF: HALT = 0: DIR = 0
20 COLOR 12: PRINT TAB(35); "Spin 'n' Print"
30 COLOR 7: LOCATE 4, 1: PRINT "Enter drive name containing text file (default=A:) >"; : COLOR 11: INPUT "", A$: LOCATE 5, 1: PRINT SPACE$(70)
35 IF A$ = CHR$(27) THEN 370
40 IF A$ = "" THEN A$ = "A:" ELSE IF LEN(A$) <> 2 OR RIGHT$(A$, 1) <> ":" THEN LOCATE 5, 1: PRINT "ERROR: illegal drive name, try A:,B:, or C:": GOTO 30
50 LOCATE 6, 1: PRINT SPACE$(79): COLOR 7: LOCATE 6, 1: PRINT "Enter text filename (D=Directory) >"; : COLOR 11: INPUT "", IN$: LOCATE 7, 1: PRINT SPACE$(79)
55 IF IN$ = "" THEN 50
56 IF IN$ = CHR$(27) THEN 30
60 IF IN$ = "D" OR IN$ = "d" THEN 3230 ELSE IN$ = A$ + IN$
70 ON ERROR GOTO 3110: OPEN "I", 1, IN$: ON ERROR GOTO 3180
80 WS = 7: TS = 6
90 COLOR 2: LOCATE 15, 16: PRINT "CPI = Characters Per Inch CPP = Characters Per Page"; TAB(16); "LPI = Lines Per Inch"; SPC(8); "LPP = Lines Per Page"
100 COLOR 15: LOCATE 22, 26: PRINT "Press (Enter) to Begin Printing"
180 DIM L$(255), A$(125): FOR Z = 0 TO 255: READ L$(Z): NEXT Z
190 DIM LCHR$(255, 11): FOR Z = 0 TO HORZ - 1: LCHR$(0, Z) = STRING$(-INT(-TS * 14), 0): LCHR$(32, Z) = LCHR$(0, Z): NEXT Z
200 FOR Z = 1 TO VERT: A$(Z) = ""
210 IF NOT (EOF(1)) THEN LINE INPUT #1, A$(Z)
220 NEXT Z: Z1 = 1
230 FOR Z2 = 1 TO VERT: IF LEN(A$(Z2)) >= Z1 THEN 250
240 NEXT Z2: GOTO 340
250 FOR Z2 = 1 TO HORZ: LPRINT CHR$(27) + CHR$(76) + CHR$(192) + CHR$(3) + STRING$(960 - VERT * -INT(-TS * 14), 0); : GRAPH = 0
260 FOR Z3 = VERT TO 1 STEP -1
270 ESC$ = INKEY$: IF ESC$ = CHR$(27) THEN GOSUB 3150
280 IF Z1 > LEN(A$(Z3)) THEN Z = 0 ELSE Z = ASC(MID$(A$(Z3), Z1, 1))
290 IF Z > 128 THEN GRAPH = -1
300 IF L$(Z) <> "" THEN GOSUB 2950
310 LPRINT LCHR$(Z, Z2 - 1); : NEXT Z3: IF DEFAULT AND NOT (GRAPH) THEN LPRINT CHR$(27) + CHR$(49): GOTO 330 ELSE IF Z2 = HORZ THEN GOSUB 380 ELSE LPRINT CHR$(27) + CHR$(49)
320 NEXT Z2
330 Z1 = Z1 + 1: IF NOT (HALT) THEN 230 ELSE 350
340 IF NOT (EOF(1)) THEN LPRINT CHR$(12): IF NOT (HALT) THEN 200
350 SCREEN 0: WIDTH 80: COLOR 7: PRINT "Do you wish to print another text file sideways (Y/N)?"
360 WHILE INKEY$ <> "": WEND: A$ = INPUT$(1): IF A$ = "Y" OR A$ = "y" THEN CLOSE : CLEAR : RESTORE: RUN ELSE IF A$ <> "N" AND A$ <> "n" THEN 360
3120 LOCATE 1, 1: PRINT "ERROR: `"; A$; "' is an illegal drive name": PRINT "Press any key to continue": A$ = INPUT$(1): RESUME 10
3130 LINE (0, 8)-(320, 200), 0, BF: LOCATE 1, 6: IF HALT THEN PRINT "----- ONE MOMENT PLEASE -----" ELSE PRINT " Press ESC to halt printing ": RETURN
3140 RETURN
3150 LOCATE 1, 6: PRINT "(Q)uit or (C)ontinue printing"
3160 ESC$ = INPUT$(1): IF ESC$ = "Q" OR ESC$ = "q" THEN HALT = -1: GOSUB 3130: RETURN
3170 IF ESC$ = "C" OR ESC$ = "c" THEN GOSUB 3130: RETURN ELSE BEEP: GOTO 3160
3180 IF ERR = 5 THEN SCREEN 0: WIDTH 80: CLS : LOCATE 12, 12: PRINT "This program requires CGA or equivalent hardware.": END
3190 IF ERR <> 25 AND ERR <> 57 AND ERR <> 27 THEN SCREEN 0: WIDTH 80: PRINT "UNRECOVERABLE ERROR: error #"; ERR, ERL: PRINT "Press any key to exit.": WHILE INKEY$ = "": WEND: END
3200 CLS : SCREEN 0: WIDTH 80: PRINT "ERROR: Printer not ready": PRINT "(C)ontinue or (Q)uit": WHILE INKEY$ <> "": WEND
3210 A$ = INPUT$(1): IF A$ = "Q" OR A$ = "q" THEN RESUME 350 ELSE IF A$ <> "C" AND A$ <> "c" THEN 3210
3220 LOCATE 2, 1: PRINT "Setup printer and press any key when ready": A$ = INPUT$(1): SCREEN 1: CLS : RESUME
3230 CLS : ON ERROR GOTO 3120: FILES A$ + "*.*": ON ERROR GOTO 0
3240 COLOR 7: PRINT "Enter text filename >"; : COLOR 11: INPUT "", IN$
3250 CLS : COLOR 12: PRINT TAB(35); "Spin 'N' Print"
3260 COLOR 7: LOCATE 4, 1: PRINT "Drive name containing text file >"; : COLOR 11: PRINT A$
3270 COLOR 7: LOCATE 6, 1: PRINT "Text filename >"; : COLOR 11: PRINT IN$