#include <perms.h>

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

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

  //     2  {----------------------------------------}
  //     3  {                                        }
  //     4  { MOS Technology M6500 Series Assembler. }
  //     5  {                                        }
  //     6  { Copyright M.R.King, 27/3/1984.         }
  //     7  { All rights reserved.                   }
  //     8  {                                        }
  //     9  {----------------------------------------}
  //    10
  //    11  %own %string(255) copyright = %c

  static _imp_string255 COPYRIGHT =
      _imp_str_init("M6500 Series Assembler. Copyright M.R.King, 27/3/1984. All rights reserved.");

  //    12+ "M6500 Series Assembler. Copyright M.R.King, 27/3/1984. All rights reserved."
  //    13
  //    14  %constant %integer names = 255,
  //    15+                    line width    = 78,
  //    16+                    lines on page = 66,
  //    17+                    max line = 512,
  //    18+                    insert limit = 10,
  //    19+                    xentries     = 1024
  //    20  %constinteger ihash=59
  //    21  %constant %byte %integer %array hilink(0:58) = %c

  const unsigned char HILINK[59] = {13, 28, 0,  0,  36, 0, 29, 50, 0,  25, 26, 59, 1, 16, 27, 14, 64, 23, 4,  6,
                                    42, 11, 41, 15, 35, 0, 0,  34, 0,  30, 32, 0,  0, 31, 8,  3,  5,  0,  43, 0,
                                    51, 60, 48, 12, 68, 0, 49, 19, 20, 0,  9,  67, 7, 45, 2,  22, 0,  0,  47};

  //    22+      13,  28,   0,   0,  36,   0,  29,  50,   0,  25,  26,  59,
  //    23+       1,  16,  27,  14,  64,  23,   4,   6,  42,  11,  41,  15,
  //    24+      35,   0,   0,  34,   0,  30,  32,   0,   0,  31,   8,   3,
  //    25+       5,   0,  43,   0,  51,  60,  48,  12,  68,   0,  49,  19,
  //    26+      20,   0,   9,  67,   7,  45,   2,  22,   0,   0,  47
  //    27  %constant %byte %integer %array ilink(1:69) = %c

  const unsigned char ILINK[69] = {0,  58, 10, 24, 40, 0,  17, 0, 18, 69, 52, 33, 0, 0,  0,  0,  53, 0,
                                   21, 0,  65, 63, 0,  0,  0,  0, 0,  0,  0,  38, 0, 37, 46, 54, 0,  0,
                                   39, 0,  0,  0,  56, 0,  44, 0, 57, 0,  55, 0,  0, 61, 0,  66, 0,  0,
                                   0,  0,  0,  0,  0,  62, 0,  0, 0,  0,  0,  0,  0, 0,  0};

  //    28+       0,  58,  10,  24,  40,   0,  17,   0,  18,  69,  52,  33,
  //    29+       0,   0,   0,   0,  53,   0,  21,   0,  65,  63,   0,   0,
  //    30+       0,   0,   0,   0,   0,  38,   0,  37,  46,  54,   0,   0,
  //    31+      39,   0,   0,   0,  56,   0,  44,   0,  57,   0,  55,   0,
  //    32+       0,  61,   0,  66,   0,   0,   0,   0,   0,   0,   0,  62,
  //    33+       0,   0,   0,   0,   0,   0,   0,   0,   0
  //    34  %constant %string(4) %array instr(1:69) = %c

  const _imp_string4 INSTR[69] = {
      _imp_str_init("LDA"),  _imp_str_init("STA"), _imp_str_init("LDX"), _imp_str_init("STX"), _imp_str_init("LDY"),
      _imp_str_init("STY"),  _imp_str_init("JSR"), _imp_str_init("BCC"), _imp_str_init("BCS"), _imp_str_init("BNE"),
      _imp_str_init("BEQ"),  _imp_str_init("BVC"), _imp_str_init("BVS"), _imp_str_init("BPL"), _imp_str_init("BMI"),
      _imp_str_init("JMP"),  _imp_str_init("RTS"), _imp_str_init("CMP"), _imp_str_init("CPX"), _imp_str_init("CPY"),
      _imp_str_init("DEC"),  _imp_str_init("INC"), _imp_str_init("INX"), _imp_str_init("INY"), _imp_str_init("DEX"),
      _imp_str_init("DEY"),  _imp_str_init("AND"), _imp_str_init("ORA"), _imp_str_init("EOR"), _imp_str_init("BIT"),
      _imp_str_init("LSR"),  _imp_str_init("ROR"), _imp_str_init("ASL"), _imp_str_init("LSL"), _imp_str_init("ROL"),
      _imp_str_init("SBC"),  _imp_str_init("ADC"), _imp_str_init("TAX"), _imp_str_init("TAY"), _imp_str_init("TYA"),
      _imp_str_init("TSX"),  _imp_str_init("TXA"), _imp_str_init("TXS"), _imp_str_init("PHA"), _imp_str_init("PHP"),
      _imp_str_init("PLA"),  _imp_str_init("PLP"), _imp_str_init("RTI"), _imp_str_init("BRK"), _imp_str_init("NOP"),
      _imp_str_init("CLV"),  _imp_str_init("CLC"), _imp_str_init("SEC"), _imp_str_init("CLI"), _imp_str_init("SEI"),
      _imp_str_init("CLD"),  _imp_str_init("SED"), _imp_str_init("FCB"), _imp_str_init("FDB"), _imp_str_init("EQU"),
      _imp_str_init("ORG"),  _imp_str_init("RMB"), _imp_str_init("FCC"), _imp_str_init("NAM"), _imp_str_init("OPT"),
      _imp_str_init("PAGE"), _imp_str_init("SPC"), _imp_str_init("MON"), _imp_str_init("END")};

  //    35+    "LDA","STA","LDX","STX","LDY","STY","JSR","BCC","BCS",
  //    36+    "BNE","BEQ","BVC","BVS","BPL","BMI","JMP","RTS","CMP",
  //    37+    "CPX","CPY","DEC","INC","INX","INY","DEX","DEY","AND",
  //    38+    "ORA","EOR","BIT","LSR","ROR","ASL","LSL","ROL","SBC",
  //    39+    "ADC","TAX","TAY","TYA","TSX","TXA","TXS","PHA","PHP",
  //    40+    "PLA","PLP","RTI","BRK","NOP","CLV","CLC","SEC","CLI",
  //    41+    "SEI","CLD","SED","FCB","FDB","EQU","ORG","RMB","FCC",
  //    42+    "NAM","OPT","PAGE","SPC","MON","END"
  //    43  %constant %byte %integer %array icode(1:69) = %c

  const unsigned char ICODE[69] = {
      161, 129, 162, 134, 160, 132, 32, 144, 176, 208, 240, 80, 112, 16, 48,  76,  96,  193, 224, 192, 198, 230, 232,
      200, 202, 136, 33,  1,   65,  32, 70,  102, 6,   6,   38, 225, 97, 170, 168, 152, 186, 138, 154, 72,  8,   104,
      40,  64,  0,   234, 184, 24,  56, 88,  120, 216, 248, 0,  0,   0,  0,   0,   0,   0,   0,   0,   0,   0,   0};

  //    44+    16_A1,16_81,16_A2,16_86,16_A0,16_84,16_20,16_90,16_B0,
  //    45+    16_D0,16_F0,16_50,16_70,16_10,16_30,16_4C,16_60,16_C1,
  //    46+    16_E0,16_C0,16_C6,16_E6,16_E8,16_C8,16_CA,16_88,16_21,
  //    47+    16_01,16_41,16_20,16_46,16_66,16_06,16_06,16_26,16_E1,
  //    48+    16_61,16_AA,16_A8,16_98,16_BA,16_8A,16_9A,16_48,16_08,
  //    49+    16_68,16_28,16_40,16_00,16_EA,16_B8,16_18,16_38,16_58,
  //    50+    16_78,16_D8,16_F8,16_00,16_00,16_00,16_00,16_00,16_00,
  //    51+    16_00,16_00,16_00,16_00,16_00,16_00
  //    52  %constant %byte %integer %array itype(1:69) = %c

  const unsigned char ITYPE[69] = {5, 6, 11, 13, 12, 14, 4,  2,  2,  2,  2,  2,  2,  2,  2, 3, 1, 5,
                                   9, 9, 8,  8,  1,  1,  1,  1,  5,  5,  5,  10, 7,  7,  7, 7, 7, 5,
                                   5, 1, 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 1, 1, 1,
                                   1, 1, 1,  15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25};

  //    53+      5,  6, 11, 13, 12, 14,  4,  2,  2,  2,  2,  2,  2,  2,  2,
  //    54+      3,  1,  5,  9,  9,  8,  8,  1,  1,  1,  1,  5,  5,  5, 10,
  //    55+      7,  7,  7,  7,  7,  5,  5,  1,  1,  1,  1,  1,  1,  1,  1,
  //    56+      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 15, 16, 17,
  //    57+     18, 19, 20, 21, 22, 23, 24, 25, 25
  //    58  %constant %integer %array icycles(1:69) = %c

  const int ICYCLES[69] = {2, 2, 2, 3, 2, 3, 6, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 2, 2, 2, 2, 2, 2,
                           2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4,
                           4, 6, 7, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  //    59+      2,  2,  2,  3,  2,  3,  6,  4,  4,  4,  4,  4,  4,  4,  4,
  //    60+      3,  6,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
  //    61+      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,
  //    62+      4,  4,  6,  7,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,
  //    63+      0,  0,  0,  0,  0,  0,  0,  0,  0
  //    64  %constant %integer no options = 51
  //    65  %constant %string(10) %array option text(1:no options) = %c

  const _imp_string10 OPTIONTEXT[51] = {
      _imp_str_init("BLANK"), _imp_str_init("B"),        _imp_str_init("NOBLANK"), _imp_str_init("NOB"),
      _imp_str_init("CYCLE"), _imp_str_init("C"),        _imp_str_init("NOCYCLE"), _imp_str_init("NOC"),
      _imp_str_init("DB8"),   _imp_str_init("DB10"),     _imp_str_init("DB16"),    _imp_str_init("ERROR"),
      _imp_str_init("E"),     _imp_str_init("SERROR"),   _imp_str_init("SER"),     _imp_str_init("NOERROR"),
      _imp_str_init("NOE"),   _imp_str_init("FULL"),     _imp_str_init("F"),       _imp_str_init("NOFULL"),
      _imp_str_init("NOF"),   _imp_str_init("GENERATE"), _imp_str_init("G"),       _imp_str_init("NOGENERATE"),
      _imp_str_init("NOG"),   _imp_str_init("LIST"),     _imp_str_init("L"),       _imp_str_init("SLIST"),
      _imp_str_init("SLIS"),  _imp_str_init("NOLIST"),   _imp_str_init("NOL"),     _imp_str_init("PAGE"),
      _imp_str_init("P"),     _imp_str_init("NOPAGE"),   _imp_str_init("NOP"),     _imp_str_init("SYMBOL"),
      _imp_str_init("S"),     _imp_str_init("NOSYMBOL"), _imp_str_init("NOS"),     _imp_str_init("TAB"),
      _imp_str_init("T"),     _imp_str_init("NOTAB"),    _imp_str_init("NOT"),     _imp_str_init("WRAP"),
      _imp_str_init("W"),     _imp_str_init("NOWRAP"),   _imp_str_init("NOW"),     _imp_str_init("XREF"),
      _imp_str_init("X"),     _imp_str_init("NOXREF"),   _imp_str_init("NOX")};

  auto _imp_string255 LC(_imp_string255 SOURCE);

  auto int MATCHES(_imp_string255 SOURCE, _imp_string255 PATTERN, int MIN, int *I);

  auto int ISTYPED(_imp_string255 SOURCE, _imp_string255 * FILE);

  auto void READLINE(void);

  auto void NEXTCHAR(void);

  auto int MOREITEMS(void);

  auto int GETNAME(int *NID);

  auto int GETOPTION(int *OPT);

  auto int GETINSTR(int *IID);

  auto int GETOPD(int *OPD);

  auto int GETTERM(int *OPD);

  auto int GETEXPRESSION(int *OPD);

  auto void EVALUATE(int *A, int B, unsigned char OP);

  auto int GETCONST(int *CVAL);

  auto void OUTSYMBOL(unsigned char CHAR);

  auto void OUTTAG(int *I, int *J, int COL);

  auto void INSTROUT(int OP, int OPD, int B, int CYC);

  auto void CLOSE(void);

  auto void FAULT(_imp_string63 S);

  auto void NLINE(int N);

  auto void BACKNUMBER(int N);

  auto void PRINTNUMBER(int N, int D);

  auto int INDEXED(unsigned char REG);

  auto int ACC(unsigned char ACCID);

  auto void SQS(int L, int R);

  auto void IMMEDIATE(unsigned char ORDER, unsigned char MCYCLES);

  auto void OPERAND(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES);

  auto void STORE(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES);

  //    66+    "BLANK", "B", "NOBLANK", "NOB", "CYCLE", "C", "NOCYCLE", "NOC",
  //    67+    "DB8", "DB10", "DB16", "ERROR", "E", "SERROR", "SER", "NOERROR",
  //    68+    "NOE", "FULL", "F", "NOFULL", "NOF",  "GENERATE", "G", "NOGENERATE",
  //    69+    "NOG", "LIST", "L", "SLIST", "SLIS", "NOLIST", "NOL", "PAGE", "P",
  //    70+    "NOPAGE", "NOP", "SYMBOL", "S", "NOSYMBOL", "NOS", "TAB", "T",
  //    71+    "NOTAB", "NOT", "WRAP", "W", "NOWRAP", "NOW", "XREF", "X", "NOXREF",
  //    72+    "NOX"
  //    73  %string(255) %function %spec lc(%string(255) source)
  //    74  %predicate %spec matches(%string(255) source, pattern,
  //    75+       %integer min, %integer %name i)
  //    76  %predicate %spec is typed(%string(255) source, %string(255) %name file)
  //    77  %routine %spec read line
  //    78  %routine %spec next char
  //    79  %predicate %spec more items
  //    80  %integerfn %spec get name(%integername nid)
  //    81  %predicate %spec get option(%integer %name opt)
  //    82  %predicate %spec get instr(%integername id)
  //    83  %integerfn %spec get opd(%integername opd)
  //    84  %integer %function %spec get term(%integer %name opd)
  //    85  %integer %function %spec get expression(%integer %name opd)
  //    86  %routine %spec evaluate(%integer %name a, %integer b, %byte %integer op)
  //    87  %integerfn %spec get const(%integername cval)
  //    88  %routine %spec out symbol(%byte %integer char)
  //    89  %routine %spec out tag(%integer %name i, j, %integer col)
  //    90  %routine %spec instr out(%integer op,opd,b, cyc)
  //    91  %routine %spec close
  //    92  %routine %spec fault(%string(63) s)
  //    93  %routine %spec nline(%integer n)
  //    94  %routine %spec back number(%integer n)
  //    95  %routine %spec print number(%integer n,d)
  //    96  %predicate %spec indexed(%byte %integer reg)
  //    97  %predicate %spec acc(%byte %integer acc id)
  //    98  %routine %spec sqs(%integer l, r)
  //    99  %routine %spec immediate(%byte %integer order, mcycles)
  //   100  %routine %spec operand(%byte %integer reg, nreg, order, mcycles)
  //   101  %routine %spec store(%byte %integer reg, nreg, order, mcycles)
  //   102  %byte %integer %array buffer(1:16)

  unsigned char BUFFER[16];

  //   103  {%byte}%integer %array line(1:max line+1)

  int LINE[512 + 1 - 1 + 1];

  //   104  %integer ca, pass, faults, lp, opd, iid, lid, ln, nnames, i, j, k, opt,

  int CA;
  int PASS;
  int FAULTS;
  int LP;
  int OPD;
  int IID;
  int LID;
  int LN;
  int NNAMES;
  int I;
  int J;
  int K;
  int OPT;
  int ORDER;
  int CONSISTENT;
  int LASTCONSISTENT;
  int HEADSET;
  int PRESCHAR;
  int DELIM;
  int DRAD;
  int BCHAR;
  int PFLAG;
  int SFLAG;
  int GFLAG;
  int EFLAG;
  int LFLAG;
  int CFLAG;
  int WFLAG;
  int TFLAG;
  int XFLAG;
  int CONT;
  int SP1;
  int SP2;
  int SP3;
  int OLDCA;
  int MCYCLES;
  int NONDENSE;
  int REGFAULT;
  int L;
  int XXENTRIES;
  int FFLAG;
  int OSTARTED;
  int BUFFERCA;
  int BP;
  int LOOKAHEAD;

  //   105+    order, consistent, last consistent, headset, pres char, delim, drad,
  //   106+    bchar, pflag, sflag, gflag, eflag, lflag, cflag, wflag, tflag, xflag,
  //   107+    cont, sp1, sp2, sp3, old ca, mcycles, non dense, reg fault,
  //   108+    l, xxentries, fflag, ostarted, buffer ca, bp, look ahead
  //   109  %constant %integer nhash=67
  //   110  %byteinteger %array hnlink(0:nhash-1)

  unsigned char HNLINK[67 - 1 + 1];

  //   111  %string(6)%array name(1:names)

  _imp_string6 NAME[255];

  //   112  %integer%array nval(1:names)

  int NVAL[255];

  //   113  %byteinteger%array nass(1:names)

  unsigned char NASS[255];

  //   114  %byteinteger%array nlink(1:names)

  unsigned char NLINK[255];

  //   115  %integer %array xhead(1:names)

  int XHEAD[255];

  //   116  %integer %array xentry, xlink(1:xentries)

  int XENTRY[1024];
  int XLINK[1024];

  //   117  %switch option action(-1:no options)

  int OPTIONACTION_index;
  int OPTIONACTION_line;
  char *OPTIONACTION_file;
  static const void *OPTIONACTION[53] = {
      &&case_OPTIONACTION_M1, &&case_OPTIONACTION_0,  &&case_OPTIONACTION_1,  &&case_OPTIONACTION_2,
      &&case_OPTIONACTION_3,  &&case_OPTIONACTION_4,  &&case_OPTIONACTION_5,  &&case_OPTIONACTION_6,
      &&case_OPTIONACTION_7,  &&case_OPTIONACTION_8,  &&case_OPTIONACTION_9,  &&case_OPTIONACTION_10,
      &&case_OPTIONACTION_11, &&case_OPTIONACTION_12, &&case_OPTIONACTION_13, &&case_OPTIONACTION_14,
      &&case_OPTIONACTION_15, &&case_OPTIONACTION_16, &&case_OPTIONACTION_17, &&case_OPTIONACTION_18,
      &&case_OPTIONACTION_19, &&case_OPTIONACTION_20, &&case_OPTIONACTION_21, &&case_OPTIONACTION_22,
      &&case_OPTIONACTION_23, &&case_OPTIONACTION_24, &&case_OPTIONACTION_25, &&case_OPTIONACTION_26,
      &&case_OPTIONACTION_27, &&case_OPTIONACTION_28, &&case_OPTIONACTION_29, &&case_OPTIONACTION_30,
      &&case_OPTIONACTION_31, &&case_OPTIONACTION_32, &&case_OPTIONACTION_33, &&case_OPTIONACTION_34,
      &&case_OPTIONACTION_35, &&case_OPTIONACTION_36, &&case_OPTIONACTION_37, &&case_OPTIONACTION_38,
      &&case_OPTIONACTION_39, &&case_OPTIONACTION_40, &&case_OPTIONACTION_41, &&case_OPTIONACTION_42,
      &&case_OPTIONACTION_43, &&case_OPTIONACTION_44, &&case_OPTIONACTION_45, &&case_OPTIONACTION_46,
      &&case_OPTIONACTION_47, &&case_OPTIONACTION_48, &&case_OPTIONACTION_49, &&case_OPTIONACTION_50,
      &&case_OPTIONACTION_51};

  //   118  %switch itype1,itype2(1:25)

  int ITYPE1_index;
  int ITYPE1_line;
  char *ITYPE1_file;
  static const void *ITYPE1[25] = {
      &&case_ITYPE1_1,  &&case_ITYPE1_2,  &&case_ITYPE1_3,  &&case_ITYPE1_4,  &&case_ITYPE1_5,
      &&case_ITYPE1_6,  &&case_ITYPE1_7,  &&case_ITYPE1_8,  &&case_ITYPE1_9,  &&case_ITYPE1_10,
      &&case_ITYPE1_11, &&case_ITYPE1_12, &&case_ITYPE1_13, &&case_ITYPE1_14, &&case_ITYPE1_15,
      &&case_ITYPE1_16, &&case_ITYPE1_17, &&case_ITYPE1_18, &&case_ITYPE1_19, &&case_ITYPE1_20,
      &&case_ITYPE1_21, &&case_ITYPE1_22, &&case_ITYPE1_23, &&case_ITYPE1_24, &&case_ITYPE1_25};

  int ITYPE2_index;
  int ITYPE2_line;
  char *ITYPE2_file;
  static const void *ITYPE2[25] = {
      &&case_ITYPE2_1,  &&case_ITYPE2_2,  &&case_ITYPE2_3,  &&case_ITYPE2_4,  &&case_ITYPE2_5,
      &&case_ITYPE2_6,  &&case_ITYPE2_7,  &&case_ITYPE2_8,  &&case_ITYPE2_9,  &&case_ITYPE2_10,
      &&case_ITYPE2_11, &&case_ITYPE2_12, &&case_ITYPE2_13, &&case_ITYPE2_14, &&case_ITYPE2_15,
      &&case_ITYPE2_16, &&case_ITYPE2_17, &&case_ITYPE2_18, &&case_ITYPE2_19, &&case_ITYPE2_20,
      &&case_ITYPE2_21, &&case_ITYPE2_22, &&case_ITYPE2_23, &&case_ITYPE2_24, &&case_ITYPE2_25};

  //   119  %string(line width-45) header

  _imp_string33 HEADER;

  //   120  %string(*) %name file

  _imp_string *FILE;

  //   121  %string(255) params, source, list, object, dummy

  _imp_string255 PARAMS;
  _imp_string255 SOURCE;
  _imp_string255 LIST;
  _imp_string255 OBJECT;
  _imp_string255 DUMMY;

  //   122
  //   123     %on %event 9 %start

  if (!_imp_on_event(9)) goto L_0001;

    //   124        select output(0)

  _imp_SELECTOUTPUT(0);

  //   125        print string(event_message{source." does not exist."})

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = _imp_EVENT().MESSAGE /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   126        new line

  _imp_NEWLINE();

  //   127        %stop

  _imp_stop(0);

  //   128     %finish

L_0001:;

//   129
//   130  !  params = ""
//   131  !  select input(0)
//   132  !  read symbol(i)
//   133  !  params = params.to string(i) %and read symbol(i) %while i#nl
//   134  !  params = lc(params)
//   135     params = lc(cliparam)

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = LC(*({
                   __typeof__(_imp_string255) tmp = _imp_CLIPARAM() /*q*/;
                   (_imp_string255 *)&tmp;
                 }));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   136     source = ""

  _imp_strncpy(/*?*/ &SOURCE, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   137     list = ".n"

  _imp_strncpy(/*?*/ &LIST, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal(".n");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   138     object = ""

  _imp_strncpy(/*?*/ &OBJECT, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   139     dummy = ""

  _imp_strncpy(/*?*/ &DUMMY, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   140     %cycle

L_0002:;

//   141        i = 1

  I = 1;

  //   142        i = i+1 %while i<=length(params) %and charno(params, i)=' '

L_0003:;
  if (I > *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0004;
  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) != 32) goto L_0004;
  I = I + 1;
  goto L_0003;
L_0004:;

//   143        %exit %if i>length(params)

  if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0005;
  goto L_0006;
L_0005:;

//   144        params = substring(params, i, length(params))

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
                                      *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   145        %if charno(params, 1)='/' %start

  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1) != 47) goto L_0007;

    //   146           params = substring(params, 2, length(params))

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 2,
                                      *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   147           %if matches(params, "list", 1, i) %start

  if (!(MATCHES(
          *({
            __typeof__(_imp_string255) tmp = PARAMS /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          _imp_str_literal("list"), 1, /*?*/ &I)))
    goto L_0008;

    //   148              list = ""

  _imp_strncpy(/*?*/ &LIST, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   149              file == list

  FILE = (_imp_string *)/*?*/ &LIST;

  //   150           %finish %else %if matches(params, "object", 1, i) %start

  goto L_0009;
L_0008:;
  if (!(MATCHES(
          *({
            __typeof__(_imp_string255) tmp = PARAMS /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          _imp_str_literal("object"), 1, /*?*/ &I)))
    goto L_000A;

    //   151              object = ""

  _imp_strncpy(/*?*/ &OBJECT, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   152              file == object

  FILE = (_imp_string *)/*?*/ &OBJECT;

  //   153           %finish %else %if matches(params, "nolist", 3, i) %start

  goto L_0009;
L_000A:;
  if (!(MATCHES(
          *({
            __typeof__(_imp_string255) tmp = PARAMS /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          _imp_str_literal("nolist"), 3, /*?*/ &I)))
    goto L_000B;

    //   154              list = ".n"

  _imp_strncpy(/*?*/ &LIST, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal(".n");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   155              file == dummy

  FILE = (_imp_string *)/*?*/ &DUMMY;

  //   156           %finish %else %if matches(params, "noobject", 3, i) %start

  goto L_0009;
L_000B:;
  if (!(MATCHES(
          *({
            __typeof__(_imp_string255) tmp = PARAMS /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          _imp_str_literal("noobject"), 3, /*?*/ &I)))
    goto L_000C;

    //   157              object = ".n"

  _imp_strncpy(/*?*/ &OBJECT, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal(".n");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   158              file == dummy

  FILE = (_imp_string *)/*?*/ &DUMMY;

  //   159           %else

  goto L_0009;
L_000C:;

//   160              i = 1

  I = 1;

  //   161              file == dummy

  FILE = (_imp_string *)/*?*/ &DUMMY;

  //   162           %finish

L_0009:;

//   163           %exit %if i>length(params)

  if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_000D;
  goto L_0006;
L_000D:;

//   164           params = substring(params, i, length(params))

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
                                      *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   165           %continue %unless charno(params, 1)='='

  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1) == 61) goto L_000E;
  goto L_000F;
L_000E:;

//   166           %if length(params)>1 %start

  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS) <= 1) goto L_0010;

    //   167              params = substring(params, 2, length(params))

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 2,
                                      *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   168           %else

  goto L_0011;
L_0010:;

//   169              params = ""

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   170           %finish

L_0011:;

//   171       %else

  goto L_0012;
L_0007:;

//   172           file == source

  FILE = (_imp_string *)/*?*/ &SOURCE;

  //   173        %finish

L_0012:;

//   174        i = 1

  I = 1;

  //   175        i = i+1 %while i<=length(params) %and charno(params, i)#' ' %and %c

L_0013:;
  if (I > *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0014;
  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) == 32) goto L_0014;
  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) == 47) goto L_0014;
  I = I + 1;
  goto L_0013;
L_0014:;

//   176+                                             charno(params, i)#'/'
//   177        file = substring(params, 1, i-1) %if i>1

  if (I <= 1) goto L_0015;
  *FILE = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1, I - 1);
L_0015:;

//   178        %exit %if i>length(params)

  if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0016;
  goto L_0006;
L_0016:;

//   179        params = substring(params, i, length(params))

  _imp_strncpy(/*?*/ &PARAMS, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
                                      *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   180     %repeat

L_000F:;
  goto L_0002;
L_0006:;

//   181
//   182     %if source="" %start

  if (_imp_strcmp((_imp_string *)/*?*/ &SOURCE, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0017;

    //   183        select output(0)

  _imp_SELECTOUTPUT(0);

  //   184        print string("No source file specified.")

  _imp_PRINTSTRING(_imp_str_literal("No source file specified."));

  //   185        new line

  _imp_NEWLINE();

  //   186        %stop

  _imp_stop(0);

  //   187     %finish

L_0017:;

//   188
//   189     source = source.".asm" %unless is typed(source, params)

  if (ISTYPED(
          *({
            __typeof__(_imp_string255) tmp = SOURCE /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          (_imp_string255 *)/*p*/ /*?*/ &PARAMS))
    goto L_0018;

  _imp_strncpy(/*?*/ &SOURCE, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = *({
                   _imp_string255 tmp =
                       _imp_join((_imp_string *)/*?*/ &SOURCE, (_imp_string *)/*?*/ _imp_str_literal_ptr(".asm"));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 255);

L_0018:;

//   190
//   191     list   = params %if list=""

  if (_imp_strcmp((_imp_string *)/*?*/ &LIST, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0019;

  _imp_strncpy(/*?*/ &LIST, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = PARAMS;
                 (void *)&tmp;
               }),
               /*max:*/ 255);

L_0019:;

//   192     object = params %if object=""

  if (_imp_strcmp((_imp_string *)/*?*/ &OBJECT, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_001A;

  _imp_strncpy(/*?*/ &OBJECT, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = PARAMS;
                 (void *)&tmp;
               }),
               /*max:*/ 255);

L_001A:;

//   193     list = list.".lis" %unless is typed(list, dummy)

  if (ISTYPED(
          *({
            __typeof__(_imp_string255) tmp = LIST /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          (_imp_string255 *)/*p*/ /*?*/ &DUMMY))
    goto L_001B;

  _imp_strncpy(/*?*/ &LIST, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = *({
                   _imp_string255 tmp =
                       _imp_join((_imp_string *)/*?*/ &LIST, (_imp_string *)/*?*/ _imp_str_literal_ptr(".lis"));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 255);

L_001B:;

//   194     object = object.".obj" %unless is typed(object, dummy)

  if (ISTYPED(
          *({
            __typeof__(_imp_string255) tmp = OBJECT /*q*/;
            (_imp_string255 *)&tmp;
          })
              ,
          (_imp_string255 *)/*p*/ /*?*/ &DUMMY))
    goto L_001C;

  _imp_strncpy(/*?*/ &OBJECT, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = *({
                   _imp_string255 tmp =
                       _imp_join((_imp_string *)/*?*/ &OBJECT, (_imp_string *)/*?*/ _imp_str_literal_ptr(".obj"));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 255);

L_001C:;

//   195
//   196     open input(1, source)

  _imp_OPENINPUT(1,
                 *({
                   __typeof__(_imp_string255) tmp = SOURCE /*q*/;
                   (_imp_string255 *)&tmp;
                 })
  );

  //   197     open output(1, object)

  _imp_OPENOUTPUT(1,
                  *({
                    __typeof__(_imp_string255) tmp = OBJECT /*q*/;
                    (_imp_string255 *)&tmp;
                  })
  );

  //   198     open output(2, list)

  _imp_OPENOUTPUT(2,
                  *({
                    __typeof__(_imp_string255) tmp = LIST /*q*/;
                    (_imp_string255 *)&tmp;
                  })
  );

  //   199     select output(2)

  _imp_SELECTOUTPUT(2);

  //   200     headset = 0

  HEADSET = 0;

  //   201     header = ""

  _imp_strncpy(/*?*/ &HEADER, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 33);

  //   202     drad = 8

  DRAD = 8;

  //   203     sp1 = 2

  SP1 = 2;

  //   204     sp2 = 4

  SP2 = 4;

  //   205     pflag = 3

  PFLAG = 3;

  //   206     sflag = 0

  SFLAG = 0;

  //   207     eflag = 1

  EFLAG = 1;

  //   208     gflag = 1

  GFLAG = 1;

  //   209     lflag = 2

  LFLAG = 2;

  //   210     cflag = 0

  CFLAG = 0;

  //   211     wflag = 0

  WFLAG = 0;

  //   212     tflag = 1

  TFLAG = 1;

  //   213     xflag = 0

  XFLAG = 0;

  //   214     sp3 = line width-sp1-sp2*2-cflag*2-wflag-10

  SP3 = 78 - SP1 - SP2 * 2 - CFLAG * 2 - WFLAG - 10;

  //   215     cont = 0

  CONT = 0;

  //   216     faults=0

  FAULTS = 0;

  //   217     nnames=0

  NNAMES = 0;

  //   218     xxentries = 0

  XXENTRIES = 0;

  //   219     consistent = 0

  CONSISTENT = 0;

  //   220     hnlink(i)=0 %for i = 0, 1, nhash-1

  // %for I = 0, 1, 67 - 1 %cycle
  {
    int _final = 67 - 1;
    if (invalid_for_loop(0, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 0, 1, 67 - 1");
    I = -1;
  L_001D:
    if (I == _final) goto L_001E;
    I += 1;
    HNLINK[I] = 0;
    goto L_001D;
  }

L_001E:;

//   221     bp = 0

  BP = 0;

  //   222     ostarted = 0

  OSTARTED = 0;

  //   223     look ahead = 0

  LOOKAHEAD = 0;

  //   224  !-----------------------------------------------------------------------
  //   225     select input(1)

  _imp_SELECTINPUT(1);

  //   226     pass = 1

  PASS = 1;

  //   227     %cycle

L_0020:;

//   228        ln = 0

  LN = 0;

  //   229        ca = 0

  CA = 0;

  //   230        bchar = -1

  BCHAR = -1;

  //   231        fflag = 0

  FFLAG = 0;

  //   232        %cycle

L_0021:;

//   233            read line

  READLINE();

  //   234            %continue %if pres char='*'

  if (PRESCHAR != 42) goto L_0022;
  goto L_0023;
L_0022:;

//   235            %if get name(lid)=0 %start

  if (GETNAME(/*?*/ &LID) != 0) goto L_0024;

    //   236              %if pass=1 %start

  if (PASS != 1) goto L_0025;

    //   237                 %if nass(lid)=0 %start

  if (NASS[LID - 1] != 0) goto L_0026;

    //   238                    nval(lid) = ca

  NVAL[LID - 1] = CA;

  //   239                    nass(lid) = 1

  NASS[LID - 1] = 1;

  //   240                 %else

  goto L_0027;
L_0026:;

//   241                    nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   242                    nass(lid) = 2

  NASS[LID - 1] = 2;

  //   243                 %finish

L_0027:;

//   244              %finish %else %if nass(lid)=1 %and ca#nval(lid) %start

  goto L_0028;
L_0025:;
  if (NASS[LID - 1] != 1) goto L_0029;
  if (CA == NVAL[LID - 1]) goto L_0029;

    //   245                 nval(lid) = ca

  NVAL[LID - 1] = CA;

  //   246                 consistent = consistent+1

  CONSISTENT = CONSISTENT + 1;

  //   247              %finish

L_0029:;
L_0028:;

//   248            %else

  goto L_002A;
L_0024:;

//   249              lid = 0

  LID = 0;

  //   250           %finish

L_002A:;

//   251           next char %while pres char=' '

L_002B:;
  if (PRESCHAR != 32) goto L_002C;
  NEXTCHAR();
  goto L_002B;
L_002C:;

//   252           %continue %unless get instr(iid)

  if (GETINSTR(/*?*/ &IID)) goto L_002D;
  goto L_0023;
L_002D:;

//   253           next char %while pres char=' '

L_002E:;
  if (PRESCHAR != 32) goto L_002F;
  NEXTCHAR();
  goto L_002E;
L_002F:;

//   254           ->itype1(itype(iid))

  ITYPE1_line = __LINE__;
  ITYPE1_file = __FILE__;
  ITYPE1_index = ITYPE[IID - 1];
  goto case_ITYPE1_dispatch;

  //   255  !-----------------------------------------------------------------------
  //   256  itype1(1):! implied

case_ITYPE1_1:;

//   257           ca=ca+1

  CA = CA + 1;

  //   258           %continue

  goto L_0023;

  //   259  !-----------------------------------------------------------------------
  //   260  itype1(2):! relative

case_ITYPE1_2:;

//   261           ca=ca+2

  CA = CA + 2;

  //   262           %continue

  goto L_0023;

  //   263  !-----------------------------------------------------------------------
  //   264  itype1(3): ! JMP

case_ITYPE1_3:;

//   265  itype1(4): ! JSR

case_ITYPE1_4:;

//   266           ca = ca+3

  CA = CA + 3;

  //   267           %continue

  goto L_0023;

  //   268  !----------------------------------------------------------------------------
  //   269  itype1(5): ! immediate, direct, index, indir

case_ITYPE1_5:;

//   270           ca = ca+2 %and %continue %if pres char='#'

  if (PRESCHAR != 35) goto L_0031;
  CA = CA + 2;
  goto L_0023;
L_0031:;

//   271  !-------------------------------------------------------------------------
//   272  itype1(6): ! direct, index, indir

case_ITYPE1_6:;

//   273           %if pres char='(' %start

  if (PRESCHAR != 40) goto L_0032;

    //   274              ca = ca+2

  CA = CA + 2;

  //   275           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_0033;
L_0032:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_0034;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_0035;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_0035;
  }
L_0034:;

//   276              %if indexed('Y') %start

  if (!(INDEXED(89))) goto L_0036;

    //   277                 ca = ca+3

  CA = CA + 3;

  //   278              %else

  goto L_0037;
L_0036:;

//   279                 ca = ca+2

  CA = CA + 2;

  //   280              %finish

L_0037:;

//   281           %else

  goto L_0033;
L_0035:;

//   282              ca = ca+3

  CA = CA + 3;

  //   283           %finish

L_0033:;

//   284           %continue

  goto L_0023;

  //   285  !-------------------------------------------------------------------------
  //   286  itype1(7): ! rotate, shift

case_ITYPE1_7:;

//   287           ca = ca+1 %and %continue %if acc('A')

  if (!(ACC(65))) goto L_0038;
  CA = CA + 1;
  goto L_0023;
L_0038:;

//   288  itype1(8): ! inc, dec

case_ITYPE1_8:;

//   289           %if acc('X') %or indexed('X') %start

  if (ACC(88)) goto L_0039;
  if (!(INDEXED(88))) goto L_003A;
L_0039:;

//   290              ca = ca+2

  CA = CA + 2;

  //   291           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_003B;
L_003A:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_003C;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_003D;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_003D;
  }
L_003C:;

//   292              ca = ca+2

  CA = CA + 2;

  //   293           %else

  goto L_003B;
L_003D:;

//   294              ca = ca+3

  CA = CA + 3;

  //   295           %finish

L_003B:;

//   296           %continue

  goto L_0023;

  //   297  !-----------------------------------------------------------------------
  //   298  itype1(9): ! cpy, cpx

case_ITYPE1_9:;

//   299           ca = ca+2 %and %continue %if pres char='#'

  if (PRESCHAR != 35) goto L_003E;
  CA = CA + 2;
  goto L_0023;
L_003E:;

//   300  !----------------------------------------------------------------------
//   301  itype1(10): ! bit

case_ITYPE1_10:;

//   302           %if get opd(opd)#0 %or 0<=opd<=255 %start

  if (GETOPD(/*?*/ &OPD) != 0) goto L_003F;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_0040;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_0040;
  }
L_003F:;

//   303              ca = ca+2

  CA = CA + 2;

  //   304           %else

  goto L_0041;
L_0040:;

//   305              ca = ca+3

  CA = CA + 3;

  //   306           %finish

L_0041:;

//   307           %continue

  goto L_0023;

  //   308  !-----------------------------------------------------------------------
  //   309  itype1(11): ! ldx

case_ITYPE1_11:;

//   310           %if pres char = '#' %or acc('Y') %or indexed('Y') %start

  if (PRESCHAR == 35) goto L_0042;
  if (ACC(89)) goto L_0042;
  if (!(INDEXED(89))) goto L_0043;
L_0042:;

//   311              ca = ca+2

  CA = CA + 2;

  //   312           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_0044;
L_0043:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_0045;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_0046;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_0046;
  }
L_0045:;

//   313              ca = ca+2

  CA = CA + 2;

  //   314           %else

  goto L_0044;
L_0046:;

//   315              ca = ca+3

  CA = CA + 3;

  //   316           %finish

L_0044:;

//   317           %continue

  goto L_0023;

  //   318  !----------------------------------------------------------------------
  //   319  itype1(12): ! ldy

case_ITYPE1_12:;

//   320           %if pres char='#' %or acc('X') %or indexed('X') %start

  if (PRESCHAR == 35) goto L_0047;
  if (ACC(88)) goto L_0047;
  if (!(INDEXED(88))) goto L_0048;
L_0047:;

//   321              ca = ca+2

  CA = CA + 2;

  //   322           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_0049;
L_0048:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_004A;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_004B;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_004B;
  }
L_004A:;

//   323              ca = ca+2

  CA = CA + 2;

  //   324           %else

  goto L_0049;
L_004B:;

//   325              ca = ca+3

  CA = CA + 3;

  //   326           %finish

L_0049:;

//   327           %continue

  goto L_0023;

  //   328  !----------------------------------------------------------------------
  //   329  itype1(13): ! stx

case_ITYPE1_13:;

//   330           %if acc('Y') %or indexed('Y') %start

  if (ACC(89)) goto L_004C;
  if (!(INDEXED(89))) goto L_004D;
L_004C:;

//   331              ca = ca+2

  CA = CA + 2;

  //   332           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_004E;
L_004D:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_004F;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_0050;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_0050;
  }
L_004F:;

//   333              ca = ca+2

  CA = CA + 2;

  //   334           %finish %else %if indexed('Y') %start

  goto L_004E;
L_0050:;
  if (!(INDEXED(89))) goto L_0051;

    //   335              ca = ca+2

  CA = CA + 2;

  //   336           %else

  goto L_004E;
L_0051:;

//   337              ca = ca+3

  CA = CA + 3;

  //   338           %finish

L_004E:;

//   339           %continue

  goto L_0023;

  //   340  !----------------------------------------------------------------------
  //   341  itype1(14): ! sty

case_ITYPE1_14:;

//   342           %if acc('X') %or indexed('X') %start

  if (ACC(88)) goto L_0052;
  if (!(INDEXED(88))) goto L_0053;
L_0052:;

//   343              ca = ca+2

  CA = CA + 2;

  //   344           %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start

  goto L_0054;
L_0053:;
  if (GETOPD(/*?*/ &OPD) != 0) goto L_0055;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_0056;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_0056;
  }
L_0055:;

//   345              ca = ca+2

  CA = CA + 2;

  //   346           %finish %else %if indexed('X') %start

  goto L_0054;
L_0056:;
  if (!(INDEXED(88))) goto L_0057;

    //   347              ca = ca+2

  CA = CA + 2;

  //   348           %else

  goto L_0054;
L_0057:;

//   349              ca = ca+3

  CA = CA + 3;

  //   350           %finish

L_0054:;

//   351           %continue

  goto L_0023;

  //   352  !-----------------------------------------------------------------------
  //   353  itype1(15): ! fcb

case_ITYPE1_15:;

//   354           %cycle

L_0058:;

//   355              ca = ca+1

  CA = CA + 1;

  //   356              i = get opd(opd) %unless pres char=','

  if (PRESCHAR == 44) goto L_0059;
  I = GETOPD(/*?*/ &OPD);
L_0059:;

//   357           %repeat %until %not more items

  if (!(MOREITEMS())) goto L_005A;
  goto L_0058;
L_005A:;

//   358           %continue

  goto L_0023;

  //   359  !-----------------------------------------------------------------------
  //   360  itype1(16): ! fdb

case_ITYPE1_16:;

//   361           %cycle

L_005B:;

//   362              ca = ca+2

  CA = CA + 2;

  //   363              i = get opd(opd) %unless pres char=','

  if (PRESCHAR == 44) goto L_005C;
  I = GETOPD(/*?*/ &OPD);
L_005C:;

//   364           %repeat %until %not more items

  if (!(MOREITEMS())) goto L_005D;
  goto L_005B;
L_005D:;

//   365           %continue

  goto L_0023;

  //   366  !-----------------------------------------------------------------------
  //   367  itype1(17):! equ

case_ITYPE1_17:;

//   368           %unless lid=0 %start

  if (LID == 0) goto L_005E;

    //   369              %if get opd(opd)=0 %start

  if (GETOPD(/*?*/ &OPD) != 0) goto L_005F;

    //   370                %if pass=1 %start

  if (PASS != 1) goto L_0060;

    //   371                    %if nass(lid)=1 %start

  if (NASS[LID - 1] != 1) goto L_0061;

    //   372                       nval(lid) = opd

  NVAL[LID - 1] = OPD;

  //   373                       nass(lid) = 3

  NASS[LID - 1] = 3;

  //   374                    %finish

L_0061:;

//   375                 %finish %else %if nass(lid)=3 %and opd#nval(lid) %start

  goto L_0062;
L_0060:;
  if (NASS[LID - 1] != 3) goto L_0063;
  if (OPD == NVAL[LID - 1]) goto L_0063;

    //   376                    nval(lid) = opd

  NVAL[LID - 1] = OPD;

  //   377                    consistent = consistent+1

  CONSISTENT = CONSISTENT + 1;

  //   378                 %finish

L_0063:;
L_0062:;

//   379              %else

  goto L_0064;
L_005F:;

//   380                 %unless nass(lid)=2 %start

  if (NASS[LID - 1] == 2) goto L_0065;

    //   381                    nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   382                    nass(lid) = 4

  NASS[LID - 1] = 4;

  //   383                 %finish

L_0065:;

//   384              %finish

L_0064:;

//   385           %finish

L_005E:;

//   386           %continue

  goto L_0023;

  //   387  !-----------------------------------------------------------------------
  //   388  itype1(18):! org

case_ITYPE1_18:;

//   389           %unless lid=0 %start

  if (LID == 0) goto L_0066;

    //   390              nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   391              nass(lid) = 4

  NASS[LID - 1] = 4;

  //   392           %finish

L_0066:;

//   393           ca = opd %if get opd(opd)=0

  if (GETOPD(/*?*/ &OPD) != 0) goto L_0067;
  CA = OPD;
L_0067:;

//   394           %continue

  goto L_0023;

  //   395  !-----------------------------------------------------------------------
  //   396  itype1(19): ! rmb

case_ITYPE1_19:;

//   397            ca = ca+opd %if get opd(opd)=0

  if (GETOPD(/*?*/ &OPD) != 0) goto L_0068;
  CA = CA + OPD;
L_0068:;

//   398            %continue

  goto L_0023;

  //   399  !-----------------------------------------------------------------------
  //   400  itype1(20):! fcc

case_ITYPE1_20:;

//   401           %if '0'<=pres char<='9' %start

  {
// Double-sided test on PRESCHAR (Part I)
    int tmp;
    if (48 > (tmp = PRESCHAR)) goto L_0069;
// Double-sided test on PRESCHAR (Part II)
    if (tmp > 57) goto L_0069;
  }

  //   402              i = lp

  I = LP;

  //   403              j = 0

  J = 0;

  //   404              %cycle

L_006A:;

//   405                 j = j*10+pres char-'0'

  J = J * 10 + PRESCHAR - 48;

  //   406                 next char

  NEXTCHAR();

  //   407              %repeat %until %not '0'<=pres char<='9'

  {
// Double-sided test on PRESCHAR (Part I)
    int tmp;
    if (48 > (tmp = PRESCHAR)) goto L_006B;
// Double-sided test on PRESCHAR (Part II)
    if (tmp > 57) goto L_006B;
  }
  goto L_006A;
L_006B:;

//   408              %if pres char=',' %start

  if (PRESCHAR != 44) goto L_006C;

    //   409                 ca = ca+j

  CA = CA + J;

  //   410                 %continue

  goto L_0023;

  //   411              %finish

L_006C:;

//   412              lp = i-1

  LP = I - 1;

  //   413              next char

  NEXTCHAR();

  //   414           %finish

L_0069:;

//   415           %continue %if pres char<' '

  if (PRESCHAR >= 32) goto L_006D;
  goto L_0023;
L_006D:;

//   416           delim = pres char

  DELIM = PRESCHAR;

  //   417           next char

  NEXTCHAR();

  //   418           %cycle

L_006E:;

//   419              %exit %if pres char=nl

  if (PRESCHAR != 10) goto L_006F;
  goto L_0070;
L_006F:;

//   420              %if pres char=delim %start

  if (PRESCHAR != DELIM) goto L_0071;

    //   421                 next char

  NEXTCHAR();

  //   422                 %exit %unless pres char=delim

  if (PRESCHAR == DELIM) goto L_0072;
  goto L_0070;
L_0072:;

//   423              %finish

L_0071:;

//   424              next char

  NEXTCHAR();

  //   425              ca=ca+1

  CA = CA + 1;

  //   426           %repeat

  goto L_006E;
L_0070:;

//   427           %continue

  goto L_0023;

  //   428  !-----------------------------------------------------------------------
  //   429  itype1(21): ! nam

case_ITYPE1_21:;

//   430           %unless lid=0 %start

  if (LID == 0) goto L_0073;

    //   431              nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   432              nass(lid) = 4

  NASS[LID - 1] = 4;

  //   433           %finish

L_0073:;

//   434           %continue %unless headset=0

  if (HEADSET == 0) goto L_0074;
  goto L_0023;
L_0074:;

//   435           headset = 1

  HEADSET = 1;

  //   436           header = ""

  _imp_strncpy(/*?*/ &HEADER, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 33);

  //   437           %while pres char#nl %cycle

L_0075:;
  if (PRESCHAR == 10) goto L_0076;

    //   438              header <- header.to string(line(lp))

  _imp_strncpy(/*?*/ &HEADER, ({
                 __typeof__(_imp_string255) tmp; /*C*/
                 tmp = *({
                   _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &HEADER, ({
                                                    __typeof__(_imp_string1) tmp; /*E*/
                                                    tmp = _imp_TOSTRING(LINE[LP - 1]);
                                                    (void *)&tmp;
                                                  }));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 33);

  /* truncated copy of no more than 33 chars */
  if (*_imp_LENGTH((_imp_string *)/*?*/ &HEADER) > 33) *_imp_LENGTH((_imp_string *)/*?*/ &HEADER) = 33;

    //   439              next char

  NEXTCHAR();

  //   440           %repeat

  goto L_0075;
L_0076:;

//   441           %continue

  goto L_0023;

  //   442  !-----------------------------------------------------------------------
  //   443  itype1(22): ! opt

case_ITYPE1_22:;

//   444           %cycle

L_0077:;

//   445              %if get option(opt) %start

  if (!(GETOPTION(/*?*/ &OPT))) goto L_0078;

    //   446                 %if 1<=opt<=2 %start

  {
// Double-sided test on OPT (Part I)
    int tmp;
    if (1 > (tmp = OPT)) goto L_0079;
// Double-sided test on OPT (Part II)
    if (tmp > 2) goto L_0079;
  }

  //   447                    bchar = ' '

  BCHAR = 32;

  //   448                 %finish %else %if 3<=opt<=4 %start

  goto L_007A;
L_0079:;
  {
// Double-sided test on OPT (Part I)
    int tmp;
    if (3 > (tmp = OPT)) goto L_007B;
// Double-sided test on OPT (Part II)
    if (tmp > 4) goto L_007B;
  }

  //   449                    bchar = -1

  BCHAR = -1;

  //   450                 %finish %else %if 18<=opt<=19 %start

  goto L_007A;
L_007B:;
  {
// Double-sided test on OPT (Part I)
    int tmp;
    if (18 > (tmp = OPT)) goto L_007C;
// Double-sided test on OPT (Part II)
    if (tmp > 19) goto L_007C;
  }

  //   451                    fflag = 1

  FFLAG = 1;

  //   452                 %finish %else %if 20<=opt<=21 %start

  goto L_007A;
L_007C:;
  {
// Double-sided test on OPT (Part I)
    int tmp;
    if (20 > (tmp = OPT)) goto L_007D;
// Double-sided test on OPT (Part II)
    if (tmp > 21) goto L_007D;
  }

  //   453                    fflag = 0

  FFLAG = 0;

  //   454                 %finish

L_007D:;
L_007A:;

//   455              %finish

L_0078:;

//   456           %repeat %until %not more items

  if (!(MOREITEMS())) goto L_007E;
  goto L_0077;
L_007E:;

//   457  !-----------------------------------------------------------------------
//   458  itype1(23): ! page

case_ITYPE1_23:;

//   459  !-----------------------------------------------------------------------
//   460  itype1(24): ! spc

case_ITYPE1_24:;

//   461           %unless lid=0 %start

  if (LID == 0) goto L_007F;

    //   462              nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   463              nass(lid) = 4

  NASS[LID - 1] = 4;

  //   464           %finish

L_007F:;

//   465  !-----------------------------------------------------------------------
//   466        %repeat

L_0023:;
  goto L_0021;

  //   467  !-----------------------------------------------------------------------
  //   468  itype1(25): ! end

case_ITYPE1_25:;

//   469        %unless lid=0 %start

  if (LID == 0) goto L_0080;

    //   470           nval(lid) = 0

  NVAL[LID - 1] = 0;

  //   471           nass(lid) = 2

  NASS[LID - 1] = 2;

  //   472        %finish

L_0080:;

//   473        %if pass=1 %start

  if (PASS != 1) goto L_0081;

    //   474           pass = 2

  PASS = 2;

  //   475        %else

  goto L_0082;
L_0081:;

//   476           %exit %if consistent=0 %or %c

  if (CONSISTENT == 0) goto L_0083;
  if (LASTCONSISTENT == 0) goto L_0084;
  if (CONSISTENT < LASTCONSISTENT) goto L_0084;
L_0083:;
  goto L_0085;
L_0084:;

//   477+             (last consistent#0 %and consistent>=last consistent)
//   478        %finish

L_0082:;

//   479        last consistent = consistent

  LASTCONSISTENT = CONSISTENT;

  //   480        consistent = 0

  CONSISTENT = 0;

  //   481        reset input

  _imp_RESETINPUT();

  //   482     %repeat

  goto L_0020;
L_0085:;

//   483  !-----------------------------------------------------------------------
//   484     nline(0)

  NLINE(0);

  //   485     reset input

  _imp_RESETINPUT();

  //   486     pass = 3

  PASS = 3;

  //   487     ln=0

  LN = 0;

  //   488     ca=0

  CA = 0;

  //   489     old ca = 0

  OLDCA = 0;

  //   490     lid = 0

  LID = 0;

  //   491     bchar = -1

  BCHAR = -1;

  //   492     fflag = 0

  FFLAG = 0;

  //   493     %cycle

L_0086:;

//   494        %unless lid=0 %start

  if (LID == 0) goto L_0087;

    //   495           fault("Multiply defined label") %if nass(lid)=2

  if (NASS[LID - 1] != 2) goto L_0088;
  FAULT(_imp_str_literal_size(63, "Multiply defined label"));
L_0088:;

//   496           %if nass(lid)=1 %and nval(lid)#old ca %start

  if (NASS[LID - 1] != 1) goto L_0089;
  if (NVAL[LID - 1] == OLDCA) goto L_0089;

    //   497              fault("Inconsistent label")

  FAULT(_imp_str_literal_size(63, "Inconsistent label"));

  //   498              nval(lid) = old ca

  NVAL[LID - 1] = OLDCA;

  //   499           %finish

L_0089:;

//   500        %finish

L_0087:;

//   501        old ca = ca

  OLDCA = CA;

  //   502        lid = 0

  LID = 0;

  //   503        read line

  READLINE();

  //   504        non dense = 0

  NONDENSE = 0;

  //   505        instr out(0, 0, -4, 0) %and %continue %if pres char='*'

  if (PRESCHAR != 42) goto L_008A;
  INSTROUT(0, 0, -4, 0);
  goto L_001F;
L_008A:;

//   506        lid = 0 %unless get name(lid)=0

  if (GETNAME(/*?*/ &LID) == 0) goto L_008B;
  LID = 0;
L_008B:;

//   507        next char %while pres char=' '

L_008C:;
  if (PRESCHAR != 32) goto L_008D;
  NEXTCHAR();
  goto L_008C;
L_008D:;

//   508        %if pres char=nl %start

  if (PRESCHAR != 10) goto L_008E;

    //   509           instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //   510        %finish %else %if get instr(iid) %start

  goto L_008F;
L_008E:;
  if (!(GETINSTR(/*?*/ &IID))) goto L_0090;

    //   511           order = icode(iid)

  ORDER = ICODE[IID - 1];

  //   512           mcycles = icycles(iid)

  MCYCLES = ICYCLES[IID - 1];

  //   513           next char %while pres char=' '

L_0091:;
  if (PRESCHAR != 32) goto L_0092;
  NEXTCHAR();
  goto L_0091;
L_0092:;

//   514           ->itype2(itype(iid))

  ITYPE2_line = __LINE__;
  ITYPE2_file = __FILE__;
  ITYPE2_index = ITYPE[IID - 1];
  goto case_ITYPE2_dispatch;

  //   515        %else

L_0090:;

//   516           instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //   517           fault("Unknown operation")

  FAULT(_imp_str_literal_size(63, "Unknown operation"));

  //   518        %finish

L_008F:;

//   519        %continue

  goto L_001F;

  //   520  !-----------------------------------------------------------------------
  //   521  itype2(1):! implied

case_ITYPE2_1:;

//   522        instr out(order,0,1, mcycles)

  INSTROUT(ORDER, 0, 1, MCYCLES);

  //   523        %continue

  goto L_001F;

  //   524  !-----------------------------------------------------------------------
  //   525  itype2(2):! relative

case_ITYPE2_2:;

//   526        i=get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   527        j=opd-ca-2

  J = OPD - CA - 2;

  //   528        instr out(order,j,2, mcycles)

  INSTROUT(ORDER, J, 2, MCYCLES);

  //   529        %unless i=0 %start

  if (I == 0) goto L_0094;

    //   530           fault("Cannot evaluate operand")

  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));

  //   531        %finish %else %unless -127<=j<=127 %start

  goto L_0095;
L_0094:;
  {
// Double-sided test on J (Part I)
    int tmp;
    if (-127 > (tmp = J)) goto L_0096;
// Double-sided test on J (Part II)
    if (tmp <= 127) goto L_0097;
  }
L_0096:;

//   532           fault("Branch out of range")

  FAULT(_imp_str_literal_size(63, "Branch out of range"));

  //   533        %finish

L_0097:;
L_0095:;

//   534        %continue

  goto L_001F;

  //   535  !-----------------------------------------------------------------------
  //   536  itype2(3):! JMP

case_ITYPE2_3:;

//   537        %if pres char='(' %start

  if (PRESCHAR != 40) goto L_0098;

    //   538           next char %until pres char#bchar

L_0099:;
  NEXTCHAR();
  if (PRESCHAR != BCHAR) goto L_009A;
  goto L_0099;
L_009A:;

//   539           i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   540           next char %while pres char=bchar

L_009B:;
  if (PRESCHAR != BCHAR) goto L_009C;
  NEXTCHAR();
  goto L_009B;
L_009C:;

//   541           %if pres char=')' %start

  if (PRESCHAR != 41) goto L_009D;

    //   542              next char

  NEXTCHAR();

  //   543              instr out(order+16_20, opd, 3, mcycles+2)

  INSTROUT(ORDER + 32, OPD, 3, MCYCLES + 2);

  //   544           %else

  goto L_009E;
L_009D:;

//   545              instr out(order+16_20, opd, 3, mcycles+2)

  INSTROUT(ORDER + 32, OPD, 3, MCYCLES + 2);

  //   546              fault("Missing right parenthesis")

  FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));

  //   547           %finish

L_009E:;

//   548           fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_009F;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_009F:;

//   549           %continue

  goto L_001F;

  //   550        %finish

L_0098:;

//   551  !---------------------------------------------------------------------------
//   552  itype2(4): ! JSR

case_ITYPE2_4:;

//   553        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   554        instr out(order, opd, 3, mcycles)

  INSTROUT(ORDER, OPD, 3, MCYCLES);

  //   555        fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_00A0;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00A0:;

//   556        %continue

  goto L_001F;

  //   557  !--------------------------------------------------------------------------
  //   558  itype2(5): ! immediate, direct, index, indir

case_ITYPE2_5:;

//   559        immediate(order+8, mcycles) %and %continue %if pres char='#'

  if (PRESCHAR != 35) goto L_00A1;
  IMMEDIATE(ORDER + 8, MCYCLES);
  goto L_001F;
L_00A1:;

//   560  !--------------------------------------------------------------------------
//   561  itype2(6): ! direct, index, indir

case_ITYPE2_6:;

//   562        %if pres char='(' %start

  if (PRESCHAR != 40) goto L_00A2;

    //   563           next char %until pres char#bchar

L_00A3:;
  NEXTCHAR();
  if (PRESCHAR != BCHAR) goto L_00A4;
  goto L_00A3;
L_00A4:;

//   564           %if acc('X') %or indexed('X') %start

  if (ACC(88)) goto L_00A5;
  if (!(INDEXED(88))) goto L_00A6;
L_00A5:;

//   565              next char %while pres char=bchar

L_00A7:;
  if (PRESCHAR != BCHAR) goto L_00A8;
  NEXTCHAR();
  goto L_00A7;
L_00A8:;

//   566              %if pres char=')' %start

  if (PRESCHAR != 41) goto L_00A9;

    //   567                 next char

  NEXTCHAR();

  //   568                 instr out(order, 0, 2, mcycles+4)

  INSTROUT(ORDER, 0, 2, MCYCLES + 4);

  //   569              %else

  goto L_00AA;
L_00A9:;

//   570                 instr out(order, 0, 2, mcycles+4)

  INSTROUT(ORDER, 0, 2, MCYCLES + 4);

  //   571                 fault("Missing right parenthesis")

  FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));

  //   572              %finish

L_00AA:;

//   573           %finish %else %if acc('Y') %or indexed('Y') %start

  goto L_00AB;
L_00A6:;
  if (ACC(89)) goto L_00AC;
  if (!(INDEXED(89))) goto L_00AD;
L_00AC:;

//   574              next char %while pres char=bchar

L_00AE:;
  if (PRESCHAR != BCHAR) goto L_00AF;
  NEXTCHAR();
  goto L_00AE;
L_00AF:;

//   575              %if pres char=')' %start

  if (PRESCHAR != 41) goto L_00B0;

    //   576                 next char

  NEXTCHAR();

  //   577                 instr out(order, 0, 2, mcycles+4)

  INSTROUT(ORDER, 0, 2, MCYCLES + 4);

  //   578              %else

  goto L_00B1;
L_00B0:;

//   579                 instr out(order, 0, 2, mcycles+4)

  INSTROUT(ORDER, 0, 2, MCYCLES + 4);

  //   580                 fault("Missing right parenthesis")

  FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));

  //   581              %finish

L_00B1:;

//   582              fault("Invalid index register")

  FAULT(_imp_str_literal_size(63, "Invalid index register"));

  //   583           %else

  goto L_00AB;
L_00AD:;

//   584              i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   585              %if indexed('X') %start

  if (!(INDEXED(88))) goto L_00B2;

    //   586                 next char %while pres char=bchar

L_00B3:;
  if (PRESCHAR != BCHAR) goto L_00B4;
  NEXTCHAR();
  goto L_00B3;
L_00B4:;

//   587                 %if pres char=')' %start

  if (PRESCHAR != 41) goto L_00B5;

    //   588                    next char

  NEXTCHAR();

  //   589                    instr out(order, opd, 2, mcycles+4)

  INSTROUT(ORDER, OPD, 2, MCYCLES + 4);

  //   590                 %else

  goto L_00B6;
L_00B5:;

//   591                    instr out(order, opd, 2, mcycles+4)

  INSTROUT(ORDER, OPD, 2, MCYCLES + 4);

  //   592                    fault("Missing right parenthesis")

  FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));

  //   593                 %finish

L_00B6:;

//   594              %else

  goto L_00B7;
L_00B2:;

//   595                 %if indexed('Y') %start

  if (!(INDEXED(89))) goto L_00B8;

    //   596                    reg fault = 1

  REGFAULT = 1;

  //   597                 %else

  goto L_00B9;
L_00B8:;

//   598                    reg fault = 0

  REGFAULT = 0;

  //   599                 %finish

L_00B9:;

//   600                 next char %while pres char=bchar

L_00BA:;
  if (PRESCHAR != BCHAR) goto L_00BB;
  NEXTCHAR();
  goto L_00BA;
L_00BB:;

//   601                 %if pres char=')' %start

  if (PRESCHAR != 41) goto L_00BC;

    //   602                    next char %until pres char#bchar

L_00BD:;
  NEXTCHAR();
  if (PRESCHAR != BCHAR) goto L_00BE;
  goto L_00BD;
L_00BE:;

//   603                    %if indexed('Y') %start

  if (!(INDEXED(89))) goto L_00BF;

    //   604                       instr out(order+16_10, opd, 2, mcycles+4)

  INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 4);

  //   605                    %finish %else %if indexed('X') %start

  goto L_00C0;
L_00BF:;
  if (!(INDEXED(88))) goto L_00C1;

    //   606                       instr out(order+16_10, opd, 2, mcycles+4)

  INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 4);

  //   607                       fault("Invalid index register")

  FAULT(_imp_str_literal_size(63, "Invalid index register"));

  //   608                    %else

  goto L_00C0;
L_00C1:;

//   609                       instr out(order, opd, 2, mcycles+4)

  INSTROUT(ORDER, OPD, 2, MCYCLES + 4);

  //   610                       fault("Index register not specified") %if reg fault=0

  if (REGFAULT != 0) goto L_00C2;
  FAULT(_imp_str_literal_size(63, "Index register not specified"));
L_00C2:;

//   611                    %finish

L_00C0:;

//   612                 %else

  goto L_00C3;
L_00BC:;

//   613                    instr out(order, opd, 2, mcycles+4)

  INSTROUT(ORDER, OPD, 2, MCYCLES + 4);

  //   614                    fault("Missing right parenthesis")

  FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));

  //   615                    fault("Index register not specified") %if reg fault=0

  if (REGFAULT != 0) goto L_00C4;
  FAULT(_imp_str_literal_size(63, "Index register not specified"));
L_00C4:;

//   616                 %finish

L_00C3:;

//   617                 fault("Invalid index register") %unless reg fault=0

  if (REGFAULT == 0) goto L_00C5;
  FAULT(_imp_str_literal_size(63, "Invalid index register"));
L_00C5:;

//   618              %finish

L_00B7:;

//   619              %unless i=0 %start

  if (I == 0) goto L_00C6;

    //   620                 fault("Cannot evaluate operand")

  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));

  //   621              %finish %else %unless 0<=opd<=255 %start

  goto L_00C7;
L_00C6:;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_00C8;
// Double-sided test on OPD (Part II)
    if (tmp <= 255) goto L_00C9;
  }
