#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %BEGIN;                               !HAL-70

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

  //     2  !    INPUT/OUTPUT STREAMS
  //     3  %OWNINTEGER MAIN=1, PRE=2;            !INPUT

  static int MAIN = 1;
  static int PRE = 2;

  //     4  %OWNINTEGER BIN=1, LIS=2;             !OUTPUT

  static int BIN = 1;
  static int LIS = 2;

  //     5  !    OPERAND TYPES
  //     6  %OWNINTEGER OPMASK=16_F000;           !MACHINE INSTRUCTION OR MACRO

  static int OPMASK = 61440;

  //     7  %OWNINTEGER MACRO=16_A000

  static int MACRO = 40960;

  //     8  %OWNINTEGER SINGLE=16_5000

  static int SINGLE = 20480;

  //     9  %OWNINTEGER FMASK=16_0800;            !FORWARD REF

  static int FMASK = 2048;

  //    10  %OWNINTEGER OPFMASK=16_F800;          !=OPMASK+FMASK

  static int OPFMASK = 63488;

  //    11  %OWNINTEGER UMASK=16_0200;            !UNDEF (FORWARD REF)

  static int UMASK = 512;

  //    12  %OWNINTEGER BMASK=16_0100;            !BYTE

  static int BMASK = 256;

  //    13  %OWNINTEGER REG=16_0080;              !REGISTER

  static int REG = 128;

  //    14  %OWNINTEGER MEMMASK=16_0040;          !MEM REF

  static int MEMMASK = 64;

  //    15  %OWNINTEGER RELMASK=16_0020;          !RELOCATABLE

  static int RELMASK = 32;

  //    16  %OWNINTEGER XMASK=16_0010;            !INDEXED

  static int XMASK = 16;

  //    17  %OWNINTEGER REGXMASK=16_0090;         !=REG+XMASK

  static int REGXMASK = 144;

  //    18  %OWNINTEGER RELUXMASK=16_0230;        !=RELMASK+UMASK+XMASK

  static int RELUXMASK = 560;

  //    19  !    TEXT POINTERS (BYTE ADDRESSES)
  //    20  %OWNINTEGER CODEPOS;                  !(NOT ACTUALLY BYTE)

  static int CODEPOS;

  //    21  %OWNINTEGER STARTPOS;                 !START OF CURRENT LINE

  static int STARTPOS;

  //    22  %OWNINTEGER GETPOS;                   !INPUT POINTER (NEXT)

  static int GETPOS;

  //    23  %OWNINTEGER PUTPOS

  static int PUTPOS;

  //    24  %OWNINTEGER PSEUDOLIM

  static int PSEUDOLIM;

  //    25  %OWNINTEGER PRINTPOS;                 !START OF PRINT LINE

  static int PRINTPOS;

  //    26  %OWNINTEGER FAULTPOS

  static int FAULTPOS;

  //    27  %OWNINTEGER MACLIM;                   !MACRO DEF LIMIT

  static int MACLIM;

  //    28  !    OTHER POINTERS (WORD ADDRESSES)
  //    29  %OWNINTEGER MP;                       !MACRO-CALL PARAMETERS

  static int MP;

  //    30  %OWNINTEGER QBASE,QSTART,QLIM,TRANSF; !OPERAND QUEUE

  static int QBASE;
  static int QSTART;
  static int QLIM;
  static int TRANSF;

  //    31  %OWNINTEGER DEFMIN;                   !TAG MIN (DOWN - RESET)

  static int DEFMIN;

  //    32  %OWNINTEGER DEFLIM;                   !TAG LIM (FIXED)

  static int DEFLIM;

  //    33  %OWNINTEGER ALMAX;                    !ASSEMBLER LAB MAX (UP - RESET)

  static int ALMAX;

  //    34  %OWNINTEGER LABMIN;                   !USER LAB MIN (DOWN - RESET)

  static int LABMIN;

  //    35  %OWNINTEGER LABLIM;                   !USER LAB LIM (FIXED)

  static int LABLIM;

  //    36  %OWNINTEGER BP;                       !BLOCK POINTER (UP - DOWN)

  static int BP;

  //    37  %OWNINTEGER NP;                       !NEST POINTER (DOWN - UP)

  static int NP;

  //    38  %OWNINTEGER STORELIM;                 !(FIXED)

  static int STORELIM;

  //    39
  //    40  %INTEGER SYM;                         !CURRENT SYMBOL

  int SYM;

  //    41  %INTEGER TERM;                        !TAG TERMINATOR

  int TERM;

  //    42  %INTEGER FSYM;                        !FAULT FLAG SYMBOL

  int FSYM;

  //    43  %OWNINTEGER CHARS=0;                  !PRINT CHAR COUNT

  static int CHARS = 0;

  //    44  %OWNINTEGER LINES=0;                  !PRINT LINE COUNT

  static int LINES = 0;

  //    45  %OWNINTEGER BINCOUNT=0;               !OUTPUT RECORD ITEM COUNT

  static int BINCOUNT = 0;

  //    46  %OWNINTEGER CHECK=0;                  !OUTPUT RECORD CHECKSUM

  static int CHECK = 0;

  //    47  %OWNINTEGER PASS=-1;                  !CURRENT PASS (-1,0,1)

  static int PASS = -1;

  //    48  %OWNINTEGER LIST=-1;                  !LISTING CONTROL

  static int LIST = -1;

  //    49  %INTEGER ASSCOND,SKIP;                !ASSEMBLY CONDITIONS (BIT NEST)

  int ASSCOND;
  int SKIP;

  //    50  %OWNINTEGER SAVE=1;                   !REG SAVE DISPLACEMENT

  static int SAVE = 1;

  //    51  %OWNINTEGER TEMPS=12;                 !TEMPORARY REGISTER SET (2,3)

  static int TEMPS = 12;

  //    52  %INTEGER LOCTYPE,LOC;                 !LOCATION COUNTER

  int LOCTYPE;
  int LOC;

  //    53  %INTEGER ACC,ATYPE,AVAL;              !MAIN TEMP REGISTER

  int ACC;
  int ATYPE;
  int AVAL;

  //    54  %INTEGER CREG,CTYPE,CVAL;             !CONDITION CODE

  int CREG;
  int CTYPE;
  int CVAL;

  //    55  %INTEGER COND;                        !CONDITION CODE MASK

  int COND;

  //    56  %INTEGER DREG,DUSE;                   !DESTINATION REGISTER

  int DREG;
  int DUSE;

  //    57  %INTEGER TYPE,VAL;                    !CURRENT TYPE,VALUE

  int TYPE;
  int VAL;

  //    58  %INTEGER TAG1,TAG2;                   !TAG (CHARS 1:3, 4:6)

  int TAG1;
  int TAG2;

  //    59  %INTEGER MODE;                        !ASSEMBLY MODE

  int MODE;

  //    60  %INTEGER PEND;                        !TAG ALREADY RECOGNISED

  int PEND;

  //    61  %INTEGER FLAG;                        !JUMPS / AHM

  int FLAG;

  //    62  %OWNINTEGER QQ='?'

  static int QQ = 63;

  //    63
  //    64  %OWNINTEGERARRAY BREC(1:52);          !BINARY OUTPUT RECORD

  static int BREC[52];

  //    65
  //    66  !!%INTEGER SBOUND
  //    67  %constINTEGER SBOUND = 16_7F00
  //    68  !!    SBOUND = FREESTORE-260;           !ALLOW FOR INPUT BUFFER
  //    69  !!    SBOUND = SBOUND-256 %IF OUTDEV = 2
  //    70      SELECT OUTPUT(LIS)

  _imp_SELECTOUTPUT(LIS);

  //    71  !!    SBOUND = SBOUND-256 %IF OUTDEV = 2
  //    72
  //    73  !! Simulate 18-bit word-addressed PDP9/15 memory:
  //    74
  //    75  %ownINTEGERARRAY STORE(1:SBOUND)

  static int STORE[32512];

  //    76
  //    77  %integerfn integer(%integer p)

  int INTEGER(int P) {
    //    78      %if p&1 # 0 %start

    if (P & 1 == 0) goto L_0001;

      //    79        printstring("Integer fetch was not aligned at "); write(p, -1); newline

    _imp_PRINTSTRING(_imp_str_literal("Integer fetch was not aligned at "));
    _imp_WRITE(P, -1);
    _imp_NEWLINE();

    //    80        %stop

    _imp_stop(0);

    //    81      %finish

  L_0001:;

  //    82      %result = store(P>>1)

    return STORE[((unsigned int)P >> 1) - 1];

    //    83  %end

  } /* end of INTEGER */

  //    84
  //    85  %INTEGERFN CHAR(%INTEGER P)

  int CHAR(int P) {
    //    86  !BYTE FETCH
    //    87
    //    88      %integer val = store(p>>1)

    int VAL;
    VAL = STORE[((unsigned int)P >> 1) - 1];

    //    89      %if p&1 = 0 %start

    if (P & 1 != 0) goto L_0002;

      //    90        %result = val&255

    return VAL & 255;

    //    91      %else

  L_0002:;

  //    92        %result = (val>>8)&255

    return (unsigned int)VAL >> 8 & 255;

    //    93      %finish
    //    94
    //    95  !!    %OPR 2064;!RCR;  %DAC P
    //    96  !!    %LAC* P;  %OPR 768;!SZL;  %JMP L1
    //    97  !!    %OPR 1040;!RTR;  %OPR 1040
    //    98  !!    %OPR 1040;  %OPR 1040
    //    99  !!L1: %AND #255;  %JMP* CHAR
    //   100  !!    %STOP
    //   101
    //   102  %END

  } /* end of CHAR */

  //   103
  //   104  %routine set integer(%integer p, k)

  void SETINTEGER(int P, int K) {
    //   105      store(p>>1) = k

    STORE[((unsigned int)P >> 1) - 1] = K;

    //   106  %end

    return;
  } /* end of SETINTEGER */

  //   107
  //   108  %ROUTINE PUT CHAR(%INTEGER K)

  void PUTCHAR(int K) {
    //   109  !AT PUTPOS WITH POST-INCREMENT
    //   110  %INTEGER P

    int P;

    //   111  !!    %MONITOR 21 %IF PUTPOS>>1-DEFMIN >= 0
    //   112  !{}    %signal 2,1 %IF PUTPOS>>1-DEFMIN >= 0
    //   113
    //   114      p = store(putpos>>1)

    P = STORE[((unsigned int)PUTPOS >> 1) - 1];

    //   115      %if putpos&1 = 0 %start

    if (PUTPOS & 1 != 0) goto L_0003;

      //   116        p = (p&16_FF00) ! (K&255)

    P = P & 65280 | K & 255;

    //   117      %else

    goto L_0004;
  L_0003:;

  //   118        p = (p&16_00FF) ! ((K&255)<<8)

    P = P & 255 | (K & 255) << 8;

    //   119      %finish

  L_0004:;

  //   120      store(putpos>>1) = p

    STORE[((unsigned int)PUTPOS >> 1) - 1] = P;

    //   121
    //   122  !!    %LAC PUTPOS;  %OPR 2064;!RCR;  %DAC P
    //   123  !!    %OPR 768;!SZL;  %JMP L1
    //   124  !!    %LAC K;  %OPR 1032;!RTL;  %OPR 1032
    //   125  !!    %OPR 1032;  %OPR 1032;  %DAC K
    //   126  !!    %LAC #-256;  %OPR 513;!SKP!CMA
    //   127  !!L1: %LAC #-256;  %AND* P;  %TAD K;  %DAC* P
    //   128  !!    %ISZ PUTPOS
    //   129
    //   130      putpos = putpos+1

    PUTPOS = PUTPOS + 1;

    //   131  %END

    return;
  } /* end of PUTCHAR */

  //   132
  //   133  %ROUTINE FAULT(%INTEGER K)

  void FAULT(int K) {
    //   134  !RECORD (FIRST) FAULT
    //   135  !NOT NECESSARILY CULPABLE IN PASS 0
    //   136      FSYM = K %IF FSYM = ' '

    if (FSYM != 32) goto L_0005;
    FSYM = K;
  L_0005:;

  //   137  %END

    return;
  } /* end of FAULT */

  //   138
  //   139  %ROUTINE PRINT(%INTEGER K)

  void PRINT(int K) {
    //   140  !!    INTEGER(CODEPOS+CHARS) = K
    //   141      set INTEGER(CODEPOS+CHARS, K)

    SETINTEGER(CODEPOS + CHARS, K);

    //   142      CHARS = CHARS+1

    CHARS = CHARS + 1;

    //   143  %END

    return;
  } /* end of PRINT */

  //   144
  //   145  %ROUTINE PRINT WORD(%INTEGER V)

  void PRINTWORD(int V) {
    //   146      %ROUTINE PRINT HIT(%INTEGER V)

    void PRINTHIT(int V) {
      //   147          V = V&15+'0';  V = V+7 %IF V > '9'

      V = (V & 15) + 48;
      if (V <= 57) goto L_0006;
      V = V + 7;
    L_0006:;

    //   148          PRINT(V)

      PRINT(V);

      //   149      %END

      return;
    } /* end of PRINTHIT */

    //   150      %ROUTINE PRINT1(%INTEGER V)

    void PRINT1(int V) {
      //   151          PRINT HIT(V>>4);  PRINT HIT(V)

      PRINTHIT((unsigned int)V >> 4);
      PRINTHIT(V);

      //   152      %END

      return;
    } /* end of PRINT1 */

    //   153      PRINT1(V>>8);  PRINT1(V)

    PRINT1((unsigned int)V >> 8);
    PRINT1(V);

    //   154  %END

    return;
  } /* end of PRINTWORD */

  //   155
  //   156  %ROUTINE PRINT LOC

  void PRINTLOC(void) {
    //   157      PRINT WORD(LOC)

    PRINTWORD(LOC);

    //   158      %IF LOCTYPE&RELMASK # 0 %THEN PRINT('''') %ELSE PRINT(' ')

    if (LOCTYPE & RELMASK == 0) goto L_0007;
    PRINT(39);
    goto L_0008;
  L_0007:;
    PRINT(32);
  L_0008:;

  //   159      PRINT(' ')

    PRINT(32);

    //   160  %END

    return;
  } /* end of PRINTLOC */

  //   161
  //   162  %ROUTINE DO NEWLINE

  void DONEWLINE(void) {
    //   163      NEWLINE;  LINES = LINES+1

    _imp_NEWLINE();
    LINES = LINES + 1;

    //   164      NEWLINES(2) %AND LINES = 0 %IF LINES = 61

    if (LINES != 61) goto L_0009;
    _imp_NEWLINES(2);
    LINES = 0;
  L_0009:;

  //   165  %END

    return;
  } /* end of DONEWLINE */

  //   166
  //   167  %ROUTINE PRINT LINE

  void PRINTLINE(void) {
    //   168     %ROUTINE PRINTIT(%INTEGER SUB)

    void PRINTIT(int SUB) {
      //   169     %OWNINTEGER MARKER=124;            !VERTICAL BAR

      static int MARKER = 124;

      //   170     %INTEGER P,Q,K

      int P;
      int Q;
      int K;

      //   171         %RETURN %IF CHARS = 0 %AND CHAR(PRINTPOS) = NL

      if (CHARS != 0) goto L_000A;
      if (CHAR(PRINTPOS) != 10) goto L_000A;
      return;
    L_000A:;

    //   172         PRINT SYMBOL(FSYM);  SPACE

      _imp_PRINTSYMBOL(FSYM);
      _imp_SPACE();

      //   173         P = CODEPOS;  Q = P+CHARS

      P = CODEPOS;
      Q = P + CHARS;

      //   174         PRINT SYMBOL(INTEGER(P)) %AND P=P+1 %WHILE P # Q

    L_000B:;
      if (P == Q) goto L_000C;
      _imp_PRINTSYMBOL(INTEGER(P));
      P = P + 1;
      goto L_000B;
    L_000C:;

    //   175         %RETURN %IF PRINTPOS = 0

      if (PRINTPOS != 0) goto L_000D;
      return;
    L_000D:;

    //   176         SPACES(17-CHARS)

      _imp_SPACES(17 - CHARS);

      //   177         P = PRINTPOS;  Q = 0

      P = PRINTPOS;
      Q = 0;

      //   178         %CYCLE

    L_000E:;

    //   179            PRINT SYMBOL(MARKER) %IF P = FAULTPOS

      if (P != FAULTPOS) goto L_000F;
      _imp_PRINTSYMBOL(MARKER);
    L_000F:;

    //   180            K = CHAR(P);  K = SUB %IF P = PSEUDOLIM

      K = CHAR(P);
      if (P != PSEUDOLIM) goto L_0010;
      K = SUB;
    L_0010:;

    //   181            PRINT SYMBOL('''') %IF (K!!Q)&128 # 0

      if ((K ^ Q) & 128 == 0) goto L_0011;
      _imp_PRINTSYMBOL(39);
    L_0011:;

    //   182            %RETURN %IF K = NL

      if (K != 10) goto L_0012;
      return;
    L_0012:;

    //   183            PRINT SYMBOL(K&127)

      _imp_PRINTSYMBOL(K & 127);

      //   184            P = P+1;  Q = K

      P = P + 1;
      Q = K;

      //   185         %REPEAT

      goto L_000E;

      //   186     %END

    } /* end of PRINTIT */

    //   187      %RETURN %IF PASS = 0

    if (PASS != 0) goto L_0013;
    return;
  L_0013:;

  //   188      %UNLESS LIST < 0 %OR (PRINTPOS=0 %AND FSYM=' ' %AND LIST&1=0) %START

    if (LIST < 0) goto L_0014;
    if (PRINTPOS != 0) goto L_0015;
    if (FSYM != 32) goto L_0015;
    if (LIST & 1 == 0) goto L_0014;
  L_0015:;

  //   189         NEWLINES(3) %IF LINES = 0

    if (LINES != 0) goto L_0016;
    _imp_NEWLINES(3);
  L_0016:;

  //   190         PRINTIT(' ')

    PRINTIT(32);

    //   191         DO NEWLINE

    DONEWLINE();

    //   192      %FINISH

  L_0014:;

  //   193      %IF FSYM # ' ' %AND OUTDEV # 1 %START

    if (FSYM == 32) goto L_0017;
    if (_imp_OUTDEV() == 1) goto L_0017;

      //   194         SELECT OUTPUT(0)

    _imp_SELECTOUTPUT(0);

    //   195         PRINTPOS = STARTPOS %IF PRINTPOS = 0

    if (PRINTPOS != 0) goto L_0018;
    PRINTPOS = STARTPOS;
  L_0018:;

  //   196         PRINT LOC %IF CHARS = 0

    if (CHARS != 0) goto L_0019;
    PRINTLOC();
  L_0019:;

  //   197         PRINTIT(NL)

    PRINTIT(10);

    //   198         NEWLINE

    _imp_NEWLINE();

    //   199         SELECT OUTPUT(LIS)

    _imp_SELECTOUTPUT(LIS);

    //   200      %FINISH

  L_0017:;

  //   201      FSYM = ' ';  PRINTPOS = 0;  CHARS = 0

    FSYM = 32;
    PRINTPOS = 0;
    CHARS = 0;

    //   202  %END

    return;
  } /* end of PRINTLINE */

  //   203
  //   204  %ROUTINE PUT(%INTEGER V)

  void PUT(int V) {
    //   205  !STORE 4-BIT ITEM IN BINARY RECORD
    //   206  %OWNINTEGER HOLD=0

    static int HOLD = 0;

    //   207      V = V&15

    V = V & 15;

    //   208      HOLD = HOLD<<4+V

    HOLD = (HOLD << 4) + V;

    //   209      BINCOUNT = BINCOUNT+1

    BINCOUNT = BINCOUNT + 1;

    //   210      %IF BINCOUNT&3 = 0 %START

    if (BINCOUNT & 3 != 0) goto L_001A;

      //   211         BREC(BINCOUNT>>2) = HOLD

    BREC[((unsigned int)BINCOUNT >> 2) - 1] = HOLD;

    //   212         CHECK = CHECK!!HOLD

    CHECK = CHECK ^ HOLD;

    //   213         HOLD = 0

    HOLD = 0;

    //   214      %FINISH

  L_001A:;

  //   215  %END

    return;
  } /* end of PUT */

  //   216
  //   217  %ROUTINE PUT WORD(%INTEGER V)

  void PUTWORD(int V) {
    //   218      %ROUTINE PUT1(%INTEGER V)

    void PUT1(int V) {
      //   219          PUT(V>>4);  PUT(V)

      PUT((unsigned int)V >> 4);
      PUT(V);

      //   220      %END

      return;
    } /* end of PUT1 */

    //   221      PUT1(V>>8);  PUT1(V)

    PUT1((unsigned int)V >> 8);
    PUT1(V);

    //   222  %END

    return;
  } /* end of PUTWORD */

  //   223
  //   224  %ROUTINE OUTPUT RECORD

  void OUTPUTRECORD(void) {
    //   225  %OWNINTEGER SEQ=0

    static int SEQ = 0;

    //   226  %INTEGER I

    int I;

    //   227      %ROUTINE OUTPUT WORD(%INTEGER W)

    void OUTPUTWORD(int W) {
      //   228          PRINT CH(W>>8&255);  PRINT CH(W&255)

      _imp_PRINTCH((unsigned int)W >> 8 & 255);
      _imp_PRINTCH(W & 255);

      //   229      %END

      return;
    } /* end of OUTPUTWORD */

    //   230      PUT(0) %WHILE BINCOUNT # 208

  L_001B:;
    if (BINCOUNT == 208) goto L_001C;
    PUT(0);
    goto L_001B;
  L_001C:;

  //   231      SELECT OUTPUT(BIN)

    _imp_SELECTOUTPUT(BIN);

    //   232      %CYCLE I = 1,1,10

    // %for I = 1, 1, 10 %cycle
    {
      I = 0;
    L_001D:
      if (I == 10) goto L_001E;
      I += 1;

      //   233         PRINT CH(0);                   !RUNOUT

      _imp_PRINTCH(0);

      //   234      %REPEAT

      goto L_001D;
    }

  L_001E:;

  //   235      PRINT CH(16_F0);                  !HEADER CODE

    _imp_PRINTCH(240);

    //   236      SEQ = SEQ-1

    SEQ = SEQ - 1;

    //   237      OUTPUT WORD(SEQ);                 !SEQUENCE NUMBER

    OUTPUTWORD(SEQ);

    //   238      OUTPUT WORD(\(CHECK!!SEQ));       !CHECKSUM

    OUTPUTWORD(~(CHECK ^ SEQ));

    //   239      %CYCLE I = 1,1,52

    // %for I = 1, 1, 52 %cycle
    {
      I = 0;
    L_0020:
      if (I == 52) goto L_0021;
      I += 1;

      //   240         OUTPUT WORD(BREC(I))

      OUTPUTWORD(BREC[I - 1]);

      //   241      %REPEAT

      goto L_0020;
    }

  L_0021:;

  //   242      BINCOUNT = 0;  CHECK = 0

    BINCOUNT = 0;
    CHECK = 0;

    //   243      SELECT OUTPUT(LIS)

    _imp_SELECTOUTPUT(LIS);

    //   244  %END

    return;
  } /* end of OUTPUTRECORD */

  //   245
  //   246  %ROUTINE PLANT VAL

  void PLANTVAL(void) {
    //   247  %INTEGER I,J

    int I;
    int J;

    //   248      TYPE = 0 %IF TYPE = SINGLE

    if (TYPE != SINGLE) goto L_0022;
    TYPE = 0;
  L_0022:;

  //   249      I = 2;  I = 4 %IF TYPE&OPMASK # 0

    I = 2;
    if (TYPE & OPMASK == 0) goto L_0023;
    I = 4;
  L_0023:;

  //   250      %IF PASS > 0 %START

    if (PASS <= 0) goto L_0024;

      //   251         OUTPUT RECORD %IF BINCOUNT+I+I >= 208

    if (BINCOUNT + I + I < 208) goto L_0025;
    OUTPUTRECORD();
  L_0025:;

  //   252         %IF I = 4 %START

    if (I != 4) goto L_0026;

      //   253            %IF TYPE&16_4000 = 0 %START

    if (TYPE & 16384 != 0) goto L_0027;

      //   254               PUT(11);  J = TYPE!!OPMASK

    PUT(11);
    J = TYPE ^ OPMASK;

    //   255               TYPE = RELMASK

    TYPE = RELMASK;

    //   256            %finish %ELSE %START

    goto L_0028;
  L_0027:;

  //   257               PUT(10);  J = TYPE;  TYPE = 0

    PUT(10);
    J = TYPE;
    TYPE = 0;

    //   258            %FINISH

  L_0028:;

  //   259            PUT WORD(J)

    PUTWORD(J);

    //   260            PRINT LINE %IF CHARS # 0

    if (CHARS == 0) goto L_0029;
    PRINTLINE();
  L_0029:;

  //   261            PRINT LOC

    PRINTLOC();

    //   262            PRINT WORD(J);  PRINT(' ')

    PRINTWORD(J);
    PRINT(32);

    //   263         %finish %ELSE %START

    goto L_002A;
  L_0026:;

  //   264            %IF TYPE&RELMASK # 0 %THEN PUT(9) %ELSE PUT(8)

    if (TYPE & RELMASK == 0) goto L_002B;
    PUT(9);
    goto L_002C;
  L_002B:;
    PUT(8);
  L_002C:;

  //   265            %IF CHARS # 0 %THEN PRINT(' ') %ELSE PRINT LOC

    if (CHARS == 0) goto L_002D;
    PRINT(32);
    goto L_002E;
  L_002D:;
    PRINTLOC();
  L_002E:;

  //   266         %FINISH

  L_002A:;

  //   267         PUT WORD(VAL);  PRINT WORD(VAL)

    PUTWORD(VAL);
    PRINTWORD(VAL);

    //   268         PRINT('''') %IF TYPE&RELMASK # 0

    if (TYPE & RELMASK == 0) goto L_002F;
    PRINT(39);
  L_002F:;

  //   269         PRINT LINE %IF TYPE&RELMASK#0 %OR CHARS=15

    if (TYPE & RELMASK != 0) goto L_0030;
    if (CHARS != 15) goto L_0031;
  L_0030:;
    PRINTLINE();
  L_0031:;

  //   270      %FINISH

  L_0024:;

  //   271      LOC = LOC+I

    LOC = LOC + I;

    //   272  %END

    return;
  } /* end of PLANTVAL */

  //   273
  //   274  %ROUTINE NEST(%INTEGER K)

  void NEST(int K) {
    //   275  !!    NP = NP-1;  %MONITOR 23 %IF NP = BP
    //   276      NP = NP-1;  !{}%signal 2,3 %IF NP = BP

    NP = NP - 1;

    //   277  !!    INTEGER(NP) = K
    //   278      set INTEGER(NP, K)

    SETINTEGER(NP, K);

    //   279  %END

    return;
  } /* end of NEST */

  //   280
  //   281  %ROUTINE SET LAB(%INTEGER DEST)

  void SETLAB(int DEST) {
    //   282  %INTEGER D

    int D;

    //   283      D = DEST

    D = DEST;

    //   284      %CYCLE

  L_0032:;

  //   285         TYPE = INTEGER(NP)&16_FFF+DEFLIM; !DEST SLOT

    TYPE = (INTEGER(NP) & 4095) + DEFLIM;

    //   286         NP = NP+1

    NP = NP + 1;

    //   287         VAL = INTEGER(NP);             !LOC OF JUMP

    VAL = INTEGER(NP);

    //   288         NP = NP+1

    NP = NP + 1;

    //   289         ATYPE = -1;  CREG = -1

    ATYPE = -1;
    CREG = -1;

    //   290         FLAG = 0;  FLAG = 2 %IF (D-VAL)>>1+PASS <= 16

    FLAG = 0;
    if (((unsigned int)D - VAL >> 1) + PASS > 16) goto L_0033;
    FLAG = 2;
  L_0033:;

  //   291         VAL = VAL-FLAG

    VAL = VAL - FLAG;

    //   292         %IF PASS = 0 %START

    if (PASS != 0) goto L_0034;

      //   293  !!          D = D-FLAG;  INTEGER(TYPE) = D
      //   294            D = D-FLAG;  set INTEGER(TYPE, D)

    D = D - FLAG;
    SETINTEGER(TYPE, D);

    //   295            %IF FLAG # 0 %START

    if (FLAG == 0) goto L_0035;

      //   296               LOC = LOC-2;  DEST = DEST-2

    LOC = LOC - 2;
    DEST = DEST - 2;

    //   297               %WHILE TYPE # ALMAX %CYCLE

  L_0036:;
    if (TYPE == ALMAX) goto L_0037;

      //   298  !!                TYPE = TYPE+1;  INTEGER(TYPE) = INTEGER(TYPE)-2
      //   299                  TYPE = TYPE+1;  set INTEGER(TYPE,  INTEGER(TYPE)-2)

    TYPE = TYPE + 1;
    SETINTEGER(TYPE, INTEGER(TYPE) - 2);

    //   300               %REPEAT

    goto L_0036;
  L_0037:;

  //   301            %FINISH

  L_0035:;

  //   302         %finish %ELSE %START

    goto L_0038;
  L_0034:;

  //   303            FAULT('P') %IF INTEGER(TYPE) # D

    if (INTEGER(TYPE) == D) goto L_0039;
    FAULT(80);
  L_0039:;

  //   304         %FINISH

  L_0038:;

  //   305         %RETURN %UNLESS INTEGER(NP)&16_1000 # 0

    if (INTEGER(NP) & 4096 != 0) goto L_003A;
    return;
  L_003A:;

  //   306         %IF INTEGER(NP)&16_2000 # 0 %START; !OR

    if (INTEGER(NP) & 8192 == 0) goto L_003B;

      //   307            D = VAL+4 %IF D = DEST

    if (D != DEST) goto L_003C;
    D = VAL + 4;
  L_003C:;

  //   308         %finish %ELSE %START

    goto L_003D;
  L_003B:;

  //   309            D = DEST

    D = DEST;

    //   310         %FINISH

  L_003D:;

  //   311      %REPEAT

    goto L_0032;

    //   312  %END

  } /* end of SETLAB */

  //   313
  //   314  %ROUTINE ASSEMBLE

  void ASSEMBLE(void) {
    //   315  !   INTERDATA OP-CODES (+FORMATS)
    //   316  %OWNINTEGER LOAD=16_080F, LB=16_9303

    static int LOAD = 2063;
    static int LB = 37635;

    //   317  %OWNINTEGER ADD=16_0A0F, SUB=16_0B0F, AND=16_0407

    static int ADD = 2575;
    static int SUB = 2831;
    static int AND = 1031;

    //   318  %OWNINTEGER OR=16_0607, XOR=16_0707

    static int OR = 1543;
    static int XOR = 1799;

    //   319  %OWNINTEGER SLLS=16_7508, SRLS=16_7408, SLHL=16_0D04, SRHL=16_0C04

    static int SLLS = 29960;
    static int SRLS = 29704;
    static int SLHL = 3332;
    static int SRHL = 3076;

    //   320  %OWNINTEGER COMP=16_0907, CLB=16_9402

    static int COMP = 2311;
    static int CLB = 37890;

    //   321  %OWNINTEGER STORE=16_0002, STB=16_9202, AHM=16_2102

    static int STORE = 2;
    static int STB = 37378;
    static int AHM = 8450;

    //   322  %OWNINTEGER BT=16_0203, BF=16_0303

    static int BT = 515;
    static int BF = 771;

    //   323  !    FORMAT CODES
    //   324  %OWNINTEGER REGISTER=1, MEM=2, LIT=4, SHORT=8

    static int REGISTER = 1;
    static int MEM = 2;
    static int LIT = 4;
    static int SHORT = 8;

    //   325
    //   326  %OWNINTEGER ZQUERY=0

    static int ZQUERY = 0;

    //   327  %INTEGER OP,K,Q,LITVAL,NQ,TYPE1,VAL1,FREE

    int OP;
    int K;
    int Q;
    int LITVAL;
    int NQ;
    int TYPE1;
    int VAL1;
    int FREE;

    //   328  %SWITCH ASS(-30:-1)

    int ASS_index;
    int ASS_line;
    char *ASS_file;
    static const void *ASS[30] = {
        &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_M26,
        &&case_ASS_M25,     &&case_ASS_M24,     &&case_ASS_M23,     &&case_ASS_M22,     &&case_ASS_M21,
        &&case_ASS_M20,     &&case_ASS_missing, &&case_ASS_M18,     &&case_ASS_M17,     &&case_ASS_M16,
        &&case_ASS_M15,     &&case_ASS_M14,     &&case_ASS_M13,     &&case_ASS_M12,     &&case_ASS_M11,
        &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_M8,      &&case_ASS_M7,      &&case_ASS_M6,
        &&case_ASS_M5,      &&case_ASS_M4,      &&case_ASS_M3,      &&case_ASS_M2,      &&case_ASS_M1};

    //   329
    //   330  %ROUTINE FORM INST(%INTEGER CODE)

    void FORMINST(int CODE) {
      //   331  !    LS 4 BITS OF CODE DEFINE VALID FORMATS
      //   332  !    INTERDATA OP-CODES FOR DIFFERENT FORMATS
      //   333  !    ARE SYSTEMATICALLY RELATED
      //   334  !    SHORT=REGISTER+SINC, LIT=REGISTER+LINC, MEM=REGISTER+MINC
      //   335  %OWNINTEGER SINC=16_1C00, LINC=16_C000, MINC=16_4000

      static int SINC = 7168;
      static int LINC = 49152;
      static int MINC = 16384;

      //   336  %INTEGER OP

      int OP;

      //   337      OP = CODE&16_FFF0

      OP = CODE & 65520;

      //   338      %IF TYPE = REG %START

      if (TYPE != REG) goto L_003E;

        //   339         %IF CODE&REGISTER # 0 %START

      if (CODE & REGISTER == 0) goto L_003F;

        //   340            TYPE = SINGLE;  VAL = OP+VAL

      TYPE = SINGLE;
      VAL = OP + VAL;

      //   341            %RETURN

      return;

      //   342         %FINISH

    L_003F:;

    //   343         TYPE = XMASK+VAL;  VAL = 0;    !COERCE TO INDEXED IMMEDIATE

      TYPE = XMASK + VAL;
      VAL = 0;

      //   344      %FINISH

    L_003E:;

    //   345  !!    %IF TYPE=0 %AND !VAL!<=15 %AND CODE&SHORT#0 %START; !SHORT
    //   346      %IF TYPE=0 %AND |VAL|<=15 %AND CODE&SHORT#0 %START; !SHORT

      if (TYPE != 0) goto L_0040;
      if (_imp_IMOD(VAL) > 15) goto L_0040;
      if (CODE & SHORT == 0) goto L_0040;

        //   347         VAL = -VAL %AND OP = OP!!16_100 %IF VAL < 0

      if (VAL >= 0) goto L_0041;
      VAL = -VAL;
      OP = OP ^ 256;
    L_0041:;

    //   348         TYPE = SINGLE;  VAL = OP+SINC+VAL

      TYPE = SINGLE;
      VAL = OP + SINC + VAL;

      //   349      %finish %ELSE %START

      goto L_0042;
    L_0040:;

    //   350         FAULT('R') %IF TYPE&31 = XMASK; !R0 AS INDEX

      if (TYPE & 31 != XMASK) goto L_0043;
      FAULT(82);
    L_0043:;

    //   351         %IF TYPE&MEMMASK = 0 %START;   !IMMEDIATE

      if (TYPE & MEMMASK != 0) goto L_0044;

        //   352            FAULT('I') %IF CODE&LIT = 0

      if (CODE & LIT != 0) goto L_0045;
      FAULT(73);
    L_0045:;

    //   353            OP = OP+LINC

      OP = OP + LINC;

      //   354         %finish %ELSE %START;                  !MEMORY

      goto L_0046;
    L_0044:;

    //   355            FAULT('I') %IF CODE&MEM = 0

      if (CODE & MEM != 0) goto L_0047;
      FAULT(73);
    L_0047:;

    //   356            OP = OP+MINC

      OP = OP + MINC;

      //   357         %FINISH

    L_0046:;

    //   358         OP = OP!!OPMASK %IF TYPE&RELMASK # 0

      if (TYPE & RELMASK == 0) goto L_0048;
      OP = OP ^ OPMASK;
    L_0048:;

    //   359         TYPE = TYPE&15+OP

      TYPE = (TYPE & 15) + OP;

      //   360      %FINISH

    L_0042:;

    //   361  %END

      return;
    } /* end of FORMINST */

    //   362
    //   363  %ROUTINE PLANT JUMP

    void PLANTJUMP(void) {
      //   364  %INTEGER I,OP

      int I;
      int OP;

      //   365      OP = BF;  COND=\COND %AND OP=BT %IF COND < 0

      OP = BF;
      if (COND >= 0) goto L_0049;
      COND = (~COND);
      OP = BT;
    L_0049:;

    //   366      %IF TYPE&(\UMASK) = LOCTYPE %START

      if (TYPE & (~UMASK) != LOCTYPE) goto L_004A;

        //   367         I = LOC>>1-VAL>>1

      I = ((unsigned int)LOC >> 1) - ((unsigned int)VAL >> 1);

      //   368  !!       FAULT('J') %AND I=0 %IF FLAG # 0 %AND !I! > 15
      //   369         FAULT('J') %AND I=0 %IF FLAG # 0 %AND |I| > 15

      if (FLAG == 0) goto L_004B;
      if (_imp_IMOD(I) <= 15) goto L_004B;
      FAULT(74);
      I = 0;
    L_004B:;

    //   370  !!       %IF !I! <= 15 %START
    //   371         %IF |I| <= 15 %START

      if (_imp_IMOD(I) > 15) goto L_004C;

        //   372            %IF TYPE&UMASK = 0 %OR FLAG # 0 %START

      if (TYPE & UMASK == 0) goto L_004D;
      if (FLAG == 0) goto L_004E;
    L_004D:;

    //   373               OP = OP<<1+2;            !0408, 0608

      OP = (OP << 1) + 2;

      //   374               TYPE = 0;  VAL = I

      TYPE = 0;
      VAL = I;

      //   375            %finish %ELSE %START

      goto L_004F;
    L_004E:;

    //   376               FAULT('S') %IF LIST >= 0 %AND LIST&8 # 0

      if (LIST < 0) goto L_0050;
      if (LIST & 8 == 0) goto L_0050;
      FAULT(83);
    L_0050:;

    //   377            %FINISH

    L_004F:;

    //   378         %FINISH

    L_004C:;

    //   379      %FINISH

    L_004A:;

    //   380      FORM INST(COND<<4+OP)

      FORMINST((COND << 4) + OP);

      //   381      PLANT VAL

      PLANTVAL();

      //   382      COND = 0

      COND = 0;

      //   383  %END

      return;
    } /* end of PLANTJUMP */

    //   384
    //   385  %ROUTINE SET JUMP(%INTEGER CASE)

    void SETJUMP(int CASE) {
      //   386  %INTEGER THOLD,VHOLD,FHOLD

      int THOLD;
      int VHOLD;
      int FHOLD;

      //   387  !!    ALMAX = ALMAX+1;  %MONITOR 22 %IF ALMAX = LABMIN
      //   388      ALMAX = ALMAX+1;  !{}%signal 2,2 %IF ALMAX = LABMIN

      ALMAX = ALMAX + 1;

      //   389      NEST(LOC);  NEST(ALMAX-DEFLIM+CASE)

      NEST(LOC);
      NEST(ALMAX - DEFLIM + CASE);

      //   390      THOLD = TYPE;  VHOLD = VAL;  FHOLD = FLAG

      THOLD = TYPE;
      VHOLD = VAL;
      FHOLD = FLAG;

      //   391      TYPE = LOCTYPE;  VAL = INTEGER(ALMAX);  FLAG = 0

      TYPE = LOCTYPE;
      VAL = INTEGER(ALMAX);
      FLAG = 0;

      //   392      TYPE = TYPE+UMASK %IF PASS = 0

      if (PASS != 0) goto L_0051;
      TYPE = TYPE + UMASK;
    L_0051:;

    //   393      COND = \COND

      COND = (~COND);

      //   394      PLANT JUMP

      PLANTJUMP();

      //   395      TYPE = THOLD;  VAL = VHOLD;  FLAG = FHOLD

      TYPE = THOLD;
      VAL = VHOLD;
      FLAG = FHOLD;

      //   396  %END

      return;
    } /* end of SETJUMP */

    //   397
    //   398  %ROUTINE PLANT INST(%INTEGER CODE)

    void PLANTINST(int CODE) {
      //   399      FORM INST(CODE)

      FORMINST(CODE);

      //   400      SET JUMP(16_1000) %IF COND # 0

      if (COND == 0) goto L_0052;
      SETJUMP(4096);
    L_0052:;

    //   401      PLANT VAL

      PLANTVAL();

      //   402  %END

      return;
    } /* end of PLANTINST */

    //   403
    //   404  %ROUTINE LOAD REG(%INTEGER R)

    void LOADREG(int R) {
      //   405  %INTEGER OP

      int OP;

      //   406      %IF ATYPE = TYPE %AND AVAL = VAL %START

      if (ATYPE != TYPE) goto L_0053;
      if (AVAL != VAL) goto L_0053;

        //   407         TYPE = REG;  VAL = ACC

      TYPE = REG;
      VAL = ACC;

      //   408         %RETURN %IF R = ACC

      if (R != ACC) goto L_0054;
      return;
    L_0054:;

    //   409      %FINISH

    L_0053:;

    //   410      ATYPE = TYPE %AND AVAL = VAL %IF R = ACC

      if (R != ACC) goto L_0055;
      ATYPE = TYPE;
      AVAL = VAL;
    L_0055:;

    //   411      ATYPE = -1 %IF (ATYPE=REG %AND AVAL=R) %OR ATYPE&15=R#0

      if (ATYPE != REG) goto L_0056;
      if (AVAL == R) goto L_001F;
    L_0056:;
      {
// Double-sided test on R (Part I)
        int tmp;
        if (ATYPE & 15 != (tmp = R)) goto L_0057;
// Double-sided test on R (Part II)
        if (tmp == 0) goto L_0057;
      }
    L_001F:;
      ATYPE = -1;
    L_0057:;

    //   412      %IF TYPE&BMASK = 0 %START

      if (TYPE & BMASK != 0) goto L_0058;

        //   413         OP = LOAD

      OP = LOAD;

      //   414         OP = ADD %AND TYPE = 0 %IF TYPE!!XMASK = R # 0

      {
// Double-sided test on R (Part I)
        int tmp;
        if (TYPE ^ XMASK != (tmp = R)) goto L_0059;
// Double-sided test on R (Part II)
        if (tmp == 0) goto L_0059;
      }
      OP = ADD;
      TYPE = 0;
    L_0059:;

    //   415         CREG = R;  CTYPE = 0;  CVAL = 0

      CREG = R;
      CTYPE = 0;
      CVAL = 0;

      //   416      %finish %ELSE %START

      goto L_005A;
    L_0058:;

    //   417         OP = LB

      OP = LB;

      //   418         CREG = -1 %IF CREG = R

      if (CREG != R) goto L_005B;
      CREG = -1;
    L_005B:;

    //   419      %FINISH

    L_005A:;

    //   420      PLANT INST(R<<4+OP)

      PLANTINST((R << 4) + OP);

      //   421      TYPE = REG;  VAL = R

      TYPE = REG;
      VAL = R;

      //   422  %END

      return;
    } /* end of LOADREG */

    //   423
    //   424  %ROUTINE RELEASE

    void RELEASE(void) {
      //   425  %INTEGER I

      int I;

      //   426      %RETURN %IF TYPE&REGXMASK = 0

      if (TYPE & REGXMASK != 0) goto L_005C;
      return;
    L_005C:;

    //   427      I = TYPE&15;  I = VAL %IF I = 0

      I = TYPE & 15;
      if (I != 0) goto L_005D;
      I = VAL;
    L_005D:;

    //   428      %IF I = DREG %START

      if (I != DREG) goto L_005E;

        //   429         DUSE = DUSE-1

      DUSE = DUSE - 1;

      //   430      %finish %ELSE %START

      goto L_005F;
    L_005E:;

    //   431         I = 1<<I

      I = 1 << I;

      //   432         FREE = FREE!I %IF TEMPS&I # 0

      if (TEMPS & I == 0) goto L_0060;
      FREE = FREE | I;
    L_0060:;

    //   433      %FINISH

    L_005F:;

    //   434  %END

      return;
    } /* end of RELEASE */

    //   435
    //   436  %ROUTINE LOAD TEMP

    void LOADTEMP(void) {
      //   437  %INTEGER I,J

      int I;
      int J;

      //   438      RELEASE

      RELEASE();

      //   439      %IF DREG >= ZQUERY %AND DUSE = 0 %START

      if (DREG < ZQUERY) goto L_0061;
      if (DUSE != 0) goto L_0061;

        //   440         I = DREG;  DUSE = 1

      I = DREG;
      DUSE = 1;

      //   441      %finish %ELSE %START

      goto L_0062;
    L_0061:;

    //   442         J = 1+ZQUERY

      J = 1 + ZQUERY;

      //   443         %CYCLE I = ZQUERY,1,15

      // %for I = ZQUERY, 1, 15 %cycle
      {
        int _initial = ZQUERY;
        if (invalid_for_loop(_initial, 1, 15)) _imp_signal(5, 1, 0, "Illegal cycle I = ZQUERY, 1, 15");
        I = _initial - (1);
      L_0063:
        if (I == 15) goto L_0064;
        I += 1;

        //   444            ->OK %IF FREE&J # 0 %AND I # DREG

        if (FREE & J == 0) goto L_0066;
        if (I == DREG) goto L_0066;
        goto U_1000;
      L_0066:;

      //   445            J = J<<1

        J = J << 1;

        //   446         %REPEAT

        goto L_0063;
      }

    L_0064:;

    //   447         FAULT('R')

      FAULT(82);

      //   448  OK:    FREE = FREE-J

    U_1000:;
      FREE = FREE - J;

      //   449      %FINISH

    L_0062:;

    //   450      LOAD REG(I)

      LOADREG(I);

      //   451  %END

      return;
    } /* end of LOADTEMP */

    //   452
    //   453  %ROUTINE SWOP

    void SWOP(void) {
      //   454  %INTEGER K

      int K;

      //   455      K = TYPE1;  TYPE1 = TYPE;  TYPE = K

      K = TYPE1;
      TYPE1 = TYPE;
      TYPE = K;

      //   456      K = VAL1;  VAL1 = VAL;  VAL = K

      K = VAL1;
      VAL1 = VAL;
      VAL = K;

      //   457  %END

      return;
    } /* end of SWOP */

    //   458
    //   459  %ROUTINE PROGREF

    void PROGREF(void) {
      //   460      %IF TYPE&RELUXMASK = XMASK %AND VAL = 0 %START

      if (TYPE & RELUXMASK != XMASK) goto L_0067;
      if (VAL != 0) goto L_0067;

        //   461         VAL = TYPE&15;  TYPE = REG

      VAL = TYPE & 15;
      TYPE = REG;

      //   462      %FINISH

    L_0067:;

    //   463      TYPE = TYPE!MEMMASK %IF TYPE # REG

      if (TYPE == REG) goto L_0068;
      TYPE = TYPE | MEMMASK;
    L_0068:;

    //   464  %END

      return;
    } /* end of PROGREF */

    //   465
    //   466      Q = QSTART

    Q = QSTART;

    //   467  NEW:NQ = QSTART;  FREE = TEMPS

  U_1000:;
    NQ = QSTART;
    FREE = TEMPS;

    //   468      TYPE = INTEGER(Q);  Q = Q+1

    TYPE = INTEGER(Q);
    Q = Q + 1;

    //   469      VAL = INTEGER(Q);  Q = Q+1

    VAL = INTEGER(Q);
    Q = Q + 1;

    //   470
    //   471  GET:%CYCLE

  U_1001:;
  L_0069:;

  //   472         %RETURN %IF Q = QLIM

    if (Q != QLIM) goto L_006A;
    return;
  L_006A:;

  //   473         K = INTEGER(Q);  Q = Q+1

    K = INTEGER(Q);
    Q = Q + 1;

    //   474         ->ASS(K) %IF K < 0

    if (K >= 0) goto L_006B;
    ASS_line = __LINE__;
    ASS_file = __FILE__;
    ASS_index = K;
    goto case_ASS_dispatch;
  L_006B:;

  //   475  !!       INTEGER(NQ) = TYPE1;  INTEGER(NQ+1) = VAL1
  //   476         set INTEGER(NQ, TYPE1);  set INTEGER(NQ+1, VAL1)

    SETINTEGER(NQ, TYPE1);
    SETINTEGER(NQ + 1, VAL1);

    //   477         NQ = NQ+2

    NQ = NQ + 2;

    //   478         TYPE1 = TYPE;  VAL1 = VAL

    TYPE1 = TYPE;
    VAL1 = VAL;

    //   479         TYPE = K;  VAL = INTEGER(Q);  Q = Q+1

    TYPE = K;
    VAL = INTEGER(Q);
    Q = Q + 1;

    //   480      %REPEAT

    goto L_0069;

    //   481
    //   482  %PREDICATE TEMP

    int TEMP(void) {
      //   483      %FALSE %IF TYPE1 # REG

      if (TYPE1 == REG) goto L_006D;
      return 0 /*FALSE*/;
    L_006D:;

    //   484      %IF VAL1 = DREG %START

      if (VAL1 != DREG) goto L_006E;

        //   485         %FALSE %IF DUSE # 1

      if (DUSE == 1) goto L_006F;
      return 0 /*FALSE*/;
    L_006F:;

    //   486      %finish %ELSE %START

      goto L_0070;
    L_006E:;

    //   487         %FALSE %IF 1<<VAL1&TEMPS = 0

      if (1 << VAL1 & TEMPS != 0) goto L_0071;
      return 0 /*FALSE*/;
    L_0071:;

    //   488      %FINISH

    L_0070:;

    //   489      %TRUE

      return 1 /*TRUE*/;

      //   490  %END

    } /* end of TEMP */

    //   491
    //   492  NOP: K = 0;                           !NOT SYMMETRIC

  U_1002:;
    K = 0;

    //   493  BOP:%IF MODE <= 0 %OR (TYPE = 0 %AND TYPE1 = 0) %START

  U_1003:;
    if (MODE <= 0) goto L_0072;
    if (TYPE != 0) goto L_0073;
    if (TYPE1 != 0) goto L_0073;
  L_0072:;

  //   494         FAULT('A') %IF TYPE # 0

    if (TYPE == 0) goto L_0074;
    FAULT(65);
  L_0074:;

  //   495         TYPE = TYPE1;  VAL = LITVAL

    TYPE = TYPE1;
    VAL = LITVAL;

    //   496      %finish %ELSE %START

    goto L_0075;
  L_0073:;

  //   497         %IF %NOT TEMP %OR (TYPE=REG %AND VAL=DREG %AND DUSE=1 %AND K#0) %START

    if (!(TEMP())) goto L_0065;
    if (TYPE != REG) goto L_0076;
    if (VAL != DREG) goto L_0076;
    if (DUSE != 1) goto L_0076;
    if (K == 0) goto L_0076;
  L_0065:;

  //   498            SWOP

    SWOP();

    //   499            %IF K = 0 %OR %NOT TEMP %START

    if (K == 0) goto L_0077;
    if (TEMP()) goto L_0078;
  L_0077:;

  //   500               LOAD TEMP;  SWOP

    LOADTEMP();
    SWOP();

    //   501            %FINISH

  L_0078:;

  //   502         %FINISH

  L_0076:;

  //   503         LOAD TEMP %IF TYPE&BMASK # 0 %OR (OP&MEM=0 %AND TYPE&MEMMASK#0)

    if (TYPE & BMASK != 0) goto L_0079;
    if (OP & MEM != 0) goto L_007A;
    if (TYPE & MEMMASK == 0) goto L_007A;
  L_0079:;
    LOADTEMP();
  L_007A:;

  //   504         RELEASE

    RELEASE();

    //   505         PLANT INST(VAL1<<4+OP)

    PLANTINST((VAL1 << 4) + OP);

    //   506         TYPE = REG;  VAL = VAL1

    TYPE = REG;
    VAL = VAL1;

    //   507         CREG = VAL;  CTYPE = 0;  CVAL = 0

    CREG = VAL;
    CTYPE = 0;
    CVAL = 0;

    //   508         ATYPE = -1 %IF ACC = VAL %OR ATYPE&15 = VAL # 0

    if (ACC == VAL) goto L_007B;
    {
// Double-sided test on VAL (Part I)
      int tmp;
      if (ATYPE & 15 != (tmp = VAL)) goto L_007C;
// Double-sided test on VAL (Part II)
      if (tmp == 0) goto L_007C;
    }
  L_007B:;
    ATYPE = -1;
  L_007C:;

  //   509         ATYPE = -1 %IF ATYPE = REG %AND AVAL = VAL

    if (ATYPE != REG) goto L_007D;
    if (AVAL != VAL) goto L_007D;
    ATYPE = -1;
  L_007D:;

  //   510      %FINISH

  L_0075:;

  //   511
  //   512  POP:NQ = NQ-2

  U_1004:;
    NQ = NQ - 2;

    //   513      TYPE1 = INTEGER(NQ);  VAL1 = INTEGER(NQ+1)

    TYPE1 = INTEGER(NQ);
    VAL1 = INTEGER(NQ + 1);

    //   514      ->GET

    goto U_1001;

    //   515
    //   516  ASS(-2):

  case_ASS_M2:;

  //   517      OP = SUB

    OP = SUB;

    //   518      ->NOP %IF MODE > 0 %AND TYPE # 0

    if (MODE <= 0) goto L_007E;
    if (TYPE == 0) goto L_007E;
    goto U_1002;
  L_007E:;

  //   519      TYPE1 = 0 %AND TYPE = 0 %IF MODE <= 0 %AND TYPE1 = TYPE

    if (MODE > 0) goto L_007F;
    if (TYPE1 != TYPE) goto L_007F;
    TYPE1 = 0;
    TYPE = 0;
  L_007F:;

  //   520      VAL = -VAL

    VAL = -VAL;

    //   521  ASS(-1):

  case_ASS_M1:;

  //   522      OP = ADD;  LITVAL = VAL1+VAL

    OP = ADD;
    LITVAL = VAL1 + VAL;

    //   523      ->BOP %UNLESS TYPE = 0

    if (TYPE == 0) goto L_0080;
    goto U_1003;
  L_0080:;

  //   524      %IF TYPE1&MEMMASK # 0 %AND MODE > 0 %START

    if (TYPE1 & MEMMASK == 0) goto L_0081;
    if (MODE <= 0) goto L_0081;

      //   525         SWOP;  LOAD TEMP;  SWOP

    SWOP();
    LOADTEMP();
    SWOP();

    //   526      %FINISH

  L_0081:;

  //   527      %IF TYPE1 = REG %START

    if (TYPE1 != REG) goto L_0082;

      //   528         ->BOP %IF VAL1 = 0

    if (VAL1 != 0) goto L_0083;
    goto U_1003;
  L_0083:;

  //   529         TYPE1 = XMASK+VAL1;  LITVAL = VAL

    TYPE1 = XMASK + VAL1;
    LITVAL = VAL;

    //   530      %FINISH

  L_0082:;

  //   531      TYPE = TYPE1;  VAL = LITVAL

    TYPE = TYPE1;
    VAL = LITVAL;

    //   532      ->POP

    goto U_1004;

    //   533  ASS(-3):

  case_ASS_M3:;

  //   534      OP = AND;  LITVAL = VAL1&VAL

    OP = AND;
    LITVAL = VAL1 & VAL;

    //   535      ->BOP

    goto U_1003;

    //   536  ASS(-4):

  case_ASS_M4:;

  //   537      OP = OR;  LITVAL = VAL1!VAL

    OP = OR;
    LITVAL = VAL1 | VAL;

    //   538      ->BOP

    goto U_1003;

    //   539  ASS(-5):

  case_ASS_M5:;

  //   540      OP = XOR;  LITVAL = VAL1!!VAL

    OP = XOR;
    LITVAL = VAL1 ^ VAL;

    //   541      ->BOP

    goto U_1003;

    //   542  ASS(-6):

  case_ASS_M6:;

  //   543      OP = SLLS;  LITVAL = VAL1<<VAL

    OP = SLLS;
    LITVAL = VAL1 << VAL;

    //   544      OP = SLHL %IF TYPE # 0

    if (TYPE == 0) goto L_0084;
    OP = SLHL;
  L_0084:;

  //   545      ->NOP

    goto U_1002;

    //   546  ASS(-7):

  case_ASS_M7:;

  //   547      OP = SRLS;  LITVAL = VAL1>>VAL

    OP = SRLS;
    LITVAL = (unsigned int)VAL1 >> VAL;

    //   548      OP = SRHL %IF TYPE # 0

    if (TYPE == 0) goto L_0085;
    OP = SRHL;
  L_0085:;

  //   549      ->NOP

    goto U_1002;

    //   550
    //   551  ASS(-8):                              !TYPE_VAL

  case_ASS_M8:;

  //   552      TYPE = VAL1

    TYPE = VAL1;

    //   553      TYPE = 0 %IF TYPE&OPMASK = MACRO; !SAFETY

    if (TYPE & OPMASK != MACRO) goto L_0086;
    TYPE = 0;
  L_0086:;

  //   554      TYPE = 0 %IF TYPE&(OPMASK+FMASK) = FMASK

    if (TYPE & OPMASK + FMASK != FMASK) goto L_0087;
    TYPE = 0;
  L_0087:;

  //   555      ->POP

    goto U_1004;

    //   556
    //   557  ASS(-11):                             !COMPARE

  case_ASS_M11:;

  //   558      K = INTEGER(Q);  Q = Q+1

    K = INTEGER(Q);
    Q = Q + 1;

    //   559      %IF MODE <= 0 %START

    if (MODE > 0) goto L_0088;

      //   560         VAL1 = TYPE1 %AND VAL = TYPE %IF TYPE1 # TYPE

    if (TYPE1 == TYPE) goto L_0089;
    VAL1 = TYPE1;
    VAL = TYPE;
  L_0089:;

  //   561         LITVAL = \3

    LITVAL = (~3);

    //   562         LITVAL = 1 %IF VAL1 < VAL

    if (VAL1 >= VAL) goto L_008A;
    LITVAL = 1;
  L_008A:;

  //   563         LITVAL = 2 %IF VAL1 > VAL

    if (VAL1 <= VAL) goto L_008B;
    LITVAL = 2;
  L_008B:;

  //   564         K = K&LITVAL;  K = \0 %IF K # 0

    K = K & LITVAL;
    if (K == 0) goto L_008C;
    K = (~0);
  L_008C:;

  //   565      %finish %ELSE %UNLESS CREG=16 %AND TYPE1=CTYPE %AND VAL1=CVAL %AND TYPE=VAL=0 %START

    goto L_008D;
  L_0088:;
    if (CREG != 16) goto L_008E;
    if (TYPE1 != CTYPE) goto L_008E;
    if (VAL1 != CVAL) goto L_008E;
    {
// Double-sided test on VAL (Part I)
      int tmp;
      if (TYPE != (tmp = VAL)) goto L_008E;
// Double-sided test on VAL (Part II)
      if (tmp == 0) goto L_008F;
    }
  L_008E:;

  //   566         %IF TYPE1 # REG %START

    if (TYPE1 == REG) goto L_0090;

      //   567            SWOP

    SWOP();

    //   568            %IF TYPE1 # REG %START

    if (TYPE1 == REG) goto L_0091;

      //   569               LOAD TEMP;  SWOP

    LOADTEMP();
    SWOP();

    //   570            %finish %ELSE %START

    goto L_0092;
  L_0091:;

  //   571               K = K!!3 %UNLESS K = 3 %OR K = \3

    if (K == 3) goto L_0093;
    if (K == (~3)) goto L_0093;
    K = K ^ 3;
  L_0093:;

  //   572            %FINISH

  L_0092:;

  //   573         %FINISH

  L_0090:;

  //   574         %UNLESS CREG = VAL1 %AND CTYPE = TYPE %AND CVAL = VAL %START

    if (CREG != VAL1) goto L_0094;
    if (CTYPE != TYPE) goto L_0094;
    if (CVAL == VAL) goto L_0095;
  L_0094:;

  //   575            CREG = VAL1;  CTYPE = TYPE;  CVAL = VAL

    CREG = VAL1;
    CTYPE = TYPE;
    CVAL = VAL;

    //   576            %UNLESS TYPE = VAL = 0 %START

    {
// Double-sided test on VAL (Part I)
      int tmp;
      if (TYPE != (tmp = VAL)) goto L_0096;
// Double-sided test on VAL (Part II)
      if (tmp == 0) goto L_0097;
    }
  L_0096:;

  //   577               OP = COMP

    OP = COMP;

    //   578               %IF TYPE = ATYPE %AND VAL = AVAL %START

    if (TYPE != ATYPE) goto L_0098;
    if (VAL != AVAL) goto L_0098;

      //   579                  TYPE = REG;  VAL = ACC

    TYPE = REG;
    VAL = ACC;

    //   580               %FINISH

  L_0098:;

  //   581               %IF TYPE&BMASK # 0 %START

    if (TYPE & BMASK == 0) goto L_0099;

      //   582                  OP = CLB

    OP = CLB;

    //   583                  FAULT('I') %UNLESS K = 3 %OR K = \3

    if (K == 3) goto L_009A;
    if (K == (~3)) goto L_009A;
    FAULT(73);
  L_009A:;

  //   584               %FINISH

  L_0099:;

  //   585            %finish %ELSE %START

    goto L_009B;
  L_0097:;

  //   586               OP = LOAD

    OP = LOAD;

    //   587               TYPE = REG;  VAL = VAL1

    TYPE = REG;
    VAL = VAL1;

    //   588            %FINISH

  L_009B:;

  //   589            PLANT INST(VAL1<<4+OP)

    PLANTINST((VAL1 << 4) + OP);

    //   590         %FINISH

  L_0095:;

  //   591      %FINISH

  L_008F:;
  L_008D:;

  //   592      COND = K

    COND = K;

    //   593      ->GET

    goto U_1001;

    //   594
    //   595  ASS(-12):                             !TEST CC

  case_ASS_M12:;

  //   596      COND = \VAL

    COND = (~VAL);

    //   597      ->GET

    goto U_1001;

    //   598
    //   599  ASS(-13):                             !AND,WHILE

  case_ASS_M13:;

  //   600      %IF MODE > 0 %START

    if (MODE <= 0) goto L_009C;

      //   601         SET JUMP(16_1000)

    SETJUMP(4096);

    //   602      %finish %ELSE %START

    goto L_009D;
  L_009C:;

  //   603         %RETURN %IF COND # 0;          !CONDITION FALSE

    if (COND == 0) goto L_009E;
    return;
  L_009E:;

  //   604      %FINISH

  L_009D:;

  //   605      %RETURN %IF Q = QLIM

    if (Q != QLIM) goto L_009F;
    return;
  L_009F:;

  //   606      ->NEW

    goto U_1000;

    //   607
    //   608  ASS(-14):                             !OR

  case_ASS_M14:;

  //   609      %IF MODE > 0 %START

    if (MODE <= 0) goto L_00A0;

      //   610         COND = \COND

    COND = (~COND);

    //   611         SET JUMP(16_3000)

    SETJUMP(12288);

    //   612      %finish %ELSE %START

    goto L_00A1;
  L_00A0:;

  //   613         %RETURN %IF COND = 0;          !CONDITION TRUE

    if (COND != 0) goto L_00A2;
    return;
  L_00A2:;

  //   614      %FINISH

  L_00A1:;

  //   615      ->NEW

    goto U_1000;

    //   616
    //   617  ASS(-15):                             !IF

  case_ASS_M15:;

  //   618      SET JUMP(16_2000)

    SETJUMP(8192);

    //   619      %RETURN

    return;

    //   620
    //   621  ASS(-16):                             !ELSE

  case_ASS_M16:;

  //   622      COND = \0

    COND = (~0);

    //   623      SET JUMP(16_4000)

    SETJUMP(16384);

    //   624      %RETURN

    return;

    //   625
    //   626  ASS(-17):                             !IF AFTER ELSE

  case_ASS_M17:;

  //   627      SET JUMP(16_6000)

    SETJUMP(24576);

    //   628      %RETURN

    return;

    //   629
    //   630  ASS(-18):                             !MACCALL IF

  case_ASS_M18:;

  //   631      SET JUMP(16_8000)

    SETJUMP(32768);

    //   632      %RETURN

    return;

    //   633
    //   634  ASS(-20):                             !HASH

  case_ASS_M20:;

  //   635      TYPE = TYPE&(UMASK+63)

    TYPE = TYPE & UMASK + 63;

    //   636      ->GET

    goto U_1001;

    //   637
    //   638  ASS(-21):                             !INDEX

  case_ASS_M21:;

  //   639      FAULT('I') %IF TYPE1&REGXMASK # 0

    if (TYPE1 & REGXMASK == 0) goto L_00A3;
    FAULT(73);
  L_00A3:;

  //   640      %IF TYPE&MEMMASK # 0 %START

    if (TYPE & MEMMASK == 0) goto L_00A4;

      //   641         %IF MODE > 0 %START

    if (MODE <= 0) goto L_00A5;

      //   642            ZQUERY = 1

    ZQUERY = 1;

    //   643            LOAD TEMP

    LOADTEMP();

    //   644            ZQUERY = 0

    ZQUERY = 0;

    //   645         %finish %ELSE FAULT('A')

    goto L_00A6;
  L_00A5:;
    FAULT(65);
  L_00A6:;

  //   646      %FINISH

  L_00A4:;

  //   647      %IF TYPE = REG %START

    if (TYPE != REG) goto L_00A7;

      //   648         TYPE = XMASK+VAL;  VAL = 0

    TYPE = XMASK + VAL;
    VAL = 0;

    //   649      %FINISH

  L_00A7:;

  //   650      ZQUERY = 0

    ZQUERY = 0;

    //   651      FAULT('I') %IF TYPE1&TYPE&RELMASK # 0

    if (TYPE1 & TYPE & RELMASK == 0) goto L_00A8;
    FAULT(73);
  L_00A8:;

  //   652      TYPE = TYPE1!TYPE!MEMMASK;  VAL = VAL1+VAL

    TYPE = TYPE1 | TYPE | MEMMASK;
    VAL = VAL1 + VAL;

    //   653      ->POP

    goto U_1004;

    //   654
    //   655  ASS(-22):                             !MINST SEPARATOR

  case_ASS_M22:;

  //   656      %IF TYPE1&OPMASK = 16_7000 %START

    if (TYPE1 & OPMASK != 28672) goto L_00A9;

      //   657         %IF TYPE1&16_10 = 0 %START;    !REG-TYPE INST

    if (TYPE1 & 16 != 0) goto L_00AA;

      //   658            FAULT('I') %IF TYPE # REG

    if (TYPE == REG) goto L_00AB;
    FAULT(73);
  L_00AB:;

  //   659         %finish %ELSE %START

    goto L_00AC;
  L_00AA:;

  //   660            VAL = \VAL %AND VAL1 = VAL1!!16_0100 %IF VAL < 0

    if (VAL >= 0) goto L_00AD;
    VAL = (~VAL);
    VAL1 = VAL1 ^ 256;
  L_00AD:;

  //   661            FAULT('I') %IF TYPE # 0 %OR VAL > 15

    if (TYPE != 0) goto L_00AE;
    if (VAL <= 15) goto L_00AF;
  L_00AE:;
    FAULT(73);
  L_00AF:;

  //   662         %FINISH

  L_00AC:;

  //   663         TYPE = TYPE1+16_8000;  VAL = VAL1&16_FF0F+VAL<<4

    TYPE = TYPE1 + 32768;
    VAL = (VAL1 & 65295) + (VAL << 4);

    //   664      %finish %ELSE %IF TYPE1&OPMASK = 16_F000 %START

    goto L_00B0;
  L_00A9:;
    if (TYPE1 & OPMASK != 61440) goto L_00B1;

      //   665         PROGREF %IF VAL1&16_FC0F = 16_0003; !BAL,BTC,BFC

    if (VAL1 & 64527 != 3) goto L_00B2;
    PROGREF();
  L_00B2:;

  //   666         FORM INST(VAL1)

    FORMINST(VAL1);

    //   667      %finish %ELSE FAULT('I')

    goto L_00B0;
  L_00B1:;
    FAULT(73);
  L_00B0:;

  //   668      ->POP

    goto U_1004;

    //   669
    //   670  ASS(-23):                             !MACHINE INST

  case_ASS_M23:;

  //   671      SET JUMP(16_1000) %IF COND # 0

    if (COND == 0) goto L_00B3;
    SETJUMP(4096);
  L_00B3:;

  //   672      PLANT VAL

    PLANTVAL();

    //   673      CREG = -1;  ATYPE = -1

    CREG = -1;
    ATYPE = -1;

    //   674      %RETURN

    return;

    //   675
    //   676  ASS(-24):                             !LOAD

  case_ASS_M24:;

  //   677      LOAD TEMP %IF TYPE # REG

    if (TYPE == REG) goto L_00B4;
    LOADTEMP();
  L_00B4:;

  //   678      Q = QBASE

    Q = QBASE;

    //   679      ->GET

    goto U_1001;

    //   680
    //   681  ASS(-25):                             !STORE (TYPE1,VAL1 -> TYPE,VAL)

  case_ASS_M25:;

  //   682      %IF TYPE = REG %START

    if (TYPE != REG) goto L_00B5;

      //   683         SWOP %AND LOAD REG(VAL1) %IF VAL1 # VAL

    if (VAL1 == VAL) goto L_00B6;
    SWOP();
    LOADREG(VAL1);
  L_00B6:;

  //   684      %finish %ELSE %START

    goto L_00B7;
  L_00B5:;

  //   685         ATYPE = -1 %IF ATYPE&MEMMASK # 0

    if (ATYPE & MEMMASK == 0) goto L_00B8;
    ATYPE = -1;
  L_00B8:;

  //   686         %IF FLAG = 0 %START

    if (FLAG != 0) goto L_00B9;

      //   687            %IF VAL1 = ACC %AND ATYPE < 0 %START

    if (VAL1 != ACC) goto L_00BA;
    if (ATYPE >= 0) goto L_00BA;

      //   688               K = TYPE&15

    K = TYPE & 15;

    //   689               ATYPE = TYPE %AND AVAL = VAL %IF K = 0 %OR 1<<K&TEMPS = 0

    if (K == 0) goto L_00BB;
    if (1 << K & TEMPS != 0) goto L_00BC;
  L_00BB:;
    ATYPE = TYPE;
    AVAL = VAL;
  L_00BC:;

  //   690            %FINISH

  L_00BA:;

  //   691            OP = STORE;  OP = STB %IF TYPE&BMASK # 0

    OP = STORE;
    if (TYPE & BMASK == 0) goto L_00BD;
    OP = STB;
  L_00BD:;

  //   692         %finish %ELSE %START

    goto L_00BE;
  L_00B9:;

  //   693            CREG = 16;  CTYPE = TYPE;  CVAL = VAL

    CREG = 16;
    CTYPE = TYPE;
    CVAL = VAL;

    //   694            OP = AHM

    OP = AHM;

    //   695         %FINISH

  L_00BE:;

  //   696         PLANT INST(VAL1<<4+OP)

    PLANTINST((VAL1 << 4) + OP);

    //   697      %FINISH

  L_00B7:;

  //   698      %RETURN

    return;

    //   699
    //   700  ASS(-26):                             !JUMP

  case_ASS_M26:;

  //   701      SET JUMP(16_1000) %IF INTEGER(NP)&16_F000 = 16_3000; !OR

    if (INTEGER(NP) & 61440 != 12288) goto L_00BF;
    SETJUMP(4096);
  L_00BF:;

  //   702      %IF FLAG < 0 %START;              !REPEAT

    if (FLAG >= 0) goto L_00C0;

      //   703         FLAG = 0

    FLAG = 0;

    //   704         %IF PASS = 0 %START

    if (PASS != 0) goto L_00C1;

      //   705            K = NP;  LITVAL = LOC

    K = NP;
    LITVAL = LOC;

    //   706            %WHILE INTEGER(K)&16_1000 # 0 %CYCLE

  L_00C2:;
    if (INTEGER(K) & 4096 == 0) goto L_00C3;

      //   707               K = K+2;  LITVAL = LITVAL-2

    K = K + 2;
    LITVAL = LITVAL - 2;

    //   708            %REPEAT

    goto L_00C2;
  L_00C3:;

  //   709            FLAG = 1 %IF LITVAL-VAL < 32

    if (LITVAL - VAL >= 32) goto L_00C4;
    FLAG = 1;
  L_00C4:;

  //   710         %FINISH

  L_00C1:;

  //   711      %FINISH

  L_00C0:;

  //   712      PROGREF

    PROGREF();

    //   713      PLANT JUMP

    PLANTJUMP();

    //   714      %RETURN

    return;

    //   715
    //   716  %END;  !ASSEMBLE

  case_ASS_dispatch:
    if (ASS_index < -30 || ASS_index > -1)
      _imp_signalf(6, 3, ASS_index, "->ASS(%d) out of bounds at %s line %d", ASS_index, ASS_file, ASS_line);
    goto *ASS[ASS_index - -30];

  case_ASS_missing:
    _imp_signalf(8, 2, ASS_index, "switch jump to undefined label ASS(%d): at %s line %d", ASS_index, ASS_file,
                 ASS_line);
  } /* end of ASSEMBLE */

  //   717
  //   718  %ROUTINE LOOKUP(%INTEGER CONTROL)

  void LOOKUP(int CONTROL) {
    //   719  !ALL DICT OPERATIONS LOCALISED HERE
    //   720  !CONTROL = 0 (LOOKUP ONLY), 1 (FORWARD OK),
    //   721  !          2 (REDEF), 3 (DEF),
    //   722  !          4 (MACPARM), 7 (LABEL)
    //   723  %INTEGER DP

    int DP;

    //   724      DP = DEFMIN;  DP = MP+5 %IF CONTROL = 4

    DP = DEFMIN;
    if (CONTROL != 4) goto L_00C5;
    DP = MP + 5;
  L_00C5:;

  //   725
  //   726  {}    %WHILE INTEGER(DP) # 0 %CYCLE

  L_00C6:;
    if (INTEGER(DP) == 0) goto L_00C7;

      //   727  {}       ->YES %IF INTEGER(DP) = TAG1 %AND INTEGER(DP+1) = TAG2

    if (INTEGER(DP) != TAG1) goto L_00C8;
    if (INTEGER(DP + 1) != TAG2) goto L_00C8;
    goto U_1005;
  L_00C8:;

  //   728  {}       DP = DP+4

    DP = DP + 4;

    //   729  {}    %REPEAT

    goto L_00C6;
  L_00C7:;

  //   730
  //   731  !!%OWNINTEGER P
  //   732  !!    DP = DP-4
  //   733  !!REP:DP = DP+4
  //   734  !!    %LAC* DP; %OPR 640;!SNA; %JMP NO
  //   735  !!    %SAD TAG1; %OPR 512; %JMP REP
  //   736  !!    %LAC DP; %TAD #1; %DAC P
  //   737  !!    %LAC* P; %SAD TAG2; %JMP YES
  //   738  !!    ->REP
  //   739  !!NO:
  //   740      %RETURN %IF CONTROL&1 = 0;        !NO CREATION

    if (CONTROL & 1 != 0) goto L_00C9;
    return;
  L_00C9:;

  //   741  NEW:DEFMIN = DEFMIN-4;  DP = DEFMIN

  U_1006:;
    DEFMIN = DEFMIN - 4;
    DP = DEFMIN;

    //   742  !!    %MONITOR 21 %IF DP-QLIM <= 0
    //   743      !{}%signal 2,1 %IF DP-QLIM <= 0
    //   744  !!    INTEGER(DP) = TAG1;  INTEGER(DP+1) = TAG2
    //   745      set INTEGER(DP, TAG1);  set INTEGER(DP+1,  TAG2)

    SETINTEGER(DP, TAG1);
    SETINTEGER(DP + 1, TAG2);

    //   746  !!SET:INTEGER(DP+2) = TYPE;  INTEGER(DP+3) = VAL
    //   747  SET:set INTEGER(DP+2, TYPE);  set INTEGER(DP+3, VAL)

  U_1007:;
    SETINTEGER(DP + 2, TYPE);
    SETINTEGER(DP + 3, VAL);

    //   748      %RETURN

    return;

    //   749  YES:%IF CONTROL&2 = 0 %START;         !NOT DEF CLASS

  U_1005:;
    if (CONTROL & 2 != 0) goto L_00CA;

      //   750         TYPE = INTEGER(DP+2);  VAL = INTEGER(DP+3)

    TYPE = INTEGER(DP + 2);
    VAL = INTEGER(DP + 3);

    //   751         %RETURN

    return;

    //   752      %FINISH

  L_00CA:;

  //   753      %IF CONTROL = 3 %START

    if (CONTROL != 3) goto L_00CB;

      //   754         ->NEW %IF DP-INTEGER(BP) >= 0; !GLOBAL

    if (DP - INTEGER(BP) < 0) goto L_00CC;
    goto U_1006;
  L_00CC:;

  //   755         FAULT('D')

    FAULT(68);

    //   756      %FINISH

  L_00CB:;

  //   757      ->SET %IF CONTROL # 7

    if (CONTROL == 7) goto L_00CD;
    goto U_1007;
  L_00CD:;

  //   758      %IF INTEGER(DP+2)&OPFMASK = FMASK %START

    if (INTEGER(DP + 2) & OPFMASK != FMASK) goto L_00CE;

      //   759         VAL = INTEGER(DP+3)

    VAL = INTEGER(DP + 3);

    //   760         %IF PASS = 0 %START

    if (PASS != 0) goto L_00CF;

      //   761  !!          INTEGER(VAL) = LOC
      //   762            set INTEGER(VAL, LOC)

    SETINTEGER(VAL, LOC);

    //   763         %finish %ELSE %START

    goto L_00D0;
  L_00CF:;

  //   764            FAULT('P') %AND LOC=INTEGER(VAL) %IF INTEGER(VAL) # LOC

    if (INTEGER(VAL) == LOC) goto L_00D1;
    FAULT(80);
    LOC = INTEGER(VAL);
  L_00D1:;

  //   765         %FINISH

  L_00D0:;

  //   766         VAL = LOC

    VAL = LOC;

    //   767      %finish %ELSE %START

    goto L_00D2;
  L_00CE:;

  //   768         ->NEW %IF DP-INTEGER(BP) >= 0

    if (DP - INTEGER(BP) < 0) goto L_00D3;
    goto U_1006;
  L_00D3:;

  //   769         FAULT('D')

    FAULT(68);

    //   770      %FINISH

  L_00D2:;

  //   771      ->SET

    goto U_1007;

    //   772  %END

  } /* end of LOOKUP */

  //   773
  //   774  %ROUTINE TAGREF

  void TAGREF(void) {
    //   775  %OWNINTEGER B=2184, W=24717

    static int B = 2184;
    static int W = 24717;

    //   776      %IF TERM = '(' %START

    if (TERM != 40) goto L_00D4;

      //   777         TYPE = 0;  VAL = 0

    TYPE = 0;
    VAL = 0;

    //   778         %RETURN %IF TAG1 = W

    if (TAG1 != W) goto L_00D5;
    return;
  L_00D5:;

  //   779         TYPE = BMASK

    TYPE = BMASK;

    //   780         %RETURN %IF TAG1 = B

    if (TAG1 != B) goto L_00D6;
    return;
  L_00D6:;

  //   781      %FINISH

  L_00D4:;

  //   782      TYPE = LOCTYPE+FMASK+UMASK;  VAL = LABMIN-1

    TYPE = LOCTYPE + FMASK + UMASK;
    VAL = LABMIN - 1;

    //   783      LOOKUP(1)

    LOOKUP(1);

    //   784      %IF TYPE&OPFMASK = FMASK %START

    if (TYPE & OPFMASK != FMASK) goto L_00D7;

      //   785         %IF VAL = LABMIN-1 %START

    if (VAL != LABMIN - 1) goto L_00D8;

      //   786  !!          LABMIN = VAL;  %MONITOR 22 %IF LABMIN = ALMAX
      //   787            LABMIN = VAL;  !{}%signal 2,2 %IF LABMIN = ALMAX

    LABMIN = VAL;

    //   788         %FINISH

  L_00D8:;

  //   789         %IF PASS > 0 %START

    if (PASS <= 0) goto L_00D9;

      //   790            VAL = INTEGER(VAL)

    VAL = INTEGER(VAL);

    //   791            FAULT('U') %IF VAL = 0

    if (VAL != 0) goto L_00DA;
    FAULT(85);
  L_00DA:;

  //   792         %FINISH

  L_00D9:;

  //   793         TYPE = TYPE-FMASK

    TYPE = TYPE - FMASK;

    //   794      %FINISH

  L_00D7:;

  //   795  %END

    return;
  } /* end of TAGREF */

  //   796
  //   797  %ROUTINE GET SYM

  void GETSYM(void) {
    //   798      %CYCLE

  L_00DB:;

  //   799         SYM = CHAR(GETPOS);  GETPOS = GETPOS+1

    SYM = CHAR(GETPOS);
    GETPOS = GETPOS + 1;

    //   800         %RETURN %IF SYM # ' '

    if (SYM == 32) goto L_00DC;
    return;
  L_00DC:;

  //   801      %REPEAT

    goto L_00DB;

    //   802  %END

  } /* end of GETSYM */

  //   803
  //   804  %PREDICATE S(%INTEGER K)

  int S(int K) {
    //   805      %FALSE %UNLESS K = SYM

    if (K == SYM) goto L_00DD;
    return 0 /*FALSE*/;
  L_00DD:;

  //   806      GET SYM

    GETSYM();

    //   807      %TRUE

    return 1 /*TRUE*/;

    //   808  %END

  } /* end of S */

  //   809
  //   810  %PREDICATE SS(%INTEGER K)

  int SS(int K) {
    //   811      %FALSE %UNLESS K = SYM = CHAR(GETPOS)

    {
// Double-sided test on SYM (Part I)
      int tmp;
      if (K != (tmp = SYM)) goto L_00DE;
// Double-sided test on SYM (Part II)
      if (tmp == CHAR(GETPOS)) goto L_00DF;
    }
  L_00DE:;
    return 0 /*FALSE*/;
  L_00DF:;

  //   812      GETPOS = GETPOS+1

    GETPOS = GETPOS + 1;

    //   813      GET SYM

    GETSYM();

    //   814      %TRUE

    return 1 /*TRUE*/;

    //   815  %END

  } /* end of SS */

  //   816
  //   817  %PREDICATE TAG

  int TAG(void) {
    //   818  %INTEGER J,K

    int J;
    int K;

    //   819      %ROUTINE CODE SYM

    void CODESYM(void) {
      //   820         SYM = CHAR(GETPOS);  GETPOS = GETPOS+1

      SYM = CHAR(GETPOS);
      GETPOS = GETPOS + 1;

      //   821         K = SYM-'0'

      K = SYM - 48;

      //   822         %IF K >= 0 %START

      if (K < 0) goto L_00E0;

        //   823            TERM = -1 %AND %RETURN %IF K < 10

      if (K >= 10) goto L_00E1;
      TERM = -1;
      return;
    L_00E1:;

    //   824            K = SYM-'A'

      K = SYM - 65;

      //   825            %RETURN %IF K >= 0 %AND K < 26 %AND TERM = 0

      if (K < 0) goto L_00E2;
      if (K >= 26) goto L_00E2;
      if (TERM != 0) goto L_00E2;
      return;
    L_00E2:;

    //   826         %FINISH

    L_00E0:;

    //   827         TERM = SYM

      TERM = SYM;

      //   828      %END

      return;
    } /* end of CODESYM */

    //   829      %ROUTINE PACK TRIPLE

    void PACKTRIPLE(void) {
      //   830         ->T1 %IF TERM < 0

      if (TERM >= 0) goto L_00E3;
      goto U_1008;
    L_00E3:;

    //   831         J = ((K<<5+K)<<1+K)<<4+K+1111; !K*1073+1111

      J = (((K << 5) + K << 1) + K << 4) + K + 1111;

      //   832         CODE SYM

      CODESYM();

      //   833         ->T2 %IF TERM # 0

      if (TERM == 0) goto L_00E4;
      goto U_1009;
    L_00E4:;

    //   834         J = (K<<3+K)<<2+K+111+J;       !J+K*37+111

      J = ((K << 3) + K << 2) + K + 111 + J;

      //   835         CODE SYM

      CODESYM();

      //   836         ->T3 %IF TERM # 0

      if (TERM == 0) goto L_00E5;
      goto U_100A;
    L_00E5:;

    //   837         J = J+K+11

      J = J + K + 11;

      //   838         CODE SYM

      CODESYM();

      //   839         %RETURN

      return;

      //   840  T1:    J = ((K<<1+K)<<1+K)<<4-K+1;    !K*111+1

    U_1008:;
      J = (((K << 1) + K << 1) + K << 4) - K + 1;

      //   841         CODE SYM

      CODESYM();

      //   842  T2:    %RETURN %IF TERM > 0

    U_1009:;
      if (TERM <= 0) goto L_00E6;
      return;
    L_00E6:;

    //   843         J = (K<<2+K)<<1+K+1+J;         !J+K*11+1

      J = ((K << 2) + K << 1) + K + 1 + J;

      //   844         CODE SYM

      CODESYM();

      //   845  T3:    %RETURN %IF TERM > 0

    U_100A:;
      if (TERM <= 0) goto L_00E7;
      return;
    L_00E7:;

    //   846         J = J+K+1

      J = J + K + 1;

      //   847         CODE SYM

      CODESYM();

      //   848      %END

      return;
    } /* end of PACKTRIPLE */

    //   849      K = SYM-'A'

    K = SYM - 65;

    //   850      %FALSE %UNLESS K >= 0 %AND K < 26

    if (K < 0) goto L_00E8;
    if (K < 26) goto L_00E9;
  L_00E8:;
    return 0 /*FALSE*/;
  L_00E9:;

  //   851      %FALSE %IF SYM = 'X' %AND CHAR(GETPOS)&128 # 0

    if (SYM != 88) goto L_00EA;
    if (CHAR(GETPOS) & 128 == 0) goto L_00EA;
    return 0 /*FALSE*/;
  L_00EA:;

  //   852      TERM = 0

    TERM = 0;

    //   853      PACK TRIPLE

    PACKTRIPLE();

    //   854      TAG1 = J

    TAG1 = J;

    //   855      %CYCLE

  L_00EB:;

  //   856         J = 0

    J = 0;

    //   857         PACK TRIPLE %IF TERM <= 0

    if (TERM > 0) goto L_00EC;
    PACKTRIPLE();
  L_00EC:;

  //   858         TAG2 = J

    TAG2 = J;

    //   859         CODE SYM %WHILE TERM <= 0

  L_00ED:;
    if (TERM > 0) goto L_00EE;
    CODESYM();
    goto L_00ED;
  L_00EE:;

  //   860         %EXIT %UNLESS TERM = QQ

    if (TERM == QQ) goto L_00EF;
    goto L_00F0;
  L_00EF:;

  //   861         TYPE = 1;  LOOKUP(0)

    TYPE = 1;
    LOOKUP(0);

    //   862         FAULT('U') %IF TYPE # 0

    if (TYPE == 0) goto L_00F1;
    FAULT(85);
  L_00F1:;

  //   863         TAG1 = VAL

    TAG1 = VAL;

    //   864         TERM = 0;  CODE SYM

    TERM = 0;
    CODESYM();

    //   865      %REPEAT

    goto L_00EB;
  L_00F0:;

  //   866      GET SYM %IF TERM = ' '

    if (TERM != 32) goto L_00F2;
    GETSYM();
  L_00F2:;

  //   867      %TRUE

    return 1 /*TRUE*/;

    //   868  %END

  } /* end of TAG */

  //   869
  //   870  %PREDICATE TAGIF

  int TAGIF(void) {
    //   871      %FALSE %UNLESS SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' '

    if (SYM != 73) goto L_00F3;
    if (CHAR(GETPOS) != 70) goto L_00F3;
    if (CHAR(GETPOS + 1) == 32) goto L_00F4;
  L_00F3:;
    return 0 /*FALSE*/;
  L_00F4:;

  //   872      GETPOS = GETPOS+2

    GETPOS = GETPOS + 2;

    //   873      GET SYM

    GETSYM();

    //   874      %TRUE

    return 1 /*TRUE*/;

    //   875  %END

  } /* end of TAGIF */

  //   876
  //   877  %ROUTINE QUEUE(%INTEGER K)

  void QUEUE(int K) {
    //   878  !!    INTEGER(QLIM) = K
    //   879      set INTEGER(QLIM, K)

    SETINTEGER(QLIM, K);

    //   880  !!    QLIM = QLIM+1;  %MONITOR 21 %IF QLIM = DEFMIN
    //   881      QLIM = QLIM+1;  !{}%signal 2,1 %IF QLIM = DEFMIN

    QLIM = QLIM + 1;

    //   882  %END

    return;
  } /* end of QUEUE */

  //   883
  //   884  %ROUTINE GET EXP

  void GETEXP(void) {
    //   885  %INTEGER I,NBASE

    int I;
    int NBASE;

    //   886
    //   887      NBASE = NP

    NBASE = NP;

    //   888      ->E3 %IF PEND # 0

    if (PEND == 0) goto L_00F5;
    goto U_1009;
  L_00F5:;

  //   889  E1: NEST(0) %WHILE S('(')

  U_100A:;
  L_00F6:;
    if (!(S(40))) goto L_00F7;
    NEST(0);
    goto L_00F6;
  L_00F7:;

  //   890      NEST(-20) %IF S('#')

    if (!(S(35))) goto L_00F8;
    NEST(-20);
  L_00F8:;

  //   891      %IF TAG %START

    if (!(TAG())) goto L_00F9;

      //   892  E3:    TAGREF %IF PEND >= 0

  U_1009:;
    if (PEND < 0) goto L_00FA;
    TAGREF();
  L_00FA:;

  //   893         PEND = 0

    PEND = 0;

    //   894         %IF TYPE = REG %AND TERM = '(' %START

    if (TYPE != REG) goto L_00FB;
    if (TERM != 40) goto L_00FB;

      //   895            TYPE = 0 %IF SAVE&1 = 0;  VAL = VAL+VAL+SAVE

    if (SAVE & 1 != 0) goto L_00FC;
    TYPE = 0;
  L_00FC:;
    VAL = VAL + VAL + SAVE;

    //   896         %FINISH

  L_00FB:;

  //   897         FAULT('I') %AND TYPE=0 %IF TYPE&OPMASK # 0

    if (TYPE & OPMASK == 0) goto L_00FD;
    FAULT(73);
    TYPE = 0;
  L_00FD:;

  //   898         %IF MODE # 0 %START

    if (MODE == 0) goto L_00FE;

      //   899            %IF TYPE&REGXMASK # 0 %START

    if (TYPE & REGXMASK == 0) goto L_00FF;

      //   900               I = TYPE&15;  I = VAL %IF I = 0

    I = TYPE & 15;
    if (I != 0) goto L_0100;
    I = VAL;
  L_0100:;

  //   901               DUSE = DUSE+1 %IF I = DREG

    if (I != DREG) goto L_0101;
    DUSE = DUSE + 1;
  L_0101:;

  //   902            %FINISH

  L_00FF:;

  //   903         %FINISH

  L_00FE:;

  //   904         %IF TERM = '(' %START

    if (TERM != 40) goto L_0102;

      //   905            GET SYM

    GETSYM();

    //   906            I = TYPE&31

    I = TYPE & 31;

    //   907            QUEUE(TYPE-I);  QUEUE(VAL)

    QUEUE(TYPE - I);
    QUEUE(VAL);

    //   908            NEST(-21);  NEST(0)

    NEST(-21);
    NEST(0);

    //   909            %IF I # 0 %START

    if (I == 0) goto L_0103;

      //   910               QUEUE(REG);  QUEUE(I&15)

    QUEUE(REG);
    QUEUE(I & 15);

    //   911               NEST(-1)

    NEST(-1);

    //   912            %FINISH

  L_0103:;

  //   913            ->E1

    goto U_100A;

    //   914         %FINISH

  L_0102:;

  //   915      %finish %ELSE %IF '0' <= SYM <= '9' %START

    goto L_0104;
  L_00F9:;
    {
// Double-sided test on SYM (Part I)
      int tmp;
      if (48 > (tmp = SYM)) goto L_0105;
// Double-sided test on SYM (Part II)
      if (tmp > 57) goto L_0105;
    }

    //   916         TYPE = 0;  VAL = SYM-'0'

    TYPE = 0;
    VAL = SYM - 48;

    //   917         %CYCLE

  L_0106:;

  //   918            SYM = CHAR(GETPOS)-'0'

    SYM = CHAR(GETPOS) - 48;

    //   919            %EXIT %UNLESS 0 <= SYM <= 9

    {
// Double-sided test on SYM (Part I)
      int tmp;
      if (0 > (tmp = SYM)) goto L_0107;
// Double-sided test on SYM (Part II)
      if (tmp <= 9) goto L_0108;
    }
  L_0107:;
    goto L_0109;
  L_0108:;

  //   920            VAL = (VAL<<2+VAL)<<1+SYM

    VAL = ((VAL << 2) + VAL << 1) + SYM;

    //   921            GETPOS = GETPOS+1

    GETPOS = GETPOS + 1;

    //   922         %REPEAT

    goto L_0106;
  L_0109:;

  //   923         GET SYM

    GETSYM();

    //   924      %finish %ELSE %IF SYM = 'X' %START

    goto L_0104;
  L_0105:;
    if (SYM != 88) goto L_010A;

      //   925         TYPE = 0;  VAL = 0

    TYPE = 0;
    VAL = 0;

    //   926         %CYCLE

  L_010B:;

  //   927            SYM = CHAR(GETPOS)-128

    SYM = CHAR(GETPOS) - 128;

    //   928            %EXIT %IF SYM < 0

    if (SYM >= 0) goto L_010C;
    goto L_010D;
  L_010C:;

  //   929            SYM = SYM-32 %IF SYM >= 96; !ENSURE UPPER-CASE

    if (SYM < 96) goto L_010E;
    SYM = SYM - 32;
  L_010E:;

  //   930            %IF '0' <= SYM <= '9' %OR 'A' <= SYM <= 'F' %START

    {
// Double-sided test on SYM (Part I)
      int tmp;
      if (48 > (tmp = SYM)) goto L_010F;
// Double-sided test on SYM (Part II)
      if (tmp <= 57) goto L_0110;
    }
  L_010F:;
    {
// Double-sided test on SYM (Part I)
      int tmp;
      if (65 > (tmp = SYM)) goto L_0111;
// Double-sided test on SYM (Part II)
      if (tmp > 70) goto L_0111;
    }
  L_0110:;

  //   931               VAL = VAL<<4+SYM-'0'

    VAL = (VAL << 4) + SYM - 48;

    //   932               VAL = VAL-7 %IF SYM >= 'A'

    if (SYM < 65) goto L_0112;
    VAL = VAL - 7;
  L_0112:;

  //   933            %finish %ELSE FAULT('H')

    goto L_0113;
  L_0111:;
    FAULT(72);
  L_0113:;

  //   934            GETPOS = GETPOS+1

    GETPOS = GETPOS + 1;

    //   935         %REPEAT

    goto L_010B;
  L_010D:;

  //   936         GET SYM

    GETSYM();

    //   937      %finish %ELSE %IF SYM&128 # 0 %START

    goto L_0104;
  L_010A:;
    if (SYM & 128 == 0) goto L_0114;

      //   938         TYPE = 0;  VAL = SYM-128

    TYPE = 0;
    VAL = SYM - 128;

    //   939         GET SYM

    GETSYM();

    //   940         %IF MODE >= 0 %AND SYM&128 # 0 %START

    if (MODE < 0) goto L_0115;
    if (SYM & 128 == 0) goto L_0115;

      //   941            VAL = VAL<<8+SYM-128;  GET SYM

    VAL = (VAL << 8) + SYM - 128;
    GETSYM();

    //   942         %FINISH

  L_0115:;

  //   943      %finish %ELSE %IF S('.') %START

    goto L_0104;
  L_0114:;
    if (!(S(46))) goto L_0116;

      //   944         ->ERR %IF %NOT TAG

    if (TAG()) goto L_0117;
    goto U_100B;
  L_0117:;

  //   945         TYPE = 0;  VAL = TAG1

    TYPE = 0;
    VAL = TAG1;

    //   946      %finish %ELSE %IF S('*') %START

    goto L_0104;
  L_0116:;
    if (!(S(42))) goto L_0118;

      //   947         TYPE = LOCTYPE&63;  VAL = LOC

    TYPE = LOCTYPE & 63;
    VAL = LOC;

    //   948         %IF SYM = 'L' %START;          !FOR NOW

    if (SYM != 76) goto L_0119;

      //   949            TYPE = 0;  VAL = LIST %IF TAG

    TYPE = 0;
    if (!(TAG())) goto L_011A;
    VAL = LIST;
  L_011A:;

  //   950         %FINISH

  L_0119:;

  //   951      %finish %ELSE %IF SYM = '-' %START

    goto L_0104;
  L_0118:;
    if (SYM != 45) goto L_011B;

      //   952         TYPE = 0;  VAL = 0

    TYPE = 0;
    VAL = 0;

    //   953      %finish %ELSE %IF SYM = '\' %START

    goto L_0104;
  L_011B:;
    if (SYM != 92) goto L_011C;

      //   954         TYPE = 0;  VAL = \0

    TYPE = 0;
    VAL = (~0);

    //   955      %finish %ELSE ->ERR

    goto L_0104;
  L_011C:;
    goto U_100B;
  L_0104:;

  //   956      QUEUE(TYPE);  QUEUE(VAL)

    QUEUE(TYPE);
    QUEUE(VAL);

    //   957
    //   958      %WHILE NP # NBASE %CYCLE

  L_011D:;
    if (NP == NBASE) goto L_011E;

      //   959         %IF INTEGER(NP) < 0 %START

    if (INTEGER(NP) >= 0) goto L_011F;

      //   960            QUEUE(INTEGER(NP))

    QUEUE(INTEGER(NP));

    //   961         %finish %ELSE %START

    goto L_0120;
  L_011F:;

  //   962            %EXIT %IF %NOT S(')')

    if (S(41)) goto L_0121;
    goto L_011E;
  L_0121:;

  //   963         %FINISH

  L_0120:;

  //   964         NP = NP+1

    NP = NP + 1;

    //   965      %REPEAT

    goto L_011D;
  L_011E:;

  //   966
  //   967      I = 1

    I = 1;

    //   968      NEST(-1) %AND ->E8 %IF S('+')

    if (!(S(43))) goto L_0122;
    NEST(-1);
    goto U_100C;
  L_0122:;

  //   969      NEST(-2) %AND ->E8 %IF S('-')

    if (!(S(45))) goto L_0123;
    NEST(-2);
    goto U_100C;
  L_0123:;

  //   970      NEST(-3) %AND ->E9 %IF S('&')

    if (!(S(38))) goto L_0124;
    NEST(-3);
    goto U_100D;
  L_0124:;

  //   971      NEST(-4) %AND ->E9 %IF S('!')

    if (!(S(33))) goto L_0125;
    NEST(-4);
    goto U_100D;
  L_0125:;

  //   972      NEST(-5) %AND ->E9 %IF S('\')

    if (!(S(92))) goto L_0126;
    NEST(-5);
    goto U_100D;
  L_0126:;

  //   973      NEST(-6) %AND ->E9 %IF SS('<')

    if (!(SS(60))) goto L_0127;
    NEST(-6);
    goto U_100D;
  L_0127:;

  //   974      NEST(-7) %AND ->E9 %IF SS('>')

    if (!(SS(62))) goto L_0128;
    NEST(-7);
    goto U_100D;
  L_0128:;

  //   975      NEST(-8) %AND ->E9 %IF S('_')

    if (!(S(95))) goto L_0129;
    NEST(-8);
    goto U_100D;
  L_0129:;

  //   976      %RETURN %IF NP = NBASE

    if (NP != NBASE) goto L_012A;
    return;
  L_012A:;

  //   977  ERR:NP = NBASE

  U_100B:;
    NP = NBASE;

    //   978  !!    %MONITOR 19
    //   979
    //   980  E8: I = 0

  U_100C:;
    I = 0;

    //   981  E9: ->E1 %UNLESS MODE = 2 %AND NP+1 = NBASE

  U_100D:;
    if (MODE != 2) goto L_012B;
    if (NP + 1 == NBASE) goto L_012C;
  L_012B:;
    goto U_100A;
  L_012C:;

  //   982      %IF FLAG = I %THEN FLAG = QLIM %ELSE FLAG = -1

    if (FLAG != I) goto L_012D;
    FLAG = QLIM;
    goto L_012E;
  L_012D:;
    FLAG = -1;
  L_012E:;

  //   983      ->E1

    goto U_100A;

    //   984  %END

  } /* end of GETEXP */

  //   985
  //   986  %ROUTINE CONDIT(%INTEGER QVAL)

  void CONDIT(int QVAL) {
    //   987  %OWNINTEGER AND=1717, OR=16873

    static int AND = 1717;
    static int OR = 16873;

    //   988  %INTEGER J,K

    int J;
    int K;

    //   989      TRANSF = QSTART;  QSTART = QLIM

    TRANSF = QSTART;
    QSTART = QLIM;

    //   990      J = 0

    J = 0;

    //   991      %CYCLE

  L_012F:;

  //   992         GET EXP

    GETEXP();

    //   993         %IF S('=') %START

    if (!(S(61))) goto L_0130;

      //   994            K = 3

    K = 3;

    //   995         %finish %ELSE %IF S('#') %START

    goto L_0131;
  L_0130:;
    if (!(S(35))) goto L_0132;

      //   996            K = \3

    K = (~3);

    //   997         %finish %ELSE %IF S('<') %START

    goto L_0131;
  L_0132:;
    if (!(S(60))) goto L_0133;

      //   998            K = \1;  K = 2 %IF S('=')

    K = (~1);
    if (!(S(61))) goto L_0134;
    K = 2;
  L_0134:;

  //   999         %finish %ELSE %IF S('>') %START

    goto L_0131;
  L_0133:;
    if (!(S(62))) goto L_0135;

      //  1000            K = \2;  K = 1 %IF S('=')

    K = (~2);
    if (!(S(61))) goto L_0136;
    K = 1;
  L_0136:;

  //  1001         %finish %ELSE %START

    goto L_0131;
  L_0135:;

  //  1002            QUEUE(-12)

    QUEUE(-12);

    //  1003            ->ANDOR

    goto U_100D;

    //  1004         %FINISH

  L_0131:;

  //  1005         GET EXP

    GETEXP();

    //  1006         QUEUE(-11);  QUEUE(K)

    QUEUE(-11);
    QUEUE(K);

    //  1007  ANDOR:

  U_100D:;

  //  1008         %EXIT %IF %NOT TAG

    if (TAG()) goto L_0137;
    goto L_0138;
  L_0137:;

  //  1009         %IF TAG1 = AND %AND TAG2 = 0 %START

    if (TAG1 != AND) goto L_0139;
    if (TAG2 != 0) goto L_0139;

      //  1010  !!          %MONITOR 19 %IF J < 0
      //  1011            J = 1;  QUEUE(-13)

    J = 1;
    QUEUE(-13);

    //  1012         %finish %ELSE %START

    goto L_013A;
  L_0139:;

  //  1013  !!          %MONITOR 19 %IF TAG1 # OR %OR J > 0
  //  1014            J = -1;  QUEUE(-14)

    J = -1;
    QUEUE(-14);

    //  1015         %FINISH

  L_013A:;

  //  1016      %REPEAT

    goto L_012F;
  L_0138:;

  //  1017      QUEUE(QVAL) %IF QVAL # 0

    if (QVAL == 0) goto L_013B;
    QUEUE(QVAL);
  L_013B:;

  //  1018      ASSEMBLE

    ASSEMBLE();

    //  1019      ATYPE=-1 %AND CREG=-1 %IF J < 0

    if (J >= 0) goto L_013C;
    ATYPE = -1;
    CREG = -1;
  L_013C:;

  //  1020  %END

    return;
  } /* end of CONDIT */

  // ?OR unused
  //  1021
  //  1022  %ROUTINE GET INST

  void GETINST(void) {
    //  1023  %INTEGER I

    int I;

    //  1024  !OPMASK VALUES
    //  1025  !    0100,0110,1100,1101,1110: DOUBLE WORD INSTRUCTIONS
    //  1026  !    1011,1001,0011,0010,0001: AS ABOVE BUT RELOCATABLE
    //  1027  !    0101: SINGLE WORD INSTRUCTION
    //  1028  !    0111: 2 OPERANDS TO COME
    //  1029  !    1111: 1 OPERAND TO COME
    //  1030  !    1010: MACRO
    //  1031      QUEUE(TYPE);  QUEUE(VAL)

    QUEUE(TYPE);
    QUEUE(VAL);

    //  1032      %RETURN %IF TYPE&16_7000 # 16_7000

    if (TYPE & 28672 == 28672) goto L_013D;
    return;
  L_013D:;

  //  1033      %RETURN %IF TERM # ' ';           !NO OPERAND FOLLOWING =>

    if (TERM == 32) goto L_013E;
    return;
  L_013E:;

  //  1034      %CYCLE

  L_013F:;

  //  1035         GET EXP

    GETEXP();

    //  1036         QUEUE(-22)

    QUEUE(-22);

    //  1037         %RETURN %IF %NOT S(',')

    if (S(44)) goto L_0140;
    return;
  L_0140:;

  //  1038      %REPEAT

    goto L_013F;

    //  1039  %END

  } /* end of GETINST */

  // ?I unused
  //  1040
  //  1041  %ROUTINE READ LINE

  void READLINE(void) {
    //  1042  %INTEGER Q

    int Q;

    //  1043      PUTPOS = STARTPOS

    PUTPOS = STARTPOS;

    //  1044      %IF MP = 0 %START

    if (MP != 0) goto L_0141;

      //  1045         Q = 0;  PSEUDOLIM = 0

    Q = 0;
    PSEUDOLIM = 0;

    //  1046         %CYCLE

  L_0142:;

  //  1047            READ SYMBOL(SYM)

    _imp_READSYMBOL(/*?*/ &SYM);

    //  1048            READ SYMBOL(SYM) %AND Q=Q!!128 %IF SYM = ''''

    if (SYM != 39) goto L_0143;
    _imp_READSYMBOL(/*?*/ &SYM);
    Q = Q ^ 128;
  L_0143:;

  //  1049            %EXIT %IF SYM = NL

    if (SYM != 10) goto L_0144;
    goto L_0145;
  L_0144:;

  //  1050            SYM = SYM-32 %IF SYM-Q >= 96; !LOWER-CASE -> UPPER-CASE

    if (SYM - Q < 96) goto L_0146;
    SYM = SYM - 32;
  L_0146:;

  //  1051            SYM = SYM+Q

    SYM = SYM + Q;

    //  1052            %EXIT %IF SYM = '/' %AND PSEUDOLIM # 0

    if (SYM != 47) goto L_0147;
    if (PSEUDOLIM == 0) goto L_0147;
    goto L_0145;
  L_0147:;

  //  1053            %IF SYM = ' ' %START

    if (SYM != 32) goto L_0148;

      //  1054               PSEUDOLIM = PUTPOS %IF PSEUDOLIM = 0

    if (PSEUDOLIM != 0) goto L_0149;
    PSEUDOLIM = PUTPOS;
  L_0149:;

  //  1055            %finish %ELSE PSEUDOLIM = 0

    goto L_014A;
  L_0148:;
    PSEUDOLIM = 0;
  L_014A:;

  //  1056            PUT CHAR(SYM)

    PUTCHAR(SYM);

    //  1057         %REPEAT

    goto L_0142;
  L_0145:;

  //  1058         %IF PSEUDOLIM # 0 %START

    if (PSEUDOLIM == 0) goto L_014B;

      //  1059            Q = PUTPOS;  PUTPOS = PSEUDOLIM

    Q = PUTPOS;
    PUTPOS = PSEUDOLIM;

    //  1060            PUT CHAR(NL)

    PUTCHAR(10);

    //  1061            PUTPOS = Q

    PUTPOS = Q;

    //  1062         %FINISH

  L_014B:;

  //  1063         %CYCLE

  L_014C:;

  //  1064            PUT CHAR(SYM)

    PUTCHAR(SYM);

    //  1065            %EXIT %IF SYM = NL

    if (SYM != 10) goto L_014D;
    goto L_014E;
  L_014D:;

  //  1066            READ SYMBOL(SYM)

    _imp_READSYMBOL(/*?*/ &SYM);

    //  1067         %REPEAT

    goto L_014C;
  L_014E:;

  //  1068         PRINTPOS = STARTPOS

    PRINTPOS = STARTPOS;

    //  1069      %finish %ELSE %START

    goto L_014F;
  L_0141:;

  //  1070         GETPOS = INTEGER(MP)

    GETPOS = INTEGER(MP);

    //  1071         %IF CHAR(GETPOS) = 0 %START

    if (CHAR(GETPOS) != 0) goto L_0150;

      //  1072            QBASE = MP

    QBASE = MP;

    //  1073            GETPOS = INTEGER(MP+2)

    GETPOS = INTEGER(MP + 2);

    //  1074            STARTPOS = INTEGER(MP+3)

    STARTPOS = INTEGER(MP + 3);

    //  1075            MP = INTEGER(MP+4)

    MP = INTEGER(MP + 4);

    //  1076            %IF MP < 0 %START

    if (MP >= 0) goto L_0151;

      //  1077               MP = MP-8_700000

    MP = MP - 229376;

    //  1078               %WHILE INTEGER(NP)&16_8000 = 0 %CYCLE

  L_0152:;
    if (INTEGER(NP) & 32768 != 0) goto L_0153;

      //  1079                  FAULT('C');  NP = NP+2

    FAULT(67);
    NP = NP + 2;

    //  1080               %REPEAT

    goto L_0152;
  L_0153:;

  //  1081               SET LAB(LOC)

    SETLAB(LOC);

    //  1082            %FINISH

  L_0151:;

  //  1083            PRINTPOS = 0 %IF LIST&2 # 0

    if (LIST & 2 == 0) goto L_0154;
    PRINTPOS = 0;
  L_0154:;

  //  1084            GET SYM;                    !TERMINATOR

    GETSYM();

    //  1085            GET SYM %IF SYM = ';'

    if (SYM != 59) goto L_0155;
    GETSYM();
  L_0155:;

  //  1086            %RETURN

    return;

    //  1087         %FINISH

  L_0150:;

  //  1088         PRINTPOS = STARTPOS %IF LIST&2 # 0

    if (LIST & 2 == 0) goto L_0156;
    PRINTPOS = STARTPOS;
  L_0156:;

  //  1089         QQ = 0

    QQ = 0;

    //  1090         %CYCLE

  L_0157:;

  //  1091            SYM = CHAR(GETPOS);  GETPOS = GETPOS+1

    SYM = CHAR(GETPOS);
    GETPOS = GETPOS + 1;

    //  1092            %IF TAG %START

    if (!(TAG())) goto L_0158;

      //  1093               SYM=TERM %AND GETPOS=GETPOS-1 %IF TERM = ' '

    if (TERM != 32) goto L_0159;
    SYM = TERM;
    GETPOS = GETPOS - 1;
  L_0159:;

  //  1094               TYPE = INTEGER(MP);  VAL = GETPOS-1

    TYPE = INTEGER(MP);
    VAL = GETPOS - 1;

    //  1095               LOOKUP(4)

    LOOKUP(4);

    //  1096               %WHILE TYPE # VAL %CYCLE

  L_015A:;
    if (TYPE == VAL) goto L_015B;

      //  1097                  PUT CHAR(CHAR(TYPE))

    PUTCHAR(CHAR(TYPE));

    //  1098                  TYPE = TYPE+1

    TYPE = TYPE + 1;

    //  1099               %REPEAT

    goto L_015A;
  L_015B:;

  //  1100            %FINISH

  L_0158:;

  //  1101            PUT CHAR(SYM)

    PUTCHAR(SYM);

    //  1102  !!          INTEGER(MP) = GETPOS
    //  1103            set INTEGER(MP, GETPOS)

    SETINTEGER(MP, GETPOS);

    //  1104            %EXIT %IF SYM = NL

    if (SYM != 10) goto L_015C;
    goto L_015D;
  L_015C:;

  //  1105         %REPEAT

    goto L_0157;
  L_015D:;

  //  1106         QQ = '?'

    QQ = 63;

    //  1107      %FINISH

  L_014F:;

  //  1108      QBASE = (PUTPOS+1)>>1

    QBASE = (unsigned int)PUTPOS + 1 >> 1;

    //  1109      GETPOS = STARTPOS;  GET SYM

    GETPOS = STARTPOS;
    GETSYM();

    //  1110  %END

    return;
  } /* end of READLINE */

  //  1111
  //  1112  %ROUTINE SCAN ARG

  void SCANARG(void) {
    //  1113  !    SET TYPE,VAL TO START,LIM OF ARG IF NOT NULL
    //  1114  %INTEGER I,J

    int I;
    int J;

    //  1115      %RETURN %IF SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' '

    if (SYM != 73) goto L_015E;
    if (CHAR(GETPOS) != 70) goto L_015E;
    if (CHAR(GETPOS + 1) != 32) goto L_015E;
    return;
  L_015E:;

  //  1116      I = GETPOS-1;  I = GETPOS %IF SYM = '['

    I = GETPOS - 1;
    if (SYM != 91) goto L_015F;
    I = GETPOS;
  L_015F:;

  //  1117      J = 0

    J = 0;

    //  1118      %CYCLE

  L_0160:;

  //  1119         %EXIT %IF SYM = NL

    if (SYM != 10) goto L_0161;
    goto L_0162;
  L_0161:;

  //  1120         %EXIT %IF (SYM=' ' %OR SYM=',' %OR SYM=';') %AND J<=0

    if (SYM == 32) goto L_0163;
    if (SYM == 44) goto L_0163;
    if (SYM != 59) goto L_0164;
  L_0163:;
    if (J > 0) goto L_0164;
    goto L_0162;
  L_0164:;

  //  1121         J = J+1 %IF SYM = '['

    if (SYM != 91) goto L_0165;
    J = J + 1;
  L_0165:;

  //  1122         %IF SYM = ']' %START

    if (SYM != 93) goto L_0166;

      //  1123            J = J-1;  %EXIT %IF J = 0

    J = J - 1;
    if (J != 0) goto L_0167;
    goto L_0162;
  L_0167:;

  //  1124         %FINISH

  L_0166:;

  //  1125         SYM = CHAR(GETPOS);  GETPOS = GETPOS+1

    SYM = CHAR(GETPOS);
    GETPOS = GETPOS + 1;

    //  1126      %REPEAT

    goto L_0160;
  L_0162:;

  //  1127      %IF GETPOS-1 # I %START

    if (GETPOS - 1 == I) goto L_0168;

      //  1128         TYPE = I;  VAL = GETPOS-1

    TYPE = I;
    VAL = GETPOS - 1;

    //  1129      %FINISH

  L_0168:;

  //  1130      GET SYM %IF SYM = ']'

    if (SYM != 93) goto L_0169;
    GETSYM();
  L_0169:;

  //  1131  %END

    return;
  } /* end of SCANARG */

  //  1132
  //  1133
  //  1134  %ROUTINE SET ACC

  void SETACC(void) {
    //  1135  %INTEGER I

    int I;

    //  1136      ACC = -1;  ATYPE = -1;  CREG = -1

    ACC = -1;
    ATYPE = -1;
    CREG = -1;

    //  1137      I = TEMPS

    I = TEMPS;

    //  1138      %RETURN %IF I = 0

    if (I != 0) goto L_016A;
    return;
  L_016A:;

  //  1139      %CYCLE

  L_016B:;

  //  1140         ACC = ACC+1

    ACC = ACC + 1;

    //  1141         %RETURN %IF I&1 # 0

    if (I & 1 == 0) goto L_016C;
    return;
  L_016C:;

  //  1142         I = I>>1

    I = (unsigned int)I >> 1;

    //  1143      %REPEAT

    goto L_016B;

    //  1144  %END

  } /* end of SETACC */

  //  1145
  //  1146  !MAIN PROGRAM
  //  1147
  //  1148  !RADIX 36 CONSTANTS
  //  1149  %OWNINTEGER B=2184, IF=9991, ELS=5950, E=5403, FIN=6907, ISH=10490

  static int B = 2184;
  static int IF = 9991;
  static int ELS = 5950;
  static int E = 5403;
  static int FIN = 6907;
  static int ISH = 10490;

  //  1150  %OWNINTEGER JUM=11642, P=17206, PS=17983, DEF=4605, END=6009

  static int JUM = 11642;
  static int P = 17206;
  static int PS = 17983;
  static int DEF = 4605;
  static int END = 6009;

  //  1151
  //  1152  %INTEGER I,J,K

  int I;
  int J;
  int K;

  //  1153  !!%FAULT 19 ->ERR;                      !RECOGNITION ERROR
  //  1154  !!%FAULT 9 ->BEND;                      !INPUT ENDED
  //  1155
  //  1156      %on %event 9,1 %start

  if (!_imp_on_event(1, 9)) goto L_016D;

    //  1157         ->err %if event_event = 9

  if (_imp_EVENT().EVENT != 9) goto L_016E;
  goto U_100E;
