#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %externalroutinespec phex %alias "s_phex" (%integer x)
extern void PHEX(int X) __asm__("s_phex");
// 3 %integer i,j,k,corr,fail
int I;
int J;
int K;
int CORR;
int FAIL;
// 4 %integerfn div(%integer x,y)
int DIV(int X, int Y) {
// 5 %result=x//y
return ((long)X / (long)Y);
// 6 %end
} /* end of DIV */
// 7 fail=0
FAIL = 0;
// 8 %for k=20,-1,-20%cycle
// %for K = 20, -1, -20 %cycle
{
K = 21;
L_0001:
if (K == -20) goto L_0002;
K -= 1;
// 9 %if k//2#div(k,2) %then fail=1
if (((long)K / (long)2) == DIV(K, 2)) goto L_0004;
FAIL = 1;
L_0004:;
// 10 %if k//4#div(k,4) %then fail=1
if (((long)K / (long)4) == DIV(K, 4)) goto L_0005;
FAIL = 1;
L_0005:;
// 11 %if k//8#div(k,8) %then fail=1
if (((long)K / (long)8) == DIV(K, 8)) goto L_0006;
FAIL = 1;
L_0006:;
// 12 %if k//16#div(k,16) %then fail=1
if (((long)K / (long)16) == DIV(K, 16)) goto L_0007;
FAIL = 1;
L_0007:;
// 13 %if k//1#div(k,1) %then fail=1
if (((long)K / (long)1) == DIV(K, 1)) goto L_0008;
FAIL = 1;
L_0008:;
// 14 %repeat
goto L_0001;
}
L_0002:;
// 15 %if fail=0 %then printstring("TEST OK") %else printstring("Divide in error")
if (FAIL != 0) goto L_0009;
_imp_PRINTSTRING(_imp_str_literal("TEST OK"));
goto L_000A;
L_0009:;
_imp_PRINTSTRING(_imp_str_literal("Divide in error"));
L_000A:;
// 16 newline
_imp_NEWLINE();
// 17 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}