#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2    %integerarray d1(10:11)

  int D1[2];
  struct _imp_dv D1_dv = {D1, sizeof(int) /*, dims, <bounds> */};

  //     3    %integerarray d2(0:1,-5:2)

  int D2[2][8];
  struct _imp_dv D2_dv = {D2, sizeof(int) /*, dims, <bounds> */};

  //     4    %integerarray d3(0:1,0:2,0:3)

  int D3[2][3][4];
  struct _imp_dv D3_dv = {D3, sizeof(int) /*, dims, <bounds> */};

  //     5    %integerarray d4(0:1,0:2,0:3,0:4)

  int D4[2][3][4][5];
  struct _imp_dv D4_dv = {D4, sizeof(int) /*, dims, <bounds> */};

  //     6    %integerarray d5(0:1,0:2,0:3,0:4,0:5)

  int D5[2][3][4][5][6];
  struct _imp_dv D5_dv = {D5, sizeof(int) /*, dims, <bounds> */};

  //     7    %integerarray d6(0:1,0:2,0:3,0:4,-22:5,0:6)

  int D6[2][3][4][5][28][7];
  struct _imp_dv D6_dv = {D6, sizeof(int) /*, dims, <bounds> */};

  //     8    ! TOO MANY BOUNDS!  %integerarray d7(0:1,0:2,0:3,0:4,0:5,0:6,0:7)
  //     9
  //    10    d1(10) = 1

  D1[0] = 1;

  //    11    d2(1,2) = 2

  D2[1][7] = 2;

  //    12    d3(1,2,3) = 3

  D3[1][2][3] = 3;

  //    13    d4(1,2,3,4) = 4

  D4[1][2][3][4] = 4;

  //    14    d5(1,2,3,4,5) = 5

  D5[1][2][3][4][5] = 5;

  //    15    d6(1,2,3,4,5,6) = 6

  D6[1][2][3][4][27][6] = 6;

  //    16
  //    17    %integer i

  int I;

  //    18
  //    19    i = d1(10)

  I = D1[0];

  //    20    i = d2(1,2)

  I = D2[1][7];

  //    21    i = d3(1,2,3)

  I = D3[1][2][3];

  //    22    i = d4(1,2,3,4)

  I = D4[1][2][3][4];

  //    23    i = d5(1,2,3,4,5)

  I = D5[1][2][3][4][5];

  //    24    i = d6(1,2,3,4,5,6)

  I = D6[1][2][3][4][27][6];

  //    25
  //    26  %endofprogram

  _imp_stop(0);
  return 0;
end_0:;
}