program printer_set; {****************************************************************************** Program : PRINTER_SET - Printer option configuration program Version : 1.0 Author : Eliot Ramey Language : Pascal/MT+ V5.5 ******************************************************************************} const { Version number } vers = 10; printer = 'Okidata'; { Ascii equates } lf = 10; vt = 11; ff = 12; cr = 13; so = 14; si = 15; dc1 = 17; dc3 = 19; dc4 = 20; can = 24; esc = 27; gs = 29; rs = 30; us = 31; { Printer control codes - used in escape sequences } set_tof = 53; six_lpi = 54; eight_lpi = 56; long_line = 65; short_line = 66; { Default printer set-up } default = 'CAN LPI=6 CPI=16 LIN=S GRF=O'; type strptr = ^string; var command : strptr; options : string[80]; filename : string[14]; ofile : text; optlen, result, lpi, cpi, cpipos : integer; grf, lin : char; {****************************************************************************** Function @CMD : Special Pacal/MT+ function ******************************************************************************} external function @cmd : command; {****************************************************************************** Procedure SET_LPI : Sets number of lines per inch - 6,8 ******************************************************************************} procedure set_lpi(lines_per_inch : integer); begin case lines_per_inch of six_lpi : write(ofile,chr(esc),chr(six_lpi)); eight_lpi : write(ofile,chr(esc),chr(eight_lpi)); else writeln('Argument error for LPI.') end { case } end; {****************************************************************************** Procedure SET_CPI : Sets number of characters per inch - 5,8,10,16 ******************************************************************************} procedure set_cpi(chars_per_inch : integer); begin case chars_per_inch of 5 : write(ofile,chr(rs),chr(us)); 8 : write(ofile,chr(gs),chr(us)); 10 : write(ofile,chr(rs)); 16 : write(ofile,chr(gs)); else writeln('Argument error for CPI.') end { case } end; {****************************************************************************** Procedure SET_LIN : Set line length - Short or Long ******************************************************************************} procedure set_lin(line_length : char); begin case line_length of 'S' : write(ofile,chr(esc),chr(short_line)); 'L' : write(ofile,chr(esc),chr(long_line)); else writeln('Argument error for LIN.') end { case } end; {****************************************************************************** Procedure SET_GRF : Sets graphics mode - In or Out ******************************************************************************} procedure set_grf(graphics : char); begin case graphics of 'I' : write(ofile,chr(si)); 'O' : write(ofile,chr(so)); else writeln('Argument error for GRF.') end { case } end; {****************************************************************************** Procedure CAN_BUF : Cancels printer buffer - no arguments ******************************************************************************} procedure can_buf; begin write(ofile,chr(can)); end; {****************************************************************************** Procedure TOP_OF_FORM : Form feed - no arguments ******************************************************************************} procedure top_of_form; begin write(ofile,chr(ff)); end; {****************************************************************************** Procedure CLINE : Print commands - no arguments ******************************************************************************} procedure cline; begin writeln('Enter options on command line:'); writeln; writeln('LPI=n n=6 or 8'); writeln('CPI=n n=5,8,10,16'); writeln('LIN=c c="S"hort or "L"ong'); writeln('GRF=c c="I"nto or "O"ut'); writeln('CAN no arguments'); writeln('TOF no arguments'); writeln('DEF',default : 34); end; {****************************************************************************** Program PRINTER_SET : Set printer options - from command line ******************************************************************************} begin { printer_set } command := @cmd; options := command^; assign(ofile,'LST:'); rewrite(ofile); if length(options) > 1 then begin if pos('LPI',options) <> 0 then begin lpi := ord(options[pos('LPI=',options) + 4]); set_lpi(lpi) end; if pos('DEF',options) <> 0 then begin if pos('DEF',options) > 2 then writeln('DEF must be only option.') else options := default; end; if pos('CPI',options) <> 0 then begin cpipos := pos('CPI=',options) + 4; if options[cpipos + 1] in ['0'..'9'] then cpi := ((ord(options[cpipos]) - ord('0')) * 10) + (ord(options[cpipos+1]) - ord('0')) else cpi := ord(options[cpipos]) - ord('0'); set_cpi(cpi) end; if pos('LIN',options) <> 0 then begin lin := options[pos('LIN=',options) + 4]; set_lin(lin) end; if pos('GRF',options) <> 0 then begin grf := options[pos('GRF=',options) + 4]; set_grf(grf) end; if pos('CAN',options) <> 0 then can_buf; if pos('TOF',options) <> 0 then top_of_form; close(ofile,result) end else begin writeln(printer,' set program ',(vers div 10),'.',(vers mod 10)); cline; end; end. { pset }