#include <perms.h>

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

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

  //     4
  //     5     %on %event 15 %start

  if (!_imp_on_event(15)) goto L_0001;

    //     6       print string("END OF DIAGNOSTICS") %and newline

  _imp_PRINTSTRING(_imp_str_literal("END OF DIAGNOSTICS"));
  _imp_NEWLINE();

  //     7       %stop

  _imp_stop(0);

  //     8     %finish

L_0001:;

//     9
//    10     %routine the procedure(%integer i)

  void THEPROCEDURE(int I) {
    //    11       %integer local variable

    int LOCALVARIABLE;

    //    12       local variable = i

    LOCALVARIABLE = I;

    //    13
    //    14       %on %event 15 %start

    if (!_imp_on_event(15)) goto L_0002;

      //    15         print string("Entered from THEPROCEDURE ") %and write(i,-1) %and newline ; newline

    _imp_PRINTSTRING(_imp_str_literal("Entered from THEPROCEDURE "));
    _imp_WRITE(I, -1);
    _imp_NEWLINE();
    _imp_NEWLINE();

    //    16         print string("LOCALVARIABLE = ") %and write(local variable,-1) %and newline

    _imp_PRINTSTRING(_imp_str_literal("LOCALVARIABLE = "));
    _imp_WRITE(LOCALVARIABLE, -1);
    _imp_NEWLINE();

    //    17
    //    18         %signal 15, event_sub, event_info

    _imp_signal(15, _imp_EVENT().SUB, _imp_EVENT().INFO, "");

    //    19       %finish

  L_0002:;

  //    20
  //    21       %signal 15, 1 %if i >= 10

    if (I < 10) goto L_0003;
    _imp_signal(15, 1, 0, "");
  L_0003:;

  //    22       the procedure(i+3)

    THEPROCEDURE(I + 3);

    //    23     %end

    return;
  } /* end of THEPROCEDURE */

  //    24
  //    25
  //    26
  //    27
  //    28
  //    29
  //    30
  //    31       print string("portable version") %and newline

  _imp_PRINTSTRING(_imp_str_literal("portable version"));
  _imp_NEWLINE();

  //    32
  //    33
  //    34     the procedure(1)

  THEPROCEDURE(1);

  //    35
  //    36  %endofprogram

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