program SIDEWAYS; (* written in TURBO PASCAL by Doug Cox July '85 for the Mannesmann Tally printer *) label FIN; type lineNo= 1..80; (* printer column width *) var line: Array[lineNo] of String[255]; number: String[4]; ch: Char; y: LineNo; longest, chNo, bottomLine, code, x, n1, n2: Integer; fileName: String[14]; fv: Text; ok, wide: Boolean; begin ClrScr; GotoXY(14,4); write ('A SIDEWAYS PRINTING PROGRAM FOR THE MANNESMANN TALLY'); GotoXY(26,6); write ('For SuperCalc .PRN files'); GotoXY(19,7); write ('(or any ASCII file of 80 lines or less)'); GotoXY(1,13); write ('File name (RETURN to cancel): '); repeat GotoXY(31,13); ClrEol; read (fileName); if fileName = ''then Goto FIN; Assign (fv, fileName); {$I-} Reset (fv) {$I+}; ok:= (IOresult = 0); if not ok then begin GotoXY(1,14); write ('Sorry, I can''t find ',fileName,' , try again...'); end; until ok; GotoXY(1,14); ClrEol; write ('Bottom line number (RETURN to cancel): '); number:= ''; repeat read (Kbd, ch); if ch <> ^M then begin write (ch); if ch in ['0'..'9'] then number:= number + ch else begin number:= ''; GotoXY(40,14); ClrEol; end; end; until ch = ^M; if number = '' then Goto FIN; Val (number, bottomLine, code); if bottomLine < 41 then wide:= True else wide:= False; if bottomLine > 80 then begin writeln; writeln ('Sorry, the file can only be 80 lines long...'); Goto FIN; end; writeln; writeln; write ('Turn printer on and press RETURN when it''s ready (ESC to cancel)'); read (Kbd, ch); if ch = ^[ then Goto FIN; ClrScr; writeln ('Hold the ESC key down to quit during printing...'); writeln ('(If you use the ESC key, turn your printer OFF'); write (' and then ON again to re-initialize it)'); writeln (Lst); writeln (Lst, #27#65#7); (* compressed line spacing *) while not EOF (fv) do begin y:= 0; longest:= 1; while (not EOF (fv)) and (y < bottomLine) do begin y:= y + 1; readln (fv, line[y]); if Length (line[y]) > longest then longest:= Length (line[y]); end; x:= y; if wide then y:= y*2; if y*8 > 511 then n2:= 2 else if y*8 > 255 then n2:= 1 else n2:= 0; n1:= y*8 - (256 * n2); for chNo:= 1 to longest do begin if KeyPressed then begin read (Kbd, ch); if ch = ^[ then goto FIN; end; write (Lst, ^[, 'K', chr(n1), chr(n2)); for y:= x downto 1 do if chNo < Length(line[y]) + 1 then begin case line[y][chNo] of ' ': write (Lst, #$00#$00#$00#$00#$00#$00#$00#$00); '!': write (Lst, #$00#$08#$00#$00#$08#$08#$08#$08); '"': write (Lst, #$00#$00#$00#$00#$00#$14#$14#$14); '#': write (Lst, #$00#$24#$24#$7E#$24#$7E#$24#$24); '$': write (Lst, #$00#$08#$3E#$09#$3E#$48#$3E#$08); '%': write (Lst, #$00#$47#$25#$17#$08#$74#$52#$71); '&': write (Lst, #$00#$73#$48#$54#$22#$50#$50#$60); '''': write (Lst, #$00#$00#$00#$00#$00#$10#$08#$18); '(': write (Lst, #$00#$02#$04#$08#$08#$08#$04#$02); ')': write (Lst, #$00#$20#$10#$08#$08#$08#$10#$20); '*': write (Lst, #$00#$42#$24#$18#$FF#$18#$24#$42); '+': write (Lst, #$00#$00#$08#$08#$3E#$08#$08#$00); ',': write (Lst, #$10#$08#$18#$00#$00#$00#$00#$00); '-': write (Lst, #$00#$00#$00#$00#$3E#$00#$00#$00); '.': write (Lst, #$00#$18#$18#$00#$00#$00#$00#$00); '/': write (Lst, #$00#$40#$20#$10#$08#$04#$02#$01); '0': write (Lst, #$00#$5C#$22#$51#$49#$45#$22#$1D); '1': write (LST, #$00#$1C#$08#$08#$08#$08#$18#$08); '2': write (LST, #$00#$3F#$20#$10#$0E#$01#$21#$1E); '3': write (Lst, #$00#$1E#$21#$01#$02#$04#$02#$1F); '4': write (Lst, #$00#$02#$02#$3F#$22#$12#$0A#$06); '5': write (Lst, #$00#$1E#$21#$01#$01#$3E#$20#$3F); '6': write (Lst, #$00#$3E#$41#$41#$3E#$20#$10#$08); '7': write (Lst, #$00#$20#$10#$08#$04#$02#$01#$3F); '8': write (Lst, #$00#$3E#$41#$41#$3E#$41#$41#$3E); '9': write (Lst, #$00#$10#$08#$04#$3E#$41#$41#$3E); ':': write (Lst, #$00#$30#$30#$00#$00#$30#$30#$00); ';': write (Lst, #$20#$10#$30#$30#$00#$30#$30#$00); '<': write (Lst, #$00#$04#$08#$10#$20#$10#$08#$04); '=': write (Lst, #$00#$00#$00#$7E#$00#$7E#$00#$00); '>': write (Lst, #$00#$20#$10#$08#$04#$08#$10#$20); '?': write (Lst, #$00#$10#$00#$10#$0C#$02#$42#$3C); '@': write (Lst, #$00#$1F#$20#$27#$29#$27#$21#$1E); 'A': write (Lst, #$00#$81#$81#$FF#$81#$42#$24#$18); 'B': write (Lst, #$00#$FC#$42#$42#$7C#$42#$42#$FC); 'C': write (Lst, #$00#$3C#$42#$40#$40#$40#$42#$3C); 'D': write (Lst, #$00#$F8#$44#$42#$42#$42#$44#$F8); 'E': write (Lst, #$00#$7F#$40#$40#$7E#$40#$40#$7F); 'F': write (Lst, #$00#$40#$40#$40#$7E#$40#$40#$7F); 'G': write (Lst, #$00#$3E#$41#$41#$47#$40#$40#$3E); 'H': write (Lst, #$00#$41#$41#$41#$7F#$41#$41#$41); 'I': write (Lst, #$00#$1C#$08#$08#$08#$08#$08#$1C); 'J': write (Lst, #$00#$18#$24#$04#$04#$04#$04#$1E); 'K': write (Lst, #$00#$42#$44#$48#$70#$48#$44#$42); 'L': write (Lst, #$00#$7F#$40#$40#$40#$40#$40#$40); 'M': write (Lst, #$00#$41#$41#$49#$49#$5D#$63#$41); 'N': write (Lst, #$00#$41#$43#$45#$49#$51#$61#$41); 'O': write (Lst, #$00#$3E#$41#$41#$41#$41#$41#$3E); 'P': write (Lst, #$00#$40#$40#$40#$7E#$41#$41#$7E); 'Q': write (Lst, #$00#$3D#$42#$45#$41#$41#$41#$3E); 'R': write (Lst, #$00#$41#$42#$44#$7C#$42#$42#$7C); 'S': write (Lst, #$00#$3E#$41#$01#$3E#$40#$41#$3E); 'T': write (Lst, #$00#$08#$08#$08#$08#$08#$08#$7F); 'U': write (Lst, #$00#$3E#$41#$41#$41#$41#$41#$41); 'V': write (Lst, #$00#$08#$1C#$14#$22#$41#$41#$41); 'W': write (Lst, #$00#$22#$36#$5D#$49#$41#$41#$41); 'X': write (Lst, #$00#$41#$22#$14#$08#$14#$22#$41); 'Y': write (Lst, #$00#$08#$08#$08#$08#$14#$22#$41); 'Z': write (Lst, #$00#$7F#$20#$10#$08#$04#$02#$7F); '[': write (Lst, #$00#$1C#$10#$10#$10#$10#$10#$1C); '\': write (Lst, #$00#$01#$02#$04#$08#$10#$20#$40); ']': write (Lst, #$00#$38#$08#$08#$08#$08#$08#$38); '^': write (Lst, #$00#$00#$00#$00#$00#$22#$14#$08); '_': write (Lst, #$00#$7F#$00#$00#$00#$00#$00#$00); '`': write (Lst, #$00#$00#$00#$00#$00#$08#$10#$18); 'a': write (Lst, #$00#$7D#$42#$3E#$02#$3C#$00#$00); 'b': write (Lst, #$00#$7C#$42#$42#$42#$7C#$40#$40); 'c': write (Lst, #$00#$3C#$40#$40#$40#$3C#$00#$00); 'd': write (Lst, #$00#$1E#$22#$42#$22#$1E#$02#$02); 'e': write (Lst, #$00#$3C#$40#$7E#$42#$3C#$00#$00); 'f': write (Lst, #$00#$10#$10#$10#$3C#$10#$10#$0E); 'g': write (Lst, #$1E#$01#$3F#$41#$41#$3E#$00#$00); 'h': write (Lst, #$00#$22#$22#$22#$32#$2E#$20#$20); 'i': write (Lst, #$00#$1C#$08#$08#$08#$18#$00#$08); 'j': write (Lst, #$70#$08#$08#$08#$08#$18#$00#$08); 'k': write (Lst, #$00#$42#$74#$48#$44#$42#$40#$40); 'l': write (Lst, #$00#$1C#$08#$08#$08#$08#$08#$18); 'm': write (Lst, #$00#$49#$49#$49#$49#$7E#$00#$00); 'n': write (Lst, #$00#$22#$22#$22#$32#$2E#$00#$00); 'o': write (Lst, #$00#$3C#$42#$42#$42#$3C#$00#$00); 'p': write (Lst, #$40#$40#$7C#$42#$42#$7C#$00#$00); 'q': write (Lst, #$02#$02#$3E#$42#$42#$3E#$00#$00); 'r': write (Lst, #$00#$20#$20#$20#$32#$2C#$00#$00); 's': write (Lst, #$00#$3E#$01#$3E#$40#$3E#$00#$00); 't': write (Lst, #$00#$0C#$10#$10#$10#$3C#$10#$10); 'u': write (Lst, #$00#$3A#$44#$44#$44#$44#$00#$00); 'v': write (Lst, #$00#$18#$18#$24#$42#$42#$00#$00); 'w': write (Lst, #$00#$22#$63#$5D#$49#$41#$00#$00); 'x': write (Lst, #$00#$22#$14#$08#$14#$22#$00#$00); 'y': write (Lst, #$20#$10#$08#$14#$22#$22#$00#$00); 'z': write (Lst, #$00#$3C#$20#$10#$08#$3C#$00#$00); '{': write (Lst, #$00#$0C#$10#$10#$20#$10#$10#$0C); '|': write (Lst, #$00#$08#$08#$08#$00#$08#$08#$08); '}': write (Lst, #$00#$18#$04#$04#$02#$04#$04#$18); '~': write (Lst, #$00#$00#$00#$00#$00#$06#$49#$30); end; if wide then write (Lst, #0#0#0#0#0#0#0#0); end else begin if not wide then write (Lst, #0#0#0#0#0#0#0#0) else write (Lst, #0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0); end; writeln (Lst); end; end; writeln (Lst,#27#65#12); (* normal line spacing *) ClrScr; FIN:end.