L_00C8:;

//   622                 fault("Invalid page zero address")

  FAULT(_imp_str_literal_size(63, "Invalid page zero address"));

  //   623              %finish

L_00C9:;
L_00C7:;

//   624           %finish

L_00AB:;

//   625        %finish %else %if acc('X') %or indexed('X') %start

  goto L_00CA;
L_00A2:;
  if (ACC(88)) goto L_00CB;
  if (!(INDEXED(88))) goto L_00CC;
L_00CB:;

//   626           instr out(order+16_14, 0, 2, mcycles+2)

  INSTROUT(ORDER + 20, 0, 2, MCYCLES + 2);

  //   627        %finish %else %if acc('Y') %or indexed('Y') %start

  goto L_00CA;
L_00CC:;
  if (ACC(89)) goto L_00CD;
  if (!(INDEXED(89))) goto L_00CE;
L_00CD:;

//   628           instr out(order+16_18, 0, 3, mcycles+3)

  INSTROUT(ORDER + 24, 0, 3, MCYCLES + 3);

  //   629        %else

  goto L_00CA;
L_00CE:;

//   630           i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   631           %if indexed('X') %start

  if (!(INDEXED(88))) goto L_00CF;

    //   632              %if i#0 %or 0<=opd<=255 %start

  if (I != 0) goto L_00D0;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_00D1;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_00D1;
  }