L_016E:;

//  1158         ->bend %if event_event = 1 %and event_sub = 9

  if (_imp_EVENT().EVENT != 1) goto L_016F;
  if (_imp_EVENT().SUB != 9) goto L_016F;
  goto U_100F;
L_016F:;

//  1159         %stop

  _imp_stop(0);

  //  1160      %finish

L_016D:;

//  1161
//  1162      open input(MAIN, "interdata/test.hal")

  _imp_OPENINPUT(MAIN, _imp_str_literal("interdata/test.hal"));

  //  1163      open input(PRE, "interdata/hal70.def")

  _imp_OPENINPUT(PRE, _imp_str_literal("interdata/hal70.def"));

  //  1164      open output(BIN, "interdata/test.bin")

  _imp_OPENOUTPUT(BIN, _imp_str_literal("interdata/test.bin"));

  //  1165      open output(LIS, "interdata/test.lis")

  _imp_OPENOUTPUT(LIS, _imp_str_literal("interdata/test.lis"));

  //  1166      select output(0)

  _imp_SELECTOUTPUT(0);

  //  1167
  //  1168      %CYCLE I = 1,1,SBOUND

  // %for I = 1, 1, 32512 %cycle
  {
    I = 0;
  L_0170:
    if (I == 32512) goto L_0171;
    I += 1;

    //  1169         STORE(I) = 0

    STORE[I - 1] = 0;

    //  1170      %REPEAT

    goto L_0170;
  }

