#include <perms.h>
void Icl9cezrs6imp(void) {
  const int Release = 4;
  const int Host = Mips;
  const int Target = Mips;
  const int Standardpt = 0x51;
  const int Minapt = 0x51;
  const int Minaprec = Minapt >> 4;
  const unsigned short Typeflag[13 /*0:12*/] = {
      0,      0x51, 0x52, 0x8009, 0x4031, 0x35, 0x6051,
      0x4041, 0x33, 0,    0x61,   0x62,   0x72};
  const unsigned char Ptrsize[128 /*0:127*/] = {8,
                                                [1 ... 15] = 0,
                                                [16 ... 31] = 0,
                                                [32 ... 47] = 0,
                                                8,
                                                4,
                                                0,
                                                4,
                                                0,
                                                8,
                                                0,
                                                4,
                                                [56 ... 63] = 0,
                                                8,
                                                4,
                                                [66 ... 79] = 0,
                                                8,
                                                4,
                                                4,
                                                [83 ... 95] = 0,
                                                8,
                                                0,
                                                4,
                                                [99 ... 111] = 0,
                                                8,
                                                [113 ... 127] = 0};
  const unsigned char Ptrrounding[384 /*0:383*/] = {
      [0 ... 127] = 3, [128 ... 255] = 3, [256 ... 383] = 3};
  const int Sframemisalign = 0;
  const int Aheadpt = 0x61;
  const int Aheadsize = 8;
  const int Minparamsize = 4;
  const int Rtparampt = 0x51;
  const int Rtparamsize = 4;
  const int Arrayrounding = 7;
  const int Arrayinrecrounding = 0;
  const int Strvalinwa = Yes;
  const int Strresinwa = Yes;
  const int Recvalinwa = No;
  const unsigned char Rnding[384 /*0:383*/] = {[0 ... 15] = 0,
                                               [16 ... 31] = 0,
                                               [32 ... 47] = 0,
                                               [48 ... 50] = 0,
                                               3,
                                               0,
                                               0,
                                               [54 ... 63] = 0,
                                               0,
                                               1,
                                               [66 ... 79] = 0,
                                               0,
                                               3,
                                               3,
                                               [83 ... 95] = 0,
                                               0,
                                               7,
                                               7,
                                               [99 ... 111] = 0,
                                               0,
                                               7,
                                               7,
                                               [115 ... 127] = 0,
                                               [128 ... 143] = 0,
                                               [144 ... 159] = 0,
                                               [160 ... 175] = 0,
                                               [176 ... 178] = 0,
                                               3,
                                               0,
                                               1,
                                               [182 ... 191] = 0,
                                               0,
                                               1,
                                               [194 ... 207] = 0,
                                               0,
                                               3,
                                               3,
                                               [211 ... 223] = 0,
                                               0,
                                               7,
                                               7,
                                               [227 ... 239] = 0,
                                               0,
                                               7,
                                               7,
                                               [243 ... 255] = 0,
                                               [256 ... 271] = 0,
                                               [272 ... 287] = 0,
                                               [288 ... 303] = 0,
                                               0,
                                               3,
                                               0,
                                               3,
                                               0,
                                               3,
                                               [310 ... 319] = 0,
                                               0,
                                               3,
                                               [322 ... 335] = 0,
                                               0,
                                               3,
                                               3,
                                               [339 ... 351] = 0,
                                               0,
                                               7,
                                               7,
                                               [355 ... 367] = 0,
                                               0,
                                               7,
                                               7,
                                               [371 ... 383] = 0};
  const unsigned char Bytes[8 /*0:7*/] = {[0 ... 2] = 0, 1, 2, 4, 8, 16};
  const unsigned char Words[8 /*0:7*/] = {[0 ... 2] = 0, 1, 1, 2, 4, 8};
  const int Darea = 6;
  const int Dvarea = 4;
  const int Lhsaddrfirst = No;
  const int Jrndbodies = No;
  const int Stackdown = Yes;
  const int Paramsbwards = No;
  const int Displayneeded = Yes;
  const int Displayrounding = 7;
  const int Displayc1 = 4;
  const int Displayc0 = 4;
  const int Rtparam1offset = 0;
  const int Alpha = 0;
  const _imp_string255 Ladate = _imp_str_literal("Apr 95");
  const int Maxrecsize = 0xffff;
  const int Noofsns = 67;
  const int Lrlpt = 0x62;
  const int Maxlevels = 31;
  const int Concop = 13;
  const int Sconst = 0;
  const int Lconst = 1;
  const int Dname = 2;
  const int Arname = 3;
  const int Viaptr = 4;
  const int Indname = 5;
  const int Indirect = 6;
  const int Localir = 7;
  const int Reftrip = 8;
  const int Inareg = 9;
  const int Developped = 10;
  const int Devaddr = 11;
  const int Btrefmask = 1 << Reftrip | 1 << Indirect | 1 << Viaptr;
  const int Referneeded = 1 << Indirect | 1 << Viaptr;
  const int Rthd = 1;
  const int Rdspy = 2;
  const int Rdarea = 3;
  const int Rdptr = 4;
  const int Rtbad = 5;
  const int Rtxit = 6;
  const int Xstop = 7;
  const int Notl = 10;
  const int Lneg = 11;
  const int Ifloat = 12;
  const int Modulus = 13;
  const int Shrtn = 14;
  const int Lngthn = 15;
  const int Jamshrtn = 16;
  const int Nullt = 18;
  const int Preload = 19;
  const int Ssptr = 21;
  const int Rsptr = 22;
  const int Asptr = 23;
  const int Darray = 24;
  const int Sline = 25;
  const int Stpck = 26;
  const int Forpre = 27;
  const int Forpost = 28;
  const int Forpr2 = 29;
  const int Precl = 30;
  const int Rcall = 31;
  const int Rcrfr = 32;
  const int Rcrmr = 33;
  const int Getad = 35;
  const int Rtoi1 = 36;
  const int Rtoi2 = 37;
  const int Itos1 = 38;
  const int Mnitr = 39;
  const int Pprof = 40;
  const int Rtfp = 41;
  const int Onev1 = 42;
  const int Onev2 = 43;
  const int Dvstt = 44;
  const int Dvend = 45;
  const int Forend = 46;
  const int Dmass = 47;
  const int Rtoi3 = 48;
  const int Ucnop = 50;
  const int Ucb1 = 51;
  const int Ucb2 = 52;
  const int Ucb3 = 53;
  const int Ucw = 54;
  const int Ucbw = 55;
  const int Ucww = 56;
  const int Uclw = 57;
  const int Ucb2w = 58;
  const int Ucnam = 59;
  const int Add = 128;
  const int Sub = 129;
  const int Noneq = 130;
  const int Orl = 131;
  const int Mult = 132;
  const int Intdiv = 133;
  const int Realdiv = 134;
  const int Andl = 135;
  const int Rshift = 136;
  const int Lshift = 137;
  const int Rexp = 138;
  const int Comp = 139;
  const int Dcomp = 140;
  const int Vmy = 141;
  const int Comb = 142;
  const int Vass = 143;
  const int Vjass = 144;
  const int Iexp = 145;
  const int Badj = 146;
  const int Aindx = 147;
  const int Ifetch = 148;
  const int Lass = 149;
  const int Forck = 150;
  const int Precc = 151;
  const int Concat = 152;
  const int Iocpc = 153;
  const int Pass1 = 154;
  const int Pass2 = 155;
  const int Pass3 = 156;
  const int Pass4 = 157;
  const int Pass5 = 158;
  const int Pass6 = 159;
  const int Bjump = 160;
  const int Fjump = 161;
  const int Remlb = 162;
  const int Tlab = 163;
  const int Dclsw = 164;
  const int Setsw = 165;
  const int Gotosw = 166;
  const int Strass1 = 167;
  const int Strass2 = 168;
  const int Strjt = 169;
  const int Ahass = 170;
  const int Ptras = 171;
  const int Mapres = 172;
  const int Fnres = 173;
  const int Scomp = 174;
  const int Sdcmp = 175;
  const int Pres1 = 176;
  const int Pres2 = 177;
  const int Resln = 178;
  const int Resfn = 179;
  const int Sigev = 180;
  const int Recass = 181;
  const int Aainc = 182;
  const int Ahadj = 183;
  const int Ctgen = 184;
  const int Getptr = 185;
  const int Sindx = 186;
  const int Zcomp = 187;
  const int Clshift = 188;
  const int Cashift = 189;
  const int Dvbpr = 190;
  const int Rstore = 191;
  const int Multx = 192;
  typedef struct Parmf {
    int Bits1;
    int Bits2;
    int Ttoput;
    unsigned char Let;
    unsigned char Dynamic;
    unsigned char Line;
    unsigned char Trace;
    unsigned char Arr;
    unsigned char Dbug;
    unsigned char Chk;
    unsigned char Diag;
    unsigned char Opt;
    unsigned char Free;
    unsigned char List;
    unsigned char Cprmode;
    unsigned char Compiler;
    unsigned char Z;
    unsigned char Y;
    unsigned char Prof;
    unsigned char Inhcode;
    unsigned char Dcomp;
    unsigned char Faulty;
    unsigned char X;
    unsigned char Stack;
    unsigned char Map;
    unsigned char Quotes;
    unsigned char S2;
    int Lpoput;
    int Sp0;
  } Parmf;
  typedef struct Levelf {
    int Rbase;
    int Diaginf;
    int Ral;
    int Flag;
    int L;
    int M;
    int Nmdecs;
    int Onword;
    int Oninf;
    int Label;
    int Jround;
    int Unattformats;
    int Psize;
    int Entryad;
    int Display;
    int Auxsbase;
    int Names;
    int Snmax;
    int Sn;
    int Ressize;
    int Clevel;
    int Set;
    int Iblkid;
    int Exitlab;
    int Contlab;
    int S3;
    int Avlwsp[5 /*0:4*/];
  } Levelf;
  if ((1 << Host & Unsignedshorts) == 0) {
    typedef struct Rd {
    } Rd;
    typedef struct Tagf {
      int Link;
    } Tagf;
    typedef struct Tripf {
      unsigned char Opern;
      unsigned char Optype;
      unsigned char Cnt;
      unsigned char Dpth;
      short Flags;
      short Puse;
      short Flink;
      short Blink;
      int X1;
      Rd Opnd1;
      Rd Opnd2;
    } Tripf;
    typedef struct Listf {
      int Link;
    } Listf;
  } else {
    typedef struct Rd {
    } Rd;
    typedef struct Tagf {
      int Link;
    } Tagf;
    typedef struct Tripf {
      unsigned char Opern;
      unsigned char Optype;
      unsigned char Cnt;
      unsigned char Dpth;
      unsigned short Flags;
      unsigned short Puse;
      unsigned short Flink;
      unsigned short Blink;
      int X1;
      Rd Opnd1;
      Rd Opnd2;
    } Tripf;
    typedef struct Listf {
      int Link;
    } Listf;
  }
  typedef struct Workaf {
    int Nnames;
    int Ccsize;
    int Dsize;
    int Aslmax;
    int Aslcurbtm;
    int Constptr;
    int Constbtm;
    int Lasttrip;
    int Wkfilead;
    int Wkfilek;
    int Fileaddr;
    int Release;
    int Aasl0;
    int Constlimit;
    int Rtcount;
    int Artop;
    int Amainep;
    int Dictbase;
    int Optcnt;
    int Inclhead;
    int S2;
    int S3;
    int S4;
    int *Line;
    int *N;
    int *S5;
    _imp_string255 Ladate;
    unsigned char Cc;
    unsigned char A;
    unsigned char Lett;
    int Word;
    int Tags;
    int Ctable;
    Levelf Levelinf;
    int Plabs[32 /*0:31*/];
    int Plink[32 /*0:31*/];
    Listf Aslist;
  } Workaf;
  const int Leavestacked = IEXP(2, 0);
  const int Loadop1 = IEXP(2, 1);
  const int Loadop2 = IEXP(2, 2);
  const int Notinreg = IEXP(2, 3);
  const int Useestack = IEXP(2, 4);
  const int Usemstack = IEXP(2, 5);
  const int Constantop = IEXP(2, 6);
  const int Commutable = IEXP(2, 7);
  const int Bstruct = IEXP(2, 12);
  const int Usedlate = IEXP(2, 13);
  const int Asslevel = IEXP(2, 14);
  const int Dontopt = IEXP(2, 15);
  typedef struct Emasfhdrf {
    int Endra;
    int Startra;
    int Fbytesize;
    int W3;
    int W4;
    int W5;
    int W6;
    int W7;
  } Emasfhdrf;
  const int Snpt = 0x1006;
  const int Unasspat = 0x80808080;
  const int Labusedbit = 0x01000000;
  const int Labsetbit = 0x02000000;
  const int Maxdict = 0x100;
  int I;
  int K;
  int Dummyformat;
  int P1size;
  int Starsize;
  int Asl;
  int Arsize;
  int Oldline;
  int Nextp;
  int Snum;
  int Rlevel;
  int Nmax;
  int Plabel;
  int Level;
  int Profaad;
  int Lastinst;
  int Line;
  int N;
  int Bfflag;
  int Rbase;
  int Q;
  int R;
  int Fname;
  int Stmts;
  int Filesize;
  int Bimstr;
  int Maxulab;
  int Sflabel;
  int Nexttrip;
  int *Sstl;
  int *Ustptr;
  int Curlinead;
  int Nextlinead;
  int Currentssalt;
  _imp_string255 Mainep;
  int Cas[13 /*0:12*/];
  Parmf Parm;
  Workaf Worka;
  if (Host == Ibm || Host == Amdahl || Host == Ibmxa || Host == Vax)
    extern int *Comreg(int N);
  else if (Host == Gould || Host == M88k || Host == Rs6 || Host == Mips)
    extern int *Comreg(int N);
  else
    extern int *Comreg(int N);
  const int Bytesperkforsource = 256;
  {
    Emasfhdrf *Shdr;
    Emasfhdrf *Whdr;
    Worka = 0;
    Worka.Fileaddr = *Comreg(46);
    Parm = 0;
    Parm.Bits1 = *Comreg(27);
    Parm.Bits2 = *Comreg(28) | Maxdict;
    Parm.Ttoput = *Comreg(40);
    Parm.Lpoput = *Comreg(23);
    Worka.Wkfilead = *Comreg(14);
    Comreg(24) = 16;
    Whdr = Record(Worka.Wkfilead);
    Worka.Wkfilek = Whdr->Fbytesize >> 10;
    if (Worka.Fileaddr <= 0) {
      if (Worka.Fileaddr < -1)
        Filesize = Imod(Worka.Fileaddr);
      else
        Filesize = 64000;
      Worka.Fileaddr = 0;
    } else {
      Shdr = Record(Worka.Fileaddr);
      Filesize = Shdr->Endra;
    }
    Worka.Nnames = 1023;
    if (Worka.Wkfilek > 513) Worka.Nnames = 2047;
    if (Worka.Wkfilek > 1000 || (Parm.Bits2 & Maxdict) != 0)
      Worka.Nnames = 4095;
    Asl = 3 * Worka.Nnames;
    Worka.Aslmax = Asl;
    Arsize = Worka.Wkfilek * (1024 - Bytesperkforsource) - 300;
  }
  unsigned char Af[Arsize + 1];
  unsigned char A;
  Listf Aslist[Asl + 1];
  int Tags[(Worka.Nnames) + 1];
  int Word[(Worka.Nnames) + 1];
  int Dvheads[13 /*0:12*/];
  Levelf Levelinf[32 /*0:31*/];
  typedef struct Swdataform {
    int Lseen;
    int Default;
    int Slabs[1024 /*0:1023*/];
  } Swdataform;
  extern void Free(int Ad);
  extern int Malloc(int Space);
  extern void Initasl(Listf A, int B);
  extern void Printtrips(Tripf Trops);
  extern void Phex(int Val);
  extern int Morespace(void);
  extern void Insertatend(int S, int A, int B, int C);
  extern void Insertafter(int S, int A, int B, int C);
  extern void Pop(int C, int P, int Q, int R);
  extern void Push(int C, int S1, int S2, int S3);
  extern int Find(int Lab, int List);
  extern void Binsert(int T, int B, int S1, int S2, int S3);
  extern void Clearlist(int Head);
  extern void Filldtabrefs(int Head);
  extern void Cxref(_imp_string255 Name, int Mode, int Xtra, int At);
  extern void Impabort(void);
  extern void Prologue(Listf Alist);
  extern void Epilogue(int Stmts);
  extern void Pdata(int Area, int Bndry, int L, int Ad);
  extern void Prdata(int Area, int Bndry, int L, int Rep, int Ad);
  extern int Pinitown(int Ptype, int Acc, Rd Init, _imp_string255 Xname);
  extern int Pownarrayhead(int Ptype, int J, int Lb, int Size, int Aoffset,
                           int Aarea, int Dvoffset, _imp_string255 Xname);
  extern void Fault(int A, int B, int C);
  extern void Warn(int N, int V);
  extern void Tripopt(Tripf T, int Firsttrip);
  extern void Movebytes(int Length, int Fbase, int Foff, int Tobase, int Tooff);
  extern void Ctop(int Op, int Mask, int Xtra, Rd Opnd1, Rd Opnd2);
  if (Host != Target) {
    extern void Reformatc(Rd Opnd);
    extern void Changesex(int Basead, int Offset, int L);
  }
  extern void Generate(Tripf T, int Currlevel, void Getwsp(int Pl, int Size));
  extern _imp_string255 Printname(int Jj);
  extern void Printlist(int Head);
  K = Host / 10;
  if (K == 0) K = 1;
  K = Bytesperkforsource / K;
  A = &Array(Worka.Wkfilead + K * Worka.Wkfilek, Af);
  {
    extern int Passone(void);
    Worka.Ccsize = Bytesperkforsource * (Worka.Wkfilek - 1);
    unsigned char Ccf[(Worka.Ccsize) + 1];
    unsigned char Cc;
    Cc = &Array(Worka.Wkfilead + 32, Ccf);
    Worka.Cc = &Cc;
    Worka.A = &A;
    Worka.Word = &Word;
    Worka.Tags = &Tags;
    Worka.Line = &Line;
    Worka.N = &N;
    Worka.Release = Release;
    Worka.Ladate = Ladate;
    Worka.Aasl0 = Addr(Aslist(0));
    Worka.Amainep = Addr(Mainep);
    Worka.Lasttrip = Worka.Ccsize / 40 - 2;
    if (Worka.Lasttrip > 699) Worka.Lasttrip = 699;
    Worka.Optcnt = 0;
    Worka.Constptr = 1;
    Worka.Aslist = &Aslist;
    Plabel = 24999;
    N = 12;
    Maxulab = Worka.Nnames + 16384;
    Lastinst = 0;
    Sflabel = 20999;
    Rlevel = 0;
    Nmax = 0;
    Bfflag = 0;
    Rbase = 1;
    Sstl = &Cas(4);
    Ustptr = &Cas(5);
    Stmts = 1;
    Snum = 0;
    Bimstr = 0;
    Worka.Rtcount = 1;
    Mainep = _imp_str_literal("s#go");
    Initasl(Aslist, Asl);
    for (I = 0; I <= 12; I++) {
      Cas(I) = 0;
      Dvheads(I) = 0;
    }
    Dummyformat = 0;
    Push(Dummyformat, 0, 0, 0);
    P1size = Passone;
    R = P1size;
    Worka.Artop = P1size;
  }
  if (Parm.Faulty != 0) {
    Comreg(24) = 8;
    Comreg(47) = Parm.Faulty;
    return;
  }
  {
    Levelf *Currinf;
    int Twsphead;
    int Forcnt;
    int Fordpth;
    int Forcecnt;
    int Internalblockid;
    if (Host == Emas || Host == Ibm || Host == Amdahl || Host == Ibmxa)
      Tripf Triples[(Worka.Lasttrip) + 1];
    else {
      Tripf Triplesform[(Worka.Lasttrip) + 1];
      Tripf Triples;
      Triples = &Array(Worka.Wkfilead + 32, Triplesform);
    }
    int Cf[(12 * Worka.Nnames) + 1];
    int Ctable;
    void Reusetemps(void);
    void Getwsp(int Place, int Size);
    void Returnwsp(int Place, int Size);
    void Compileastmnt(void);
    void Outsym(int Sym);
    void Forceline(void);
    void Outstring(_imp_string255 Str);
    void Outint(int Id);
    int Newtrip(void);
    int Fromar4(int Ptr);
    int Fromar2(int Ptr);
    int Uconsttrip(int Opern, int Optype, int Flags, int Const);
    int Ulconsttrip(int Opern, int Optype, int Flags, int Const1, int Const2);
    int Unametrip(int Opern, int Optype, int Flags, int Name);
    int Utemptrip(int Opern, int Optype, int Flags, int Temp);
    int Brectrip(int Opern, int Optype, int Flags, Rd Opnd1, Rd Opnd2);
    int Urectrip(int Opern, int Optype, int Flag, Rd Opnd1);
    void Keepusecount(Rd Opnd);
    void Css(int P);
    typedef struct Outform {
      int Line;
      int Length;
      int Lastnl;
      int Prevlast;
      unsigned char L;
    } Outform;
    static unsigned char Lspace[131073 /*0:131072*/];
    static Outform Opline;
    const int Breakoplines = 99;
    Opline = 0;
    Opline.L = &Lspace;
    for (I = 0; I <= Maxlevels; I++) {
      Levelinf(I) = 0;
      Levelinf(I).Names = -1;
    }
    Ctable = &Array(Addr(Aslist(1)), Cf);
    Worka.Ctable = &Ctable;
    Worka.Levelinf = &Levelinf;
    Ctable(0) = 'CTAB';
    Twsphead = 0;
    Forcnt = 0;
    Fordpth = 0;
    Forcecnt = 0;
    Internalblockid = 0;
    Prologue(Aslist);
    Line = 0;
    Nexttrip = 1;
    Triples(0) = 0;
    Nextp = 1;
    Level = 1;
    Stmts = 0;
    Currinf = &Levelinf(Level);
    Rlevel = 0;
    Rbase = 0;
    Currinf = 0;
    Currinf->Clevel = Level;
    Currinf->Names = -1;
    while ((A(Nextp + 3) | A(Nextp + 4)) != 0) Compileastmnt();
    Outsym(Nl);
    Outstring(_imp_str_literal("/* end of automatic translation */"));
    Outsym(Nl);
    Forceline();
    Line = 99999;
    Epilogue(Stmts);
    if (Parm.Faulty != 0) {
      Comreg(24) = 8;
      Stmts = Parm.Faulty;
    } else
      Comreg(24) = 0;
    Comreg(47) = Stmts;
    if (Host == Perq) {
      asm("RETURN;");
    } else
      goto P2end;
    int Insertcurly(int Cad, int At) {
      int I;
      int J;
      int K;
      int Scount;
      int Res;
      static unsigned char Save[65536 /*1:65536*/];
      Scount = 0;
      if (At > Opline.Length) At = Opline.Length;
      for (I = At; I <= Opline.Length - 1; I++) {
        Scount = Scount + 1;
        Save(Scount) = Opline.L(I);
      }
      Opline.Length = At;
      if (*Byteinteger(Curlinead) != '#') {
        Outsym(9);
        Outstring(_imp_str_literal("/*"));
      } else
        Outsym('{');
      J = Cad;
      I = 0;
      for (;;) {
        J = J + 1;
        I = I + 1;
        if (*Byteinteger(J) == Nl || *Byteinteger(J) == '}') {
          if (*Byteinteger(Curlinead) != '#')
            Outstring(_imp_str_literal("*/"));
          else if (*Byteinteger(J) == '}')
            Outsym('}');
          Res = I + 1;
          break;
        } else {
          Opline.L(Opline.Length) = *Byteinteger(J);
          Opline.Length = Opline.Length + 1;
        }
      }
      for (I = 1; I <= Scount; I++) {
        Opline.L(Opline.Length) = Save(I);
        Opline.Length = Opline.Length + 1;
      }
      return (Res);
    }
    int Locatecurly(int Cad) {
      int Ccount;
      int Firstc;
      int I;
      int Bcount;
      int Commaafter;
      Ccount = 0;
      Bcount = 0;
      Commaafter = 0;
      I = Cad;
      do
        I = I + 1;
      while (*Byteinteger(I) != '}' && *Byteinteger(I) != Nl);
      if (*Byteinteger(I) == '}') {
        I = I + 1;
        while (*Byteinteger(I) == ' ') I = I + 1;
        if (*Byteinteger(I) == ',') {
          Commaafter = 1;
          Ccount = 1;
        }
      }
      for (I = Cad; I >= Curlinead; I--)
        if (*Byteinteger(I) == ',') {
          if (Ccount == 0) Firstc = I;
          Ccount = Ccount + 1;
        }
      if (Ccount == 0) return (Opline.Length);
      if (Commaafter == 0)
        for (I = Firstc; I <= Cad - 1; I++) {
          if (33 <= *Byteinteger(I) && *Byteinteger(I) <= 127)
            Bcount = Bcount + 1;
          if (*Byteinteger(I) == '{' || *Byteinteger(I) == '}')
            Bcount = Bcount + 1;
        }
      for (I = 0; I <= Opline.Length; I++)
        if (Opline.L(I) == ',' || Opline.L(I) == ';') {
          Ccount = Ccount - 1;
          if (Ccount == 0) goto Next;
        }
      return (Opline.Length);
    Next:;
      if (Commaafter != 0) return (I);
      if (Bcount == 0) return (I + 1);
      for (I = I; I <= Opline.Length; I++) {
        if (33 <= Opline.L(I) && Opline.L(I) <= 127) Bcount = Bcount - 1;
        if (Bcount == 0) {
          while (I < Opline.Length - 1 &&
                 ('a' <= Opline.L(I + 1) && Opline.L(I + 1) <= 'z' ||
                  'A' <= Opline.L(I + 1) && Opline.L(I + 1) <= 'Z' ||
                  '0' <= Opline.L(I + 1) && Opline.L(I + 1) <= '9' ||
                  Opline.L(I + 1) == '_') &&
                 ('a' <= Opline.L(I) && Opline.L(I) <= 'z' ||
                  'A' <= Opline.L(I) && Opline.L(I) <= 'Z' ||
                  '0' <= Opline.L(I) && Opline.L(I) <= '9' ||
                  Opline.L(I) == '_'))
            I = I + 1;
          if (Opline.L(I + 1) == '*' && Opline.L(I) == '/') I = I - 1;
          if (Opline.L(I + 1) == '/' && Opline.L(I) == '*') I = I + 1;
          if (Opline.L(I + 1) == '*' && Opline.L(I + 2) == '/') I = I + 2;
          return (I + 1);
        }
      }
      return (Opline.Length);
    }
    void Curlycheck(int Mode) {
      static int Lastlinead;
      int I;
      int At;
      if (Nextlinead > Curlinead && Curlinead != Lastlinead &&
          Nextlinead - Curlinead <= 2047) {
        for (I = Curlinead; I <= Nextlinead - 1; I++)
          if (*Byteinteger(I) == '{') {
            At = Locatecurly(I);
            I = I + Insertcurly(I, At);
          }
        Lastlinead = Curlinead;
      }
    }
    void Forceline(void) {
      int I;
      int At;
      extern int Filesseen;
      if (Filesseen == 0 || Line < 20000) {
        Curlycheck(0);
        if (Opline.Length == 0) return;
        for (I = 0; I <= Opline.Length - 1; I++) Printsymbol(Opline.L(I));
        Newline();
      }
      I = Opline.Length - 1;
      while (I > 0 && (Opline.L(I) == '}' || Opline.L(I) == Nl)) I = I - 1;
      if (I >= 0) Opline.Prevlast = Opline.L(I);
      Opline.Length = 0;
      Opline.Lastnl = -1;
    }
    void Outsym(int Sym) {
      if (Sym == Nl) Opline.Lastnl = Opline.Length;
      Opline.L(Opline.Length) = Sym;
      Opline.Length = Opline.Length + 1;
      if (Currentssalt == 12 && Sym == ',' &&
          Opline.Length - Opline.Lastnl > Breakoplines >> 1) {
        Outsym(Nl);
        return;
      }
      if (Opline.Length - Opline.Lastnl > Breakoplines)
        if (Opline.L(Opline.Lastnl + 1) != '#')
          if (Sym == ' ' || Sym == ',' || Sym == ')') Outsym(Nl);
    }
    void Outsep(void) {
      int I;
      I = Opline.Length - 1;
      while (I >= 0 && (Opline.L(I) == Nl || Opline.L(I) == '}')) I = I - 1;
      if (I >= 0 && Opline.L(I) == ';') return;
      if (I < 0 && Opline.Prevlast == ';') return;
      Outsym(';');
    }
    void Outstring(_imp_string255 S) {
      int I;
      int J;
      int Sym;
      J = Opline.Length;
      for (I = 1; I <= *Length(S); I++) {
        Sym = *Charno(S, I);
        if (Sym == Nl) {
          Opline.L(J) = '\\';
          Opline.L(J + 1) = 'n';
          J = J + 2;
        } else if (Sym == '"') {
          Opline.L(J) = '\\';
          Opline.L(J + 1) = '"';
          J = J + 2;
        } else {
          Opline.L(J) = Sym;
          J = J + 1;
        }
      }
      Opline.Length = J;
    }
    void Outcommentend(void) {
      if (Opline.L(Opline.Length - 1) != '*')
        ;
      Outstring(_imp_str_literal("*/"));
    }
    _imp_string255 Validname(_imp_string255 Name) {
      const int Nr = 34 + 1;
      const _imp_string255 Rnames[36 /*0:35*/] = {
          _imp_str_literal("sizeof"),   _imp_str_literal("auto"),
          _imp_str_literal("static"),   _imp_str_literal("extern"),
          _imp_str_literal("register"), _imp_str_literal("typedef"),
          _imp_str_literal("char"),     _imp_str_literal("short"),
          _imp_str_literal("long"),     _imp_str_literal("int"),
          _imp_str_literal("unsigned"), _imp_str_literal("float"),
          _imp_str_literal("double"),   _imp_str_literal("void"),
          _imp_str_literal("enum"),     _imp_str_literal("struct"),
          _imp_str_literal("union"),    _imp_str_literal("if"),
          _imp_str_literal("else"),     _imp_str_literal("while"),
          _imp_str_literal("do"),       _imp_str_literal("for"),
          _imp_str_literal("switch"),   _imp_str_literal("case"),
          _imp_str_literal("default"),  _imp_str_literal("break"),
          _imp_str_literal("continue"), _imp_str_literal("return"),
          _imp_str_literal("goto"),     _imp_str_literal("abs"),
          _imp_str_literal("fabs"),     _imp_str_literal("volatile"),
          _imp_str_literal("asm"),      _imp_str_literal("const"),
          _imp_str_literal("signed"),   _imp_str_literal("exit")};
      int I;
      for (I = 0; I <= Nr; I++)
        if (Name == Rnames(I)) {
          Charno(Name, 1) = *Charno(Name, 1) - 32;
          return (Name);
        }
      return (Name);
    }
    void Revisename(_imp_string255 Name) {
      int I;
      return;
      for (I = 1; I <= *Length(Name); I++)
        if ('a' <= *Charno(Name, I) && *Charno(Name, I) <= 'z')
          Charno(Name, I) = *Charno(Name, I) - 32;
    }
    void Outname(int Id) {
      int I;
      int Ad;
      Listf *Lcell;
      _imp_string255 Name;
      I = Worka.Word(Id);
      Ad = Addr(Worka.Lett(I));
      Name = *String(Ad);
      Lcell = &Aslist(Worka.Tags(Id));
      if ((Lcell->Ptype & 0xff00) == 0x4000 && (Lcell->Uioj & 0xf0) == 0)
        Revisename(Name);
      if (Lcell->Ptype != 0x156) Name = Validname(Name);
      Outstring(Name);
      if (Opline.Length - Opline.Lastnl > Breakoplines)
        if (Opline.L(Opline.Lastnl + 1) != '#') Outsym(Nl);
    }
    void Outswadname(int Id) {
      int I;
      int Ad;
      Listf *Lcell;
      _imp_string255 Name;
      I = Worka.Word(Id);
      Ad = Addr(Worka.Lett(I));
      Name = *String(Ad);
      Lcell = &Aslist(Worka.Tags(Id));
      if ((Lcell->Ptype & 0xff00) == 0x4000 && (Lcell->Uioj & 0xf0) == 0)
        Revisename(Name);
      Outstring(Name);
      if (Currinf->Iblkid > 0) {
        Outsym('_');
        Outint(Currinf->Iblkid);
      }
    }
    int Possibletypename(int Id, _imp_string255 Typename) {
      int I;
      int Ad;
      int J;
      _imp_string255 Name;
      _imp_string255 Firstpart;
      _imp_string255 S;
      _imp_string255 T;
      I = Worka.Word(Id);
      Ad = Addr(Worka.Lett(I));
      Name = *String(Ad);
      J = 0;
      while (_imp_cond_resolve(Name, S, _imp_str_literal("type"), Name)) {
        if (J == 0)
          Firstpart = S;
        else
          Firstpart =
              _imp_join(Firstpart, _imp_join(_imp_str_literal("type"), S));
        J = J + 1;
      }
      if (Name == _imp_str_literal("") && *Length(Firstpart) > 3) {
        Typename = _imp_join(Firstpart, _imp_str_literal("_type"));
        return (1);
      } else {
        Typename = _imp_str_literal("not_a_valid_type_name");
        return (0);
      }
    }
    void Outrevisablename(int Id) {
      int I;
      int Ad;
      _imp_string255 Name;
      I = Worka.Word(Id);
      Ad = Addr(Worka.Lett(I));
      Name = *String(Ad);
      Revisename(Name);
      Outstring(Validname(Name));
      if (Opline.Length - Opline.Lastnl > Breakoplines)
        if (Opline.L(Opline.Lastnl + 1) != '#') Outsym(Nl);
    }
    void Outformatname(int Kf) {
      int I;
      int Kk;
      Listf *Lcell;
      _imp_string255 S;
      for (I = 0; I <= Worka.Nnames; I++) {
        Kk = Tags(I);
        if (Kk != 0) {
          Lcell = &Aslist(Kk);
          if ((Lcell->Ptype & 15) == 4 && Lcell->Kform == Kf) {
            if (Possibletypename(I, S) > 0)
              Outstring(S);
            else {
              if (Lcell->Ptype == 4)
                Outstring(_imp_str_literal("struct "));
              else
                Outstring(_imp_str_literal("union "));
              Outname(I);
            }
            return;
          }
        }
      }
      Outstring(_imp_str_literal(" ? unknown format name ?"));
    }
    void Outextern(int Extern) {
      if ((Extern & 3) == 0)
        Outstring(_imp_str_literal("static const "));
      else if (Extern == 1)
        Outstring(_imp_str_literal("static "));
      else if (Extern == 3)
        Outstring(_imp_str_literal("extern "));
    }
    void Outhex(int Value) {
      const _imp_string255 Hex[16 /*0:15*/] = {
          _imp_str_literal("0"), _imp_str_literal("1"), _imp_str_literal("2"),
          _imp_str_literal("3"), _imp_str_literal("4"), _imp_str_literal("5"),
          _imp_str_literal("6"), _imp_str_literal("7"), _imp_str_literal("8"),
          _imp_str_literal("9"), _imp_str_literal("A"), _imp_str_literal("B"),
          _imp_str_literal("C"), _imp_str_literal("D"), _imp_str_literal("E"),
          _imp_str_literal("F")};
      int I;
      int Digit;
      _imp_string255 Res;
      Res = _imp_str_literal("");
      for (I = (8 << 2) - 4; I >= 0; I -= 4) {
        Digit = Value >> I & 15;
        if (Res != _imp_str_literal("") || Digit != 0)
          Res = _imp_join(Res, Hex(Digit));
      }
      if (Res == _imp_str_literal("")) Res = _imp_str_literal("0");
      Outstring(_imp_join(_imp_str_literal("0x"), Res));
    }
    void Outtype(int Type, int Kf) {
      if (Type == 0x31)
        Outstring(_imp_str_literal("unsigned char "));
      else if (Type == 0x41)
        Outstring(_imp_str_literal("short int "));
      else if (Type == 0x51)
        Outstring(_imp_str_literal("int "));
      else if (Type == 0x61)
        Outstring(_imp_str_literal("INT64 "));
      else if (Type == 0x52)
        Outstring(_imp_str_literal("float "));
      else if (Type == 0x62)
        Outstring(_imp_str_literal("double "));
      else if (Type == 0x72)
        Outstring(_imp_str_literal("long double "));
      else if (Type == 0x35)
        Outstring(_imp_str_literal("char * "));
      else if (Type == 0x33) {
        Outformatname(Kf);
        Outsym(' ');
      } else {
        Outstring(_imp_str_literal("void "));
      }
    }
    void Outxtype(int Xtype, int Kf) {
      int Rout;
      int Nam;
      int Arr;
      int Type;
      Rout = Xtype >> 12 & 1;
      Nam = Xtype >> 10 & 3;
      Arr = Xtype >> 8 & 3;
      Type = Xtype & 7;
      Outtype(Xtype & 255, Kf);
      if ((Rout != 0 || Arr != 0 || (Nam & 1) != 0) && Type != 5) Outsym('*');
    }
    void Outlhex(int Msh, int Lsh) {
      const _imp_string255 Hex[16 /*0:15*/] = {
          _imp_str_literal("0"), _imp_str_literal("1"), _imp_str_literal("2"),
          _imp_str_literal("3"), _imp_str_literal("4"), _imp_str_literal("5"),
          _imp_str_literal("6"), _imp_str_literal("7"), _imp_str_literal("8"),
          _imp_str_literal("9"), _imp_str_literal("A"), _imp_str_literal("B"),
          _imp_str_literal("C"), _imp_str_literal("D"), _imp_str_literal("E"),
          _imp_str_literal("F")};
      int I;
      int Digit;
      _imp_string255 Res;
      Res = _imp_str_literal("");
      for (I = (8 << 2) - 4; I >= 0; I -= 4) {
        Digit = Msh >> I & 15;
        if (Res != _imp_str_literal("") || Digit != 0)
          Res = _imp_join(Res, Hex(Digit));
      }
      for (I = (8 << 2) - 4; I >= 0; I -= 4) {
        Digit = Lsh >> I & 15;
        if (Res != _imp_str_literal("") || Digit != 0)
          Res = _imp_join(Res, Hex(Digit));
      }
      if (Res == _imp_str_literal("")) Res = _imp_str_literal("0");
      Outstring(_imp_join(_imp_str_literal("0x"), Res));
    }
    void Outint(int Value) {
      int Sign;
      int Work;
      int Ptr;
      unsigned char Ch[16 /*0:15*/];
      if (Value == 0x80000000) {
        Outhex(Value);
        return;
      }
      Sign = ' ';
      if (Value < 0) {
        Sign = '-';
        Value = -Value;
      }
      Ptr = 0;
      do {
        Work = Value / 10;
        Ch(Ptr) = Value - 10 * Work;
        Value = Work;
        Ptr = Ptr + 1;
      } while (Value == 0);
      Work = Ptr - 1;
      if (Sign == '-') Outsym(Sign);
      for (Ptr = Work; Ptr >= 0; Ptr--) Outsym(Ch(Ptr) + '0');
    }
    void Outinternames(int Info) {
      int K;
      int Id;
      for (K = 12; K >= 0; K -= 4) {
        Id = Info >> K & 15;
        if (Id != 0) {
          if ((Id & 8) != 0) {
            Outstring(_imp_str_literal("s"));
            Outint(Id & 7);
          } else {
            Outstring(_imp_str_literal("u"));
            Outint((Id & 7) - 1);
          }
          Outsym('.');
        }
      }
    }
    void Outfl(double X, int N);
    void Print(double X, int N, int M) {
      const double Dz = 0;
      double Y;
      double Z;
      double Round;
      double Factor;
      int I;
      int J;
      int L;
      int Morig;
      unsigned char Sign;
      M = M & 63;
      Morig = M;
      if (N < 0) N = 1;
      N = N & 31;
      X = X + Dz;
      Sign = ' ';
      if (X < 0) Sign = '-';
      Y = Mod(X);
      Round = 0.5 / REXP(10, M);
      if (Y > 1.0 * REXP(10, 16) || N == 0) {
        if (N > M) M = N;
        Outfl(X, M);
        return;
      }
      I = 0;
      Z = 1;
      Y = Y + Round;
      do {
        I = I + 1;
        Z = 10 * Z;
      } while (Z <= Y);
      Outsym(Sign);
      J = I - 1;
      Z = REXP(10, J);
      Factor = 1 / 10;
      for (;;) {
        do {
          L = Intpt(Y / Z);
          Y = Y - L * Z;
          Z = Z * Factor;
          Outsym(L + '0');
          J = J - 1;
        } while (J >= 0);
        if (M == 0) break;
        Outstring(_imp_str_literal("."));
        J = M - 1;
        Z = REXP(10, (J - 1));
        M = 0;
        Y = 10 * Y * Z;
      }
      if (Morig > 0)
        while (Opline.L(Opline.Length - 1) == '0' &&
               Opline.L(Opline.Length - 2) != '.')
          Opline.Length = Opline.Length - 1;
    }
    void Outfl(double X, int N) {
      double Sign;
      double Round;
      double Factor;
      double Lb;
      double Ub;
      const double Dz = 0;
      int Count;
      int Inc;
      Inc = *Integer(Addr(X));
      if ((Inc >> 20 & 0x7ff) == 0x7ff) {
        Outstring(_imp_str_literal("NAN {"));
        Outhex(Inc);
        Outhex(*Integer(Addr(X) + 4));
        Outsym('}');
        return;
      }
      Round = 0.5 / REXP(10, N);
      Lb = 1 - Round;
      Ub = 10 - Round;
      Sign = 1;
      X = X + Dz;
      if (X == 0)
        Count = 0;
      else {
        if (X < 0) {
          X = -X;
          Sign = -Sign;
        }
        Inc = 1;
        Count = 0;
        Factor = 1 / 10;
        if (X <= 1) {
          Factor = 10;
          Inc = -1;
        }
        while (X < Lb || X >= Ub) {
          X = X * Factor;
          Count = Count + Inc;
        }
      }
      Print(Sign * X, 1, N);
      if (Count != 0) {
        Outstring(_imp_str_literal("E"));
        Outint(Count);
      }
    }
    void Forcetrips(void) {
      Triples(0) = 0;
      Nexttrip = 1;
      Triples(0).Flink = 1;
    }
    void Compileastmnt(void) {
      int I;
      Forcetrips();
      I = Nextp;
      Starsize = (A(Nextp) << 16) + (A(Nextp + 1) << 8) + A(Nextp + 2);
      Nextp = Nextp + Starsize;
      Line = (A(I + 3) << 8) + A(I + 4);
      Curlinead = Fromar4(I + 5);
      Nextlinead = Fromar4(Nextp + 5);
      Stmts = Stmts + 1;
      Opline.Line = Line;
      Css(I + 9);
      if ((A(Nextp + 3) << 8 | A(Nextp + 4)) == Line) {
        Curlycheck(1);
        Outsym(9);
      } else
        Forceline();
    }
    int Nextstmntalt(void) { return (A(Nextp + 9)); }
    void Css(int Pinit) {
      void Enterjump(int Mask, int Stad, int Flag);
      int Enterlab(int M, int Flag);
      void Removelab(int Lab);
      void Savestackptr(void);
      void Cend(int Kkk);
      int Ccond(int Cto, int A, int B, int Jflags);
      int Reverse(int Mask);
      void Setline(void);
      void Cui(int Code);
      void Assign(int A, int B);
      void Cstart(int Ccres, int Mode);
      void Ccycbody(int Ua, int Elab, int Clab);
      void Cloop(int Alt, int Markc, int Markui);
      void Cifthen(int Markiu, int Markc, int Markui, int Marke, int Markr,
                   int Afterelse);
      int Createah(int Mode, Rd Eopnd, Rd Nopnd);
      void Torp(int Head, int Bot, int Nops, int Mode);
      int Intexp(int Value, int Prectype);
      int Constexp(int Prectype);
      void Csexp(int Mode);
      void Labexp(void);
      void Outopnd(Rd Opnd, int Mode);
      void Outtriple(int Tripno, int Mode);
      void Cstrexp(int B);
      void Cres(int Lab);
      void Expop(int A, int B, int C, int D);
      void Testapp(int Num);
      void Skipexp(void);
      void Skipapp(void);
      void Noapp(void);
      int Dopevector(int A, int B, int C, int Mode, int Id);
      void Declarearrays(int A, int B);
      void Declarescalars(int B);
      void Crspec(int M);
      void Cfplist(int A, int B);
      void Cfpdel(void);
      void Clt(void);
      int Roundinglength(int Ptype, int Rules);
      void Cqn(int P);
      int Tsexp(int Value);
      int Tcond(void);
      void Crcall(int Rtname);
      void Nameop(int Z, int Size, int Namep);
      void Cname(int Z);
      void Caname(int Z, int Arrp, Rd Hdopnd);
      void Csname(int Z);
      void Copytag(int Kk, int Declare);
      void Reducetag(int Declare);
      void Storetag(int Kk, int Level, int Rbase, int J, int Sndisp, int Acc,
                    int Slink, int Kform);
      void Unpack(void);
      void Pack(int Ptype);
      void Rdisplay(int Kk);
      void Rhead(int Rtname, int Axname, int Xtra);
      int Cformatref(void);
      void Crformat(int Myrflevel);
      void Processformat(int Level, int Alt, int Structorunion, int Intid,
                         int Strid, int Ophed, int Opbot);
      int Displacement(int Link);
      int Copyrecordtag(int Subs);
      int Chkrecalign(int P1);
      static int Sw_sw;
      static void *Sw[24 /*1:24*/] = {
          &&Sw_1,  &&Sw_2,  &&Sw_3,  &&Sw_4,  &&Sw_5,  &&Sw_6,
          &&Sw_7,  &&Sw_8,  &&Sw_9,  &&Sw_10, &&Sw_11, &&Sw_12,
          &&Sw_13, &&Sw_14, &&Sw_15, &&Sw_16, &&Sw_17, &&Sw_18,
          &&Sw_19, &&Sw_20, &&Sw_21, &&Sw_22, &&Sw_23, &&Sw_24,
      };
      const unsigned char Fcomp[15 /*0:14*/] = {0, 8,  10, 2, 7,  12, 4, 7,
                                                8, 12, 4,  7, 10, 2,  7};
      int Rfhead[13 /*0:12*/][13 /*0:12*/];
      int Rfbot[13 /*0:12*/][13 /*0:12*/];
      int Rflevel;
      int P;
      int Sndisp;
      int Acc;
      int K;
      int Kform;
      int Stname;
      int Midcell;
      int Tcell;
      int Jj;
      int Jjj;
      int Kk;
      int Qq;
      int Marker;
      int Reportui;
      int Xdisp;
      int Mask;
      int Base;
      int Area;
      int Access;
      int Disp;
      int Extrn;
      int Currinst;
      int Value;
      int Stringl;
      int Ptype;
      int I;
      int J;
      int Oldi;
      int Usebits;
      int Strfnres;
      int Markiu;
      int Markui;
      int Markc;
      int Marke;
      int Markr;
      int Inaformat;
      int Litl;
      int Rout;
      int Nam;
      int Arr;
      int Prec;
      int Type;
      int Lhformatname;
      int Doinglabel;
      Rd Expopnd;
      Rd Nameopnd;
      Rd Mlopnd;
      P = Pinit;
      Doinglabel = 0;
      Currinst = 0;
      Inaformat = 0;
      Currentssalt = A(P);
      goto *Sw[Sw_sw = (Currentssalt)-1];
    Sw_13:;
      {
        _imp_string255 S;
        _imp_string255 Head;
        _imp_string255 Tail;
        S = *String(Addr(A(P + 2)));
        if (_imp_cond_resolve(S, Head, _imp_str_literal(".inc"), Tail))
          S = _imp_join(Head, _imp_str_literal(".h"));
        Outstring(_imp_str_literal("#include "));
        Outsym('"');
        Outstring(S);
        Outsym('"');
      }
      goto Cssexit2;
    Sw_24:;
      if (A(P + 1) == 10) Outsym(' ');
      goto Cssexit2;
    Sw_2:;
      P = P + 1;
      Kk = A(P);
      P = P + 1;
      Jj = A(P);
      Jjj = 0;
      if (Kk == 1)
        Outsym('#');
      else
        Outstring(_imp_str_literal("/*"));
      while (Jj != Nl) {
        if (Jj > 128 && Jjj < 128) Outsym('%');
        Outsym(Jj & 127);
        Jjj = Jj;
        P = P + 1;
        Jj = A(P);
        if (Jjj == '\\' && Jj == 13 && Kk == 1) {
          Outsym(Nl);
          P = P + 1;
          continue;
        }
        if (Jjj == ',' && ((Kk == 2 && Jj == '!') || (Kk == 1 && Jj == '#'))) {
          if (Kk == 1) {
            Outsym(Nl);
            Outsym('#');
          } else {
            Outcommentend();
            Outsym(Nl);
            Outstring(_imp_str_literal("/*"));
          }
          Jjj = Jj;
          P = P + 1;
          Jj = A(P);
        }
      }
      if (Kk > 1) Outcommentend();
      goto Cssexit2;
    Cssexit:
      if (Opline.Length <= 0 || Opline.L(Opline.Length - 1) != '}') Outsep();
    Cssexit2:
      Lastinst = Currinst;
      return;
    Sw_1:;
      Marker = P + 1 + (A(P + 1) << 8) + A(P + 2);
      P = P + 3;
      if (A(Marker) == 1) goto Labfnd;
      if (A(Marker) == 2) {
        Setline();
        Cui(0);
        goto Cssexit;
      }
      Marke = 0;
      Markr = 0;
      Markui = P;
      Markiu = Marker + 1;
      Markc = Markiu + 1;
      if (A(Marker) == 3) {
        Cifthen(Markiu, Markc, Markui, 0, 0, No);
        goto Cssexit;
      }
      Cloop(A(Markiu), Markc + 2, Markui);
      goto Cssexit;
    Labfnd:
      Oldline = 0;
      if (A(P) != 1 || A(P + 5) != 2) goto Switch;
      if (A(P + 6) != 2 || A(P + 7) != 2) goto Switch;
      Jj = Enterlab(Fromar2(P + 3), 0);
      Outname(Fromar2(P + 3));
      Outsym(':');
      Curlycheck(0);
      Outsym(Nl);
      if ((1 << Nextstmntalt & (1 << 6 | 1 << 4 | 1 << 18 | 1 << 9)) != 0)
        Outsep();
      goto Cssexit2;
    Sw_5:;
      if (A(P + 5) == 2)
        Cloop(0, P + 1, P + 1);
      else {
        Setline();
        Cloop(6, P + 6, P + 1);
      }
      goto Cssexit;
    Sw_6:;
      goto Cssexit2;
    Sw_22:;
      goto Cssexit2;
    Sw_3:;
      Markiu = P + 1;
      Markc = Markiu + 3;
      Markr = P + 2 + (A(P + 2) << 8) + A(P + 3);
      Marke = 0;
      if (A(Markr) == 3) {
        Marke = Markr + 1 + Fromar2(Markr + 1);
        Markui = Markr + 3;
      }
      Cifthen(Markiu, Markc, Markui, Marke, Markr, No);
      goto Cssexit;
    Sw_4:;
    Sw_18:;
      goto Cssexit2;
    Switch : {
      Listf *Lcell;
      Swdataform *Swdata;
      int Naps;
      int Fname;
      Fname = Fromar2(P + 3);
      if (A(P) != 1 || A(P + 5) != 1) {
        Fault(5, 0, Fname);
        goto Bend;
      }
      P = P + 6;
      Copytag(Fname, No);
      if (Oldi != Level || Type != 6) {
        Fault(4, 0, Fname);
        goto Bend;
      }
      Lcell = &Aslist(K);
      Swdata = Record(Lcell->S1);
      Swdata->Slabs(Swdata->Lseen) = P;
      Swdata->Lseen = Swdata->Lseen + 1;
      Outswadname(Fname);
      Outstring(_imp_str_literal("_"));
      Labexp();
      Outsym(':');
      Curlycheck(0);
      Outsym(Nl);
      if ((1 << Nextstmntalt & (1 << 6 | 1 << 4 | 1 << 18 | 1 << 9)) != 0)
        Outsep();
    Bend:;
    }
      if (Parm.Opt == 0) Forcetrips();
      goto Cssexit2;
    Sw_23:;
      {
        Listf *Lcell;
        Swdataform *Swdata;
        int Fname;
        int Jj;
        int Res;
        Fname = Fromar2(P + 1);
        Copytag(Fname, No);
        if (Oldi == Level && Type == 6) {
          Lcell = &Aslist(K);
          Swdata = Record(Lcell->S1);
          Swdata->Default = P;
          Outswadname(Fname);
          Outstring(_imp_str_literal("_default:"));
        } else
          Fault(4, 0, Fname);
      }
      if (Parm.Opt == 0) Forcetrips();
      goto Cssexit2;
    Sw_7:;
      Markiu = P + 1;
      Markc = Markiu + 3;
      Cloop(A(Markiu) + 3, Markc, Markiu + 1 + Fromar2(Markiu + 1));
      goto Cssexit;
    Sw_8:;
      P = P + 1;
      Marker = P + Fromar2(P);
      P = P + 2;
      Rout = 0;
      Litl = 0;
      if (A(Marker) != 1) {
        Clt();
        if (Type == 5 && (Acc <= 0 || Acc > 256)) {
          Fault(70, Acc - 1, 0);
          Acc = 255;
        }
        Nam = 0;
        Setline();
        Qq = 2 - A(P + 1);
        P = P + 2;
        Declarearrays(Qq, Kform);
        if (Qq == 1) goto Cssexit2;
        if (Parm.Opt == 0) Forcetrips();
      } else {
        Clt();
        Cqn(P + 1);
        P = P + 2;
        Declarescalars(Kform);
      }
      goto Cssexit;
    Sw_9:;
      {
        static int S_sw;
        static void *S[5 /*1:5*/] = {
            &&S_1, &&S_2, &&S_3, &&S_4, &&S_default,
        };
        int Etype;
        Etype = A(P + 1);
        goto *S[S_sw = (Etype)-1];
      S_1:;
        Outstring(_imp_str_literal("exit(0);"));
        Outsym(Nl);
      S_2:;
        if (Parm.Cprmode == 0) Parm.Cprmode = 2;
        if (Level + Parm.Cprmode != 3) Fault(15, Level + Parm.Cprmode - 3, 0);
        Cend(Parm.Cprmode);
        if (Etype == 1) Outsym('}');
        goto Bend;
      S_3:;
        goto Bend;
      S_4:;
        if (Parm.Cprmode == 1 && Level == 2)
          Fault(14, 0, 0);
        else
          Cend(Currinf->Flag);
        Outstring(_imp_str_literal("}"));
      Bend:;
        goto S_skip;
      S_default:
        fprintf(stderr, "Switch label 'S(%d):' not set in %s", S_sw + 1,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      S_skip:;
      }
      goto Cssexit2;
    Sw_11:;
      {
        int Marker1;
        int Rtname;
        int Kkk;
        int Ptr;
        int Ptypep;
        int Cnt;
        int Pp;
        int Pchain;
        int Axname;
        int Pname;
        int Nparams;
        int Schain;
        int Parmspace;
        int D;
        int Paramptype;
        int Paramacc;
        int Pcount;
        Listf *Lcell;
        Listf *Lcell2;
        Listf *Tcell;
        P = P + 1;
        Marker1 = Fromar2(P) + P;
        Markc = A(Marker1);
      Agn:
        Q = P;
        Rtname = Fromar2(Marker1 + 3);
        Extrn = A(P + 2);
        Litl = Extrn & 3;
        if (A(Marker1) == 1) {
          P = P + 3;
          Crspec(1 - (Extrn >> 2));
          goto Bend;
        }
        Forcetrips();
        Copytag(Rtname, No);
        Axname = Addr(Worka.Lett(Word(Rtname)));
        if (Extrn == 3) Extrn = 2;
        if (Target == Emas && Extrn == 1) Warn(11, 0);
        if (A(Marker1 + 5) == 1) {
          Movebytes(A(Marker1 + 6) + 1, Addr(A(0)), Marker1 + 6, Addr(A(0)),
                    Worka.Artop);
          Axname = Addr(A(Worka.Artop));
          Worka.Artop = (Worka.Artop + 4 + A(Marker1 + 6)) & (-4);
        }
        if (Extrn == 4) Axname = 0;
        if (Oldi != Level) {
          P = Q + 3;
          Crspec(2);
          P = Q;
          goto Agn;
        } else {
          if (Parm.Cprmode == 0) Parm.Cprmode = 2;
          if (Extrn != 4 && (Parm.Cprmode != 2 || Level != 1))
            Fault(56, 0, Rtname);
          if (A(P + 3) == 1)
            Kkk = Litl << 14 | 0x1000;
          else {
            Rout = 1;
            P = P + 4;
            Clt();
            Arr = 0;
            Nam = 0;
            if (A(P) == 2) Nam = 2;
            Pack(Kkk);
          }
        }
        if ((J != 15 && J != 7 * Extrn) || (Ptype & 0xFFFF) != Kkk) {
          P = Q + 3;
          Crspec(2);
          P = Q;
          goto Agn;
        }
        Ptype = Ptype | (Extrn & 3) << 14;
        Tcell = &Aslist(Tags(Rtname));
        Tcell->Ptype = Ptype;
        if ((Ptype & 0xc000) == 0x8000) Usebits = 2;
        Tcell->Uioj = Tcell->Uioj & 0x3FF0 | Usebits << 14;
        if ((Target == Perq || Target == Accent) && J == 14) {
          Tcell->S2 = Worka.Rtcount;
          Worka.Rtcount = Worka.Rtcount + 1;
        }
        Ptypep = Ptype;
        if ((Ptypep & 0xc000) == 0) Outstring(_imp_str_literal("static "));
        Outtype(Ptypep & 255, Tcell->Kform);
        if ((Ptypep & 0x800) != 0 && (Ptypep & 7) != 5) Outsym('*');
        if (Axname == 0)
          Outname(Rtname);
        else
          Outstring(*String(Axname));
        Outsym('(');
        Pchain = Tcell->Slink;
        Rhead(Rtname, Axname, Fromar2(Marker1 + 1));
        P = Marker1 + 6;
        if (A(P - 1) == 1) P = P + A(P) + 1;
        Cnt = 0;
        Ptype = Ptypep;
        Unpack();
        N = Rtparam1offset;
        if (Target == Perq || Target == Accent) {
          if (Type != 0) N = (Bytes(Prec) + 1) & (-2);
          if (Type == 5 || Type == 3) N = 4;
          if (Nam != 0) {
            if (Type == 5)
              N = 4;
            else
              N = Ptrsize(Ptype & 127);
          }
          Currinf->Ressize = N;
        }
        Nparams = 0;
        Parmspace = 0;
        if (Pchain != 0) Nparams = Aslist(Pchain).S3;
        if (Nparams != 0) {
          Parmspace = Nparams >> 16;
          Nparams = Nparams & 0xFF;
        }
        while (A(P) == 1) {
          Pp = P + 1 + Fromar2(P + 1);
          P = P + 3;
          Cfpdel();
          Paramptype = Ptype;
          Paramacc = Acc;
          Ptr = P;
          do {
            if (Paramsbwards == Yes) {
              Pchain = Tcell->Slink;
              for (Kkk = 2; Kkk <= Nparams - Cnt; Kkk++)
                Pchain = Aslist(Pchain).Link;
            }
            Lcell = &Aslist(Pchain);
            if (Pchain != 0)
              if (Lcell->Ptype != Paramptype ||
                  (Lcell->Acc & 0xFFFF) != Paramacc)
                Fault(9, Cnt + 1, Rtname);
            Pname = Fromar2(Ptr);
            Lcell->Uioj = Lcell->Uioj | Pname << 4;
            D = Lcell->Sndisp + N;
            if ((Paramptype & 0x1000) != 0) {
              P = Ptr;
              do
                P = P + 3;
              while (A(P - 1) != 2);
              Cfplist(Schain, Kkk);
              Ptype = Paramptype;
              Outtype(Paramptype & 255, Kform);
              Outname(Pname);
              Outstring(_imp_str_literal("("));
              Lcell2 = &Aslist(Schain);
              if (Kkk == 0)
                Outstring(_imp_str_literal("void "));
              else
                for (Pcount = 1; Pcount <= Kkk; Pcount++) {
                  if ((Lcell2->S1 & 0x10000000) != 0) {
                    Outtype(Lcell2->S1 >> 16 & 255, Lcell2->Sndisp);
                    Outstring(_imp_str_literal("()"));
                  } else
                    Outxtype(Lcell2->S1 >> 16, Lcell2->Sndisp);
                  if (Lcell2->Link != 0) Outsym(',');
                  Lcell2 = &Aslist(Lcell2->Link);
                }
              Outstring(_imp_str_literal(")"));
              Storetag(Pname, Level, Rbase, 13, D, Lcell->Acc, Schain, 0);
            } else {
              if (Target == Emas && Ptype == 0x33) D = D + 8;
              if (Strvalinwa == Yes && Ptype == 0x35) Ptype = 0x435;
              Outxtype(Paramptype, Kform);
              Outname(Pname);
              Storetag(Pname, Level, Rbase, Lcell->Uioj & 15, 0, Acc, D, Kform);
              Ptype = Paramptype;
            }
            Ptr = Ptr + 3;
            Cnt = Cnt + 1;
            if (Paramsbwards == No) Pchain = Lcell->Link;
            if (Pchain != 0) Outsym(',');
          } while (A(Ptr - 1) != 2);
          P = Pp;
        }
        Outstring(_imp_str_literal(") {"));
        N = N + Parmspace;
        N = (N + Minparamsize - 1) & (-Minparamsize);
        if (Cnt > Nparams) Fault(8, 0, Rtname);
        if (Cnt < Nparams) Fault(10, 0, Rtname);
        Ptype = Ptypep;
        if (Strresinwa == Yes) {
          if (3 == (Ptype & 0xF0F) || (Ptype & 0xF0F) == 5)
            N = N + Ptrsize(0x35);
          Currinf->Ressize = N;
        }
        N = N + Alpha;
        if (Target == Pnx)
          if ((N & 7) != 0) Impabort();
        Rdisplay(Rtname);
      Bend:;
      }
      if (Parm.Opt == 0) Forcetrips();
      goto Cssexit2;
    Sw_14:;
      {
        Forcetrips();
        Ptype = 0;
        if (Level == 1 && Rlevel == 0)
          if (Parm.Cprmode == 0) {
            Rlevel = 1;
            Rbase = 1;
            Parm.Cprmode = 1;
            Rhead(-1, Addr(Mainep), 1);
            N = Rtparam1offset + Alpha;
            Outstring(_imp_str_literal("main() {"));
          } else
            Fault(58, 0, 0);
        else {
          Setline();
          Outstring(_imp_str_literal("{"));
          Rhead(-1, 0, 1);
        }
        Rdisplay(-1);
      }
      goto Cssexit2;
    Sw_15:;
      P = P + 2;
      Skipexp();
      while (A(P) == 1) {
        P = P + 1;
        Skipexp();
      }
      P = P + 1;
      Outstring(_imp_str_literal("if (0) {"));
      Outsym(Nl);
      Cstart(0, 3);
      Outstring(_imp_str_literal(" }"));
      goto Cssexit;
    Sw_16:;
      {
        int Q;
        int Range;
        int Kkk;
        int Lb;
        int Ub;
        int Pp;
        int D0;
        int Ophead;
        int V;
        int R;
        int Datad;
        Rd Opnd1;
        Rd Opnd2;
        Swdataform *Swdata;
        Q = P;
        do {
          P = P + 3;
          while (A(P) == 1) P = P + 3;
          P = P + 4;
          Kkk = Intexp(Lb, Minapt);
          P = P + 3;
          Kkk = Kkk | Intexp(Ub, Minapt);
          Range = (Ub - Lb + 1);
          if (Range <= 0 || Kkk != 0) {
            Lb = 0;
            Ub = 10;
            Range = 1024;
          }
          Datad = Malloc(4 * Range + 8);
          Swdata = Record(Datad);
          Swdata->Lseen = 0;
          Swdata->Default = 0;
          Ptype = 0x56 + (1 << 8);
          Pp = P;
          P = Q + 1;
          do {
            K = Fromar2(P);
            P = P + 3;
            Ophead = 0;
            Opnd1.Ptype = Ptype;
            Opnd1.Xb = 0;
            Opnd1.Flag = Dname;
            Opnd1.D = K;
            Opnd1.Xtra = 0;
            Opnd2.Ptype = 0x61;
            Opnd2.Xb = 0;
            Opnd2.Flag = Dname;
            Opnd2.D = Lb;
            Opnd2.Xtra = Ub;
            V = Brectrip(Dclsw, Ptype, 0, Opnd1, Opnd2);
            Push(Ophead, Datad, Lb, Ub);
            Storetag(K, Level, Rbase, 1, 0, 4, Ophead, 0);
            Outstring(_imp_str_literal("int "));
            Outswadname(K);
            Outstring(_imp_str_literal("_value;"));
            Outstring(_imp_str_literal("int "));
            Outswadname(K);
            Outstring(_imp_str_literal("_line;"));
            Outstring(_imp_str_literal("char *"));
            Outswadname(K);
            Outstring(_imp_str_literal("_file;"));
          } while (A(P - 1) != 2);
          Q = Pp;
          P = Q;
        } while (A(Q) != 2);
      }
      goto Cssexit2;
    Sw_17:
      goto Cssexit;
    Sw_12:;
      {
        void Clear(int L);
        void Xtractconst(int Contype, int Conprec);
        int Initspace(int A, int B);
        int Slength;
        int Pp;
        int Sign;
        int Tagdisp;
        int Dvo;
        int K;
        int Stalloc;
        int Spoint;
        int Tp;
        int Savep;
        int Constsfound;
        int Cprec;
        int Extrn;
        int Nnames;
        int Mark;
        int Qputp;
        int Lb;
        int Ctype;
        int Constp;
        int Format;
        int Dptype;
        int Dimen;
        int Sacc;
        int Typep;
        int Kk;
        int Orlevel;
        int Savesndisp;
        int Savekform;
        int Ii;
        Rd Copnd;
        Rd Fcopnd;
        static double Zero = 0;
        _imp_string255 Sconst;
        _imp_string255 Namtxt;
        Listf *Lcell;
        Qputp = 5;
        Extrn = A(P + 1);
        P = P + 2;
        if (Extrn >= 4) Extrn = 0;
        Sndisp = 0;
        Constsfound = 0;
        if (Extrn == 0) Qputp = 4;
        Clt();
        if (A(P + 2) == 1)
          if (Extrn == 2)
            Extrn = 3;
          else
            Fault(46, 0, 0);
        if (2 <= Extrn && Extrn <= 3 &&
            ((A(P) == 1 && A(P + 1) != 3) || (A(P) == 2 && A(P + 1) != 2)))
          Fault(46, 0, 0);
        if (Type == 5 && A(P) != 1 && Extrn == 0) Extrn = 1;
        Litl = Extrn;
        if (Litl <= 1) Litl = Litl ^ 1;
        if (A(P) == 1)
          Cqn(P + 1);
        else {
          Arr = 1;
          Nam = 0;
        }
        if (Type == 5 && Nam == 0 && (Acc <= 0 || Acc > 256)) {
          Fault(70, Acc - 1, 0);
          Acc = 2;
        }
        Stalloc = Acc;
        if ((Target == Perq || Target == Accent || Target == Pnx) && Type == 5)
          Stalloc = (Stalloc + 1) & 0xFFE;
        Rout = 0;
        Pack(Ptype);
        Dptype = Ptype;
        if (Nam != 0)
          if (Arr != 0)
            Stalloc = 8;
          else
            Stalloc = 4;
        else if (Arr != 0)
          goto Nonscalar;
        P = P + 2;
        do {
          Mark = P + 1 + Fromar2(P + 1);
          Pp = P + 3;
          P = Pp + 2;
          K = Fromar2(Pp);
          Namtxt = *String(Addr(Worka.Lett(Word(K))));
          if (A(P) == 1) {
            if (Litl == 0) Warn(10, 0);
            Length(Namtxt) = A(P + 1);
            for (Kk = 1; Kk <= A(P + 1); Kk++)
              Charno(Namtxt, Kk) = A(P + Kk + 1);
            P = P + A(P + 1) + 1;
            Outstring(_imp_str_literal("#define "));
            Outname(K);
            Outsym(' ');
            Outstring(Namtxt);
            Outsym(Nl);
          }
          P = P + 1;
          Sconst = _imp_str_literal("");
          Ptype = Dptype;
          Unpack();
          Sign = 3;
          Ctype = Type;
          Constsfound = 0;
          Cprec = Prec;
          if (Type == 3) Ctype = 1;
          if (Nam != 0) {
            Ctype = 1;
            Cprec = 5;
          }
          P = P + 1;
          if (Rlevel == 0 && Extrn == 0) {
            Outstring(_imp_str_literal("#define "));
            Outrevisablename(K);
          } else {
            Outextern(Extrn);
            if (Ptype == 0x35)
              Outstring(_imp_str_literal("char "));
            else
              Outtype(Ptype & 255, Kform);
            if (Nam != 0) Outsym('*');
            Outname(K);
          }
          if (Ptype == 0x35) {
            Outstring(_imp_str_literal(" ["));
            Outint(Stalloc);
            Outsym(']');
          }
          Tp = 1;
          if (A(P - 1) == 1) {
            Savep = P;
            P = P - 3;
            Tp = Tsexp(Kk);
            P = Savep;
            if (Rlevel == 0 && Extrn == 0) {
              Outstring(_imp_str_literal(" "));
              if (Tp <= 0) Outstring(_imp_str_literal("("));
            } else
              Outsym('=');
            Xtractconst(Ctype, Cprec);
          } else {
            if (Extrn == 0) Warn(7, K);
            Fcopnd = 0;
            Copnd = 0;
          }
          if (Rlevel == 0 && Extrn == 0)
            if (Tp <= 0)
              Outsym(')');
            else
              Outsep();
          if (A(Mark) != 2) Outsym(Nl);
          Ptype = Dptype;
          Unpack();
          J = 0;
          Orlevel = 0;
          if (Nam != 0) {
            if (Arr == 0)
              if ((Target == Ibm || Target == Amdahl || Target == Ibmxa) &&
                  Extrn == 0) {
                Tagdisp = Worka.Constptr;
                if (Type == 5) {
                  Ctable(Tagdisp) = Acc;
                  Worka.Constptr = Worka.Constptr + 1;
                }
                Ctable(Worka.Constptr) = Fcopnd.D;
                Worka.Constptr = Worka.Constptr + 1;
                if (Worka.Constptr > Worka.Constlimit)
                  Fault(102, Worka.Wkfilek, 0);
                Tagdisp = 4 * Tagdisp;
                Orlevel = 14;
              } else
                Tagdisp = Pinitown(Ptype, Acc, Fcopnd, Namtxt);
            else {
              if (Parm.Compiler != 0 && Lb != 0) Fault(99, 0, 0);
              if (Extrn != 0) {
                Sndisp = 0;
                J = 0;
              } else {
                J = 1;
                Sndisp = (Sndisp & 0x3FFFF) >> 2;
              }
              Tagdisp = Pownarrayhead(Ptype, J, Lb, 0xFFFFFF, Copnd.D, 0, Dvo,
                                      Namtxt);
            }
            Storetag(K, Level, Orlevel, J, Sndisp, Acc, Tagdisp, Kform);
            P = Mark;
            continue;
          }
          if (Extrn == 3) {
            Fcopnd.D = 0;
            Tagdisp = Pinitown(Ptype, Acc, Fcopnd, Namtxt);
            Storetag(K, Level, 0, J, Sndisp, Acc, Tagdisp, Kform);
            P = Mark;
            continue;
          }
          if (Type == 3) Tagdisp = Pinitown(Ptype, Acc, Fcopnd, Namtxt);
          if ((1 << Type & 0b100110) != 0)
            if (Extrn != 0)
              Tagdisp = Pinitown(Ptype, Acc, Fcopnd, Namtxt);
            else
              Tagdisp = 0;
          Storetag(K, Level, 0, J, Sndisp, Acc, Tagdisp, Kform);
          if (Extrn == 0 && 0 == Nam && (1 << Type & 0b100110) != 0) {
            Lcell = &Aslist(Tags(K));
            Lcell->S1 = Lcell->S1 | (Copnd.Ptype & 8) << 16;
            Lcell->S2 = Copnd.D;
            Lcell->S3 = Copnd.Xtra;
            if (Type == 5) {
              Lcell->S2 = Worka.Artop;
              Worka.Artop = (Worka.Artop + Copnd.Xtra + 4) & (-4);
            }
          }
          P = Mark;
        } while (A(Mark) != 2);
        goto Bend;
      Nonscalar:;
        P = P + 1;
        Format = 2 - A(P);
        if (Format != 0) {
          Arr = 3;
          Pack(Ptype);
        }
        Pp = P + 2;
        P = P + 4;
        Nnames = 1;
        K = Fromar2(Pp);
        Namtxt = *String(Addr(Worka.Lett(Word(K))));
        if (A(P) == 1) {
          if (Litl == 0) Warn(10, 0);
          Length(Namtxt) = A(P + 1);
          for (Kk = 1; Kk <= A(P + 1); Kk++) Charno(Namtxt, Kk) = A(P + Kk + 1);
          P = P + A(P + 1) + 1;
        }
        P = P + 1;
        Sacc = Acc;
        Typep = Ptype;
        Savekform = Kform;
        Dvo = Dopevector(No, Type, Stalloc, 0, K);
        if (Sndisp == -1) Sndisp = 0;
        Sndisp = (Sndisp & 0x3FFFF) >> 2;
        Savesndisp = Sndisp;
        Dimen = J;
        Acc = Sacc;
        Ptype = Typep;
        Unpack();
        Pp = P;
        {
          short Savedp;
          short Savedp2;
          short Savedptype;
          int I;
          int Count;
          Count = 0;
          if (Format == 0) {
            Savedptype = Ptype & 255;
            Outextern(Extrn);
            Outtype(Savedptype, Savekform);
            for (Ii = Dimen; Ii >= 1; Ii--) {
              for (I = 1; I <= Ii; I++) Outsym('*');
              Outname(K);
              if (Ii != Dimen) {
                Outsym('_');
                Outint(Ii);
              }
              if (Ii != 1) Outsym(',');
            }
            Outsym(';');
            Outsym(Nl);
            Outextern(Extrn);
            Outstring(_imp_str_literal("int "));
            for (Ii = Dimen; Ii >= 1; Ii--) {
              Outname(K);
              Outstring(_imp_str_literal("_dim_"));
              Outint(Ii);
              if (Ii != 1) Outsym(',');
            }
            Outsym(';');
            Outsym(Nl);
            for (Ii = Dimen; Ii >= 1; Ii--) {
              Outname(K);
              if (Ii != Dimen) {
                Outsym('_');
                Outint(Ii);
              }
              P = Ctable(Savesndisp + 3 * Ii + 2);
              Savedp = P;
              Outstring(_imp_str_literal(" = ("));
              Outtype(Savedptype, Savekform);
              for (I = 1; I <= Ii; I++) Outsym('*');
              Outstring(_imp_str_literal(")malloc((("));
              Csexp(0x51);
              Outsym(')');
              if (Ctable(Savesndisp + 3 * Ii) == 0x80000000) {
                Outsym('-');
                P = Ctable(Savesndisp + 3 * Ii + 1);
                Outsym('(');
                Csexp(0x51);
                Outstring(_imp_str_literal(")+1"));
              } else if (Ctable(Savesndisp + 3 * Ii) < 1) {
                Outsym('+');
                Outint(1 - Ctable(Savesndisp + 3 * Ii));
              } else if (Ctable(Savesndisp + 3 * Ii) > 1) {
                Outsym('-');
                Outint(Ctable(Savesndisp + 3 * Ii) - 1);
              }
              Outstring(_imp_str_literal(") * sizeof("));
              Outtype(Savedptype, Savekform);
              for (I = 1; I <= Ii - 1; I++) Outsym('*');
              Outstring(_imp_str_literal(") );"));
              Outsym(Nl);
              if (Ctable(Savesndisp + 3 * Ii) == 0x80000000) {
                Outname(K);
                if (Ii != Dimen) {
                  Outsym('_');
                  Outint(Ii);
                }
                Outstring(_imp_str_literal(" -= "));
                P = Ctable(Savesndisp + 3 * Ii + 1);
                Csexp(0x51);
              } else if (Ctable(Savesndisp + 3 * Ii) != 0) {
                Outname(K);
                if (Ii != Dimen) {
                  Outsym('_');
                  Outint(Ii);
                }
                Outstring(_imp_str_literal(" -= "));
                Outint(Ctable(Savesndisp + 3 * Ii));
              }
              Outsym(';');
              Outsym(Nl);
              Outstring(_imp_str_literal("for ("));
              Outname(K);
              Outstring(_imp_str_literal("_dim_"));
              Outint(Ii);
              Outstring(_imp_str_literal(" = "));
              if (Ctable(Savesndisp + 3 * Ii) == 0x80000000) {
                P = Ctable(Savesndisp + 3 * Ii + 1);
                Csexp(0x51);
              } else if (Ctable(Savesndisp + 3 * Ii) != 0)
                Outint(Ctable(Savesndisp + 3 * Ii));
              else
                Outint(0);
              Outstring(_imp_str_literal("; "));
              Outname(K);
              Outstring(_imp_str_literal("_dim_"));
              Outint(Ii);
              Outstring(_imp_str_literal(" <= "));
              Csexp(0x51);
              Outstring(_imp_str_literal("; "));
              Outname(K);
              Outstring(_imp_str_literal("_dim_"));
              Outint(Ii);
              Outstring(_imp_str_literal("++) {"));
              Outsym(Nl);
            }
            for (Ii = 1; Ii <= Dimen; Ii++) {
              if (Ii != 1) {
                Outname(K);
                if (Ii != Dimen) {
                  Outsym('_');
                  Outint(Ii);
                }
                Outstring(_imp_str_literal("["));
                Outname(K);
                Outstring(_imp_str_literal("_dim_"));
                Outint(Ii);
                Outstring(_imp_str_literal("] = "));
                Outname(K);
                Outsym('_');
                Outint(Ii - 1);
                Outstring(_imp_str_literal(";"));
                Outsym(Nl);
              } else {
                Outstring(_imp_str_literal(
                    "/* Assign initialised elements if any */"));
                Outsym(Nl);
              }
              Outsym('}');
              Outsym(Nl);
            }
            Outsym('{');
            Outsym(Nl);
            Outextern(Extrn);
            Outtype(Savedptype, Savekform);
            Outname(K);
            Outstring(_imp_str_literal("_data[] "));
          }
          Ptype = Typep;
          Unpack();
          if (Lb == 0 && Format == 0) {
            Arr = 2;
            Pack(Ptype);
          }
          if (Type == 3)
            Slength = Qq;
          else
            Slength = Qq / Stalloc;
          Cas(Qputp) = (Cas(Qputp) + Arrayrounding) & (~Arrayrounding);
          Spoint = Cas(Qputp);
          if (Format == 0)
            if (A(Pp) == 1) {
              P = Pp + 1;
              Count = Initspace(Qq, Slength);
            }
          if (Format == 0) Outsep();
          if (Extrn == 3) Spoint = 0;
          Ptype = Typep;
          Unpack();
          if (Format != 0) Qputp = 0;
          Tagdisp =
              Pownarrayhead(Ptype, Dimen, Lb, Qq, Spoint, Qputp, Dvo, Namtxt);
          Sndisp = Savesndisp;
          Storetag(K, Level, 0, Dimen, Sndisp, Acc, Tagdisp, Savekform);
          Outsym(Nl);
          Outstring(_imp_str_literal("int "));
          Outname(K);
          Outstring(_imp_str_literal("_inels = 0;"));
          Outsym(Nl);
          Acc = Sacc;
          Ptype = Typep;
          Unpack();
          Pp = P;
          for (Ii = Dimen; Ii >= 1; Ii--) {
            P = Ctable(Savesndisp + 3 * Ii + 2);
            Outstring(_imp_str_literal("for ("));
            Outname(K);
            Outstring(_imp_str_literal("_dim_"));
            Outint(Ii);
            Outstring(_imp_str_literal(" = "));
            Savedp = P;
            if (Ctable(Savesndisp + 3 * Ii) == 0x80000000) {
              P = Ctable(Savesndisp + 3 * Ii + 1);
              Csexp(0x51);
            } else if (Ctable(Savesndisp + 3 * Ii) != 0)
              Outint(Ctable(Savesndisp + 3 * Ii));
            else
              Outint(0);
            Outstring(_imp_str_literal("; "));
            Outname(K);
            Outstring(_imp_str_literal("_dim_"));
            Outint(Ii);
            Outstring(_imp_str_literal(" <= "));
            P = Savedp;
            Csexp(0x51);
            Outstring(_imp_str_literal("; "));
            Outname(K);
            Outstring(_imp_str_literal("_dim_"));
            Outint(Ii);
            Outstring(_imp_str_literal("++) {"));
            Outsym(Nl);
            Outstring(_imp_str_literal("if ("));
            Outname(K);
            Outstring(_imp_str_literal("_inels == "));
            Outint(Count);
            Outstring(_imp_str_literal(") break;"));
            Outsym(Nl);
            if (Ctable(Savesndisp + 3 * Ii) == 0x80000000) {
              P = Ctable(Savesndisp + 3 * Ii + 1);
            }
          }
          Outname(K);
          for (Ii = Dimen; Ii >= 1; Ii--) {
            Outstring(_imp_str_literal("["));
            Outname(K);
            Outstring(_imp_str_literal("_dim_"));
            Outint(Ii);
            Outstring(_imp_str_literal("]"));
          }
          Outstring(_imp_str_literal(" = "));
          Outname(K);
          Outstring(_imp_str_literal("_data["));
          Outname(K);
          Outstring(_imp_str_literal("_inels++];"));
          Outsym(Nl);
          for (Ii = Dimen; Ii >= 1; Ii--) {
            Outstring(_imp_str_literal("}"));
            Outsym(Nl);
          }
          Outsym('}');
          Outsym(Nl);
        }
        goto Bend;
        int Initspace(int Size, int Nels) {
          const int Bufsize = 512;
          int Rf;
          int I;
          int Ii;
          int Elsize;
          int Ad;
          int Spp;
          int Slength;
          int Writ;
          int Pin;
          int Pp;
          int Contype;
          int Conprec;
          int Ppp;
          int Value;
          int Nelsout;
          Nelsout = 0;
          Pin = P;
          Contype = Type;
          Conprec = Prec;
          Outstring(_imp_str_literal(" = {"));
          Spp = 0;
          Writ = 0;
          do {
            P = P - 3;
            Pp = P;
            Skipexp();
            if (A(P) == 1) {
              P = P + 2;
              if (A(P - 1) == 2) {
                Rf = 1;
                if (A(Pp + 3) != 4 || A(Pp + 4) != 2 || A(Pp + 5) != 0x41 ||
                    A(Pp + 6) != A(Pp + 7) || A(Pp + 7) != 0 || A(Pp + 8) != 2)
                  Warn(10, 0);
              } else {
                P = P + 2;
                if (Intexp(Rf, Minapt) != 0) {
                  Warn(10, 0);
                  Rf = 1;
                }
              }
              P = P + 1;
            } else {
              Rf = 1;
              P = P + 2;
            }
            Nelsout = Nelsout + Rf;
            if (Rf <= 0) Warn(10, 0);
            Spp = P;
            for (I = Rf; I >= 1; I--) {
              P = Pp;
              if (Contype == 5)
                Cstrexp(1);
              else
                Csexp(Conprec << 4 | Contype);
              Constsfound = Constsfound + 1;
              if (I != 1 || A(Spp - 1) != 2) Outsym(',');
              if ((Contype == 5 && (Constsfound & 3) == 0) ||
                  (Constsfound & 7) == 0)
                Outsym(Nl);
            }
            P = Spp;
          } while (A(P - 1) != 2);
          Outstring(_imp_str_literal("}"));
          return (Nelsout);
        }
        void Xtractconst(int Contype, int Conprec) {
          int Slength;
          int Stype;
          int Sacc;
          int Mode;
          int Ch;
          int Wr;
          int I;
          int Pp;
          Stype = Ptype;
          Sacc = Acc;
          if (Contype == 5) {
            P = P - 3;
            Cstrexp(1);
            Wr = Worka.Artop;
            if (Expopnd.Flag == Lconst && Expopnd.Ptype == 0x35) {
              Slength = Expopnd.Xtra;
              Length(Sconst) = Slength;
              A(Wr) = Slength;
              for (I = 1; I <= Slength; I++) {
                Ch = A(Expopnd.D + I);
                Charno(Sconst, I) = Ch;
                A(Wr + I) = Ch;
              }
              Copnd.Ptype = 0x35;
              Copnd.Flag = Lconst;
              Copnd.D = Expopnd.D;
              Copnd.Xtra = Slength;
            } else {
              Fault(44, Constsfound, K);
              Sconst = _imp_str_literal("");
              Slength = 0;
            }
          } else {
            Mode = Conprec << 4 | Contype;
            if (Conprec < 5) Mode = Contype | 0x50;
            Pp = P;
            P = P - 3;
            Csexp(Mode);
            P = Pp;
            I = Constexp(Mode);
            Copnd = Expopnd;
            Copnd.Ptype = Mode;
          }
          Ptype = Stype;
          Unpack();
          Acc = Sacc;
          Fcopnd = Copnd;
        }
      Bend:;
      }
      goto Cssexit2;
    Sw_10:;
      {
        int Name;
        int Ophead;
        int Opbot;
        int Nlist;
        int Headcell;
        int Fhead;
        int Spec;
        int L1;
        int L2;
        int Strid;
        int Fpt;
        Listf *Lcell;
        Listf *Frcell;
        _imp_string255 Typename;
        Sndisp = 0;
        Spec = A(P + 1);
        Name = Fromar2(P + 2);
        P = P + 4;
        Copytag(Name, No);
        if (Spec == 1 || (Ptype != 4 || J != 15 || Oldi != Level)) {
          Kform = 0;
          Push(Kform, 0, 0, 0);
          Ptype = 4;
          Storetag(Name, Level, Rbase, 15, 0, Maxrecsize, Kform, Kform);
        }
        if (Spec == 2) {
          Ophead = 0;
          Opbot = 0;
          Nlist = 0;
          for (L1 = 0; L1 <= 12; L1++) {
            for (L2 = 0; L2 <= 12; L2++) {
              Rfhead(L1, L2) = 0;
              Rfbot(L1, L2) = 0;
            }
            Rfalt(L1) = 0;
          }
          Inaformat = 1;
          Rflevel = 0;
          Crformat(Rflevel);
          Inaformat = 0;
          if (Parm.Z != 0)
            for (L1 = 0; L1 <= 12; L1++)
              for (L2 = 0; L2 <= 12; L2++)
                if (Rfhead(L1, L2) != 0) {
                  Printstring(_imp_str_literal("level&rfalt="));
                  Write(L1, 5);
                  Write(L2, 5);
                  Newline();
                  Printlist(Rfhead(L1, L2));
                }
          Strid = 0;
          Headcell = Rfhead(0, 1);
          if (Headcell == 0) {
            Outstring(_imp_str_literal("struct "));
            Outname(Name);
            Outsym('{');
            Outsym(Nl);
            Processformat(0, 0, 's', 0, Strid, Ophead, Opbot);
            Fpt = 4;
          } else {
            Outstring(_imp_str_literal("union "));
            Outname(Name);
            Outsym('{');
            Outsym(Nl);
            Processformat(0, 0, 'u', 0, Strid, Ophead, Opbot);
            Fpt = 0x14;
          }
          Outsym('}');
          Outsym(';');
          Outsym(Nl);
          if (Parm.Z != 0) {
            Printstring(_imp_str_literal("after processing"));
            Printlist(Ophead);
          }
          if (Possibletypename(Name, Typename) != 0) {
            Outsym(Nl);
            Outstring(_imp_str_literal("typedef "));
            if (Headcell == 0)
              Outstring(_imp_str_literal("struct "));
            else
              Outstring(_imp_str_literal("union "));
            Outname(Name);
            Outstring(_imp_join(_imp_str_literal(" "),
                                _imp_join(Typename, _imp_str_literal(";"))));
            Outsym(Nl);
          }
          Clearlist(Nlist);
          Lcell = &Aslist(Tags(Name));
          Kform = Lcell->Kform;
          if (Parm.Z != 0) {
            Printstring(_imp_str_literal("before throwing dummy cell"));
            Printlist(Kform);
          }
          Pop(Kform, I, I, Fhead);
          Fhead = Ophead;
          while (Fhead > 0) {
            Frcell = &Aslist(Fhead);
            if (Frcell->Ptype == 0x433 && Frcell->Kform == Lcell->Kform) {
              Frcell->Uioj = Frcell->Uioj & 0xFFFFFFF0;
              Frcell->Acc = Acc;
              Frcell->Kform = Ophead;
            }
            Fhead = Frcell->Link;
          }
          Lcell->Uioj = Lcell->Uioj & 0xFFFFFFF0;
          Lcell->Acc = Acc;
          Lcell->Slink = Name;
          Lcell->Ptype = Fpt;
          Lcell->Kform = Ophead;
          if (Parm.Z != 0) {
            Printstring(_imp_str_literal("after processing self refs"));
            Printlist(Ophead);
          }
        }
      }
      goto Cssexit2;
    Sw_19:;
      Outstring(_imp_str_literal("***Untranslateable stmnt***"));
      I = Curlinead;
      while (I < Nextlinead) {
        Outsym(*Byteinteger(I));
        I = I + 1;
      }
      goto Cssexit;
    Sw_20:;
      if (Parm.Arr == 0 && Parm.Chk == 0) Parm.Compiler = 1;
      goto Cssexit;
    Sw_21:;
      Kk = Fromar2(P + 1);
      if (Parm.Cprmode != 0) Fault(97, 0, 0);
      Mainep = *String(Addr(Worka.Lett(Word(Kk))));
      goto Cssexit;
      int Cformatref(void) {
        int Fnam;
        int Ophead;
        int Opbot;
        int Nhead;
        int Mrl;
        Listf *Lcell;
        if (A(P) == 1) {
          Fnam = Fromar2(P + 1);
          P = P + 3;
          Copytag(Fnam, No);
          if (3 <= Type && Type <= 4) return (Kform);
          if (Inaformat != 0 && Oldi != Level) {
            Ptype = 4;
            Acc = Maxrecsize;
            Push(Kform, 0, 0, 0);
            Storetag(Fnam, Level, Rbase, 15, 0, Maxrecsize, Kform, Kform);
            return (Kform);
          }
          Fault(62, 0, Fnam);
          Acc = 8;
          return (Dummyformat);
        }
        P = P + 1;
        Ophead = 0;
        Opbot = 0;
        Outstring(_imp_str_literal("*** imp construction too difficult***"));
        return (Ophead);
      }
      void Crformat(int Myrflevel) {
        int D1;
        int D2;
        int Form;
        int Rl;
        int Stalloc;
        int Inc;
        int Q;
        int R;
        int Rfd;
        int Lb;
        int Typep;
        int Sacc;
        int Dvo;
        void Sn(int Q);
        void Round(void);
        Form = 0;
        Acc = 0;
        Inc = 0;
        do {
          Rout = 0;
          Litl = 0;
          Nam = 0;
          Rfd = A(P);
          P = P + 1;
          if (Rfd == 1) {
            Clt();
            Form = Kform;
            Stalloc = Acc;
            P = P + 1;
            if (A(P - 1) == 1) {
              Form = Kform;
              Cqn(P);
              P = P + 1;
              Pack(Ptype);
              D2 = 0;
              Rl = Roundinglength(Ptype, 0);
              if (Nam == 1) {
                Stalloc = Ptrsize(Prec << 4 | Type);
                Rl = Ptrrounding(Ptype & 127);
                if (Arr != 0) {
                  Stalloc = Aheadsize;
                  Rl = Roundinglength(Aheadpt, 0);
                }
              }
              if (Type == 5 && Stalloc == 0) Fault(70, 0, 0);
              Round();
              J = 0;
              do {
                D1 = 0;
                Sn(P);
                P = P + 3;
                Inc = Inc + Stalloc;
              } while (A(P - 1) != 2);
            } else {
              Q = P + 1;
              Arr = 1;
              Pack(Ptype);
              do {
                P = Q;
                do
                  P = P + 3;
                while (A(P - 1) != 2);
                Typep = Ptype;
                Sacc = Acc;
                D2 = Dopevector(No, Typep & 7, Acc, 0, Fromar2(Q)) >> 2;
                Acc = Sacc;
                Ptype = Typep;
                Unpack();
                Rl = Roundinglength(Ptype & 255, 0);
                if (Rl < Arrayinrecrounding) Rl = Arrayinrecrounding;
                do {
                  Round();
                  D1 = 0;
                  Sn(Q);
                  Q = Q + 3;
                } while (A(Q - 1) == 2);
                P = P + 1;
                Q = P + 1;
              } while (A(P - 1) == 2);
            }
          } else {
            Rflevel = Rflevel + 1;
            Binsert(Rfhead(Myrflevel, Rfalt(Myrflevel)),
                    Rfbot(Myrflevel, Rfalt(Myrflevel)), 0, Rflevel, 0);
            Crformat(Rflevel);
            Inc = Acc;
          }
          P = P + 1;
        } while (A(P - 1) == 2);
        if (A(P) == 1) {
          P = P + 1;
          Rfalt(Myrflevel) = Rfalt(Myrflevel) + 1;
          Crformat(Myrflevel);
          if (Acc > Inc) Inc = Acc;
        } else
          P = P + 1;
        Acc = Inc;
        return;
        void Sn(int Q) {
          Tagf Cell;
          Fname = Fromar2(Q);
          if (Aslist(Tags(Fname)).Ptype == 0x4051) Warn(11, 0);
          Cell.Ptype = Ptype;
          Cell.Uioj = Fname << 4 | J;
          Cell.Acc = Acc;
          Cell.Sndisp = D2 & 0xFFFF;
          Cell.Slink = D1 & 0xFFFF;
          Cell.Kform = Form;
          Binsert(Rfhead(Myrflevel, Rfalt(Myrflevel)),
                  Rfbot(Myrflevel, Rfalt(Myrflevel)), Cell.S1, Cell.S2,
                  Cell.S3);
        }
        void Round(void) {}
      }
      void Outfmtcell(Listf Lcell) {
        int Pt;
        int Name;
        int Dvdisp;
        int Nd;
        int Ii;
        Listf *Fcell;
        Pt = Lcell.S1 >> 16;
        Name = Lcell.S1 >> 4 & 0xFFF;
        if ((Pt & 0xcff) == 0x35) {
          Outstring(_imp_str_literal("char "));
          Outname(Name);
        } else {
          Outxtype(Pt & 0xcff, Lcell.Kform);
          Outname(Name);
        }
        if ((Pt & 0x300) != 0) {
          Nd = Lcell.S1 & 15;
          Dvdisp = Lcell.Sndisp;
          for (Ii = Nd; Ii >= 1; Ii--) {
            P = Ctable(Dvdisp + 3 * Ii + 2);
            Outstring(_imp_str_literal(" ["));
            Csexp(0x51);
            if (Ctable(Dvdisp + 3 * Ii) == 0x80000000) {
              Outsym('-');
              P = Ctable(Dvdisp + 3 * Ii + 1);
              Outsym('(');
              Csexp(0x51);
              Outstring(_imp_str_literal(")+1"));
            } else if (Ctable(Dvdisp + 3 * Ii) < 1) {
              Outsym('+');
              Outint(1 - Ctable(Dvdisp + 3 * Ii));
            } else if (Ctable(Dvdisp + 3 * Ii) > 1) {
              Outsym('-');
              Outint(Ctable(Dvdisp + 3 * Ii) - 1);
            }
            Outsym(']');
          }
        }
        if ((Pt & 0xcff) == 0x35) {
          Outsym('[');
          Outint(Lcell.Acc);
          Outsym(']');
        }
        Outsep();
        Outsym(Nl);
      }
      void Processformat(int Level, int Alt, int Structorunion, int Intid,
                         int Strid, int Ophead, int Opbot) {
        Listf Lcell;
        int I;
        int J;
        int K;
        int Newid;
        int Lstrid;
        if (Structorunion == 's')
          while (Rfhead(Level, Alt) != 0) {
            Pop(Rfhead(Level, Alt), Lcell.S1, Lcell.S2, Lcell.S3);
            if (Lcell.S1 != 0) {
              Outfmtcell(Lcell);
              Lcell.Slink = Intid;
              Binsert(Ophead, Opbot, Lcell.S1, Lcell.S2, Lcell.S3);
            } else {
              Newid = Intid << 4 | (Lcell.S2);
              Outstring(_imp_str_literal("union {"));
              Outsym(Nl);
              Processformat(Lcell.S2, 0, 'u', Newid, Strid, Ophead, Opbot);
              Outstring(_imp_str_literal("} u"));
              Outint(Lcell.S2 - 1);
              Outsym(';');
              Outsym(Nl);
            }
          }
        else
          for (I = Alt; I <= Rfalt(Level); I++)
            if (Rfhead(Level, I) == Rfbot(Level, I)) {
              Pop(Rfhead(Level, I), Lcell.S1, Lcell.S2, Lcell.S3);
              if (Lcell.S1 != 0) {
                Outfmtcell(Lcell);
                Lcell.Slink = Intid;
                Binsert(Ophead, Opbot, Lcell.S1, Lcell.S2, Lcell.S3);
              } else {
                Newid = Intid << 4 | (Lcell.S2);
                Outstring(_imp_str_literal("union {"));
                Outsym(Nl);
                Processformat(Lcell.S2, 0, 'u', Newid, Strid, Ophead, Opbot);
                Outstring(_imp_str_literal("} u"));
                Outint(Lcell.S2 - 1);
                Outsym(';');
                Outsym(Nl);
              }
            } else {
              Lstrid = Strid;
              Strid = Strid + 1;
              Newid = Intid << 4 | 8 | Lstrid;
              Outstring(_imp_str_literal("struct {"));
              Outsym(Nl);
              Processformat(Level, I, 's', Newid, Strid, Ophead, Opbot);
              Outstring(_imp_str_literal("} s"));
              Outint(Lstrid);
              Outsym(';');
              Outsym(Nl);
            }
      }
      int Displacement(int Link) {
        Listf *Fcell;
        Listf *Pcell;
        Listf *Lcell;
        Tagf Topnd;
        int Rr;
        int Ii;
        int Ename;
        int Cell;
        Ename = (A(P) << 8) + A(P + 1);
        Cell = 0;
        if (Link != 0) {
          Fcell = &Aslist(Link);
          Cell = Link;
          Ii = -1;
          Acc = -1;
          while (Link > 0) {
            Lcell = &Aslist(Link);
            if (Lcell->Uioj << 16 >> 20 == Ename) {
              Tcell = Link;
              Sndisp = Lcell->Sndisp;
              K = Lcell->Slink;
              J = Lcell->Uioj & 15;
              Ptype = Lcell->Ptype;
              Acc = Lcell->Acc & 0xFFFF;
              Sndisp = Lcell->Sndisp;
              Kform = Lcell->Kform;
              if (Link != Cell) {
                Pcell->Link = Lcell->Link;
                Lcell->Link = Fcell->Link;
                Fcell->Link = Link;
              }
              return (K);
            }
            Pcell = Lcell;
            Link = Lcell->Link;
          }
        }
        Fault(65, 0, Ename);
        if (Cell > 0) {
          Topnd.Ptype = 0x51;
          Topnd.Uioj = Ename << 4;
          Push(Aslist(Cell).Link, Topnd.S1, 0, 0);
        }
        Ptype = 0x51;
        Tcell = 0;
        Unpack();
        return (-1);
      }
      int Copyrecordtag(int Subs) {
        int Q;
        int Fname;
        Subs = 0;
        do {
          Fname = Kform;
          P = P + 2;
          Skipapp();
          if (A(P) == 2 || Fname <= 0) return (0);
          Subs = Subs + 1;
          P = P + 1;
          Q = Displacement(Fname);
          Unpack();
        } while (Type == 3);
        return (Q + 1);
      }
      int Chkrecalign(int P1) {
        int Cell;
        int I;
        int Scan(int Cell);
        P = P1;
        Reducetag(No);
        Cell = Kform;
        return (Scan(Cell));
        int Scan(int Cell) {
          int J;
          while (Cell != 0) {
            I = Aslist(Cell).Ptype >> 4 & 7;
            if (I >= 5) return (I);
            if (Aslist(Cell).Ptype == 0x33) {
              I = Scan(Aslist(Cell).Kform);
              if (I >= 5) return (I);
            }
            Cell = Aslist(Cell).Link;
          }
          return (0);
        }
      }
      void Crname(int Z, int Mode, int Bs, int Dp, int Namep) {
        int Depth;
        int Fname;
        int Emname;
        void Cename(int Mode, int Fname, int Bs, int Dp, int Xd);
        Rd Hdopnd;
        Hdopnd = 0;
        Depth = 0;
        Emname = Namep & 0xFFFF;
        Fname = Kform;
        if (Arr == 0 || (6 <= Z && Z <= 7 && A(P + 2) == 2)) {
          if (A(P + 2) == 2)
            P = P + 3;
          else
            Noapp();
          Cename(Mode, Fname, Bs, Dp, 0);
        } else {
          Hdopnd.Ptype = Aheadpt;
          Hdopnd.Flag = Localir;
          Hdopnd.D = Bs << 16 | Dp;
          Caname(Z, Arr, Hdopnd);
          Namep = -1;
          Cename(Access, Fname, Base, Disp, 0);
        }
        return;
        void Cename(int Mode, int Fname, int Bs, int Dp, int Xd) {
          void Fetchrad(void);
          int Q;
          int Qq;
          int D;
          int C;
          int Tr;
          int Ename;
          int Rptype;
          int Eptype;
          Rd Radopnd;
          Rd Opnd1;
          Listf *Lcell;
          Depth = Depth + 1;
          Rptype = Ptype;
          if (A(P) == 2) {
            Access = Mode;
            Xdisp = Xd;
            Base = Bs;
            Disp = Dp;
            if (Z < 14)
              if ((3 > Z || Z > 4) && Z != 6 && Z != 7) {
                Fault(64, 0, Emname);
                Base = Rbase;
                Disp = 0;
                Access = 0;
                Ptype = 0x51;
                Unpack();
              }
            return;
          }
          P = P + 1;
          Q = Displacement(Fname);
          Eptype = Ptype;
          Unpack();
          Ename = A(P) << 8 | A(P + 1);
          Namep = Ename << 16 | Namep;
          if ((Rptype & 0xf00) == 0x400)
            Outstring(_imp_str_literal("->"));
          else
            Outstring(_imp_str_literal("."));
          Outinternames(Q);
          Outname(Ename);
          if (Arr == 1) goto Ae;
          if (A(P + 2) == 2)
            P = P + 3;
          else
            Noapp();
          if (Type <= 2 || Type == 5 ||
              (Type == 3 && A(P) == 2 &&
               (3 <= Z && Z <= 4 || 6 <= Z && Z <= 7))) {
            Access = Mode + 4 + 4 * Nam;
            Base = Bs;
            Disp = Dp;
            Xdisp = Xd + Q;
            return;
          }
          Xd = Xd + Q;
          Namep = Namep | 0xFFFF0000;
          if (Nam == 1) {
            Mode = Mode + 4;
            Fetchrad();
            Expopnd = Radopnd;
            Mode = 3;
            Dp = 0;
            Xd = 0;
            Bs = 0;
            Namep = -1;
          }
          Cename(Mode, Kform, Bs, Dp, Xd);
          return;
        Ae:;
          Lcell = &Aslist(Tcell);
          Acc = Lcell->Acc & 0xFFFF;
          Sndisp = Lcell->Sndisp & 0xFFFF;
          Kform = Lcell->Kform;
          K = Lcell->Slink & 0xffff;
          C = Acc;
          D = Sndisp;
          Q = K;
          Qq = Kform;
          if ((Z == 6 || Z >= 11) && A(P + 2) == 2) {
            P = P + 3;
            if (Nam == 1) {
              Access = Mode + 8;
              Base = Bs;
              Disp = Dp;
              Xdisp = Xd + Q;
              Ptype = Aheadpt;
              Nameop(6, 8, Namep);
              return;
            }
            Fetchrad();
            Namep = -1;
            Opnd1 = 0;
            Opnd1.Ptype = Aheadpt;
            Opnd1.Flag = Localir;
            Opnd1.D = Q;
            Nameopnd.D = Createah(1, Radopnd, Opnd1);
            Nameopnd.Ptype = Aheadpt;
            Nameopnd.Flag = Reftrip;
            Nameopnd.Xtra = 0;
          } else {
            if (Nam == 1) {
              Xd = Xd + Q;
              Access = Mode + 8;
              Base = Bs;
              Disp = Dp;
              Xdisp = Xd;
              Nameop(6, Aheadsize, Namep);
              Opnd1 = Nameopnd;
              Opnd1.Ptype = Aheadpt;
              Ptype = Lcell->Ptype;
              Unpack();
              Caname(Z, 3, Opnd1);
              Xd = 0;
            } else {
              Fetchrad();
              Opnd1 = 0;
              Opnd1.Ptype = Aheadpt;
              Opnd1.Flag = Localir;
              Opnd1.D = Q;
              Caname(Z, 3, Opnd1);
              Tr = 0;
              Expopnd.Flag = Reftrip;
              Expopnd.D = Tr;
              Xd = 0;
            }
            Namep = -1;
            Xdisp = Xd;
            if (Type == 3) {
              Cename(Access, Qq, Base, Disp, Xd);
              C = Acc;
            } else if (Z >= 11)
              Fault(17, 0, Ename);
          }
          Acc = C;
          return;
          void Fetchrad(void) {
            Access = Mode + 4;
            Base = Bs;
            Disp = Dp;
            Xdisp = Xd;
            Ptype = Rptype;
            Unpack();
            Nameop(4, 4, Namep);
            Ptype = Eptype;
            Unpack();
            Radopnd = Nameopnd;
          }
        }
      }
      void Cstrexp(int Mode) {
        int Pp;
        int Wkarea;
        int Dots;
        int Err;
        int Keepwa;
        int Fnam;
        int I;
        int Endflag;
        int Firsttrip;
        int Trip;
        Rd Opnd1;
        Rd Opnd2;
        Rd Opnd3;
        int Strop(Rd Opnd);
        Keepwa = Mode & 16;
        Mode = Mode & 15;
        Opnd1 = 0;
        Opnd1.Ptype = 0x35;
        Opnd1.Flag = Localir;
        Opnd1.Xtra = 268;
        Pp = P;
        Stringl = 0;
        Fnam = 0;
        Wkarea = 0;
        P = P + 3;
        Err = 72;
        if (A(P) != 4) goto Error;
        P = P + 1;
        Dots = 0;
        Endflag = 0;
        Stringl = 0;
        Err = Strop(Opnd2);
        if (Strresinwa == No && (Ptype & 0x1000) != 0) Mode = 1;
        if (Err != 0) goto Error;
      Next:
        if (A(P) == 2)
          Endflag = 1;
        else {
          if (A(P + 1) != Concop) {
            Err = 72;
            goto Error;
          }
          P = P + 2;
          if (Dots == 0 && Opnd2.Flag == Lconst) {
            Err = Strop(Opnd3);
            if (Err != 0) goto Error;
          } else
            Opnd3.Flag = 255;
        }
        if (Endflag == 0 && Opnd2.Flag == Lconst && Lconst == Opnd3.Flag &&
            Mode == 1) {
          I = Concat;
          Ctop(I, Err, 0, Opnd2, Opnd3);
          if (I == 0) goto Next;
        }
        if (Dots == 0) {
          if (Endflag != 0) {
            Outopnd(Opnd2, 0);
            Opnd1 = Opnd2;
            goto Tidy;
          }
          Firsttrip = Brectrip(Precc, 0x35, 0, Opnd1, Opnd2);
          Opnd1.Flag = Reftrip;
          Opnd1.D = Firsttrip;
          Dots = Dots + 1;
        }
        if (Endflag == 0) {
          if (Opnd3.Flag == 255) {
            Err = Strop(Opnd3);
            if (Err != 0) goto Error;
          }
          Opnd1.D = Brectrip(Concat, 0x35, 0, Opnd1, Opnd3);
          Dots = Dots + 1;
          goto Next;
        }
        for (I = 2; I <= Dots; I++) Outstring(_imp_str_literal("imp_concat("));
        Trip = Firsttrip;
        while (Trip != 0) {
          Outopnd(Triples(Trip).Opnd2, 0);
          if (Trip == Firsttrip)
            Outstring(_imp_str_literal(","));
          else {
            Outstring(_imp_str_literal(")"));
            if (Triples(Trip).Puse != 0) Outsym(',');
          }
          Trip = Triples(Trip).Puse;
        }
      Tidy:;
        Expopnd = Opnd1;
        Value = Wkarea;
        P = P + 1;
        if (Keepwa == 0 && Wkarea > 0) Returnwsp(Wkarea, 268);
        Stringl = 0;
        return;
      Error:
        Fault(Err, 0, Fnam);
        Expopnd = Opnd1;
        Base = Rbase;
        Disp = 0;
        Value = 0;
        Access = 0;
        P = Pp;
        Skipexp();
        return;
        int Strop(Rd Opnd) {
          int Ctype;
          int Alt;
          int I;
          Alt = A(P);
          Opnd = 0;
          if (Alt > 2) return (75);
          if (Alt != 1) {
            Ctype = A(P + 1);
            if (Ctype == 0x35) {
              Ptype = Ctype;
              Stringl = A(P + 2);
              Opnd.Ptype = Ctype;
              Opnd.Flag = Lconst;
              Opnd.D = P + 2;
              Opnd.Xtra = Stringl;
              P = P + Stringl + 3;
            } else
              return (73);
          } else {
            P = P + 1;
            Copytag(Fromar2(P), No);
            if (Ptype == 0x1006) Type = Acc & 7;
            if (Type == 3) Reducetag(No);
            if (5 != Type && Type != 7) {
              Fnam = Fromar2(P);
              return (71);
            }
            if (Ptype == 0x4035 && A(P + 2) == 2 && 2 == A(P + 3) &&
                Mode != 0) {
              Opnd.Flag = Lconst;
              Opnd.Ptype = 0x35;
              Opnd.D = Midcell;
              Opnd.Xtra = Kform;
              Stringl = Opnd.Xtra;
              P = P + 4;
              return (0);
            }
            if (Ptype == 0x35 && A(P + 2) == 2 && 2 == A(P + 3)) {
              Opnd.Flag = Dname;
              Opnd.Xtra = 0;
              Opnd.Ptype = Ptype;
              Opnd.D = Fromar2(P);
              P = P + 4;
            } else {
              Opnd.Flag = Arname;
              Opnd.D = P;
              P = P + 2;
              Skipapp();
              while (A(P) == 1) {
                P = P + 3;
                Skipapp();
              }
              P = P + 1;
            }
            Stringl = 0;
          }
          return (0);
        }
      }
      void Cres(int Lab) {
        int P1;
        int P2;
        int Sexprn;
        int W;
        int Last;
        int Err;
        int Fnam;
        int Jj;
        Rd Opnd1;
        Rd Opnd2;
        Last = 0;
        Fnam = 0;
        Sexprn = 0;
        P1 = P;
        Err = 43;
        if ((Nameopnd.Ptype & 0xC700) == 0x4000) {
          Fnam = Nameopnd.D;
          goto Error;
        }
        Err = 74;
        Getwsp(W, 4);
        Opnd1.Ptype = 0x61;
        Opnd1.Flag = Localir;
        Opnd1.D = Rbase << 16 | W;
        P = P + 3;
        if (A(P) == 4) goto Res;
        Err = 72;
      Error:
        Fault(Err, 0, Fnam);
        P = P1;
        Skipexp();
        return;
      Res:
        P = P + 1;
        if (A(P) == 3) {
          Opnd2.Ptype = 0x51;
          Opnd2.Flag = Sconst;
          Opnd2.D = 0;
          Outstring(_imp_str_literal("NULL,"));
        } else {
          if (A(P) != 1) goto Error;
          P = P + 1;
          P2 = P;
          Cname(2);
          Outsym(',');
          Opnd2 = Nameopnd;
          if (Type != 5) {
            Err = 71;
            Fnam = Fromar2(P2);
            goto Error;
          }
          if (A(P + 1) != Concop) {
            Err = 72;
            goto Error;
          }
          P = P + 2;
        }
        if (A(P) != 3) goto Error;
        Sexprn = Sexprn + 1;
        P = P + 1;
        Cstrexp(0);
        Outsym(',');
        Opnd2.Ptype = 0x51;
        Opnd2.Flag = Sconst;
        Opnd2.D = Lab;
        if (A(P) == 2) {
          Outstring(_imp_str_literal("NULL"));
          goto End;
        }
        if (A(P + 1) != Concop) {
          Err = 72;
          goto Error;
        }
        P2 = P + 1;
        P = P2 + 1;
        if (A(P) == 3) {
          P = P2;
          Outstring(_imp_str_literal("_imptempstring)"));
          if (Lab == 0)
            Outsym(';');
          else
            Outsym('+');
          Outstring(_imp_str_literal("imp_resolve(_imptempstring,"));
          goto Res;
        }
        if (A(P) != 1) goto Error;
        do {
          P = P + 3;
          Skipapp();
        } while (A(P) != 2);
        if (A(P + 1) == 1) {
          P = P2;
          Outstring(_imp_str_literal("_imptempstring)"));
          if (Lab == 0)
            Outsym(';');
          else
            Outsym('+');
          Outstring(_imp_str_literal("imp_resolve(_imptempstring,"));
          goto Res;
        }
        P1 = P + 1;
        P = P2 + 2;
        Cname(2);
        P = P1;
      End:;
        P = P + 1;
      }
      void Savestackptr(void) {
        int Jjj;
        if (Currinf->Auxsbase == 0) {
          Jjj = Utemptrip(Ssptr, Minapt, 0, N);
          Currinf->Auxsbase = N;
          if (Target == Emas && Parm.Stack == 0)
            N = N + 16;
          else
            N = N + 4;
        }
      }
      void Cend(int Kkk) {
        int Kp;
        int Jj;
        int Bit;
        Tagf *Rcell;
        Tagf *Tcell;
        Tagf *Pcell;
        void Dtable(int Level);
        if (Kkk != 2) Setline();
        Bit = 1 << Level;
        if ((Kkk & 0x3FFF) > 0x1000 && Parm.Compiler == 0 && Lastinst == 0)
          Jj = Uconsttrip(Rtbad, 0x51, 0, 0);
        if (Kkk == 0) {
          if (Parm.Trace == 1) Jj = Uconsttrip(Rdptr, 0x51, 0, Level - 1);
          Jj = Currinf->Auxsbase;
          if (Jj != 0) Jj = Uconsttrip(Rsptr, 0x51, 0, Jj);
        }
        Forcetrips();
        if (N > Nmax) Nmax = N;
        while (Currinf->Label != 0) {
          Pop(Currinf->Label, I, J, Kp);
          if ((J & 0xFFFF) != 0) {
            J = J & 0xFFFF;
            if (0 < Kp && Kp <= Maxulab) Fault(11, Aslist(J).S3 & 0xFFFF, Kp);
            Clearlist(J);
          } else if ((I & Labusedbit) == 0 && Kp < Maxulab)
            Warn(3, Kp);
        }
        Nmax = (Nmax + 7) & (-8);
        Currinf->Snmax = Nmax;
        Jj = Currinf->M - 1;
        if (Jj >= 0) {
          Rcell = &Aslist(Tags(Jj));
          if ((Rcell->Ptype & 0x1000) != 0) {
            K = Rcell->Slink;
            while (K > 0) {
              Tcell = &Aslist(K);
              if ((Tcell->Ptype & 0xF00) == 0x500 && (Tcell->Uioj & 15) == 0) {
                Pcell = &Aslist(Tags((Tcell->Uioj >> 4) & 4095));
                Tcell->Uioj = Tcell->Uioj | Pcell->Uioj & 15;
              }
              K = Tcell->Link;
            }
          }
        }
        if ((Kkk & 0x1000) != 0) Jj = Uconsttrip(Rtxit, 0x51, 0, Kkk);
        if (Kkk == 1) Jj = Uconsttrip(Xstop, 0x51, 0, Kkk);
        Clearlist(Twsphead);
        for (Jj = 0; Jj <= 4; Jj++) {
          Clearlist(Currinf->Avlwsp(Jj));
        }
        if (Target == Perq || Target == Accent) Forcetrips();
        Dtable(Level);
        Forcetrips();
        while (Currinf->Unattformats != 0) {
          Pop(Currinf->Unattformats, I, J, Jj);
          Clearlist(I);
          Clearlist(J);
          Clearlist(Jj);
        }
        if (Kkk == 2) return;
        if (Level <= 2 && (Level != 2 || Parm.Cprmode != 2)) {
          if (Kkk == 1 && Level == 2)
            Kkk = 2;
          else
            Fault(109, 0, 0);
        }
        Level = Level - 1;
        Currinf = &Levelinf(Level);
        if ((Kkk & 0x1000) != 0) {
          Rlevel = Currinf->Rbase;
          Rbase = Rlevel;
        }
        if ((Kkk & 0x1000) != 0) Nmax = Currinf->Snmax;
        N = Currinf->Sn;
        if (Kkk == 2) Cend(Kkk);
        if ((Kkk & 0x1000) != 0 && Parm.Compiler == 0 &&
            (Rlevel > 0 || Parm.Cprmode != 2)) {
          Jj = Nextp + 6;
          if (A(Nextp + 5) != 11 || A(Jj + Fromar2(Jj)) != 2) {
            Jj = Enterlab(Currinf->Jround, 1);
            Currinf->Jround = 0;
          }
        }
        return;
        void Dtable(int Level) {
          int Swopof(int Ptype, int Value);
          _imp_string255 Rtname;
          _imp_string255 Localname;
          if ((1 << Host & Unsignedshorts) == 0) {
            typedef struct Headf {
              short Rtline;
              short Lineoff;
              short Oflags;
              short Env;
              short Display;
              short Rtflags;
            } Headf;
            typedef struct Varf {
              short Flags;
              short Disp;
              _imp_string255 Vname;
            } Varf;
          } else {
            typedef struct Headf {
              unsigned short Rtline;
              unsigned short Lineoff;
              unsigned short Oflags;
              unsigned short Env;
              unsigned short Display;
              unsigned short Rtflags;
            } Headf;
            typedef struct Varf {
              unsigned short Flags;
              unsigned short Disp;
              _imp_string255 Vname;
            } Varf;
          }
          Headf *Dhead;
          Varf *Var;
          Listf *Lcell;
          Listf *Scell;
          Swdataform *Swdata;
          const int Larrrout = 0xF300;
          Tagf T;
          int Dptr;
          int Lnum;
          int Ml;
          int Kk;
          int Jj;
          int Q;
          int Dend;
          int Bit;
          int S4;
          int Langd;
          int Rules;
          int Ii;
          const int Dlimit = 700;
          int Dd[701 /*0:700*/];
          Bit = 1 << Level;
          Langd = Kkk >> 14 << 30 | Level << 18;
          if (Parm.Trace == 1) Pdata(Darea, 4, 0, Addr(Dd(0)));
          Filldtabrefs(Currinf->Ral);
          if (Parm.Trace != 0)
            Push(Levelinf(Level - 1).Ral, Darea, Cas(Darea) + 4, Langd);
          Dhead = Record(Addr(Dd(0)));
          Dhead->Rtline = Swopof(0x41, Currinf->L);
          Dhead->Lineoff = Swopof(0x41, Currinf->Diaginf);
          Dhead->Oflags = Swopof(0x41, Langd >> 16);
          Dhead->Env = 0;
          if (Target == Ibm || Target == Ibmxa || Target == Amdahl)
            Dhead->Display = Currinf->Rbase;
          else
            Dhead->Display = Swopof(0x41, Currinf->Display);
          Dhead->Rtflags = Swopof(0x41, Currinf->Flag & 0x3FFF);
          Ml = Currinf->M;
          if (Ml != 0) Ml = Word(Ml - 1);
          Lnum = Worka.Lett(Ml);
          Dptr = 4;
          Dend = 0;
          if (Lnum == 0)
            Dhead->Idhead = 0;
          else {
            Q = Addr(Worka.Lett(Ml));
            Rtname = *String(Q);
            Lnum = *Length(Rtname);
            Dhead->Rtname = Rtname;
            Dptr = Dptr + (Lnum >> 2);
          }
          Dd(Dptr) = Swopof(0x51, Currinf->Onword);
          Dptr = Dptr + 1;
          Jj = Currinf->Names;
          while (0 <= Jj && Jj < 0x3FFF) {
            Lcell = &Aslist(Tags(Jj));
            T = *Lcell;
            S4 = Lcell->Link;
            Ptype = T.Ptype;
            Type = Ptype & 15;
            if ((Type > 2 || (Ptype & 0xFF00) != 0x4000 || Parm.Stack != 0) &&
                (T.Uioj & 0xC000) == 0)
              Warn(2, Jj);
            I = T.Uioj >> 4 & 15;
            J = T.Uioj & 15;
            K = T.Slink;
            if (Parm.Diag != 0 && (Ptype & 0x7300) <= 0x200 &&
                Dptr < Dlimit - 3 && (1 <= Type && Type <= 3 || Type == 5)) {
              Q = Addr(Worka.Lett(Word(Jj)));
              if (I == 0)
                Ii = 1;
              else
                Ii = 0;
              Var = Record(Addr(Dd(Dptr)));
              Var->Flags = Swopof(0x41, Ptype << 4 | Ii << 2);
              if (((Paramsbwards == Yes && K < Currinf->Display) ||
                   (Stackdown == Yes && K > Currinf->Display)) &&
                  (Ptype & 0xC00) == 0 && Ii == 0 && (Type == 3 || Type == 5)) {
                if (K < Currinf->Display)
                  Rules = 2;
                else
                  Rules = 1;
                Kk = Roundinglength(Ptype, Rules);
                K = (K + T.Acc + Kk) & (~Kk);
              }
              Var->Disp = Swopof(0x41, K);
              if (Target == Eamd && I != 0) Var->Disp = K + 64;
              Localname = *String(Q);
              Lnum = *Length(Localname);
              Var->Vname = Localname;
              if (Host != Target && Parm.Trace != 0)
                Changesex(Addr(Dd(0)), 4 * Dptr + 4, Lnum + 1);
              Dptr = Dptr + ((Lnum + 8) >> 2);
            }
            if (J == 15 && (Ptype & 0x3000) != 0 && (T.Uioj & 0xC000) != 0)
              Fault(28, 0, Jj);
            if (J == 15 && Type == 4) Fault(62, 0, Jj);
            if ((Ptype & 0x3000) != 0) Clearlist(K);
            if (Type == 4) Clearlist(T.Kform);
            if (Type == 6) {
              Scell = &Aslist(Lcell->Slink);
              Swdata = Record(Scell->S1);
              Outstring(_imp_str_literal("goto "));
              Outswadname(Jj);
              Outstring(_imp_str_literal("_skip;"));
              Outsym(Nl);
              Outswadname(Jj);
              Outstring(_imp_str_literal("_despatch:"));
              Outsym(Nl);
              Outstring(_imp_str_literal("switch ("));
              Outswadname(Jj);
              Outstring(_imp_str_literal("_value) {"));
              Outsym(Nl);
              for (Lnum = 0; Lnum <= Swdata->Lseen - 1; Lnum++) {
                Outstring(_imp_str_literal("case "));
                P = Swdata->Slabs(Lnum);
                Csexp(0x51);
                Outstring(_imp_str_literal(": goto "));
                Outswadname(Jj);
                Outsym('_');
                P = Swdata->Slabs(Lnum);
                Labexp();
                Outsym(';');
                Outsym(Nl);
              }
              Outstring(_imp_str_literal("default:"));
              if (Swdata->Default != 0) {
                Outstring(_imp_str_literal("goto "));
                Outswadname(Jj);
                Outstring(_imp_str_literal("_default;"));
              } else {
                Outstring(_imp_str_literal("BADSWITCH("));
                Outswadname(Jj);
                Outstring(_imp_str_literal("_value,"));
                Outswadname(Jj);
                Outstring(_imp_str_literal("_line,"));
                Outswadname(Jj);
                Outstring(_imp_str_literal("_file);"));
              }
              Outsym(Nl);
              Outsym('}');
              Outsym(Nl);
              Outswadname(Jj);
              Outstring(_imp_str_literal("_skip:;"));
              Outsym(Nl);
              Free(Addr(*Swdata));
              Kk = T.Slink;
              Clearlist(Kk);
            }
            Lcell->Link = Asl;
            Asl = Tags(Jj);
            Tags(Jj) = S4 & 0x3FFFF;
            Jj = S4 >> 18;
          }
          Dd(Dptr) = -1;
          Dptr = (Dptr << 2) + 4;
          if (Parm.Trace == 1) Pdata(Darea, 4, Dptr, Addr(Dd(0)));
          return;
          int Swopof(int Ptype, int Value) {
            Rd Opnd;
            if (Host != Target) {
              Opnd = 0;
              Opnd.D = Value;
              Opnd.Ptype = Ptype;
              Reformatc(Opnd);
              Value = Opnd.D;
            }
            return (Value);
          }
        }
      }
      void Declarescalars(int Xtra) {
        int Inc;
        int Scalname;
        int Rl;
        Pack(Ptype);
        Inc = Acc;
        Sndisp = 0;
        Rl = Roundinglength(Ptype, 1);
        if (Nam != 0 && Arr == 0) {
          Inc = Ptrsize(Ptype & 127);
          Rl = Ptrrounding((Ptype & 127) + 128);
        }
        if (Nam > 0 && Arr > 0) {
          Inc = Aheadsize;
          Rl = Roundinglength(Aheadpt, 1);
        }
        if (Ptype == 0x35 && (Acc <= 0 || Acc > 256)) {
          Fault(70, Acc - 1, 0);
          Acc = 255;
        }
        if (Type == 5)
          Outstring(_imp_str_literal("char "));
        else
          Outtype(Ptype & 255, Xtra);
        do {
          N = ((N + Rl + Sframemisalign) & (~Rl)) - Sframemisalign;
          Scalname = Fromar2(P);
          if (Nam != 0) Outstring(_imp_str_literal("*"));
          Outname(Scalname);
          P = P + 3;
          Storetag(Scalname, Level, Rbase, 0, Sndisp, Acc, N, Xtra);
          N = N + Inc;
          if (Type == 5 && Nam == 0) {
            Outstring(_imp_str_literal(" ["));
            Outint(Acc);
            Outstring(_imp_str_literal("] "));
          }
          if (A(P - 1) == 1) Outsym(',');
        } while (A(P - 1) != 2);
        N = (N + Minparamsize - 1) & (-Minparamsize);
      }
      int Dopevector(int Tamper, int Typep, int Elsize, int Mode, int Iden) {
        int I;
        int Jj;
        int K;
        int Nd;
        int D;
        int M0;
        int Head;
        int Nops;
        int Typepp;
        int Pin;
        int Etype;
        int Value;
        Rd Opnd;
        Listf *Lcell;
        int Lbh[13 /*0:12*/];
        int Lbb[13 /*0:12*/];
        int Lbp[13 /*0:12*/];
        int Ubp[13 /*0:12*/];
        int Dv[40 /*0:39*/];
        Nd = 0;
        Typepp = 0;
        Pin = P;
        M0 = 1;
        do {
          Nd = Nd + 1;
          P = P + 1;
          Lbp(Nd) = P;
          Etype = Tsexp(Value);
          P = Lbp(Nd) + 3;
          if (Nd > 12) {
            Fault(37, 0, Iden);
            Nd = 1;
          }
          Lbh(Nd) = 0;
          Lbb(Nd) = 0;
          Nops = 0;
          Torp(Lbh(Nd), Lbb(Nd), Nops, 1);
          Ubp(Nd) = P;
          Skipexp();
          if (Imod(Etype) == 1) {
            Expop(Lbh(Nd), Lbb(Nd), Nops, 0x251);
            Lbb(Nd) = Expopnd.D;
          } else
            Lbb(Nd) = 0x80000000;
        } while (A(P) != 2);
        P = P + 1;
        if (Tamper == Yes)
          for (D = 1; D <= Nd; D++)
            if (Lbb(D) > 0 && Lbb(D) * Nd <= 6) Lbb(D) = 0;
        Dv(1) = Nd << 16 | Elsize;
        for (D = 1; D <= Nd; D++) {
          K = 3 * D;
          Dv(K) = Lbb(D);
          Dv(K + 1) = Lbp(D);
          Dv(K + 2) = Ubp(D);
        }
        K = 3 * Nd + 2;
        J = Nd;
        Sndisp = 4 * Worka.Constptr;
        I = Sndisp;
        for (D = 0; D <= K; D++) {
          Ctable(Worka.Constptr) = Dv(D);
          Worka.Constptr = Worka.Constptr + 1;
        }
        if (Worka.Constptr > Worka.Constlimit) Fault(102, Worka.Wkfilek, 0);
        return (I);
      }
      void Declarearrays(int Format, int Finf) {
        int Dvdisp;
        int Pp;
        int Dvf;
        int Elsize;
        int Totsize;
        int Ptypep;
        int Arrp;
        int Nn;
        int Nd;
        int Ii;
        int Cdv;
        int Lwb;
        int Ptypepp;
        int Jjj;
        int Jj;
        int Trip1;
        int Rl;
        int Topp;
        int Iden;
        Rd Opnd1;
        Savestackptr();
        Arrp = 2 * Format + 1;
        Arr = Arrp;
        Pack(Ptypep);
        Elsize = Acc;
      Start:
        Nn = 1;
        P = P + 1;
        Pp = P;
        Cdv = 0;
        Ptypepp = Ptypep;
        while (A(P + 2) == 1) {
          P = P + 3;
          Nn = Nn + 1;
        }
        P = P + 3;
        Dvdisp = Dopevector(Yes, Type, Elsize, 1, Fromar2(Pp));
        Topp = P;
        Nd = J;
        Cdv = 1;
        if (Lwb == 0 && Format == 0) Ptypepp = Ptypep + 256;
        Sndisp = Sndisp >> 2;
        Dvdisp = Dvdisp >> 2;
      Decl:;
        J = Nd;
        Rl = Roundinglength(Aheadpt, 1);
        N = (N + Rl) & (~Rl);
        for (Jjj = 0; Jjj <= Nn - 1; Jjj++) {
          Iden = Fromar2(Pp + 3 * Jjj);
          Ptype = Ptypepp;
          Unpack();
          Storetag(Iden, Level, Rbase, Nd, Dvdisp, Elsize, N, Finf);
          N = N + Aheadsize;
          if (Format == 0) {
            if ((Ptypepp & 15) == 5)
              Outstring(_imp_str_literal("char "));
            else
              Outtype(Ptypepp & 255, Finf);
            Outname(Iden);
            for (Ii = Nd; Ii >= 1; Ii--) {
              P = Ctable(Dvdisp + 3 * Ii + 2);
              Outstring(_imp_str_literal(" ["));
              Csexp(0x51);
              if (Ctable(Dvdisp + 3 * Ii) == 0x80000000) {
                Outsym('-');
                P = Ctable(Dvdisp + 3 * Ii + 1);
                Outsym('(');
                Csexp(0x51);
                Outstring(_imp_str_literal(")+1"));
              } else if (Ctable(Dvdisp + 3 * Ii) < 1) {
                Outsym('+');
                Outint(1 - Ctable(Dvdisp + 3 * Ii));
              } else if (Ctable(Dvdisp + 3 * Ii) > 1) {
                Outsym('-');
                Outint(Ctable(Dvdisp + 3 * Ii) - 1);
              }
              Outsym(']');
              if ((Ptypepp & 15) == 5) {
                Outstring(_imp_str_literal(" ["));
                Outint(Elsize);
                Outstring(_imp_str_literal("] "));
              }
            }
            if (Jjj != Nn - 1) {
              Outsym(';');
              Outsym(Nl);
            }
          }
        }
        P = Topp + 1;
        if (A(P - 1) == 2) return;
        Outsym(';');
        Outsym(Nl);
        goto Start;
      }
      int Roundinglength(int Ptype, int Rules) {
        if ((Ptype & 0x1000) != 0) return (Ptrrounding(128 * Rules));
        if ((Ptype & 0xC00) != 0)
          return (Ptrrounding((Ptype & 0x7F) + 128 * Rules));
        return (Rnding((Ptype & 0x7F) + 128 * Rules));
      }
      void Clt(void) {
        int Alt;
        int Ptypep;
        int I;
        int Flags;
        int Sj;
        Alt = A(P);
        Flags = Typeflag(Alt);
        if ((Flags & 0x8000) != 0) {
          P = P + 1;
          Flags = Typeflag(A(P) + (Flags & 15));
        }
        if ((Flags & 0x4000) != 0) P = P + 1;
        if ((Flags & 0x2000) != 0) Warn(8, 0);
        if ((Flags & 0x1000) != 0) Fault(99, 0, 0);
        Prec = Flags >> 4 & 15;
        Type = Flags & 7;
        P = P + 1;
        Acc = Bytes(Prec);
        Pack(Ptypep);
        if (Type == 5)
          if (A(P) == 1)
            if (A(P + 1) == 1) {
              P = P + 4;
              if (Intexp(I, Minapt) != 0) {
                Fault(41, 0, 0);
                I = 255;
              }
              if (1 > I || I > 255) Fault(70, I, 0);
              Acc = I + 1;
              Ptype = Ptypep;
              Unpack();
            } else {
              Acc = 0;
              P = P + 2;
            }
          else {
            Acc = 0;
            P = P + 1;
          }
        Kform = 0;
        if (Type == 3) {
          Sj = J;
          Kform = Cformatref;
          Ptype = Ptypep;
          Unpack();
          J = Sj;
        }
      }
      void Cqn(int P) {
        int I;
        I = A(P);
        Nam = 0;
        Arr = 0;
        if (I == 1) Arr = 1;
        if (I <= 2) Nam = 1;
      }
      void Crspec(int M) {
        int Kk;
        int Jj;
        int Typep;
        int Ophead;
        int Nparms;
        int Axname;
        int Sacc;
        int Skform;
        int Pchkword;
        int Pcount;
        Listf *Lcell;
        _imp_string255 Ss;
        Litl = Extrn & 3;
        Acc = 0;
        Kform = 0;
        if (A(P) == 1) {
          Typep = Litl << 14 | 0x1000;
          P = P + 4;
        } else {
          Rout = 1;
          Arr = 0;
          P = P + 1;
          Clt();
          Nam = 0;
          if (A(P) == 2) Nam = 2;
          Pack(Typep);
          P = P + 4;
        }
        Kk = Fromar2(P);
        Axname = Addr(Worka.Lett(Word(Kk)));
        Jj = 0;
        P = P + 3;
        Sacc = Acc;
        Skform = Kform;
        if (A(P - 1) == 1) {
          if (Litl == 0) Warn(10, 0);
          Movebytes(A(P) + 1, Addr(A(0)), P, Addr(A(0)), Worka.Artop);
          Outstring(_imp_str_literal("#define "));
          Outstring(*String(Axname));
          Axname = Addr(A(Worka.Artop));
          Outsym(' ');
          if (*String(Axname) == _imp_str_literal("s_cstring"))
            Outstring(_imp_str_literal("s__cstring"));
          else
            Outstring(*String(Axname));
          Outsym(Nl);
          Worka.Artop = (Worka.Artop + 4 + A(P)) & (-4);
          P = P + A(P) + 1;
        }
        Cfplist(Ophead, Nparms);
        Pchkword = 0;
        Ss = *String(Axname);
        if (0 <= M && M <= 1)
          if ((Typep & 0xc000) == 0 || (Ss != _imp_str_literal("malloc") &&
                                        Ss != _imp_str_literal("free") &&
                                        Ss != _imp_str_literal("realloc") &&
                                        Ss != _imp_str_literal("perror") &&
                                        Ss != _imp_str_literal("getcwd") &&
                                        Ss != _imp_str_literal("strlen"))) {
            if ((Typep & 0xc000) == 0x8000)
              Outstring(_imp_str_literal("extern "));
            Outtype(Typep & 255, Skform);
            if ((Typep & 0x800) != 0 && (Typep & 7) != 5) Outsym('*');
            Outname(Kk);
            Outsym('(');
            Outsym(' ');
            Lcell = &Aslist(Ophead);
            if (Nparms == 0)
              Outstring(_imp_str_literal("void "));
            else
              for (Pcount = 1; Pcount <= Nparms; Pcount++) {
                if ((Lcell->S1 & 0x10000000) != 0) {
                  Outtype(Lcell->S1 >> 16 & 255, Lcell->Sndisp);
                  Outstring(_imp_str_literal("()"));
                } else
                  Outxtype(Lcell->S1 >> 16, Lcell->Sndisp);
                if (Lcell->Link != 0) Outsym(',');
                Lcell = &Aslist(Lcell->Link);
              }
            Outstring(_imp_str_literal(");"));
          }
        if (Nparms > 0) Pchkword = Nparms << 16 | Aslist(Ophead).S3 >> 16;
        if (M == 1) {
          if (Target == Emas || Target == Pnx || Target == Ibm ||
              Target == Ibmxa || Target == Amdahl ||
              (1 << Target & Emachine) != 0)
            Cxref(*String(Axname), 3 * Parm.Dynamic | Extrn, Pchkword, Jj);
          if (Target == Perq || Target == Accent)
            Jj = Axname - Addr(A(Worka.Dictbase));
        } else if (Target == Perq || Target == Accent) {
          Jj = Worka.Rtcount;
          Worka.Rtcount = Worka.Rtcount + 1;
        }
        if (M == 0 && Rlevel == 0) {
          if (Parm.Cprmode == 0) Parm.Cprmode = 2;
          if (Parm.Cprmode != 2) Fault(56, 0, Kk);
        }
        J = 15 - (M & 1);
        Ptype = Typep;
        Storetag(Kk, Level, Rbase, J, Jj, Sacc, Ophead, Skform);
      }
      void Cfplist(int Ophead, int Nparms) {
        int Opbot;
        int Pp;
        int Inc;
        int Rl;
        int Rsize;
        int Cell;
        int Psimple;
        Listf *Lcell;
        Ophead = 0;
        Opbot = 0;
        Nparms = 0;
        Psimple = 1;
        while (A(P) == 1) {
          Pp = P + 1 + Fromar2(P + 1);
          P = P + 3;
          Cfpdel();
          if (Ptype != 0x51 &&
              (Rout != Arr || Arr != 0 || Nam != 1 || 0 >= Type || Type > 3))
            Psimple = 0;
          if (Rout != 0) {
            Inc = Rtparamsize;
            Rl = Roundinglength(Rtparampt, 2);
          } else if (Arr == 1) {
            Inc = Aheadsize;
            Rl = Roundinglength(Aheadpt, 2);
          } else if (Nam == 1) {
            Inc = Ptrsize(Ptype & 0x7F);
            Rl = Ptrrounding((Ptype & 0x7F) + 256);
          } else if (Strvalinwa == Yes && Ptype == 0x35) {
            Inc = Ptrsize(0x35);
            Rl = Ptrrounding(256 + 0x35);
          } else if (Recvalinwa == Yes && Ptype == 0x33) {
            Inc = Ptrsize(0x33);
            Rl = Ptrrounding(256 + 0x33);
          } else if (Target == Emas && Ptype == 0x33) {
            Inc = Acc + 8;
            Rl = 3;
          } else {
            Inc = Acc;
            Rl = Roundinglength(Ptype, 2);
          }
          do {
            if (Paramsbwards == Yes) {
              Push(Ophead, 0, 0, Rl);
              Cell = Ophead;
            } else {
              Binsert(Ophead, Opbot, 0, 0, Rl);
              Cell = Opbot;
            }
            Lcell = &Aslist(Cell);
            Lcell->Ptype = Ptype;
            Lcell->Sndisp = Kform;
            Lcell->Acc = Acc;
            Nparms = Nparms + 1;
            P = P + 3;
          } while (A(P - 1) != 2);
          P = Pp;
        }
        Opbot = Ophead;
        Inc = 0;
        Inc = ((Inc + Rl + Sframemisalign) & (~Rl)) - Sframemisalign;
        P = P + 1;
        if (Parm.Z != 0) Printlist(Ophead);
        Pp = Inc << 16 | Nparms;
        if ((Target == Ibm || Target == Ibmxa || Target == Amdahl))
          Pp = Pp | Psimple << 15;
        if (Nparms > 0) Aslist(Ophead).S3 = Pp;
        if (Parm.Z != 0) Printlist(Ophead);
      }
      void Cfpdel(void) {
        static int Fp_sw;
        static void *Fp[3 /*1:3*/] = {
            &&Fp_1,
            &&Fp_2,
            &&Fp_3,
        };
        int Fpalt;
        Fpalt = A(P);
        P = P + 1;
        Kform = 0;
        Litl = 0;
        goto *Fp[Fp_sw = (Fpalt)-1];
      Fp_1:;
        Rout = 0;
        Clt();
        Cqn(P);
        if (Type == 5 && Nam == 0 && (Acc <= 0 || Acc > 256)) {
          Fault(70, Acc - 1, 0);
          Acc = 255;
        }
        P = P + 1;
        goto Pk;
      Fp_2:;
        Rout = 1;
        Nam = 1;
        Arr = 0;
        if (A(P) == 1) {
          Type = 0;
          Prec = 0;
          P = P + 2;
        } else {
          P = P + 1;
          Clt();
          Nam = 1;
          if (A(P) == 2) Nam = 3;
          P = P + 2;
        }
        Acc = Rtparamsize;
        goto Pk;
      Fp_3:;
        Acc = Ptrsize(0);
        Nam = 1;
        Rout = 0;
        Type = 0;
        Arr = 0;
        Prec = 0;
      Pk:
        Pack(Ptype);
      }
      void Rhead(int Rtname, int Axname, int Xtra) {
        int W3;
        int Flags;
        Listf *Lcell;
        Flags = 0;
        if (Xtra != 0) Flags = Bstruct;
        Currinf->Snmax = Nmax;
        Currinf->Sn = N;
        if (Rtname >= 0) {
          Lcell = &Aslist(Tags(Rtname));
          if (Parm.Compiler == 0 && Level > 1 && Currinf->Jround == 0) {
            Plabel = Plabel - 1;
            Currinf->Jround = Plabel;
            if (Jrndbodies == Yes) Enterjump(15, Plabel, 0);
          }
          Rlevel = Rlevel + 1;
          Rbase = Rlevel;
        }
        Level = Level + 1;
        Currinf = &Levelinf(Level);
        Currinf = 0;
        Currinf->Rbase = Rbase;
        Currinf->Clevel = Level;
        Currinf->Names = -1;
        Currinf->Diaginf = Levelinf(Level - 1).Diaginf;
        Currinf->Display = Levelinf(Level - 1).Display;
        if (Level == Maxlevels) Fault(34, 0, 0);
        if (Level > Maxlevels) Fault(105, 0, 0);
        if (Rtname < 0) {
          if (Axname == 0) {
            Currinf->Iblkid = Internalblockid;
            Internalblockid = Internalblockid + 1;
          }
          W3 = 0;
        } else {
          W3 = Rtname + 1;
          Internalblockid = 0;
        }
        Currinf->L = Line;
        Currinf->M = W3;
        Currinf->Flag = Ptype & 0xFFFF;
        W3 = Ulconsttrip(Rthd, 0x61, Flags, Rtname, Axname);
      }
      void Rdisplay(int Kk) {
        int Tripno;
        if (Kk >= 0 || Level == 2) {
          Currinf->Psize = N - Alpha;
          if ((1 << Target & Riskmc) != 0)
            N = (N + Displayrounding) & (~Displayrounding);
          Currinf->Display = N;
          if (Displayneeded == Yes) {
            N = N + Displayc1 * Rlevel + Displayc0;
          }
          Tripno = Uconsttrip(Rdspy, 0x51, 0, Currinf->Display);
        }
        if (Parm.Trace != 0) {
          if (Kk >= 0 || Level == 2)
            if (Target == Vns)
              Currinf->Diaginf = Currinf->Psize + 8;
            else {
              Tripno = Uconsttrip(Rdarea, 0x51, 0, N);
              N = N + 4;
              if ((1 << Target & Riskmc) != 0) N = N + 4;
              Currinf->Diaginf = N;
              N = N + 4;
              if (Target == Orn || (1 << Target & Riskmc) != 0) N = N + 4;
            }
          Tripno = Uconsttrip(Rdptr, 0x51, 0, Level);
        }
        Oldline = 0;
        Setline();
        if (Kk >= 0 || Level == 2) Nmax = N;
      }
      void Cui(int Code) {
        int Pt;
        int Marker;
        int J;
        int Lname;
        int Typep;
        int Precp;
        int Alt;
        int Kk;
        Rd Opnd1;
        int Head1;
        int Bot1;
        int Nops;
        int Savepos;
        Rd Rpop;
        Listf *Lcell;
        Swdataform *Swdata;
        static int Depth;
        static int Sw_sw;
        static void *Sw[9 /*1:9*/] = {
            &&Sw_1, &&Sw_2, &&Sw_3, &&Sw_4, &&Sw_5,
            &&Sw_6, &&Sw_7, &&Sw_8, &&Sw_9,
        };
        Depth = Depth + 1;
        if (Depth == 1) {
          Savepos = Opline.Length;
          Outsym(' ');
        }
        Reportui = 0;
        Alt = A(P);
        goto *Sw[Sw_sw = (Alt)-1];
      Sw_1:;
        P = P + 1;
        Marker = P + Fromar2(P);
        if (A(Marker) == 1) {
          J = P + 2;
          P = Marker + 2;
          Assign(A(Marker + 1), J);
        } else {
          P = P + 2;
          Cname(0);
          P = P + 1;
        }
      Aui:
        J = A(P);
        P = P + 1;
        if (J == 1) {
          if (Depth == 1) Opline.L(Savepos) = '{';
          if (Opline.L(Opline.Length - 1) != '{')
            Outstring(_imp_str_literal("; "));
          Cui(Code);
          if (Depth == 1) Outstring(_imp_str_literal(";}"));
        }
        Depth = Depth - 1;
        return;
      Sw_2:;
        Currinf->Nmdecs = Currinf->Nmdecs | 1;
        if (Code == 0) Currinst = 1;
        Lname = Fromar2(P + 1);
        J = A(P + 3);
        P = P + 4;
        if (J == 2) {
          Enterjump(15, Lname, 0);
          Reportui = 1;
          Outstring(_imp_str_literal("goto "));
          Outname(Lname);
        } else {
          Copytag(Lname, No);
          if (Oldi != Level || Type != 6) {
            Fault(4, 0, Lname);
            P = P - 1;
            Skipapp();
            return;
          }
          Outsym('{');
          Outswadname(Lname);
          Outstring(_imp_str_literal("_value="));
          Csexp(Minapt);
          Outstring(_imp_str_literal("; "));
          Outswadname(Lname);
          Outstring(_imp_str_literal("_line = __LINE__"));
          Outstring(_imp_str_literal("; "));
          Outswadname(Lname);
          Outstring(_imp_str_literal("_file = __FILE__"));
          Outstring(_imp_str_literal("; goto "));
          Outswadname(Lname);
          Outstring(_imp_str_literal("_despatch;}"));
          Reportui = 1;
        }
        Depth = Depth - 1;
        return;
      Sw_3:;
        if ((Currinf->Flag & 0x3FFF) != 0x1000) Fault(30, 0, 0);
        P = P + 1;
        Outstring(_imp_str_literal("return "));
      Ret:
        Kk = Uconsttrip(Rtxit, 0x51, 0, 0);
        Reportui = 1;
        if (Code == 0) Currinst = 1;
        Depth = Depth - 1;
        return;
      Sw_4:;
        Outstring(_imp_str_literal("return "));
        Ptype = Currinf->Flag & 0x3FFF;
        Unpack();
        Pt = Ptype & 255;
        Opnd1 = 0;
        Opnd1.Ptype = Ptype;
        Opnd1.Flag = Dname;
        Opnd1.D = Currinf->M - 1;
        if (Ptype > 0x1000 && A(P + 1) != 3) {
          if (A(P + 1) == 1 && Nam != 0 && A(P + 5) == 4 && A(P + 6) == 1) {
            P = P + 7;
            Typep = Type;
            Precp = Prec;
            J = P;
            Cname(4);
            Kk = Brectrip(Mapres, Ptype & 255, 0, Opnd1, Nameopnd);
            if (A(P) != 2) Fault(81, 0, 0);
            P = P + 1;
            if (Typep != Type || Precp != Prec)
              Fault(83, Currinf->M - 1, Fromar2(J));
            goto Ret;
          }
          if (A(P + 1) == 2 && Nam == 0) {
            P = P + 2;
            if (Type == 5) {
              Cstrexp(0);
            } else if (Type == 3) {
              if (A(P + 3) != 4 || A(P + 4) != 1) goto Badres;
              P = P + 5;
              Cname(3);
              if (Type != 3) Fault(66, 0, Opnd1.D);
              Expopnd = Nameopnd;
            } else {
              if (Prec < 4) Prec = 4;
              Csexp(Prec << 4 | Type);
            }
            if (Pt == 0x31 || Pt == 0x41) {
              Kk = Urectrip(Shrtn, Pt, 0, Expopnd);
              Expopnd.Flag = Reftrip;
              Expopnd.D = Kk;
              Expopnd.Ptype = Pt;
            }
            Kk = Brectrip(Fnres, Ptype & 255, 0, Opnd1, Expopnd);
            goto Ret;
          }
        }
        P = P + 2;
      Badres:;
        Fault(31, 0, 0);
        Skipexp();
        Depth = Depth - 1;
        return;
      Sw_5:;
        Outstring(_imp_str_literal("assert(_IMP_MONITOR_)"));
        P = P + 1;
        goto Aui;
      Sw_6:;
        Outstring(_imp_str_literal("exit(0)"));
        P = P + 1;
        if (Code == 0) Currinst = 1;
        Reportui = 1;
        Depth = Depth - 1;
        return;
      Sw_7:;
        P = P + 5;
        Kk = Intexp(J, Minapt);
        if (A(P) == 1) {
          P = P + 3;
          Skipexp();
        }
        Outstring(_imp_str_literal("*** IMP signals untranslateable *****"));
        Depth = Depth - 1;
        return;
      Sw_8:;
        Outstring(_imp_str_literal(" break "));
        Reportui = 1;
        if (Code == 0) Currinst = 1;
        Depth = Depth - 1;
        return;
      Sw_9:;
        Reportui = 1;
        if (Code == 0) Currinst = 1;
        Outstring(_imp_str_literal(" continue "));
        Depth = Depth - 1;
        return;
      }
      void Cifthen(int Markiu, int Markc, int Markui, int Marke, int Markr,
                   int Afterelse) {
        int Altui;
        int Ccres;
        int Elres;
        int Thenlab;
        int Elselab;
        int Userlab;
        int Report;
        int Start;
        int Elsealt;
        int K;
        int J;
        int Cs;
        int Linetrip;
        int Ctype;
        const int Nullelse = 4;
        static int Esw_sw;
        static void *Esw[4 /*1:4*/] = {
            &&Esw_1,
            &&Esw_2,
            &&Esw_3,
            &&Esw_4,
        };
        static int Depth = 0;
        Depth = Depth + 1;
        Linetrip = -1;
        Setline();
        Linetrip = Triples(0).Blink;
        Markiu = A(Markiu);
        Plabel = Plabel - 1;
        Thenlab = Plabel;
        Start = 0;
        Cs = 0;
        if (Starsize > 100) Cs = 1;
        Elselab = 0;
        P = Markc;
        if (Markr > 0 && A(Markr) <= 2) Start = 1;
        Userlab = -1;
        if (Start != 0)
          Altui = 0;
        else
          Altui = A(Markui);
        if (Altui == 2 && A(Markui + 3) == 2) Userlab = Fromar2(Markui + 1);
        if (8 <= Altui && Altui <= 9 && Currinf->Exitlab != 0)
          if (Altui == 8)
            Userlab = Currinf->Exitlab;
          else
            Userlab = Currinf->Contlab;
        Ctype = Rlevel;
        if (Tcond != 0) Ctype = 0;
        P = Markc;
        if (Ctype == 0)
          if (Afterelse == No) {
            Outsym(Nl);
            Outstring(_imp_str_literal("#if"));
          } else
            Outstring(_imp_str_literal("if "));
        Ccres = Ccond(1, Markiu, Thenlab, 0b11 ^ Start ^ Cs);
        if (Start != 0) {
          if (Ccres == 0)
            Currinf->Nmdecs = Currinf->Nmdecs | 1;
          else if (Linetrip > 0)
            Triples(Linetrip).Opern = Nullt;
          P = Markr + 1;
          if (Ctype != 0) {
            Curlycheck(1);
            Outsym('{');
          }
          Outsym(Nl);
          Cstart(Ccres, 1);
          if (Ctype != 0) Outstring(_imp_str_literal("}"));
          if (A(P) <= 2) {
            Plabel = Plabel - 1;
            Elselab = Plabel;
          }
          Marke = P;
          Report = Lastinst;
        } else if (Ccres != 2) {
          if (Ctype == 0) Outsym(Nl);
          P = Markui;
          Cui(1);
          if (Marke != 0 && A(Marke) != Nullelse &&
              Opline.L(Opline.Length - 1) != '}')
            Outsep();
          Report = Reportui;
        } else
          Report = 1;
      Else:;
        if (Marke == 0)
          Elsealt = Nullelse;
        else
          Elsealt = A(Marke);
        if (Elsealt < Nullelse) {
          Plabel = Plabel - 1;
          Elselab = Plabel;
        }
        P = Marke + 1;
        goto *Esw[Esw_sw = (Elsealt)-1];
      Esw_1:;
        if (Ctype == 0) {
          Outsym(Nl);
          Outstring(_imp_str_literal("#else"));
          Curlycheck(1);
          Outsym(Nl);
        } else {
          Outstring(_imp_str_literal(" else {"));
          Curlycheck(1);
          Outsym(Nl);
        }
        if (Ccres == 0) Currinf->Nmdecs = Currinf->Nmdecs | 1;
        Cstart(Ccres, 2);
        if (Ctype != 0) Outstring(_imp_str_literal("}"));
        if (Ctype == 0) {
          Outsym(Nl);
          Outstring(_imp_str_literal("#endif"));
        }
        goto Enterelselab;
      Esw_2:;
        Marke = 0;
        Markui = 0;
        Markr = P + 1 + Fromar2(P + 1);
        if (A(Markr) == 3) {
          Marke = Markr + 1 + Fromar2(Markr + 1);
          Markui = Markr + 3;
        }
        J = Nexttrip;
        if (Ctype == 0) {
          Outsym(Nl);
          Outstring(_imp_str_literal("#else"));
          Outsym(Nl);
          Cifthen(P, P + 3, Markui, Marke, Markr, No);
          Outsym(Nl);
          Outstring(_imp_str_literal("#endif"));
        } else {
          Outstring(_imp_str_literal(" else "));
          Cifthen(P, P + 3, Markui, Marke, Markr, No);
          Outsym(Nl);
        }
        Report = 0;
        goto Enterelselab;
      Esw_3:;
        if (Ctype == 0) {
          Outsym(Nl);
          Outstring(_imp_str_literal("#else"));
          Outsym(Nl);
        } else
          Outstring(_imp_str_literal(" else "));
        if (Ccres != 1) {
          if (Start != 0) Setline();
          if (Thenlab == 0)
            K = 0;
          else
            K = 2;
          Cui(K);
          Report = Reportui;
          if (Ctype == 0) {
            Outsep();
            Outsym(Nl);
            Outstring(_imp_str_literal("#endif"));
          } else if (Depth > 1)
            Outsep();
        }
      Enterelselab:;
        if (Elselab > 0) Elres = Enterlab(Elselab, 0b11 | Report << 2);
        Depth = Depth - 1;
        return;
      Esw_4:;
        if (Ctype == 0) {
          if (Start == 0) Outsep();
          Outsym(Nl);
          Outstring(_imp_str_literal("#endif"));
        }
        Depth = Depth - 1;
      }
      void Cstart(int Ccres, int Code) {
        int Skipcode;
        int Finishar;
        int Oldnextp;
        int Oldline;
        if (Code == 3) {
          Outstring(_imp_str_literal("/* beginning of onevent block */"));
          Outsym(Nl);
        }
        Skipcode = No;
        if (1 <= Code && Code <= 2 && (Ccres | Code) == 3) Skipcode = Yes;
        Finishar = Fromar4(P);
        Oldline = Line;
        do {
          Oldnextp = Nextp;
          Compileastmnt();
        } while (Oldnextp >= Finishar);
        if (Code == 3) {
          Outstring(_imp_str_literal("/* end of onevent block */"));
          Outsym(Nl);
        }
        P = Finishar + 10;
        if (A(P) <= 3 && Code != 1) Fault(45 + Code, Oldline, 0);
        if (Skipcode == Yes) Lastinst = 1;
      }
      void Ccycbody(int Ua, int Elab, int Clab) {
        int Finishar;
        int Oldline;
        int Savee;
        int Savec;
        Finishar = Fromar4(P);
        if (Finishar <= P) Impabort();
        Fordpth = Fordpth + 1;
        Oldline = Line;
        Savee = Currinf->Exitlab;
        Savec = Currinf->Contlab;
        Currinf->Exitlab = Elab;
        Currinf->Contlab = Clab;
        Curlycheck(1);
        Outsym('{');
        Outsym(Nl);
        while (Nextp <= Finishar) Compileastmnt();
        Outstring(_imp_str_literal("}"));
        Currinf->Exitlab = Savee;
        Currinf->Contlab = Savec;
        P = Finishar + 10;
        Fordpth = Fordpth - 1;
        if (A(P) == 1 && Ua == 0) Fault(12, Oldline, 0);
      }
      void Cloop(int Alt, int Markc, int Markui) {
        int L1;
        int L2;
        int L3;
        int L4;
        int Ccres;
        int Elres;
        int Fline;
        int Trip;
        int Fot;
        int Pp;
        int Debj;
        int Jj;
        int Fstrip;
        int Forname;
        int Initp;
        int Stepp;
        int Finalp;
        int Repmask;
        int Forpt;
        int Forwords;
        int Forbits;
        Rd Initopnd;
        Rd Stepopnd;
        Rd Finalopnd;
        Rd Diffopnd;
        Rd Zopnd;
        Rd Opnd;
        Tripf *Currt;
        void Forexp(Rd Eopnd, int Tt, int Sh);
        static int Sw_sw;
        static void *Sw[7 /*0:6*/] = {
            &&Sw_0, &&Sw_1, &&Sw_2, &&Sw_3, &&Sw_4, &&Sw_5, &&Sw_6,
        };
        P = Markc;
        Forbits = 0;
        Sflabel = Sflabel - 2;
        L1 = Sflabel;
        L2 = L1 + 1;
        L3 = 0;
        if ((0b1100001 & 1 << Alt) != 0) {
          L3 = Sflabel - 1;
          Sflabel = L3;
        }
        if (1 <= Alt && Alt <= 3) Setline();
        goto *Sw[Sw_sw = Alt];
      Sw_0:;
        Pp = Fromar4(P) + 10;
        if (A(Pp) == 1) {
          Outstring(_imp_str_literal("do "));
          Ccycbody(1, L2, L3);
          Setline();
          Outstring(_imp_str_literal(" while "));
          P = Pp + 1;
          Ccres = Ccond(0, 2, L1, 0);
        } else {
          Outstring(_imp_str_literal("for (;;) "));
          Ccycbody(1, L2, L1);
        }
      Wayout:;
        return;
      Sw_1:;
        Outstring(_imp_str_literal("while "));
        Ccres = Ccond(0, 1, L2, 0b11);
        P = Markui;
        Cui(1);
        goto Wayout;
      Sw_2:;
        P = Markui;
        Outstring(_imp_str_literal("do "));
        Cui(1);
        P = Markc;
        Outsep();
        Outstring(_imp_str_literal(" while "));
        Ccres = Ccond(0, 2, L1, 0);
        goto Wayout;
      Sw_6:;
      Sw_3:;
        Forcnt = Forcnt + 1;
        Forname = Fromar2(P);
        Initp = P + 2;
        Copytag(Forname, Yes);
        if ((Type != 7 && Type != 1) || 4 > Prec || Prec > 5 || Rout != 0 ||
            0 != Arr || Litl == 1) {
          Fault(91, 0, Forname);
          Ptype = 0x51;
        }
        Fot = Dname;
        if (Nam != 0) Fot = Indname;
        Forpt = Ptype & 255;
        P = Initp;
        Skipexp();
        Stepp = P;
        Skipexp();
        Finalp = P;
        P = Stepp;
        Forexp(Stepopnd, 1, 1);
        Outstring(_imp_str_literal(" for ("));
        if (Fot == Indname) Outsym('*');
        Outname(Forname);
        Outsym('=');
        P = Initp;
        Csexp(Forpt);
        Outsep();
        Outsym(' ');
        if (Fot == Indname) Outsym('*');
        Outname(Forname);
        if (Stepopnd.Flag <= 1) {
          if (Stepopnd.D == 0) Fault(92, 0, 0);
          if (Stepopnd.D < 0)
            Outstring(_imp_str_literal(">="));
          else
            Outstring(_imp_str_literal("<="));
        } else {
          Outstring(_imp_str_literal("<="));
          Warn(10, 0);
        }
        P = Finalp;
        Csexp(Forpt);
        Outsep();
        Outsym(' ');
        if (Fot == Indname) Outsym('*');
        Outname(Forname);
        if (Stepopnd.Flag <= 1 && Imod(Stepopnd.D) == 1)
          if (Stepopnd.D < 0)
            Outstring(_imp_str_literal("--"));
          else
            Outstring(_imp_str_literal("++"));
        else {
          Outstring(_imp_str_literal("+="));
          P = Stepp;
          Csexp(Forpt);
        }
        Outstring(_imp_str_literal(") "));
        P = Markui;
        if (Alt == 3)
          Cui(0);
        else
          Ccycbody(0, L2, L3);
        goto Wayout;
      Sw_4:;
        Setline();
        Outstring(_imp_str_literal("while "));
        Ccres = Ccond(0, 1, L2, 2);
        Ccycbody(0, L2, L1);
        goto Wayout;
      Sw_5:;
        P = Markui;
        Fline = Line;
        Outstring(_imp_str_literal("do "));
        Ccycbody(0, L2, L3);
        P = Markc;
        Line = Fline;
        Setline();
        Outsep();
        Outstring(_imp_str_literal(" while "));
        Ccres = Ccond(0, 2, L1, 0);
        goto Wayout;
        void Forexp(Rd Eopnd, int Totemp, int Shift) {
          int Inp;
          int Val;
          int Subbits;
          int Exphead;
          int Expbot;
          int Nops;
          Exphead = 0;
          Expbot = 0;
          Nops = 0;
          Inp = P;
          P = P + 3;
          Torp(Exphead, Expbot, Nops, 1);
          if ((Nops >> 16 & 7) == 0) {
            Expop(Exphead, Expbot, Nops, 0x200 + Forpt);
            Eopnd = Expopnd;
          } else
            Eopnd.Flag = 255;
        }
      }
      void Assign(int Assop, int P1) {
        int Q;
        int Kk;
        int Typep;
        int Precp;
        int Ptypep;
        int Jjj;
        int P2;
        int Jj;
        int B;
        int D;
        int Head2;
        int Bot2;
        int Accp;
        int Ii;
        int Head1;
        int Nops;
        int Tpcell;
        int Lvl;
        int Bot1;
        int Lhname;
        int Rhname;
        int A1;
        int A2;
        Listf *Lhcell;
        Rd Opnd1;
        Rd Opnd2;
        static int Sw_sw;
        static void *Sw[5 /*0:4*/] = {
            &&Sw_default, &&Sw_1, &&Sw_2, &&Sw_3, &&Sw_4,
        };
        P2 = P;
        Lhname = A(P1) << 8 | A(P1 + 1);
        Lhcell = &Aslist(Tags(Lhname));
        P = P1;
        Reducetag(No);
        Ptypep = Ptype;
        Jj = J;
        Kk = K;
        Ii = I;
        Lvl = Oldi;
        Tpcell = Tcell;
        Accp = Acc;
        P = P2;
        Typep = Type;
        Precp = Prec;
        goto *Sw[Sw_sw = Assop];
      Sw_2:;
      Sw_3:;
        if (Type == 3) goto Recop;
        if (Type != 2 && Type != 5) Type = 1;
        if (Type == 5) goto St;
      Back:
        Head1 = 0;
        Bot1 = 0;
        Head2 = 0;
        Bot2 = 0;
        if (Type != 2) Type = 1;
        Typep = Type;
        Nops = (1 << 18) + 1;
        Ptype = Ptypep;
        Unpack();
        if (Lhsaddrfirst == No ||
            (Nam == 0 && 0 == Arr && A(P1 + 2) == 2 && 2 == A(P1 + 3))) {
          Opnd1 = 0;
          Opnd1.Ptype = Ptype;
          Opnd1.Flag = Arname;
          Binsert(Head1, Bot1, Opnd1.S1, P1, Lhname);
        } else {
          P = P1;
          Cname(3);
          Binsert(Head1, Bot1, Nameopnd.S1, Nameopnd.D, Nameopnd.Xtra);
        }
        P = P2 + 3;
        Torp(Head2, Bot2, Nops, 0);
        Opnd2 = 0;
        Opnd2.Flag = Vass + Assop - 2;
        Binsert(Head2, Bot2, Opnd2.S1, Lhname << 16 | Ptypep, 0);
        Aslist(Bot1).Link = Head2;
        Head2 = 0;
        Bot1 = Bot2;
        if (Parm.Z != 0) Printlist(Head1);
        Expop(Head1, Bot1, Nops, 256 + (Precp << 4) + Typep);
        Tripopt(Triples, Triples(0).Flink);
        Outopnd(Expopnd, 0);
        return;
      St:;
        P = P1;
        if (Assop == 3) {
          Outstring(_imp_str_literal("imp_strjam("));
          if (Nam != 0) Warn(10, 0);
        } else
          Outstring(_imp_str_literal("strcpy("));
        Cname(2);
        Outsym(',');
        P = P2;
        Cstrexp(0);
        if (Assop == 3) {
          Outsym(',');
          Outint(Accp - 1);
        }
        Outsym(')');
        return;
      Recop:;
        Q = Tsexp(Jjj);
        if (Q == 1 && Jjj == 0) {
          Outstring(_imp_str_literal("memset("));
          P = P1;
          Cname(3);
          Outstring(_imp_str_literal(",0,"));
          Opnd1 = Nameopnd;
          Opnd2 = 0;
          Opnd2.Ptype = 0x51;
          Opnd2.Flag = Sconst;
          Outstring(_imp_str_literal("sizeof( "));
          P = P1;
          Reducetag(No);
          Outformatname(Kform);
          Outsym(')');
          Outsym(')');
          P = P2;
          Skipexp();
          return;
        }
        if (Assop == 3) {
          if (Type != 3 || A(P2 + 3) != 4 || A(P2 + 4) != 1) goto Back;
          Outstring(_imp_str_literal("memcpy("));
          P = P1;
          Cname(3);
          Outsym(',');
          Opnd1 = Nameopnd;
          Accp = Acc;
          P = P2 + 5;
          Cname(3);
          Outsym(',');
          Opnd2 = Nameopnd;
          if (A(P) != 2) {
            Fault(66, 0, Lhname);
            goto F00;
          }
          if (Accp > Acc) Accp = Acc;
          Outstring(_imp_str_literal("sizeof( "));
          P = P1;
          Reducetag(No);
          Outformatname(Kform);
          Outsym(')');
          Outsym(')');
          P = P2;
          Skipexp();
          return;
        }
        P = P1;
        Cname(7);
        Outstring(_imp_str_literal("="));
        P = P2 + 5;
        Cname(7);
        P = P2;
        Skipexp();
        return;
      Sw_4:;
        Outstring(_imp_str_literal("imp_resolve("));
        P = P1;
        Cname(2);
        Outsym(',');
        P = P2;
        if (Type == 5)
          Cres(0);
        else {
          Skipexp();
          if (Type != 7) Fault(71, 0, Lhname);
        }
        Outsym(')');
        return;
      Sw_1:;
        if (A(P2 + 3) != 4 || A(P2 + 4) != 1) goto F81;
        if (Nam != 1 || Litl == 1) {
          Fault(82, 0, Lhname);
          goto F00;
        }
        Lhformatname = Kform;
        if (Arr == 1) {
          Jj = 11;
          Kk = 12;
          Ii = Ahass;
          B = Aheadpt;
        } else {
          Jj = 6;
          Kk = 3;
          Ii = Ptras;
          B = 0x51;
          if (Ptrsize(Ptype & 255) > 4) B = 0x61;
        }
        P = P1;
        Cname(Jj);
        Outsym('=');
        P = P2 + 5;
        Rhname = A(P) << 8 | A(P + 1);
        if (Typep == 3) {
          Reducetag(No);
          if (Kform != Lhformatname) {
            Outsym('(');
            Outformatname(Lhformatname);
            Outstring(_imp_str_literal("*)"));
          }
        }
        Cname(Kk);
        if (Kk == 12) {
          if ((Lhcell->Uioj & 15) == 0) Lhcell->Uioj = Lhcell->Uioj | (J & 15);
          if (Lhcell->Sndisp == 0) Lhcell->Sndisp = Sndisp;
        }
        if (A(P) != 2) goto F81;
        P = P + 1;
        return;
      F83:
        Fault(83, Lhname, Rhname);
        goto F00;
      F86:
        Fault(86, Lhname, Rhname);
        goto F00;
      F81:
        Fault(81, 0, Lhname);
      F00:;
        P = P2;
        Skipexp();
        goto Sw_skip;
      Sw_default:
        fprintf(stderr, "Switch label 'Sw(%d):' not set in %s", Sw_sw,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      Sw_skip:;
      }
      void Outopnd(Rd Opnd, int Mode) {
        int I;
        int Pp;
        double R;
        static int Sw_sw;
        static void *Sw[10 /*0:9*/] = {
            &&Sw_0,       &&Sw_1,       &&Sw_2,       &&Sw_3, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_8, &&Sw_default,
        };
        if ((Mode & 1) == 1) Outsym('(');
        goto *Sw[Sw_sw = Opnd.Flag];
      Sw_0:;
      Sw_1:;
        if ((Opnd.Ptype & 7) == 1)
          if ((Opnd.Ptype & 0xf0) == 0x60)
            Outlhex(Opnd.D, Opnd.Xtra);
          else if ((Opnd.Ptype & 8) != 0 && Doinglabel == 0)
            if ((Opnd.Ptype >> 4 & 7) == 3) {
              Outsym('\'');
              if (Opnd.D == '\\' || Opnd.D == '\'') Outsym('\\');
              Outsym(Opnd.D);
              Outsym('\'');
            } else
              Outhex(Opnd.D);
          else
            Outint(Opnd.D);
        if (Opnd.Ptype == 0x52) Outfl(Opnd.R, 7);
        if (Opnd.Ptype == 0x62) {
          Integer(Addr(R)) = Opnd.D;
          Integer(Addr(R) + 4) = Opnd.Xtra;
          Outfl(R, 15);
        }
        if (Opnd.Ptype == 0x72)
          Outstring(_imp_str_literal("NAN or unrepresentable value"));
        if (Opnd.Ptype == 0x35) {
          Outsym('"');
          Outstring(*String(Addr(A(Opnd.D))));
          Outsym('"');
        }
      Wayout:;
        if ((Mode & 1) == 1) Outsym(')');
        return;
      Sw_2:;
        Outname(Opnd.D);
        goto Wayout;
      Sw_3:;
        Pp = P;
        P = Opnd.D;
        if ((Mode & 2) != 0)
          Cname(1);
        else
          Cname(2);
        P = Pp;
        goto Wayout;
      Sw_8:;
        Outtriple(Opnd.D, Mode & 0xff00);
        goto Wayout;
        goto Sw_skip;
      Sw_default:
        fprintf(stderr, "Switch label 'Sw(%d):' not set in %s", Sw_sw,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      Sw_skip:;
      }
      void Outtriple(int Tripno, int Mode) {
        Tripf *Trip;
        const _imp_string255 Rsassop[8 /*128:135*/] = {
            _imp_str_literal("+="), _imp_str_literal("-="),
            _imp_str_literal("^="), _imp_str_literal("|="),
            _imp_str_literal("*="), [5 ... 6] = _imp_str_literal("/="),
            _imp_str_literal("&=")};
        _imp_string255 Op;
        _imp_string255 Opl;
        int Case;
        int I;
        int J;
        static int Sw_sw;
        static void *Sw[193 /*0:192*/] = {
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_10,      &&Sw_11,
            &&Sw_12,      &&Sw_default, &&Sw_14,      &&Sw_15,
            &&Sw_16,      &&Sw_default, &&Sw_18,      &&Sw_19,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_128,     &&Sw_129,     &&Sw_130,     &&Sw_131,
            &&Sw_132,     &&Sw_133,     &&Sw_134,     &&Sw_135,
            &&Sw_136,     &&Sw_137,     &&Sw_138,     &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_143,
            &&Sw_144,     &&Sw_145,     &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_default,
            &&Sw_default, &&Sw_default, &&Sw_default, &&Sw_191,
            &&Sw_default,
        };
        Trip = &Triples(Tripno);
        if (Mode == 1 && Doinglabel == 0) Outsym('(');
        Case = Trip->Opern;
        goto *Sw[Sw_sw = Case];
      Sw_128:;
        Op = _imp_str_literal("+");
        Opl = _imp_str_literal("plus");
      Binop:;
        Outopnd(Trip->Opnd1, Mode & 0xff00 | Trip->Opnd1.Flag >> 3 & 1);
        if (Doinglabel != 0)
          Outstring(Opl);
        else
          Outstring(Op);
        Outopnd(Trip->Opnd2, Mode & 0xff00 | Trip->Opnd2.Flag >> 3 & 1);
      Wayout:;
        if (Mode == 1 && Doinglabel == 0) Outsym(')');
        return;
      Sw_129:
        Op = _imp_str_literal("-");
        Opl = _imp_str_literal("minus");
        goto Binop;
      Sw_130:
        Op = _imp_str_literal("^");
        Opl = _imp_str_literal("non");
        goto Binop;
      Sw_131:
        Op = _imp_str_literal("|");
        Opl = _imp_str_literal("or");
        goto Binop;
      Sw_132:
        Op = _imp_str_literal("*");
        Opl = _imp_str_literal("mul");
        goto Binop;
      Sw_133:
        Op = _imp_str_literal(" / ");
        Opl = _imp_str_literal("idiv");
        goto Binop;
      Sw_134:
        Op = _imp_str_literal(" / ");
        Opl = _imp_str_literal("div");
        goto Binop;
      Sw_135:
        Op = _imp_str_literal("&");
        Opl = _imp_str_literal("and");
        goto Binop;
      Sw_136:
        Op = _imp_str_literal(">>");
        Opl = _imp_str_literal("rsh");
        if (Doinglabel == 0)
          if ((Trip->Opnd1.Ptype & 0xff) == 0x61)
            Outstring(_imp_str_literal("(UINT64)"));
          else
            Outstring(_imp_str_literal("(unsigned)"));
        goto Binop;
      Sw_137:
        Op = _imp_str_literal("<<");
        Opl = _imp_str_literal("lsh");
        goto Binop;
      Sw_145:;
        Outstring(_imp_str_literal("(int)"));
      Sw_138:;
        Outstring(_imp_str_literal("pow("));
        Outopnd(Trip->Opnd1, Mode & 0xff00);
        Outstring(_imp_str_literal(","));
        Outopnd(Trip->Opnd2, Mode & 0xff00);
        Outstring(_imp_str_literal(")"));
        goto Wayout;
      Sw_191:;
        if (Add <= Trip->X1 && Trip->X1 <= Sub && 0 <= Trip->Opnd2.Flag &&
            Trip->Opnd2.Flag <= 1 && Trip->Opnd2.D == 1 &&
            (Trip->Opnd1.Ptype & 0xff00) == 0) {
          Outopnd(Trip->Opnd1, Mode & 0xff00);
          if (Trip->X1 == Add)
            Outstring(_imp_str_literal("++"));
          else
            Outstring(_imp_str_literal("--"));
          goto Wayout;
        }
        Op = Rsassop(Trip->X1);
        goto Assop;
      Sw_143:
      Sw_144:;
        Op = _imp_str_literal("=");
      Assop:;
        Outopnd(Trip->Opnd1, Mode & 0xff00 | 2);
        Outstring(Op);
        Outopnd(Trip->Opnd2, Mode & 0xff00 | 0);
        goto Wayout;
      Sw_10:
        Op = _imp_str_literal("~");
        Opl = _imp_str_literal("not");
      Unaryop:;
        if (Doinglabel != 0)
          Outstring(Opl);
        else
          Outstring(Op);
        Outopnd(Trip->Opnd1, Mode & 0xff00 | Trip->Opnd1.Flag >> 3 & 1);
        goto Wayout;
      Sw_11:;
        Op = _imp_str_literal("-");
        Opl = _imp_str_literal("uminus");
        goto Unaryop;
      Sw_12:;
        if (Trip->Opnd1.Flag == Sconst) {
          Trip->Opnd1.Ptype = 0x62;
          {
            double X;
            X = Trip->Opnd1.D;
            Trip->Opnd1.D = *Integer(Addr(X));
            Trip->Opnd1.Xtra = *Integer(Addr(X) + 4);
          }
          Op = _imp_str_literal("");
          goto Unaryop;
        }
        Op = _imp_str_literal("(double)");
        goto Unaryop;
      Sw_14:
      Sw_15:
      Sw_16:
      Sw_18:
      Sw_19:;
        Outopnd(Trip->Opnd1, Mode & 0xff00 | 0);
        goto Sw_skip;
      Sw_default:
        fprintf(stderr, "Switch label 'Sw(%d):' not set in %s", Sw_sw,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      Sw_skip:;
      }
      void Csexp(int Mode) {
        int Exphead;
        int Nops;
        int Expbot;
        int Form;
        Exphead = 0;
        Expbot = 0;
        Nops = 0;
        Form = 0;
        P = P + 3;
        if (A(P) == 4 && A(P + 1) == 3) Form = 1;
        Torp(Exphead, Expbot, Nops, 0);
        Expop(Exphead, Expbot, Nops, Mode & 0xffff);
        Outopnd(Expopnd, Form | Mode >> 16);
      }
      void Labexp(void) {
        Doinglabel = 1;
        Csexp(0x51);
        Doinglabel = 0;
      }
      int Constexp(int Prectype) {
        int Exphead;
        int Expbot;
        int Nops;
        int Res;
        Exphead = 0;
        Expbot = 0;
        Nops = 0;
        Res = 0;
        Torp(Exphead, Expbot, Nops, 1);
        Expop(Exphead, Expbot, Nops, 0x200 + Prectype);
        if (Expopnd.Flag > 1) goto Wayout;
        Res = Addr(Expopnd.D);
      Wayout:;
        return (Res);
      }
      int Intexp(int Value, int Prectype) {
        int Exphead;
        int Expbot;
        int Nops;
        int Code;
        int Sptype;
        int Sacc;
        Exphead = 0;
        Expbot = 0;
        Nops = 0;
        Code = 0;
        Sptype = Ptype;
        Sacc = Acc;
        Torp(Exphead, Expbot, Nops, 1);
        Expop(Exphead, Expbot, Nops, 0x200 + Prectype);
        if (Expopnd.Flag > 1 || (Expopnd.Ptype & 0x77) != Prectype) Code = 1;
        Value = Expopnd.D;
        Acc = Sacc;
        Ptype = Sptype;
        Unpack();
        return (Code);
      }
      void Torp(int Head, int Bot, int Nops, int Mode) {
        static int Operand_sw;
        static void *Operand[3 /*1:3*/] = {
            &&Operand_1,
            &&Operand_2,
            &&Operand_3,
        };
        const unsigned char Precedence[21 /*0:20*/] = {
            0, 3, 3, 4, 5, 5, 4, 3, 3, 4, 4, 5, 5, 3, 5, 5, [16 ... 18] = 0,
            3, 5};
        const unsigned char Opval[21 /*0:20*/] = {0,
                                                  128,
                                                  129,
                                                  135,
                                                  145,
                                                  138,
                                                  132,
                                                  130,
                                                  131,
                                                  133,
                                                  134,
                                                  136,
                                                  137,
                                                  128,
                                                  145,
                                                  138,
                                                  [16 ... 18] = 0,
                                                  11,
                                                  10};
        int Rphead;
        int Passhead;
        int Savehead;
        int Real;
        int Realop;
        int Operator;
        int Opprec;
        int Opnd;
        int C;
        int D;
        int E;
        int Bdisp;
        int Opname;
        int Opmask;
        int Rpbot;
        int Opstk;
        int Oppstk;
        int Passbot;
        int Pin;
        Tagf *Lcell;
        Rd Rpop;
        Passhead = 0;
        Rphead = 0;
        Savehead = 0;
        Real = 0;
        Realop = 0;
        Bdisp = 0;
        Rpbot = 0;
        Opstk = 0;
        Oppstk = 0;
        Pin = P;
        C = A(P);
        if (2 <= C && C <= 3) {
          Nops = Nops + 1;
          Opstk = C + 17;
          Oppstk = Precedence(Opstk);
          Opmask = 1 << (19 + C);
        } else
          Opmask = 0;
      Nextopnd:
        Opnd = A(P + 1);
        P = P + 2;
        Rpop = 0;
        goto *Operand[Operand_sw = (Opnd)-1];
      Operand_1:;
        Opname = (A(P) << 8) + A(P + 1);
        Lcell = &Aslist(Tags(Opname));
        Lcell->Uioj = Lcell->Uioj | 0x8000;
        Ptype = Lcell->Ptype;
        Type = Ptype & 7;
        Prec = Ptype >> 4 & 15;
        if (Ptype == 0xFFFF) Ptype = 0x51;
        if (Ptype == Snpt) {
          Ptype = Lcell->Acc;
          Unpack();
        }
        if ((Mode != 0 || *String(Addr(Worka.Lett(Word(Opname)))) ==
                              _imp_str_literal("pi")) &&
            (Ptype & 0xFF00) == 0x4000 && A(P + 2) == 2 && 2 == A(P + 3) &&
            1 <= Type && Type <= 2) {
          Rpop.D = Lcell->S2;
          Rpop.Xtra = Lcell->S3;
          Rpop.Flag = 1;
          Ptype = Ptype & 255;
          if (Type == 1 && Prec <= 5 && 0xFFFF8000 < Rpop.D &&
              Rpop.D <= 0x7FFF) {
            Rpop.Flag = 0;
            Ptype = Minapt;
          }
          if (Type == 2) Real = 1;
          P = P + 2;
          goto Sknam;
        }
        Rpop.Xtra = Opname;
        Rpop.Flag = Arname;
        Rpop.D = P;
        if (Ptype == 0x57) Ptype = 0x51;
        if (Type == 3) {
          D = P;
          Kform = Lcell->Kform;
          C = Copyrecordtag(E);
          P = D;
        }
        if (Type == 5) {
          Fault(76, 0, Opname);
          Rpop.Flag = 0;
          Ptype = 0x51;
        }
        if (Prec >= 6) Opmask = Opmask | 1 << 17;
        if (Type == 2) Real = 1;
        P = P + 2;
      Sknam:
        if (A(P) == 2)
          P = P + 1;
        else
          Skipapp();
        if (A(P) == 1) {
          P = P + 3;
          goto Sknam;
        }
        P = P + 2;
      Ins:
        if (Rpop.Flag == Arname) Opmask = Opmask | 1 << 18;
        if ((Ptype >> 4 & 15) > 5) Opmask = Opmask | 1 << 17;
        if (3 <= (Ptype & 7) && (Ptype & 7) <= 7) Ptype = 0x51;
        Rpop.Ptype = Ptype;
        Binsert(Rphead, Rpbot, Rpop.S1, Rpop.D, Rpop.Xtra);
        goto Op;
      Operand_2:;
        Ptype = A(P);
        D = Ptype >> 4;
        C = Ptype & 7;
        if ((Ptype == 0x61 && (1 << Target & Lintavail) == 0) ||
            (D == 7 && C == 2 && (1 << Target & Llrealavail) == 0))
          Fault(99, 0, 0);
        if (D >= 6) Opmask = Opmask | 1 << 17;
        if (D == 4 || D == 3) {
          D = 4;
          Rpop.D = Fromar2(P + 1);
        } else
          Rpop.D = Fromar4(P + 1);
        if (C == 2) Real = 1;
        Rpop.Flag = 1;
        if (D == 6) Rpop.Xtra = Fromar4(P + 5);
        if (C == 5) {
          Fault(77, 0, 0);
          Rpop.D = 1;
          Rpop.Flag = 0;
          P = P + A(P + 1) + 3;
          Ptype = 0x51;
        } else {
          if (D == 7) {
            Rpop.Xtra = Rpop.D;
            Rpop.D = P + 1;
          }
          if (Ptype == 0x51 && 0xFFFF8000 <= Rpop.D && Rpop.D <= 0x7FFF) {
            Rpop.Flag = 0;
            Ptype = Minapt;
          }
          P = P + 2 + Bytes(D);
        }
        goto Ins;
      Operand_3:;
        Passhead = 0;
        Passbot = 0;
        P = P + 3;
        Torp(Passhead, Passbot, Nops, Mode);
        if (Type == 2) Real = 1;
        if (Rpbot == 0)
          Rphead = Passhead;
        else
          Aslist(Rpbot).Link = Passhead;
        Rpbot = Passbot;
        P = P + 1;
      Op:;
        Rpop = 0;
        if (A(P - 1) == 2) goto Eoe;
        Operator = A(P);
        if (Operator == Concop) Fault(78, 0, 0);
        Opprec = Precedence(Operator);
        C = Opval(Operator);
        if (C == Realdiv || C == Rexp) Real = 1;
        Nops = Nops + 1;
        while (Opprec <= (Oppstk & 31)) {
          Rpop.Flag = Opval(Opstk & 31);
          Binsert(Rphead, Rpbot, Rpop.S1, 0, 0);
          Opstk = Opstk >> 5;
          Oppstk = Oppstk >> 5;
        }
        Opstk = Opstk << 5 | Operator;
        Oppstk = Oppstk << 5 | Opprec;
        goto Nextopnd;
      Eoe:;
        while (Opstk != 0) {
          Rpop.Flag = Opval(Opstk & 31);
          Binsert(Rphead, Rpbot, Rpop.S1, 0, 0);
          Opstk = Opstk >> 5;
        }
        Ptype = Real + 1;
        Type = Ptype;
        if (Head == 0)
          Bot = Rpbot;
        else
          Aslist(Rpbot).Link = Head;
        Head = Rphead;
        Nops = Nops | Opmask;
      }
      void Expop(int Head, int Bot, int Nops, int Mode) {
        void Pseval(void);
        int Operand[3 /*0:2*/];
        Listf *List;
        Rd *Opnd1;
        Rd *Opnd2;
        Rd *Opnd;
        Tripf *Currt;
        int C;
        int D;
        int Kk;
        int Jj;
        int Comm;
        int Xtra;
        int Inhead;
        int Currtrip;
        int Stptr;
        int Constform;
        int Condform;
        int Savep;
        int Inittrip;
        const unsigned short Corules[21 /*0:20*/] = {
            0x1FF, 0xFF, 0x1F1, 0x1F1, 0x1FF, 0xF1,  0xF2,
            0x1F1, 0x71, 0x71,  0x43,  0x1FF, 0xFF,  0x21,
            0x1F1, 0x14, 0x54,  0x71,  0x01,  0x001, 0x100};
        const int Ptypech[20 /*0:19*/] = {
            [0 ... 11] = 0, 0x11, 0, -16, 0x10, -16, [17 ... 19] = 0};
        Stptr = 0;
        Constform = Mode & 512;
        Inittrip = Nexttrip;
        Condform = Mode & 256;
        Savep = P;
        Inhead = Head;
        Pseval();
      Next:
        List = &Aslist(Inhead);
        Xtra = List->S2;
        Jj = List->Flag;
        D = Inhead;
        Inhead = List->Link;
        if (Jj >= 10) goto Operator;
        Opnd1 = &Aslist(D);
        Stk(Stptr) = D;
        Stptr = Stptr + 1;
        if (Stptr > 99) Impabort();
      Anymore:;
        if (Inhead != 0) goto Next;
        Opnd1 = &Aslist(Stk(Stptr - 1));
        Expopnd = *Opnd1;
        goto Finish;
      Operator:;
        if (Jj < 128)
          Kk = 1;
        else
          Kk = 2;
        for (Kk = Kk; Kk >= 1; Kk--) {
          Stptr = Stptr - 1;
          Operand(Kk) = Stk(Stptr);
        }
        Comm = 1;
        Opnd1 = &Aslist(Operand(1));
        if (Jj >= 128) {
          Opnd2 = &Aslist(Operand(2));
        } else
          Opnd2 = Record(0);
        if (Jj < 128)
          C = 0;
        else
          C = Corules(Jj - 128);
        if (Jj == Vass || Jj == Vjass)
          Kk = 1;
        else
          Kk = 2;
        if (Constform != 0 && Opnd1->Flag < 2 && (Jj < 128 || Opnd2->Flag < 2))
          Ctop(Jj, Mask, Xtra, *Opnd1, *Opnd2);
        if (Jj != 0) {
          Currtrip = Newtrip;
          Currt = &Triples(Currtrip);
          Currt->Dpth = 0;
          Currt->Cnt = 0;
          Currt->Flags = 1 | (C >> 1 & 128);
          Currt->Opern = Jj;
          Currt->Optype = Opnd1->Ptype;
          if (12 <= Jj && Jj <= 16) {
            Currt->Optype = Xtra;
            Xtra = 0;
          } else if ((Opnd1->Ptype & 7) == 1 && (Opnd1->Ptype & 255) < Minapt)
            Currt->Optype = Minapt;
          if ((Target == Perq || Target == Accent || Target == Pnx) &&
              Jj == 39 && Xtra >> 20 == 1)
            Currt->Flags = Currt->Flags | Dontopt;
          Currt->X1 = Xtra;
          Currt->Opnd1 = *Opnd1;
          if ((1 << Opnd1->Flag & Btrefmask) != 0) Keepusecount(*Opnd1);
          if (Jj >= 128) {
            Currt->Opnd2 = *Opnd2;
            if ((1 << Opnd2->Flag & Btrefmask) != 0) Keepusecount(*Opnd2);
          }
          Opnd1->Flag = 8;
          Opnd1->Ptype = Currt->Optype;
          Opnd1->D = Currtrip;
        }
        Stk(Stptr) = Operand(Comm);
        Stptr = Stptr + 1;
        goto Anymore;
      Finish:;
        Ptype = Expopnd.Ptype;
        Type = Ptype & 7;
        Prec = Ptype >> 4;
        P = Savep;
        Aslist(Bot).Link = Asl;
        Asl = Head;
        Head = 0;
        Bot = 0;
        return;
        void Pseval(void) {
          void Amend(Rd Opnd, int Op);
          void Coercet(int Rules);
          void Coercep(int Rules);
          int Tmphead;
          int Inhead;
          int C;
          int Jj;
          int Next;
          Rd *Opnd1;
          Rd Opnd2;
          Rd Rpop;
          Listf *Cell;
          if (Aslist(Bot).Link != 0) {
            Printlist(Head);
            Impabort();
          }
          Rpop = 0;
          Tmphead = 0;
          Inhead = Head;
          while (Inhead != 0) {
            Cell = &Aslist(Inhead);
            Next = Cell->Link;
            Rpop = *Cell;
            Jj = Rpop.Flag;
            if (Jj < 10)
              Push(Tmphead, Rpop.S1, Rpop.D, Inhead);
            else {
              if (Jj >= 128) {
                Pop(Tmphead, Opnd2.S1, Opnd2.D, Opnd2.Xtra);
                Opnd1 = &Aslist(Tmphead);
                C = Corules(Jj - 128);
                if (Jj == Rexp && (Opnd2.Ptype & 7) == 2) C = 0xF2;
                if ((C & 15) != 0) Coercet(C & 15);
                if ((C >> 4 & 15) != 0) Coercep(C >> 4 & 15);
              } else {
                Opnd1 = &Aslist(Tmphead);
                if (Jj == Modulus) {
                  if ((Opnd1->Ptype & 7) == 1 && (Rpop.D & 7) == 2) Coercet(3);
                  if ((Opnd1->Ptype >> 4 & 15) < (Rpop.D >> 4 & 15))
                    Amend(*Opnd1, Lngthn);
                  if ((Opnd1->Ptype >> 4 & 15) > (Rpop.D >> 4 & 15))
                    Amend(*Opnd1, Shrtn);
                } else if (Jj < 19)
                  Opnd1->Ptype = Opnd1->Ptype + Ptypech(Jj);
              }
              Opnd1->Xtra = Inhead;
            }
            Inhead = Next;
          }
          Pop(Tmphead, Opnd2.S1, Opnd2.D, Opnd2.Xtra);
          if (Tmphead != 0) {
            Printlist(Head);
            Impabort();
          }
          if (Condform == 0) {
            if ((Mode & 7) == 1 && (Opnd2.Ptype & 7) == 2) Fault(25, 0, 0);
            if ((Opnd2.Ptype & 7) == 1 && (Mode & 7) == 2) Amend(Opnd2, Ifloat);
            C = Mode >> 4 & 15;
            while (C < (Opnd2.Ptype >> 4 & 15)) Amend(Opnd2, Shrtn);
            while (C > (Opnd2.Ptype >> 4 & 15)) Amend(Opnd2, Lngthn);
          }
          if (Parm.Dcomp != 0 && Parm.Z != 0) Printlist(Head);
          while (Aslist(Bot).Link != 0) Bot = Aslist(Bot).Link;
          return;
          void Amend(Rd Opnd, int Op) {
            Rd Rpop;
            if ((1 << Target & Emachine) == 0 && Op == Lngthn &&
                (Opnd.Ptype & 255) < Minapt) {
              Opnd.Ptype = Opnd.Ptype & 0xFF00 | Minapt;
              return;
            }
            Rpop = 0;
            Rpop.Flag = Op;
            if (Op == Ifloat && (Opnd.Ptype & 255) < Minapt)
              Opnd.Ptype = Minapt;
            Opnd.Ptype = Opnd.Ptype + Ptypech(Op);
            if ((1 << Target & Llrealavail) == 0 && Op == Ifloat &&
                (Opnd.Ptype & 255) == 0x72)
              Opnd.Ptype = Opnd.Ptype - 0x10;
            Insertafter(Opnd.Xtra, Rpop.S1, Opnd.Ptype, 0);
            Nops = Nops + 1;
          }
          void Coercet(int Rules) {
            int Pt1;
            int Pt2;
            Rd Rpop;
            Rpop = 0;
            Rpop.Flag = 12;
            Pt1 = Opnd1->Ptype & 7;
            Pt2 = Opnd2.Ptype & 7;
            if (Pt2 == 7) Pt2 = 1;
            if (Rules == 4) Pt1 = Cell->S2 & 7;
            if (Pt1 == 7) Pt1 = 1;
            if ((Rules == 1 || Rules == 15 || Rules == 4) && Pt1 == 1 &&
                1 == Pt2)
              return;
            if (Rules == 1 || (Rules == 4 && Pt1 == 1)) {
              Fault(24, 0, 0);
              return;
            }
            if (Pt1 == 1) Amend(*Opnd1, Ifloat);
            if (Pt2 == 1 && (Rules == 2 || Rules == 4 || Rules == 15))
              Amend(Opnd2, Ifloat);
          }
          void Coercep(int Rules) {
            int Prec1;
            int Prec2;
            int Tprec;
            int Oper;
            Rd *Opnd;
            Rd Rpop;
            Rpop = 0;
            if (Rules == 6) {
              Coercep(4);
              Rules = 2;
            }
            Prec1 = Opnd1->Ptype >> 4 & 15;
            Prec2 = Opnd2.Ptype >> 4 & 15;
            if (Rules == 5 || Rules == 1) {
              Prec1 = Cell->S2 >> 4 & 15;
              if (Prec2 > Prec1) {
                do {
                  if (Rules == 1)
                    Oper = Shrtn;
                  else
                    Oper = Jamshrtn;
                  Amend(Opnd2, Oper);
                  Prec2 = Prec2 - 1;
                } while (Prec1 == Prec2);
                return;
              } else
                Rules = 1;
            }
            if (Prec1 < Minaprec) {
              Prec1 = Minaprec;
              Opnd1->Ptype = Opnd1->Ptype & 0xFF0F | (Minaprec << 4);
            }
            if (Prec2 < Minaprec) {
              Prec2 = Minaprec;
              Opnd2.Ptype = Opnd2.Ptype & 0xFF0F | (Minaprec << 4);
            }
            if (Rules == 7) {
              Rules = 4;
              if (Prec1 == 4) {
                Amend(*Opnd1, Lngthn);
                Prec1 = 5;
              }
            }
            if (2 <= Rules && Rules <= 4) {
              if (Rules <= 2)
                Opnd = Opnd1;
              else
                Opnd = &Opnd2;
              if ((Opnd->Ptype & 0xFF) > Minapt) Amend(*Opnd, Shrtn);
              return;
            }
            if (Prec1 < Prec2) {
              Tprec = Prec2;
              Opnd = Opnd1;
            } else {
              Tprec = Prec1;
              Opnd = &Opnd2;
            }
            Oper = Opnd->Ptype;
            while ((Opnd->Ptype >> 4 & 15) < Tprec) Amend(*Opnd, Lngthn);
          }
        }
      }
      int Ccond(int Cto, int Iu, int Farlab, int Jflags) {
        void Skipsc(int Reversed);
        void Skipcond(int Reversed);
        int Ccomp(void);
        void Jump(int Mask, int Lab, int Flags);
        void Notejump(int Lab);
        void Labunused(int Lab);
        void Omitto(int Lab);
        int Pin;
        int Pp;
        int Ii;
        int L;
        int Cptr;
        int Cmax;
        int Ll;
        int Bitmask;
        int Lla;
        typedef struct Cf {
          unsigned char Tf;
          unsigned char Cmp1;
          unsigned char Cmp2;
          unsigned char Labu;
          unsigned char Lvl;
          unsigned char Jmp;
          unsigned char Rev;
          unsigned char Jumped;
          int Labno;
          int Sp1;
          int Sp2;
          int Sp3;
        } Cf;
        Cf Clist[31 /*0:30*/];
        Cf *C1;
        Cf *C2;
        Pin = P;
        Cptr = 1;
        L = 3;
        C1 = &Clist(Cptr);
        C1 = 0;
        Outsym('(');
        if (Iu == 2) {
          Skipsc(1);
          Skipcond(1);
        } else {
          Skipsc(0);
          Skipcond(0);
        }
        Outstring(_imp_str_literal(") "));
        return (0);
        void Skipsc(int Reversed) {
          const _imp_string255 Cmp[11 /*0:10*/] = {
              _imp_str_literal(" ??? "), _imp_str_literal("=="),
              _imp_str_literal(">="),    _imp_str_literal(">"),
              _imp_str_literal("!="),    _imp_str_literal("<="),
              _imp_str_literal("<"),     _imp_str_literal("!="),
              _imp_str_literal("?->??"), _imp_str_literal("=="),
              _imp_str_literal("!=")};
          const _imp_string255 Revcmp[11 /*0:10*/] = {
              _imp_str_literal(" ??? "),  _imp_str_literal("!="),
              _imp_str_literal("<"),      _imp_str_literal("<="),
              _imp_str_literal("=="),     _imp_str_literal(">"),
              _imp_str_literal(">="),     _imp_str_literal("=="),
              _imp_str_literal("!?->??"), _imp_str_literal("!="),
              _imp_str_literal("==")};
          static int Scalt_sw;
          static void *Scalt[4 /*1:4*/] = {
              &&Scalt_1,
              &&Scalt_2,
              &&Scalt_3,
              &&Scalt_4,
          };
          int Alt;
          int Te1;
          int Te2;
          int Precp;
          int Typep;
          int Finalp;
          int Rexp;
          Alt = A(P);
          P = P + 1;
          goto *Scalt[Scalt_sw = (Alt)-1];
        Scalt_1:;
          C1->Sp1 = P;
          Te1 = Tsexp(Te2);
          Typep = Type;
          Precp = Prec;
          P = C1->Sp1;
          Skipexp();
          C1->Cmp1 = A(P);
          C1->Rev = 3 * Reversed;
          P = P + 1;
          C1->Sp2 = P;
          Skipexp();
          if (A(P) == 2)
            P = P + 1;
          else {
            C1->Cmp2 = A(P + 1);
            P = P + 2;
            C1->Sp3 = P;
            Skipexp();
          }
          Finalp = P;
          if (Typep == 5) {
            P = C1->Sp1;
            if (C1->Cmp1 == 8) {
              Outstring(_imp_str_literal("imp_resolve("));
              P = P + 5;
              Cname(2);
              Outsym(',');
              P = C1->Sp2;
              Cres(1);
              if (Reversed == 1) {
                Outstring(_imp_str_literal(")!=0"));
              } else
                Outstring(_imp_str_literal(")==0"));
              if (C1->Cmp2 != 0)
                Outstring(_imp_str_literal("untranslateable cond"));
            } else {
              if (C1->Cmp2 != 0) Outsym('(');
              Outstring(_imp_str_literal("strcmp("));
              Cstrexp(0);
              Outsym(',');
              P = C1->Sp2;
              Cstrexp(0);
              Outsym(')');
              if (Reversed == 1) {
                Outstring(Revcmp(C1->Cmp1));
              } else
                Outstring(Cmp(C1->Cmp1));
              Outsym('0');
              if (C1->Cmp2 != 0) {
                if (Reversed == 1) {
                  Outstring(_imp_str_literal(") || ("));
                } else
                  Outstring(_imp_str_literal(") && ("));
                P = C1->Sp2;
                Cstrexp(0);
                Outsym(',');
                P = C1->Sp3;
                Cstrexp(0);
                Outsym(')');
              }
            }
          } else {
            if (C1->Cmp2 != 0) Outsym('(');
            P = C1->Sp1;
            Rexp = 2 - A(P + 1 + Fromar2(P + 1));
            if (Rexp != 0) Outsym('(');
            if (C1->Cmp1 > 8) {
              P = P + 5;
              Cname(4);
            } else
              Csexp(Precp << 4 | Typep | 256);
            if (Rexp != 0) Outsym(')');
            if (Reversed == 1) {
              Outstring(Revcmp(C1->Cmp1));
            } else
              Outstring(Cmp(C1->Cmp1));
            P = C1->Sp2;
            Rexp = 2 - A(P + 1 + Fromar2(P + 1));
            if (Rexp != 0) Outsym('(');
            if (C1->Cmp1 > 8) {
              P = P + 5;
              Cname(4);
            } else
              Csexp(Precp << 4 | Typep | 256);
            if (Rexp != 0) Outsym(')');
            if (C1->Cmp2 != 0) {
              if (Reversed == 1)
                Outstring(_imp_str_literal(") || ("));
              else
                Outstring(_imp_str_literal(") && ("));
              if (Rexp != 0) Outsym('(');
              P = C1->Sp2;
              Csexp(Precp << 4 | Typep);
              if (Rexp != 0) Outsym(')');
              if (Reversed == 1) {
                Outstring(Revcmp(C1->Cmp1));
              } else
                Outstring(Cmp(C1->Cmp2));
              P = C1->Sp3;
              Rexp = 2 - A(P + 1 + Fromar2(P + 1));
              if (Rexp != 0) Outsym('(');
              Csexp(Precp << 4 | Typep);
              if (Rexp != 0) Outsym(')');
              Outsym(')');
            }
          }
          P = Finalp;
          return;
        Scalt_2:;
          Outsym('(');
          L = L + 1;
          Skipsc(Reversed);
          Skipcond(Reversed);
          L = L - 1;
          Outsym(')');
          return;
        Scalt_3:;
          Skipsc(Reversed ^ 1);
          return;
        Scalt_4:;
          if (Reversed == 1)
            Outstring(
                _imp_str_literal("/* what is a pseudo-boolean? - is the "
                                 "conditio accidentally inverted? */"));
          Csexp(0x51);
        }
        void Skipcond(int Reversed) {
          int Alt;
          int Altp;
          Alt = A(P);
          P = P + 1;
          if (Alt != 3) do {
              C1->Lvl = L;
              C1->Tf = Alt;
              C1->Tf = C1->Tf ^ (3 * Reversed);
              if (Reversed == 1)
                if (Alt == 1)
                  Outstring(_imp_str_literal(" || "));
                else
                  Outstring(_imp_str_literal(" && "));
              else if (Alt == 1)
                Outstring(_imp_str_literal(" && "));
              else
                Outstring(_imp_str_literal(" || "));
              Cptr = Cptr + 1;
              C1 = &Clist(Cptr);
              C1 = 0;
              Skipsc(Reversed);
              Altp = A(P);
              P = P + 1;
            } while (Altp != 2);
        }
      }
      int Reverse(int Mask) {
        if (Mask == 0 || Mask == 15) return (Mask ^ 15);
        return (Mask ^ 0x8F);
      }
      int Enterlab(int Lab, int Flags) { return (0); }
      void Enterjump(int Tfmask, int Lab, int Flags) {}
      void Removelab(int Lab) {}
      int Createah(int Mode, Rd Eopnd, Rd Nopnd) {
        int Jj;
        Jj = Brectrip(Ahadj, Aheadpt, 0, Eopnd, Nopnd);
        Triples(Jj).X1 = Ptype << 4 | Mode;
        return (Jj);
      }
      void Csname(int Z) {
        int Optmap(void);
        static int Adhoc_sw;
        static void *Adhoc[68 /*0:67*/] = {
            &&Adhoc_0,       &&Adhoc_1,       &&Adhoc_2,       &&Adhoc_3,
            &&Adhoc_4,       &&Adhoc_default, &&Adhoc_6,       &&Adhoc_7,
            &&Adhoc_8,       &&Adhoc_9,       &&Adhoc_10,      &&Adhoc_default,
            &&Adhoc_12,      &&Adhoc_13,      &&Adhoc_14,      &&Adhoc_15,
            &&Adhoc_16,      &&Adhoc_17,      &&Adhoc_default, &&Adhoc_19,
            &&Adhoc_20,      &&Adhoc_21,      &&Adhoc_22,      &&Adhoc_23,
            &&Adhoc_24,      &&Adhoc_25,      &&Adhoc_26,      &&Adhoc_27,
            &&Adhoc_28,      &&Adhoc_29,      &&Adhoc_30,      &&Adhoc_default,
            &&Adhoc_32,      &&Adhoc_default, &&Adhoc_default, &&Adhoc_default,
            &&Adhoc_36,      &&Adhoc_37,      &&Adhoc_38,      &&Adhoc_39,
            &&Adhoc_40,      &&Adhoc_41,      &&Adhoc_42,      &&Adhoc_default,
            &&Adhoc_default, &&Adhoc_45,      &&Adhoc_46,      &&Adhoc_47,
            &&Adhoc_48,      &&Adhoc_49,      &&Adhoc_default, &&Adhoc_51,
            &&Adhoc_52,      &&Adhoc_default, &&Adhoc_54,      &&Adhoc_55,
            &&Adhoc_default, &&Adhoc_default, &&Adhoc_default, &&Adhoc_default,
            &&Adhoc_default, &&Adhoc_61,      &&Adhoc_default, &&Adhoc_default,
            &&Adhoc_64,      &&Adhoc_65,      &&Adhoc_66,      &&Adhoc_67,
        };
        const _imp_string255 Smdetails[68 /*0:67*/] = {
            _imp_str_literal("%routine SELECT INPUT(%integer STREAM)"),
            _imp_str_literal("%routine SELECT OUTPUT(%integer STREAM)"),
            _imp_str_literal("%routine NEWLINE"),
            _imp_str_literal("%routine SPACE"),
            _imp_str_literal("%routine SKIP SYMBOL"),
            _imp_str_literal("%routine READ STRING(%stringname S)"),
            _imp_str_literal("%routine NEWLINES(%integer N)"),
            _imp_str_literal("%routine SPACES(%integer N)"),
            _imp_str_literal("%integerfn NEXT SYMBOL"),
            _imp_str_literal("%routine PRINT SYMBOL(%integer SYMBOL)"),
            _imp_str_literal("%routine READ SYMBOL(%name SYMBOL)"),
            _imp_str_literal("%routine READ(%name NUMBER)"),
            _imp_str_literal("%routine WRITE(%integer VALUE,PLACES)"),
            _imp_str_literal("%routine NEWPAGE"),
            _imp_str_literal("%integerfn ADDR(%name VARIABLE)"),
            _imp_str_literal("%longrealfn ARCSIN(%longreal X)"),
            _imp_str_literal("%integerfn INT(%longreal X)"),
            _imp_str_literal("%integerfn INTPT(%lonrgreal X)"),
            _imp_str_literal("%longrealfn FRACPT(%longreal X)"),
            _imp_str_literal(
                "%routine PRINT(%longreal NUMBER,%integer BEFORE,AFTER)"),
            _imp_str_literal(
                "%routine PRINTFL(%longreal NUMBER,%integer PLACES)"),
            _imp_str_literal("%realmap REAL(%integer VAR ADDR)"),
            _imp_str_literal("%integermap INTEGER(%integer VAR ADDR)"),
            _imp_str_literal("%longrealfn MOD(%longreal X)"),
            _imp_str_literal("%longrealfn ARCCOS(%longreal X)"),
            _imp_str_literal("%longrealfn SQRT(%longreal X)"),
            _imp_str_literal("%longrealfn LOG(%longreal X)"),
            _imp_str_literal("%longrealfn SIN(%longreal X)"),
            _imp_str_literal("%longrealfn COS(%longreal X)"),
            _imp_str_literal("%longrealfn TAN(%longreal X)"),
            _imp_str_literal("%longrealfn EXP(%longreal X)"),
            _imp_str_literal("%routine CLOSE STREAM(%integer STREAM)"),
            _imp_str_literal("%byteintegermap BYTE INTEGER(%integer VAR ADDR)"),
            _imp_str_literal("%integerfn EVENTINF"),
            _imp_str_literal("%longrealfn RADIUS(%longreal X,Y)"),
            _imp_str_literal("%longrealfn ARCTAN(%longreal X,Y)"),
            _imp_str_literal("%byteintegermap LENGTH(%stringname  S)"),
            _imp_str_literal("%routine PRINT STRING(%string(255)"),
            _imp_str_literal("%integerfn NL"),
            _imp_str_literal("%longrealmap LONG REAL(%integer VAR ADDR)"),
            _imp_str_literal("%routine PRINT CH(%integer CHARACTER)"),
            _imp_str_literal("%routine READ CH(%name CHARACTER)"),
            _imp_str_literal("%stringmap STRING(%integer VAR ADDR)"),
            _imp_str_literal("%routine READ ITEM(%stringname ITEM)"),
            _imp_str_literal("%string(1)"),
            _imp_str_literal(
                "%byteintegermap CHARNO(%stringname STR,%integer CHARREQD)"),
            _imp_str_literal("%string(1)"),
            _imp_str_literal("%string(255)"),
            _imp_str_literal("%recordmap RECORD(%integer REC ADDR)"),
            _imp_str_literal(
                "%arraymap ARRAY(%integer A1ADDR,%arrayname FORMAT)"),
            _imp_str_literal("%integerfn SIZEOF(%name X)"),
            _imp_str_literal("%integerfn IMOD(%integer VALUE)"),
            _imp_str_literal("%longrealfn PI"),
            _imp_str_literal("%integerfn EVENTLINE"),
            _imp_str_literal("%longintegermap LONGINTEGER(%integer ADR)"),
            _imp_str_literal("%longlongrealmap LONGLONGREAL(%integer ADR)"),
            _imp_str_literal("%longintgerefn LENGTHENI(%integer VAL)"),
            _imp_str_literal("%longlongrealfn LENGTHENR(%longreal VAL)"),
            _imp_str_literal("%integerfn SHORTENI(%longinteger VAL)"),
            _imp_str_literal("%longrealfn SHORTENR(%longlongreal VAL)"),
            _imp_str_literal("%integerfn NEXTCH"),
            _imp_str_literal("%halfintegermap HALFINTEGER(%integer ADDR)"),
            _imp_str_literal("%routine PPROFILE"),
            _imp_str_literal("%longrealfn FLOAT(%integer VALUE)"),
            _imp_str_literal("%longintegerfn LINT(%longlongreal X)"),
            _imp_str_literal("%longintegerfn LINTPT(%longlongreal X)"),
            _imp_str_literal("%shortintegermap SHORTINTEGER(%integer N)"),
            _imp_str_literal("%integerfn TRUNC(%longreal X)")};
        const int Sninfo[68 /*0:67*/] = {0x41080001,
                                         0x41090001,
                                         0x408A0001,
                                         0x40A00001,
                                         0x40010001,
                                         0x800D0000,
                                         0x11010001,
                                         0x11010001,
                                         0x10020024,
                                         0x41030001,
                                         0x19030001,
                                         0x80130001,
                                         0x80170014,
                                         0x408C0001,
                                         0x19050024,
                                         0x80010002,
                                         0x11040024,
                                         0x11040024,
                                         0x80010005,
                                         0x80090006,
                                         0x80060007,
                                         0x2100003E,
                                         0x2100003E,
                                         0x11060024,
                                         0x80010008,
                                         0x80010009,
                                         0x8001000A,
                                         0x8001000B,
                                         0x8001000C,
                                         0x8001000D,
                                         0x8001000E,
                                         0x8015000F,
                                         0x2100003E,
                                         0x100D0024,
                                         0x80030010,
                                         0x80030011,
                                         0x1907003E,
                                         0x41070001,
                                         0x10080024,
                                         0x2100003E,
                                         0x41050001,
                                         0x19030001,
                                         0x2100003E,
                                         0x19030001,
                                         0x10020024,
                                         0x1A07003E,
                                         0x11090024,
                                         0x800F0012,
                                         0x110A0018,
                                         0x120B1000,
                                         0x80130013,
                                         0x11060024,
                                         0x100C0024,
                                         0x100D0024,
                                         [54 ... 55] = 0x2100003E,
                                         [56 ... 59] = 0x110E0024,
                                         0x10020024,
                                         0x2100003E,
                                         0x100F0001,
                                         0x11100024,
                                         0x11110024,
                                         0x11110024,
                                         0x2100003E,
                                         0x11040024};
        const _imp_string255 Snxrefs[21 /*0:20*/] = {
            _imp_str_literal("s#readstring"),
            _imp_str_literal("s#read"),
            _imp_str_literal("s#iarcsin"),
            _imp_str_literal("s#int"),
            _imp_str_literal("s#intpt"),
            _imp_str_literal("s#fracpt"),
            _imp_str_literal("s#print"),
            _imp_str_literal("s#printfl"),
            _imp_str_literal("s#iarccos"),
            _imp_str_literal("sqrt"),
            _imp_str_literal("log"),
            _imp_str_literal("sin"),
            _imp_str_literal("cos"),
            _imp_str_literal("tan"),
            _imp_str_literal("exp"),
            _imp_str_literal("s#closestream"),
            _imp_str_literal("s#iradius"),
            _imp_str_literal("atan2"),
            _imp_str_literal("imp_substring"),
            _imp_str_literal("s#sizeof"),
            _imp_str_literal("s#write")};
        if (Paramsbwards == Yes)
          const int Snparams[26 /*0:25*/] = {
              0,      524289,  0x62,    1048578, 524386, 0x62,   786434,
              786530, 262225,  1048579, 524386,  262225, 0x51,   524289,
              0x435,  1048579, 525365,  262225,  0x51,   524289, 0x400,
              262145, 0x51,    524290,  262225,  0x51};
        else
          const int Snparams[26 /*0:25*/] = {
              0,      524289,  0x62,    1048578, 0x62,   524386, 786434,
              0x62,   524369,  1048579, 0x62,    524369, 786513, 524289,
              0x435,  1048579, 0x435,   524369,  786513, 524289, 0x400,
              262145, 0x51,    524290,  0x51,    262225};
        const unsigned char Wrongz[16 /*0:15*/] = {27,
                                                   29,
                                                   23,
                                                   29,
                                                   29,
                                                   23,
                                                   82,
                                                   [7 ... 11] = 109,
                                                   23,
                                                   27,
                                                   [14 ... 15] = 109};
        void Rtos(void);
        int Ciocp(int N, Rd Param);
        Listf *Lcell;
        Listf Pcell;
        Rd Opnd;
        Rd Operator;
        Tripf *Currt;
        _imp_string255 Snxref;
        int Errno;
        int Flag;
        int Pointer;
        int Pin;
        int Snno;
        int Snname;
        int Naps;
        int Snptype;
        int Jj;
        int Xtra;
        int Iocpep;
        int B;
        int D;
        int Sninf;
        int P0;
        int Ophead;
        int Errval;
        int Exphead;
        int Expbot;
        int Formatname;
        int Nops;
        Snname = Fromar2(P);
        Snno = K;
        Testapp(Naps);
        Pin = P;
        P = P + 2;
        Snptype = Acc;
        Sninf = Sninfo(Snno);
        Xtra = Sninf & 0xFFFF;
        Pointer = (Sninf >> 16) & 255;
        Flag = Sninf >> 24;
        if ((Snptype & 255) == 0x61 && (1 << Target & Lintavail) == 0) {
          Errno = 99;
          goto Errexit;
        }
        goto *Adhoc[Adhoc_sw = Snno];
      Adhoc_47:;
        Outstring(_imp_str_literal("imp_substring("));
        P = P + 1;
        Cstrexp(0);
        Outsym(',');
        P = P + 1;
        Csexp(0x51);
        Outsym(',');
        P = P + 1;
        Csexp(0x51);
        Outsym(')');
        P = P + 1;
        goto Okexit;
      Adhoc_24:;
      Adhoc_25:;
      Adhoc_26:;
      Adhoc_27:;
      Adhoc_28:;
      Adhoc_29:;
      Adhoc_30:;
        Snxref = Snxrefs(Xtra);
        P0 = Snparams(Pointer);
        if (Target == Perq || Target == Accent) {
          Jj = Addr(Snxref);
          D = *Length(Snxref);
          Movebytes(D + 1, Jj, 0, Addr(A(0)), Worka.Artop);
          Jj = Addr(A(Worka.Artop)) - Addr(A(Worka.Dictbase));
          Worka.Artop = (Worka.Artop + D + 4) & (-4);
        } else
          Cxref(Snxref, 3 * Parm.Dynamic, P0 << 16 | P0 >> 16, Jj);
        Ophead = 0;
        K = Ophead;
        D = 1;
        while (D <= (P0 & 15)) {
          B = Snparams(Pointer + D);
          Ptype = B & 0xFFFF;
          Unpack();
          if (Nam == 0)
            Acc = Bytes(Prec);
          else
            Acc = 8;
          if (Ptype == 0x35) Acc = 256;
          Pcell = 0;
          Pcell.Ptype = Ptype;
          Pcell.Sndisp = B >> 16;
          Pcell.Acc = Acc;
          if (Paramsbwards == Yes)
            Push(Ophead, Pcell.S1, Pcell.S2, 0);
          else
            Insertatend(Ophead, Pcell.S1, Pcell.S2, 0);
          D = D + 1;
        }
        if (P0 > 0) Aslist(Ophead).S3 = P0;
        Lcell = &Aslist(Tags(Snname));
        Lcell->Ptype = Snptype;
        Lcell->Uioj = 1 << 4 | 14;
        Lcell->Sndisp = Jj;
        Lcell->Acc = Bytes(Snptype >> 4 & 15);
        Lcell->Slink = Ophead;
        Lcell->Kform = 0;
        P = Pin;
        Cname(Z);
        P = P - 1;
        return;
      Adhoc_6:
      Adhoc_7:;
        if (Parm.Arr == 0) {
          if (Snno == 6)
            Outstring(_imp_str_literal("_imp_newlines("));
          else
            Outstring(_imp_str_literal("_imp_spaces("));
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
          P = P + 1;
          goto Okexit;
        }
        P = P + 1;
        if (Tsexp(Jj) > 0 && Jj > 0) {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          for (Xtra = 1; Xtra <= Jj; Xtra++)
            if (Snno == 6)
              Outstring(_imp_str_literal("\\n"));
            else
              Outstring(_imp_str_literal(" "));
          Outsym('"');
          Outsym(')');
        } else {
          P = Pin + 3;
          Outstring(_imp_str_literal("{ for (_imptempint=1; _imptempint<="));
          Csexp(0x51);
          Outstring(_imp_str_literal("; _imptempint++) fprintf(out_file, "));
          Outsym('"');
          if (Snno == 6)
            Outstring(_imp_str_literal("\\n"));
          else
            Outstring(_imp_str_literal(" "));
          Outsym('"');
          Outstring(_imp_str_literal(");}"));
        }
        P = P + 1;
        goto Okexit;
      Adhoc_37:;
        if (Parm.Arr == 0)
          Outstring(_imp_str_literal("_imp_printstring("));
        else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal("%s"));
          Outsym('"');
          Outstring(_imp_str_literal(", "));
        }
        P = P + 1;
        Cstrexp(0);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_2:;
        if (Parm.Arr == 0)
          Outstring(_imp_str_literal("_imp_newlines(1)"));
        else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal("%s"));
          Outsym('"');
          Outstring(_imp_str_literal(", "));
          Outsym('"');
          Outsym('\\');
          Outsym('n');
          Outsym('"');
          Outsym(')');
        }
        P = P + 1;
        goto Okexit;
      Adhoc_3:;
        if (Parm.Arr == 0)
          Outstring(_imp_str_literal("_imp_spaces(1)"));
        else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal("%s"));
          Outsym('"');
          Outstring(_imp_str_literal(", "));
          Outsym('"');
          Outsym(' ');
          Outsym('"');
          Outsym(')');
        }
        P = P + 1;
        goto Okexit;
      Adhoc_21:;
      Adhoc_22:;
      Adhoc_61:;
      Adhoc_66:;
      Adhoc_39:;
      Adhoc_32:;
      Adhoc_54:
      Adhoc_55:;
        Outstring(_imp_str_literal("(*("));
        Outtype(Snptype & 255, 0);
        Outstring(_imp_str_literal(" *)("));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal("))"));
        P = P + 1;
        goto Okexit;
      Adhoc_42:;
        Outstring(_imp_str_literal("((char *)"));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_45:;
        if (Z != 2) Warn(10, 0);
        P = P + 1;
        Cstrexp(0);
        Outsym('[');
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal("-1]"));
        P = P + 1;
        goto Okexit;
      Adhoc_36:;
        if (Z != 2) Warn(10, 0);
        Outstring(_imp_str_literal("strlen("));
        P = P + 1;
        Cstrexp(0);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_46:;
        Outstring(_imp_str_literal("imp_tostring("));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_9:
      Adhoc_40:;
        if (Parm.Arr == 0)
          Outstring(_imp_str_literal("_imp_printsymbol("));
        else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal("%c"));
          Outsym('"');
          Outstring(_imp_str_literal(", "));
        }
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_12:;
        if (Parm.Arr == 0) {
          Outstring(_imp_str_literal("_imp_write("));
          P = P + 1;
          Csexp(0x51);
          Outsym(',');
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
          P = P + 1;
          goto Okexit;
        }
        P = P + 1;
        Skipexp();
        P = P + 1;
        Jj = Tsexp(Xtra);
        P = Pin + 2;
        if (Jj != 0) {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal("%"));
          Outint(Imod(Xtra) + 1);
          Outstring(_imp_str_literal("d"));
          Outsym('"');
          Outstring(_imp_str_literal(","));
        } else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal(" %d"));
          Outsym('"');
          Outstring(_imp_str_literal(","));
        }
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = Pin + 2;
        Skipapp();
        P = P - 1;
        goto Okexit;
      Adhoc_19:;
        if (Parm.Arr == 0) {
          Outstring(_imp_str_literal("_imp_print("));
          P = P + 1;
          Csexp(0x62);
          Outsym(',');
          P = P + 1;
          Csexp(0x51);
          Outsym(',');
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
        } else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal(" %f"));
          Outsym('"');
          Outstring(_imp_str_literal(","));
          P = P + 1;
          Csexp(0x62);
          Outstring(_imp_str_literal(")"));
        }
        P = Pin + 2;
        Skipapp();
        P = P - 1;
        goto Okexit;
      Adhoc_20:;
        if (Parm.Arr == 0) {
          Outstring(_imp_str_literal("_imp_printf("));
          P = P + 1;
          Csexp(0x62);
          Outsym(',');
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
        } else {
          Outstring(_imp_str_literal("fprintf(out_file, "));
          Outsym('"');
          Outstring(_imp_str_literal(" %e"));
          Outsym('"');
          Outstring(_imp_str_literal(","));
          P = P + 1;
          Csexp(0x62);
          Outstring(_imp_str_literal(")"));
        }
        P = Pin + 2;
        Skipapp();
        P = P - 1;
        goto Okexit;
      Adhoc_0:;
        if (Parm.Arr == 0) {
          Outstring(_imp_str_literal("_imp_selectinput("));
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
          P = P + 1;
          goto Okexit;
        }
        Outstring(_imp_str_literal("selectinput("));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_1:;
        if (Parm.Arr == 0) {
          Outstring(_imp_str_literal("_imp_selectoutput("));
          P = P + 1;
          Csexp(0x51);
          Outsym(')');
          P = P + 1;
          goto Okexit;
        }
        Outstring(_imp_str_literal("selectoutput("));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_64:
      Adhoc_65:;
        if ((Typeflag(10) & 255) != 0x61 || (Typeflag(12) & 255) < 0x62) {
          Errno = 99;
          goto Errexit;
        }
        Outstring(_imp_str_literal("((long int) floor("));
        P = P + 1;
        Csexp(Typeflag(12) & 255);
        if (Snno == 64) Outstring(_imp_str_literal("+0.5"));
        Outstring(_imp_str_literal("))"));
        P = P + 1;
        P0 = 0x61;
        goto Okexit;
      Adhoc_16:
      Adhoc_17:;
        Outstring(_imp_str_literal("((int) floor("));
        P = P + 1;
        Csexp(Lrlpt);
        if (Snno == 16) Outstring(_imp_str_literal("+0.5"));
        Outstring(_imp_str_literal("))"));
        P = P + 1;
        goto Okexit;
      Adhoc_67:;
        Outstring(_imp_str_literal("((int)("));
        P = P + 1;
        Csexp(Lrlpt);
        Outstring(_imp_str_literal("))"));
        P = P + 1;
        goto Okexit;
      Adhoc_4:;
        Outstring(_imp_str_literal("(void)fgetc(in_file)"));
        P = P + 2;
        goto Okexit;
      Adhoc_8:;
        P = P + 6;
        Cname(1);
        Outstring(_imp_str_literal("ungetc(fgetc(in_file), in_file)"));
        P = P + 2;
        goto Okexit;
      Adhoc_10:;
      Adhoc_41:;
        P = P + 6;
        Cname(1);
        Outstring(_imp_str_literal(" = fgetc(in_file)"));
        P = P + 2;
        goto Okexit;
      Adhoc_14:;
        P = P + 6;
        Cname(4);
        P = P + 2;
        goto Okexit;
      Adhoc_23:;
        Outstring(_imp_str_literal("fabs("));
        P = P + 1;
        Csexp(0x62);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_51:;
        Outstring(_imp_str_literal("abs("));
        P = P + 1;
        Csexp(0x51);
        Outstring(_imp_str_literal(")"));
        P = P + 1;
        goto Okexit;
      Adhoc_52:;
      Adhoc_38:;
        P = P + 1;
        goto Okexit;
      Adhoc_48:;
        P = P + 1;
        if (Tsexp(Jj) == 1 && Jj == 0)
          Outstring(_imp_str_literal("NULL"));
        else {
          if (Z != 4) {
            Outsym('(');
          }
          P = Pin + 3;
          Csexp(0x51);
          P = P + 1;
          Outsym(')');
        }
        Disp = 0;
        Base = 0;
        Access = 3;
        Oldi = 0;
        Acc = 0xFFFF;
        Snptype = Snptype + 0x1C00;
        Ptype = Snptype;
        Unpack();
        return;
      Adhoc_49:;
        P = P + 1;
        Skipexp();
        Errno = 22;
        Errval = 2;
        if (A(P + 4) != 4 || A(P + 5) != 1) goto Errexit;
        P = P + 6;
        Formatname = Fromar2(P);
        Copytag(Formatname, No);
        P = P + 4;
        if (A(P) != 2) goto Errexit;
        Xtra = P + 2;
        Outstring(_imp_str_literal("(("));
        Outtype(Ptype & 255, Lhformatname);
        Outstring(_imp_str_literal("*)("));
        P = Pin + 3;
        Csexp(0x51);
        Outstring(_imp_str_literal("))"));
        Copytag(Formatname, No);
        P = Xtra;
        return;
      Adhoc_13:;
        D = Currinf->Oninf;
        if (D == 0) Fault(16, 0, Snname);
        if (Snno != 33) D = D + 4;
        Base = Rbase;
        Access = 0;
        Disp = D;
        Snptype = Snptype + 0x1C00;
        goto Okexit;
        D = (Snno & 3) * 8;
        Jj = 0x62517261 >> D & 255;
        if ((1 << Target & Llrealavail) == 0 && Jj == 0x72) Jj = 0x62;
        if ((1 << Target & Lintavail) == 0 && Jj == 0x61) Jj = 0x51;
        Csexp(Jj);
        P = P + 1;
        Nameopnd = Expopnd;
        goto Okexit;
      Adhoc_15:;
        if (Parm.Prof != 0) Jj = Uconsttrip(Pprof, 0x51, 0, Profaad);
        goto Okexit;
        Csexp(Lrlpt);
        Nameopnd = Expopnd;
        P = P + 1;
        goto Okexit;
      Adhoc_default:;
        Outstring(_imp_str_literal("/* Call to "));
        Outstring(Smdetails(Snno));
        Outstring(_imp_str_literal(" - please modify pass2.i to handle it */"));
        Skipapp();
        P = P - 1;
        goto Okexit;
      Okexit:;
        Ptype = Snptype;
        Unpack();
        Acc = Bytes(Prec);
        return;
      Errexit:;
        Fault(Errno, Errval, Snname);
        Nameopnd = 0;
        Nameopnd.Ptype = 0x51;
        Base = 0;
        Disp = 0;
        Access = 0;
        Area = 0;
        Ptype = Snptype;
        Unpack();
        P = Pin + 2;
        Skipapp();
        P = P - 1;
        return;
        int Ciocp(int Ep, Rd Param) {
          Rd Opnd;
          Opnd.Ptype = Minapt;
          Opnd.Flag = Sconst;
          Opnd.D = Ep;
          return (Brectrip(Iocpc, Minapt, Dontopt, Opnd, Param));
        }
        void Rtos(void) {
          int Kk;
          int Jj;
          if (Expopnd.Flag <= 1) {
            Kk = Itos1;
            Ctop(Kk, Jj, 0, Expopnd, Nameopnd);
            if (Kk == 0) {
              Nameopnd = Expopnd;
              return;
            }
          }
          Jj = Urectrip(Itos1, 0x35, 0, Expopnd);
          Nameopnd.Ptype = 0x35;
          Nameopnd.Flag = Reftrip;
          Nameopnd.D = Jj;
        }
      }
      void Caname(int Z, int Arrp, Rd Hdopnd) {
        int Head1;
        int Bot1;
        int Nops;
        int Elsize;
        int Ptypep;
        int Jj;
        int Soldi;
        int Kk;
        int Pp;
        int Typep;
        int Lb;
        int Arrname;
        int Q;
        int Precp;
        int Naminf;
        int Dvd;
        int Dvdp;
        int Privops;
        Rd Vmyop;
        Rd Rpop;
        Tagf *Lcell;
        int Heads[13 /*0:12*/];
        int Bots[13 /*0:12*/];
        Nops = 0;
        Head1 = 0;
        Bot1 = 0;
        Pp = P;
        Typep = Type;
        Jj = J;
        Ptypep = Ptype;
        Precp = Prec;
        Soldi = Oldi;
        if (Type <= 2)
          Elsize = Bytes(Precp);
        else
          Elsize = Acc;
        if (Elsize > 4095 || (Type == 5 && Nam != 0)) Elsize = 0;
        Dvd = Sndisp;
        Vmyop.Flag = 0;
        Vmyop.Xb = 0;
        Arrname = Fromar2(P);
        Naminf = Tags(Arrname);
        if (Arr == 3) Fault(87, 0, Arrname);
        if (Dvd > 0) {
          Vmyop.Ptype = 0x51;
          Vmyop.D = Dvd;
        } else
          Vmyop = Hdopnd;
        Testapp(Q);
        if (Jj == 0) {
          Lcell = &Aslist(Tcell);
          Lcell->Uioj = Lcell->Uioj | Q;
          Jj = Q;
        }
        if (Jj == Q && Q != 0) {
          P = Pp + 3;
          for (Kk = 1; Kk <= Jj; Kk++) {
            Heads(Kk) = P;
            Skipexp();
            P = P + 1;
          }
          Pp = P;
          Outstring(_imp_str_literal(" ["));
          Dvdp = Dvd + 3 * Jj;
          for (Kk = Jj; Kk >= 1; Kk--) {
            P = Heads(Kk);
            Csexp(0x51);
            Lb = Ctable(Dvdp);
            if (Dvd != 0)
              if (Lb == 0x80000000)
                ;
              else if (Lb > 0)
                ;
              else if (Lb == 0)
                ;
              else if (Lb < 0)
                ;
              else
                Warn(13, 0);
            if (Kk != 1) Outstring(_imp_str_literal("] ["));
            Dvdp = Dvdp - 3;
          }
          P = Pp;
          Outsym(']');
        } else {
          Rpop = 0;
          Rpop.Flag = Sconst;
          Binsert(Head1, Bot1, Rpop.S1, 0, 0);
          if (Jj > Q)
            Fault(20, Jj - Q, Arrname);
          else
            Fault(21, Q - Jj, Arrname);
          P = P + 2;
          Skipapp();
        }
        Soldi = Oldi;
        Access = 3;
        Acc = Elsize;
        Ptype = Ptypep;
        Unpack();
        J = Jj;
        if (Type == 5 && Nam > 0) Mlopnd = Hdopnd;
        Oldi = Soldi;
        return;
      }
      void Namepreamble(int Z, int Fname) {
        int Typep;
        int Qq;
        int Subs;
        int Pp;
        Typep = Type;
        Pp = P;
        if (Typep == 3) {
          Qq = Copyrecordtag(Subs);
          P = Pp;
        }
        if (Z == 3 && Type != 5 && (Nam == 0 || Arr != 0)) Outsym('&');
        if (Z == 4 && Type != 5 && (Nam == 0 || Arr != 0))
          Outstring(_imp_str_literal("(int)&"));
        if (Z == 4 && (Type == 5 || (Nam != 0 && Arr == 0)))
          Outstring(_imp_str_literal("(int)"));
        if ((Z == 1 || Z == 2) &&
            ((Nam != 0 && Arr == 0 && 0 == Rout) || (Nam >= 2 && Rout == 1)) &&
            Type != 5 && (Typep != 3 || Qq != 0))
          Outsym('*');
        if (Z == 7 && Typep == 3 && Qq == 0 && Nam != 0 && Arr == 0)
          Outsym('*');
        Outname(Fname);
        if (Typep == 3) Copytag(Fname, No);
      }
      void Cname(int Z) {
        int Jj;
        int Kk;
        int Levelp;
        int Dispp;
        int Namep;
        int Pp;
        int Savesl;
        int Fname;
        Rd Topnd;
        static int S_sw;
        static void *S[3 /*11:13*/] = {
            &&S_11,
            &&S_12,
            &&S_default,
        };
        static int Funny_sw;
        static void *Funny[3 /*11:13*/] = {
            &&Funny_11,
            &&Funny_12,
            &&Funny_13,
        };
        static int Sw_sw;
        static void *Sw[9 /*0:8*/] = {
            &&Sw_0, &&Sw_1, &&Sw_2, &&Sw_3,       &&Sw_4,
            &&Sw_5, &&Sw_6, &&Sw_7, &&Sw_default,
        };
        Pp = P;
        Fname = (A(P) << 8) + A(P + 1);
        if (Z == 1 || Z == 6) Stname = Fname;
        Copytag(Fname, Yes);
        Savesl = Acc;
        Jj = J;
        if (Jj == 15) Jj = 0;
        Namep = Fname;
        Levelp = I;
        Dispp = K;
        if (Litl == 1 && Rout == 0 && 0 == Nam &&
            (Z == 1 || Z == 3 || (Z == 4 && Arr == 0)))
          Fault(43, 0, Fname);
        if (Type == 7) goto Notset;
        if ((Z == 0 && (Rout != 1 || 0 != Type && Type != 6)) ||
            (Z == 13 && Rout == 0)) {
          Fault(27, 0, Fname);
          goto Notset;
        }
        if (Z >= 10) goto *Funny[Funny_sw = (Z)-11];
        if (Rout == 1) goto Rtcall;
        Namepreamble(Z, Fname);
        goto *Sw[Sw_sw = Type];
      Sw_6:;
        Fault(5, 0, Fname);
        goto Notset;
      Sw_4:;
        Fault(87, 0, Fname);
      Notset:;
        Namepreamble(Z, Fname);
      Sw_7:;
        Base = I;
        Disp = K;
        Access = 0;
        Nameopnd = 0;
        Nameopnd.Ptype = 0x51;
        Ptype = 0x51;
        Unpack();
        P = P + 2;
        if (A(P) == 1) {
          Jj = '(';
          Outsym(Jj);
          P = P + 1;
          Csexp(0x51);
          while (A(P) == 1) {
            Outsym(',');
            P = P + 1;
            Csexp(0x51);
          }
          Outsym(Jj + 1 + (Jj >> 6));
        }
        P = P + 1;
        goto Chken;
      Funny_11:;
      Funny_12:;
        if (Ptype == Snpt) {
          Csname(12);
          goto Chken;
        }
        Namepreamble(Z, Fname);
        if (Type == 3 && (Arr == 0 || A(P + 2) == 1)) goto *Sw[Sw_sw = 3];
        if (A(P + 2) == 2)
          P = P + 3;
        else
          Noapp();
        Nameopnd.Flag = Dname;
        Nameopnd.D = Fname;
        Nameopnd.Xtra = 0;
      S_12:;
      S_11:;
        Nameopnd.Ptype = Aheadpt;
        goto Chken;
      Funny_13:;
        if (Ptype == Snpt) {
          Csname(Z);
          P = P + 1;
          goto Chken;
        }
        Namepreamble(Z, Fname);
        Jj = Unametrip(Rtfp, Rtparampt, 0, Fname);
        Nameopnd.Ptype = Rtparampt;
        Nameopnd.Flag = Reftrip;
        Nameopnd.D = Jj;
        Nameopnd.Xtra = 0;
        if (A(P + 2) == 2)
          P = P + 3;
        else
          Noapp();
        goto Chken;
      Rfun:;
        Expopnd = Nameopnd;
      Rmap:;
        Copytag(Namep, No);
        P = P - 3;
        Namep = -1;
        Crname(Z, 3, 0, 0, Namep);
        goto Rback;
      Sw_3:;
        Crname(Z, 2 * Nam, I, K, Namep);
      Rback:;
        if (Z >= 10) goto *S[S_sw = (Z)-11];
        if (Type == 5 && Z != 6) goto Strinrec;
        if (Type == 7) goto Notset;
        Nameop(Z, Bytes(Prec), Namep);
        if (Z == 1 || Z == 6) Stname = Namep;
        goto Chken;
      Sw_5:;
        if (Z == 6) goto *Sw[Sw_sw = 1];
        if (Arr >= 1) goto Strarr;
        if (A(P + 2) == 2)
          P = P + 3;
        else
          Noapp();
        Base = I;
        Access = 2 * Nam;
        Disp = K;
      Smap:
        Mlopnd = 0;
        if (Nam != 1) {
          Mlopnd.Ptype = 0x51;
          Mlopnd.D = Savesl - 1;
        } else {
          Mlopnd.Ptype = 0x61;
          Mlopnd.Flag = Localir;
          Mlopnd.D = I << 16 | K;
        }
        Nameop(Z, 4, Namep);
        goto Chken;
      Strarr:;
        Topnd = 0;
        Topnd.Ptype = Aheadpt;
        Topnd.Flag = Dname;
        Topnd.D = Fname;
        Caname(Z, Arr, Topnd);
        if (Z != 3 || Nam == 0) goto Smap;
        Nameop(3, 4, Namep);
        goto Chken;
      Strinrec:;
        Savesl = Acc;
        if (Z != 3 || Nam == 0 || Arr == 0) goto Smap;
        Nameop(3, 4, Namep);
        goto Chken;
      Rtcall:;
        if (Type == 0 && Z != 0) {
          Fault(23, 0, Fname);
          goto Notset;
        }
        if (Ptype == Snpt) {
          Csname(Z);
          if (Rout == 1 && Nam > 1 && Z != 0) goto Bim;
          goto Chken;
        }
        Namepreamble(Z, Fname);
        Crcall(Fname);
        P = P + 1;
        if ((Ptype & 15) == 0) goto Chken;
        if (Nam > 1) goto Udm;
        if (Z != 2 && Z != 5 && (Z != 3 || 3 != Type)) {
          Fault(29, 0, Fname);
          Base = 0;
          Access = 0;
          Disp = 0;
        }
        if (Type == 3) goto Rfun;
        goto Chken;
      Udm:;
        Disp = 0;
        Access = 3;
        Base = 0;
        Expopnd = Nameopnd;
        if (Type == 3) goto Rmap;
      Bim:;
        Namep = -1;
        Stname = -1;
        if (Type == 5) {
          Savesl = 256;
          goto Smap;
        }
        Kk = Z;
        if (Z == 5) Kk = 2;
        Nameop(Z, Bytes(Prec), Namep);
        goto Chken;
      Sw_0:;
        if (3 > Z || Z > 4) {
          Fault(90, 0, Fname);
          Type = 1;
        }
      Sw_1:;
      Sw_2:;
        if (Arr == 0 || (Z == 6 && A(P + 2) == 2)) {
          Base = I;
          Access = 2 * Nam;
          Disp = K;
          if (A(P + 2) == 2)
            P = P + 3;
          else
            Noapp();
        } else {
          Topnd = 0;
          Topnd.Ptype = Aheadpt;
          Topnd.Flag = Dname;
          Topnd.D = Fname;
          Caname(Z, Arr, Topnd);
          Nam = 0;
        }
        Nameop(Z, Bytes(Prec), Namep);
        goto Chken;
      Chken:
        while (A(P) == 1) {
          Fault(69, Fromar2(P + 1), Fname);
          Outsym('_');
          Outname(Fromar2(P + 1));
          P = P + 3;
          Skipapp();
        }
        P = P + 1;
        goto Sw_skip;
      Sw_default:
        fprintf(stderr, "Switch label 'Sw(%d):' not set in %s", Sw_sw,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      Sw_skip:;
        goto S_skip;
      S_default:
        fprintf(stderr, "Switch label 'S(%d):' not set in %s", S_sw + 11,
                __PRETTY_FUNCTION__);
        exit(1) /* or %signal ... */;
      S_skip:;
      }
      void Nameop(int Z, int Size, int Namep) {}
      void Crcall(int Rtname) {
        int Ii;
        int Iii;
        int Qqq;
        int Jj;
        int Jjj;
        int Nparms;
        int Pt;
        int Lp;
        int Psize;
        int Twsp;
        int Parmno;
        int Errno;
        int Fptr;
        int Typep;
        int Precp;
        int Namp;
        int Tl;
        int Clink;
        int Pspeced;
        int Outp;
        int Pptype;
        int Dvd;
        int Dvdp;
        int Lb;
        int Kk;
        Rd Opnd;
        Rd Opnd1;
        Rd Opnd2;
        Listf *Lcell;
        Pt = Ptype;
        Jjj = J;
        Tl = Oldi;
        Twsp = 0;
        Fptr = 0;
        Lp = I;
        Clink = K;
        Typep = Type;
        Precp = Prec;
        Namp = Nam;
        if (Clink == 0)
          Pspeced = 0;
        else
          Pspeced = Aslist(Clink).S3 & 255;
        {
          int Arp[Pspeced + 1];
          static int Fpd_sw;
          static void *Fpd[4 /*0:3*/] = {
              &&Fpd_0,
              &&Fpd_1,
              &&Fpd_2,
              &&Fpd_3,
          };
          P = P + 2;
          Nparms = 0;
          while (A(P) == 1) {
            P = P + 1;
            if (Nparms < Pspeced)
              if (Paramsbwards == Yes)
                Arp(Pspeced - Nparms) = P;
              else
                Arp(Nparms + 1) = P;
            Nparms = Nparms + 1;
            Skipexp();
          }
          Outp = P;
          if (Pspeced != Nparms) {
            if (Pspeced == 0)
              Errno = 17;
            else if (Nparms < Pspeced)
              Errno = 18;
            else
              Errno = 19;
            Fault(Errno, Imod(Pspeced - Nparms), Rtname);
            Skipapp();
            P = P - 1;
            Nameopnd = 0;
            Nameopnd.Ptype = 0x51;
            goto Over;
          }
          Ii = Unametrip(Precl, Pt & 255, 0, Rtname);
          Parmno = 0;
          Outsym('(');
          goto Firstparm;
        Badparm:;
          if (Paramsbwards == Yes)
            Ii = Pspeced - Parmno + 1;
          else
            Ii = Parmno;
          Fault(22, Ii, Rtname);
        Nextparm:
          Clink = Lcell->Link;
          if (Clink != 0) Outsym(',');
        Firstparm:
          if (Clink == 0) goto Entryseq;
          Lcell = &Aslist(Clink);
          Psize = Lcell->Acc & 0xFFFF;
          Parmno = Parmno + 1;
          P = Arp(Parmno);
          Ptype = Lcell->Ptype;
          Unpack();
          Ii = Type;
          Iii = Prec;
          Jj = (Nam << 1 | Arr) & 3;
          if ((Jj != 0 || Rout != 0) && Jj != 2 &&
              (A(P + 3) != 4 || A(P + 4) != 1 ||
               A(P + Fromar2(P + 1) + 1) != 2))
            goto Badparm;
          Opnd.Ptype = Ptype;
          Opnd.Flag = Dname;
          Opnd.D = Rtname;
          Opnd.Xtra = Parmno << 24 | Clink;
          if (Rout == 1) {
            Ii = Ptype;
            P = P + 5;
            Cname(13);
            if ((Ii & 255) != (Ptype & 255)) goto Badparm;
            P = P + 1;
            Fptr = Fptr + Rtparamsize;
            goto Nextparm;
          }
          goto *Fpd[Fpd_sw = Jj];
        Fpd_0:;
          if (Type == 3) {
            Ii = Tsexp(Iii);
            if (Ii == 1 && Iii == 0)
              goto Badparm;
            else {
              P = Arp(Parmno);
              if (A(P + 3) != 4 || A(P + 4) != 1 ||
                  A(P + Fromar2(P + 1) + 1) != 2)
                goto Badparm;
              P = P + 5;
              Cname(6);
              P = P + 1;
              Jj = 1;
              Expopnd = Nameopnd;
              if (Acc != Psize) goto Badparm;
            }
            Fptr = Fptr + Psize;
            if (Target == Emas) Fptr = Fptr + 8;
          } else if (Type == 5)
            if (Strvalinwa == Yes) {
              Cstrexp(0);
              Push(Twsp, Value, 0, 0);
              Fptr = Fptr + Ptrsize(0x35);
              Pptype = 0x51;
              if (Ptrsize(0x35) > 4) Pptype = 0x61;
              Opnd1 = 0;
              Opnd2 = 0;
              Opnd2.Flag = Sconst;
              Opnd2.Ptype = 0x51;
              Opnd2.D = Lcell->Acc - 1;
              Opnd1.Flag = Localir;
              Opnd1.Ptype = 0x35;
              Opnd1.D = Rbase << 16 | Value;
              Opnd1.Flag = Reftrip;
              Opnd1.Ptype = Pptype;
              goto Nextparm;
            } else {
              Cstrexp(0);
              Fptr = Fptr + Acc;
            }
          else {
            Csexp(Iii << 4 | Ii);
            Fptr = Fptr + Bytes(Iii);
          }
          Fptr = (Fptr + Minparamsize - 1) & (-Minparamsize);
          goto Nextparm;
        Fpd_2:;
          Pptype = 0x51;
          if (Ptrsize(Ptype & 255) > 4) Pptype = 0x61;
          if (Ii != 0) {
            Qqq = 0;
            if (A(P + 3) == 4 && A(P + 4) == 1 &&
                A(P + Fromar2(P + 1) + 1) == 2) {
              P = P + 5;
              Reducetag(Yes);
              if (Ii == Type && Iii == Prec && (Litl != 1 || Nam != 0) &&
                  (Rout == 0 || Nam == 2))
                Qqq = 1;
              else
                P = P - 5;
            }
            if (Qqq != 0)
              Cname(3);
            else {
              if (Jjj != 14 && Lp != 0) goto Badparm;
              if (Ii == 3) goto Badparm;
              if (Ii == 5) {
                Cstrexp(0);
                Push(Twsp, Value, 0, 0);
                Qqq = Value;
                Opnd2.D = 255;
              } else {
                Getwsp(Qqq, Bytes(Iii) >> 2);
                Csexp(Lcell->Ptype & 255);
                Opnd2.D = Bytes(Iii);
              }
              Opnd2.Flag = Sconst;
              Opnd2.Ptype = 0x51;
              Opnd1.Flag = Localir;
              Opnd1.Ptype = Lcell->Ptype & 255;
              Opnd1.D = Rbase << 16 | Qqq;
              Opnd1.Xtra = 268;
              if (Ii != 5) Nameopnd.Flag = Reftrip;
              Nameopnd.Ptype = Pptype;
              Nameopnd.D = Qqq;
            }
            Jj = Ptrsize(Iii << 4 | Ii);
            Fptr = Fptr + Jj;
          } else {
            if (A(P + 3) != 4 || A(P + 4) != 1 ||
                A(P + 1 + Fromar2(P + 1)) != 2)
              goto Badparm;
            P = P + 5;
            Fname = Fromar2(P);
            Reducetag(No);
            Opnd2.Ptype = 0x51;
            Opnd2.Flag = Sconst;
            Opnd2.D = Acc << 16 | Ptype;
            Opnd2.Xtra = 0;
            if (Type == 0) {
              Nameopnd.Ptype = Ptype;
              Nameopnd.Flag = Dname;
              Nameopnd.D = Fname;
              Nameopnd.Xtra = 0x80000000;
            } else if (Nam != 0 && Type == 5)
              Cname(3);
            else
              Cname(4);
            Expopnd.Ptype = 0x61;
            Expopnd.Flag = Reftrip;
            Expopnd.Xtra = 0;
            Fptr = Fptr + Ptrsize(0);
          }
          P = P + 1;
          goto Nextparm;
        Fpd_1:;
        Fpd_3:;
          P = P + 5;
          Reducetag(No);
          Dvd = Sndisp;
          if (Dvd != 0) Outsym('&');
          Cname(12);
          P = P + 1;
          if (1 > Arr || Arr > 2 || Ii != Type || Iii != Prec) goto Badparm;
          Qqq = Aslist(Tcell).Uioj & 15;
          Jj = Lcell->Uioj & 15;
          if (Jj == 0) {
            Jj = Qqq;
            Lcell->Uioj = Lcell->Uioj | Jj;
          }
          if (Qqq == 0) {
            Qqq = Jj;
            Aslist(Tcell).Uioj = Aslist(Tcell).Uioj | Jj;
          }
          if (Jj != Qqq) goto Badparm;
          if (Dvd != 0) {
            Dvdp = Dvd + 3 * Jj;
            for (Kk = Jj; Kk >= 1; Kk--) {
              Lb = Ctable(Dvdp);
              Outsym('[');
              if (Lb == 0x80000000) {
                Outstring(_imp_str_literal("-("));
                P = Ctable(Dvdp + 1);
                Csexp(0x51);
                Outsym(')');
              } else if (Lb > 0) {
                Outsym('-');
                Outint(Lb);
              } else if (Lb <= 0)
                Outint(-Lb);
              Outstring(_imp_str_literal("] "));
              Dvdp = Dvdp - 3;
            }
          }
          Fptr = Fptr + Aheadsize;
          goto Nextparm;
        Entryseq:;
          Outsym(')');
          while (Twsp > 0) {
            Pop(Twsp, Qqq, Jj, Iii);
            Returnwsp(Qqq, 268);
          }
          if (Strresinwa == Yes && Namp <= 1 && (Typep == 3 || Typep == 5)) {
            Getwsp(Qqq, 268);
            Opnd2.Ptype = Pt;
            Opnd2.Flag = Localir;
            Opnd2.D = Rbase << 16 | Qqq;
            Opnd2.Xtra = 268;
            Opnd.Ptype = Pt;
            Opnd.Flag = Dname;
            Opnd.D = Rtname;
            Opnd.Xtra = (Pspeced + 1) << 24;
            Fptr = Fptr + Ptrsize(0x35);
          }
          Ii = Unametrip(Rcall, Pt & 255, 0, Rtname);
          Triples(Ii).Opnd1.Xtra = Fptr;
          Currinf->Nmdecs = Currinf->Nmdecs | 2;
          Rout = 1;
          Type = Typep;
          Nam = Namp;
          Prec = Precp;
          Ptype = Pt;
          if ((Pt & 255) != 0) {
            if (Nam >= 2)
              Ii = Rcrmr;
            else
              Ii = Rcrfr;
            Ii = Unametrip(Ii, Pt & 255, 0, Rtname);
            if (Strresinwa == Yes) Triples(Ii).Opnd1.Xtra = Qqq;
            Nameopnd.Ptype = Pt & 255;
            Nameopnd.Flag = Reftrip;
            Nameopnd.D = Ii;
            Nameopnd.Xtra = 0;
          }
        Over:
          P = Outp;
        }
      }
      int Tsexp(int Value) {
        static int Sw_sw;
        static void *Sw[3 /*1:3*/] = {
            &&Sw_1,
            &&Sw_2,
            &&Sw_3,
        };
        int Pp;
        int Kk;
        int Sign;
        int Ct;
        Type = 1;
        Pp = P;
        P = P + 3;
        Sign = A(P);
        if (Sign != 4 && A(P + 1) != 2) goto Typed;
        goto *Sw[Sw_sw = (A(P + 1)) - 1];
      Sw_1:;
        P = P + 2;
        Reducetag(No);
        if ((Ptype & 0xff0f) == 0x4001)
          if (A(P + 2) == 2 && A(P + 3) == 2 && A(P + 4) == 2) {
            Value = Midcell;
            P = P + 5;
            if (Sign != 2) return (2);
            Value = -Value;
            return (-2);
          }
        goto Typed;
      Sw_2:;
        Ct = A(P + 2);
        Type = Ct & 7;
        if (Ct != 0x41 || Sign == 3) goto Typed;
        Kk = Fromar2(P + 3);
        if (A(P + 5) != 2) goto Typed;
        Value = Kk;
        P = P + 6;
        if (Sign != 2) return (1);
        Value = -Value;
        return (-1);
      Sw_3:;
      Typed:
        P = Pp;
        return (0);
      }
      int Tsc(void) {
        int Value;
        int Res;
        int Pp;
        static int Sw_sw;
        static void *Sw[4 /*1:4*/] = {
            &&Sw_1,
            &&Sw_2,
            &&Sw_3,
            &&Sw_4,
        };
        Pp = P;
        goto *Sw[Sw_sw = (A(P)) - 1];
      Sw_1:;
        P = P + 1;
        Res = Tsexp(Value);
        if (Res == 0) return (0);
        P = P + 1;
        Res = Tsexp(Value);
        if (Res == 0) return (0);
        P = P + 1;
        if (A(P - 1) == 1) return (0);
        return (1);
      Sw_2:;
        P = P + 1;
        Res = Tcond;
        return (Res);
      Sw_3:;
        P = P + 1;
        return (Tsc);
      Sw_4:;
        return (Tsexp(Value));
      }
      int Tcond(void) {
        int Value;
        int Res;
        int Pp;
        Pp = P;
        Res = Tsc;
        if (Res == 0) return (0);
        if (A(P) == 3) {
          P = P + 1;
          return (1);
        }
        do {
          P = P + 1;
          Res = Tsc;
          if (Res == 0) return (0);
        } while (A(P) != 2);
        P = P + 1;
        return (1);
      }
      void Skipexp(void) {
        int Optype;
        int Pin;
        int J;
        int Precp;
        Pin = P;
        P = P + 3;
        for (;;) {
          Optype = A(P + 1);
          P = P + 2;
          if (Optype == 0 || Optype > 3) Impabort();
          if (Optype == 3) Skipexp();
          if (Optype == 2) {
            J = A(P) & 7;
            if (J == 5)
              P = P + A(P + 1) + 2;
            else {
              Precp = A(P) >> 4;
              if (Precp == 3) Precp = 4;
              P = P + 1 + Bytes(Precp);
            }
          }
          if (Optype == 1) {
            P = P - 1;
            do {
              P = P + 3;
              Skipapp();
            } while (A(P) != 2);
            P = P + 1;
          }
          P = P + 1;
          if (A(P - 1) == 2) break;
        }
      }
      void Skipapp(void) {
        int Pin;
        Pin = P;
        while (A(P) == 1) {
          P = P + 1;
          Skipexp();
        }
        P = P + 1;
      }
      void Noapp(void) {
        P = P + 2;
        if (A(P) == 1) {
          Fault(17, 0, Fromar2(P - 2));
          Outsym('[');
          while (A(P) == 1) {
            P = P + 1;
            Csexp(0x51);
            if (A(P) == 1) Outsym(',');
          }
          P = P + 1;
          Outsym(']');
        } else
          P = P + 1;
      }
      void Testapp(int Num) {
        int Pp;
        int Q;
        Q = 0;
        Pp = P;
        P = P + 2;
        while (A(P) == 1) {
          P = P + 1;
          Q = Q + 1;
          Skipexp();
        }
        P = Pp;
        Num = Q;
      }
      void Setline(void) {
        int I;
        int Offset;
        if (Rlevel == 0) return;
        Offset = Currinf->Diaginf + 2;
        if (Target == Orn || (1 << Target & Riskmc) != 0) Offset = Offset + 2;
        I = Uconsttrip(Sline, 0x41, 0, Line << 16 | Offset);
        if (Parm.Prof != 0) I = Profaad + 4 + 4 * Line;
      }
      void Storetag(int Kk, int Level, int Rbase, int J, int Sndisp, int Acc,
                    int Slink, int Kform) {
        int Q;
        int I;
        int Tcell;
        Tagf *Lcell;
        Tcell = Tags(Kk);
        Q = Level << 8 | Rbase << 4 | J;
        if ((Kform | Acc) >> 16 != 0) Impabort();
        Lcell = &Aslist(Tcell);
        if ((Lcell->Uioj >> 8 & 63) == Level || Kk == Currinf->M - 1) {
          Lcell->Uioj = Lcell->Uioj & 0xC000 | Q;
        } else {
          I = Asl;
          if (I == 0) I = Morespace;
          Lcell = &Aslist(I);
          Asl = Lcell->Link;
          Lcell->Link = Tcell | Currinf->Names << 18;
          Lcell->Uioj = Q;
          Tags(Kk) = I;
          Currinf->Names = Kk;
        }
        Lcell->Ptype = Ptype;
        Lcell->Acc = Acc;
        Lcell->Sndisp = Sndisp;
        Lcell->Kform = Kform;
        Lcell->Slink = Slink;
      }
      void Copytag(int Tname, int Declare) {
        Tagf *Lcell;
        Tcell = Tags(Tname);
        if (Tcell == 0) {
          Type = 7;
          Ptype = 0x57;
          Prec = 5;
          if (Declare == Yes) {
            Fault(16, 0, Tname);
            Storetag(Tname, Level, Rbase, 0, 0, 4, N, 0);
            N = N + 4;
            Copytag(Tname, No);
            return;
          }
          Rout = 0;
          Nam = 0;
          Arr = 0;
          Litl = 0;
          Acc = 4;
          I = -1;
          J = -1;
          K = -1;
          Oldi = -1;
          Kform = -1;
        } else {
          Lcell = &Aslist(Tcell);
          Ptype = Lcell->Ptype & 0xFFFF;
          Usebits = Lcell->Uioj >> 14 & 3;
          Oldi = Lcell->Uioj >> 8 & 63;
          I = Lcell->Uioj >> 4 & 15;
          J = Lcell->Uioj & 15;
          Lcell->Uioj = Lcell->Uioj | 0x8000;
          Midcell = Lcell->S2;
          Sndisp = Lcell->Sndisp & 0xFFFF;
          Acc = Lcell->Acc & 0xFFFF;
          K = Lcell->Slink & 0xFFFF;
          Kform = Lcell->Kform;
          Litl = Ptype >> 14 & 3;
          Rout = Ptype >> 12 & 3;
          Nam = Ptype >> 10 & 3;
          Arr = Ptype >> 8 & 3;
          Prec = Ptype >> 4 & 15;
          Type = Ptype & 15;
        }
      }
      void Reducetag(int Declare) {
        int Subs;
        int Qq;
        int Pp;
        Copytag(Fromar2(P), Declare);
        if (Ptype == Snpt) {
          Ptype = Acc;
          Unpack();
          if (K == 42)
            Acc = 256;
          else if (K == 48)
            Acc = 0x7fff;
          else
            Acc = Bytes(Prec);
        }
        if (Type == 3) {
          Pp = P;
          Qq = Copyrecordtag(Subs);
          P = Pp;
        }
      }
      void Unpack(void) {
        Litl = Ptype >> 14;
        Rout = Ptype >> 12 & 3;
        Nam = Ptype >> 10 & 3;
        Arr = Ptype >> 8 & 3;
        Prec = Ptype >> 4 & 15;
        Type = Ptype & 15;
      }
      void Pack(int Ptype) {
        Ptype = (((((Litl & 3) << 2 | Rout & 3) << 2 | Nam & 3) << 2 | Arr & 3)
                     << 4 |
                 Prec & 15)
                    << 4 |
                Type & 15;
      }
    }
    int Newtrip(void) {
      Tripf *Currt;
      int I;
      Currt = &Triples(Nexttrip);
      I = Nexttrip;
      if (I >= Worka.Lasttrip) I = 1;
      Nexttrip = I + 1;
      Currt = 0;
      Currt->Blink = Triples(0).Blink;
      Triples(0).Blink = I;
      Triples(Currt->Blink).Flink = I;
      return (I);
    }
    int Uconsttrip(int Opern, int Optype, int Flags, int Const) {
      Tripf *Currt;
      int Cell;
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1.Ptype = 0x51;
      Currt->Opnd1.D = Const;
      return (Cell);
    }
    int Ulconsttrip(int Opern, int Optype, int Flags, int Const1, int Const2) {
      Tripf *Currt;
      int Cell;
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1.Ptype = 0x61;
      Currt->Opnd1.D = Const1;
      Currt->Opnd1.Xtra = Const2;
      return (Cell);
    }
    int Unametrip(int Opern, int Optype, int Flags, int Name) {
      Tagf *Taginf;
      Tripf *Currt;
      int Cell;
      Taginf = &Aslist(Tags(Name));
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1.Ptype = Taginf->Ptype;
      Currt->Opnd1.Flag = Dname;
      Currt->Opnd1.D = Name;
      Currt->Opnd1.Xtra = 0;
      return (Cell);
    }
    int Utemptrip(int Opern, int Optype, int Flags, int Temp) {
      int Cell;
      Tripf *Currt;
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1.Ptype = Optype;
      Currt->Opnd1.Flag = Localir;
      Currt->Opnd1.D = Temp;
      return (Cell);
    }
    void Keepusecount(Rd Opnd) {
      Tripf *Reft;
      Reft = &Triples(Opnd.D);
      if (Reft->Cnt == 0) Reft->Puse = Triples(0).Blink;
      Reft->Cnt = Reft->Cnt + 1;
    }
    int Urectrip(int Opern, int Optype, int Flags, Rd Opnd1) {
      int Cell;
      Tripf *Currt;
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1 = Opnd1;
      if ((1 << Opnd1.Flag & Btrefmask) != 0) Keepusecount(Opnd1);
      return (Cell);
    }
    int Brectrip(int Opern, int Optype, int Flags, Rd Opnd1, Rd Opnd2) {
      int Cell;
      Tripf *Currt;
      Cell = Newtrip;
      Currt = &Triples(Cell);
      Currt->Opern = Opern;
      Currt->Optype = Optype;
      Currt->Flags = Flags;
      Currt->Opnd1 = Opnd1;
      Currt->Opnd2 = Opnd2;
      if ((1 << Opnd1.Flag & Btrefmask) != 0) Keepusecount(Opnd1);
      if ((1 << Opnd2.Flag & Btrefmask) != 0) Keepusecount(Opnd2);
      return (Cell);
    }
    void Getwsp(int Place, int Size) {
      int J;
      int K;
      int L;
      int F;
      F = Size >> 31;
      Size = Size << 1 >> 1;
      if (Size > 4) Size = 0;
      Pop(Currinf->Avlwsp(Size), J, K, L);
      if (K <= 0) {
        if (Size == 4)
          L = Rnding(128 + 0x72);
        else if (Size == 2)
          L = Rnding(128 + 0x62);
        else
          L = 3;
        N = (N + L) & (~L);
        K = N;
        if (Size == 0)
          N = N + 268;
        else
          N = N + (Size << 2);
      }
      Place = K;
      if (F == 0) Push(Twsphead, K, Size, 0);
    }
    void Returnwsp(int Place, int Size) {
      int Cell;
      if (Place > N || (Place & 1) != 0) Impabort();
      if (Size > 4) Size = 0;
      Cell = Currinf->Avlwsp(Size);
      while (Cell > 0) {
        if (Aslist(Cell).S2 == Place) Impabort();
        Cell = Aslist(Cell).Link;
      }
      if (Place < 511)
        Push(Currinf->Avlwsp(Size), 0, Place, 0);
      else
        Insertatend(Currinf->Avlwsp(Size), 0, Place, 0);
    }
    void Reusetemps(void) {
      int Jj;
      int Kk;
      int Qq;
      while (Twsphead != 0) {
        Pop(Twsphead, Jj, Kk, Qq);
        Returnwsp(Jj, Kk);
      }
    }
    int Fromar2(int Ptr) { return (A(Ptr) << 8 | A(Ptr + 1)); }
    int Fromar4(int Ptr) {
      int I;
      Movebytes(4, Addr(A(0)), Ptr, Addr(I), 0);
      return (I);
    }
  P2end:;
  }
}
