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.