L_0171:;

//  1171  !!    CODEPOS = ADDR(STORE(1))
//  1172  {}    CODEPOS = 1

  CODEPOS = 1;

  //  1173      MACLIM = (CODEPOS+20)<<1

  MACLIM = CODEPOS + 20 << 1;

  //  1174  !!    STORELIM = ADDR(STORE(SBOUND))
  //  1175  {}    STORELIM = sbound

  STORELIM = 32512;

  //  1176      NP = STORELIM

  NP = STORELIM;

  //  1177      LABLIM = NP-60

  LABLIM = NP - 60;

  //  1178      BP = LABLIM

  BP = LABLIM;

  //  1179      DEFLIM = BP-(SBOUND>>2)

  DEFLIM = BP - ((unsigned int)32512 >> 2);

  //  1180      DEFMIN = DEFLIM

  DEFMIN = DEFLIM;

  //  1181  !!    INTEGER(BP) = DEFLIM
  //  1182      set INTEGER(BP, DEFLIM)

  SETINTEGER(BP, DEFLIM);

  //  1183      SELECT INPUT(PRE)

  _imp_SELECTINPUT(PRE);

  //  1184  DO PASS:

U_1010:;

//  1185      STARTPOS = MACLIM

  STARTPOS = MACLIM;

  //  1186      MP = 0

  MP = 0;

  //  1187      ALMAX = DEFLIM

  ALMAX = DEFLIM;

  //  1188      LABMIN = LABLIM

  LABMIN = LABLIM;

  //  1189      ASSCOND = 1;  SKIP = 0

  ASSCOND = 1;
  SKIP = 0;

  //  1190      LOCTYPE = MEMMASK+RELMASK;  LOC = 0

  LOCTYPE = MEMMASK + RELMASK;
  LOC = 0;

  //  1191      SET ACC

  SETACC();

  //  1192  READ: FSYM = ' ';  FAULTPOS = 0

