#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %ROUTINE PRHEX(%INTEGER VALUE, PLACES)
void PRHEX(int VALUE, int PLACES) {
// 3 %CONSTBYTEINTEGERARRAY HEX(0:15)='0','1','2','3','4',
const unsigned char HEX[16] = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70};
// 4+ '5','6','7','8','9','A','B','C','D','E','F'
// 5 %INTEGER I
int I;
// 6 %CYCLE I=PLACES<<2-4, -4, 0
// %for I = (PLACES << 2) - 4, -4, 0 %cycle
{
int _initial = (PLACES << 2) - 4;
if (invalid_for_loop(_initial, -4, 0)) _imp_signal(5, 1, 0, "Illegal cycle I = (PLACES << 2) - 4, -4, 0");
I = _initial - (-4);
L_0001:
if (I == 0) goto L_0002;
I -= 4;
// 7 PRINT SYMBOL(HEX(VALUE>>I&15))
_imp_PRINTSYMBOL(HEX[(unsigned int)VALUE >> I & 15]);
// 8 %REPEAT
goto L_0001;
}
L_0002:;
// 9 %END
return;
} /* end of PRHEX */
// 10 PRHEX(X'B00B',8)
PRHEX(45067, 8);
// 11 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}