DUMPON (ed) PROGRAM (test) OUTPUT 0 = cp0 INPUT 1 = tr0 BEGIN INTEGER tab, lf, ff, sp; INTEGER zero, one, nine; INTEGER ch; INTEGER i; INTEGER tabstop; INTEGER pos; INTEGER PROCEDURE mod (a, b); VALUE a; INTEGER a; VALUE b; INTEGER b; mod := a - (a '/' b) * b; PROCEDURE handle err (err); INTEGER err; BEGIN IF err = 31 THEN GOTO eof; END; select input (1); select output (0); tab := full code ("fe1"); ff := full code ("fe4"); lf := full code ("el"); sp := full code (" "); zero := full code ("0"); one := full code ("1"); nine := full code ("9"); errortrap (handle err); line: tabstop := 6; pos := 0; ch := read ch; IF ch = tab THEN BEGIN ch := read ch; IF ch >= one AND ch <= nine THEN BEGIN space (tabstop - 1); print ch (ch); pos := tabstop; END ELSE BEGIN space (tabstop); pos := tabstop; GOTO handle char; END; END ELSE GOTO handle char; char: ch := read ch; handle char: IF pos >= tabstop THEN tabstop := 8; IF ch = lf THEN BEGIN newline (1); GOTO line; END; IF ch = ff THEN BEGIN newline (2); GOTO line; END; IF ch = tab THEN BEGIN INTEGER tabulate; tabulate := tabstop - mod (pos, tabstop); space (tabulate); pos := pos + tabulate; GOTO char; END; IF (ch < zero OR ch > nine) AND ch NE sp THEN tabstop := 8; print ch (ch); pos := pos + 1; GOTO char; eof: END FINISH