U_1011:;
  FSYM = 32;
  FAULTPOS = 0;

  //  1193      READ LINE

  READLINE();

  //  1194  NEXT:

U_1012:;

//  1195      DREG = -1

  DREG = -1;

  //  1196      MODE = 0

  MODE = 0;

  //  1197      PEND = 0;  COND = 0

  PEND = 0;
  COND = 0;

  //  1198      QSTART = QBASE;  QLIM = QSTART

  QSTART = QBASE;
  QLIM = QSTART;

  //  1199      FLAG = 0

  FLAG = 0;

  //  1200      %IF S('$') %START

  if (!(S(36))) goto L_0173;

    //  1201         ->NEWPAGE %IF SYM = '/'

  if (SYM != 47) goto L_0174;
  goto U_1013;
L_0174:;

//  1202         ->ERR %IF %NOT TAG

  if (TAG()) goto L_0175;
  goto U_100E;
L_0175:;

//  1203         ->ASSIF %IF TAG1 = IF

  if (TAG1 != IF) goto L_0176;
  goto U_1014;
L_0176:;

//  1204         ->ASSELSE %IF TAG1 = ELS

  if (TAG1 != ELS) goto L_0177;
  goto U_1015;
L_0177:;

//  1205         ->ASSFIN %IF TAG1 = FIN

  if (TAG1 != FIN) goto L_0178;
  goto U_1016;
