#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 !***********************************************************************
// 3 !* SHOULD RUN WITHOUT OPUT. LOOPS ON SOME COMPILERS DUE TO *
// 4 !* MISSING LABELS GIVING JUMPS WITH ZERO OFFSET *
// 5 !***********************************************************************
// 6 %OWNBYTEINTEGERARRAY CH(0:16)='0','1','2','3','4','5','6','7','8',
static unsigned char CH[17] = {48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71};
struct _imp_dv CH_dv = {CH, sizeof(unsigned char) /*, dims, <bounds> */};
// 7+ '9','A','B','C','D','E','F','G'
// 8 %INTEGER I,K,L
int I;
int K;
int L;
// 9 %CONSTINTEGER J=0
// 10 I=4000; L=10
I = 4000;
L = 10;
// 11 %IF I>4095 %AND J#0 %THEN I=I+1
if (I <= 4095) goto L_0001;
if (0 == 0) goto L_0001;
I = I + 1;
L_0001:;
// 12 %IF I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
if (I <= 4095) goto L_0002;
if (0 == 0) goto L_0002;
I = I + 1;
goto L_0003;
L_0002:;
I = I - 1;
L_0003:;
// 13 %IF I>4095 %AND J#0 %THEN %START; %FINISH
if (I <= 4095) goto L_0004;
if (0 == 0) goto L_0004;
L_0004:;
// 14 %IF I>4095 %AND J#0 %THEN %START
if (I <= 4095) goto L_0005;
if (0 == 0) goto L_0005;
// 15 I=I+1
I = I + 1;
// 16 %FINISH %ELSE I=I-1
goto L_0006;
L_0005:;
I = I - 1;
L_0006:;
// 17 %IF (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
if (I <= 4095) goto L_0007;
if (0 == 0) goto L_0007;
if (L != 1) goto L_0007;
I = I + 1;
L_0007:;
// 18 %IF (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
if (I <= 4095) goto L_0008;
if (0 != 0) goto L_0009;
L_0008:;
if (L != 1) goto L_000A;
L_0009:;
I = I + 1;
L_000A:;
// 19 %UNLESS I>4095 %AND J#0 %THEN I=I+1
if (I <= 4095) goto L_000B;
if (0 != 0) goto L_000C;
L_000B:;
I = I + 1;
L_000C:;
// 20 %UNLESS I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
if (I <= 4095) goto L_000D;
if (0 != 0) goto L_000E;
L_000D:;
I = I + 1;
goto L_000F;
L_000E:;
I = I - 1;
L_000F:;
// 21 %UNLESS I>4095 %AND J#0 %THEN %START; %FINISH
if (I <= 4095) goto L_0010;
if (0 != 0) goto L_0011;
L_0010:;
L_0011:;
// 22 %UNLESS I>4095 %AND J#0 %THEN %START
if (I <= 4095) goto L_0012;
if (0 != 0) goto L_0013;
L_0012:;
// 23 I=I+1
I = I + 1;
// 24 %FINISH %ELSE I=I-1
goto L_0014;
L_0013:;
I = I - 1;
L_0014:;
// 25 %UNLESS (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
if (I <= 4095) goto L_0015;
if (0 == 0) goto L_0015;
if (L == 1) goto L_0016;
L_0015:;
I = I + 1;
L_0016:;
// 26 %UNLESS (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
if (I <= 4095) goto L_0017;
if (0 != 0) goto L_0018;
L_0017:;
if (L == 1) goto L_0018;
I = I + 1;
L_0018:;
// 27 %FOR K=0,1,16 %CYCLE
// %for K = 0, 1, 16 %cycle
{
K = -1;
L_0019:
if (K == 16) goto L_001A;
K += 1;
// 28 %UNLESS '0'<=CH(K)<='9' %OR 'A'<=CH(K)<='F' %THEN I=I+1
{
// Double-sided test on CH[K] (Part I)
unsigned char tmp;
if (48 > (tmp = CH[K])) goto L_001C;
// Double-sided test on CH[K] (Part II)
if (tmp <= 57) goto L_001D;
}
L_001C:;
{
// Double-sided test on CH[K] (Part I)
unsigned char tmp;
if (65 > (tmp = CH[K])) goto L_001E;
// Double-sided test on CH[K] (Part II)
if (tmp <= 70) goto L_001D;
}
L_001E:;
I = I + 1;
L_001D:;
// 29 %REPEAT
goto L_0019;
}
L_001A:;
// 30 %IF I=4004 %THEN PRINTSTRING("TEST OK") %ELSE %C
if (I != 4004) goto L_001F;
_imp_PRINTSTRING(_imp_str_literal("TEST OK"));
goto L_0020;
L_001F:;
_imp_PRINTSTRING(_imp_str_literal("WRONG ANSWERS"));
_imp_WRITE(I, 5);
L_0020:;
// 31+ PRINTSTRING("WRONG ANSWERS") %AND WRITE(I,5)
// 32 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}