L_00D0:;

//   633                 instr out(order+16_14, opd, 2, mcycles+2)

  INSTROUT(ORDER + 20, OPD, 2, MCYCLES + 2);

  //   634              %else

  goto L_00D2;
L_00D1:;

//   635                 instr out(order+16_1C, opd, 3, mcycles+3)

  INSTROUT(ORDER + 28, OPD, 3, MCYCLES + 3);

  //   636              %finish

L_00D2:;

//   637           %finish %else %if indexed('Y') %start

  goto L_00D3;
L_00CF:;
  if (!(INDEXED(89))) goto L_00D4;

    //   638              instr out(order+16_18, opd, 3, mcycles+3)

  INSTROUT(ORDER + 24, OPD, 3, MCYCLES + 3);

  //   639           %finish %else %if i#0 %or 0<=opd<=255 %start

  goto L_00D3;
L_00D4:;
  if (I != 0) goto L_00D5;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_00D6;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_00D6;
  }
L_00D5:;

//   640              instr out(order+4, opd, 2, mcycles+1)

  INSTROUT(ORDER + 4, OPD, 2, MCYCLES + 1);

  //   641           %else

  goto L_00D3;
L_00D6:;

//   642              instr out(order+12, opd, 3, mcycles+2)

  INSTROUT(ORDER + 12, OPD, 3, MCYCLES + 2);

  //   643           %finish

L_00D3:;

//   644           fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_00D7;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00D7:;

//   645        %finish

L_00CA:;

//   646        %continue

  goto L_001F;

  //   647  !-----------------------------------------------------------------------
  //   648  itype2(7): ! rotate, shift

case_ITYPE2_7:;

//   649        %if acc('A') %start

  if (!(ACC(65))) goto L_00D8;

    //   650           instr out(order+4, 0, 1, mcycles)

  INSTROUT(ORDER + 4, 0, 1, MCYCLES);

  //   651           %continue

  goto L_001F;

  //   652        %finish

L_00D8:;

//   653  !-----------------------------------------------------------------------
//   654  itype2(8): ! inc, dec

case_ITYPE2_8:;

//   655        operand('X', 'Y', order, mcycles+2)

  OPERAND(88, 89, ORDER, MCYCLES + 2);

  //   656        %continue

  goto L_001F;

  //   657  !-----------------------------------------------------------------------
  //   658  itype2(9): ! cpx,cpy

case_ITYPE2_9:;

//   659        immediate(order, mcycles) %and %continue %if pres char='#'

  if (PRESCHAR != 35) goto L_00D9;
  IMMEDIATE(ORDER, MCYCLES);
  goto L_001F;
L_00D9:;

//   660  !-----------------------------------------------------------------------
//   661  itype2(10):! BIT

case_ITYPE2_10:;

//   662        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   663        %if i#0 %or 0<=opd<=255 %start

  if (I != 0) goto L_00DA;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_00DB;
// Double-sided test on OPD (Part II)
    if (tmp > 255) goto L_00DB;
  }
L_00DA:;

//   664           instr out(order+4, opd, 2, mcycles+1)

  INSTROUT(ORDER + 4, OPD, 2, MCYCLES + 1);

  //   665           fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_00DC;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00DC:;

//   666        %else

  goto L_00DD;
L_00DB:;

//   667           instr out(order+12, opd, 3, mcycles+2)

  INSTROUT(ORDER + 12, OPD, 3, MCYCLES + 2);

  //   668        %finish

L_00DD:;

//   669        %continue

  goto L_001F;

  //   670  !-----------------------------------------------------------------------
  //   671  itype2(11): ! ldx

case_ITYPE2_11:;

//   672        %if pres char='#' %start

  if (PRESCHAR != 35) goto L_00DE;

    //   673           immediate(order, mcycles)

  IMMEDIATE(ORDER, MCYCLES);

  //   674        %else

  goto L_00DF;
L_00DE:;

//   675           operand('Y', 'X', order+4, mcycles)

  OPERAND(89, 88, ORDER + 4, MCYCLES);

  //   676        %finish

L_00DF:;

//   677        %continue

  goto L_001F;

  //   678  !---------------------------------------------------------------------
  //   679  itype2(12): ! LDY

case_ITYPE2_12:;

//   680        %if pres char='#' %start

  if (PRESCHAR != 35) goto L_00E0;

    //   681           immediate(order, mcycles)

  IMMEDIATE(ORDER, MCYCLES);

  //   682        %else

  goto L_00E1;
L_00E0:;

//   683           operand('X', 'Y', order+4, mcycles)

  OPERAND(88, 89, ORDER + 4, MCYCLES);

  //   684        %finish

L_00E1:;