L_0178:;

//  1206         ->LEND %IF SKIP # 0

  if (SKIP == 0) goto L_0179;
  goto U_1017;
L_0179:;

//  1207         ->DEFINE %IF TAG1 = DEF

  if (TAG1 != DEF) goto L_017A;
  goto U_1018;
L_017A:;

//  1208         ->DEFINE %IF TAG1 = 19625;     !RED

  if (TAG1 != 19625) goto L_017B;
  goto U_1018;
L_017B:;

//  1209         ->LISTC %IF TAG1 = 13350;      !LIS

  if (TAG1 != 13350) goto L_017C;
  goto U_1019;
L_017C:;

//  1210         ->TEMP %IF TAG1 = 21780;       !TEM

  if (TAG1 != 21780) goto L_017D;
  goto U_101A;
L_017D:;

//  1211         ->LOCC %IF TAG1 = 13556;       !LOC

  if (TAG1 != 13556) goto L_017E;
  goto U_1000;
L_017E:;

//  1212         ->LOCC %IF TAG1 = 1917;        !ASS

  if (TAG1 != 1917) goto L_017F;
  goto U_1000;
L_017F:;

//  1213         ->SAVC %IF TAG1 = 20568;       !SAV

  if (TAG1 != 20568) goto L_0180;
  goto U_1001;
