#include <perms.h>

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

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

  //     3  !***********************************************************************
  //     4  !*    A TEST TO CHECK THE LINE NUMBER OF A FAILURE AT RUN TIME         *
  //     5  !***********************************************************************
  //     6  %recordformat rf(%integer i,j,k)

  struct RF {
    union {
      struct {
        int I;
        int J;
        int K;
      };
    };
  };

  //     7  %record(rf) %name fred

  struct RF *FRED;

  //     8  %INTEGERARRAY A(0:4)

  int A[5];
  struct _imp_dv A_dv = {A, sizeof(int) /*, dims, <bounds> */};

  //     9  %INTEGER I

  int I;

  //    10  	fred==record(-1)

  FRED = (struct RF *)_imp_RECORD(-1);

  //    11        printstring("This gives diagnostics showing i = 10

  _imp_PRINTSTRING(_imp_str_literal("This gives diagnostics showing i = 10\n"));

  //    12+ ")
  //    13     I=10

  I = 10;

  //    14  %IF 1<0 %THEN %START

  if (1 >= 0) goto L_0001;

    //    15        !
    //    16        !
    //    17        %STOP

  _imp_stop(0);

  //    18  %FINISH %ELSE A(I)=A(I)+1

L_0001:;
  A[I] = A[I] + 1;

  //    19        !
  //    20  %ENDOFPROGRAM

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