10
20 INPUT"Input file: "in$:in%=OPENIN(in$):IFin%=0:PRINTin$;" not found":END
30 INPUT"Output file:"out$:out%=OPENOUT(out$):IFout%=0:PRINT"Can't open "out$:CLOSE#in%:END
40 INPUT"Column width: "wid%:IFwid%=0:wid%=40
50 INPUT"Page length: "pglen%:IFpglen%=0:pglen%=60
60 INPUT"Paper length: "plen%:IFplen%=0:plen%=66
70 REPEAT
80 p0%=PTR#in%:z%=pglen%:REPEATa$=FNline:z%=z%-1:UNTILz%<1 OR EOF#in%
90 z%=pglen%:REPEAT
100 p1%=PTR#in%:PTR#in%=p0%:IFNOTEOF#in%:a$=FNline ELSE a$=""
110 p0%=PTR#in%:PTR#in%=p1%:IFNOTEOF#in%:b$=FNline ELSE b$=""
120 PROCout(a$+STRING$(wid%-LENa$," ")+b$)
130 z%=z%-1:UNTILz%<1 OR p0%>=PTR#in%
140 z%=plen%-pglen%:IFz%:REPEATPROCout(""):z%=z%-1:UNTILz%<1
150 UNTILp0%>=PTR#in%
160 CLOSE#out%:CLOSE#in%
170 END
180 :
190 DEFFNerr:REPORT
200 IFin%:A%=in%:in%=0:CLOSE#A%
210 IFout%:A%=out%:out%=0:CLOSE#A%
220 PRINT" at line ";ERL:=TRUE
230 :
240 DEFFNline:LOCAL a$,a%:IFEOF#in%:=""
250 REPEATa%=BGET#in%:IFa%<>10 AND a%<>13:a$=a$+CHR$a%
260 UNTILa%=10 OR a%=13 OR LENa$>=wid%-3 OR EOF#in%
270 =a$
280 :
290 DEFPROCout(a$):IFout%=0:PRINTa$:ENDPROC
300 IFa$<>"":REPEATBPUT#out%,ASCa$:a$=MID$(a$,2):UNTILa$=""
310 BPUT#out%,13:PRINTCHR$13;100*PTR#in% DIV EXT#in%;"%";:ENDPROC