https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119504
--- Comment #3 from Gaius Mulley <gaius at gcc dot gnu.org> --- $ gm2 WriteOctHexCorrect.mod $ ./a.out 30071 $ cat WriteOctHexCorrect.mod MODULE WriteOctHexCorrect ; FROM STextIO IMPORT WriteChar, WriteLn; VAR Done : BOOLEAN; PROCEDURE WriteOctOrHex(v: CARDINAL; w: CARDINAL; oh : CARDINAL); CONST MAXCHARS=80; CONST HexOctDigits = '0123456789ABCDEF'; TYPE ArrayDigits = ARRAY [0..HIGH (HexOctDigits)] OF CHAR ; CONST OHstr = ArrayDigits {'0123456789ABCDEF'} ; VAR str : ARRAY [0..MAXCHARS] OF CHAR; i,j : CARDINAL; BEGIN Done:=TRUE; i:=0; REPEAT str[i]:=OHstr[v MOD oh]; v:=v DIV oh; INC(i); UNTIL (v=0) OR (i>MAXCHARS); IF (v#0) AND (i>MAXCHARS) THEN Done:=FALSE; RETURN END; IF (w>0) AND (i<w) THEN FOR j:=1 TO w-i DO WriteChar(" "); END; END; FOR j:=i-1 TO 0 BY -1 DO WriteChar(str[j]) END; END WriteOctOrHex; BEGIN WriteLn; WriteOctOrHex (12345,3,8); WriteLn; END WriteOctHexCorrect.