L_0180:;

//  1214         ->MACDEF %IF TAG1 = 14111;     !MAC

  if (TAG1 != 14111) goto L_0181;
  goto U_101B;
L_0181:;

//  1215         ->BEGIN %IF TAG1 = 2460;       !BEG

  if (TAG1 != 2460) goto L_0182;
  goto U_1002;
L_0182:;

//  1216         ->BEND %IF TAG1 = END

  if (TAG1 != END) goto L_0183;
  goto U_100F;
L_0183:;

//  1217         FAULT('U')

  FAULT(85);

  //  1218         ->LEND

  goto U_1017;

  //  1219      %FINISH

L_0173:;

//  1220      ->LEND %IF SKIP # 0 %OR SYM = '/'

  if (SKIP != 0) goto L_0172;
  if (SYM != 47) goto L_0184;
L_0172:;
  goto U_1017;
L_0184:;

//  1221      ->LEND %IF SYM = NL

  if (SYM != 10) goto L_0185;
  goto U_1017;
L_0185:;

//  1222      %IF TAG %START

  if (!(TAG())) goto L_0186;

    //  1223         ->LABDEF %IF TERM = ':'

  if (TERM != 58) goto L_0187;
  goto U_1003;
L_0187:;

//  1224         MODE = 1

  MODE = 1;

  //  1225         ->ASSIGN %IF TERM = '(' %OR SYM = '='

  if (TERM == 40) goto L_0188;
  if (SYM != 61) goto L_0189;
