#include <perms.h>

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

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

  //     2    %INTEGERARRAY BAD(1:2)

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

  //     3    %INTEGER I,J

  int I;
  int J;

  //     4    %ON %EVENT 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 %START

  if (!_imp_on_event(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) goto L_0001;

    //     5      PRINT STRING("TRAPPED!"); NEWLINE

  _imp_PRINTSTRING(_imp_str_literal("TRAPPED!"));
  _imp_NEWLINE();

  //     6      %STOP

  _imp_stop(0);

  //     7    %FINISH

L_0001:;

//     8    BAD(0) = 123

  BAD[-1] = 123;

  //     9    BAD(1) = 234

  BAD[0] = 234;

  //    10    J = 1

  J = 1;

  //    11    %CYCLE

L_0002:;

//    12      I = J + BAD(J)

  I = J + BAD[J - 1];

  //    13      PRINTSTRING("I = "); WRITE(I,0); NEWLINE

  _imp_PRINTSTRING(_imp_str_literal("I = "));
  _imp_WRITE(I, 0);
  _imp_NEWLINE();

  //    14      I = J * BAD(1)

  I = J * BAD[0];

  //    15      I = BAD(J)

  I = BAD[J - 1];

  //    16      I = BAD(1)

  I = BAD[0];

  //    17      J = J+1

  J = J + 1;

  //    18    %REPEAT

  goto L_0002;

  //    19  %ENDOFPROGRAM

end_0:;
}