program PPG2; {PagePrinterII text pagination program (c) 1988 by Sam Bellotto Jr.} { ------------------------- Printer Control Codes --------------------------- } const PEDoff =#27#56; {disable paper end detector} LeftMar1 =#27#108#1; {set left margin at 1} LeftMar10 =#27#108#10; {set left margin at 10} Elite =#27#77; {set printer to 12 cpi mode} ClrLst =#27#64; {reset printer} { ------------------------- for Epson compatibles --------------------------- } type texst =string[80]; var page,lines :integer; letter,rev :char; tag :string[60]; fname :string[14]; fmt :string[3]; filvar :text; prompt :string[30] absolute $80; {mem addr of comline suffix} procedure SyntaxError; begin writeln; writeln(^G,'++ Syntax Error ++'); {^G is bell} writeln; writeln('PPG2 d:FILENAME.EXT'); halt end; procedure OpenFile; begin if length(prompt)=0 then SyntaxError else begin fname:=copy(prompt,2,length(prompt)-1); assign(filvar,fname); {$I-} reset(filvar); {$I+} if ioresult<>0 then begin writeln; writeln(^G,'++ File Does Not Exist ++'); halt end end; if copy(fname,2,1)=':' then delete(fname,1,2) end; procedure Display(mess:texst); begin delline; write(mess) end; procedure SignOn; begin page:=1;lines:=0; writeln('PagePrinterII version 1.0'); writeln('(c)1988 by Sam Bellotto Jr.'); writeln('---------------------------'); writeln; Display(' Heading? '); read(tag); Display(' Starting page? '); read(page); Display('Reverse margins? '); read(kbd,rev); Display(' Starting line? '); read(lines); Display(' printing ... '); write(lst,PEDoff,Elite); if lines>0 then lines:=lines+3 end; procedure DoPage; var title:string[80]; var st:string[3]; begin str(page,st); if fmt='evn' then begin title:=concat('Page ',st,'/ ',fname,' ',tag); write(lst,LeftMar1); write(lst,title) end else begin title:=concat(fname,' ',tag,'/ ','Page ',st); write(lst,LeftMar10); write(lst,title:79) end; writeln(lst);writeln(lst) end; procedure SetUpPage; begin fmt:='odd'; if upcase(rev)='Y' then begin if lines>0 then fmt:='evn' else if odd(page) then fmt:='evn' end else begin if not odd(page) then fmt:='evn' end; DoPage end; procedure PrintOnePage; begin repeat read(filvar,letter); write(lst,letter); if letter=chr(13) then lines:=lines+1 {0DH is CR or EOL} until (lines=50) or (eof(filvar)); if not eof(filvar) then write(lst,#12) {form feed} end; procedure Wait; Begin page:=page+1;lines:=0; delline; Write(^G,'Ready to print page ',page,'? '); repeat delay(100) until keypressed; Display(' printing ... ') end; procedure SignOff; begin close(filvar); writeln(lst,#10,ClrLst); {line feed} write(^G); Display('++ COMPLETED ++'); writeln; writeln('++ ON PAGE ',page); writeln('++ ON LINE ',lines) end; begin {main} OpenFile; SignOn; while not eof(filvar) do begin SetUpPage; PrintOnePage; if not eof(filvar) then Wait end; SignOff end. {of PagePrinterII}