L_0188:;
  goto U_1004;
L_0189:;

//  1226         ->JUMP %IF TAG1 = JUM %AND (TAG2=P %OR TAG2=PS)

  if (TAG1 != JUM) goto L_018A;
  if (TAG2 == P) goto L_018B;
  if (TAG2 != PS) goto L_018A;
L_018B:;
  goto U_101C;
L_018A:;

//  1227         ->IFC %IF TAG1 = IF

  if (TAG1 != IF) goto L_018C;
  goto U_101D;
L_018C:;

//  1228         ->ELSE %IF TAG1 = ELS %AND TAG2 = E

  if (TAG1 != ELS) goto L_018D;
  if (TAG2 != E) goto L_018D;
  goto U_101E;
L_018D:;

//  1229         ->FINISH %IF TAG1 = FIN %AND TAG2 = ISH

  if (TAG1 != FIN) goto L_018E;
  if (TAG2 != ISH) goto L_018E;
  goto U_101F;
L_018E:;

//  1230         ->WHILE %IF TAG1 = 25106 %AND TAG2 = 13173

  if (TAG1 != 25106) goto L_018F;
  if (TAG2 != 13173) goto L_018F;
  goto U_1020;
L_018F:;

//  1231         ->CYCLE %IF TAG1 = 4269 %AND TAG2 = 13173

  if (TAG1 != 4269) goto L_0190;
  if (TAG2 != 13173) goto L_0190;
  goto U_1021;
L_0190:;

//  1232         ->REPEAT %IF TAG1 = 19637 %AND TAG2 = 5544

  if (TAG1 != 19637) goto L_0191;
  if (TAG2 != 5544) goto L_0191;
  goto U_1022;
L_0191:;

//  1233         MODE=-2 %AND ->DATA %IF TAG1 = B

  if (TAG1 != B) goto L_0192;
  MODE = -2;
  goto U_1023;
L_0192:;

//  1234         TYPE = UMASK;  LOOKUP(0)

  TYPE = UMASK;
  LOOKUP(0);

  //  1235         ->MACCALL %IF TYPE&OPMASK = MACRO

  if (TYPE & OPMASK != MACRO) goto L_0193;
  goto U_1024;
L_0193:;

//  1236         ->MINST %IF TYPE&OPMASK # 0

  if (TYPE & OPMASK == 0) goto L_0194;
  goto U_1025;
L_0194:;

//  1237         FAULT('U') %AND ->LEND %IF TYPE&UMASK # 0

  if (TYPE & UMASK == 0) goto L_0195;
  FAULT(85);
  goto U_1017;
L_0195:;

//  1238         PEND = -1

  PEND = -1;

  //  1239      %FINISH

L_0186:;

//  1240      MODE = -1

  MODE = -1;

  //  1241  DATA:

U_1023:;

//  1242      %CYCLE

L_0196:;

//  1243         GET EXP;  ASSEMBLE

  GETEXP();
  ASSEMBLE();

  //  1244         FAULT('I') %IF TYPE&REGXMASK # 0

  if (TYPE & REGXMASK == 0) goto L_0197;
  FAULT(73);
L_0197:;

//  1245         I = 1

  I = 1;

  //  1246         %IF S('$') %START

  if (!(S(36))) goto L_0198;

    //  1247            I = VAL %IF VAL < 1000

  if (VAL >= 1000) goto L_0199;
  I = VAL;
L_0199:;

//  1248            QLIM = QSTART

  QLIM = QSTART;

  //  1249            GET EXP;  ASSEMBLE

  GETEXP();
  ASSEMBLE();

  //  1250         %FINISH

L_0198:;

//  1251         %WHILE I > 0 %CYCLE

L_019A:;
  if (I <= 0) goto L_019B;

    //  1252            %IF MODE # -1 %START

  if (MODE == -1) goto L_019C;

    //  1253               FAULT('T') %IF VAL&16_FF00 # 0

  if (VAL & 65280 == 0) goto L_019D;
  FAULT(84);
L_019D:;

//  1254               %IF MODE = -2 %START

  if (MODE != -2) goto L_019E;

    //  1255                  J = VAL<<8;  MODE = -3

  J = VAL << 8;
  MODE = -3;

  //  1256               %finish %ELSE %START

  goto L_019F;
L_019E:;

//  1257                  VAL = VAL+J;  MODE = -2

  VAL = VAL + J;
  MODE = -2;

  //  1258                  PLANT VAL;  VAL = VAL&255

  PLANTVAL();
  VAL = VAL & 255;

  //  1259               %FINISH

L_019F:;

//  1260            %finish %ELSE %START

  goto L_01A0;
L_019C:;

//  1261               PLANT VAL

  PLANTVAL();

  //  1262            %FINISH

L_01A0:;

//  1263            I = I-1

  I = I - 1;

  //  1264         %REPEAT

  goto L_019A;
L_019B:;

//  1265         %EXIT %UNLESS S(',') %OR SYM&128 # 0

  if (S(44)) goto L_01A1;
  if (SYM & 128 != 0) goto L_01A1;
  goto L_01A2;
L_01A1:;

//  1266         %IF SYM = NL %START

  if (SYM != 10) goto L_01A3;

    //  1267            PRINT LINE %IF PRINTPOS # 0;  READ LINE

  if (PRINTPOS == 0) goto L_01A4;
  PRINTLINE();
L_01A4:;
  READLINE();

  //  1268            QSTART = QBASE

  QSTART = QBASE;

  //  1269         %FINISH

L_01A3:;

//  1270         QLIM = QSTART

  QLIM = QSTART;

  //  1271      %REPEAT

  goto L_0196;
L_01A2:;

//  1272      VAL=J %AND PLANT VAL %IF MODE = -3

  if (MODE != -3) goto L_01A5;
  VAL = J;
  PLANTVAL();
L_01A5:;

//  1273      ->SEND

  goto U_1026;

  //  1274
  //  1275  LABDEF:

U_1003:;

//  1276      CREG = -1;  ATYPE = -1

  CREG = -1;
  ATYPE = -1;

  //  1277      GET SYM

  GETSYM();

  //  1278      FAULT('C') %AND NP=STORELIM %IF NP # STORELIM

  if (NP == STORELIM) goto L_01A6;
  FAULT(67);
  NP = STORELIM;
L_01A6:;

//  1279      TYPE = LOCTYPE;  VAL = LOC

  TYPE = LOCTYPE;
  VAL = LOC;

  //  1280      LOOKUP(7)

  LOOKUP(7);

  //  1281      ->NEXT

  goto U_1012;

  //  1282
  //  1283  ASSIGN:

U_1004:;

//  1284      PEND = 1

  PEND = 1;

  //  1285      GET EXP

  GETEXP();

  //  1286      ->ERR %IF %NOT S('=')

  if (S(61)) goto L_01A7;
  goto U_100E;
L_01A7:;

//  1287      QUEUE(-25);                       !'STORE'

  QUEUE(-25);

  //  1288      %IF INTEGER(QBASE) = REG %START

  if (INTEGER(QBASE) != REG) goto L_01A8;

    //  1289         DREG = INTEGER(QBASE+1)

  DREG = INTEGER(QBASE + 1);

  //  1290         DUSE = 0

  DUSE = 0;

  //  1291      %FINISH

L_01A8:;

//  1292      QSTART = QLIM;  MODE = 2

  QSTART = QLIM;
  MODE = 2;

  //  1293      GET EXP

  GETEXP();

  //  1294      %IF FLAG # 0 %START

  if (FLAG == 0) goto L_01A9;

    //  1295         %IF DREG<0 %AND FLAG-QSTART=QSTART-QBASE-1 %C

  if (DREG >= 0) goto L_01AA;
  if (FLAG - QSTART != QSTART - QBASE - 1) goto L_01AA;
  if (INTEGER(QBASE) & BMASK != 0) goto L_01AA;

    //  1296+           %AND INTEGER(QBASE)&BMASK=0 %START
    //  1297         I = QBASE;  J = QSTART

  I = QBASE;
  J = QSTART;

  //  1298         I = I+1 %AND J=J+1 %WHILE INTEGER(I) = INTEGER(J)

L_01AB:;
  if (INTEGER(I) != INTEGER(J)) goto L_01AC;
  I = I + 1;
  J = J + 1;
  goto L_01AB;
L_01AC:;

//  1299         %IF J = FLAG %START

  if (J != FLAG) goto L_01AD;

    //  1300            %IF INTEGER(QLIM-1) = -2 %START; !MINUS

  if (INTEGER(QLIM - 1) != -2) goto L_01AE;

    //  1301               QSTART = J-2

  QSTART = J - 2;

  //  1302  !!             INTEGER(QSTART) = 0;  INTEGER(QSTART+1) = 0
  //  1303               set INTEGER(QSTART, 0);  set INTEGER(QSTART+1, 0)

  SETINTEGER(QSTART, 0);
  SETINTEGER(QSTART + 1, 0);

  //  1304            %ELSE

  goto L_01AF;
L_01AE:;

//  1305               QSTART = J;  QLIM = QLIM-1

  QSTART = J;
  QLIM = QLIM - 1;

  //  1306            %FINISH

L_01AF:;

//  1307         %finish %ELSE FLAG = 0

  goto L_01B0;
L_01AD:;
  FLAG = 0;
L_01B0:;

//  1308         %finish %ELSE FLAG = 0

  goto L_01B1;
L_01AA:;
  FLAG = 0;
L_01B1:;

//  1309      %FINISH

L_01A9:;

//  1310      QUEUE(-24);                       !'LOAD'

  QUEUE(-24);

  //  1311
  //  1312  CONDQ:

U_1027:;

//  1313      %IF TAGIF %START

  if (!(TAGIF())) goto L_01B2;

    //  1314         MODE = MODE+4;  DREG = DREG-16; !SCARIFY

  MODE = MODE + 4;
  DREG = DREG - 16;

  //  1315         CONDIT(0)

  CONDIT(0);

  //  1316         MODE = MODE-4;  DREG = DREG+16; !RESTORE

  MODE = MODE - 4;
  DREG = DREG + 16;

  //  1317         QLIM = QSTART;  QSTART = TRANSF

  QLIM = QSTART;
  QSTART = TRANSF;

  //  1318      %FINISH

L_01B2:;

//  1319      ASSEMBLE

  ASSEMBLE();

  //  1320      ->SEND

  goto U_1026;

  //  1321
  //  1322  JUMP:

U_101C:;

//  1323      FLAG = TAG2-P;                    !POSITIVE IF SHORT

  FLAG = TAG2 - P;

  //  1324      GET EXP

  GETEXP();

  //  1325      QUEUE(-26);                       !'JUMP'

  QUEUE(-26);

  //  1326      ->CONDQ

  goto U_1027;

  //  1327
  //  1328  MINST:

U_1025:;

//  1329      MODE = -1

  MODE = -1;

  //  1330      GET INST

  GETINST();

  //  1331      QUEUE(-23);                       !'PLANT'

  QUEUE(-23);

  //  1332      ->CONDQ

  goto U_1027;

  //  1333
  //  1334  MACCALL:

U_1024:;

//  1335      QUEUE(0);                         !(DEFPOS)

  QUEUE(0);

  //  1336      QUEUE(0);                         !SPARE

  QUEUE(0);

  //  1337      QUEUE(0);                         !(CALLPOS)

  QUEUE(0);

  //  1338      QUEUE(STARTPOS)

  QUEUE(STARTPOS);

  //  1339      QUEUE(MP)

  QUEUE(MP);

  //  1340      J = VAL;  QQ = 0

  J = VAL;
  QQ = 0;

  //  1341      %CYCLE

L_01B3:;

//  1342         %EXIT %IF CHAR(J) = NL;        !END OF MAC DEF

  if (CHAR(J) != 10) goto L_01B4;
  goto L_01B5;
L_01B4:;

//  1343         I = GETPOS-1;                  !SAVE CALLPOS

  I = GETPOS - 1;

  //  1344         GETPOS = J;  GET SYM

  GETPOS = J;
  GETSYM();

  //  1345  !!       %MONITOR 24 %IF %NOT TAG
  //  1346         TYPE = 0;  VAL = 0

  TYPE = 0;
  VAL = 0;

  //  1347         SCAN ARG

  SCANARG();

  //  1348         GET SYM %IF SYM = ','

  if (SYM != 44) goto L_01B6;
  GETSYM();
L_01B6:;

//  1349         J = GETPOS-1;                  !SAVE DEFPOS

  J = GETPOS - 1;

  //  1350         GETPOS = I;  GET SYM;          !RESTORE CALLPOS

  GETPOS = I;
  GETSYM();

  //  1351         SCAN ARG

  SCANARG();

  //  1352         GET SYM %IF SYM = ','

  if (SYM != 44) goto L_01B7;
  GETSYM();
L_01B7:;

//  1353         QUEUE(TAG1);  QUEUE(TAG2)

  QUEUE(TAG1);
  QUEUE(TAG2);

  //  1354         QUEUE(TYPE);  QUEUE(VAL)

  QUEUE(TYPE);
  QUEUE(VAL);

  //  1355      %REPEAT

  goto L_01B3;
L_01B5:;

//  1356      QQ = '?'

  QQ = 63;

  //  1357      GET SYM %IF SYM = ' '

  if (SYM != 32) goto L_01B8;
  GETSYM();
L_01B8:;

//  1358      %IF TAGIF %START

  if (!(TAGIF())) goto L_01B9;

    //  1359         CONDIT(-18)

  CONDIT(-18);

  //  1360         QLIM = QSTART

  QLIM = QSTART;

  //  1361  !!       INTEGER(QBASE+4) = MP+8_700000
  //  1362         set INTEGER(QBASE+4, MP+8_700000)

  SETINTEGER(QBASE + 4, MP + 229376);

  //  1363      %FINISH

L_01B9:;

