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.

Reply via email to