#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 ! SIMPLE TEST OF BYTE POINTER VARIABLES AFTER PERQ
// 2 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 3 %owninteger fail=0
static int FAIL = 0;
// 4 %BYTEINTEGERARRAY a(1:10)
unsigned char A[10];
// 5 %BYTEINTEGERNAME ap
unsigned char *AP;
// 6 %INTEGER i
int I;
// 7 %ROUTINE or(%BYTEINTEGERNAME x)
void OR(unsigned char *X) {
// 8 x=x!64
*X = *X | 64;
// 9 %END
return;
} /* end of OR */
// 10 a(i)=i %FOR i=1,1,10
// %for I = 1, 1, 10 %cycle
{
I = 0;
L_0001:
if (I == 10) goto L_0002;
I += 1;
A[I - 1] = I;
goto L_0001;
}
L_0002:;
// 11 or(a(i)) %FOR i=1,1,10
// %for I = 1, 1, 10 %cycle
{
I = 0;
L_0004:
if (I == 10) goto L_0005;
I += 1;
OR(/*?*/ &A[I - 1]);
goto L_0004;
}
L_0005:;
// 12 %FOR i=1,1,10 %CYCLE
// %for I = 1, 1, 10 %cycle
{
I = 0;
L_0006:
if (I == 10) goto L_0007;
I += 1;
// 13 ap==a(i)
AP = (unsigned char *)/*?*/ &A[I - 1];
// 14 ap=ap!128
*AP = *AP | 128;
// 15 write(a(i),4) %and fail=1 %UNLESS a(i)=i!x'c0'
if (A[I - 1] == I | 192) goto L_0008;
_imp_WRITE(A[I - 1], 4);
FAIL = 1;
L_0008:;
// 16 %REPEAT
goto L_0006;
}
L_0007:;
// 17 printstring("TEST OK") %if fail=0
if (FAIL != 0) goto L_0009;
_imp_PRINTSTRING(_imp_str_literal("TEST OK"));
L_0009:;
// 18 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}