#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 ! It would appear that Imp and C do not store their arrays in the same x-major order.
// 3 %integerarray d2(0:1, 0:2)
int D2[2][3];
// 4 %ownintegerarray d1(0:5) = 0,1,2,3,4,5
static int D1[6] = {0, 1, 2, 3, 4, 5};
// 5 %integername d, e
int *D;
int *E;
// 6 %integer i,j
int I;
int J;
// 7 d == d2(0,0); e == d1(0); d = e;
D = (int *)/*?*/ &D2[0][0];
E = (int *)/*?*/ &D1[0];
*D = *E;
// 8 d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
D = (int *)_imp_INTEGER(_imp_ADDR(D) + 4);
E = (int *)_imp_INTEGER(_imp_ADDR(E) + 4);
*D = *E;
// 9 d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
D = (int *)_imp_INTEGER(_imp_ADDR(D) + 4);
E = (int *)_imp_INTEGER(_imp_ADDR(E) + 4);
*D = *E;
// 10 d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
D = (int *)_imp_INTEGER(_imp_ADDR(D) + 4);
E = (int *)_imp_INTEGER(_imp_ADDR(E) + 4);
*D = *E;
// 11 d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
D = (int *)_imp_INTEGER(_imp_ADDR(D) + 4);
E = (int *)_imp_INTEGER(_imp_ADDR(E) + 4);
*D = *E;
// 12 d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
D = (int *)_imp_INTEGER(_imp_ADDR(D) + 4);
E = (int *)_imp_INTEGER(_imp_ADDR(E) + 4);
*D = *E;
// 13 %for i = 0, 1, 1 %cycle
// %for I = 0, 1, 1 %cycle
{
I = -1;
L_0001:
if (I == 1) goto L_0002;
I += 1;
// 14 %for j = 0, 1, 2 %cycle
// %for J = 0, 1, 2 %cycle
{
J = -1;
L_0004:
if (J == 2) goto L_0005;
J += 1;
// 15 printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(", ");
_imp_PRINTSTRING(_imp_str_literal("d2("));
_imp_WRITE(I, 0);
_imp_PRINTSTRING(_imp_str_literal(", "));
_imp_WRITE(J, 0);
_imp_PRINTSTRING(_imp_str_literal(") = "));
_imp_WRITE(D2[I][J], 0);
_imp_PRINTSTRING(_imp_str_literal(", "));
// 16 %repeat
goto L_0004;
}
L_0005:;
// 17 newline
_imp_NEWLINE();
// 18 %repeat
goto L_0001;
}
L_0002:;
// 19 newline
_imp_NEWLINE();
// 20 %for i = 0, 1, 2 %cycle
// %for I = 0, 1, 2 %cycle
{
I = -1;
L_0007:
if (I == 2) goto L_0008;
I += 1;
// 21 %for j = 0, 1, 1 %cycle
// %for J = 0, 1, 1 %cycle
{
J = -1;
L_0009:
if (J == 1) goto L_000A;
J += 1;
// 22 printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(", ");
_imp_PRINTSTRING(_imp_str_literal("d2("));
_imp_WRITE(J, 0);
_imp_PRINTSTRING(_imp_str_literal(", "));
_imp_WRITE(I, 0);
_imp_PRINTSTRING(_imp_str_literal(") = "));
_imp_WRITE(D2[J][I], 0);
_imp_PRINTSTRING(_imp_str_literal(", "));
// 23 %repeat
goto L_0009;
}
L_000A:;
// 24 newline
_imp_NEWLINE();
// 25 %repeat
goto L_0007;
}
L_0008:;
// 26 newline
_imp_NEWLINE();
// 27 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}