#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_enter();
  static void *TRAP[15 - 0 + 1] = {
      /* These need to be filled in from associated code block */};
  int SUB;
  static int FAILURES = 0;
  auto void PASS(void) {
    _imp_enter();
    PRINTSTRING(_imp_str_literal("Pass: "));
    _imp_leave();
  }
  auto void FAIL(void) {
    _imp_enter();
    PRINTSTRING(_imp_str_literal("FAIL: "));
    FAILURES = FAILURES + 1;
    _imp_leave();
  }
  if (_imp_on_event(0, 10, 13, 15)) {
    SUB = /*FN_MAP*/ EVENT()->SUB;
    goto *TRAP[/*FN_MAP*/ EVENT()->EVENT()];
  TRAP_10:;
    if (SUB == 116)
      PRINTSTRING(_imp_str_literal("Trapped an event inside an %ON block"));
    else
      PRINTSTRING(_imp_str_literal("Error in _Sub field for event 10"));
    NEWLINE();
    goto RESUME2;
  TRAP_15:;
    PRINTSTRING(_imp_str_literal("Trapped event inside a "));
    if (SUB == 115) {
      PRINTSTRING(_imp_str_literal("local routine."));
      NEWLINE(); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      if (/*FN_MAP*/ EVENT()->== 20)
        PASS();
      else
        FAIL();
      PRINTSTRING(_imp_str_literal("Event_Extra field correctly assigned."));
      NEWLINE();
      goto RESUME3;

    } else if (SUB == 118) {
      PRINTSTRING(_imp_str_literal("nested, deeply recursed routine."));
      NEWLINE();
      goto RESUME4;
    }
  TRAP_default:;
    PRINTSTRING(_imp_str_literal("FAIL: Unexpected event"));
    WRITE(/*FN_MAP*/ EVENT()->EVENT(), 1);
    NEWLINE();
    exit(0);
  }
  auto void TESTSTANDARDEVENTS(void) {
    _imp_enter();
    int J;
    int K;
    int C;
    int A;
    int START = 0;
    int ZERO = 0;
    int MINUS = -1;
    int UNASSIGNED;
    _imp_string S;
    _imp_string T;
    static void *EN[100 - 0 + 1] = {
        /* These need to be filled in from associated code block */};

    label... if (_imp_on_event(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) {
      if (K == 90) SELECTOUTPUT(1); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      if (/*FN_MAP*/ EVENT()->EVENT() == K / 10 &&
          /*FN_MAP*/ EVENT()->SUB == ()) {
        PRINTSTRING(_imp_str_literal("Successfully trapped:  Event ="));
        WRITE(K / 10, 1);
        PRINTSTRING(_imp_str_literal("   Sub ="));
            /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
        WRITE(, 1);
        NEWLINE();

      } else {
        PRINTSTRING(_imp_str_literal("Should have trapped:  Event ="));
        WRITE(K / 10, 1);
        PRINTSTRING(_imp_str_literal("   Sub ="));
            /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
        WRITE(, 1);
        NEWLINE();
        PRINTSTRING(_imp_str_literal("Instead trapped:  Event ="));
        WRITE(/*FN_MAP*/ EVENT()->EVENT(), 1);
        PRINTSTRING(_imp_str_literal("   Sub ="));
        WRITE(/*FN_MAP*/ EVENT()->SUB, 1);
        NEWLINE();
      }
      START = K + 1;
    }
    for (K = START; K != 100 + 1; K += 1) {
      WRITE(K, 1);
      NEWLINE();
      goto *EN[K];
    EN_0:;
      exit(0);
      goto CATCH;
    EN_11:;
      J = 2147483600;
      C = J * 3;
      goto CATCH;
    EN_13:;
      S = _imp_str_literal("1234567890");
      T = _imp_str_literal("");
      for (J = 1; J != 30 + 1; J += 1) T = _imp_join(T, S);
      goto CATCH;
    EN_14:;
      J = MINUS / ZERO;
      goto CATCH;
    EN_21:;
      {
        int TEMP[10000000 - 1 + 1];
        J = 10000000;
        TEMP[J] = 1;
      }
      goto CATCH;
    EN_33:;
      OPENINPUT(2, _imp_str_literal("ZZZZZ.ZZZ"));
      goto CATCH;
    EN_41:;
      OPENINPUT(2, _imp_str_literal("Char.dat"));
      SELECTINPUT(2);
      READ(J);
      goto CATCH;
    EN_51:;
      J = 0;
      A = 0;
      for (C = 2; C != J + 1; C += 1) {
        A = A + 1;
        if (A == 10) break;
      }
      goto CATCH;
    EN_52:;
      J = -4;
      C = IEXP(2, J);
      goto CATCH;
    EN_53:;
      J = 20;
      {
        int TEMP[J - 40 + 1];
        J = 35;
        TEMP[J] = 10;
      }
      goto CATCH;
    EN_54:;
      S = _imp_str_literal("1234567890");
      J = 20;
      S = SUBSTRING(S, J, 5);
      goto CATCH;
    EN_62:;
      J = 20;
      {
        int TEMP[J - 0 + 1];
        TEMP[J + 5] = 29;
      }
      goto CATCH;
    EN_65:;
      S = _imp_str_literal("1234567890");
      J = 20; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      C = MISSING_RHS;
      goto CATCH;
    EN_66:; /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      S = MISSING_RHS;
      goto CATCH;
    EN_67:;
      SELECTINPUT(20);
      goto CATCH;
    EN_70:;
      S = _imp_str_literal("ABCD");
      if (!_imp_cond_resolve(S, S, _imp_str_literal("EFGH"), NULL))
        _imp_signal(7, 0, 0);
      goto CATCH;
    EN_81:;
      J = UNASSIGNED;
      goto CATCH;
    EN_90:;
      OPENOUTPUT(2, _imp_str_literal("$Null.dat"));
      SELECTOUTPUT(2);
      CLOSEOUTPUT();
      OPENINPUT(2, _imp_str_literal("$Null.dat"));
      SELECTINPUT(2);
      READ(J);
      goto CATCH;
    CATCH:;
      PRINTSTRING(_imp_str_literal("FAILED to trap:  Event ="));
      WRITE(K / 10, 1);
      PRINTSTRING(_imp_str_literal("   Sub ="));
          /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
      WRITE(, 1);
      NEWLINE();
    EN_default:;
    }

    _imp_leave();
  }
  auto void EVENTFUL(int TRAP) {
    _imp_enter();
    int E = 14;
    if (_imp_on_event(14)) {
      if (E == 14 && TRAP == 1) _imp_signal(10, 116, 0, _imp_str_literal(""));
      E = E + 1;
    }
    if (E == 14) _imp_signal(14, 0, 0, _imp_str_literal(""));
    _imp_signal(15, 115, 20, _imp_str_literal(""));
    _imp_leave();
  }
  auto void INC(int D);
  auto void INC2(int D) {
    _imp_enter();
    auto void INC3(int D) {
      _imp_enter();
      auto void INC4(int D) {
        _imp_enter();
        auto void INC5(int D) {
          _imp_enter();
          if (D > 400) {
            _imp_signal(15, 118, 0, _imp_str_literal(""));
            PRINTSTRING(_imp_str_literal("FAIL: To raise a deep event."));
            NEWLINE();
            {
              _imp_leave();
              return;
            }
          }
          INC(D + 1);
          _imp_leave();
        }
        INC5(D + 1);
        _imp_leave();
      }
      INC4(D + 1);
      _imp_leave();
    }
    INC3(D + 1);
    _imp_leave();
  }
  auto void INC(int D) {
    _imp_enter();
    INC2(D + 1);
    _imp_leave();
  }
  OPENOUTPUT(1, CLIPARAM());
  SELECTOUTPUT(1);
  NEWLINES(3);
  PRINTSTRING(_imp_str_literal("Test the Ability to Raise Standard Events"));
  NEWLINE();
  PRINTSTRING(_imp_str_literal("-----------------------------------------"));
  NEWLINES(2);
  TESTSTANDARDEVENTS();
  NEWLINES(2);
  EVENTFUL(1);
RESUME2:;
  EVENTFUL(0);
RESUME3:;
  INC(1);
RESUME4:;
  PRINTSTRING(_imp_str_literal("Returned from a depth correctly."));
  NEWLINES(2);
  SELECTOUTPUT(0);
  WRITE(FAILURES, 1);
  PRINTSTRING(_imp_str_literal(" failure(s)"));
  NEWLINE();
  _imp_leave();
  exit(0);
  return (0);
}