//   685        %continue

  goto L_001F;

  //   686  !-----------------------------------------------------------------------
  //   687  itype2(13):! STX

case_ITYPE2_13:;

//   688        store('Y', 'X', order, mcycles)

  STORE(89, 88, ORDER, MCYCLES);

  //   689        %continue

  goto L_001F;

  //   690  !-----------------------------------------------------------------------
  //   691  itype2(14): ! STY

case_ITYPE2_14:;

//   692        store('X', 'Y', order, mcycles)

  STORE(88, 89, ORDER, MCYCLES);

  //   693        %continue

  goto L_001F;

  //   694  !-----------------------------------------------------------------------
  //   695  itype2(15): ! fcb

case_ITYPE2_15:;

//   696        %cycle

L_00E2:;

//   697           %if pres char=',' %start

  if (PRESCHAR != 44) goto L_00E3;

    //   698              opd = 0

  OPD = 0;

  //   699              i = 0

  I = 0;

  //   700           %else

  goto L_00E4;
L_00E3:;

//   701              i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   702           %finish

L_00E4:;

//   703           %if cont=0 %start

  if (CONT != 0) goto L_00E5;

    //   704              j = lp

  J = LP;

  //   705              look ahead = 1

  LOOKAHEAD = 1;

  //   706              %while more items %cycle

L_00E6:;
  if (!(MOREITEMS())) goto L_00E7;

    //   707                 k = get opd(k) %unless pres char=','

  if (PRESCHAR == 44) goto L_00E8;
  K = GETOPD(/*?*/ &K);
L_00E8:;

//   708              %repeat

  goto L_00E6;
L_00E7:;

//   709              look ahead = 0

  LOOKAHEAD = 0;

  //   710              instr out(opd, 0, 1, 0)

  INSTROUT(OPD, 0, 1, 0);

  //   711              lp = j-1

  LP = J - 1;

  //   712              next char

  NEXTCHAR();

  //   713              cont = 1

  CONT = 1;

  //   714           %else

  goto L_00E9;
L_00E5:;

//   715              instr out(opd, 0, 1, 0)

  INSTROUT(OPD, 0, 1, 0);

  //   716           %finish

L_00E9:;

//   717           fault("Invalid constant") %unless i=0 %and 0<=opd<=255

  if (I != 0) goto L_00EA;
  {
// Double-sided test on OPD (Part I)
    int tmp;
    if (0 > (tmp = OPD)) goto L_00EA;
// Double-sided test on OPD (Part II)
    if (tmp <= 255) goto L_00EB;
  }
L_00EA:;
  FAULT(_imp_str_literal_size(63, "Invalid constant"));
L_00EB:;

//   718        %repeat %until %not more items

  if (!(MOREITEMS())) goto L_00EC;
  goto L_00E2;
L_00EC:;

//   719        cont = 0

  CONT = 0;

  //   720        %continue

  goto L_001F;

  //   721  !------------------------------------------------------------------------
  //   722  itype2(16): ! fdb

case_ITYPE2_16:;

//   723        %cycle

L_00ED:;

//   724           %if pres char=',' %start

  if (PRESCHAR != 44) goto L_00EE;

    //   725              opd = 0

  OPD = 0;

  //   726              i = 0

  I = 0;

  //   727           %else

  goto L_00EF;
L_00EE:;

//   728              i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   729           %finish

L_00EF:;

//   730           %if cont=0 %start

  if (CONT != 0) goto L_00F0;

    //   731              j = lp

  J = LP;

  //   732              look ahead = 1

  LOOKAHEAD = 1;

  //   733              %while more items %cycle

L_00F1:;
  if (!(MOREITEMS())) goto L_00F2;

    //   734                 k = get opd(k) %unless pres char=','

  if (PRESCHAR == 44) goto L_00F3;
  K = GETOPD(/*?*/ &K);
L_00F3:;

//   735              %repeat

  goto L_00F1;
L_00F2:;

//   736              look ahead = 0

  LOOKAHEAD = 0;

  //   737              instr out(0, opd, -2, 0)

  INSTROUT(0, OPD, -2, 0);

  //   738              lp = j-1

  LP = J - 1;

  //   739              next char

  NEXTCHAR();

  //   740              cont = 1

  CONT = 1;

  //   741           %else

  goto L_00F4;
L_00F0:;

//   742              instr out(0, opd, -2, 0)

  INSTROUT(0, OPD, -2, 0);

  //   743           %finish

L_00F4:;

//   744           fault("Invalid constant") %unless i=0

  if (I == 0) goto L_00F5;
  FAULT(_imp_str_literal_size(63, "Invalid constant"));
L_00F5:;

//   745        %repeat %until %not more items

  if (!(MOREITEMS())) goto L_00F6;
  goto L_00ED;
L_00F6:;

//   746        cont = 0

  CONT = 0;

  //   747        %continue

  goto L_001F;

  //   748  !-----------------------------------------------------------------------
  //   749  itype2(17):! equ

case_ITYPE2_17:;

//   750        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   751        instr out(0, opd, -3, 0)

  INSTROUT(0, OPD, -3, 0);

  //   752        fault("No name to equate") %if lid=0

  if (LID != 0) goto L_00F7;
  FAULT(_imp_str_literal_size(63, "No name to equate"));
L_00F7:;

//   753        fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_00F8;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00F8:;

//   754        %if lid#0 %and i=0 %and nass(lid)=3 %and nval(lid)#opd %start

  if (LID == 0) goto L_00F9;
  if (I != 0) goto L_00F9;
  if (NASS[LID - 1] != 3) goto L_00F9;
  if (NVAL[LID - 1] == OPD) goto L_00F9;

    //   755           fault("Inconsistent label")

  FAULT(_imp_str_literal_size(63, "Inconsistent label"));

  //   756           nval(lid) = opd

  NVAL[LID - 1] = OPD;

  //   757        %finish

L_00F9:;

//   758        %continue

  goto L_001F;

  //   759  !-----------------------------------------------------------------------
  //   760  itype2(18):! org

case_ITYPE2_18:;

//   761        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   762        ca = opd %if i=0

  if (I != 0) goto L_00FA;
  CA = OPD;
L_00FA:;

//   763        instr out(0, 0, 0, 0)

  INSTROUT(0, 0, 0, 0);

  //   764        fault("Illegal label") %unless lid=0

  if (LID == 0) goto L_00FB;
  FAULT(_imp_str_literal_size(63, "Illegal label"));
L_00FB:;

//   765        fault("Cannot evaluate operand") %unless i=0

  if (I == 0) goto L_00FC;
  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00FC:;

//   766        %continue

  goto L_001F;

  //   767  !-----------------------------------------------------------------------
  //   768  itype2(19): ! rmb

case_ITYPE2_19:;

//   769        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //   770        instr out(0, opd, -1, 0)

  INSTROUT(0, OPD, -1, 0);

  //   771        %if i=0 %start

  if (I != 0) goto L_00FD;

    //   772           ca = ca+opd

  CA = CA + OPD;

  //   773        %else

  goto L_00FE;
L_00FD:;

//   774           fault("Cannot evaluate operand")

  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));

  //   775        %finish

L_00FE:;

//   776        %continue

  goto L_001F;

  //   777  !-----------------------------------------------------------------------
  //   778  itype2(20):! fcc

case_ITYPE2_20:;

//   779        non dense = 1

  NONDENSE = 1;

  //   780        %if '0'<=pres char<='9' %start

  {
// Double-sided test on PRESCHAR (Part I)
    int tmp;
    if (48 > (tmp = PRESCHAR)) goto L_00FF;
// Double-sided test on PRESCHAR (Part II)
    if (tmp > 57) goto L_00FF;
  }

  //   781           i = 0

  I = 0;

  //   782           j = lp

  J = LP;

  //   783           %cycle

L_0100:;

//   784              i = i*10+pres char-'0'

  I = I * 10 + PRESCHAR - 48;

  //   785              next char

  NEXTCHAR();

  //   786           %repeat %until %not '0'<=pres char<='9'

  {
// Double-sided test on PRESCHAR (Part I)
    int tmp;
    if (48 > (tmp = PRESCHAR)) goto L_0101;
// Double-sided test on PRESCHAR (Part II)
    if (tmp > 57) goto L_0101;
  }
  goto L_0100;
L_0101:;

//   787           %if pres char=',' %start

  if (PRESCHAR != 44) goto L_0102;

    //   788              next char

  NEXTCHAR();

  //   789              %if i=0 %start

  if (I != 0) goto L_0103;

    //   790                 instr out(0, 0, 0, 0)

  INSTROUT(0, 0, 0, 0);

  //   791                 fault("Invalid string")

  FAULT(_imp_str_literal_size(63, "Invalid string"));

  //   792              %else

  goto L_0104;
L_0103:;

//   793                 %while i>0 %cycle

L_0105:;
  if (I <= 0) goto L_0106;

    //   794                    %if pres char=nl %start

  if (PRESCHAR != 10) goto L_0107;

    //   795                       opd = ' '

  OPD = 32;

  //   796                    %else

  goto L_0108;
L_0107:;

//   797                       opd = line(lp)

  OPD = LINE[LP - 1];

  //   798                       next char

  NEXTCHAR();

  //   799                    %finish

L_0108:;

//   800                    i = i-1

  I = I - 1;

  //   801                    %if cont=0 %start

  if (CONT != 0) goto L_0109;

    //   802                       j = lp

  J = LP;

  //   803                       %for k = 1, 1, i %cycle

  // %for K = 1, 1, I %cycle
  {
    int _final = I;
    if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = 1, 1, I");
    K = 0;
  L_010A:
    if (K == _final) goto L_010B;
    K += 1;

    //   804                          %exit %if pres char=nl

    if (PRESCHAR != 10) goto L_010D;
    goto L_010B;
  L_010D:;

  //   805                          next char

    NEXTCHAR();

    //   806                       %repeat

    goto L_010A;
  }

L_010B:;

//   807                       instr out(opd, 0, 1, 0)

  INSTROUT(OPD, 0, 1, 0);

  //   808                       lp = j-1

  LP = J - 1;

  //   809                       next char

  NEXTCHAR();

  //   810                       cont = 1

  CONT = 1;

  //   811                    %else

  goto L_010E;
L_0109:;

//   812                       instr out(opd, 0, 1, 0)

  INSTROUT(OPD, 0, 1, 0);

  //   813                    %finish

L_010E:;

//   814                 %repeat

  goto L_0105;
L_0106:;

//   815                 cont = 0

  CONT = 0;

  //   816              %finish

L_0104:;

//   817              %continue

  goto L_001F;

  //   818           %else

L_0102:;

//   819              lp = j-1

  LP = J - 1;

  //   820              next char

  NEXTCHAR();

  //   821           %finish
  //   822        %finish

L_00FF:;

//   823        %if pres char<' ' %start

  if (PRESCHAR >= 32) goto L_010F;

    //   824           next char %while pres char#nl

L_0110:;
  if (PRESCHAR == 10) goto L_0111;
  NEXTCHAR();
  goto L_0110;
L_0111:;

//   825           instr out(0, 0, 0, 0)

  INSTROUT(0, 0, 0, 0);

  //   826           fault("Invalid string delimiter")

  FAULT(_imp_str_literal_size(63, "Invalid string delimiter"));

  //   827        %else

  goto L_0112;
L_010F:;

//   828           delim = pres char

  DELIM = PRESCHAR;

  //   829           next char

  NEXTCHAR();

  //   830           %cycle

L_0113:;

//   831              %if pres char=nl %start

  if (PRESCHAR != 10) goto L_0114;

    //   832                 %if cont=0 %start

  if (CONT != 0) goto L_0115;

    //   833                    instr out(0, 0, 0, 0)

  INSTROUT(0, 0, 0, 0);

  //   834                    fault("Illegal string")

  FAULT(_imp_str_literal_size(63, "Illegal string"));

  //   835                 %finish

L_0115:;

//   836                 %exit

  goto L_0116;

  //   837              %finish

L_0114:;

//   838              %if pres char=delim %start

  if (PRESCHAR != DELIM) goto L_0117;

    //   839                 next char

  NEXTCHAR();

  //   840                 %unless pres char=delim %start

  if (PRESCHAR == DELIM) goto L_0118;

    //   841                    %if cont=0 %start

  if (CONT != 0) goto L_0119;

    //   842                       instr out(0, 0, 0, 0)

  INSTROUT(0, 0, 0, 0);

  //   843                       fault("Invalid string")

  FAULT(_imp_str_literal_size(63, "Invalid string"));

  //   844                    %finish

L_0119:;

//   845                    %exit

  goto L_0116;

  //   846                 %finish

L_0118:;

//   847              %finish

L_0117:;

//   848              %if cont=0 %start

  if (CONT != 0) goto L_011A;

    //   849                 i = lp

  I = LP;

  //   850                 %cycle

L_011B:;

//   851                    next char %while pres char#delim %and pres char#nl

L_011C:;
  if (PRESCHAR == DELIM) goto L_011D;
  if (PRESCHAR == 10) goto L_011D;
  NEXTCHAR();
  goto L_011C;
L_011D:;

//   852                    %if pres char=delim %start

  if (PRESCHAR != DELIM) goto L_011E;

    //   853                       next char

  NEXTCHAR();

  //   854                    %finish

L_011E:;

//   855                    %exit %unless pres char=delim

  if (PRESCHAR == DELIM) goto L_011F;
  goto L_0120;
L_011F:;

//   856                    next char

  NEXTCHAR();

  //   857                 %repeat

  goto L_011B;
L_0120:;

//   858                 instr out(line(i), 0, 1, 0)

  INSTROUT(LINE[I - 1], 0, 1, 0);

  //   859                 lp = i-1

  LP = I - 1;

  //   860                 next char

  NEXTCHAR();

  //   861                 cont = 1

  CONT = 1;

  //   862              %else

  goto L_0121;
L_011A:;

//   863                 instr out(line(lp), 0, 1, 0)

  INSTROUT(LINE[LP - 1], 0, 1, 0);

  //   864              %finish

L_0121:;

//   865              next char

  NEXTCHAR();

  //   866           %repeat

  goto L_0113;
L_0116:;

//   867           cont = 0

  CONT = 0;

  //   868        %finish

L_0112:;

//   869        %continue

  goto L_001F;

  //   870  !-----------------------------------------------------------------------
  //   871  itype2(21): ! nam

case_ITYPE2_21:;

//   872        non dense = 1

  NONDENSE = 1;

  //   873        header = ""

  _imp_strncpy(/*?*/ &HEADER, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("");
                 (void *)&tmp;
               }),
               /*max:*/ 33);

  //   874        %while pres char#nl %cycle

L_0122:;
  if (PRESCHAR == 10) goto L_0123;

    //   875           header <- header.to string(line(lp))

  _imp_strncpy(/*?*/ &HEADER, ({
                 __typeof__(_imp_string255) tmp; /*C*/
                 tmp = *({
                   _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &HEADER, ({
                                                    __typeof__(_imp_string1) tmp; /*E*/
                                                    tmp = _imp_TOSTRING(LINE[LP - 1]);
                                                    (void *)&tmp;
                                                  }));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 33);

  /* truncated copy of no more than 33 chars */
  if (*_imp_LENGTH((_imp_string *)/*?*/ &HEADER) > 33) *_imp_LENGTH((_imp_string *)/*?*/ &HEADER) = 33;

    //   876           next char

  NEXTCHAR();

  //   877        %repeat

  goto L_0122;
L_0123:;

//   878        instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //   879        fault("Illegal label") %unless lid=0

  if (LID == 0) goto L_0124;
  FAULT(_imp_str_literal_size(63, "Illegal label"));
L_0124:;

//   880        %continue

  goto L_001F;

  //   881  !-----------------------------------------------------------------------
  //   882  itype2(22): ! opt

case_ITYPE2_22:;

//   883        i = lp

  I = LP;

  //   884        j = bchar

  J = BCHAR;

  //   885        %cycle

L_0125:;

//   886           %if get option(opt) %start

  if (!(GETOPTION(/*?*/ &OPT))) goto L_0126;

    //   887              ->option action(opt)

  OPTIONACTION_line = __LINE__;
  OPTIONACTION_file = __FILE__;
  OPTIONACTION_index = OPT;
  goto case_OPTIONACTION_dispatch;

  //   888  option action(1):

case_OPTIONACTION_1:;

//   889  option action(2):

case_OPTIONACTION_2:;

//   890              bchar = ' '

  BCHAR = 32;

  //   891              -> next option

  goto U_1000;

  //   892  option action(3):

case_OPTIONACTION_3:;

//   893  option action(4):

case_OPTIONACTION_4:;

//   894              bchar = -1

  BCHAR = -1;

  //   895              -> next option

  goto U_1000;

  //   896  option action(5):

case_OPTIONACTION_5:;

//   897  option action(6):

case_OPTIONACTION_6:;

//   898              cflag = 1

  CFLAG = 1;

  //   899              -> next option

  goto U_1000;

  //   900  option action(7):

case_OPTIONACTION_7:;

//   901  option action(8):

case_OPTIONACTION_8:;

//   902              cflag = 0

  CFLAG = 0;

  //   903              -> next option

  goto U_1000;

  //   904  option action(9):

case_OPTIONACTION_9:;

//   905              drad = 4

  DRAD = 4;

  //   906              sp1 = 3

  SP1 = 3;

  //   907              sp2 = 6

  SP2 = 6;

  //   908              -> next option

  goto U_1000;

  //   909  option action(10):

case_OPTIONACTION_10:;

//   910              drad = 5

  DRAD = 5;

  //   911              sp1 = 3

  SP1 = 3;

  //   912              sp2 = 5

  SP2 = 5;

  //   913             -> next option

  goto U_1000;

  //   914  option action(11):

case_OPTIONACTION_11:;

//   915              drad = 8

  DRAD = 8;

  //   916              sp1 = 2

  SP1 = 2;

  //   917              sp2 = 4

  SP2 = 4;

  //   918              -> next option

  goto U_1000;

  //   919  option action(12):

case_OPTIONACTION_12:;

//   920  option action(13):

case_OPTIONACTION_13:;

//   921  option action(14):

case_OPTIONACTION_14:;

//   922  option action(15):

case_OPTIONACTION_15:;

//   923              eflag = 1

  EFLAG = 1;

  //   924              -> next option

  goto U_1000;

  //   925  option action(16):

case_OPTIONACTION_16:;

//   926  option action(17):

case_OPTIONACTION_17:;

//   927              eflag = 0

  EFLAG = 0;

  //   928              -> next option

  goto U_1000;

  //   929  option action(18):

case_OPTIONACTION_18:;

//   930  option action(19):

case_OPTIONACTION_19:;

//   931              fflag = 1

  FFLAG = 1;

  //   932              -> next option

  goto U_1000;

  //   933  option action(20):

case_OPTIONACTION_20:;

//   934  option action(21):

case_OPTIONACTION_21:;

//   935              fflag = 0

  FFLAG = 0;

  //   936              -> next option

  goto U_1000;

  //   937  option action(22):

case_OPTIONACTION_22:;

//   938  option action(23):

case_OPTIONACTION_23:;

//   939              gflag = 1

  GFLAG = 1;

  //   940              -> next option

  goto U_1000;

  //   941  option action(24):

case_OPTIONACTION_24:;

//   942  option action(25):

case_OPTIONACTION_25:;

//   943              gflag = 0

  GFLAG = 0;

  //   944              -> next option

  goto U_1000;

  //   945  option action(26):

case_OPTIONACTION_26:;

//   946  option action(27):

case_OPTIONACTION_27:;

//   947              lflag = 2

  LFLAG = 2;

  //   948              -> next option

  goto U_1000;

  //   949  option action(28):

case_OPTIONACTION_28:;

//   950  option action(29):

case_OPTIONACTION_29:;

//   951              lflag = 1

  LFLAG = 1;

  //   952              -> next option

  goto U_1000;

  //   953  option action(30):

case_OPTIONACTION_30:;

//   954  option action(31):

case_OPTIONACTION_31:;

//   955              lflag = 0

  LFLAG = 0;

  //   956              -> next option

  goto U_1000;

  //   957  option action(32):

case_OPTIONACTION_32:;

//   958  option action(33):

case_OPTIONACTION_33:;

//   959              pflag = 3

  PFLAG = 3;

  //   960              -> next option

  goto U_1000;

  //   961  option action(34):

case_OPTIONACTION_34:;

//   962  option action(35):

case_OPTIONACTION_35:;

//   963              pflag = 0

  PFLAG = 0;

  //   964              -> next option

  goto U_1000;

  //   965  option action(36):

case_OPTIONACTION_36:;

//   966  option action(37):

case_OPTIONACTION_37:;

//   967              sflag = 1

  SFLAG = 1;

  //   968              -> next option

  goto U_1000;

  //   969  option action(38):

case_OPTIONACTION_38:;

//   970  option action(39):

case_OPTIONACTION_39:;

//   971              sflag = 0

  SFLAG = 0;

  //   972              -> next option

  goto U_1000;

  //   973  option action(40):

case_OPTIONACTION_40:;

//   974  option action(41):

case_OPTIONACTION_41:;

//   975              tflag = 1

  TFLAG = 1;

  //   976              -> next option

  goto U_1000;

  //   977  option action(42):

case_OPTIONACTION_42:;

//   978  option action(43):

case_OPTIONACTION_43:;

//   979              tflag = 0

  TFLAG = 0;

  //   980              -> next option

  goto U_1000;

  //   981  option action(44):

case_OPTIONACTION_44:;

//   982  option action(45):

case_OPTIONACTION_45:;

//   983              wflag = 1

  WFLAG = 1;

  //   984              -> next option

  goto U_1000;

  //   985  option action(46):

case_OPTIONACTION_46:;

//   986  option action(47):

case_OPTIONACTION_47:;

//   987              wflag = 0

  WFLAG = 0;

  //   988              -> next option

  goto U_1000;

  //   989  option action(48):

case_OPTIONACTION_48:;

//   990  option action(49):

case_OPTIONACTION_49:;

//   991              xflag = 1

  XFLAG = 1;

  //   992              -> next option

  goto U_1000;

  //   993  option action(50):

case_OPTIONACTION_50:;

//   994  option action(51):

case_OPTIONACTION_51:;

//   995              xflag = 0

  XFLAG = 0;

  //   996  option action(-1):

case_OPTIONACTION_M1:;

//   997  option action(0):

case_OPTIONACTION_0:;

//   998  next option:

U_1000:;

//   999           %finish

L_0126:;

//  1000        %repeat %until %not more items

  if (!(MOREITEMS())) goto L_0128;
  goto L_0125;
L_0128:;

//  1001        %if lflag=2 %start

  if (LFLAG != 2) goto L_0129;

    //  1002           sp3 = line width-sp1-sp2*2-cflag*2-wflag-10

  SP3 = 78 - SP1 - SP2 * 2 - CFLAG * 2 - WFLAG - 10;

  //  1003        %else

  goto L_012A;
L_0129:;

//  1004           sp3 = line width-wflag-7

  SP3 = 78 - WFLAG - 7;

  //  1005        %finish

L_012A:;

//  1006        instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //  1007        fault("Illegal label") %unless lid=0

  if (LID == 0) goto L_012B;
  FAULT(_imp_str_literal_size(63, "Illegal label"));
L_012B:;

//  1008        lp = i-1

  LP = I - 1;

  //  1009        next char

  NEXTCHAR();

  //  1010        bchar = j

  BCHAR = J;

  //  1011        %cycle

L_012C:;

//  1012           %if get option(opt) %start

  if (!(GETOPTION(/*?*/ &OPT))) goto L_012D;

    //  1013              %if opt=1 %or opt=2 %start

  if (OPT == 1) goto L_012E;
  if (OPT != 2) goto L_012F;
L_012E:;

//  1014                 bchar = ' '

  BCHAR = 32;

  //  1015              %finish %else %if opt=3 %or opt=4 %start

  goto L_0130;
L_012F:;
  if (OPT == 3) goto L_0131;
  if (OPT != 4) goto L_0132;
L_0131:;

//  1016                 bchar = -1

  BCHAR = -1;

  //  1017              %finish %else %if opt<0 %start

  goto L_0130;
L_0132:;
  if (OPT >= 0) goto L_0133;

    //  1018                 fault("Unknown option")

  FAULT(_imp_str_literal_size(63, "Unknown option"));

  //  1019              %finish

L_0133:;
L_0130:;

//  1020           %else

  goto L_0134;
L_012D:;

//  1021              fault("Cannot evaluate operand")

  FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));

  //  1022           %finish

L_0134:;

//  1023        %repeat %until %not more items

  if (!(MOREITEMS())) goto L_0135;
  goto L_012C;
L_0135:;

//  1024        %continue

  goto L_001F;

  //  1025  !-----------------------------------------------------------------------
  //  1026  itype2(23): ! page

case_ITYPE2_23:;

//  1027        %unless lid=0 %start

  if (LID == 0) goto L_0136;

    //  1028           instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //  1029           fault("Illegal label")

  FAULT(_imp_str_literal_size(63, "Illegal label"));

  //  1030        %finish

L_0136:;

//  1031        nline(lines on page) %unless lflag=0

  if (LFLAG == 0) goto L_0137;
  NLINE(66);
L_0137:;

//  1032        %continue

  goto L_001F;

  //  1033  !-----------------------------------------------------------------------
  //  1034  itype2(24): ! spc

case_ITYPE2_24:;

//  1035        i = get opd(opd)

  I = GETOPD(/*?*/ &OPD);

  //  1036        %unless lid=0 %start

  if (LID == 0) goto L_0138;

    //  1037           instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //  1038           fault("Illegal label")

  FAULT(_imp_str_literal_size(63, "Illegal label"));

  //  1039        %finish

L_0138:;

//  1040        %unless lflag=0 %start

  if (LFLAG == 0) goto L_0139;

    //  1041           %if i=0 %start

  if (I != 0) goto L_013A;

    //  1042              nline(opd)

  NLINE(OPD);

  //  1043           %else

  goto L_013B;
L_013A:;

//  1044              nline(1)

  NLINE(1);

  //  1045           %finish

L_013B:;

//  1046        %finish

L_0139:;

//  1047  !-----------------------------------------------------------------------
//  1048     %repeat

L_001F:;
  goto L_0086;

  //  1049  !-----------------------------------------------------------------------
  //  1050  itype2(25):! end

case_ITYPE2_25:;

//  1051     instr out(0, 0, -4, 0)

  INSTROUT(0, 0, -4, 0);

  //  1052     fault("Illegal label") %unless lid=0

  if (LID == 0) goto L_013C;
  FAULT(_imp_str_literal_size(63, "Illegal label"));
L_013C:;

//  1053     %for i = 1, 1, nnames %cycle

// %for I = 1, 1, NNAMES %cycle
  {
    int _final = NNAMES;
    if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, NNAMES");
    I = 0;
  L_013D:
    if (I == _final) goto L_013E;
    I += 1;

    //  1054        fault("Symbol ".name(i)." has no value") %if nass(i)=0

    if (NASS[I - 1] != 0) goto L_0140;
    FAULT(
        *({
          __typeof__(_imp_string255) tmp = *({
            _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                             _imp_string255 tmp =
                                                 _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("Symbol "),
                                                           (_imp_string *)/*?*/ &NAME[I - 1]);
                                             (_imp_string255 *)&tmp;
                                           }),
                                           (_imp_string *)/*?*/ _imp_str_literal_ptr(" has no value"));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string63 *)&tmp;
        })
    );
  L_0140:;

  //  1055     %repeat

    goto L_013D;
  }

