MODULE expand; (* DEE 2014-08-06/2015-12-02/2022-09-23 *) (* Software Tools in Pascal, exercise 2-9. *) FROM ST IMPORT getc, putc; FROM STchars IMPORT ENDFILE, character; FROM STutility IMPORT isupper; FROM CE IMPORT FIRSTREP, WARNING; (* Uncompress standard input, (see compress). *) PROCEDURE expand; VAR c: character; n: INTEGER; BEGIN WHILE (getc(c) # ENDFILE) DO IF (c # WARNING) THEN putc(c) ELSIF (isupper(getc(c))) THEN n := c - FIRSTREP + 1; IF (getc(c) # ENDFILE) THEN FOR n := n TO 1 BY -1 DO putc(c) END ELSE putc(WARNING); putc(n - 1 + FIRSTREP) END ELSE putc(WARNING); IF (c # ENDFILE) THEN putc(c) END END END END expand; BEGIN expand END expand.