#include <perms.h>
static const int Maxevent = 16;
static Eventfm Lastevent;
_imp_string Handlername(int Address);
Eventfm *Event(void) { return (&Lastevent); }
void Saveevent(int Line, int Event, int Sub, int Info) {
  static int Esw_sw;
  static void *Esw[16 /*0:15*/] = {
      &&Esw_0,       &&Esw_1,       &&Esw_2,       &&Esw_3,
      &&Esw_4,       &&Esw_5,       &&Esw_6,       &&Esw_7,
      &&Esw_8,       &&Esw_9,       &&Esw_10,      &&Esw_default,
      &&Esw_default, &&Esw_default, &&Esw_default, &&Esw_default,
  };
  _imp_string E;
  _imp_string S;
  _imp_string X;
  _imp_string Msg;
  _imp_string Eventmsg;
  E = Itos(Event, 0);
  S = Itos(Sub, 0);
  X = Itos(Info, 0);
  Eventmsg = _imp_join(
      _imp_str_literal("("),
      _imp_join(
          E,
          _imp_join(
              _imp_str_literal(","),
              _imp_join(S, _imp_join(_imp_str_literal(","),
                                     _imp_join(X, _imp_str_literal(")")))))));
  if (0 < Event && Event < Maxevent) goto *Esw[Esw_sw = Event];
  goto *Esw[Esw_sw = Maxevent - 1];
Esw_0:;
  {
    if (Sub < 0) Msg = _imp_str_literal("Abandon program, sauve qui puet!");
    if (Sub == 0) Msg = _imp_str_literal("%stop");
    if (Sub > 0) Msg = _imp_join(_imp_str_literal("User generated error. "), S);
  }
  goto Esac;
Esw_1:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_4,       &&Ssw_5,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Integer overflow");
    goto Es;
  Ssw_2:
    Msg = _imp_str_literal("Real overflow");
    goto Es;
  Ssw_3:
    Msg = _imp_str_literal("String overflow");
    goto Es;
  Ssw_4:
    Msg = _imp_str_literal("Division by zero");
    goto Es;
  Ssw_5:
    Msg = _imp_str_literal("Truncation");
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Overflow "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_2:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Not enough store");
    goto Es;
  Ssw_2:
    Msg = _imp_str_literal("Output exceeded");
    goto Es;
  Ssw_3:
    Msg = _imp_str_literal("Time exceeded");
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Excess Resource "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_3:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_join(_imp_str_literal("Data error - Symbol '"),
                    _imp_join(Tostring(Info & 0xFF),
                              _imp_join(_imp_str_literal("' ("),
                                        _imp_join(X, _imp_str_literal(")")))));
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Data error "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_4:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Symbol in data");
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Invalid data "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_5:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_4,       &&Ssw_5,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Illegal FOR loop");
    goto Es;
  Ssw_2:
    Msg = _imp_join(_imp_str_literal("Illegal exponent - Exponent = "), X);
    goto Es;
  Ssw_3:
    Msg = _imp_str_literal("Array inside-out");
    goto Es;
  Ssw_4:
    Msg = _imp_str_literal("String inside-out");
    goto Es;
  Ssw_5:
    Msg = _imp_join(_imp_str_literal("Illegal exponent '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_default:
    Msg = _imp_join(
        _imp_str_literal("Invalid argument - '"),
        _imp_join(
            E,
            _imp_join(
                _imp_str_literal(" Sub-class = "),
                _imp_join(S, _imp_join(_imp_str_literal(", Value = "),
                                       _imp_join(X, _imp_str_literal("'")))))));
    goto Es;
  Es:;
  }
  goto Esac;
Esw_6:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_4,       &&Ssw_5,       &&Ssw_6,       &&Ssw_7,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Capacity exceeded");
    if (Info == 1)
      Msg = _imp_join(Msg, _imp_str_literal(" (String copy overflow)"));
    if (Info == 2)
      Msg = _imp_join(Msg, _imp_str_literal(" (String append overflow)"));
    Msg = _imp_join(Msg, _imp_str_literal("."));
    goto Es;
  Ssw_2:
    Msg = _imp_join(_imp_str_literal("Array bound fault - Index = "), X);
    goto Es;
  Ssw_3:
    Msg = _imp_join(_imp_str_literal("Switch bound fault = "), X);
    goto Es;
  Ssw_4:
    Msg = _imp_str_literal("Illegal event signal");
    goto Es;
  Ssw_5:
    Msg = _imp_join(_imp_str_literal("CHARNO out of range '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_6:
    Msg = _imp_join(_imp_str_literal("TOSTRING out of range '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_7:
    Msg = _imp_join(_imp_str_literal("Illegal shift '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_default:
    Msg = _imp_join(
        _imp_str_literal("Out of range fault - (Event,Sub,Info)=("),
        _imp_join(
            E,
            _imp_join(
                _imp_str_literal(","),
                _imp_join(S, _imp_join(_imp_str_literal(","),
                                       _imp_join(X, _imp_str_literal(")")))))));
    goto Es;
  Es:;
  }
  goto Esac;
Esw_7:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Resolution fails "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_8:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_str_literal("Unassigned variable");
    goto Es;
  Ssw_2:
    Msg = _imp_join(_imp_str_literal("No switch label '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_3:
    Msg = _imp_str_literal("For variable corrupt");
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Undefined switch value "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_9:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_0,       &&Ssw_1,       &&Ssw_2,       &&Ssw_3,
        &&Ssw_4,       &&Ssw_5,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_9,       &&Ssw_10,      &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_0:
    Msg = _imp_str_literal("End of input");
    goto Es;
  Ssw_1:
    Msg = _imp_str_literal("Unexpected end of input");
    goto Es;
  Ssw_2:
    Msg = _imp_join(_imp_str_literal("Couldn't open file. Error Code ("),
                    _imp_join(X, _imp_str_literal(")")));
    goto Es;
  Ssw_3:
    Msg = _imp_join(_imp_str_literal("File system error '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_4:
    Msg = _imp_join(_imp_str_literal("Input stream '"),
                    _imp_join(X, _imp_str_literal("' not opened")));
    goto Es;
  Ssw_5:
    Msg = _imp_join(_imp_str_literal("Output stream '"),
                    _imp_join(X, _imp_str_literal("' not opened")));
    goto Es;
  Ssw_9:
    Msg = _imp_join(_imp_str_literal("Bad stream# '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_10:
    Msg = _imp_join(_imp_str_literal("Invalid filename for stream# '"),
                    _imp_join(X, _imp_str_literal("'")));
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Input/Output error "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_10:;
  {
    static int Ssw_sw;
    static void *Ssw[16 /*0:15*/] = {
        &&Ssw_default, &&Ssw_1,       &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
        &&Ssw_default, &&Ssw_default, &&Ssw_default, &&Ssw_default,
    };
    goto *Ssw[Ssw_sw = Sub & 0xF];
  Ssw_1:
    Msg = _imp_join(
        _imp_str_literal("Incorrect command line parameter count. Argc="), X);
    goto Es;
  Ssw_default:
    Msg = _imp_join(_imp_str_literal("Library procedure error "), Eventmsg);
    goto Es;
  Es:;
  }
  goto Esac;
Esw_default:;
  Msg = _imp_join(_imp_str_literal("Signal "),
                  _imp_join(Eventmsg, _imp_str_literal(" called.")));
  goto Esac;
Esac:;
  Lastevent.Event = Event;
  Lastevent.Sub = Sub;
  Lastevent.Info = Info;
  Lastevent.Line = Line;
  Lastevent.Message = Msg;
}
void Messageformata(int Messageid) {
  static int Mess_sw;
  static void *Mess[8 /*1:8*/] = {
      &&Mess_1, &&Mess_2, &&Mess_3,       &&Mess_4,
      &&Mess_5, &&Mess_6, &&Mess_default, &&Mess_default,
  };
  _imp_string Evt;
  _imp_string Sub;
  _imp_string Xtr;
  Evt = Itos(Lastevent.Event(), 0);
  Sub = Itos(Lastevent.Sub, 0);
  Xtr = Itos(Lastevent.Info, 0);
  Selectoutput(0);
  Newline();
  Printstring(_imp_str_literal("IMPRTL: "));
  goto *Mess[Mess_sw = (Messageid)-1];
Mess_1:
  Printstring(_imp_str_literal("SHOWEVENT: "));
  Printstring(Lastevent.Message);
  goto Esac;
Mess_2:
  Printstring(_imp_str_literal("Start of Stack dump - triggered at line="));
  Printstring(Int2ascii);
  goto Esac;
Mess_3:
  Printstring(
      _imp_str_literal("Signal No handler found for signalled event ("));
  Printstring(Evt);
  Printstring(_imp_str_literal(", "));
  Printstring(Sub);
  Printstring(_imp_str_literal(", "));
  Printstring(Xtr);
  Printstring(_imp_str_literal(")."));
  goto Esac;
Mess_4:
  Printstring(_imp_str_literal("Possible stack error?"));
  goto Esac;
Mess_5:
  Printstring(_imp_str_literal("End of Stack dump"));
  goto Esac;
Mess_6:
  Printstring(_imp_str_literal("Stopping program with exit status="));
  Printstring(Sub);
  goto Esac;
Mess_default:
  Printstring(_imp_str_literal("Unknown message# given."));
  goto Esac;
Esac:;
  Newline();
}
void Messageformatb(int Loc) {
  Selectoutput(0);
  Printstring(_imp_str_literal("IMPRTL: "));
  Printstring(_imp_str_literal("Called from (x'"));
  Printstring(Int2ascii);
  Printstring(_imp_str_literal("') in '"));
  Printstring(Handlername(Loc));
  Printstring(_imp_str_literal("'"));
  Newline();
}