L_013E:;

//  1056  !-----------------------------------------------------------------------
//  1057     %unless xflag=0 %start

  if (XFLAG == 0) goto L_0141;

    //  1058        sqs(1, nnames)

  SQS(1, NNAMES);

  //  1059        nline(lines on page)

  NLINE(66);

  //  1060        print string("   Symbol Cross Reference Table")

  _imp_PRINTSTRING(_imp_str_literal("   Symbol Cross Reference Table"));

  //  1061        nline(2)

  NLINE(2);

  //  1062        sp3 = (linewidth-6-sp2)//6

  SP3 = ((long)(78 - 6 - SP2) / (long)6);

  //  1063        %for i = 1, 1, nnames %cycle

  // %for I = 1, 1, NNAMES %cycle
  {
    int _final = NNAMES;
    if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, NNAMES");
    I = 0;
  L_0142:
    if (I == _final) goto L_0143;
    I += 1;

    //  1064           print string(name(i))

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string6) tmp = NAME[I - 1] /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1065           spaces(7-length(name(i)))

    _imp_SPACES(7 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME[I - 1]));

    //  1066           %if nass(i)=0 %or nass(i)=2 %or nass(i)=4 %start

    if (NASS[I - 1] == 0) goto L_0145;
    if (NASS[I - 1] == 2) goto L_0145;
    if (NASS[I - 1] != 4) goto L_0146;
  L_0145:;

  //  1067              print symbol('*') %for j = 1, 1, sp2

  // %for J = 1, 1, SP2 %cycle
    {
      int _final = SP2;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, SP2");
      J = 0;
    L_0147:
      if (J == _final) goto L_0148;
      J += 1;
      _imp_PRINTSYMBOL(42);
      goto L_0147;
    }

  L_0148:;

  //  1068           %else

    goto L_014A;
  L_0146:;

  //  1069              print number(nval(i), 2)

    PRINTNUMBER(NVAL[I - 1], 2);

    //  1070           %finish

  L_014A:;

  //  1071           j = xhead(i)

    J = XHEAD[I - 1];

    //  1072           k = 0

    K = 0;

    //  1073           %cycle

  L_014B:;

  //  1074              l = xlink(j)

    L = XLINK[J - 1];

    //  1075              xlink(j) = k

    XLINK[J - 1] = K;

    //  1076              k = j

    K = J;

    //  1077              j = l

    J = L;

    //  1078           %repeat %until j=0

    if (J == 0) goto L_014C;
    goto L_014B;
  L_014C:;

  //  1079           j = 0

    J = 0;

    //  1080           %cycle

  L_014D:;

  //  1081              %if j=sp3 %start

    if (J != SP3) goto L_014E;

      //  1082                 nline(1)

    NLINE(1);

    //  1083                 spaces(7+sp2)

    _imp_SPACES(7 + SP2);

    //  1084                 j = 0

    J = 0;

    //  1085              %finish

  L_014E:;

  //  1086              write(xentry(k), 5)

    _imp_WRITE(XENTRY[K - 1], 5);

    //  1087              j = j+1

    J = J + 1;

    //  1088              k = xlink(k)

    K = XLINK[K - 1];

    //  1089           %repeat %until k=0

    if (K == 0) goto L_014F;
    goto L_014D;
  L_014F:;

  //  1090           nline(1)

    NLINE(1);

    //  1091        %repeat

    goto L_0142;
  }

L_0143:;

//  1092     %finish %else %unless sflag=0 %start

  goto L_0150;
L_0141:;
  if (SFLAG == 0) goto L_0151;

    //  1093        sqs(1, nnames)

  SQS(1, NNAMES);

  //  1094        nline(lines on page)

  NLINE(66);

  //  1095        print string("  Symbol Table")

  _imp_PRINTSTRING(_imp_str_literal("  Symbol Table"));

  //  1096        nline(2)

  NLINE(2);

  //  1097        sp3 = (line width+8-sp2)//15

  SP3 = ((long)(78 + 8 - SP2) / (long)15);

  //  1098        sp1 = (linewidth-sp3*15+9-sp2)>>1

  SP1 = (unsigned int)78 - SP3 * 15 + 9 - SP2 >> 1;

  //  1099        %for j = 1, 1, nnames %cycle

  // %for J = 1, 1, NNAMES %cycle
  {
    int _final = NNAMES;
    if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, NNAMES");
    J = 0;
  L_0152:
    if (J == _final) goto L_0153;
    J += 1;

    //  1100           %if (j-1)=(j-1)//sp3*sp3 %start

    if (J - 1 != ((long)(J - 1) / (long)SP3) * SP3) goto L_0154;

      //  1101              nline(1)

    NLINE(1);

    //  1102             spaces(sp2)

    _imp_SPACES(SP2);

    //  1103           %else

    goto L_0155;
  L_0154:;

  //  1104              spaces(8-sp2)

    _imp_SPACES(8 - SP2);

    //  1105           %finish

  L_0155:;

  //  1106           print string(name(j))

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string6) tmp = NAME[J - 1] /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1107           spaces(7-length(name(j)))

    _imp_SPACES(7 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME[J - 1]));

    //  1108           %if nass(j)=0 %or nass(j)=2 %or nass(j)=4 %start

    if (NASS[J - 1] == 0) goto L_0156;
    if (NASS[J - 1] == 2) goto L_0156;
    if (NASS[J - 1] != 4) goto L_0157;
  L_0156:;

  //  1109              print symbol('*') %for i = 1, 1, sp2

  // %for I = 1, 1, SP2 %cycle
    {
      int _final = SP2;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, SP2");
      I = 0;
    L_0158:
      if (I == _final) goto L_0159;
      I += 1;
      _imp_PRINTSYMBOL(42);
      goto L_0158;
    }

  L_0159:;

  //  1110           %else

    goto L_015A;
  L_0157:;

  //  1111              print number(nval(j),2)

    PRINTNUMBER(NVAL[J - 1], 2);

    //  1112           %finish

  L_015A:;

  //  1113        %repeat

    goto L_0152;
  }

L_0153:;

//  1114        nline(1)

  NLINE(1);

  //  1115     %finish

L_0151:;
L_0150:;

//  1116     nline(2)

  NLINE(2);

  //  1117     spaces(2)

  _imp_SPACES(2);

  //  1118     %if faults=0 %start

  if (FAULTS != 0) goto L_015B;

    //  1119        print string("No")

  _imp_PRINTSTRING(_imp_str_literal("No"));

  //  1120     %else

  goto L_015C;
L_015B:;

//  1121        write(faults, 0)

  _imp_WRITE(FAULTS, 0);

  //  1122     %finish

L_015C:;

//  1123     print string(" fault")

  _imp_PRINTSTRING(_imp_str_literal(" fault"));

  //  1124     print symbol('s') %unless faults=1

  if (FAULTS == 1) goto L_015D;
  _imp_PRINTSYMBOL(115);
L_015D:;

//  1125     print string(" in this assembly.")

  _imp_PRINTSTRING(_imp_str_literal(" in this assembly."));

  //  1126     newline

  _imp_NEWLINE();

  //  1127     select output(0)

  _imp_SELECTOUTPUT(0);

  //  1128     spaces(2)

  _imp_SPACES(2);

  //  1129     %if faults=0 %start

  if (FAULTS != 0) goto L_015E;

    //  1130        write(ln, 0)

  _imp_WRITE(LN, 0);

  //  1131        print string(" line")

  _imp_PRINTSTRING(_imp_str_literal(" line"));

  //  1132        print symbol('s') %unless ln=1

  if (LN == 1) goto L_015F;
  _imp_PRINTSYMBOL(115);
L_015F:;

//  1133        print string(" assembled.")

  _imp_PRINTSTRING(_imp_str_literal(" assembled."));

  //  1134     %else

  goto L_0160;
L_015E:;

//  1135        write(faults, 0)

  _imp_WRITE(FAULTS, 0);

  //  1136        print string(" fault")

  _imp_PRINTSTRING(_imp_str_literal(" fault"));

  //  1137        print symbol('s') %unless faults=1

  if (FAULTS == 1) goto L_0161;
  _imp_PRINTSYMBOL(115);
L_0161:;

//  1138        print string(" in this assembly.")

  _imp_PRINTSTRING(_imp_str_literal(" in this assembly."));

  //  1139     %finish

L_0160:;

//  1140     new line

  _imp_NEWLINE();

  //  1141     close

  CLOSE();

  //  1142     %stop

  _imp_stop(0);

  //  1143  !---------------------------------------------------------------------
  //  1144     %predicate is typed(%string(255) source, %string(255)%name file)

  int ISTYPED(_imp_string255 SOURCE, _imp_string255 * FILE) {
    //  1145        %integer i

    int I;

    //  1146
    //  1147        %for i = 1, 1, length(source) %cycle

    // %for I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE) %cycle
    {
      int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);
      if (invalid_for_loop(1, 1, _final))
        _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE)");
      I = 0;
    L_0162:
      if (I == _final) goto L_0163;
      I += 1;

      //  1148           file = substring(source, 1, i-1) %and %true %if charno(source, i)='.'

      if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) != 46) goto L_0164;
      *FILE = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &SOURCE, 1, I - 1);
      return 1 /*TRUE*/;
    L_0164:;

    //  1149        %repeat

      goto L_0162;
    }

  L_0163:;

  //  1150        file = source

    *FILE = SOURCE;

    //  1151        %false

    return 0 /*FALSE*/;

    //  1152     %end

  } /* end of ISTYPED */

  //  1153  !-------------------------------------------------------
  //  1154     %predicate matches(%string(255) source, pattern,

  int MATCHES(_imp_string255 SOURCE, _imp_string255 PATTERN, int MIN, int *I) {
    //  1155+                       %integer min, %integer %name i)
    //  1156        %integer l

    int L;

    //  1157        l = length(pattern)

    L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN);

    //  1158        %if length(pattern)>=length(source) %start

    if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN) < *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE))
      goto L_0165;

      //  1159           l = length(source)

    L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);

    //  1160        %else

    goto L_0166;
  L_0165:;

  //  1161           l = length(pattern)

    L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN);

    //  1162        %finish

  L_0166:;

  //  1163        %for i = 1, 1, l %cycle

  // %for *I = 1, 1, L %cycle
    {
      int _final = L;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle *I = 1, 1, L");
      *I = 0;
    L_0167:
      if (*I == _final) goto L_0168;
      *I += 1;

      //  1164           %unless charno(source, i)=charno(pattern, i) %start

      if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, *I) ==
          *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PATTERN, *I))
        goto L_0169;

        //  1165              %if 'A'<=charno(source, i)<='Z' %start

      {
// Double-sided test on _imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, *I) (Part I)
        unsigned char tmp;
        if (65 > (tmp = *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, *I))) goto L_016A;