//  1364      QUEUE(0)

  QUEUE(0);

  //  1365      STARTPOS = QLIM<<1

  STARTPOS = QLIM << 1;

  //  1366      MP = QBASE

  MP = QBASE;

  //  1367  !!    INTEGER(MP) = J+1;                !START OF BODY
  //  1368      set INTEGER(MP, J+1);                !START OF BODY

  SETINTEGER(MP, J + 1);

  //  1369  !!    INTEGER(MP+2) = GETPOS-1
  //  1370      set INTEGER(MP+2, GETPOS-1)

  SETINTEGER(MP + 2, GETPOS - 1);

  //  1371      ->LEND

  goto U_1017;

  //  1372
  //  1373  !CODING OF JUMPS: 1000 (SINGLE INST), 2000 (MAIN IF)
  //  1374  !                 4000 (ELSE), 6000 (IF AFTER ELSE)
  //  1375
  //  1376  IFC:

U_101D:;

//  1377      CONDIT(-15)

  CONDIT(-15);

  //  1378      ->SEND

  goto U_1026;

  //  1379
  //  1380  ELSE:

U_101E:;

//  1381      ->CERR %IF INTEGER(NP)&16_2000 = 0

  if (INTEGER(NP) & 8192 != 0) goto L_01BA;
  goto U_1028;
L_01BA:;

//  1382      QUEUE(0);  QUEUE(0)

  QUEUE(0);
  QUEUE(0);

  //  1383      QUEUE(-16);  ASSEMBLE

  QUEUE(-16);
  ASSEMBLE();

  //  1384      ATYPE = -1; CREG = -1

  ATYPE = -1;
  CREG = -1;

  //  1385      %IF TAGIF %START

  if (!(TAGIF())) goto L_01BB;

    //  1386         CONDIT(-17)

  CONDIT(-17);

  //  1387      %FINISH

L_01BB:;

//  1388      ->SEND

  goto U_1026;

  //  1389
  //  1390  FINISH:

U_101F:;

//  1391      ->CERR %IF INTEGER(NP)&16_6000 = 0

  if (INTEGER(NP) & 24576 != 0) goto L_01BC;
  goto U_1028;
L_01BC:;

//  1392      I = LOC

  I = LOC;

  //  1393      %WHILE INTEGER(NP)&16_4000 # 0 %CYCLE

L_01BD:;
  if (INTEGER(NP) & 16384 == 0) goto L_01BE;

    //  1394         %IF INTEGER(NP)&16_2000 # 0 %START; !IF AFTER ELSE

  if (INTEGER(NP) & 8192 == 0) goto L_01BF;

    //  1395            SET LAB(I)

  SETLAB(I);

  //  1396         %finish %ELSE %START

  goto L_01C0;
L_01BF:;

//  1397            SET LAB(LOC)

  SETLAB(LOC);

  //  1398            I = VAL+4

  I = VAL + 4;

  //  1399         %FINISH

L_01C0:;

//  1400      %REPEAT

  goto L_01BD;
L_01BE:;

//  1401      SET LAB(I)

  SETLAB(I);

  //  1402      ->SEND

  goto U_1026;

  //  1403
  //  1404  WHILE:

U_1020:;

//  1405      I = LOC;  ATYPE = -1;  CREG = -1

  I = LOC;
  ATYPE = -1;
  CREG = -1;

  //  1406      CONDIT(-13)

  CONDIT(-13);

  //  1407      NEST(I);  NEST(1)

  NEST(I);
  NEST(1);

  //  1408      ->SEND

  goto U_1026;

  //  1409
  //  1410  CYCLE:

U_1021:;

//  1411      NEST(LOC);  NEST(1)

  NEST(LOC);
  NEST(1);

  //  1412      ATYPE = -1;  CREG = -1

  ATYPE = -1;
  CREG = -1;

  //  1413      ->SEND

  goto U_1026;

  //  1414
  //  1415  REPEAT:

U_1022:;

//  1416      ->CERR %IF INTEGER(NP) # 1

  if (INTEGER(NP) == 1) goto L_01C1;
  goto U_1028;
L_01C1:;

//  1417      QUEUE(LOCTYPE);  QUEUE(INTEGER(NP+1))

  QUEUE(LOCTYPE);
  QUEUE(INTEGER(NP + 1));

  //  1418      NP = NP+2

  NP = NP + 2;

  //  1419      QUEUE(-26);                       !'JUMP'

  QUEUE(-26);

  //  1420      FLAG = -1

  FLAG = -1;

  //  1421      ->CONDQ

  goto U_1027;

  //  1422
  //  1423  CERR:

U_1028:;

//  1424      FAULT('C')

  FAULT(67);

  //  1425      ->LEND

  goto U_1017;

  //  1426
  //  1427  SEND:

U_1026:;

//  1428      SET LAB(LOC) %IF INTEGER(NP)&16_1000 # 0

  if (INTEGER(NP) & 4096 == 0) goto L_01C2;
  SETLAB(LOC);
L_01C2:;

//  1429      ->LEND %IF SYM = NL

  if (SYM != 10) goto L_01C3;
  goto U_1017;
L_01C3:;

//  1430      ->NEXT %IF S(';')

  if (!(S(59))) goto L_01C4;
  goto U_1012;
L_01C4:;

//  1431
//  1432  ERR:FSYM = 'F';  FAULTPOS = GETPOS-1

U_100E:;
  FSYM = 70;
  FAULTPOS = GETPOS - 1;

  //  1433      PRINTPOS = STARTPOS

  PRINTPOS = STARTPOS;

  //  1434
  //  1435  LEND:

U_1017:;

//  1436      ->READ %IF SKIP # 0 %AND LIST&4 = 0

  if (SKIP == 0) goto L_01C5;
  if (LIST & 4 != 0) goto L_01C5;
  goto U_1011;
L_01C5:;

//  1437      ->READ %IF FSYM = ' ' %AND CHARS = 0 %AND %C

  if (FSYM != 32) goto L_01C6;
  if (CHARS != 0) goto L_01C6;
  if (PRINTPOS == 0) goto L_01C7;
  if (MP == 0) goto L_01C6;
  if (LIST & 2 != 0) goto L_01C6;
L_01C7:;
  goto U_1011;
L_01C6:;

//  1438+      (PRINTPOS = 0 %OR (MP#0 %AND LIST&2=0))
//  1439      PRINT LINE

  PRINTLINE();

  //  1440      ->READ

  goto U_1011;

  //  1441
  //  1442  ASSIF:

U_1014:;

//  1443      ASSCOND = ASSCOND<<1

  ASSCOND = ASSCOND << 1;

  //  1444      ->LEND %IF SKIP # 0

  if (SKIP == 0) goto L_01C8;
  goto U_1017;
L_01C8:;

//  1445  A1: CONDIT(0)

U_1029:;
  CONDIT(0);

  //  1446      SKIP = ASSCOND %IF COND # 0

  if (COND == 0) goto L_01C9;
  SKIP = ASSCOND;
L_01C9:;

//  1447      PRINT LINE %IF PRINTPOS # 0

  if (PRINTPOS == 0) goto L_01CA;
  PRINTLINE();
L_01CA:;

//  1448      ->LEND

  goto U_1017;

  //  1449
  //  1450  ASSELSE:

U_1015:;

//  1451      %IF SKIP = 0 %START

  if (SKIP != 0) goto L_01CB;

    //  1452         ->CERR %IF ASSCOND&1 # 0

  if (ASSCOND & 1 == 0) goto L_01CC;
  goto U_1028;
L_01CC:;

//  1453         SKIP = ASSCOND

  SKIP = ASSCOND;

  //  1454      %finish %ELSE %START

  goto L_01CD;
L_01CB:;

//  1455         ->LEND %IF SKIP # ASSCOND

  if (SKIP == ASSCOND) goto L_01CE;
  goto U_1017;
L_01CE:;

//  1456         SKIP = 0

  SKIP = 0;

  //  1457         ->A1 %IF TAGIF

  if (!(TAGIF())) goto L_01CF;
  goto U_1029;
L_01CF:;

//  1458      %FINISH

L_01CD:;

//  1459      ASSCOND = ASSCOND+1

  ASSCOND = ASSCOND + 1;

  //  1460      ->LEND

  goto U_1017;

  //  1461
  //  1462  ASSFIN:

U_1016:;

//  1463      ->CERR %IF ASSCOND = 1

  if (ASSCOND != 1) goto L_01D0;
  goto U_1028;
L_01D0:;

//  1464      ASSCOND = ASSCOND>>1

  ASSCOND = (unsigned int)ASSCOND >> 1;

  //  1465      SKIP = 0 %IF SKIP>>1 = ASSCOND

  if ((unsigned int)SKIP >> 1 != ASSCOND) goto L_01D1;
  SKIP = 0;
L_01D1:;

//  1466      ->LEND

  goto U_1017;

  //  1467
  //  1468  DEFINE:

U_1018:;

//  1469      FAULT('C') %IF NP # STORELIM

  if (NP == STORELIM) goto L_01D2;
  FAULT(67);
L_01D2:;

//  1470      I = TAG1

  I = TAG1;

  //  1471      %CYCLE

L_01D3:;

//  1472         ->ERR %IF %NOT (TAG %AND S('='))

  if (!(TAG())) goto L_01D4;
  if (S(61)) goto L_01D5;
L_01D4:;
  goto U_100E;
L_01D5:;

//  1473         J = TAG1;  K = TAG2

  J = TAG1;
  K = TAG2;

  //  1474         %IF TAG %START

  if (!(TAG())) goto L_01D6;

    //  1475            TAGREF

  TAGREF();

  //  1476            %IF TYPE&OPMASK # 0 %START

  if (TYPE & OPMASK == 0) goto L_01D7;

    //  1477               GET INST

  GETINST();

  //  1478            %finish %ELSE %START

  goto L_01D8;
L_01D7:;

//  1479               PEND = -1;  GET EXP

  PEND = -1;
  GETEXP();

  //  1480            %FINISH

L_01D8:;

//  1481         %finish %ELSE GET EXP

  goto L_01D9;
L_01D6:;
  GETEXP();
L_01D9:;

//  1482         ASSEMBLE

  ASSEMBLE();

  //  1483         TAG1 = J;  TAG2 = K

  TAG1 = J;
  TAG2 = K;

  //  1484         %IF I=DEF %THEN LOOKUP(3) %ELSE LOOKUP(2)

  if (I != DEF) goto L_01DA;
  LOOKUP(3);
  goto L_01DB;
L_01DA:;
  LOOKUP(2);
L_01DB:;

//  1485         %EXIT %UNLESS S(',')

  if (S(44)) goto L_01DC;
  goto L_01DD;
L_01DC:;

//  1486         QLIM = QSTART

  QLIM = QSTART;

  //  1487      %REPEAT

  goto L_01D3;
L_01DD:;

//  1488      ->SEND

  goto U_1026;

  //  1489
  //  1490  NEWPAGE:

U_1013:;

//  1491      DO NEWLINE %WHILE LINES # 0

L_01DE:;
  if (LINES == 0) goto L_01DF;
  DONEWLINE();
  goto L_01DE;
L_01DF:;

//  1492      ->LEND

  goto U_1017;

  //  1493
  //  1494  LISTC:

U_1019:;

//  1495      GET EXP;  ASSEMBLE

  GETEXP();
  ASSEMBLE();

  //  1496      LIST = VAL

  LIST = VAL;

  //  1497      ->SEND

  goto U_1026;

  //  1498
  //  1499  TEMP:

U_101A:;

//  1500      I = 0

  I = 0;

  //  1501      %IF SYM # NL %START

  if (SYM == 10) goto L_01E0;

    //  1502         %CYCLE

L_01E1:;

//  1503            GET EXP

  GETEXP();

  //  1504            FAULT('I') %IF TYPE # REG

  if (TYPE == REG) goto L_01E2;
  FAULT(73);
L_01E2:;

//  1505            I = I!1<<VAL

  I = I | 1 << VAL;

  //  1506            %EXIT %UNLESS S(',')

  if (S(44)) goto L_01E3;
  goto L_01E4;
L_01E3:;

//  1507         %REPEAT

  goto L_01E1;
L_01E4:;

//  1508      %FINISH

L_01E0:;

//  1509      TEMPS = I

  TEMPS = I;

  //  1510      SET ACC

  SETACC();

  //  1511      ->SEND

  goto U_1026;

  //  1512
  //  1513  LOCC:

U_1000:;

//  1514      I = TAG1

  I = TAG1;

  //  1515      GET EXP;  ASSEMBLE

  GETEXP();
  ASSEMBLE();

  //  1516      %IF TYPE&16_FF80 = 0 %START

  if (TYPE & 65408 != 0) goto L_01E5;

    //  1517         %IF I = 13556 %START;          !LOC

  if (I != 13556) goto L_01E6;

    //  1518            OUTPUT RECORD %IF BINCOUNT >= 203

  if (BINCOUNT < 203) goto L_01E7;
  OUTPUTRECORD();
L_01E7:;

//  1519            PUT(3) %IF (LOCTYPE!!TYPE)&RELMASK # 0

  if ((LOCTYPE ^ TYPE) & RELMASK == 0) goto L_01E8;
  PUT(3);
L_01E8:;

//  1520            PUT(5);  PUT WORD(VAL)

  PUT(5);
  PUTWORD(VAL);

  //  1521         %FINISH

L_01E6:;

//  1522         LOCTYPE = TYPE&63+MEMMASK;  LOC = VAL

  LOCTYPE = (TYPE & 63) + MEMMASK;
  LOC = VAL;

  //  1523      %finish %ELSE FAULT('I')

  goto L_01E9;
L_01E5:;
  FAULT(73);
L_01E9:;

//  1524      ->SEND

  goto U_1026;

  //  1525
  //  1526  SAVC:

U_1001:;

//  1527      GET EXP;  ASSEMBLE

  GETEXP();
  ASSEMBLE();

  //  1528      SAVE = VAL

  SAVE = VAL;

  //  1529      ->SEND

  goto U_1026;

  //  1530
  //  1531  MACDEF:

U_101B:;

//  1532      ->CERR %IF MP # 0

  if (MP == 0) goto L_01EA;
  goto U_1028;
L_01EA:;

//  1533      ->ERR %IF %NOT TAG

  if (TAG()) goto L_01EB;
  goto U_100E;
L_01EB:;

//  1534      J = TAG1;  K = TAG2

  J = TAG1;
  K = TAG2;

  //  1535      I = GETPOS-1

  I = GETPOS - 1;

  //  1536      %IF SYM # NL %START

  if (SYM == 10) goto L_01EC;

    //  1537         %CYCLE

L_01ED:;

//  1538            ->ERR %IF %NOT TAG

  if (TAG()) goto L_01EE;
  goto U_100E;
L_01EE:;

//  1539            SCAN ARG

  SCANARG();

  //  1540            %EXIT %IF %NOT S(',')

  if (S(44)) goto L_01EF;
  goto L_01F0;
L_01EF:;

//  1541         %REPEAT

  goto L_01ED;
L_01F0:;

//  1542      %FINISH

L_01EC:;

//  1543      ->ERR %IF SYM # NL

  if (SYM == 10) goto L_01F1;
  goto U_100E;
L_01F1:;

//  1544      TAG1 = J;  TAG2 = K

  TAG1 = J;
  TAG2 = K;

  //  1545      TYPE = MACRO;  VAL = I

  TYPE = MACRO;
  VAL = I;

  //  1546      LOOKUP(3)

  LOOKUP(3);

  //  1547      %CYCLE

L_01F2:;

//  1548         PRINT LINE

  PRINTLINE();

  //  1549         %EXIT %IF S('$') %AND TAG %AND TAG1 = END

  if (!(S(36))) goto L_01F3;
  if (!(TAG())) goto L_01F3;
  if (TAG1 != END) goto L_01F3;
  goto L_01F4;
L_01F3:;

//  1550         STARTPOS = PUTPOS

  STARTPOS = PUTPOS;

  //  1551         STARTPOS = PSEUDOLIM+1 %IF PSEUDOLIM # 0

  if (PSEUDOLIM == 0) goto L_01F5;
  STARTPOS = PSEUDOLIM + 1;
L_01F5:;

//  1552         READ LINE

  READLINE();

  //  1553      %REPEAT

  goto L_01F2;
L_01F4:;

//  1554      PUTPOS = STARTPOS;  PUT CHAR(0)

  PUTPOS = STARTPOS;
  PUTCHAR(0);

  //  1555      STARTPOS = PUTPOS

  STARTPOS = PUTPOS;

  //  1556      MACLIM = STARTPOS

  MACLIM = STARTPOS;

  //  1557      ->LEND

  goto U_1017;

  //  1558
  //  1559  %ROUTINE BNEST

  void BNEST(void) {
    //  1560  !!    BP = BP+4;  %MONITOR 23 %IF BP-NP >= 0
    //  1561      BP = BP+4;  !{}%signal 2,3 %IF BP-NP >= 0

    BP = BP + 4;

    //  1562  !!    INTEGER(BP-3) = SAVE;  INTEGER(BP-2) = TEMPS
    //  1563      set INTEGER(BP-3, SAVE);  set INTEGER(BP-2, TEMPS)

    SETINTEGER(BP - 3, SAVE);
    SETINTEGER(BP - 2, TEMPS);

    //  1564  !!    INTEGER(BP-1) = MACLIM;  INTEGER(BP) = DEFMIN
    //  1565      set INTEGER(BP-1, MACLIM);  set INTEGER(BP, DEFMIN)

    SETINTEGER(BP - 1, MACLIM);
    SETINTEGER(BP, DEFMIN);

    //  1566  %END

    return;
  } /* end of BNEST */

  //  1567
  //  1568  BEGIN:

U_1002:;

//  1569      BNEST

  BNEST();

  //  1570      ->NEWPAGE %IF SYM # NL

  if (SYM == 10) goto L_01F6;
  goto U_1013;
L_01F6:;

//  1571      ->LEND

  goto U_1017;

  //  1572
  //  1573  BEND:

U_100F:;

//  1574      FAULT('C') %IF NP # STORELIM %OR MP # 0

  if (NP != STORELIM) goto L_01F7;
  if (MP == 0) goto L_01F8;
L_01F7:;
  FAULT(67);
L_01F8:;

//  1575      MP = 0;  NP = STORELIM

  MP = 0;
  NP = STORELIM;

  //  1576      %IF BP # LABLIM %START

  if (BP == LABLIM) goto L_01F9;

    //  1577         SAVE = INTEGER(BP-3);  TEMPS = INTEGER(BP-2)

  SAVE = INTEGER(BP - 3);
  TEMPS = INTEGER(BP - 2);

  //  1578         MACLIM = INTEGER(BP-1);  STARTPOS = MACLIM

  MACLIM = INTEGER(BP - 1);
  STARTPOS = MACLIM;

  //  1579         DEFMIN = INTEGER(BP)

  DEFMIN = INTEGER(BP);

  //  1580         SET ACC

  SETACC();

  //  1581         BP = BP-4

  BP = BP - 4;

  //  1582         ->LEND %IF BP # LABLIM

  if (BP == LABLIM) goto L_01FA;
  goto U_1017;
L_01FA:;

//  1583      %FINISH

L_01F9:;

//  1584      CLOSE INPUT;  SELECT INPUT(MAIN)

  _imp_CLOSEINPUT();
  _imp_SELECTINPUT(MAIN);

  //  1585      BNEST

  BNEST();

  //  1586      LIST = 5

  LIST = 5;

  //  1587      PASS = PASS+1

  PASS = PASS + 1;

  //  1588      ->DO PASS %IF PASS # 2

  if (PASS == 2) goto L_01FB;
  goto U_1010;
L_01FB:;

//  1589
//  1590      OUTPUT RECORD %IF BINCOUNT = 208

  if (BINCOUNT != 208) goto L_01FC;
  OUTPUTRECORD();
L_01FC:;

//  1591      PUT(1)

  PUT(1);

  //  1592      OUTPUT RECORD

  OUTPUTRECORD();

  //  1593      FAULT('$')

  FAULT(36);

  //  1594      PRINT LOC;  PRINT LINE

  PRINTLOC();
  PRINTLINE();

  //  1595
  //  1596  %ENDOFPROGRAM

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