begin
  ! It would appear that Imp and C do not store their arrays in the same x-major order.
  integerarray d2(0:1, 0:2)
  ownintegerarray d1(0:5) = 0,1,2,3,4,5
  integername d, e
  integer i,j
  d == d2(0,0);            e == d1(0);              d = e;
  d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
  d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
  d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
  d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
  d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
  for i = 0, 1, 1 cycle
    for j = 0, 1, 2 cycle
      printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(",  ");
    repeat
    newline
  repeat
  newline
  for i = 0, 1, 2 cycle
    for j = 0, 1, 1 cycle
      printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(",  ");
    repeat
    newline
  repeat
  newline
endofprogram

!IMP77:
!gtoal@linux:~/src/compilers101/new-parser/imps$ /tmp/temptest
!d2(0, 0) = 0,  d2(0, 1) = 1,  d2(0, 2) = 2,
!d2(1, 0) = 3,  d2(1, 1) = 4,  d2(1, 2) = 5,
!
!d2(0, 0) = 0,  d2(1, 0) = 3,
!d2(0, 1) = 1,  d2(1, 1) = 4,
!d2(0, 2) = 2,  d2(1, 2) = 5,
!
![Inferior 1 (process 26840) exited normally]
!No stack.


! IMPTOC:
!gtoal@linux:~/src/compilers101/new-parser/imps$ ./test119
!d2(0, 0) = 0,  d2(0, 1) = 2,  d2(0, 2) = 4,
!d2(1, 0) = 1,  d2(1, 1) = 3,  d2(1, 2) = 5,
!
!d2(0, 0) = 0,  d2(1, 0) = 1,
!d2(0, 1) = 2,  d2(1, 1) = 3,
!d2(0, 2) = 4,  d2(1, 2) = 5,


!#include <perms.h>
!int _imp_mainep(int _imp_argc, char **_imp_argv)
!{
!  _imp_enter();
!  int D2[1 - 0 + 1][2 - 0 + 1];
!  static int D1[5 - 0 + 1] = { 0, 1, 2, 3, 4, 5 };
!  int *D;
!  int *E;
!  int I;
!  int J;
!  D = &D2[0][0];
!  E = &D1[0];
!  *D = *E;
!  D = &INTEGER((char *)ADDR(*D) + 4);
!  E = &INTEGER((char *)ADDR(*E) + 4);
!  *D = *E;
!  D = &INTEGER((char *)ADDR(*D) + 4);
!  E = &INTEGER((char *)ADDR(*E) + 4);
!  *D = *E;
!  D = &INTEGER((char *)ADDR(*D) + 4);
!  E = &INTEGER((char *)ADDR(*E) + 4);
!  *D = *E;
!  D = &INTEGER((char *)ADDR(*D) + 4);
!  E = &INTEGER((char *)ADDR(*E) + 4);
!  *D = *E;
!  D = &INTEGER((char *)ADDR(*D) + 4);
!  E = &INTEGER((char *)ADDR(*E) + 4);
!  *D = *E;
!  for (I = 0; I <= 1; I += 1) {
!    for (J = 0; J <= 2; J += 1) {
!      PRINTSTRING(_imp_str_literal("d2("));
!      WRITE(I, 0);
!      PRINTSTRING(_imp_str_literal(", "));
!      WRITE(J, 0);
!      PRINTSTRING(_imp_str_literal(") = "));
!      WRITE(D2[I][J], 0);
!      PRINTSTRING(_imp_str_literal(",  "));
!    }
!    NEWLINE();
!  }
!  NEWLINE();
!  for (I = 0; I <= 2; I += 1) {
!    for (J = 0; J <= 1; J += 1) {
!      PRINTSTRING(_imp_str_literal("d2("));
!      WRITE(J, 0);
!      PRINTSTRING(_imp_str_literal(", "));
!      WRITE(I, 0);
!      PRINTSTRING(_imp_str_literal(") = "));
!      WRITE(D2[J][I], 0);
!      PRINTSTRING(_imp_str_literal(",  "));
!    }
!    NEWLINE();
!  }
!  NEWLINE();
!  _imp_leave();
!}