// Double-sided test on _imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, *I) (Part II)
        if (tmp > 90) goto L_016A;
      }

      //  1166                 %false

      return 0 /*FALSE*/;

      //  1167              %finish %else %if i<=min %start

    L_016A:;
      if (*I > MIN) goto L_016B;

        //  1168                 %false

      return 0 /*FALSE*/;

      //  1169              %else

    L_016B:;

    //  1170                 %true

      return 1 /*TRUE*/;

      //  1171              %finish
      //  1172           %finish

    L_0169:;

    //  1173        %repeat

      goto L_0167;
    }

  L_0168:;

  //  1174        i = i+1

    *I = *I + 1;

    //  1175        %false %if i<=min

    if (*I > MIN) goto L_016C;
    return 0 /*FALSE*/;
  L_016C:;

  //  1176        %true

    return 1 /*TRUE*/;

    //  1177     %end

  } /* end of MATCHES */

  //  1178  !---------------------------------------------------------------------
  //  1179     %string(255) %function lc(%string(255) source)

  _imp_string255 LC(_imp_string255 SOURCE) {
    //  1180        %string(255) result

    _imp_string255 RESULT;

    //  1181        %integer i

    int I;

    //  1182
    //  1183        result = ""

    _imp_strncpy(/*?*/ &RESULT, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("");
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //  1184        %for i = 1, 1, length(source) %cycle

    // %for I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE) %cycle
    {
      int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);
      if (invalid_for_loop(1, 1, _final))
        _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE)");
      I = 0;
    L_016D:
      if (I == _final) goto L_016E;
      I += 1;

      //  1185           %if 'A'<=charno(source, i)&127<='Z' %start

      {
// Double-sided test on *_imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, I) & 127 (Part I)
        unsigned char tmp;
        if (65 > (tmp = *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127)) goto L_016F;
// Double-sided test on *_imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, I) & 127 (Part II)
        if (tmp > 90) goto L_016F;
      }

      //  1186              result = result.tostring((charno(source, i)&127)+'a'-'A')

      _imp_strncpy(/*?*/ &RESULT, ({
                     __typeof__(_imp_string255) tmp; /*B*/
                     tmp = *({
                       _imp_string255 tmp =
                           _imp_join((_imp_string *)/*?*/ &RESULT, ({
                                       __typeof__(_imp_string1) tmp; /*E*/
                                       tmp = _imp_TOSTRING(
                                           (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127) + 97 - 65);
                                       (void *)&tmp;
                                     }));
                       (_imp_string255 *)&tmp;
                     });
                     (void *)&tmp;
                   }),
                   /*max:*/ 255);

      //  1187           %else

      goto L_0170;
    L_016F:;

    //  1188              result = result.tostring(charno(source, i)&127)

      _imp_strncpy(/*?*/ &RESULT, ({
                     __typeof__(_imp_string255) tmp; /*B*/
                     tmp = *({
                       _imp_string255 tmp = _imp_join(
                           (_imp_string *)/*?*/ &RESULT, ({
                             __typeof__(_imp_string1) tmp; /*E*/
                             tmp = _imp_TOSTRING(*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127);
                             (void *)&tmp;
                           }));
                       (_imp_string255 *)&tmp;
                     });
                     (void *)&tmp;
                   }),
                   /*max:*/ 255);

      //  1189           %finish

    L_0170:;

    //  1190        %repeat

      goto L_016D;
    }

  L_016E:;

  //  1191        %result = result

    return *(_imp_string255 *)/*?*/ &RESULT;

    //  1192     %end

  } /* end of LC */

  //  1193  !-----------------------------------------------------------------------
  //  1194  %routine read line

  void READLINE(void) {
    //  1195     %integer i

    int I;

    //  1196     %on %event 9 %start

    if (!_imp_on_event(9)) goto L_0171;

      //  1197        %if i=1 %start

    if (I != 1) goto L_0172;

      //  1198           line(1) = ' '

    LINE[0] = 32;

    //  1199           line(2) = 'E'

    LINE[1] = 69;

    //  1200           line(3) = 'N'

    LINE[2] = 78;

    //  1201           line(4) = 'D'

    LINE[3] = 68;

    //  1202           line(5) = nl

    LINE[4] = 10;

    //  1203        %else

    goto L_0173;
  L_0172:;

  //  1204           line(i) = nl

    LINE[I - 1] = 10;

    //  1205        %finish

  L_0173:;

  //  1206        -> eof exit

    goto U_1001;

    //  1207     %finish

  L_0171:;

  //  1208
  //  1209     ln=ln+1

    LN = LN + 1;

    //  1210     %for i = 1, 1, max line+1 %cycle

    // %for I = 1, 1, 512 + 1 %cycle
    {
      int _final = 512 + 1;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, 512 + 1");
      I = 0;
    L_0174:
      if (I == _final) goto L_0175;
      I += 1;

      //  1211        read symbol(line(i))

      _imp_READSYMBOL(/*?*/ &LINE[I - 1]);

      //  1212        %exit %if line(i)&127=nl %or line(i)&127=12

      if (LINE[I - 1] & 127 == 10) goto L_0144;
      if (LINE[I - 1] & 127 != 12) goto L_0176;
    L_0144:;
      goto L_0175;
    L_0176:;

    //  1213     %repeat

      goto L_0174;
    }

  L_0175:;

  //  1214     read symbol(line(i)) %while line(i)&127#nl %and line(i)&255#12

  L_0177:;
    if (LINE[I - 1] & 127 == 10) goto L_0178;
    if (LINE[I - 1] & 255 == 12) goto L_0178;
    _imp_READSYMBOL(/*?*/ &LINE[I - 1]);
    goto L_0177;
  L_0178:;

  //  1215  eof exit:

  U_1001:;

  //  1216     lp = 0

    LP = 0;

    //  1217     next char

    NEXTCHAR();

    //  1218  %end

    return;
  } /* end of READLINE */

  //  1219  !-----------------------------------------------------------------------
  //  1220  %routine next char

  void NEXTCHAR(void) {
    //  1221
    //  1222     lp = lp+1

    LP = LP + 1;

    //  1223     pres char = line(lp)&127

    PRESCHAR = LINE[LP - 1] & 127;

    //  1224     %if 'a'<=pres char<='z' %start

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (97 > (tmp = PRESCHAR)) goto L_0179;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 122) goto L_0179;
    }

    //  1225        pres char = pres char+'A'-'a'

    PRESCHAR = PRESCHAR + 65 - 97;

    //  1226     %finish %else %if pres char=12 %start

    goto L_017A;
  L_0179:;
    if (PRESCHAR != 12) goto L_017B;

      //  1227        pres char = nl

    PRESCHAR = 10;

    //  1228     %finish %else %if pres char=9 %start

    goto L_017A;
  L_017B:;
    if (PRESCHAR != 9) goto L_017C;

      //  1229        pres char = ' '

    PRESCHAR = 32;

    //  1230     %finish

  L_017C:;
  L_017A:;

  //  1231  %end

    return;
  } /* end of NEXTCHAR */

  //  1232  !-----------------------------------------------------------------------
  //  1233  %predicate more items

  int MOREITEMS(void) {
    //  1234
    //  1235     next char %while pres char=bchar

  L_017D:;
    if (PRESCHAR != BCHAR) goto L_017E;
    NEXTCHAR();
    goto L_017D;
  L_017E:;

  //  1236     %false %unless pres char=','

    if (PRESCHAR == 44) goto L_017F;
    return 0 /*FALSE*/;
  L_017F:;

  //  1237     next char %until pres char#bchar

  L_0180:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_0181;
    goto L_0180;
  L_0181:;

  //  1238     %true

    return 1 /*TRUE*/;

    //  1239  %end

  } /* end of MOREITEMS */

  //  1240  !-----------------------------------------------------------------------
  //  1241  %predicate get option(%integer %name opt)

  int GETOPTION(int *OPT) {
    //  1242     %string(11) option

    _imp_string11 OPTION;

    //  1243
    //  1244     %if 'A'<=pres char<='Z' %start

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_0182;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 90) goto L_0182;
    }

    //  1245        option = to string(pres char)

    _imp_strncpy(/*?*/ &OPTION, ({
                   __typeof__(_imp_string1) tmp; /*B*/
                   tmp = _imp_TOSTRING(PRESCHAR);
                   (void *)&tmp;
                 }),
                 /*max:*/ 11);

    //  1246        %cycle

  L_0183:;

  //  1247           next char

    NEXTCHAR();

    //  1248           %exit %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_0184;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 90) goto L_0185;
    }
  L_0184:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0186;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 57) goto L_0185;
    }
  L_0186:;
    goto L_0187;
  L_0185:;

  //  1249           option <- option.to string(pres char)

    _imp_strncpy(/*?*/ &OPTION, ({
                   __typeof__(_imp_string255) tmp; /*C*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &OPTION, ({
                                                      __typeof__(_imp_string1) tmp; /*E*/
                                                      tmp = _imp_TOSTRING(PRESCHAR);
                                                      (void *)&tmp;
                                                    }));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 11);

    /* truncated copy of no more than 11 chars */
    if (*_imp_LENGTH((_imp_string *)/*?*/ &OPTION) > 11) *_imp_LENGTH((_imp_string *)/*?*/ &OPTION) = 11;

      //  1250        %repeat

    goto L_0183;
  L_0187:;

  //  1251        %for opt = 1, 1, no options %cycle

  // %for *OPT = 1, 1, 51 %cycle
    {
      *OPT = 0;
    L_0188:
      if (*OPT == 51) goto L_0189;
      *OPT += 1;

      //  1252           %true %if option text(opt)=option

      if (_imp_strcmp((_imp_string *)/*?*/ &OPTIONTEXT[*OPT - 1], (_imp_string *)/*?*/ &OPTION) != 0) goto L_018B;

      return 1 /*TRUE*/;
    L_018B:;

    //  1253        %repeat

      goto L_0188;
    }

  L_0189:;

  //  1254        opt = -1

    *OPT = -1;

    //  1255        %true

    return 1 /*TRUE*/;

    //  1256     %else

  L_0182:;

  //  1257        opt = 0

    *OPT = 0;

    //  1258        %false %unless pres char=','

    if (PRESCHAR == 44) goto L_018C;
    return 0 /*FALSE*/;
  L_018C:;

  //  1259        next char

    NEXTCHAR();

    //  1260        %true

    return 1 /*TRUE*/;

    //  1261     %finish
    //  1262  %end

  } /* end of GETOPTION */

  //  1263  !-----------------------------------------------------------------------
  //  1264  %integerfn get name(%integername nid)

  int GETNAME(int *NID) {
    //  1265     %string(6) n

    _imp_string6 N;

    //  1266     %integer h,l

    int H;
    int L;

    //  1267
    //  1268     nid = 0 %and %result = 1 %unless 'A'<=pres char<='Z'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_013F;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 90) goto L_018D;
    }
  L_013F:;
    *NID = 0;
    return 1;
  L_018D:;

  //  1269     h=pres char-'0'

    H = PRESCHAR - 48;

    //  1270     n=tostring(pres char)

    _imp_strncpy(/*?*/ &N, ({
                   __typeof__(_imp_string1) tmp; /*B*/
                   tmp = _imp_TOSTRING(PRESCHAR);
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1271     l = 1

    L = 1;

    //  1272     %cycle

  L_018E:;

  //  1273        next char

    NEXTCHAR();

    //  1274        %exit %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_018A;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 90) goto L_018F;
    }
  L_018A:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0190;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 57) goto L_018F;
    }
  L_0190:;
    goto L_0191;
  L_018F:;

  //  1275        l = l+1

    L = L + 1;

    //  1276        h=h<<4+pres char-'0' %and n=n.tostring(pres char) %unless l>6

    if (L > 6) goto L_0192;
    H = (H << 4) + PRESCHAR - 48;

    _imp_strncpy(/*?*/ &N, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &N, ({
                                                      __typeof__(_imp_string1) tmp; /*E*/
                                                      tmp = _imp_TOSTRING(PRESCHAR);
                                                      (void *)&tmp;
                                                    }));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

  L_0192:;

  //  1277     %repeat

    goto L_018E;
  L_0191:;

  //  1278     h=h&32767

    H = H & 32767;

    //  1279     h=h-h//nhash*nhash

    H = H - ((long)H / (long)67) * 67;

    //  1280     l=hnlink(h)

    L = HNLINK[H];

    //  1281     %while l#0 %cycle

  L_0193:;
    if (L == 0) goto L_0194;

      //  1282        %if name(l)=n %start

    if (_imp_strcmp((_imp_string *)/*?*/ &NAME[L - 1], (_imp_string *)/*?*/ &N) != 0) goto L_0195;

      //  1283           nid = l

    *NID = L;

    //  1284           %if pass=3 %and xxentries<=xentries %and look ahead=0 %start

    if (PASS != 3) goto L_0196;
    if (XXENTRIES > 1024) goto L_0196;
    if (LOOKAHEAD != 0) goto L_0196;

      //  1285              xxentries = xxentries+1

    XXENTRIES = XXENTRIES + 1;

    //  1286              %if xxentries>xentries %start

    if (XXENTRIES <= 1024) goto L_0197;

      //  1287                 fault("Too many references")

    FAULT(_imp_str_literal_size(63, "Too many references"));

    //  1288              %else

    goto L_0198;
  L_0197:;

  //  1289                 xlink(xxentries) = xhead(l)

    XLINK[XXENTRIES - 1] = XHEAD[L - 1];

    //  1290                 xentry(xxentries) = ln

    XENTRY[XXENTRIES - 1] = LN;

    //  1291                 xhead(l) = xxentries

    XHEAD[L - 1] = XXENTRIES;

    //  1292              %finish

  L_0198:;

  //  1293           %finish

  L_0196:;

  //  1294           %result = 0

    return 0;

    //  1295        %finish

  L_0195:;

  //  1296        l=nlink(l)

    L = NLINK[L - 1];

    //  1297     %repeat

    goto L_0193;
  L_0194:;

  //  1298     fault("Too many names") %and %stop %if nnames=names

    if (NNAMES != 255) goto L_0199;
    FAULT(_imp_str_literal_size(63, "Too many names"));
    _imp_stop(0);
  L_0199:;

  //  1299     nnames = nnames+1

    NNAMES = NNAMES + 1;

    //  1300     name(nnames) = n

    _imp_strncpy(/*?*/ &NAME[NNAMES - 1], ({
                   __typeof__(_imp_string6) tmp; /*B*/
                   tmp = N;
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1301     nlink(nnames) = hnlink(h)

    NLINK[NNAMES - 1] = HNLINK[H];

    //  1302     %if n="A" %or n="X" %or n="Y" %start

    if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("A")) == 0) goto L_019A;

    if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("X")) == 0) goto L_019A;

    if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("Y")) != 0) goto L_019B;

  L_019A:;

  //  1303        nass(nnames) = 2

    NASS[NNAMES - 1] = 2;

    //  1304     %else

    goto L_019C;
  L_019B:;

  //  1305        nass(nnames) = 0

    NASS[NNAMES - 1] = 0;

    //  1306     %finish

  L_019C:;

  //  1307     nval(nnames) = 0

    NVAL[NNAMES - 1] = 0;

    //  1308     %if pass=3 %and xxentries<=xentries %start

    if (PASS != 3) goto L_019D;
    if (XXENTRIES > 1024) goto L_019D;

      //  1309        xxentries = xxentries+1

    XXENTRIES = XXENTRIES + 1;

    //  1310        %if xxentries>xentries %start

    if (XXENTRIES <= 1024) goto L_019E;

      //  1311           fault("Too many references")

    FAULT(_imp_str_literal_size(63, "Too many references"));

    //  1312        %else

    goto L_019F;
  L_019E:;

  //  1313           xlink(xxentries) = 0

    XLINK[XXENTRIES - 1] = 0;

    //  1314           xentry(xxentries) = ln

    XENTRY[XXENTRIES - 1] = LN;

    //  1315           xhead(nnames) = xxentries

    XHEAD[NNAMES - 1] = XXENTRIES;

    //  1316        %finish

  L_019F:;

  //  1317     %else

    goto L_01A0;
  L_019D:;

  //  1318        xhead(nnames) = 0

    XHEAD[NNAMES - 1] = 0;

    //  1319     %finish

  L_01A0:;

  //  1320     hnlink(h) = nnames

    HNLINK[H] = NNAMES;

    //  1321     nid = nnames

    *NID = NNAMES;

    //  1322     %result = 0

    return 0;

    //  1323  %end

  } /* end of GETNAME */

  //  1324  !-----------------------------------------------------------------------
  //  1325  %predicate get instr(%integername iid)

  int GETINSTR(int *IID) {
    //  1326     %string(4) i

    _imp_string4 I;

    //  1327     %integer h,l

    int H;
    int L;

    //  1328
    //  1329     iid=0

    *IID = 0;

    //  1330     %false %unless 'A'<=pres char<='Z'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_01A1;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 90) goto L_01A2;
    }
  L_01A1:;
    return 0 /*FALSE*/;
  L_01A2:;

  //  1331     h=pres char-'0'

    H = PRESCHAR - 48;

    //  1332     i=tostring(pres char)

    _imp_strncpy(/*?*/ &I, ({
                   __typeof__(_imp_string1) tmp; /*B*/
                   tmp = _imp_TOSTRING(PRESCHAR);
                   (void *)&tmp;
                 }),
                 /*max:*/ 4);

    //  1333     %for l = 2, 1, 4 %cycle

    // %for L = 2, 1, 4 %cycle
    {
      L = 1;
    L_01A3:
      if (L == 4) goto L_01A4;
      L += 1;

      //  1334        next char

      NEXTCHAR();

      //  1335        -> goti %unless 'A'<=pres char<='Z'

      {
// Double-sided test on PRESCHAR (Part I)
        int tmp;
        if (65 > (tmp = PRESCHAR)) goto L_01A6;
// Double-sided test on PRESCHAR (Part II)
        if (tmp <= 90) goto L_01A7;
      }
    L_01A6:;
      goto U_1002;
    L_01A7:;

    //  1336        h=h<<4+pres char-'0'

      H = (H << 4) + PRESCHAR - 48;

      //  1337        i=i.tostring(pres char)

      _imp_strncpy(/*?*/ &I, ({
                     __typeof__(_imp_string255) tmp; /*B*/
                     tmp = *({
                       _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &I, ({
                                                        __typeof__(_imp_string1) tmp; /*E*/
                                                        tmp = _imp_TOSTRING(PRESCHAR);
                                                        (void *)&tmp;
                                                      }));
                       (_imp_string255 *)&tmp;
                     });
                     (void *)&tmp;
                   }),
                   /*max:*/ 4);

      //  1338     %repeat

      goto L_01A3;
    }

  L_01A4:;

  //  1339     next char

    NEXTCHAR();

    //  1340     %false %if 'A'<=pres char<='Z'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_01A8;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 90) goto L_01A8;
    }
    return 0 /*FALSE*/;
  L_01A8:;

  //  1341  goti: h=h&32767

  U_1002:;
    H = H & 32767;

    //  1342     h=h-h//ihash*ihash

    H = H - ((long)H / (long)59) * 59;

    //  1343     l=hilink(h)

    L = HILINK[H];

    //  1344     %while l#0 %cycle

  L_01A9:;
    if (L == 0) goto L_01AA;

      //  1345        iid=l %and %true %if instr(l)=i

    if (_imp_strcmp((_imp_string *)/*?*/ &INSTR[L - 1], (_imp_string *)/*?*/ &I) != 0) goto L_01AB;

    *IID = L;
    return 1 /*TRUE*/;
  L_01AB:;

  //  1346        l=ilink(l)

    L = ILINK[L - 1];

    //  1347     %repeat

    goto L_01A9;
  L_01AA:;

  //  1348     %false

    return 0 /*FALSE*/;

    //  1349  %end

  } /* end of GETINSTR */

  //  1350  !-----------------------------------------------------------------------
  //  1351  %routine evaluate(%integer %name a, %integer b, %byte %integer op)

  void EVALUATE(int *A, int B, unsigned char OP) {
    //  1352
    //  1353     %if op='+' %start

    if (OP != 43) goto L_01AC;

      //  1354        a = a+b

    *A = *A + B;

    //  1355     %finish %else %if op='-' %start

    goto L_01AD;
  L_01AC:;
    if (OP != 45) goto L_01AE;

      //  1356        a = a-b

    *A = *A - B;

    //  1357     %finish %else %if op='*' %start

    goto L_01AD;
  L_01AE:;
    if (OP != 42) goto L_01AF;

      //  1358        a = a*b

    *A = *A * B;

    //  1359     %finish %else %if op='/' %start

    goto L_01AD;
  L_01AF:;
    if (OP != 47) goto L_01B0;

      //  1360        a = a//b

    *A = ((long)*A / (long)B);

    //  1361     %finish %else %if op='|' %start

    goto L_01AD;
  L_01B0:;
    if (OP != 124) goto L_01B1;

      //  1362        a = a-a//b*b

    *A = *A - ((long)*A / (long)B) * B;

    //  1363     %finish %else %if op='!' %start

    goto L_01AD;
  L_01B1:;
    if (OP != 33) goto L_01B2;

      //  1364        a = a!b

    *A = *A | B;

    //  1365     %finish %else %if op='&' %start

    goto L_01AD;
  L_01B2:;
    if (OP != 38) goto L_01B3;

      //  1366        a = a&b

    *A = *A & B;

    //  1367     %finish %else %if op='\' %start

    goto L_01AD;
  L_01B3:;
    if (OP != 92) goto L_01B4;

      //  1368        a = a!!b

    *A = *A ^ B;

    //  1369     %finish %else %if op='<' %start

    goto L_01AD;
  L_01B4:;
    if (OP != 60) goto L_01B5;

      //  1370        a = a<<b

    *A = *A << B;

    //  1371     %finish %else %if op='>' %start

    goto L_01AD;
  L_01B5:;
    if (OP != 62) goto L_01B6;

      //  1372        a = a>>b

    *A = (unsigned int)*A >> B;

    //  1373     %finish

  L_01B6:;
  L_01AD:;

  //  1374  %end

    return;
  } /* end of EVALUATE */

  //  1375  !-----------------------------------------------------------------------
  //  1376  %integer %function get term(%integer %name opd)

  int GETTERM(int *OPD) {
    //  1377     %integer i

    int I;

    //  1378
    //  1379     %while pres char='+' %cycle

  L_01B7:;
    if (PRESCHAR != 43) goto L_01B8;

      //  1380        next char %until pres char#bchar

  L_01B9:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01BA;
    goto L_01B9;
  L_01BA:;

  //  1381     %repeat

    goto L_01B7;
  L_01B8:;

  //  1382     %if pres char='-' %start

    if (PRESCHAR != 45) goto L_01BB;

      //  1383        next char %until pres char#bchar

  L_01BC:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01BD;
    goto L_01BC;
  L_01BD:;

  //  1384        i = get term(opd)

    I = GETTERM(OPD);

    //  1385        opd = -opd

    *OPD = -*OPD;

    //  1386     %finish %else %if pres char='\' %start

    goto L_01BE;
  L_01BB:;
    if (PRESCHAR != 92) goto L_01BF;

      //  1387        next char %until pres char#bchar

  L_01C0:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01C1;
    goto L_01C0;
  L_01C1:;

  //  1388        i = get term(opd)

    I = GETTERM(OPD);

    //  1389        opd = \opd

    *OPD = (~*OPD);

    //  1390     %finish %else %if pres char='(' %start

    goto L_01BE;
  L_01BF:;
    if (PRESCHAR != 40) goto L_01C2;

      //  1391        next char %until pres char#bchar

  L_01C3:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01C4;
    goto L_01C3;
  L_01C4:;

  //  1392        i = get expression(opd)

    I = GETEXPRESSION(OPD);

    //  1393        %if i=0 %start

    if (I != 0) goto L_01C5;

      //  1394           next char %while pres char=bchar

  L_01C6:;
    if (PRESCHAR != BCHAR) goto L_01C7;
    NEXTCHAR();
    goto L_01C6;
  L_01C7:;

  //  1395           %if pres char=')' %start

    if (PRESCHAR != 41) goto L_01C8;

      //  1396              next char

    NEXTCHAR();

    //  1397           %else

    goto L_01C9;
  L_01C8:;

  //  1398              i = 0

    I = 0;

    //  1399           %finish

  L_01C9:;

  //  1400        %finish

  L_01C5:;

  //  1401     %finish %else %if get name(i)=0 %start

    goto L_01BE;
  L_01C2:;
    if (GETNAME(/*?*/ &I) != 0) goto L_01CA;

      //  1402        %if pass=1 %or nass(i)=1 %or nass(i)=3 %start

    if (PASS == 1) goto L_01CB;
    if (NASS[I - 1] == 1) goto L_01CB;
    if (NASS[I - 1] != 3) goto L_01CC;
  L_01CB:;

  //  1403           opd = nval(i)

    *OPD = NVAL[I - 1];

    //  1404           i = 0

    I = 0;

    //  1405        %else

    goto L_01CD;
  L_01CC:;

  //  1406           i = 1

    I = 1;

    //  1407        %finish

  L_01CD:;

  //  1408     %else

    goto L_01BE;
  L_01CA:;

  //  1409        i = get const(opd)

    I = GETCONST(OPD);

    //  1410     %finish

  L_01BE:;

  //  1411     %result = i

    return I;

    //  1412  %end

  } /* end of GETTERM */

  //  1413  !-----------------------------------------------------------------------
  //  1414  %integer %function get expression(%integer %name opd)

  int GETEXPRESSION(int *OPD) {
    //  1415     %integer sp, prio, i

    int SP;
    int PRIO;
    int I;

    //  1416     %byte %integer %array op stk, prio stk(1:5)

    unsigned char OPSTK[5];
    unsigned char PRIOSTK[5];

    //  1417     %integer %array opd stk(0:5)

    int OPDSTK[6];

    //  1418
    //  1419     %result = 1 %unless get term(opd stk(0))=0

    if (GETTERM(/*?*/ &OPDSTK[0]) == 0) goto L_01CE;
    return 1;
  L_01CE:;

  //  1420     sp = 0

    SP = 0;

    //  1421     i = 0

    I = 0;

    //  1422     %cycle

  L_01CF:;

  //  1423        next char %while pres char=bchar

  L_01D0:;
    if (PRESCHAR != BCHAR) goto L_01D1;
    NEXTCHAR();
    goto L_01D0;
  L_01D1:;

  //  1424        %if pres char='!' %or pres char='\' %start

    if (PRESCHAR == 33) goto L_01D2;
    if (PRESCHAR != 92) goto L_01D3;
  L_01D2:;

  //  1425           prio = 0

    PRIO = 0;

    //  1426        %finish %else %if pres char='&' %start

    goto L_01D4;
  L_01D3:;
    if (PRESCHAR != 38) goto L_01D5;

      //  1427           prio = 1

    PRIO = 1;

    //  1428        %finish %else %if pres char='+' %or pres char='-' %start

    goto L_01D4;
  L_01D5:;
    if (PRESCHAR == 43) goto L_01D6;
    if (PRESCHAR != 45) goto L_01D7;
  L_01D6:;

  //  1429           prio = 2

    PRIO = 2;

    //  1430        %finish %else %if pres char='*' %or pres char='/' %or %c

    goto L_01D4;
  L_01D7:;
    if (PRESCHAR == 42) goto L_01D8;
    if (PRESCHAR == 47) goto L_01D8;
    if (PRESCHAR != 124) goto L_01D9;
  L_01D8:;

  //  1431+             pres char='|' %start
  //  1432           prio = 3

    PRIO = 3;

    //  1433        %finish %else %if pres char='<' %or pres char='>' %start

    goto L_01D4;
  L_01D9:;
    if (PRESCHAR == 60) goto L_01DA;
    if (PRESCHAR != 62) goto L_01DB;
  L_01DA:;

  //  1434           prio = 4

    PRIO = 4;

    //  1435        %else

    goto L_01D4;
  L_01DB:;

  //  1436           %exit

    goto L_01DC;

    //  1437        %finish

  L_01D4:;

  //  1438        %while sp>0 %and prio stk(sp)>=prio %cycle

  L_01DD:;
    if (SP <= 0) goto L_01DE;
    if (PRIOSTK[SP - 1] < PRIO) goto L_01DE;

      //  1439           evaluate(opd stk(sp-1), opd stk(sp), op stk(sp))

    EVALUATE(/*?*/ &OPDSTK[SP - 1], OPDSTK[SP], OPSTK[SP - 1]);

    //  1440           sp = sp-1

    SP = SP - 1;

    //  1441        %repeat

    goto L_01DD;
  L_01DE:;

  //  1442        sp = sp+1

    SP = SP + 1;

    //  1443        op stk(sp) = pres char

    OPSTK[SP - 1] = PRESCHAR;

    //  1444        prio stk(sp) = prio

    PRIOSTK[SP - 1] = PRIO;

    //  1445        next char %until pres char#bchar

  L_01DF:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01E0;
    goto L_01DF;
  L_01E0:;

  //  1446        %unless get term(opd stk(sp))=0 %start

    if (GETTERM(/*?*/ &OPDSTK[SP]) == 0) goto L_01E1;

      //  1447           sp = sp-1

    SP = SP - 1;

    //  1448           i = 1

    I = 1;

    //  1449           %exit

    goto L_01DC;

    //  1450        %finish

  L_01E1:;

  //  1451     %repeat

    goto L_01CF;
  L_01DC:;

  //  1452     evaluate(opd stk(sp-1), opd stk(sp), op stk(sp)) %for sp = sp, -1, 1

  // %for SP = SP,  -1, 1 %cycle
    {
      int _initial = SP;
      if (invalid_for_loop(_initial, -1, 1)) _imp_signal(5, 1, 0, "Illegal cycle SP = SP,  -1, 1");
      SP = _initial - (-1);
    L_01E2:
      if (SP == 1) goto L_01E3;
      SP -= 1;
      EVALUATE(/*?*/ &OPDSTK[SP - 1], OPDSTK[SP], OPSTK[SP - 1]);
      goto L_01E2;
    }

  L_01E3:;

  //  1453     opd = opd stk(0) %if i=0

    if (I != 0) goto L_01E4;
    *OPD = OPDSTK[0];
  L_01E4:;

  //  1454     %result = i

    return I;

    //  1455  %end

  } /* end of GETEXPRESSION */

  //  1456  !-----------------------------------------------------------------------
  //  1457  %integer %function get opd(%integername opd)

  int GETOPD(int *OPD) {
    //  1458     %integer nid,op,cval

    int NID;
    int OP;
    int CVAL;

    //  1459
    //  1460     %result = get expression(opd) %unless fflag=0

    if (FFLAG == 0) goto L_01E5;
    return GETEXPRESSION(OPD);
  L_01E5:;

  //  1461     opd=0

    *OPD = 0;

    //  1462     %if pres char='+' %or pres char='-' %start

    if (PRESCHAR == 43) goto L_01A5;
    if (PRESCHAR != 45) goto L_01E6;
  L_01A5:;

  //  1463        op = pres char

    OP = PRESCHAR;

    //  1464        next char %until pres char#bchar

  L_01E7:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01E8;
    goto L_01E7;
  L_01E8:;

  //  1465     %else

    goto L_01E9;
  L_01E6:;

  //  1466        op = '+'

    OP = 43;

    //  1467     %finish

  L_01E9:;

  //  1468     %cycle

  L_01EA:;

  //  1469        %if get name(nid)=0 %start

    if (GETNAME(/*?*/ &NID) != 0) goto L_01EB;

      //  1470           %result=1 %unless pass=1 %or nass(nid)=1 %or nass(nid)=3

    if (PASS == 1) goto L_01EC;
    if (NASS[NID - 1] == 1) goto L_01EC;
    if (NASS[NID - 1] == 3) goto L_01EC;
    return 1;
  L_01EC:;

  //  1471           cval=nval(nid)

    CVAL = NVAL[NID - 1];

    //  1472        %else

    goto L_01ED;
  L_01EB:;

  //  1473           %result=1 %if get const(cval)#0

    if (GETCONST(/*?*/ &CVAL) == 0) goto L_01EE;
    return 1;
  L_01EE:;

  //  1474        %finish

  L_01ED:;

  //  1475        evaluate(opd, cval, op)

    EVALUATE(OPD, CVAL, OP);

    //  1476        next char %while pres char=bchar

  L_01EF:;
    if (PRESCHAR != BCHAR) goto L_01F0;
    NEXTCHAR();
    goto L_01EF;
  L_01F0:;

  //  1477        op = pres char

    OP = PRESCHAR;

    //  1478        %result=0 %unless op='+' %or op='-' %or op='*' %or op='/'

    if (OP == 43) goto L_01F1;
    if (OP == 45) goto L_01F1;
    if (OP == 42) goto L_01F1;
    if (OP == 47) goto L_01F1;
    return 0;
  L_01F1:;

  //  1479        next char %until pres char#bchar

  L_01F2:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_01F3;
    goto L_01F2;
  L_01F3:;

  //  1480     %repeat

    goto L_01EA;

    //  1481  %end

  } /* end of GETOPD */

  //  1482  !-----------------------------------------------------------------------
  //  1483  %integerfn get const(%integername cval)

  int GETCONST(int *CVAL) {
    //  1484     %integer started, dig val, bin val, oct val, hex val,

    int STARTED;
    int DIGVAL;
    int BINVAL;
    int OCTVAL;
    int HEXVAL;
    int BINPOS;
    int OCTPOS;
    int DECPOS;

    //  1485+       bin pos, oct pos, dec pos
    //  1486
    //  1487     started=1

    STARTED = 1;

    //  1488     %if pres char='*' %start

    if (PRESCHAR != 42) goto L_01F4;

      //  1489        next char

    NEXTCHAR();

    //  1490        cval = ca

    *CVAL = CA;

    //  1491        %result = 0

    return 0;

    //  1492     %finish

  L_01F4:;

  //  1493     cval=0

    *CVAL = 0;

    //  1494     %if '0'<=pres char<='9' %start    ;! decimal

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_01F5;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 57) goto L_01F5;
    }

    //  1495        bin pos = 0

    BINPOS = 0;

    //  1496        oct pos = 0

    OCTPOS = 0;

    //  1497        dec pos = 0

    DECPOS = 0;

    //  1498        bin val = 0

    BINVAL = 0;

    //  1499        oct val = 0

    OCTVAL = 0;

    //  1500        hex val = 0

    HEXVAL = 0;

    //  1501        %cycle

  L_01F6:;

  //  1502           %if bin pos=0 %and pres char='B' %start

    if (BINPOS != 0) goto L_01F7;
    if (PRESCHAR != 66) goto L_01F7;

      //  1503              next char

    NEXTCHAR();

    //  1504              %if '0'<=pres char<='9' %or 'A'<=pres char<='F' %or %c

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_01F8;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 57) goto L_0149;
    }
  L_01F8:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_01F9;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 70) goto L_0149;
    }
  L_01F9:;
    if (PRESCHAR != 72) goto L_01FA;
  L_0149:;

  //  1505+                   pres char='H' %start
  //  1506                 bin pos = 1

    BINPOS = 1;

    //  1507                 oct pos = 1

    OCTPOS = 1;

    //  1508                 dec pos = 1

    DECPOS = 1;

    //  1509                 hex val = (hex val<<4)+11

    HEXVAL = (HEXVAL << 4) + 11;

    //  1510              %else

    goto L_01FB;
  L_01FA:;

  //  1511                 cval = bin val

    *CVAL = BINVAL;

    //  1512                 %result = 0

    return 0;

    //  1513              %finish

  L_01FB:;

  //  1514           %finish

  L_01F7:;

  //  1515           %if oct pos=0 %and (pres char='O' %or pres char='Q') %start

    if (OCTPOS != 0) goto L_01FC;
    if (PRESCHAR == 79) goto L_01FD;
    if (PRESCHAR != 81) goto L_01FC;
  L_01FD:;

  //  1516              cval = oct val

    *CVAL = OCTVAL;

    //  1517              next char

    NEXTCHAR();

    //  1518              %result = 0

    return 0;

    //  1519           %finish %else %if pres char='H' %start

  L_01FC:;
    if (PRESCHAR != 72) goto L_01FE;

      //  1520              cval = hex val

    *CVAL = HEXVAL;

    //  1521              next char

    NEXTCHAR();

    //  1522              %result = 0

    return 0;

    //  1523           %finish %else %if 'A'<=pres char<='F' %start

  L_01FE:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_01FF;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 70) goto L_01FF;
    }

    //  1524              dig val = pres char-'A'+10

    DIGVAL = PRESCHAR - 65 + 10;

    //  1525           %finish %else %if '0'<=pres char<='9' %start

    goto L_0200;
  L_01FF:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0201;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 57) goto L_0201;
    }

    //  1526              dig val = pres char-'0'

    DIGVAL = PRESCHAR - 48;

    //  1527           %else

    goto L_0200;
  L_0201:;

  //  1528              %result = dec pos

    return DECPOS;

    //  1529           %finish

  L_0200:;

  //  1530           bin pos = 1 %if dig val>1

    if (DIGVAL <= 1) goto L_0202;
    BINPOS = 1;
  L_0202:;

  //  1531           oct pos = 1 %if dig val>7

    if (DIGVAL <= 7) goto L_0203;
    OCTPOS = 1;
  L_0203:;

  //  1532           dec pos = 1 %if dig val>9

    if (DIGVAL <= 9) goto L_0204;
    DECPOS = 1;
  L_0204:;

  //  1533           bin val = (bin val<<1)+dig val

    BINVAL = (BINVAL << 1) + DIGVAL;

    //  1534           oct val = (oct val<<3)+dig val

    OCTVAL = (OCTVAL << 3) + DIGVAL;

    //  1535           cval = cval*10+dig val

    *CVAL = *CVAL * 10 + DIGVAL;

    //  1536           hex val = (hex val<<4)+dig val

    HEXVAL = (HEXVAL << 4) + DIGVAL;

    //  1537           next char

    NEXTCHAR();

    //  1538        %repeat

    goto L_01F6;

    //  1539     %finish

  L_01F5:;

  //  1540     %if pres char='$' %start    ;! hex

    if (PRESCHAR != 36) goto L_0205;

      //  1541        %cycle

  L_0206:;

  //  1542           next char

    NEXTCHAR();

    //  1543           %if '0'<=pres char<='9' %start

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0207;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 57) goto L_0207;
    }

    //  1544              cval = cval<<4!(pres char-'0')

    *CVAL = *CVAL << 4 | PRESCHAR - 48;

    //  1545           %finish %else %if 'A'<=pres char<='F' %start

    goto L_0208;
  L_0207:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_0209;
