MODULE compress; (*DEE 2014-08-06/2015-12-02*) (* Software Tools in Pascal, exercise 2-9. *) FROM ST IMPORT getc, putc; FROM STchars IMPORT ENDFILE, character; FROM CE IMPORT putrep, WARNING; (* compress: compress standard input. See expand. *) PROCEDURE compress; VAR c, lastc: character; n: INTEGER; BEGIN n := 1; lastc := getc(lastc); WHILE (lastc # ENDFILE) DO IF (getc(c) = ENDFILE) THEN IF (n > 1) OR (lastc = WARNING) THEN putrep(n, lastc) ELSE putc(lastc) END ELSIF (c = lastc) THEN INC(n) ELSIF (n > 1) OR (lastc = WARNING) THEN putrep(n, lastc); n := 1 ELSE putc(lastc) END; lastc := c END END compress; BEGIN compress END compress.