MODULE detab; (*DEE 2014-01-20/2015-11-30/2015-12-01*) (*Software Tools in Pascal, exercises 1-6 and 1-7a.*) FROM ST IMPORT getc, putc; FROM STchars IMPORT character, BACKSPACE, BLANK, ENDFILE, NEWLINE, TAB; FROM Tabs IMPORT setTabPos; (* detab: convert tabs to equivalent number of blanks. *) PROCEDURE detab; VAR c: character; col: INTEGER; BEGIN col := 1; WHILE (getc(c) # ENDFILE) DO IF (c = TAB) THEN REPEAT putc(BLANK); INC(col) UNTIL (setTabPos(col)) ELSIF (c = NEWLINE) THEN putc(NEWLINE); col := 1 ELSIF (c = BACKSPACE) THEN putc(c); IF (col >= 1) THEN DEC(col) END ELSE putc(c); INC(col) END; END END detab; BEGIN detab END detab.