// Double-sided test on PRESCHAR (Part II)
      if (tmp > 70) goto L_0209;
    }

    //  1546              cval = cval<<4!(pres char-'A'+10)

    *CVAL = *CVAL << 4 | PRESCHAR - 65 + 10;

    //  1547           %else

    goto L_0208;
  L_0209:;

  //  1548              %result = started

    return STARTED;

    //  1549           %finish

  L_0208:;

  //  1550           started = 0

    STARTED = 0;

    //  1551        %repeat

    goto L_0206;

    //  1552     %finish

  L_0205:;

  //  1553     %if pres char='@' %start    ;! octal

    if (PRESCHAR != 64) goto L_020A;

      //  1554        %cycle

  L_020B:;

  //  1555           next char

    NEXTCHAR();

    //  1556           %result = started %unless '0'<=pres char<='7'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_020C;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 55) goto L_020D;
    }
  L_020C:;
    return STARTED;
  L_020D:;

  //  1557           cval = (cval<<3)!(pres char-'0')

    *CVAL = *CVAL << 3 | PRESCHAR - 48;

    //  1558           started = 0

    STARTED = 0;

    //  1559        %repeat

    goto L_020B;

    //  1560     %finish

  L_020A:;

  //  1561     %if pres char='%' %start

    if (PRESCHAR != 37) goto L_020E;

      //  1562        %cycle

  L_020F:;

  //  1563           next char

    NEXTCHAR();

    //  1564           %result = started %unless '0'<=pres char<='1'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0210;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 49) goto L_0211;
    }
  L_0210:;
    return STARTED;
  L_0211:;

  //  1565           cval = (cval<<1)!(pres char-'0')

    *CVAL = *CVAL << 1 | PRESCHAR - 48;

    //  1566           started = 0

    STARTED = 0;

    //  1567        %repeat

    goto L_020F;

    //  1568     %finish

  L_020E:;

  //  1569     %if pres char='''' %start

    if (PRESCHAR != 39) goto L_0212;

      //  1570        next char

    NEXTCHAR();

    //  1571        %result=1 %if lp=max line+1

    if (LP != 512 + 1) goto L_0213;
    return 1;
  L_0213:;

  //  1572        cval=line(lp)

    *CVAL = LINE[LP - 1];

    //  1573        next char

    NEXTCHAR();

    //  1574        %result=0

    return 0;

    //  1575     %finish

  L_0212:;

  //  1576     %result=1

    return 1;

    //  1577  %end

  } /* end of GETCONST */

  //  1578  !-----------------------------------------------------------------------
  //  1579  %predicate indexed(%byte %integer reg)

  int INDEXED(unsigned char REG) {
    //  1580     %integer i

    int I;

    //  1581
    //  1582     i = lp

    I = LP;

    //  1583     %true %if more items %and acc(reg)

    if (!(MOREITEMS())) goto L_0214;
    if (!(ACC(REG))) goto L_0214;
    return 1 /*TRUE*/;
  L_0214:;

  //  1584     lp = i-1

    LP = I - 1;

    //  1585     next char

    NEXTCHAR();

    //  1586     %false

    return 0 /*FALSE*/;

    //  1587  %end

  } /* end of INDEXED */

  //  1588  !-----------------------------------------------------------------------
  //  1589  %predicate acc(%byte %integer acc id)

  int ACC(unsigned char ACCID) {
    //  1590
    //  1591     %false %unless pres char=acc id

    if (PRESCHAR == ACCID) goto L_0215;
    return 0 /*FALSE*/;
  L_0215:;

  //  1592     next char

    NEXTCHAR();

    //  1593     %true %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'

    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (65 > (tmp = PRESCHAR)) goto L_0216;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 90) goto L_0217;
    }
  L_0216:;
    {
// Double-sided test on PRESCHAR (Part I)
      int tmp;
      if (48 > (tmp = PRESCHAR)) goto L_0218;
// Double-sided test on PRESCHAR (Part II)
      if (tmp <= 57) goto L_0217;
    }
  L_0218:;
    return 1 /*TRUE*/;
  L_0217:;

  //  1594     lp = lp-2

    LP = LP - 2;

    //  1595     next char

    NEXTCHAR();

    //  1596     %false

    return 0 /*FALSE*/;

    //  1597  %end

  } /* end of ACC */

  //  1598  !-----------------------------------------------------------------------
  //  1599  %routine immediate(%byte %integer order, mcycles)

  void IMMEDIATE(unsigned char ORDER, unsigned char MCYCLES) {
    //  1600     %integer i, opd

    int I;
    int OPD;

    //  1601
    //  1602     next char %until pres char#bchar

  L_0219:;
    NEXTCHAR();
    if (PRESCHAR != BCHAR) goto L_021A;
    goto L_0219;
  L_021A:;

  //  1603     i = get opd(opd)

    I = GETOPD(/*?*/ &OPD);

    //  1604     instr out(order, opd, 2, mcycles)

    INSTROUT(ORDER, OPD, 2, MCYCLES);

    //  1605     %unless i= 0 %start

    if (I == 0) goto L_021B;

      //  1606        fault("Cannot evaluate operand")

    FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));

    //  1607     %finish %else %unless 0<=opd<=255 %start

    goto L_021C;
  L_021B:;
    {
// Double-sided test on OPD (Part I)
      int tmp;
      if (0 > (tmp = OPD)) goto L_021D;
// Double-sided test on OPD (Part II)
      if (tmp <= 255) goto L_021E;
    }
  L_021D:;

  //  1608        fault("Invalid constant")

    FAULT(_imp_str_literal_size(63, "Invalid constant"));

    //  1609     %finish

  L_021E:;
  L_021C:;

  //  1610  %end

    return;
  } /* end of IMMEDIATE */

  //  1611  !-----------------------------------------------------------------------
  //  1612  %routine operand(%byte %integer reg, nreg, order, mcycles)

  void OPERAND(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES) {
    //  1613     %integer i, opd, reg fault

    int I;
    int OPD;
    int REGFAULT;

    //  1614
    //  1615     %if acc(reg) %or indexed(reg) %start

    if (ACC(REG)) goto L_021F;
    if (!(INDEXED(REG))) goto L_0220;
  L_021F:;

  //  1616        instr out(order+16_10, 0, 2, mcycles+2)

    INSTROUT(ORDER + 16, 0, 2, MCYCLES + 2);

    //  1617     %finish %else %if acc(nreg) %or indexed(nreg) %start

    goto L_0221;
  L_0220:;
    if (ACC(NREG)) goto L_0222;
    if (!(INDEXED(NREG))) goto L_0223;
  L_0222:;

  //  1618        instr out(order+16_10, 0, 2, mcycles+2)

    INSTROUT(ORDER + 16, 0, 2, MCYCLES + 2);

    //  1619        fault("Invalid index register")

    FAULT(_imp_str_literal_size(63, "Invalid index register"));

    //  1620     %else

    goto L_0221;
  L_0223:;

  //  1621        i = get opd(opd)

    I = GETOPD(/*?*/ &OPD);

    //  1622        %if indexed(reg) %start

    if (!(INDEXED(REG))) goto L_0224;

      //  1623           %if i#0 %or 0<=opd<=255 %start

    if (I != 0) goto L_0225;
    {
// Double-sided test on OPD (Part I)
      int tmp;
      if (0 > (tmp = OPD)) goto L_0226;
// Double-sided test on OPD (Part II)
      if (tmp > 255) goto L_0226;
    }
  L_0225:;

  //  1624              instr out(order+16_10, opd, 2, mcycles+2)

    INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 2);

    //  1625           %else

    goto L_0227;
  L_0226:;

  //  1626              instr out(order+16_18, opd, 3, mcycles+3)

    INSTROUT(ORDER + 24, OPD, 3, MCYCLES + 3);

    //  1627           %finish

  L_0227:;

  //  1628        %else

    goto L_0228;
  L_0224:;

  //  1629           %if indexed(nreg) %start

    if (!(INDEXED(NREG))) goto L_0229;

      //  1630              reg fault = 1

    REGFAULT = 1;

    //  1631           %else

    goto L_022A;
  L_0229:;

  //  1632              reg fault = 0

    REGFAULT = 0;

    //  1633           %finish

  L_022A:;

  //  1634           %if i#0 %or 0<=opd<=255 %start

    if (I != 0) goto L_022B;
    {
// Double-sided test on OPD (Part I)
      int tmp;
      if (0 > (tmp = OPD)) goto L_022C;
// Double-sided test on OPD (Part II)
      if (tmp > 255) goto L_022C;
    }
  L_022B:;

  //  1635              instr out(order, opd, 2, mcycles+1)

    INSTROUT(ORDER, OPD, 2, MCYCLES + 1);

    //  1636           %else

    goto L_022D;
  L_022C:;

  //  1637              instr out(order+8, opd, 3, mcycles+2)

    INSTROUT(ORDER + 8, OPD, 3, MCYCLES + 2);

    //  1638           %finish

  L_022D:;

  //  1639           fault("Invalid index register") %unless reg fault=0

    if (REGFAULT == 0) goto L_022E;
    FAULT(_imp_str_literal_size(63, "Invalid index register"));
  L_022E:;

  //  1640        %finish

  L_0228:;

  //  1641        fault("Cannot evaluate operand") %unless i=0

    if (I == 0) goto L_022F;
    FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
  L_022F:;

  //  1642     %finish

  L_0221:;

  //  1643  %end

    return;
  } /* end of OPERAND */

  //  1644  !-----------------------------------------------------------------------
  //  1645  %routine store(%byte %integer reg, nreg, order, mcycles)

  void STORE(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES) {
    //  1646     %integer i, opd, reg fault

    int I;
    int OPD;
    int REGFAULT;

    //  1647
    //  1648     %if acc(reg) %or indexed(reg) %start

    if (ACC(REG)) goto L_0230;
    if (!(INDEXED(REG))) goto L_0231;
  L_0230:;

  //  1649        instr out(order+16_10, 0, 2, mcycles+1)

    INSTROUT(ORDER + 16, 0, 2, MCYCLES + 1);

    //  1650     %finish %else %if acc(nreg) %or indexed(nreg) %start

    goto L_0232;
  L_0231:;
    if (ACC(NREG)) goto L_0233;
    if (!(INDEXED(NREG))) goto L_0234;
  L_0233:;

  //  1651        instr out(order+16_10, 0, 2, mcycles+1)

    INSTROUT(ORDER + 16, 0, 2, MCYCLES + 1);

    //  1652        fault("Invalid index register")

    FAULT(_imp_str_literal_size(63, "Invalid index register"));

    //  1653     %else

    goto L_0232;
  L_0234:;

  //  1654        i = get opd(opd)

    I = GETOPD(/*?*/ &OPD);

    //  1655        %if indexed(reg) %start

    if (!(INDEXED(REG))) goto L_0235;

      //  1656           instr out(order+16_10, opd, 2, mcycles+1)

    INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 1);

    //  1657           %unless i#0 %or 0<=opd<=255 %start

    if (I != 0) goto L_0236;
    {
// Double-sided test on OPD (Part I)
      int tmp;
      if (0 > (tmp = OPD)) goto L_0237;
// Double-sided test on OPD (Part II)
      if (tmp <= 255) goto L_0236;
    }
  L_0237:;

  //  1658              fault("Invalid page zero address")

    FAULT(_imp_str_literal_size(63, "Invalid page zero address"));

    //  1659           %finish

  L_0236:;

  //  1660        %else

    goto L_0238;
  L_0235:;

  //  1661           %if indexed(nreg) %start

    if (!(INDEXED(NREG))) goto L_0239;

      //  1662              reg fault = 1

    REGFAULT = 1;

    //  1663           %else

    goto L_023A;
  L_0239:;

  //  1664              reg fault = 0

    REGFAULT = 0;

    //  1665           %finish

  L_023A:;

  //  1666           %if i#0 %or 0<=opd<=255 %start

    if (I != 0) goto L_023B;
    {
// Double-sided test on OPD (Part I)
      int tmp;
      if (0 > (tmp = OPD)) goto L_023C;
// Double-sided test on OPD (Part II)
      if (tmp > 255) goto L_023C;
    }
  L_023B:;

  //  1667              instr out(order, opd, 2, mcycles)

    INSTROUT(ORDER, OPD, 2, MCYCLES);

    //  1668           %else

    goto L_023D;
  L_023C:;

  //  1669              instr out(order+8, opd, 3, mcycles+1)

    INSTROUT(ORDER + 8, OPD, 3, MCYCLES + 1);

    //  1670           %finish

  L_023D:;

  //  1671           fault("Invalid index register") %unless reg fault=0

    if (REGFAULT == 0) goto L_023E;
    FAULT(_imp_str_literal_size(63, "Invalid index register"));
  L_023E:;

  //  1672        %finish

  L_0238:;

  //  1673        fault("Cannot evaluate operand") %unless i=0

    if (I == 0) goto L_023F;
    FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
  L_023F:;

  //  1674     %finish

  L_0232:;

  //  1675  %end

    return;
  } /* end of STORE */

  //  1676  !-----------------------------------------------------------------------
  //  1677  %routine dump block

  void DUMPBLOCK(void) {
    //  1678     %integer checksum, old rad, i

    int CHECKSUM;
    int OLDRAD;
    int I;

    //  1679
    //  1680     select output(1)

    _imp_SELECTOUTPUT(1);

    //  1681     old rad = drad

    OLDRAD = DRAD;

    //  1682     drad = 8

    DRAD = 8;

    //  1683     print string("S1")

    _imp_PRINTSTRING(_imp_str_literal("S1"));

    //  1684     print number(bp+3, 1)

    PRINTNUMBER(BP + 3, 1);

    //  1685     print number(buffer ca, 2)

    PRINTNUMBER(BUFFERCA, 2);

    //  1686     checksum = ((buffer ca>>8)&255)+(buffer ca&255)+bp+3

    CHECKSUM = ((unsigned int)BUFFERCA >> 8 & 255) + (BUFFERCA & 255) + BP + 3;

    //  1687     %for i = 1, 1, bp %cycle

    // %for I = 1, 1, BP %cycle
    {
      int _final = BP;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, BP");
      I = 0;
    L_0240:
      if (I == _final) goto L_0241;
      I += 1;

      //  1688        checksum = check sum+buffer(i)

      CHECKSUM = CHECKSUM + BUFFER[I - 1];

      //  1689        print number(buffer(i), 1)

      PRINTNUMBER(BUFFER[I - 1], 1);

      //  1690     %repeat

      goto L_0240;
    }

  L_0241:;

  //  1691     print number(\(checksum&255), 1)

    PRINTNUMBER(~(CHECKSUM & 255), 1);

    //  1692     print symbol(13)

    _imp_PRINTSYMBOL(13);

    //  1693     new line

    _imp_NEWLINE();

    //  1694     drad = old rad

    DRAD = OLDRAD;

    //  1695     select output(2)

    _imp_SELECTOUTPUT(2);

    //  1696     bp = 0

    BP = 0;

    //  1697  %end

    return;
  } /* end of DUMPBLOCK */

  //  1698  !--------------------------------------------------------------------------
  //  1699  %routine dump(%byte %integer byte)

  void DUMP(unsigned char BYTE) {
    //  1700     %if ostarted=0 %start

    if (OSTARTED != 0) goto L_0243;

      //  1701        select output(1)

    _imp_SELECTOUTPUT(1);

    //  1702        print symbol(13)

    _imp_PRINTSYMBOL(13);

    //  1703        new line

    _imp_NEWLINE();

    //  1704        print string("S00600004844521B")

    _imp_PRINTSTRING(_imp_str_literal("S00600004844521B"));

    //  1705        print symbol(13)

    _imp_PRINTSYMBOL(13);

    //  1706        new line

    _imp_NEWLINE();

    //  1707        select output(2)

    _imp_SELECTOUTPUT(2);

    //  1708        ostarted = 1

    OSTARTED = 1;

    //  1709     %finish

  L_0243:;

  //  1710     buffer ca = ca %if bp=0

    if (BP != 0) goto L_0244;
    BUFFERCA = CA;
  L_0244:;

  //  1711     dump block %and buffer ca = ca %unless buffer ca+bp=ca

    if (BUFFERCA + BP == CA) goto L_0245;
    DUMPBLOCK();
    BUFFERCA = CA;
  L_0245:;

  //  1712     bp = bp+1

    BP = BP + 1;

    //  1713     buffer(bp) = byte

    BUFFER[BP - 1] = BYTE;

    //  1714     ca = ca+1

    CA = CA + 1;

    //  1715     dump block %if bp=16

    if (BP != 16) goto L_0246;
    DUMPBLOCK();
  L_0246:;

  //  1716  %end

    return;
  } /* end of DUMP */

  //  1717  !---------------------------------------------------------------------------
  //  1718  %routine close

  void CLOSE(void) {
    //  1719     %unless ostarted=0 %start

    if (OSTARTED == 0) goto L_0247;

      //  1720        dump block %unless bp=0

    if (BP == 0) goto L_0248;
    DUMPBLOCK();
  L_0248:;

  //  1721        select output(1)

    _imp_SELECTOUTPUT(1);

    //  1722        print string("S9030000FC")

    _imp_PRINTSTRING(_imp_str_literal("S9030000FC"));

    //  1723        print symbol(13)

    _imp_PRINTSYMBOL(13);

    //  1724        new line

    _imp_NEWLINE();

    //  1725        select output(2)

    _imp_SELECTOUTPUT(2);

    //  1726     %finish

  L_0247:;

  //  1727  %end

    return;
  } /* end of CLOSE */

  //  1728  !-----------------------------------------------------------------------
  //  1729  %routine instr out(%integer op, opd, b, cyc)

  void INSTROUT(int OP, int OPD, int B, int CYC) {
    //  1730     %integer i, j, k, lit

    int I;
    int J;
    int K;
    int LIT;

    //  1731
    //  1732     i = 1

    I = 1;

    //  1733     %unless lflag=0 %or ((gflag=0 %or lflag=1) %and cont=1) %start

    if (LFLAG == 0) goto L_0249;
    if (GFLAG == 0) goto L_024A;
    if (LFLAG != 1) goto L_0242;
  L_024A:;
    if (CONT == 1) goto L_0249;
  L_0242:;

  //  1734        write(ln, 5)

    _imp_WRITE(LN, 5);

    //  1735        space %unless wflag=0

    if (WFLAG == 0) goto L_024B;
    _imp_SPACE();
  L_024B:;

  //  1736        %if lflag=2 %start

    if (LFLAG != 2) goto L_024C;

      //  1737           space

    _imp_SPACE();

    //  1738           %if b<=-3 %start

    if (B > -3) goto L_024D;

      //  1739              spaces(sp2)

    _imp_SPACES(SP2);

    //  1740           %else

    goto L_024E;
  L_024D:;

  //  1741              print number(ca, 2)

    PRINTNUMBER(CA, 2);

    //  1742           %finish

  L_024E:;

  //  1743           space

    _imp_SPACE();

    //  1744           %if b=-3 %start

    if (B != -3) goto L_024F;

      //  1745              print number(opd, 2)

    PRINTNUMBER(OPD, 2);

    //  1746              spaces(sp1+1)

    _imp_SPACES(SP1 + 1);

    //  1747           %finish %else %if -2<=b<=-1 %start

    goto L_0250;
  L_024F:;
    {
// Double-sided test on B (Part I)
      int tmp;
      if (-2 > (tmp = B)) goto L_0251;
// Double-sided test on B (Part II)
      if (tmp > -1) goto L_0251;
    }

    //  1748              back number(opd)

    BACKNUMBER(OPD);

    //  1749              spaces(sp1+1)

    _imp_SPACES(SP1 + 1);

    //  1750           %else

    goto L_0250;
  L_0251:;

  //  1751              %if b<=0 %start

    if (B > 0) goto L_0252;

      //  1752                 spaces(sp1)

    _imp_SPACES(SP1);

    //  1753              %else

    goto L_0253;
  L_0252:;

  //  1754                 print number(op, 1)

    PRINTNUMBER(OP, 1);

    //  1755              %finish

  L_0253:;

  //  1756              space

    _imp_SPACE();

    //  1757              %if b<=1 %start

    if (B > 1) goto L_0254;

      //  1758                 spaces(sp2)

    _imp_SPACES(SP2);

    //  1759              %finish %else %if b=2 %start

    goto L_0255;
  L_0254:;
    if (B != 2) goto L_0256;

      //  1760                 print number(opd, 1)

    PRINTNUMBER(OPD, 1);

    //  1761                 spaces(sp2-sp1)

    _imp_SPACES(SP2 - SP1);

    //  1762              %else

    goto L_0255;
  L_0256:;

  //  1763                 back number(opd)

    BACKNUMBER(OPD);

    //  1764              %finish

  L_0255:;

  //  1765           %finish

  L_0250:;

  //  1766           %unless cflag=0 %start

    if (CFLAG == 0) goto L_0257;

      //  1767              %if cyc=0 %start

    if (CYC != 0) goto L_0258;

      //  1768                 spaces(2)

    _imp_SPACES(2);

    //  1769              %else

    goto L_0259;
  L_0258:;

  //  1770                 write(cyc, 1)

    _imp_WRITE(CYC, 1);

    //  1771              %finish

  L_0259:;

  //  1772           %finish

  L_0257:;

  //  1773        %finish

  L_024C:;

  //  1774        %if cont=0 %start

    if (CONT != 0) goto L_025A;

      //  1775           space

    _imp_SPACE();

    //  1776           %if tflag=0 %start

    if (TFLAG != 0) goto L_025B;

      //  1777              %cycle

  L_025C:;

  //  1778                 out symbol(line(i))

    OUTSYMBOL(LINE[I - 1]);

    //  1779                 %exit %if line(i)&127=nl %or line(i)&127=12

    if (LINE[I - 1] & 127 == 10) goto L_025D;
    if (LINE[I - 1] & 127 != 12) goto L_025E;
  L_025D:;
    goto L_025F;
  L_025E:;

  //  1780                 i = i+1

    I = I + 1;

    //  1781              %repeat

    goto L_025C;
  L_025F:;

  //  1782           %else

    goto L_0260;
  L_025B:;

  //  1783              j = 1

    J = 1;

    //  1784              out tag(i, j, 8)

    OUTTAG(/*?*/ &I, /*?*/ &J, 8);

    //  1785              out tag(i, j, 12)

    OUTTAG(/*?*/ &I, /*?*/ &J, 12);

    //  1786              lit = 0

    LIT = 0;

    //  1787              k = 0

    K = 0;

    //  1788              %while i#lp %cycle

  L_0261:;
    if (I == LP) goto L_0262;

      //  1789                 %if line(i)&127=' ' %start

    if (LINE[I - 1] & 127 != 32) goto L_0263;

      //  1790                    k = k+1 %if non dense=1 %and lit=0

    if (NONDENSE != 1) goto L_0264;
    if (LIT != 0) goto L_0264;
    K = K + 1;
  L_0264:;

  //  1791                 %else

    goto L_0265;
  L_0263:;

  //  1792                    j = j+k+1

    J = J + K + 1;

    //  1793                    out symbol(' ') %and k = k-1 %while k>0

  L_0266:;
    if (K <= 0) goto L_0267;
    OUTSYMBOL(32);
    K = K - 1;
    goto L_0266;
  L_0267:;

  //  1794                    out symbol(line(i))

    OUTSYMBOL(LINE[I - 1]);

    //  1795                 %finish

  L_0265:;

  //  1796                 %if line(i)&127='''' %start

    if (LINE[I - 1] & 127 != 39) goto L_0268;

      //  1797                    lit = 1

    LIT = 1;

    //  1798                 %else

    goto L_0269;
  L_0268:;

  //  1799                    lit = 0

    LIT = 0;

    //  1800                 %finish

  L_0269:;

  //  1801                 i = i+1

    I = I + 1;

    //  1802              %repeat

    goto L_0261;
  L_0262:;

  //  1803              i = i+1 %while line(i)&127=' '

  L_026A:;
    if (LINE[I - 1] & 127 != 32) goto L_026B;
    I = I + 1;
    goto L_026A;
  L_026B:;

  //  1804              %unless lp=1 %or line(i)&127=nl %or line(i)&127=12 %start

    if (LP == 1) goto L_026C;
    if (LINE[I - 1] & 127 == 10) goto L_026C;
    if (LINE[I - 1] & 127 == 12) goto L_026C;

      //  1805                 out symbol(' ') %and j = j+1 %until j>=24

  L_026D:;
    OUTSYMBOL(32);
    J = J + 1;
    if (J >= 24) goto L_026E;
    goto L_026D;
  L_026E:;

  //  1806              %finish

  L_026C:;

  //  1807              %cycle

  L_026F:;

  //  1808                 out symbol(line(i))

    OUTSYMBOL(LINE[I - 1]);

    //  1809                 %exit %if line(i)&127=nl %or line(i)&127=12

    if (LINE[I - 1] & 127 == 10) goto L_0270;
    if (LINE[I - 1] & 127 != 12) goto L_0271;
  L_0270:;
    goto L_0272;
  L_0271:;

  //  1810                 i = i+1

    I = I + 1;

    //  1811              %repeat

    goto L_026F;
  L_0272:;

  //  1812           %finish

  L_0260:;

  //  1813        %else

    goto L_0273;
  L_025A:;

  //  1814           nline(1)

    NLINE(1);

    //  1815        %finish

  L_0273:;

  //  1816     %else

    goto L_0274;
  L_0249:;

  //  1817        i = i+1 %while line(i)&127#nl %and line(i)&127#12

  L_0275:;
    if (LINE[I - 1] & 127 == 10) goto L_0276;
    if (LINE[I - 1] & 127 == 12) goto L_0276;
    I = I + 1;
    goto L_0275;
  L_0276:;

  //  1818     %finish

  L_0274:;

  //  1819     fault("Truncated line") %if i=max line+1

    if (I != 512 + 1) goto L_0277;
    FAULT(_imp_str_literal_size(63, "Truncated line"));
  L_0277:;

  //  1820
  //  1821     %if b>=1 %start

    if (B < 1) goto L_0278;

      //  1822        dump(op&255)

    DUMP(OP & 255);

    //  1823        %unless b=1 %start

    if (B == 1) goto L_0279;

      //  1824           dump(opd&255)

    DUMP(OPD & 255);

    //  1825           dump((opd>>8)&255) %if b=3

    if (B != 3) goto L_027A;
    DUMP((unsigned int)OPD >> 8 & 255);
  L_027A:;

  //  1826        %finish

  L_0279:;

  //  1827     %finish %else %if b=-2 %start

    goto L_027B;
  L_0278:;
    if (B != -2) goto L_027C;

      //  1828        dump(opd&255)

    DUMP(OPD & 255);

    //  1829        dump((opd>>8)&255)

    DUMP((unsigned int)OPD >> 8 & 255);

    //  1830     %finish

  L_027C:;
  L_027B:;

  //  1831  %end

    return;
  } /* end of INSTROUT */

  //  1832  !-----------------------------------------------------------------------
  //  1833  %routine out tag(%integer %name i, j, %integer col)

  void OUTTAG(int *I, int *J, int COL) {
    //  1834
    //  1835     %while line(i)&127#' ' %and i#lp %cycle

  L_027D:;
    if (LINE[*I - 1] & 127 == 32) goto L_027E;
    if (*I == LP) goto L_027E;

      //  1836        out symbol(line(i))

    OUTSYMBOL(LINE[*I - 1]);

    //  1837        i = i+1

    *I = *I + 1;

    //  1838        j = j+1

    *J = *J + 1;

    //  1839     %repeat

    goto L_027D;
  L_027E:;

  //  1840     i = i+1 %while line(i)&127=' ' %and i#lp

  L_027F:;
    if (LINE[*I - 1] & 127 != 32) goto L_0280;
    if (*I == LP) goto L_0280;
    *I = *I + 1;
    goto L_027F;
  L_0280:;

  //  1841     %unless i=lp %start

    if (*I == LP) goto L_0281;

      //  1842        out symbol(' ') %and j = j+1 %until j>=col

  L_0282:;
    OUTSYMBOL(32);
    *J = *J + 1;
    if (*J >= COL) goto L_0283;
    goto L_0282;
  L_0283:;

  //  1843     %finish

  L_0281:;

  //  1844  %end

    return;
  } /* end of OUTTAG */

  //  1845  !------------------------------------------------------------------------
  //  1846  %routine out symbol(%byte %integer char)

  void OUTSYMBOL(unsigned char CHAR) {
    //  1847     %own %integer optr = 0

    static int OPTR = 0;

    //  1848
    //  1849     %if char&127=nl %start

    if (CHAR & 127 != 10) goto L_0284;

      //  1850        optr = 0

    OPTR = 0;

    //  1851        nline(1)

    NLINE(1);

    //  1852     %finish %else %if char&127=12 %start

    goto L_0285;
  L_0284:;
    if (CHAR & 127 != 12) goto L_0286;

      //  1853        optr = 0

    OPTR = 0;

    //  1854        nline(lines on page)

    NLINE(66);

    //  1855     %else

    goto L_0285;
  L_0286:;

  //  1856        %if optr=sp3 %start

    if (OPTR != SP3) goto L_0287;

      //  1857           %return %if wflag=0

    if (WFLAG != 0) goto L_0288;
    return;
  L_0288:;

  //  1858           nline(1)

    NLINE(1);

    //  1859           write(ln, 5)

    _imp_WRITE(LN, 5);

    //  1860           print symbol('+')

    _imp_PRINTSYMBOL(43);

    //  1861           spaces(line width-sp3-7)

    _imp_SPACES(78 - SP3 - 7);

    //  1862           optr = 0

    OPTR = 0;

    //  1863        %finish

  L_0287:;

  //  1864        print symbol(char)

    _imp_PRINTSYMBOL(CHAR);

    //  1865        optr = optr+1

    OPTR = OPTR + 1;

    //  1866     %finish

  L_0285:;

  //  1867  %end

    return;
  } /* end of OUTSYMBOL */

  //  1868  !-----------------------------------------------------------------------
  //  1869  %routine fault(%string(63) s)

  void FAULT(_imp_string63 S) {
    //  1870
    //  1871     faults=faults+1

    FAULTS = FAULTS + 1;

    //  1872     %unless eflag=0 %start

    if (EFLAG == 0) goto L_0289;

      //  1873        print string("****  ".s.".  ****")

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string255) tmp = *({
            _imp_string255 tmp =
                _imp_join((_imp_string *)/*?*/ &*({
                            _imp_string255 tmp =
                                _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("****  "), (_imp_string *)/*?*/ &S);
                            (_imp_string255 *)&tmp;
                          }),
                          (_imp_string *)/*?*/ _imp_str_literal_ptr(".  ****"));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1874        nline(1)

    NLINE(1);

    //  1875     %finish

  L_0289:;

  //  1876  %end

    return;
  } /* end of FAULT */

  //  1877  !-----------------------------------------------------------------------
  //  1878  %routine nline(%integer n)

  void NLINE(int N) {
    //  1879     %own %integer line on page = lines on page+1, page no = 0

    static int LINEONPAGE = 67;
    static int PAGENO = 0;

    //  1880
    //  1881     %unless n<0 %start

    if (N < 0) goto L_028A;

      //  1882        %if line on page+pflag+n>lines on page %start

    if (LINEONPAGE + PFLAG + N <= 66) goto L_028B;

      //  1883           page no = page no+1

    PAGENO = PAGENO + 1;

    //  1884           %unless n=0 %start

    if (N == 0) goto L_028C;

      //  1885              %if line on page=lines on page %start

    if (LINEONPAGE != 66) goto L_028D;

      //  1886                 new line

    _imp_NEWLINE();

    //  1887              %else

    goto L_028E;
  L_028D:;

  //  1888                 print symbol(12)

    _imp_PRINTSYMBOL(12);

    //  1889              %finish

  L_028E:;

  //  1890           %finish

  L_028C:;

  //  1891           %if pflag=0 %start

    if (PFLAG != 0) goto L_028F;

      //  1892              line on page = 1

    LINEONPAGE = 1;

    //  1893           %else

    goto L_0290;
  L_028F:;

  //  1894              new line

    _imp_NEWLINE();

    //  1895              print string("  MOS Technology MCS650X Assembler ")

    _imp_PRINTSTRING(_imp_str_literal("  MOS Technology MCS650X Assembler "));

    //  1896              spaces((line width-45-length(header))//2)

    _imp_SPACES(((long)(78 - 45 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &HEADER)) / (long)2));

    //  1897              print string(header)

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string33) tmp = HEADER /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1898              spaces((line width-44-length(header))//2)

    _imp_SPACES(((long)(78 - 44 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &HEADER)) / (long)2));

    //  1899              print string(" Page")

    _imp_PRINTSTRING(_imp_str_literal(" Page"));

    //  1900              write(page no, 2)

    _imp_WRITE(PAGENO, 2);

    //  1901              new lines(2)

    _imp_NEWLINES(2);

    //  1902              line on page = 4

    LINEONPAGE = 4;

    //  1903           %finish

  L_0290:;

  //  1904        %else

    goto L_0291;
  L_028B:;

  //  1905           new lines(n)

    _imp_NEWLINES(N);

    //  1906           line on page = line on page+n

    LINEONPAGE = LINEONPAGE + N;

    //  1907        %finish

  L_0291:;

  //  1908     %finish

  L_028A:;

  //  1909  %end

    return;
  } /* end of NLINE */

  //  1910  !-----------------------------------------------------------------------
  //  1911  %routine back number(%integer n)

  void BACKNUMBER(int N) {
    //  1912
    //  1913     print number(((n&255)<<8)!((n>>8)&255), 2)

    PRINTNUMBER((N & 255) << 8 | (unsigned int)N >> 8 & 255, 2);

    //  1914  %end

    return;
  } /* end of BACKNUMBER */

  //  1915  !-----------------------------------------------------------------------
  //  1916  %routine print number(%integer n,d)

  void PRINTNUMBER(int N, int D) {
    //  1917     %conststring(1)%array h(0:15)="0","1","2","3","4","5","6","7","8","9",

    const _imp_string1 H[16] = {_imp_str_init("0"), _imp_str_init("1"), _imp_str_init("2"), _imp_str_init("3"),
                                _imp_str_init("4"), _imp_str_init("5"), _imp_str_init("6"), _imp_str_init("7"),
                                _imp_str_init("8"), _imp_str_init("9"), _imp_str_init("A"), _imp_str_init("B"),
                                _imp_str_init("C"), _imp_str_init("D"), _imp_str_init("E"), _imp_str_init("F")};

    //  1918+      "A","B","C","D","E","F"
    //  1919     %integer model, nn

    int MODEL;
    int NN;

    //  1920     %string(6) s

    _imp_string6 S;

    //  1921
    //  1922     model = 1<<(d*8-1)

    MODEL = 1 << D * 8 - 1;

    //  1923     s=""

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("");
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1924     %cycle

  L_0292:;

  //  1925        model =(model>>1)//drad

    MODEL = ((long)((unsigned int)MODEL >> 1) / (long)DRAD);

    //  1926        nn = (n>>1)//drad

    NN = ((long)((unsigned int)N >> 1) / (long)DRAD);

    //  1927        s=h(n-((nn*drad)<<1)).s

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp =
                         _imp_join((_imp_string *)/*?*/ &H[N - (NN * DRAD << 1)], (_imp_string *)/*?*/ &S);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1928        n = nn

    N = NN;

    //  1929     %repeat %until model=0

    if (MODEL == 0) goto L_0293;
    goto L_0292;
  L_0293:;

  //  1930     print string(s)

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string6) tmp = S /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1931  %end

    return;
  } /* end of PRINTNUMBER */

  //  1932  !-----------------------------------------------------------------------
  //  1933  %routine sqs(%integer l, r)

  void SQS(int L, int R) {
    //  1934     %integer nass key, nval key, xhead key, lp, rp, i

    int NASSKEY;
    int NVALKEY;
    int XHEADKEY;
    int LP;
    int RP;
    int I;

    //  1935     %string(6) name key

    _imp_string6 NAMEKEY;

    //  1936
    //  1937     %return %unless l<r

    if (L < R) goto L_0294;
    return;
  L_0294:;

  //  1938     %while r-l>insert limit %cycle

  L_0295:;
    if (R - L <= 10) goto L_0296;

      //  1939        lp = l

    LP = L;

    //  1940        rp = r+1

    RP = R + 1;

    //  1941        name key = name(l)

    _imp_strncpy(/*?*/ &NAMEKEY, ({
                   __typeof__(_imp_string6) tmp; /*B*/
                   tmp = NAME[L - 1];
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1942        nass key = nass(l)

    NASSKEY = NASS[L - 1];

    //  1943        nval key = nval(l)

    NVALKEY = NVAL[L - 1];

    //  1944        xhead key = xhead(l)

    XHEADKEY = XHEAD[L - 1];

    //  1945        %cycle

  L_0297:;

  //  1946           rp = rp-1 %until rp=lp %or name key>name(rp)

  L_0298:;
    RP = RP - 1;
    if (RP == LP) goto L_0299;

    if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[RP - 1]) > 0) goto L_0299;

    goto L_0298;
  L_0299:;

  //  1947           %exit %if lp=rp

    if (LP != RP) goto L_029A;
    goto L_029B;
  L_029A:;

  //  1948           name(lp) = name(rp)

    _imp_strncpy(/*?*/ &NAME[LP - 1], ({
                   __typeof__(_imp_string6) tmp; /*B*/
                   tmp = NAME[RP - 1];
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1949           nass(lp) = nass(rp)

    NASS[LP - 1] = NASS[RP - 1];

    //  1950           nval(lp) = nval(rp)

    NVAL[LP - 1] = NVAL[RP - 1];

    //  1951           xhead(lp) = xhead(rp)

    XHEAD[LP - 1] = XHEAD[RP - 1];

    //  1952           lp = lp+1 %until rp=lp %or name key<=name(lp)

  L_029C:;
    LP = LP + 1;
    if (RP == LP) goto L_029D;

    if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[LP - 1]) <= 0) goto L_029D;

    goto L_029C;
  L_029D:;

  //  1953           %exit %if lp=rp

    if (LP != RP) goto L_029E;
    goto L_029B;
  L_029E:;

  //  1954           name(rp) = name(lp)

    _imp_strncpy(/*?*/ &NAME[RP - 1], ({
                   __typeof__(_imp_string6) tmp; /*B*/
                   tmp = NAME[LP - 1];
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1955           nass(rp) = nass(lp)

    NASS[RP - 1] = NASS[LP - 1];

    //  1956           nval(rp) = nval(lp)

    NVAL[RP - 1] = NVAL[LP - 1];

    //  1957           xhead(rp) = xhead(lp)

    XHEAD[RP - 1] = XHEAD[LP - 1];

    //  1958        %repeat

    goto L_0297;
  L_029B:;

  //  1959        name(lp) = name key

    _imp_strncpy(/*?*/ &NAME[LP - 1], ({
                   __typeof__(_imp_string6) tmp; /*B*/
                   tmp = NAMEKEY;
                   (void *)&tmp;
                 }),
                 /*max:*/ 6);

    //  1960        nass(lp) = nass key

    NASS[LP - 1] = NASSKEY;

    //  1961        nval(lp) = nval key

    NVAL[LP - 1] = NVALKEY;

    //  1962        xhead(lp) = xhead key

    XHEAD[LP - 1] = XHEADKEY;

    //  1963        %if lp-l>r-rp %start

    if (LP - L <= R - RP) goto L_029F;

      //  1964           sqs(rp+1, r)

    SQS(RP + 1, R);

    //  1965           r = lp-1

    R = LP - 1;

    //  1966        %else

    goto L_02A0;
  L_029F:;

  //  1967           sqs(l, lp-1)

    SQS(L, LP - 1);

    //  1968           l = rp+1

    L = RP + 1;

    //  1969        %finish

  L_02A0:;

  //  1970     %repeat

    goto L_0295;
  L_0296:;

  //  1971     %for rp = l+1, 1, r %cycle

  // %for RP = L + 1, 1, R %cycle
    {
      int _initial = L + 1, _final = R;
      if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle RP = L + 1, 1, R");
      RP = _initial - (1);
    L_02A1:
      if (RP == _final) goto L_02A2;
      RP += 1;

      //  1972        name key = name(rp)

      _imp_strncpy(/*?*/ &NAMEKEY, ({
                     __typeof__(_imp_string6) tmp; /*B*/
                     tmp = NAME[RP - 1];
                     (void *)&tmp;
                   }),
                   /*max:*/ 6);

      //  1973        nass key = nass(rp)

      NASSKEY = NASS[RP - 1];

      //  1974        nval key = nval(rp)

      NVALKEY = NVAL[RP - 1];

      //  1975        xhead key = xhead(rp)

      XHEADKEY = XHEAD[RP - 1];

      //  1976        lp = l

      LP = L;

      //  1977        lp = lp+1 %while lp#rp %and name key>name(lp)

    L_02A4:;
      if (LP == RP) goto L_02A5;

      if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[LP - 1]) <= 0) goto L_02A5;

      LP = LP + 1;
      goto L_02A4;
    L_02A5:;

    //  1978        %for i = rp-1, -1, lp %cycle

    // %for I = RP - 1,  -1, LP %cycle
      {
        int _initial = RP - 1, _final = LP;
        if (invalid_for_loop(_initial, -1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = RP - 1,  -1, LP");
        I = _initial - (-1);
      L_02A6:
        if (I == _final) goto L_02A7;
        I -= 1;

        //  1979           name(i+1) = name(i)

        _imp_strncpy(/*?*/ &NAME[I + 1 - 1], ({
                       __typeof__(_imp_string6) tmp; /*B*/
                       tmp = NAME[I - 1];
                       (void *)&tmp;
                     }),
                     /*max:*/ 6);

        //  1980           nass(i+1) = nass(i)

        NASS[I + 1 - 1] = NASS[I - 1];

        //  1981           nval(i+1) = nval(i)

        NVAL[I + 1 - 1] = NVAL[I - 1];

        //  1982           xhead(i+1) = xhead(i)

        XHEAD[I + 1 - 1] = XHEAD[I - 1];

        //  1983        %repeat

        goto L_02A6;
      }

    L_02A7:;

    //  1984        name(lp) = name key

      _imp_strncpy(/*?*/ &NAME[LP - 1], ({
                     __typeof__(_imp_string6) tmp; /*B*/
                     tmp = NAMEKEY;
                     (void *)&tmp;
                   }),
                   /*max:*/ 6);

      //  1985        nass(lp) = nass key

      NASS[LP - 1] = NASSKEY;

      //  1986        nval(lp) = nval key

      NVAL[LP - 1] = NVALKEY;

      //  1987        xhead(lp) = xhead key

      XHEAD[LP - 1] = XHEADKEY;

      //  1988     %repeat

      goto L_02A1;
    }

  L_02A2:;

  //  1989  %end

    return;
  } /* end of SQS */

  //  1990  !-----------------------------------------------------------------------
  //  1991  %end %of %program

  _imp_stop(0);
  return 0;

case_OPTIONACTION_dispatch:
  if (OPTIONACTION_index < -1 || OPTIONACTION_index > 51)
    _imp_signalf(6, 3, OPTIONACTION_index, "->OPTIONACTION(%d) out of bounds at %s line %d", OPTIONACTION_index,
                 OPTIONACTION_file, OPTIONACTION_line);
  goto *OPTIONACTION[OPTIONACTION_index - -1];

case_ITYPE1_dispatch:
  if (ITYPE1_index < 1 || ITYPE1_index > 25)
    _imp_signalf(6, 3, ITYPE1_index, "->ITYPE1(%d) out of bounds at %s line %d", ITYPE1_index, ITYPE1_file,
                 ITYPE1_line);
  goto *ITYPE1[ITYPE1_index - 1];

case_ITYPE2_dispatch:
  if (ITYPE2_index < 1 || ITYPE2_index > 25)
    _imp_signalf(6, 3, ITYPE2_index, "->ITYPE2(%d) out of bounds at %s line %d", ITYPE2_index, ITYPE2_file,
                 ITYPE2_line);
  goto *ITYPE2[ITYPE2_index - 1];
end_0:;
}