#include <imp_perms.h>

int _imp_mainep(int _imp_argc, char **_imp_argv) {
  const int RELEASE = 10;

  const int YES = 1;
  const int NO = 0;
  const int USEIMP = YES;

  const int VMEB = NO;

  const _imp_string LADATE = "28 Jan 81";
  // LASTALTERED

  int I;
  int J;
  int K;
  // PRODUCEDBYOLDPSFROMNRIMPPS8ON16/12/80

  const char CLETT[(500) - (0) + 1] = 1,
      43, 1, 45, 1, 40, 1, 41, 1, 44, 2, 201, 198, 6, 213, 206, 204, 197, 211,
      211, 5, 215, 200, 201, 204, 197, 5, 213, 206, 212, 201, 204, 3, 198, 207,
      210, 1, 61, 4, 210, 197, 193, 204, 7, 201, 206, 212, 197, 199, 197, 210,
      8, 204, 207, 206, 199, 210, 197, 193, 204, 4, 204, 207, 206, 199, 11, 194,
      217, 212, 197, 201, 206, 212, 197, 199, 197, 210, 6, 211, 212, 210, 201,
      206, 199, 11, 200, 193, 204, 198, 201, 206, 212, 197, 199, 197, 210, 7,
      210, 207, 213, 212, 201, 206, 197, 2, 198, 206, 3, 205, 193, 208, 8, 198,
      213, 206, 195, 212, 201, 207, 206, 6, 210, 197, 195, 207, 210, 196, 4,
      206, 193, 205, 197, 5, 193, 210, 210, 193, 217, 9, 193, 210, 210, 193,
      217, 206, 193, 205, 197, 9, 207, 198, 208, 210, 207, 199, 210, 193, 205,
      6, 207, 198, 198, 201, 204, 197, 6, 207, 198, 204, 201, 211, 212, 6, 198,
      207, 210, 205, 193, 212, 4, 211, 208, 197, 195, 3, 206, 207, 212, 3, 193,
      206, 196, 2, 207, 210, 1, 58, 6, 206, 207, 210, 205, 193, 204, 3, 207,
      215, 206, 8, 197, 216, 212, 197, 210, 206, 193, 204, 9, 197, 216, 212,
      210, 201, 206, 211, 201, 195, 8, 195, 207, 206, 211, 212, 193, 206, 212,
      5, 195, 207, 206, 211, 212, 5, 197, 214, 197, 206, 212, 5, 211, 212, 193,
      210, 212, 9, 212, 200, 197, 206, 211, 212, 193, 210, 212, 4, 212, 200,
      197, 206, 9, 197, 204, 211, 197, 211, 212, 193, 210, 212, 4, 197, 204,
      211, 197, 1, 95, 6, 211, 217, 211, 212, 197, 205, 7, 196, 217, 206, 193,
      205, 201, 195, 2, 42, 61, 1, 42, 4, 80, 85, 84, 95, 5, 67, 78, 79, 80, 95,
      2, 204, 61, 1, 60, 1, 62, 4, 40, 196, 210, 43, 2, 196, 210, 1, 194, 3,
      212, 207, 211, 3, 204, 206, 194, 3, 216, 206, 194, 2, 208, 195, 3, 195,
      212, 194, 2, 45, 62, 6, 210, 197, 212, 213, 210, 206, 6, 210, 197, 211,
      213, 204, 212, 7, 205, 207, 206, 201, 212, 207, 210, 4, 211, 212, 207,
      208, 6, 211, 201, 199, 206, 193, 204, 4, 197, 216, 201, 212, 8, 195, 207,
      206, 212, 201, 206, 213, 197, 6, 198, 201, 206, 201, 211, 200, 5, 195,
      217, 195, 204, 197, 6, 210, 197, 208, 197, 193, 212, 3, 197, 206, 196, 5,
      210, 197, 193, 204, 211, 5, 194, 197, 199, 201, 206, 2, 207, 206, 6, 211,
      215, 201, 212, 195, 200, 4, 204, 201, 211, 212, 7, 211, 208, 197, 195,
      201, 193, 204, 14, 212, 210, 213, 211, 212, 197, 196, 208, 210, 207, 199,
      210, 193, 205, 6, 205, 193, 201, 206, 197, 208, 7, 195, 207, 206, 212,
      210, 207, 204, 7, 201, 206, 195, 204, 213, 196, 197;

  const int SYMBOL[(2213) - (1300) + 1] = 1307,
      1303, 0, 1305, 2, 1307, 1000, 1319, 1312, 1001, 1357, 1824, 1315, 1003,
      1020, 1319, 4, 1336, 6, 1329, 1323, 1001, 1014, 1325, 1003, 1329, 4, 1329,
      6, 1336, 1336, 1010, 1028, 1319, 1011, 1350, 1343, 1343, 1010, 1028, 1307,
      1011, 1343, 1350, 1348, 1026, 1307, 999, 1350, 1000, 1357, 1355, 1026,
      1319, 999, 1357, 1000, 1365, 1363, 4, 1336, 1365, 6, 1365, 1000, 1372,
      1370, 8, 1336, 999, 1372, 1000, 1377, 1375, 10, 1377, 13, 1401, 1384, 20,
      1010, 1542, 1562, 1011, 1390, 26, 1010, 1542, 1562, 1011, 1401, 32, 1010,
      1001, 36, 1336, 8, 1336, 8, 1336, 1011, 1408, 1406, 8, 1001, 999, 1408,
      1000, 1415, 1411, 38, 1413, 43, 1415, 51, 1430, 1418, 43, 1420, 38, 1423,
      60, 1408, 1425, 65, 1428, 77, 1925, 1430, 84, 1437, 1433, 96, 1437, 1031,
      1415, 1437, 1444, 1440, 104, 1442, 107, 1444, 111, 1466, 1450, 1415, 1476,
      1001, 1401, 1456, 120, 1466, 127, 1001, 1401, 1462, 1430, 1471, 1001,
      1401, 1483, 1466, 127, 1001, 1401, 1471, 1469, 132, 1471, 1000, 1476,
      1474, 127, 1476, 1000, 1483, 1479, 138, 1481, 127, 1483, 1000, 1493, 1491,
      4, 1010, 1444, 1011, 1493, 6, 1493, 1000, 1502, 1500, 1030, 1010, 1444,
      1011, 999, 1502, 1000, 1513, 1506, 148, 1016, 1508, 158, 1511, 165, 1018,
      1513, 1016, 1518, 1516, 172, 1518, 1000, 1542, 1526, 172, 1001, 4, 1876,
      1869, 6, 1535, 179, 1010, 1001, 1818, 1011, 4, 1001, 6, 1542, 1010, 1615,
      1011, 4, 1001, 6, 1556, 1548, 1336, 1032, 1336, 1556, 1553, 4, 1542, 1562,
      6, 1556, 184, 1542, 1562, 1560, 1037, 1336, 1562, 1000, 1573, 1567, 188,
      1542, 1573, 1571, 192, 1542, 1580, 1573, 1000, 1580, 1578, 188, 1542, 999,
      1580, 1000, 1587, 1585, 192, 1542, 999, 1587, 1000, 1595, 1591, 1033,
      1336, 1593, 195, 1595, 1000, 1601, 1599, 179, 1008, 1601, 1015, 1606,
      1604, 60, 1606, 197, 1615, 1613, 8, 1336, 195, 1336, 1606, 1615, 1000,
      1624, 1620, 1476, 1001, 1401, 1624, 132, 1513, 1624, 1630, 1630, 1001,
      1401, 1832, 1630, 1636, 1634, 8, 1624, 1636, 1000, 1652, 1646, 1476, 1010,
      1001, 1401, 1840, 1011, 1652, 1006, 1652, 132, 1513, 1001, 1832, 1701,
      1663, 1661, 8, 1010, 1001, 1401, 1840, 1011, 1652, 1663, 1000, 1674, 1666,
      204, 1668, 208, 1670, 217, 1672, 227, 1674, 236, 1701, 1678, 1415, 1636,
      1689, 120, 1476, 1010, 1001, 1401, 1011, 4, 1001, 6, 1006, 1701, 120, 132,
      1513, 1010, 1001, 1832, 1011, 4, 1001, 6, 1006, 1711, 1709, 36, 1028,
      1319, 1350, 1722, 1711, 1711, 1000, 1722, 1720, 8, 1012, 1028, 1319, 1350,
      1722, 999, 1722, 1000, 1731, 1729, 4, 1028, 1319, 1350, 6, 1731, 1000,
      1738, 1736, 8, 1009, 999, 1738, 1000, 1743, 1741, 242, 1743, 1000, 1749,
      1747, 8, 1336, 1749, 1000, 1762, 1760, 8, 1001, 1401, 4, 1336, 195, 1336,
      6, 999, 1762, 1000, 1769, 1767, 26, 1542, 1562, 1769, 1000, 1782, 1772,
      1019, 1774, 1006, 1779, 1372, 1542, 1562, 1006, 1782, 1377, 1006, 1795,
      1786, 248, 1034, 1789, 254, 1034, 1795, 264, 1010, 2060, 1011, 1801, 1801,
      1799, 188, 2060, 1801, 1000, 1818, 1805, 269, 1034, 1813, 279, 1372, 1010,
      1542, 1562, 1011, 1782, 1816, 279, 2060, 1818, 1000, 1824, 1822, 284,
      1001, 1824, 1000, 1832, 1830, 284, 1001, 1357, 1824, 1832, 1000, 1840,
      1840, 4, 1336, 195, 1336, 1606, 6, 1848, 1846, 36, 1028, 1319, 1350, 1848,
      1000, 1858, 1852, 286, 1013, 1854, 208, 1856, 293, 1858, 1000, 1869, 1867,
      1001, 36, 1336, 8, 1336, 8, 1336, 1869, 1000, 1876, 1874, 8, 1876, 999,
      1876, 1000, 1916, 1882, 1415, 1476, 1001, 1401, 1889, 1415, 132, 1001,
      1401, 1832, 1916, 1895, 120, 1466, 127, 1001, 1401, 1904, 120, 1010, 1001,
      1401, 1011, 4, 1001, 6, 1916, 120, 132, 1010, 1001, 1401, 1832, 1916,
      1011, 4, 1001, 6, 1925, 1923, 8, 1001, 1401, 1832, 999, 1925, 1000, 1932,
      1930, 4, 1009, 6, 1932, 1000, 1950, 1936, 301, 1001, 1939, 304, 1001,
      1942, 306, 1002, 1945, 1022, 1950, 1950, 311, 1009, 8, 1009, 1964, 1954,
      1023, 1964, 1959, 1024, 317, 2003, 2008, 1964, 1025, 1005, 8, 1987, 1987,
      1969, 320, 1001, 322, 1971, 2036, 1976, 4, 2036, 2025, 6, 1980, 324, 2036,
      6, 1985, 4, 329, 2025, 6, 1987, 332, 2003, 1992, 320, 1001, 322, 1994,
      2036, 1999, 4, 329, 2025, 6, 2003, 324, 1005, 6, 2008, 2006, 329, 2008,
      1005, 2016, 2014, 8, 1005, 8, 1005, 2016, 1000, 2025, 2020, 0, 1005, 2023,
      2, 1005, 2025, 1000, 2031, 2029, 0, 332, 2031, 1000, 2036, 2034, 36, 2036,
      1000, 2051, 2041, 2031, 1300, 1003, 2044, 1001, 2016, 2049, 4, 2051, 2016,
      6, 2051, 334, 2060, 2054, 338, 2056, 342, 2058, 346, 2060, 349, 2093,
      2069, 1010, 1001, 1357, 1824, 1011, 1587, 1795, 2073, 353, 1001, 1357,
      2075, 356, 2079, 363, 1033, 1336, 2082, 370, 1795, 2084, 378, 2089, 383,
      1738, 1009, 1743, 2091, 390, 2093, 395, 2214, 2100, 1027, 1010, 2060,
      1011, 1769, 2102, 1007, 2110, 1372, 1010, 1542, 1562, 1011, 1782, 1006,
      2115, 404, 1035, 1801, 1006, 2120, 411, 1029, 1858, 1006, 2125, 417, 1036,
      1762, 1006, 2130, 1377, 411, 1029, 1006, 2136, 1031, 1008, 1415, 1615,
      1006, 2140, 424, 1502, 1006, 2144, 120, 1518, 1006, 2153, 1010, 1848,
      1430, 1011, 1595, 1001, 1483, 1006, 2156, 1663, 1674, 2160, 428, 1601,
      1006, 2164, 434, 1015, 1006, 2173, 440, 1021, 1738, 1009, 1731, 248, 1034,
      1006, 2184, 443, 1001, 1401, 4, 1336, 195, 1336, 6, 1749, 1006, 2188, 450,
      1006, 1017, 2193, 455, 127, 1001, 1006, 2197, 304, 1932, 1006, 2200, 463,
      1006, 2204, 478, 1001, 1006, 2208, 485, 1003, 1006, 2212, 493, 1003, 1038,
      2214, 1006;

  const int SS = 2093;
  //

  const char ITOETAB[(127) - (0) + 1] = X '40',
      0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x15, 0x40, 0x0C,
      0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
      0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x4F, 0x7F, 0x7B, 0x5B,
      0x6C, 0x50, 0x7D, 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, 0xF0,
      0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0x7A, 0x5E, 0x4C,
      0x7E, 0x6E, 0x6F, 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,
      0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xE2, 0xE3,
      0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0x4A, 0x5F, 0x5A, 0x6A, 0x6D, 0x7C,
      0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93,
      0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
      0xA8, 0xA9, 0xC0, 0x40, 0xD0, 0x40, 0x40;

  const int OPC[(126) - (0) + 1] = 0,
      ' JCC', ' JAT', ' JAF',
      [LOW... HIGH] = 0, ' VAL', ' CYD', 'INCA', 'MODD', 'PRCL', '   J', ' JLK',
              'CALL', ' ADB', ' SBB', 'DEBJ', ' CPB', ' SIG', ' MYB', ' VMY',
              'CPIB', ' LCT', 'MPSR', 'CPSR', 'STCT', 'EXIT', 'ESEX', ' OUT',
              ' ACT', '  SL', 'SLSS', 'SLSD', 'SLSQ', '  ST', 'STUH', 'STXN',
              'IDLE', ' SLD', ' SLB', 'TDEC', 'INCT', ' STD', ' STB', 'STLN',
              'STSF', '   L', ' LSS', ' LSD', ' LSQ', 'RRTC', ' LUH', 'RALN',
              ' ASF', 'LDRL', ' LDA', 'LDTB', ' LDB', '  LD', '  LB', ' LLN',
              ' LXN', ' TCH', 'ANDS', ' ORS', 'NEQS', 'EXPA', ' AND', '  OR',
              ' NEQ', '  PK', ' INS', 'SUPK', ' EXP', 'COMA', ' DDV', 'DRDV',
              'DMDV', 'SWEQ', 'SWNE', ' CPS', ' TTR', ' FLT', ' IDV', 'IRDV',
              'IMDV', ' MVL', '  MV', 'CHOV', ' COM', ' FIX', ' RDV', 'RRDV',
              'RDVD', ' UAD', ' USB', 'URSB', ' UCP', ' USH', ' ROT', ' SHS',
              ' SHZ', ' DAD', ' DSB', 'DRSB', ' DCP', ' DSH', ' DMY', 'DMYD',
              'CBIN', ' IAD', ' ISB', 'IRSB', ' ICP', ' ISH', ' IMY', 'IMYD',
              'CDEC', ' RAD', ' RSB', 'RRSB', ' RCP', ' RSC', ' RMY', 'RMYD';

  const char ONECASE[(127) - (0) + 1] = 0,
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
      22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
      40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
      58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
      76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
      94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123, 124, 125, 126, 127;

  const int TSNAME[(62) - (0) + 1] = [LOW... HIGH] = 0x1000,
                0x1001, [LOW... HIGH] = 0x1000, 0x1001, 0x1062,
                [LOW... HIGH] = 0x1001, 0x1062, [LOW... HIGH] = 0x1000, 0x52,
                0x51, 0x62, [LOW... HIGH] = 0x1062, 0x1000, 0x31, 0x51,
                [LOW... HIGH] = 0x1062, 0x31, 0x1000, 0x51, 0x62,
                [LOW... HIGH] = 0x1000, 0x35, 0x1000, 0x1035, 0x31, 0x35,
                0x1035, 0x33, 0, 0x1000, 0x31, 0x52, 0x51, 0x61, 0x72, 0x61,
                0x72, 0x51, 0x62, 0x1051, 0x41, 0x1000;
  //

  static int FIXEDGLA[(11) - (0) + 1] = 0,
      0x50000000, [LOW... HIGH] = 0, -1, 0, [LOW... HIGH] = 0;

  const char BYTES[(7) - (0) + 1] = [LOW... HIGH] = 0,
                1, 2, 4, 8, 16;

  const char TRTAB[(255) - (0) + 1] = [LOW... HIGH] = 0,
                [LOW... HIGH] = 1, [LOW... HIGH] = 0, [LOW... HIGH] = 2,
                [LOW... HIGH] = 0, [LOW... HIGH] = 2, [LOW... HIGH] = 0,
                [LOW... HIGH] = 0;

  const int MAXLEVELS = 31;
  const int CONCOP = 13;
  const int FIXEDGLALEN = 48;
  const int JOBBERBIT = 0x40000000;
  // SETINJOBBERMODE

  const int CEBIT = 1;
  // SETINCOMPILERENVIRONMENT

  const int MAXDICT = 0x100;
  // SETFORMAXOFEVERYTHING
  //
  // THEPRINCIPALOPCODESAREHEREDEFINEDASTHEIRMNEMONICS(AMENDED)
  //
  const int LB = 0x7A;
  const int SLB = 0x52;
  const int STB = 0x5A;
  const int ADB = 0x20;
  const int CPB = 0x26;
  const int MYB = 0x2A;
  const int SBB = 0x22;
  const int CPIB = 0x2E;
  const int OUT = 0x3C;
  const int CPSR = 0x34;
  const int LD = 0x78;
  const int LDA = 0x72;
  const int INCA = 0x14;
  const int STD = 0x58;
  const int LDB = 0x76;
  const int LDTB = 0x74;
  const int LDRL = 0x70;
  const int CYD = 0x12;
  const int MODD = 0x16;
  const int SLD = 0x50;
  const int STLN = 0x5C;
  const int ASF = 0x6E;
  const int ST = 0x48;
  const int RALN = 0x6C;
  const int LXN = 0x7E;
  const int LLN = 0x7C;
  const int LSS = 0x62;
  const int SLSS = 0x42;
  const int MPSR = 0x32;
  const int STSF = 0x5E;
  const int LUH = 0x6A;
  const int STUH = 0x4A;
  const int LSD = 0x64;
  const int SLSD = 0x44;
  const int PRCL = 0x18;
  const int LSQ = 0x66;
  const int SLSQ = 0x46;
  const int STXN = 0x4C;
  const int LCT = 0x30;
  const int STCT = 0x36;
  const int JUNC = 0x1A;
  const int JLK = 0x1C;
  const int CALL = 0x1E;
  const int EXIT = 0x38;
  const int JCC = 2;
  const int JAT = 4;
  const int JAF = 6;
  const int DEBJ = 0x24;
  const int IAD = 0xE0;
  const int ICP = 0xE6;
  const int USH = 0xC8;
  const int ISB = 0xE2;
  const int IRSB = 0xE4;
  const int OR = 0x8C;
  const int UCP = 0xC6;
  const int IMY = 0xEA;
  const int IMDV = 0xAE;
  const int AND = 0x8A;
  const int ISH = 0xE8;
  const int IMYD = 0xEC;
  const int IDV = 0xAA;
  const int RAD = 0xF0;
  const int RSB = 0xF2;
  const int RRSB = 0xF4;
  const int FLT = 0xA8;
  const int RRDV = 0xBC;
  const int RSC = 0xF8;
  const int FIX = 0xB8;
  const int RDV = 0xBA;
  const int RDDV = 0xBE;
  const int RMYD = 0xFC;
  const int RMY = 0xFA;
  //

  const int MVL = 0xB0;
  const int MV = 0xB2;
  const int SWEQ = 0xA0;
  const int SWNE = 0xA2;
  const int CPS = 0xA4;
  //
  // DEFINESOMEMNEMONICSFORTHEVISIBLEREGISTERS(XCEPTLNB)
  //

  const int ACCR = 0;
  const int DR = 1;
  const int LNB = 2;
  const int XNB = 3;
  const int PC = 4;
  const int CTB = 5;
  const int TOS = 6;
  const int BREG = 7;
  const char LDCODE[(7) - (0) + 1] = 0,
      0x78, 0x7C, 0x7E, 0, 48, 0, 0x7A;
  //

  const _imp_string MDEP = "S#NDIAG";

  const _imp_string IOCPEP = "S#IOCP";
  // EPFORIOCP

  const _imp_string AUXSTEP = "ICL9CEAUXST";
  // DATAREFFORINDIRECTAUXST

  const int SNPT = 0x1006;
  // SPECIALNAMEPTYPE

  const int COMMALT = 2;
  const int ENDALT = 9;
  const int UNASSPAT = 0x81818181;
  const int DECALT = 8;
  //

  int DICTBASE;
  int CONSTPTR;
  int CONSTBTM;
  int DFHEAD;
  int CONSTHOLE;
  int WKFILEAD;
  int WKFILEK;
  int DUMMYFORMAT;
  int P1SIZE;
  int LEVELINF;
  int IOCPDISP;
  int PARMBITS1;
  int PARMBITS2;
  int PARMLET;
  //

  int ASL;
  int NNAMES;
  int ARSIZE;
  int CABUF;
  int PPCURR;
  int CONSTLIMIT;
  int OLDLINE;
  int LINE;
  int LENGTH;
  int NEXTP;
  int SNUM;
  int RLEVEL;
  int NMAX;
  int USTPTR;
  int PLABEL;
  int LEVEL;
  int CA;
  int LASTNAME;
  int CDCOUNT;
  int ASLCURBTM;
  int PARMDYNAMIC;
  //

  int FAULTY;
  int HIT;
  int INHCODE;
  int IMPS;
  int TTOPUT;
  int LIST;
  int PARMDIAG;
  int WARNFLAG;
  int PARMTRACE;
  int PARMLINE;
  int PARMOPT;
  int CTYPE;
  int DCOMP;
  int CPRMODE;
  int PARMCHK;
  int PARMARR;
  int ALLLONG;
  int PARMDBUG;
  int COMPILER;
  int LASTINST;
  int SMAP;
  int STACK;
  int AUXST;
  int PARMY;
  int BFFLAG;
  //

  int RBASE;
  int N;
  int FREEFORMAT;
  int PARMPROF;
  int EXITLAB;
  int CONTLAB;
  int Q;
  int R;
  int S;
  int NEST;
  int FNAME;
  int LDPTR;
  int GLACA;
  int GLACABUF;
  int GLACURR;
  int CREFHEAD;
  int SSTL;
  int QMAX;
  int STMTS;
  int LASTAT;
  int FILEADDR;
  int FILEPTR;
  int FILEEND;
  int FILESIZE;
  int LASTEND;
  int BIMSTR;
  int STLIMIT;
  int STRLINK;
  int RECTB;
  int ASLWARN;
  int IHEAD;
  //

  int MAXULAB;
  int SFLABEL;

  double CVALUE;
  double IMAX;
  double CTIME;

  _imp_string MAINEP;

  typedef struct LISTF {
    int LINK;
  } LISTF;
  int LOGEPDISP;
  int EXPEPDISP;
  //

  static int *COMREG(int N);

  {
    FILEADDR = COMREG(46)
        // SOURCEFILEIFCLEAN
        ;

    PARMBITS1 = COMREG(27);
    PARMBITS2 = COMREG(28);
    WKFILEAD = COMREG(14);
  // Usually -1 means an explicitly unassigned variable somewhere
  left_operand:
    Diagnose(0xffffffff, "left_operand",
             "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 334);
  right_operand:
    Diagnose(0x8840ba3b, "right_operand",
             "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 335)
        : AST_PHRASE stored at AST(4241979)
        : AST_CONST Index = 4241979 WKFILEK = ;
    if (FILEADDR <= 0) {
      FILESIZE = 64000;
      FILEADDR = 0;
    } else {
    left_operand:
      Diagnose(0x8840bcd2, "left_operand",
               "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 334)
          : AST_PHRASE stored at AST(4242642)
          : AST_RVALUE Index = 4242642
            // Usually -1 means an explicitly unassigned variable somewhere
            right_operand
          : Diagnose(
                0xffffffff, "right_operand",
                "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                335);
      FILEPTR = ;
    left_operand:
      Diagnose(0x8840bd53, "left_operand",
               "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 334)
          : AST_PHRASE stored at AST(4242771)
          : AST_RVALUE Index = 4242771
            // Usually -1 means an explicitly unassigned variable somewhere
            right_operand
          : Diagnose(
                0xffffffff, "right_operand",
                "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                335);
      FILEEND = ;
      FILESIZE = ;
    }

    NNAMES = 255;
    if (FILESIZE > 10000) NNAMES = 511;
    if (PARMBITS1 & JOBBERBIT == 0) {
      if (FILESIZE > 32000) NNAMES = 1023;
      if (FILESIZE > 256 * 1024 || PARMBITS2 & MAXDICT != 0 || WKFILEK > 512)
        NNAMES = 2047;
    }

    ASL = 3 * NNAMES;
    // STAYWITHIN128KAUXSTACK
    if (ASL > 4095 && PARMBITS2 & MAXDICT == 0) ASL = 4095;

    ARSIZE = WKFILEK * 768 - 300;
  };

  ;

  char **A;

  recfm ASLIST[(ASL) - (0) + 1]

      ;
  //(LISTF)

  int WORD[(NNAMES) - (0) + 1]

      ;
  int TAGS[(NNAMES) - (0) + 1]

      int DVHEADS[(12) - (0) + 1]

      ;

  static int FROMAR4(int PTR);
  static int FROMAR2(int PTR);
  static void TOAR8(int PTR, double VALUE);
  static void TOAR4(int PTR, int VALUE);
  static void TOAR2(int PTR, int VALUE);
  static void WARN(int N, int V);
  static void FAULT2(int N, int VAL, int IDEN);
  static void FAULT(int N, int VALUE);
  static _imp_string PRINTNAME(int N);
  static int MORESPACE(void);
  // integerfnspecNEWCELL

  static void INSERTATEND(int *S, int A, int B, int C);
  static void FROM12(int CELL, int *S1, int *S2);
  static void FROM123(int CELL, int *S1, int *S2, int *S3);
  static void POP(int *C, int *P, int *Q, int *R);
  static void PUSH(int *C, int S1, int S2, int S3);
  static int FIND(int LAB, int LIST);
  static void MLINK(int *CELL);
  static void REPLACE1(int CELL, int S1);
  static void REPLACE2(int CELL, int S2);
  static void REPLACE3(int CELL, int S3);
  static void REPLACE123(int CELL, int A1, int A2, int S3);
  static int FROM2(int CELL);
  static int FROM1(int CELL);
  static int FROM3(int CELL);
  static void BINSERT(int *T, int *B, int S1, int S2, int S3);
  static void CLEARLIST(int *HEAD);
  static _imp_string MESSAGE(int N);
  static void LPUT(int A, int B, int C, int D);
  static double CPUTIME(void);
  //*DELSTART

  static void NCODE(int START, int FINISH, int CA);
  static void PRINTLIST(int HEAD);
  static void PRHEX(int VALUE, int PLACES);
  static void CHECKASL(void);
  //*DELEND

  if (VMEB == NO) {
    auto void CONSOURCE(_imp_string FILE, int *AD);
  }
  // STARTOFCOMPILATION

  A = ;

  {
    //***********************************************************************
    //*THISBLOCKINITIALISETHECOMPILERSCALARSANDARRAYS*
    //*WASORIGINALLYROUTINE'INITIALISE'.*
    //*THEINITIALISATIONOFTHECONSTANTLISTSWITHTHEVALUES*
    //*INPERMMAYBEOMITTEDINBATCHORCUT-DOWNVERSIONS.*
    //***********************************************************************
    auto void READLINE(int MODE, int CHAR);
    auto int COMPARE(int P);
    auto void PNAME(int MODE);
    auto void CONST(int MODE);
    auto void TEXTTEXT(int EBCDIC);
    int CCSIZE;
    int DSIZE;
    int NEXT;
    int ATLINE1;
    int STARSTART;

    CCSIZE = 1000;
    DSIZE = 7 * NNAMES;
    int DISPLAY[(MAXLEVELS) - (0) + 1]

        ;
    int SFS[(MAXLEVELS) - (0) + 1]

        char TLINE[(161) - (-60) + 1]

        ;
    char CC[(CCSIZE) - (0) + 1]

        ;
    char LETT[(DSIZE + 20) - (0) + 1]

        ;

    long int ATL0;
    long int ASYM0;

    const char ILETT[(500) - (0) + 1] = 11,
        'S', 'E', 'L', 'E', 'C', 'T', 'I', 'N', 'P', 'U', 'T', 12, 'S', 'E',
        'L', 'E', 'C', 'T', 'O', 'U', 'T', 'P', 'U', 'T', 7, 'N', 'E', 'W', 'L',
        'I', 'N', 'E', 5, 'S', 'P', 'A', 'C', 'E', 10, 'S', 'K', 'I', 'P', 'S',
        'Y', 'M', 'B', 'O', 'L', 10, 'R', 'E', 'A', 'D', 'S', 'T', 'R', 'I',
        'N', 'G', 8, 'N', 'E', 'W', 'L', 'I', 'N', 'E', 'S', 6, 'S', 'P', 'A',
        'C', 'E', 'S', 10, 'N', 'E', 'X', 'T', 'S', 'Y', 'M', 'B', 'O', 'L', 11,
        'P', 'R', 'I', 'N', 'T', 'S', 'Y', 'M', 'B', 'O', 'L', 10, 'R', 'E',
        'A', 'D', 'S', 'Y', 'M', 'B', 'O', 'L', 4, 'R', 'E', 'A', 'D', 5, 'W',
        'R', 'I', 'T', 'E', 7, 'N', 'E', 'W', 'P', 'A', 'G', 'E', 4, 'A', 'D',
        'D', 'R', 6, 'A', 'R', 'C', 'S', 'I', 'N', 3, 'I', 'N', 'T', 5, 'I',
        'N', 'T', 'P', 'T', 6, 'F', 'R', 'A', 'C', 'P', 'T', 5, 'P', 'R', 'I',
        'N', 'T', 7, 'P', 'R', 'I', 'N', 'T', 'F', 'L', 4, 'R', 'E', 'A', 'L',
        7, 'I', 'N', 'T', 'E', 'G', 'E', 'R', 3, 'M', 'O', 'D', 6, 'A', 'R',
        'C', 'C', 'O', 'S', 4, 'S', 'Q', 'R', 'T', 3, 'L', 'O', 'G', 3, 'S',
        'I', 'N', 3, 'C', 'O', 'S', 3, 'T', 'A', 'N', 3, 'E', 'X', 'P', 11, 'C',
        'L', 'O', 'S', 'E', 'S', 'T', 'R', 'E', 'A', 'M', 11, 'B', 'Y', 'T',
        'E', 'I', 'N', 'T', 'E', 'G', 'E', 'R', 8, 'E', 'V', 'E', 'N', 'T', 'I',
        'N', 'F', 6, 'R', 'A', 'D', 'I', 'U', 'S', 6, 'A', 'R', 'C', 'T', 'A',
        'N', 6, 'L', 'E', 'N', 'G', 'T', 'H', 11, 'P', 'R', 'I', 'N', 'T', 'S',
        'T', 'R', 'I', 'N', 'G', 2, 'N', 'L', 8, 'L', 'O', 'N', 'G', 'R', 'E',
        'A', 'L', 7, 'P', 'R', 'I', 'N', 'T', 'C', 'H', 6, 'R', 'E', 'A', 'D',
        'C', 'H', 6, 'S', 'T', 'R', 'I', 'N', 'G', 8, 'R', 'E', 'A', 'D', 'I',
        'T', 'E', 'M', 8, 'N', 'E', 'X', 'T', 'I', 'T', 'E', 'M', 6, 'C', 'H',
        'A', 'R', 'N', 'O', 8, 'T', 'O', 'S', 'T', 'R', 'I', 'N', 'G', 10, 'F',
        'R', 'O', 'M', 'S', 'T', 'R', 'I', 'N', 'G', 6, 'R', 'E', 'C', 'O', 'R',
        'D', 5, 'A', 'R', 'R', 'A', 'Y', 10, 'S', 'E', 'T', 'M', 'A', 'R', 'G',
        'I', 'N', 'S', 4, 'I', 'M', 'O', 'D', 2, 'P', 'I', 9, 'E', 'V', 'E',
        'N', 'T', 'L', 'I', 'N', 'E', 11, 'L', 'O', 'N', 'G', 'I', 'N', 'T',
        'E', 'G', 'E', 'R', 12, 'L', 'O', 'N', 'G', 'L', 'O', 'N', 'G', 'R',
        'E', 'A', 'L', 9, 'L', 'E', 'N', 'G', 'T', 'H', 'E', 'N', 'I', 9, 'L',
        'E', 'N', 'G', 'T', 'H', 'E', 'N', 'R', 8, 'S', 'H', 'O', 'R', 'T', 'E',
        'N', 'I', 8, 'S', 'H', 'O', 'R', 'T', 'E', 'N', 'R', 6, 'N', 'E', 'X',
        'T', 'C', 'H', 11, 'H', 'A', 'L', 'F', 'I', 'N', 'T', 'E', 'G', 'E',
        'R', 8, 'P', 'P', 'R', 'O', 'F', 'I', 'L', 'E', 255;

    IMAX = (-1) >> 1;
    PLABEL = 24999;
    LETT[(0) - (0)] = 0;
    ATLINE1 = ;
  Mk_AST_assignment:
    Var = -1;
  Mk_AST_assignment:
    Var = -1;
  Mk_AST_assignment:
    Var = -1;
  Mk_AST_assignment:
    Var = -1;
    N = 12;
    // LARGESTVALIDUSERLABEL
    MAXULAB = NNAMES + 16384;

    GLACURR = 0;
    GLACA = FIXEDGLALEN;
    GLACABUF = GLACA;
    PARMOPT = 1;
    PARMARR = 1;
    LASTINST = 0;
    PARMLINE = 1;
    PARMTRACE = 1;
    PARMDIAG = 1;
    LIST = 1;
    SFLABEL = 20999;
    PARMCHK = 1;
    EXITLAB = 0;
    CONTLAB = 0;
    CABUF = 0;
    PPCURR = 0;
    OLDLINE = 0;
    COMPILER = 0;
    RLEVEL = 0;
    NMAX = 0;
    USTPTR = 0;
    LEVEL = 0;
    CA = 0;
    LASTAT = 0;
    FAULTY = 0;
    WARNFLAG = 0;
    ALLLONG = 0;
    INHCODE = 0;
    DCOMP = 0;
    BFFLAG = 0;
    CPRMODE = 0;
    NEXT = 1;
    LDPTR = 0;
    IOCPDISP = 0;
    CREFHEAD = 0;
    AUXST = 0;
    RBASE = 10;
    LOGEPDISP = 0;
    EXPEPDISP = 0;
    STRLINK = 0;
    RECTB = 0;
    IHEAD = 0;
    SSTL = 0;
    STMTS = 1;
    SNUM = 0;
    LEVELINF = 0;
    CDCOUNT = 0;
    BIMSTR = 0;
    LOGEPDISP = 0;
    EXPEPDISP = 0;
    // DEFAULTMAINENTRY
    MAINEP = "S#GO";

    DICTBASE = ;
    //
    // OPENOBJECTFILEHEREBEFOREMOREPAGESOFCOMPILERCODE
    // AREPAGEDINANDSUB-SYSTEMPAGESMOVEOUT
    //
    LPUT(0, 0, 0, 0);
    CTIME = CPUTIME();
    I = COMREG(27);
    STLIMIT = 0x1F000;
    if (I >> 24 & 1 != 0) STLIMIT = COMREG(48) - 4096;
    if (I & 2 == 2) LIST = 0;
    if (I & 4 == 4) PARMDIAG = 0;
    if (I & 0x800000 != 0) PARMLINE = 0;
    if (I & 16 == 16) PARMCHK = 0;
    if (I & 32 == 32) PARMARR = 0;
    // USEMAPORPROFILEBITPROTEM
    PARMPROF = (I >> 15 & 1) | (I >> 7 & 1);

    PARMDYNAMIC = I >> 20 & 1;
    PARMLET = I >> 13 & 1;
    // PARMCODEORD
    DCOMP = I >> 14 & 1;

    PARMDBUG = I >> 18 & 1;
    if (I & 64 == 64) {
      PARMTRACE = 0;
      PARMDIAG = 0;
    }
    FREEFORMAT = I & 0x80000;
    STACK = I >> 3 & 1;
    // USEPARMZBITFORDUMPINGWKFILE
    SMAP = I >> 26 & 1;

    TTOPUT = COMREG(40);
    if (I & (1 << 16) != 0) {
      PARMARR = 0;
      PARMOPT = 0;
      PARMLINE = 0;
      PARMCHK = 0;
      PARMDIAG = 0;
    }
    // ALLOWNOTRACEONLYWITHOPT

    PARMTRACE = PARMTRACE | PARMOPT;
    // BITSETIFIMPSREQUESTED

    IMPS = I >> 23 & 1;
    // FORTESTING

    IMPS = 1;

    ;
    ;
    ;
    if (IMPS != 0)
      ;
    ;
    ;
    ;
    ;
    ;
    ;
    ;
    ASLWARN = 0;
    ASLCURBTM = ASL - 240;
    CONSTLIMIT = 4 * ASLCURBTM - 8;
    for (I = ASLCURBTM; I != ASL - 1; I += 1) {
      ASLIST[(I + 1) - (0)] = I;
    }
    ASLIST[(ASLCURBTM) - (0)] = 0;
    ASLIST[(0) - (0)] = -1;
    ASLIST[(0) - (0)] = -1;
    ASLIST[(0) - (0)] = -1;
    ASLIST[(0) - (0)] = 0;
    for (I = 0; I != NNAMES; I += 1) {
      WORD[(I) - (0)] = 0;
      TAGS[(I) - (0)] = 0;
    }
    for (I = 0; I != 12; I += 1) {
      DVHEADS[(I) - (0)] = 0;
    }
    //
    // NOWDECLARETHESPECIALNAMESWHICHAREINARRAYILETT.
    //

    K = 0;
    NEXT = 1;
    I = ILETT[(0) - (0)];
    while (I < 255) {
      for (J = I; J != 1; J += -1) {
        CC[(J) - (0)] = ILETT[(K + J) - (0)];
      }
      CC[(I + 1) - (0)] = ';';
      R = 2;
      Q = 1;
      PNAME(1);
      PUSH(TAGS[(LASTNAME) - (0)], SNPT << 16 | 0x8000, 0, SNUM << 16);
      SNUM = SNUM + 1;
      K = K + I + 1;
      I = ILETT[(K) - (0)];
    }
    //

    COMREG(24)
    // RETURNCODE
    = 16;
    // DUMMYRECORDFORMAT

    DUMMYFORMAT = 0;

    DFHEAD = 0;
    PUSH(DFHEAD, 0, 0, 0);
    PUSH(DUMMYFORMAT, 0, 0, DFHEAD)
    // FORBETTERERRORRECOVERY
    ;

    LINE = 0;
    LENGTH = 0;
    Q = 1;
    R = 1;
    LEVEL = 1;
    do {
      if (Q >= LENGTH) {
        QMAX = 1;
        READLINE(0, 0);
      }
      WARNFLAG = 0;
      STARSTART = R;
      R = R + 3;
      OLDLINE = LINE;
      A = LINE >> 8;
      A = LINE & 255;
      R = R + 2;
      if (COMPARE(SS) == 0) {
        FAULT(100, );
        R = STARSTART;

      } else {
        if (R > ARSIZE) FAULT(102, 0);
        if (A == COMMALT)
          R = STARSTART;
        else {
          I = R - STARSTART;
          A = I >> 16;
          A = I >> 8 & 255;
          A = I & 255;
          if (A == DECALT && LEVEL > 1) {
            if (SFS[(LEVEL) - (0)] = 0) {
              TOAR4(DISPLAY[(LEVEL) - (0)], STARSTART);
              DISPLAY[(LEVEL) - (0)] = STARSTART + 6;
              // FLAGASUNLINKED

            } else
              A = 128;
          }
          //*DELSTART

          if (SMAP != 0) {
            ;
            ;
            ;
            ;
            J = 0;
            for (I = STARSTART; I != R - 1; I += 1) {
              ;
              J = J + 1;
              if (J >= 20) {
                ;
                J = 0;
              }
            };
          }
          //*DELEND
          // ENDOFPROGORFILE

          if (A == ENDALT && 1 <= A && A <= 2) break;

          if (LEVEL == 0) {
            FAULT(14, 0);
            break;
          }
        }
      }

    } while (1);
    TOAR8(R, 0);
    R = R + 8;
    if (R + NEXT > ARSIZE) FAULT(102, 0);
    P1SIZE = R;
    if (USEIMP == YES) {
      for (I = 0; I != NEXT; I += 1) {
        A = LETT[(I) - (0)];
      }

    } else {
      asm();
      asm();
      asm();
      asm();
      asm();
      asm();
      asm();
    }

    DICTBASE = ;
    R = R + NEXT + 1;
    goto BEND;
    void READLINE(int MODE, int CHAR) {
      auto void GETLINE(void);
      int DEL;
      int LL;
      int LP;

      LL = 0;
      LP = 0;
      Q = 1;
      LENGTH = 0;
      DEL = 0;
    NEXT:
      if (USEIMP == YES) {
        LP = LP + 1;
        if (LP > LL) {
          GETLINE();
          LP = 1;
        }
        I = TLINE[(LP) - (-60)];
        if (MODE == 0) {
          if (I == '%') {
            DEL = 128;
            goto NEXT;
          }
          I = ONECASE[(I) - (0)];
          if ('A' <= I && I <= 'Z')
            I = I | DEL;
          else {
            DEL = 0;
            if (I == ' ') goto NEXT;
          }

          LENGTH = LENGTH + 1;
          CC[(LENGTH) - (0)] = I;
          if (I == '\'' || I == 34) {
            MODE = 1;
            CHAR = I;
          }

        } else {
          LENGTH = LENGTH + 1;
          CC[(LENGTH) - (0)] = I;
          if (I == CHAR) MODE = 0;
        }

        if (!(I ==)) goto NEXT;

      } else {
        asm();
        asm();
        asm();
        asm();
        GETLINE();
        asm();
      RLL1:
        //'%'
        asm();
        asm();
        asm();
        asm();
        asm();

        asm();
        asm();
        asm();
        asm();
      RLL3:
        // LOWERCASETOUPPER
        asm();
        //'A'

        asm();
        //'Z'

        asm();
        asm();

        asm();
        asm();
        asm();
      RLL4:
        //' '
        asm();
        asm();
        asm();

        asm();
      RLL5:
        //''''
        asm();
        asm();
        asm();
        asm();
        asm();
        //'"'

        asm();
        asm();

        asm();
      RLL6:
        asm();
        asm();
        asm();
      RLL7:
        asm();
        asm();
        asm();
      RLL2:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      RLL9:
        asm();
        asm();
      RLL8:
      }

      if (CC[(LENGTH - 1) - (0)] = 'C' + 128) {
        LENGTH = LENGTH - 2;
        goto NEXT;
      }
      if (LENGTH > CCSIZE) FAULT(101, 0);
      return;
      void GETLINE(void) {
        auto void IOCP(int A, int B);
        const char ITOI[(255) - (0) + 1] = [LOW... HIGH] = 32,
                      10, [LOW... HIGH] = 32, 25, 26, [LOW... HIGH] = 32, 32,
                      33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
                      47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
                      61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
                      75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
                      89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
                      103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
                      114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
                      125, 126, 32, [LOW... HIGH] = 26, 10, [LOW... HIGH] = 26,
                      [LOW... HIGH] = 26, [LOW... HIGH] = 26, 92, 38,
                      [LOW... HIGH] = 26, 35, [LOW... HIGH] = 26,
                      [LOW... HIGH] = 26, [LOW... HIGH] = 26, 35,
                      [LOW... HIGH] = 26, 94, [LOW... HIGH] = 26;

        int K;

        LL = 0;
        if (FILEADDR == 0) {
          // SOURCENOTA'CLEAN'FILE

          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  NAME NOT SET(#3)
          : NL

              do {
            ;
            TLINE[(LL + 1) - (-60)] = ITOI[(K) - (0)];
            LL = LL + 1;
          }
          while (!(K ==))
            ;

        } else {
          if (FILEPTR >= FILEEND) {
            if (IHEAD != 0) {
              POP(IHEAD, FILEADDR, FILEPTR, FILEEND);
              GETLINE();
              return;
            }
            _imp_signal(9, 1);
          }

          if (USEIMP == NO) {
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            asm();
            goto OLIST;
          }

        IMP:
          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  NAME NOT SET(#3)
          : NL

              do {
            // NEXTCHARFROMSORCEFILE
            K = ;

            FILEPTR = FILEPTR + 1;
            TLINE[(LL + 1) - (-60)] = ITOI[(K) - (0)];
            LL = LL + 1;
          }
          while (!(K == || K == 0))
            ;
        OLIST:
        }
        // ifMODE=0andLL=1thenGETLINEandreturn
        // LINE=LINE+1unlessMODE=0andLENGTH>0
        // COUNTALLLINES

        LINE = LINE + 1;

        if (LIST != 0) {
          if (MODE == 0 && LENGTH > 0)
            ;
          else
            ;
          // SPACES(8)

          for (K = -7; K != 0; K += 1) {
            TLINE[(K) - (-60)] = ' ';
          }
          if (MODE != 0) TLINE[(-7) - (-60)] = '"';
          TLINE[(-8) - (-60)] = LL + 8;
          IOCP(15, );
        }

        if (FREEFORMAT == 0 && LL > 73) {
          TLINE[(73) - (-60)] = 10;
          LL = 73;
        }
      };
    };

    int COMPARE(int P) {
      int I;
      int J;
      int ITEM;
      int RA;
      int RL;
      int RP;
      int RQ;
      int RR;
      int RS;
      int MARKER;
      int SSL;
      int ALT;
      int PP;

      static int SAVECOMP;
      // FORCHECKINGDSIDEDCONDS

      if (USEIMP == YES) {
        RP = SYMBOL[(P) - (1300)];
        RL = LEVEL;
        P = P + 1;
        // ROUTINEREALLYSTARTSHERE
        PP = P;

      } else {
        asm();
        asm();
        asm();
      SUBENTRY:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

    COMM:
      if (USEIMP == YES) {
        // RESETVALUESOFLINE&ARPTRS

        RQ = Q;

        RR = R;
        // SAVESTRINGLINK
        SSL = STRLINK;
        // FIRSTALTERNATIVETOBETRIED

        ALT = 1;
        // RATONEXTPHRASEALTERNATIVE

        RA = SYMBOL[(P) - (1300)];

        RS = P;

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

    UPR:
      R = R + 1;
    // SUCCESSONTONEXTITEM
    SUCC:

      if (USEIMP == YES) {
        // RS=NEXTALTERNATIVEMEANSTHAT

        RS = RS + 1;
        // THISALTHASBEENCOMPLETEDSO
        // EXITWITHHIT=1

        if (RS == RA) goto FINI;
        // NEXTBRICKINTHECURRENTALT
        ITEM = SYMBOL[(RS) - (1300)];

        if (ITEM < 999) goto LIT;

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      if (ITEM < 1300) goto BIP[ITEM];
      // BRICKISAPHRASETYPE

      if (USEIMP == YES) {
        if (COMPARE(ITEM) == 0) goto FAIL;

      } else {
        // RESULT=0FORFAIL

        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();

        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      goto SUCC;
    // BRICKISLITERAL
    LIT:

      if (USEIMP == YES) {
        // OBTAINCURRENTCHARACTER

        I = CC[(Q) - (0)];

        if (!(I == CLETT[(ITEM + 1) - (0)])) goto FAIL;
        Q = Q + 1;
        K = CLETT[(ITEM) - (0)] + ITEM;
        ITEM = ITEM + 2;
        while (ITEM <= K) {
          if (!(CC[(Q) - (0)] = CLETT[(ITEM) - (0)])) goto FAIL;
          Q = Q + 1;
          ITEM = ITEM + 1;
          // CHECKITWITHLITERALDICTENTRY
        }

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }
      // MATCHEDSUCCESSFULLY

      goto SUCC;
      // FAILURE-NOTEPOSITIONREACHD

    FAIL:

      if (USEIMP == YES) {
        // TOTALFAILURENOALTTOTRY

        if (RA == RP) goto TFAIL;

        if (Q > QMAX) QMAX = Q;
        // RESETLINEANDA.R.POINTERS
        Q = RQ;
        // AVOIDGOINGVIAUPR:

        R = RR + 1;

        STRLINK = SSL;
        // MOVETONEXTALTOFPHRASE
        ALT = ALT + 1;

        RS = RA;
        RA = SYMBOL[(RA) - (1300)];

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      CPL1:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      goto SUCC;
    TFAIL:
      LEVEL = RL;
      if (USEIMP == YES) {
        return 0;

      } else {
        asm();
        asm();
      }
      // REPEATEDPHRASE

    BIP_999:

      A = ALT;
      P = PP;
      goto COMM;
    // NULLALWAYSLAST&OK
    BIP_1000:
    FINI:

      A = ALT;
      if (USEIMP == YES) {
        return 1;

      } else {
        asm();
        asm();
      }
      // PHRASENAME

    BIP_1001:
      // PHRASEOLDNAME

    BIP_1004:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (!(TRTAB[(I) - (0)] = 2)) goto FAIL;
      PNAME(ITEM - 1004);
      if (HIT == 1) goto SUCC;
      goto FAIL;
    // PHRASEINTEGERCONSTANT
    BIP_1002:
      // PHRASECONST

    BIP_1003:

      CONST(ITEM - 1003);
      if (HIT == 0) goto FAIL;
      goto SUCC;
    // PHRASEN
    BIP_1005:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (!('0' <= I && I <= '9')) goto FAIL;
      S = 0;
      while ('0' <= I && I <= '9') {
        S = 10 * S + (I & 15);
        Q = Q + 1;
        I = CC[(Q) - (0)];
      }
      TOAR2(R, S);
      R = R + 2;
      goto SUCC;
    // PHRASES=SEPARATOR
    BIP_1006:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (I ==) goto SUCC;
      if (!(I == ';')) goto FAIL;
      Q = Q + 1;
      goto SUCC;
    BIP_1007:
      // PHRASECOMMENTTEXT
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      J = I;
      if (I == ';' || I ==) goto TX;
      if (!(I == '!' || I == '|' ||
            I == 'C' + 128 && CC[(Q + 1) - (0)] = 'O' + 128 &&
                CC[(Q + 2) - (0)] = CC[(Q + 3) - (0)] &&
                CC[(Q + 3) - (0)] = 'M' + 128 &&
                CC[(Q + 4) - (0)] = 'E' + 128 &&
                CC[(Q + 5) - (0)] = 'N' + 128 &&
                CC[(Q + 6) - (0)] = 'T' + 128))
        goto FAIL;
      Q = Q + 1 + 6 * (I >> 7);
      J = CC[(Q) - (0)];
      do {
        if (J == || J == ';') break;
        Q = Q + 1;
        J = CC[(Q) - (0)];
      } while (1);
    TX:
      if (J == ';') Q = Q + 1;
      goto SUCC;
    // PHRASEBIGHOLE
    BIP_1008:

      TOAR4(R, 0);
      R = R + 4;
      goto SUCC;
    // PHRASEN255
    BIP_1009:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (!('0' <= I && I <= '9')) goto FAIL;
      S = 0;
      while ('0' <= I && I <= '9') {
        S = 10 * S + (I & 15);
        Q = Q + 1;
        I = CC[(Q) - (0)];
      }
      if (!(0 <= S && S <= 255)) goto FAIL;
      A = S;
      goto UPR;
    // PHRASEHOLE
    BIP_1010:

      MARKER = R;
      R = R + 2;
      goto SUCC;
    // PHRASEMARK
    BIP_1011:

      I = R - MARKER;
      A = I;
      A = I >> 8;
      goto SUCC;
    // PHRASEREADLINE?
    BIP_1012:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      while (I ==) {
        READLINE(0, 0);
        RQ = 1;
        I = CC[(Q) - (0)];
      }
      if (R > ARSIZE) FAULT(102, 0);
      goto SUCC;
    // PHRASECHECKIMPS
    BIP_1013:

      if (!(IMPS == 1)) goto FAIL;
      goto SUCC;
    // PHRASEDUMMYAPP
    BIP_1014:

      A = 2;
      A = 2;
      R = R + 2;
      goto SUCC;
    // PHRASEDOWN=NEWTEXTLEVEL
    BIP_1015:

      LEVEL = LEVEL + 1;
      TOAR4(R, 0);
      DISPLAY[(LEVEL) - (0)] = R;
      SFS[(LEVEL) - (0)] = 0;
      R = R + 4;
      goto SUCC;
    // PHRASEUP1TEXTUALLEVEL
    BIP_1016:

      DISPLAY[(LEVEL) - (0)] = 0;
      while (SFS[(LEVEL) - (0)] = 0) {
        POP(SFS[(LEVEL) - (0)], I, J, K);
        if (I == 1)
          FAULT2(53, K, 0)
          // FINISHMISSING
          ;

        if (I == 2)
          FAULT2(13, K, 0)
          // repeatMISSING
          ;
      }
      LEVEL = LEVEL - 1;
      goto SUCC;
    // PHRASELISTON
    BIP_1017:

      LIST = 1;
      goto SUCC;
    // PHRASELISTOFF
    BIP_1018:

      LIST = 0;
      goto SUCC;
    // PHRASECOLONFORLABEL
    BIP_1019:

      if (!(CC[(Q - 1) - (0)] = ':')) goto FAIL;
      goto SUCC;
    // PHRASENOTECONST
    BIP_1020:

      if (CTYPE == 5) {
        TOAR4(S - 4, STRLINK);
        STRLINK = S - 4;
      }
      goto SUCC;
    // TRACEFORONCONDITIONS
    BIP_1021:

      PARMTRACE = 1;
      goto SUCC;
    // SETMNEMONIC
    BIP_1022:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      S = '    ';
      while ('A' <= I && I <= 'Z') {
        S = S << 8 | I;
        Q = Q + 1;
        I = CC[(Q) - (0)];
      }
      if (!(I == '_' && S != '    ')) goto FAIL;
      Q = Q + 1;
      goto SUCC;
    // PRIMARYFORMATMNEMOINC
    BIP_1023:

      for (I = 7; I != 126; I += 1) {
        if (OPC[(I) - (0)] = S) goto PFND;
      }
      goto FAIL;
    PFND:
      if (8 <= I >> 3 && I >> 3 <= 11 && I & 7 <= 3) goto FAIL;
      A = 2 * I;
      goto UPR;
    // SECONDARYFORMATMNEMONIC
    BIP_1024:

      for (I = 64; I != 88; I += 8) {
        for (J = 0; J != 3; J += 1) {
          if (OPC[(I + J) - (0)] = S) goto SFND;
        }
      }
      goto FAIL;
    SFND:
      A = 2 * (I + J);
      goto UPR;
    // TERTIARYFORMATMNEMONIC
    BIP_1025:

      for (I = 3; I != 1; I += -1) {
        if (OPC[(I) - (0)] = S) {
          A = 2 * I;
          goto UPR;
        }
      }
      goto FAIL;
    // P(OP)=+,-,&,****,**,*,!!,!,
    BIP_1026:
      ////,/,>>,<<,.,\\,
      // OBTAINCURRENTCHARACTER
      I = CC[(Q) - (0)];

      if (!(32 < I && I < 127 &&
            X '80000000' >> ((I - 32) & 31) & 0x4237000A != 0))
        goto FAIL;
      Q = Q + 1;
      if (I == '+') {
        A = 1;
        goto UPR;
      }
      if (I == '-') {
        A = 2;
        goto UPR;
      }
      if (I == '&') {
        A = 3;
        goto UPR;
      }
      J = CC[(Q) - (0)];
      if (I == '*') {
        if (J != I) {
          A = 6;
          goto UPR;
        }
        if (CC[(Q + 1) - (0)] = I && I == CC[(Q + 2) - (0)]) {
          A = 4;
          Q = Q + 3;
          goto UPR;
        }
        A = 5;
        Q = Q + 1;
        goto UPR;
      }

      if (I == '/') {
        if (J != I) {
          A = 10;
          goto UPR;
        }
        A = 9;
        Q = Q + 1;
        goto UPR;
      }

      if (I == '!') {
        if (J != I) {
          A = 8;
          goto UPR;
        }
        A = 7;
        Q = Q + 1;
        goto UPR;
      }

      if (I == '.') {
        A = 13;
        goto UPR;
      }
      if (I == J && J == '<') {
        A = 12;
        Q = Q + 1;
        goto UPR;
      }
      if (I == J && J == '>') {
        A = 11;
        Q = Q + 1;
        goto UPR;
      }
      if (I == '\\') {
        if (J != I) {
          A = 15;
          goto UPR;
        }
        Q = Q + 1;
        A = 14;
        goto UPR;
      }

      goto FAIL;
    // PHRASECHECKUI
    BIP_1027:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (TRTAB[(I) - (0)] = 2 || I == '-') goto SUCC;
      if (0x80000000 >> (I & 31) & 0x14043000 != 0) goto SUCC;
      goto FAIL;
    // P(+'')=+,-,\,0
    BIP_1028:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (I == '\\' || I == 0x7E) {
        A = 3;
        Q = Q + 1;
        goto UPR;
      }
      if (I == '-') {
        A = 2;
        Q = Q + 1;
        goto UPR;
      }
      if (I == '+') {
        A = 1;
        Q = Q + 1;
        goto UPR;
      }
      A = 4;
      goto UPR;
    // PHRASENOTECYCLE
    BIP_1029:

      TOAR4(R, 0);
      PUSH(SFS[(LEVEL) - (0)], 2, R, LINE);
      R = R + 4;
      goto SUCC;
    // P(,'')=',',0
    BIP_1030:
      //
      // THISISVERYAWKWARDASITMEANSITISVERYTOHARDTOFIND
      // THEENDOFAPARAMETERLISTWITHOUTCHURNING.BYMAKINGTHISABIP
      // WECANPEEPAHEADFOR')'ANDFAILHERE.
      //
      // OBTAINCURRENTCHARACTER
      I = CC[(Q) - (0)];

      if (I == ')') goto FAIL;
      if (I == ',') Q = Q + 1;
      goto SUCC;
    // PHRASECHECKTYPEIEENSURE
    BIP_1031:
      // FIRSTLETTERIS(B,H,I,L,R,S)&
      // 3RDLETTERIS(A,L,N,R,T)
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (!(I > 128 && 0x80000000 >> (I & 31) & 0x20C83000 != 0 &&
            0x80000000 >> (CC[(Q + 2) - (0)] & 31) & 0x400A2800 != 0))
        goto FAIL;
      goto SUCC;
    // PHRASECOMP1
    BIP_1032:
      // PHRASECOMP2(IS2NDHALFOFDSIDED)

    BIP_1037:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (!(32 < I && I <= 92 && X '80000000' >> (I & 31) & 0x1004000E != 0))
        goto FAIL;
      //'='=1,'>='=2,'>'=3
      //'#'OR'\='=4,'<='=5,'<'=6
      // 7UNUSED,'->'=8,'=='=9
      //'##'OR'\=='=10
      if (I == '=') {
        if (CC[(Q + 1) - (0)] = I) {
          J = 9;
          goto JOIN1;
        }
        J = 1;
        goto JOIN;
      }

      if (I == '#') {
        if (CC[(Q + 1) - (0)] = I) {
          J = 10;
          goto JOIN1;
        }
        J = 4;
        goto JOIN;
      }

      if (I == '\\' && CC[(Q + 1) - (0)] = '=') {
        Q = Q + 1;
        if (CC[(Q + 1) - (0)] = '=') {
          J = 10;
          goto JOIN1;
        }
        J = 4;
        goto JOIN;
      }

      if (I == '>') {
        if (CC[(Q + 1) - (0)] = '=') {
          J = 2;
          goto JOIN1;
        }
        J = 3;
        goto JOIN;
      }

      if (I == '<') {
        if (CC[(Q + 1) - (0)] = '=') {
          J = 5;
          goto JOIN1;
        }
        J = 6;
        goto JOIN;
      }

      if (I == '-' && CC[(Q + 1) - (0)] = '>') {
        J = 8;
        goto JOIN1;
      }
      goto FAIL;
    JOIN1:
      Q = Q + 1;
    JOIN:
      Q = Q + 1;
      A = J;
      if (ITEM == 1032) {
        SAVECOMP = J;
        goto UPR;
      }
      // SAVEJTOCHECKDSIDED
      // ILLEGALDSIDED

      if (SAVECOMP > 6 || J > 6) {
        Q = Q - 1;
        goto FAIL;
      }
      // NBOWNSWONTWORKIF

      goto UPR;
      // CONDEXPRSALLOWEDASTHE
      // CANBENESTED!
      // P(ASSOP)-==,=,<-,->

    BIP_1033:
      // OBTAINCURRENTCHARACTER

      I = CC[(Q) - (0)];

      if (I == '=') {
        if (CC[(Q + 1) - (0)] = '=') {
          A = 1;
          Q = Q + 2;
          goto UPR;
        }
        A = 2;
        Q = Q + 1;
        goto UPR;
      }

      if (I == '<' && CC[(Q + 1) - (0)] = '-') {
        A = 3;
        Q = Q + 2;
        goto UPR;
      }
      if (I == '-' && CC[(Q + 1) - (0)] = '>') {
        A = 4;
        Q = Q + 2;
        goto UPR;
      }
      goto FAIL;
    // NOTESTART
    BIP_1034:

      TOAR4(R, 0)
      // HOLEFORFORWARDPTR
      ;

      PUSH(SFS[(LEVEL) - (0)], 1, R, LINE);
      R = R + 4;
      goto SUCC;
    // NOTEFINISH
    BIP_1035:

      if (SFS[(LEVEL) - (0)] = 0) {
        FAULT2(51, 0, 0);
        goto SUCC;
      }
      POP(SFS[(LEVEL) - (0)], I, J, K);
      if (I == 2) FAULT2(59, K, 0);
      TOAR4(J, STARSTART);
      goto SUCC;
    // NOTEREPEAT
    BIP_1036:

      if (SFS[(LEVEL) - (0)] = 0) {
        FAULT2(1, 0, 0);
        goto SUCC;
      }
      POP(SFS[(LEVEL) - (0)], I, J, K);
      if (I == 1)
        FAULT2(52, K, 0)
        // STARTINSTEADOFCYCLE
        ;

      TOAR4(J, STARSTART);
      goto SUCC;
    // INCLUDE"FILE"
    BIP_1038:

      if (VMEB == YES) goto FAIL;
      I = CC[(Q) - (0)];
      if (!(I == || I == ';')) goto FAIL;
      if (I == ';') Q = Q + 1;
      if (!(CTYPE == 5)) goto FAIL;
      PUSH(IHEAD, FILEADDR, FILEPTR, FILEEND);
      CONSOURCE(, FILEADDR)
      // DEPARTSIFFAILS
      ;

    left_operand:
      Diagnose(0x88440417, "left_operand",
               "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 334)
          : AST_PHRASE stored at AST(4457495)
          : AST_RVALUE Index = 4457495
            // Usually -1 means an explicitly unassigned variable somewhere
            right_operand
          : Diagnose(
                0xffffffff, "right_operand",
                "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                335);
      FILEPTR = ;
    left_operand:
      Diagnose(0x88440498, "left_operand",
               "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h", 334)
          : AST_PHRASE stored at AST(4457624)
          : AST_RVALUE Index = 4457624
            // Usually -1 means an explicitly unassigned variable somewhere
            right_operand
          : Diagnose(
                0xffffffff, "right_operand",
                "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                335);
      FILEEND = ;
      goto SUCC;
    };
    // OFROUTINE'COMPARE'

    void PNAME(int MODE) {
      //***********************************************************************
      //*MODE=0FOROLDNAME(ALREADYINDICT),MODE=1FORNEWNAME*
      //***********************************************************************

      const int HASH[(7) - (0) + 1] = 71,
          47, 97, 79, 29, 37, 53, 59;

      int JJ;
      int KK;
      int LL;
      int FQ;
      int FS;
      int T;
      int S;
      int I;

      long int DRDES;
      long int ACCDES;

      HIT = 0;
      FQ = Q;
      FS = CC[(Q) - (0)];
      if (!(TRTAB[(FS) - (0)] = 2 && '"' != CC[(Q + 1) - (0)] &&
            CC[(Q + 1) - (0)] = '\'\''))
        return;
      // 1STCHARMUSTBELETTER

      T = 1;
      LETT[(NEXT + 1) - (0)] = FS;
      JJ = 71 * FS;
      if (USEIMP == YES) {
        do {
          Q = Q + 1;
          I = CC[(Q) - (0)];
          if (TRTAB[(I) - (0)] = 0) break;
          if (T <= 7) JJ = JJ + HASH[(T) - (0)];
          T = T + 1;
          LETT[(NEXT + T) - (0)] = I;
        } while (1);

      } else {
      CYC:
        // ITOACC
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();

        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      SKIP:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      EXIT:
      }
      // INSERTLENGTH

      LETT[(NEXT) - (0)] = T;

      S = T + 1;
      if (NEXT + S > DSIZE)
        FAULT(103, 0)
        // DICTIONARYOVERFLOW
        ;

      JJ = (JJ + 113 * T) & NNAMES;
      if (USEIMP == YES) {
        for (KK = JJ; KK != NNAMES; KK += 1) {
          LL = WORD[(KK) - (0)];
          // NAMENOTKNOWN
          if (LL == 0) goto HOLE;

          if (==) goto FND;
        }
        for (KK = 0; KK != JJ; KK += 1) {
          LL = WORD[(KK) - (0)];
          // NAMENOTKNOWN
          if (LL == 0) goto HOLE;

          if (==) goto FND;
        }

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      CYC1:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      CYC2:
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      FAULT(104, 0)
      // TOOMANYNAMES
      ;

    HOLE:
      if (MODE == 0) {
        Q = FQ;
        return;
      }
      WORD[(KK) - (0)] = NEXT;
      NEXT = NEXT + S;
    FND:
      LASTAT = FQ;
      HIT = 1;
      LASTNAME = KK;
      A = LASTNAME;
      A = LASTNAME >> 8;
      R = R + 2;
      LASTEND = Q;
    };

    void CONST(int MODE) {
      //***********************************************************************
      //*SYNTAXCHECKANDEVALUATEALLTHEFORMSOFIMPCONSTANT*
      //*MODE=0FORINTEGERCONSTANTS#0FORANYSORTOFCONSTANT*
      //***********************************************************************
      int Z;
      int DOTSEEN;
      int EBCDIC;
      int FS;
      int CPREC;
      int RR;
      int S;
      int T;
      int SS;

      long double X;
      long double CVALUE;
      long double DUMMY;

      const long double TEN = R '41A00000000000000000000000000000';

      CPREC = 5;
      RR = R;
      R = R + 1;
      DOTSEEN = 0;
      HIT = 0;
      CVALUE = 0;
      DUMMY = 0;
      FS = CC[(Q) - (0)];
      S = 0;
      if ('0' <= FS && FS <= '9') goto N;
      if (FS == '.' && MODE == 0 && '0' <= CC[(Q + 1) - (0)] &&
          CC[(Q + 1) - (0)] = '9')
        goto DOT;
      // 1DIDTMIN

      CTYPE = 1;
      EBCDIC = 0;
      if (FS == '\'\'') goto QUOTE;
      if (FS == 34) goto STR2;
      if (!(CC[(Q + 1) - (0)] = '\'\'')) goto NOTQUOTE;
      Q = Q + 2;
      if (FS == 'X') goto HEX;
      if (FS == 'M') goto MULT;
      if (FS == 'B') goto BIN;
      if (FS == 'R' && MODE == 0) goto RHEX;
      if (FS == 'K') goto OCT;
      if (FS == 'C') {
        EBCDIC = 1;
        goto MULT;
      }
      if (FS == 'D' && MODE == 0) {
        CPREC = 7;
        if ('0' <= CC[(Q) - (0)] && CC[(Q) - (0)] = '9') goto N;
        if (CC[(Q) - (0)] = '.') goto DOT;
      }

      Q = Q - 2;
      return;
    // SINGLECHBETWEENQUOTES
    QUOTE:

      if (CC[(Q + 2) - (0)] = '\'\'') {
        S = CC[(Q + 1) - (0)];
        Q = Q + 3;
        if (S != '\'\'') goto IEND;
        if (CC[(Q) - (0)] = '\'\'') {
          Q = Q + 1;
          goto IEND;
        }
      }
      // NOTVALID

      return;
      // CHECKFORE"...."

    NOTQUOTE:

      if (!(FS == 'E' && CC[(Q + 1) - (0)] = '"')) return;
      EBCDIC = 1;
      Q = Q + 1;
    // DOUBLEQUOTEDSTRING
    STR2:

      A = 0x35;
      TEXTTEXT(EBCDIC);
      CTYPE = 5;
      return;
    // HEXCONSTANTS
    HEX:
      T = 0;

      do {
        I = CC[(Q) - (0)];
        Q = Q + 1;
        if (I == '\'\'') break;
        T = T + 1;
        if (!('0' <= I && I <= '9' || 'A' <= I && I <= 'F' && T < 17)) return;
        if (T == 9) {
          SS = S;
          S = 0;
        }
        S = (S << 4) + (I & 15) + 9 * (I >> 6);
      } while (1);
      if (T > 8) {
        Z = 4 * (T - 8);
        S = S | (SS << Z);
        SS = SS >> (32 - Z);
        CPREC = 6;
      }

    IEND:
      if (CPREC == 6) {
        TOAR4(R, SS);
        R = R + 4;
      }
      if (CPREC == 5 && 0 <= S && S <= 0x7FFF) {
        CPREC = 4;
        TOAR2(R, S);
        R = R + 2;

      } else {
        TOAR4(R, S);
        R = R + 4;
      }
      if (!(MODE != 0 && CPREC == 6)) HIT = 1;
      A = CPREC << 4 | CTYPE;
      return;
    // REALHEXCONSTANTS
    RHEX:

      T = 0;
      do {
        I = CC[(Q) - (0)];
        Q = Q + 1;
        if (T & 7 == 0 && T != 0) {
          TOAR4(R, S);
          R = R + 4;
          S = 0;
        }

        if (I == '\'\'') break;
        T = T + 1;
        if (!('0' <= I && I <= '9' || 'A' <= I && I <= 'F')) return;
        S = (S << 4) + (I & 15) + 9 * (I >> 6);
      } while (1);
      if (!(T == 8 || T == 16 || T == 32)) return;
      if (T == 32)
        CPREC = 7;
      else
        CPREC = 4 + T / 8;
      A = CPREC << 4 | 2;
      HIT = 1;
      return;
    // OCTALCONSTANTS
    OCT:

      T = 0;
      do {
        I = CC[(Q) - (0)];
        Q = Q + 1;
        T = T + 1;
        if (I == '\'\'') break;
        if (!('0' <= I && I <= '7' && T < 12)) return;
        S = S << 3 | (I & 7);
      } while (1);
      goto IEND;
    // MULTIPLECONSTANTS
    MULT:
      T = 0;

      do {
        I = CC[(Q) - (0)];
        Q = Q + 1;
        T = T + 1;
        if (I == '\'\'') {
          if (CC[(Q) - (0)] = '\'\'')
            break;
          else
            Q = Q + 1;
        }

        if (T >= 5) return;
        if (EBCDIC != 0) I = ITOETAB[(I) - (0)];
        S = S << 8 | I;
      } while (1);
      goto IEND;
    // BINARYCONST
    BIN:
      T = 0;

      do {
        I = CC[(Q) - (0)];
        Q = Q + 1;
        T = T + 1;
        if (I == '\'\'') break;
        if (!('0' <= I && I <= '1' && T < 33)) return;
        S = S << 1 | I & 1;
      } while (1);
      goto IEND;
    // CONSTANTSTARTSWITHDIGIT
    N:

      I = CC[(Q) - (0)];
      ? Please recode the source file so that loops with
          "%until <cond> %cycle ... %repeat" are replaced by
          "%cycle ... %repeat %until <cond>" do {
        CVALUE = TEN * CVALUE + (I & 15);
        // ONTONEXTCHAR
        Q = Q + 1;
        I = CC[(Q) - (0)];
      }
      while (!(I < '0' || I > '9'))
        ;
      if (!(MODE == 0 && I == '.')) goto ALPHA;
    DOT:
      Q = Q + 1;
      X = TEN;
      I = CC[(Q) - (0)];
      // CONSTANTHASDECIMALPOINT
      DOTSEEN = 1;

      while ('0' <= I && I <= '9') {
        CVALUE = CVALUE + (I & 15) / X;
        X = TEN * X;
        Q = Q + 1;
        I = CC[(Q) - (0)];
      }
    // TESTFOREXPONENT
    ALPHA:

      if (MODE == 0 && CC[(Q) - (0)] = '@') {
        Q = Q + 1;
        X = CVALUE;
        Z = 1;
        I = CC[(Q) - (0)];
        if (I == '-') Z = -1;
        if (I == '+' || I == '-') Q = Q + 1;
        CONST(2);
        if (HIT == 0) return;
        HIT = 0;
        R = RR + 1;
        // EXPONENTMUSTBEHALFINTEGER
        if (A >> 4 != 4) return;

        S = FROMAR2(R + 1) * Z;
        if (S == -99)
          CVALUE = 0;
        else {
          if (USEIMP == NO) {
            // MASKOUTREALOVERFLOW

            asm();
          }

          while (S > 0) {
            S = S - 1;
            CVALUE = CVALUE * TEN;
            if (USEIMP == NO) {
              asm();
            }
          }
          while (S < 0 && CVALUE != 0) {
            S = S + 1;
            CVALUE = CVALUE / TEN;
          }
        }
      }
      // SEEIFITISINTEGER

      if (FS == 'D') {
        I = CC[(Q) - (0)];
        if (I == '\'')
          Q = Q + 1;
        else
          return;
        // ENSURENOTTAKENASINTEGER
        DOTSEEN = 1;
      }

      if (DOTSEEN == 1 || CVALUE > IMAX || != 0)
        CTYPE = 2;
      else {
        CTYPE = 1;
        S = ;
      }
      if (CTYPE == 1) goto IEND;
      // NO32BITREALCONSTS
      if (CPREC == 5) CPREC = 6;

      if (CPREC == 6) {
        if (USEIMP == NO) {
          // SOFTWAREROUNDINMCCODEONLY

          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
        }
      }

      TOAR8(R, CVALUE);
      R = R + 8;
      if (CPREC == 7) {
        TOAR8(R, );
        R = R + 8;
      }
      A = (CPREC << 4) + CTYPE;
      HIT = 1;
    FAIL:
    };

    void TEXTTEXT(int EBCDIC) {
      //***********************************************************************
      //*PROCESSESTEXTBETWEENDOUBLEQUOTESANDSTORESINISOOREBCDIC*
      //***********************************************************************

      int J;
      int II;

      const int QU = '"';

      I = CC[(Q) - (0)];
      S = R + 4;
      R = R + 5;
      HIT = 0;
      // FAILUNLESSINITIALQUOTE
      if (!(I == QU)) return;

      Q = Q + 1;
      do {
        I = CC[(Q) - (0)];
        if (EBCDIC != 0)
          II = ITOETAB[(I) - (0)];
        else
          II = I;
        A = II;
        R = R + 1;
        if (I == QU) {
          Q = Q + 1;
          if (CC[(Q) - (0)] = QU) break;
        }

        if (I == 10)
          READLINE(1, QU);
        else
          Q = Q + 1;
        if (R - S > 256) FAULT(106, 0);
      } while (1);
      R = R - 1;
      J = R - S - 1;
      A = J;
      HIT = 1;
    };

  BEND:
  };
  // OFBLOCKCONTAININGPASS1

  if (LEVEL > 1) FAULT(15, 0);
  I = 0;
  ;
  if (FAULTY == 0) {
    ;
    ;
    ;
    ;
    ;
    if (LINE > 90 && LIST != 0)
      ;
    else
      ;

  } else {
    ;
    COMREG(24) = 8;
    COMREG(47) = FAULTY;
    exit(0);
  }

  {
    //***********************************************************************
    //*SECONDORCODEGENERATINGPASS*
    //***********************************************************************

    int REGISTER[(7) - (0) + 1]

        ;
    int GRUSE[(7) - (0) + 1]

        int GRAT[(7) - (0) + 1]

        int GRINF1[(7) - (0) + 1]

        int GRINF2[(7) - (0) + 1]

        int OLINK[(7) - (0) + 1]

        char CODE[(268) - (0) + 1]

        ;
    char GLABUF[(268) - (0) + 1]

        int PLABS[(31) - (0) + 1]

        ;
    int DESADS[(31) - (0) + 1]

        int PLINK[(31) - (0) + 1]

        int SET[(MAXLEVELS) - (0) + 1]

        ;
    int STACKBASE[(MAXLEVELS) - (0) + 1]

        int RAL[(MAXLEVELS) - (0) + 1]

        int FLAG[(MAXLEVELS) - (0) + 1]

        int L[(MAXLEVELS) - (0) + 1]

        int M[(MAXLEVELS) - (0) + 1]

        int NMDECS[(MAXLEVELS) - (0) + 1]

        int ONWORD[(MAXLEVELS) - (0) + 1]

        int ONINF[(MAXLEVELS) - (0) + 1]

        int JUMP[(MAXLEVELS) - (0) + 1]

        int LABEL[(MAXLEVELS) - (0) + 1]

        int JROUND[(MAXLEVELS) - (0) + 1]

        int DIAGINF[(MAXLEVELS) - (0) + 1]

        int DISPLAY[((MAXLEVELS) - (0) + 1) - (0)]

        int AUXSBASE[(MAXLEVELS) - (0) + 1]

        int NAMES[(MAXLEVELS) - (0) + 1]

        int AVLWSP[(4) - (0) + 1][(MAXLEVELS) - (0) + 1]

        ;

    ;

    int **CTABLE;

    auto void CNOP(int I, int J);
    auto void PCLOD(int FROM, int TO);
    auto void PCONST(int X);
    auto void PSF1(int OPCODE, int K, int N);
    auto void PF1(int OPCODE, int KP, int KPP, int N);
    auto void PSORLF1(int OPCODE, int KP, int KPP, int N);
    auto void PF2(int OPCODE, int H, int Q, int N, int MASK, int FILLER);
    auto void PF3(int OPCODE, int MASK, int KPPP, int N);
    auto void NOTECREF(int CA, int VAL);
    auto int PARAMDES(int PREC);
    auto int MAPDES(int PREC);
    auto int SPECIALCONSTS(int WHICH);
    auto void STORECONST(int *D, int L, int AD);
    auto void DUMPCONSTS(void);
    auto void PLANT(int VALUE);
    auto void PLUG(int I, int J, int K, int BYTES);
    auto void CODEOUT(void);
    auto void PROLOGUE(void);
    auto void EPILOGUE(void);
    auto void COMPILEASTMNT(void);
    auto void CSS(int P);
    auto void LOADDATA(void);
    auto void ABORT(void);
    //*DELSTART

    auto void PRINTUSE(void);
    //*DELEND

    for (I = 0; I != 7; I += 1) {
      REGISTER[(I) - (0)] = 0;
      GRUSE[(I) - (0)] = 0;
      GRINF1[(I) - (0)] = 0;
      GRAT[(I) - (0)] = 0;
      GRINF2[(I) - (0)] = 0;
    }
    for (I = 0; I != MAXLEVELS; I += 1) {
      SET[(I) - (0)] = 0;
      STACKBASE[(I) - (0)] = 0;
      RAL[(I) - (0)] = 0;
      JUMP[(I) - (0)] = 0;
      JROUND[(I) - (0)] = 0;
      LABEL[(I) - (0)] = 0;
      FLAG[(I) - (0)] = 0;
      L[(I) - (0)] = 0;
      M[(I) - (0)] = 0;
      DIAGINF[(I) - (0)] = 0;
      DISPLAY[(I) - (0)] = 0;
      ONWORD[(I) - (0)] = 0;
      ONINF[(I) - (0)] = 0;
      NAMES[(I) - (0)] = -1;
      for (J = 0; J != 4; J += 1) {
        AVLWSP[(J) - (0)][(I) - (0)] = 0;
      }
    }
    CTABLE = ;
    CONSTHOLE = 0;
    PROLOGUE();
    LINE = 0;
    NEXTP = 1;
    LEVEL = 1;
    STMTS = 0;
    RLEVEL = 0;
    RBASE = 0;
    while (A | A != 0) {
      COMPILEASTMNT();
    }
    LINE = 99999;
    EPILOGUE();
    LOADDATA();
    exit(0);
    void COMPILEASTMNT(void) {
      int I;
      //*DELSTART

      if (DCOMP != 0 && CA > CABUF) {
        CODEOUT();
        PRINTUSE();
      }
      //*DELEND

      I = NEXTP;
      NEXTP = NEXTP + (A << 16) + (A << 8) + A;
      LINE = (A << 8) + A;
      STMTS = STMTS + 1;
      CSS(I + 5);
      // CHECKASLifLINE&7=0
    };

    void LOADDATA(void) {
      //***********************************************************************
      //*PASSINFORMATIONTOLPUTTOENABLEITTOGENERATETHE*
      //*LOADERDATAANDCOMPLETETHEPROGRAMFILE.*
      //***********************************************************************
      int LANGFLAG;
      int PARMS;

      GLACA = (GLACA + 7) & (-8);
      USTPTR = (USTPTR + 7) & (-8);
      CODEOUT();
      CNOP(0, 8);
      DUMPCONSTS();
      if (PARMTRACE == 0)
        LANGFLAG = 6;
      else
        LANGFLAG = 1;
      LANGFLAG = LANGFLAG << 24;
      PARMS = (PARMDIAG << 1 | PARMLINE) << 1 | PARMTRACE;
      // LANGRLSE&MAINPROG
      FIXEDGLA[(4) - (0)] = LANGFLAG | 1 << 16 | (CPRMODE & 1) << 8 | PARMS;

      I = GLACA - GLACABUF;
      if (INHCODE == 0) {
        if (!(I == 0)) LPUT(2, I, GLACABUF, );
        // BACKOFGLAP

        LPUT(2, FIXEDGLALEN, 0, )
        // FRONTOFGLAP
        ;

        LPUT(19, 2, 8, 5)
        // RELOCATEGLASTADDRESS
        ;

        LPUT(19, 2, 12, 4)
        // RELOCATECODESTADDRESS
        ;

        I = 0xE2E2E2E2;
        LPUT(4, 4, SSTL, );
        //
      }

      SSTL = (SSTL + 11) & (-8);
      ;
      ;
      ;
      ;
      ;
      ;
      ;
      ;
      ;
      REGISTER[(0) - (0)] = CA;
      REGISTER[(1) - (0)] = GLACA;
      REGISTER[(2) - (0)] = 0;
      REGISTER[(3) - (0)] = SSTL;
      REGISTER[(4) - (0)] = USTPTR;
      K = CA + GLACA + SSTL + USTPTR;
      REGISTER[(5) - (0)] = K;
      ;
      ;
      // MARKERFORCOMPTOPRINT
      ;
      ;
      // SUMMARY

      if (FAULTY == 0) {
        ;
        ;
        ;
        ;
        COMREG(47)
        // NOOFSTMTSFORCOMPER
        = STMTS;

      } else {
        ;
        ;
        ;
        if (FAULTY > 1)
          ;
        COMREG(47)
        // NOOFFAULTSFORCOMPER
        = FAULTY;
      }

      ;
      ;
      I = 0;
      if (FAULTY != 0) I = 8;
      COMREG(24) = I;
      if (INHCODE == 0) LPUT(7, 24, 0, );
      // SUMMARYINFO..REGISTERASBUF

      ;
      exit(0);
    };
    //
    //***********************************************************************
    //*IMPCODEPLANTINGROUTINES*
    //*CODEANDGLAPAREPUTINTOTHEBUFFERS'CODE,GLABUF(0:268)'*
    //*BYANUMBEROFTRIVIALROUTINES.LPUTISCALLEDTOADDTHE*
    //*BUFFERTOTHEOUTPUTFILE.THEBUFFERSAREBASICALLY0:255*
    //*WITHA12-BYTEMARGINTOMINIMISETHENUMBEROFTESTSFOR*
    //*THEBUFFERFULLCONDITION*
    //**
    //*PPCURR(GLACURR)ISTHEBUFFERPOINTER*
    //*CA(GLACA)ISTHERELATIVEADDRESSOFTHENEXTBYTE*
    //*CABUF(GLACABUF)ISCA(GLACA)FORSTARTOFBUFFER*
    //***********************************************************************
    //*DELSTART
    void RECODE(int S, int F, int AD) {
      if (S != F) {
        ;
        ;
        NCODE(S, F, AD);
      }
    };
    //*DELEND

    void CODEOUT(void) {
      if (PPCURR > 0) {
        //*DELSTART

        if (DCOMP != 0) RECODE(, , CABUF);
        //*DELEND

        if (INHCODE == 0) LPUT(1, PPCURR, CABUF, );
        PPCURR = 0;
        CABUF = CA;
      }
    };

    void PLANT(int HALFWORD) {
      //***********************************************************************
      //*ADDAHALFWORDOFBINARYTOTHEBUFFER*
      //***********************************************************************

      if (USEIMP == YES) {
        CODE[(PPCURR) - (0)] = HALFWORD >> 8;
        CODE[(PPCURR + 1) - (0)] = HALFWORD;
        PPCURR = PPCURR + 2;

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      CA = CA + 2;
      if (PPCURR >= 256) CODEOUT();
    };

    void PCONST(int WORD) {
      //***********************************************************************
      //*ADDAWORDOFBINARYTOTHEBUFFER*
      //***********************************************************************

      int I;

      if (USEIMP == YES) {
        for (I = 24; I != 0; I += -8) {
          CODE[(PPCURR) - (0)] = WORD >> I & 255;
          PPCURR = PPCURR + 1;
        }

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      CA = CA + 4;
      if (PPCURR >= 256) CODEOUT();
    };

    void PSF1(int OPCODE, int K, int N) {
      //***********************************************************************
      //*PLANTTHEHALFWORDFORMSOFPRIMARYFORMATNRINSTRNS*
      //*IFNISTOOLARGEFORTHESHORTFORMPF1ISCALLEDTOPLANT*
      //*THECORRESPONDINGLONGFORM*
      //***********************************************************************
      int KPP;
      // ABORTunless0<=K<=2andOPCODE&1=0

      if (K == 0 && -64 <= N && N <= 63 || K != 0 && 0 <= N && N <= 511) {
        if (K != 0) N = N / 4;
        if (USEIMP == YES) {
          CODE[(PPCURR) - (0)] = OPCODE | K >> 1;
          CODE[(PPCURR + 1) - (0)] = (K & 1) << 7 | N & 127;
          PPCURR = PPCURR + 2;

        } else {
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
        }

        CA = CA + 2;
        if (PPCURR >= 256) CODEOUT();

      } else {
        if (K == 0)
          KPP = 0;
        else
          KPP = 2;
        PF1(OPCODE, K >> 1 << 1, KPP, N);
      }
    };

    void PF1(int OPCODE, int KP, int KPP, int N) {
      //***********************************************************************
      //*PLANTTHENORMALFORMSOFPRIMARYFORMATINSTRNS(IETHOSE*
      //*WHICHDONOTDEPENDONTHESIZEOFN)*
      //***********************************************************************
      int INC;
      // ABORTunless0<=KP<=3and0<=KPP<=7andOPCODE&1=0

      INC = 2;
      if (KPP == PC) {
        if (N < 0) {
          N = N & 0x7FFFFFFF;
          NOTECREF(CA, N);
        }
        N = (N - CA) / 2;
      }

      if ((1 << KPP) & 0b101100 != 0) N = N / 4;
      if (USEIMP == YES) {
        CODE[(PPCURR) - (0)] = OPCODE | 1;
        CODE[(PPCURR + 1) - (0)] = 0x80 | KP << 5 | KPP << 2 | (N >> 16 & 3);
        CODE[(PPCURR + 2) - (0)] = N >> 8 & 255;
        CODE[(PPCURR + 3) - (0)] = N & 255;

      } else {
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
        asm();
      }

      if (KPP <= 5) INC = 4;
      PPCURR = PPCURR + INC;
      CA = CA + INC;
      if (PPCURR >= 256) CODEOUT();
    };

    void PSORLF1(int OPCODE, int KP, int KPP, int N) {
      //***********************************************************************
      //*ASPF1BUTCUTVALIDFORMSTOSHORTFORM*
      //***********************************************************************

      int INC;

      INC = 2;
      if (KPP == 0 && 0 == KP && -64 <= N && N <= 63 ||
          KPP == LNB && KP & 1 == 0 && 0 <= N && N <= 511) {
        if (KPP == LNB) KP = 1 + (KP >> 1);
        if (KP != 0) N = N / 4;
        if (USEIMP == YES) {
          CODE[(PPCURR) - (0)] = OPCODE | KP >> 1;
          CODE[(PPCURR + 1) - (0)] = (KP & 1) << 7 | (N & 127);

        } else {
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
        }

      } else {
        if (KPP == PC) {
          if (N < 0) {
            N = N & 0x7FFFFFFF;
            NOTECREF(CA, N);
          }
          N = (N - CA) / 2;
        }

        if ((1 << KPP) & 0b101100 != 0) N = N / 4;
        if (USEIMP == YES) {
          CODE[(PPCURR) - (0)] = OPCODE | 1;
          CODE[(PPCURR + 1) - (0)] = ((4 | KP) << 3 | KPP) << 2 | (N >> 16 & 3);
          CODE[(PPCURR + 2) - (0)] = N >> 8 & 255;
          CODE[(PPCURR + 3) - (0)] = N & 255;

        } else {
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
        }

        if (KPP <= 5) INC = 4;
      }

      CA = CA + INC;
      PPCURR = PPCURR + INC;
      if (PPCURR >= 256) CODEOUT();
    };

    void PF2(int OPCODE, int H, int Q, int N, int MASK, int FILLER) {
      //***********************************************************************
      //*PLANTSECONDARY(STORETOSTORE)FORMATINSTRNS*
      //*THESEMAYBE16OR32BITDEPENDINGONQ*
      //***********************************************************************
      // ABORTunless0<=H<=1and0<=Q<=1and0<=N<=127  !andOPCODE&1=0
      PLANT(OPCODE << 8 | H << 8 | Q << 7 | N);
      if (Q != 0) PLANT(MASK << 8 | FILLER);
    };

    void PF3(int OPCODE, int MASK, int KPPP, int N) {
      //***********************************************************************
      //*PLANTTHETERTIARY(JUMP)FORMATINSTRUCTIONS*
      //***********************************************************************
      // ABORTunless0<=MASK<=15and0<=KPPP<=7andOPCODE&1=0
      if (KPPP == PC) {
        if (N < 0) {
          N = N & 0x7FFFFFFF;
          NOTECREF(CA, N);
        }
        N = (N - CA) / 2;
      }

      CODE[(PPCURR) - (0)] = OPCODE | MASK >> 3 & 1;
      CODE[(PPCURR + 1) - (0)] = (MASK & 7) << 5 | KPPP << 2 | (N >> 16 & 3);
      PPCURR = PPCURR + 2;
      CA = CA + 2;
      if (KPPP <= 5) {
        CODE[(PPCURR) - (0)] = N >> 8 & 255;
        CODE[(PPCURR + 1) - (0)] = N & 255;
        PPCURR = PPCURR + 2;
        CA = CA + 2;
      }

      if (PPCURR >= 256) CODEOUT();
    };

    void NOTECREF(int CA, int N) {
      //***********************************************************************
      //*NOTETHATA(PC+N)INSTRUCTIONHASNRELATIVETOCONSTTABLE*
      //*NOTREATIVETOCODE.REMEMBERTHEADDRESSOFTHEINSTRUCTION*
      //*SOTHATANLPUT(18)CORRECTIONCANBEMADEATENDOFCOMPILATION*
      //***********************************************************************
      recfm *CELL;
      //(LISTF)

      CELL = ASLIST[(CREFHEAD) - (0)];
      if (CREFHEAD == 0 || CELL != 0) {
        PUSH(CREFHEAD, CA, 0, 0);
        return;
      }
      if (CELL == 0)
        CELL = CA;
      else
        CELL = CA;
    };

    void PCLOD(int FROM, int TO) {
      //***********************************************************************
      //*PLANTASERIESOFINTRUNSFROMARRAYFIXEDCODE*
      //***********************************************************************

      int I;
      // constintegerarrayFIXEDCODE(0:127)
      // cycleI=FROM,1,TO
      // PCONST(FIXEDCODE(I))
      // repeat
    };

    void CNOP(int I, int J) {
      while (CA & (J - 1) != I) PSF1(JUNC, 0, 1);
    };

    void PGLA(int BDRY, int L, int INFADR) {
      int I;
      int J;

      J = GLACA;
      GLACA = (J + BDRY - 1) & (-BDRY);
      // COMPLETETHEROUNDING
      GLACURR = GLACURR + GLACA - J;

      if (L + GLACURR > 256) {
        if (INHCODE == 0) LPUT(2, GLACURR, GLACABUF, );
        GLACURR = 0;
        GLACABUF = GLACA;
      }

      for (I = 0; I != L - 1; I += 1) {
        GLABUF[(GLACURR + I) - (0)] = ;
      }
      GLACA = GLACA + L;
      GLACURR = GLACURR + L;
    };

    void PLUG(int AREA, int AT, int VALUE, int BYTES) {
      //***********************************************************************
      //*WRITEUPTOONEWORDINTOOBJECTFILEOUTOFSEQUENCE*
      //***********************************************************************

      int *WCABUF;

      int I;
      int RELAD;
      int BUFAD;

      WCABUF = CABUF;
      BUFAD = ;
      if (AREA == 2) {
        WCABUF = GLACABUF;
        BUFAD = ;
      }
      RELAD = AT - WCABUF;
      if (0 <= RELAD && RELAD <= 256 && AREA <= 3) {
        for (I = 0; I != BYTES - 1; I += 1) {
        Mk_AST_assignment:
          Var = -1;
        }

      } else {
        if (RELAD == -2) CODEOUT();
      // Usually -1 means an explicitly unassigned variable somewhere
      left_operand:
        Diagnose(0xffffffff, "left_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 334);
      right_operand:
        Diagnose(0x88468fe5, "right_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 335)
            : AST_PHRASE stored at AST(4624357)
            : AST_CONST Index =
                  4624357 if (INHCODE == 0) LPUT(AREA, BYTES, AT, -BYTES);
        //*DELSTART
        // Usually -1 means an explicitly unassigned variable somewhere

      left_operand:
        Diagnose(0xffffffff, "left_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 334);
      right_operand:
        Diagnose(0x8846925e, "right_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 335)
            : AST_PHRASE stored at AST(4624990)
            : AST_CONST Index = 4624990
              // Usually -1 means an explicitly unassigned variable somewhere
              left_operand
            : Diagnose(
                  0xffffffff, "left_operand",
                  "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                  334);
      right_operand:
        Diagnose(0x88469323, "right_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 335)
            : AST_PHRASE stored at AST(4625187)
            : AST_CONST Index =
                  4625187 if (DCOMP == 1 && 1 == AREA) NCODE(-BYTES, , AT);
        //*DELEND
      }
    };

    int PARAMDES(int PREC) {
      //***********************************************************************
      //*SETUPBNDEDL=1DESRIPTORFORPASSINGVARIABLEBYREFERENCE*
      //*ONLYTHETOPHALFISSETUP*
      //***********************************************************************
      int K;
      int DES;

      K = DESADS[(PREC) - (0)];
      if (!(K == 0)) return K;
      if (PREC == 4)
        DES = 0x58000002;
      else
        DES = PREC << 27 | 1;
      STORECONST(K, 4, );
      DESADS[(PREC) - (0)] = K;
      return K;
    };

    int MAPDES(int PREC) {
      //***********************************************************************
      //*SETUP8BITZEROADDRESSUNSCALEDBCIDESCRTRFORMAPPING*
      //***********************************************************************

      int K;
      int DES0;
      int DES1;

      K = DESADS[(PREC + 8) - (0)];
      if (!(K == 0)) return K;
      if (PREC == 4)
        DES0 = 0x58000002;
      else
        DES0 = 0x03000000 | PREC << 27;
      DES1 = 0;
      STORECONST(K, 8, );
      DESADS[(PREC + 8) - (0)] = K;
      return K;
    };

    int SPECIALCONSTS(int WHICH) {
      //***********************************************************************
      //*PUTSCERTAINSPECIALCONSTANTSINTOTHECONSTANTTABLEON*
      //*DEMANDANDREMEMBERSTHEIRPOSNTOAVOIDSEARCHONG*
      //***********************************************************************
      const int SCS[(5) - (0) + 1] = 0x40800000,
          0, 0x41100000, 0, 1, 0;

      int K;

      K = DESADS[(WHICH + 16) - (0)];
      if (!(K == 0)) return K;
      STORECONST(K, 8, );
      DESADS[(WHICH + 16) - (0)] = K;
      return K;
    };

    void STORECONST(int *D, int L, int AD) {
      //***********************************************************************
      //*PUTTHECONSTANTVALOFLENGTH'L'INTOTHECONSTANTTABLE*
      //*ACHECKISMADETOSEEIFTHECONSTANTHASALREADY*
      //*BEENINSERTEDINWHICHCASETHEOLDCOPYISREUSED*
      //***********************************************************************
      int I;
      int J;
      int K;
      int C1;
      int C2;
      int C3;
      int C4;
      int LP;

      LP = L / 4;
      C2 = 0;
      C3 = 0;
      C4 = 0;
      for (I = 0; I != L - 1; I += 1) {
      Mk_AST_assignment:
        Var = -1;
      }
      if (PARMOPT != 0) goto SKIP;
      // AFTERSTRINGSINCTABLE
      K = CONSTBTM;

      if (L == 4) {
        if (USEIMP == YES) {
          while (K < CONSTPTR) {
            if (CTABLE == C1 && CONSTHOLE != K) {
              D = 4 * K | 0x80000000;
              return;
            }
            K = K + 1;
          }

        } else {
          asm();
          asm();
          asm();
          asm();
        AGN1:
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
          asm();
        }

      } else {
        J = CONSTPTR - LP;
        while (K <= J) {
          if (CTABLE == C1 && CTABLE == C2 && CONSTHOLE < K ||
              CONSTHOLE >= K + LP) {
            if (L == 8 || CTABLE == C3 && CTABLE == C4) {
              D = 4 * K | 0x80000000;
              return;
            }
          }

          K = K + 2;
        }
      }

    SKIP:
      if (L == 4 && CONSTHOLE != 0) {
        CTABLE = C1;
        D = 4 * CONSTHOLE | 0x80000000;
        CONSTHOLE = 0;
        return;
      }

      if (L > 4 && CONSTPTR & 1 != 0) {
        CONSTHOLE = CONSTPTR;
        CONSTPTR = CONSTPTR + 1;
      }
      D = 4 * CONSTPTR | 0x80000000;
      CTABLE = C1;
      CTABLE = C2;
      if (L == 16) {
        CTABLE = C3;
        CTABLE = C4;
      }
      CONSTPTR = CONSTPTR + LP;
      if (CONSTPTR > CONSTLIMIT) FAULT(107, 0);
    };

    void GETENV(int *HEAD) {
      //***********************************************************************
      //*SAVEACOPYOFTHEREGISTERSTATEFORFUTUREREFERENCE*
      //***********************************************************************

      int I;
      int USE;

      for (I = 0; I != 7; I += 1) {
        // MAINUSEONLY
        USE = GRUSE[(I) - (0)] & 0xFF;

        if (USE != 0)
          PUSH(HEAD, GRINF1[(I) - (0)], GRAT[(I) - (0)], I << 8 | USE);
      }
    };

    void RESTORE(int HEAD) {
      //***********************************************************************
      //*RESETTHEREGISTERSTOENVIRONMENTINLISTHEADEDBY'HEAD'*
      //***********************************************************************

      int I;
      int R;
      int USE;
      int INF;
      int AT;

      for (I = 0; I != 7; I += 1) {
        if (REGISTER[(I) - (0)] = 0) {
          GRUSE[(I) - (0)] = 0;
          GRINF1[(I) - (0)] = 0;
        }
      }
      while (HEAD != 0) {
        POP(HEAD, INF, AT, I);
        R = I >> 8;
        USE = I & 255;
        if (REGISTER[(R) - (0)] = 0) {
          GRUSE[(R) - (0)] = USE;
          GRINF1[(R) - (0)] = INF;
        }
        GRAT[(R) - (0)] = AT;
      }
    };

    void RELOCATE(int GLARAD, int VALUE, int AREA) {
      //***********************************************************************
      //*PLANTSAWORDINTHEGLA(IFGLARAD<0)ANDARRANGESTO*
      //*RELOCATEITRELATIVETOANAREA(CODE=1,GLA=2,CST=4,GST=5*
      //*IFTHERELOCATIONISRELATIVETOSYMBOLTABLESTHEWORD*
      //*CANNOTBERELOCATEDTILLSIZEOFTHECODE(ORGLA)ISKNOWN*
      //***********************************************************************
      if (GLARAD < 0) {
        PGLA(4, 4, );
        GLARAD = GLACA - 4;
      }
      LPUT(19, 2, GLARAD, AREA);
    };

    void GXREF(_imp_string NAME, int MODE, int XTRA, int AT) {
      //***********************************************************************
      //*ASKLPUTTOARRANGEFORADOUBLEWORDAT'AT'INTHEGLA*
      //*TOCONTAINADESCRIPTORFORNAME'NAME'.*
      //*MODE=0STATICCODEXREF*
      //*MODE=1DYNAMICCODEXREF*
      //*MODE=2DATAXREFXTRA=MINIMIUMLENGTH*
      //***********************************************************************
      int LPUTNO;

      if (MODE == 2)
        LPUTNO = 15;
      else
        LPUTNO = MODE + 12;
      LPUT(LPUTNO, XTRA, AT, );
    };

    void CXREF(_imp_string NAME, int MODE, int XTRA, int *AT) {
      //***********************************************************************
      //*CREATEAZEROEDAREAINTHEGLAANDCALLGXREFTOGET*
      //*ITFILLEDATLOADTIMEWITHINFORMATIONONANEXTERNALOBJECT*
      //*PARAMETERSAREASFORGXREF.*
      //***********************************************************************
      int Z1;
      int Z2;

      Z1 = 0;
      Z2 = 0;
      PGLA(8, 8, )
      // 2ZEROWORDS
      ;

      AT = GLACA - 8;
      GXREF(NAME, MODE, XTRA, AT);
    };

    void CODEDES(int *AT) {
      //***********************************************************************
      //*PUTACODEDESCRIPTORINTOTHEPLTFORUSEBYDEFINEEP*
      //***********************************************************************

      int DESC1;
      int DESC2;

      DESC1 = 0xE1000000;
      DESC2 = 0;
      if (CDCOUNT == 0) {
        FIXEDGLA[(0) - (0)] = DESC1;
        AT = 0;
      } else {
        PGLA(8, 8, );
        AT = GLACA - 8;
      }
      CDCOUNT = CDCOUNT + 1;
    };

    void DEFINEEP(_imp_string NAME, int ADR, int AT, int MAIN) {
      //***********************************************************************
      //*ANEPCONSISTSOFACODEDESCRIPTORINTHEGLA(PLT)OF*
      //*FILECONTAININGTHEEP.LPUTISTOLDABOUTTHISANDTHELOADER*
      //*ARRANGESTOPUTADESCRIPTOR-DESCRIPTORTOTHECODE-DESC*
      //*INTHEGLAOFANYFILEREFERENCESTHISEP.THISFIRSTWORD*
      //*OFICLSPLTISTHEMAINEPANDWEMIMICTHISASFARASPOSS*
      //***********************************************************************
      if (AT == 0)
        FIXEDGLA[(1) - (0)] = ADR;
      else
        PLUG(2, AT + 4, ADR, 4);
      RELOCATE(AT + 4, ADR, 1);
      if (NAME != "") LPUT(11, MAIN << 31 | 2, AT, );
    };

    void PROLOGUE(void) {
      //***********************************************************************
      //*GENERATESTHESUBROUTINETHATALWAYSAREREQUIREDONTOTHE*
      //*FRONTOFTHEOBJECTPROGRAMWHERETHEYAREDIRECTLYADDRESABLE*
      //***********************************************************************
      auto int STRINGIN(int POS);
      auto void ERREXIT(int A, int B, int C);
      int I;
      int K;
      int L;
      int STCA;

      I = 0xC2C2C2C2;
      LPUT(4, 4, 0, );
      SSTL = 4;
      for (I = 0; I != 31; I += 1) {
        PLABS[(I) - (0)] = 0;
        PLINK[(I) - (0)] = 0;
        DESADS[(I) - (0)] = 0;
      }
      //
      // GENERATETHEFIXED-FLOATCONSTANTSTHATMAYBENEEDED
      //

      PLABS[(1) - (0)] = CA;
      for (I = 0; I != 1; I += 1) {
        PCONST(UNASSPAT);
      }
      //
      // GENERATETHERUNTIMEERRORROUTINE:-
      // MDIAGSFORNRISroutineMDIAGS(intPC,LNB,ERROR,XTRA)
      // PCISADUMMY(SEGFIELDONLYUSED)EXCEPTAFTERCONTINGENCY
      // ONENTRYTOTHISSUBROUTINEERROR&XTRAAREINACCAS64BITINTEGER
      // ENTRYHASBEENBYJLKSORETURNADDRESSSTACKED
      //
      // RTFPRCL4TOPLANTPARAMS
      // JLK+1STACKDUMMYPC
      // STLNTOSLNBASSECONDPARAMETER
      // STTOSERRORNOASTHIRDPARAM
      // LXN(LNB+4)POINTERTOGLA
      // RALN9TOSTOREDLNB
      // CALL((XNB+10))VIAXREF=DESCRIPTOR-DESCRIPTOR
      // JTOSBACKAFTERAMONITOR
      //
      PLABS[(2) - (0)] = CA;
      PSF1(PRCL, 0, 4);
      PSF1(JLK, 0, 1);
      PF1(STLN, 0, TOS, 0);
      PF1(ST, 0, TOS, 0);
      PSF1(LXN, 1, 16);
      PSF1(RALN, 0, 9);
      PF1(CALL, 2, XNB, 40);
      PF1(JUNC, 0, TOS, 0);
      //
      // SUBROUTINETOCALLDEBUGROUTINE(S#IMPMON)LINENOINACC
      //
      // PRCL4
      // STTOS
      // LXN(LNB+4)
      // RALN6
      // CALL((XNB+IMPMONEPDISP))
      // JUNCTOS
      //
      if (PARMDBUG != 0) {
        PLABS[(3) - (0)] = CA;
        CXREF("S#IMPMON", PARMDYNAMIC, 2, K);
        PSF1(PRCL, 0, 4);
        PF1(ST, 0, TOS, 0);
        PSF1(LXN, 1, 16);
        PSF1(RALN, 0, 6);
        PF1(CALL, 2, XNB, K);
        PF1(JUNC, 0, TOS, 0);
      }
      //
      // SUBROUTINETOADVANCESTACKFRONTBYBWORDSANDFILLWITHUNASSIGNED
      //
      // JAT12,*+13BISZERO
      // LSSTOS
      // STSFTOS
      // LDTBSTRINGDECRIPTORSETUPDESCRIPTORFORMVL
      // LDATOS
      // ASFBADVANCEBYBWORDS
      // MYB4CHANGEBTOBYTES
      // LDBBANDMOVETOBOUNDFIELD
      // MVLL=DRANDFILLWITHX80S
      // STTOS
      // JTOSRETURN
      //
      if (PARMCHK == 1) {
        // ONLYREQUIREDWITHCHKING

        CNOP(0, 4);
        K = CA;
        PCONST(0x58000000);
        PLABS[(4) - (0)] = CA;
        PF3(JAT, 12, 0, 13);
        PF1(LSS, 0, TOS, 0);
        PF1(STSF, 0, TOS, 0);
        PF1(LDTB, 0, PC, K);
        PF1(LDA, 0, TOS, 0);
        PF1(ASF, 0, BREG, 0);
        PSF1(MYB, 0, 4);
        PF1(LDB, 0, BREG, 0);
        PF2(MVL, 1, 1, 0, 0, UNASSPAT & 255);
        PF1(ST, 0, TOS, 0);
        PF1(JUNC, 0, TOS, 0);
      }
      //
      // SOMEERRORROUTINES
      //

      if (PARMOPT != 0)
        ERREXIT(5, 0x801, 0)
        // UNASSIGNEDVARIABLE
        ;

      ERREXIT(6, 0x504, 0)
      // SWITCHLABELUNSET
      ;

      ERREXIT(7, 0x505, 1)
      // ILLEGEALEXPONENTIATION
      ;

      if (PARMOPT != 0)
        ERREXIT(8, 0x201, 0)
        // EXCESSBLOCKS
        ;

      ERREXIT(9, 0x601, 0)
      // CAPACITYEXCEEDED
      ;

      ERREXIT(10, 21, 0)
      // NORESULT
      ;

      if (PARMOPT != 0)
        ERREXIT(11, 0x501, 0)
        // CYCLENOTVALID
        ;

      ERREXIT(12, 0x701, 0)
      // RESFAILS
      ;

      if (PARMOPT != 0)
        ERREXIT(13, 36, 0)
        // WRONGNOOFPARAMS
        ;
      //
      // PUTTHESTRINGSONTOTHEFRONTOFCONSTANTAREA
      //
      CTABLE = 0x18000001;
      CTABLE = 4;
      STCA = 8;
      L = ;
      // INCASENOSTRINGS
      CONSTPTR = 2;

      while (STRLINK != 0) {
        I = STRLINK;
        STRLINK = FROMAR4(I);
        TOAR4(I, STRINGIN(I + 4))
        // CHANGELINKTOSTRINGADDR
        ;
      }
      STRLINK = 0x80000000;
      CONSTBTM = CONSTPTR;
      if (PARMOPT != 0) {
        CTABLE = 'IDIA';
        CONSTPTR = CONSTPTR + 1;
      }
      GXREF(MDEP, PARMDYNAMIC, 2, 40);
      if (PARMPROF != 0) {
        // ALLOCATEPROFILECOUNTAREA

        I = 0x38000001 + LINE;
        K = 8;
        PARMPROF = GLACA;
        PGLA(4, 8, );
        K = 0;
        for (I = 0; I != LINE; I += 1) {
          PGLA(4, 4, );
        }
        LINE = 0;
      }

      LEVEL = 1;
      for (I = 0; I != 31; I += 1) {
        if (PLINK[(I) - (0)] = 0) CLEARLIST(PLINK[(I) - (0)]);
      }
      return;
      int STRINGIN(int POS) {
        //***********************************************************************
        //*PUTASTRINGINTOTHECONSTANTAREACHECKINGFORDUPLICATES*
        //***********************************************************************

        int J;
        int K;
        int IND;
        int HD;

        recfm *CELL;
        //(LISTF)

        K = A;
        if (K == 0) return 0;
        IND = K & 31;
        HD = PLINK[(IND) - (0)];
        while (HD != 0) {
          CELL = ASLIST[(HD) - (0)];
          if (CELL == K && ==) return CELL - 4;
          HD = CELL;
        }
        HD = STCA;
      Mk_AST_assignment:
        Var = -1;
        STCA = STCA + 1;
        for (J = POS + 1; J != POS + K; J += 1) {
        Mk_AST_assignment:
          Var = -1;
          STCA = STCA + 1;
        }
        CONSTPTR = ((STCA + 7) & (-8)) >> 2;
        PUSH(PLINK[(IND) - (0)], K, HD, 0);
        return HD - 4;
      };

      void ERREXIT(int LAB, int ERRNO, int MODE) {
        //***********************************************************************
        //*MODE=0FORDUMMY(ZERO)XTRA-MODE=1XTRAINBREG*
        //***********************************************************************

        PLABS[(LAB) - (0)] = CA;
        if (MODE == 0)
          PSF1(LSS, 0, 0);
        else
          PF1(LSS, 0, BREG, 0);
        PSF1(LUH, 0, ERRNO);
        PSF1(JLK, 0, (PLABS[(2) - (0)] - CA) / 2);
      };
    };

    void CSS(int P) {
      auto void MERGEINFO(void);
      auto void REDUCEENV(int *HEAD);
      auto void ENTERJUMP(int MASK, int STAD, int FLAG);
      auto int ENTERLAB(int M, int FLAG);
      auto void REMOVELAB(int LAB);
      auto void CEND(int KKK);
      auto int CCOND(int CTO, int A, int B);
      auto void CHECKSTOF(void);
      auto int REVERSE(int MASK);
      auto void SETLINE(void);
      auto int SETXORYNB(int WHICH, int RLEVEL);
      auto int XORYNB(int USE, int INF);
      auto void GETINACC(int ACC, int SIZE, int AC, int AREA, int DISP);
      auto int AREACODE(void);
      auto int AREACODE2(int BS);
      auto void CUI(int CODE);
      auto void ASSIGN(int A, int B);
      auto void CSTART(int CCRES, int MODE);
      auto void CCYCBODY(int UA, int ELAB, int CLAB);
      auto void CLOOP(int ALT, int MARKC, int MARKUI);
      auto void CIFTHEN(int MARKIU, int MARKC, int MARKUI, int MARKE, int MARKR,
                        int SKIP);
      auto void CREATEAH(int MODE);
      auto void TORP(int *HEAD, int *BOT, int *NOPS);
      auto int INTEXP(int *VALUE);
      auto int CONSTEXP(int PRECTYPE);
      auto void CSEXP(int REG, int MODE);
      auto void CSTREXP(int A, int B);
      auto void CRES(int LAB);
      auto void EXPOP(int A, int B, int C, int D);
      auto void TESTAPP(int *NUM);
      auto void SKIPEXP(void);
      auto void SKIPAPP(void);
      auto void NOAPP(void);
      auto int DOPEVECTOR(int A, int B, int MODE, int ID, int *C, int *D);
      auto void DECLAREARRAYS(int A, int B);
      auto void DECLARESCALARS(int A, int B);
      auto void MAKEDECS(int Q);
      auto void SAVEAUXSTACK(void);
      auto void RESETAUXSTACK(void);
      auto void CRSPEC(int M);
      auto void CFPLIST(int *A, int *B);
      auto void CFPDEL(void);
      auto void CLT(void);
      auto void CQN(int P);
      auto void GETWSP(int *PLACE, int SIZE);
      auto void RETURNWSP(int PLACE, int SIZE);
      auto int TSEXP(int *VALUE);
      auto void CRCALL(int RTNAME);
      auto void NAMEOP(int Z, int REG, int SIZE, int NAMEP);
      auto void CNAME(int Z, int REG);
      auto void CANAME(int Z, int BS, int DP);
      auto void CSNAME(int Z, int REG);
      auto void TESTASS(int REG, int TYPE, int SIZE);
      auto void COPYTAG(int KK);
      auto void REDUCETAG(void);
      auto void REPLACETAG(int KK);
      auto void RTJUMP(int CODE, int *L);
      auto void STORETAG(int KK, int SLINK);
      auto void UNPACK(void);
      auto void PACK(int *PTYPE);
      auto void DIAGPOINTER(int LEVEL);
      auto void RDISPLAY(int KK);
      auto void RHEAD(int KK);
      auto void ODDALIGN(void);
      auto int PTROFFSET(int RLEV);
      auto void PPJ(int MASK, int N);
      auto void CRFORMAT(int *OPHEAD);
      auto int DISPLACEMENT(int LINK);
      auto int COPYRECORDTAG(int *SUBS);
      auto void SAVEIRS(void);
      auto void COPYDR(void);
      auto void BOOTOUT(int REG);
      auto void CHANGERD(int REG);
      auto void FORGET(int REG);
      auto void REMEMBER(void);
      auto void NOTEASSMENT(int REG, int ASSOP, int VAR);

      typedef struct RD {
        char FLAG;
        int XTRA;
      } RD;
      
      int SNDISP;
      int ACC;
      int K;
      int KFORM;
      int STNAME;
      int MIDCELL;

      int TCELL;
      int NUMMOD;
      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 TWSPHEAD;
      int KKK;
      int STRFNRES;
      int MARKIU;
      int MARKUI;
      int MARKC;
      int MARKE;
      int MARKR;

      int LITL;
      int ROUT;
      int NAM;
      int ARR;
      int PREC;
      int TYPE;

      recfm EXPOPND;
      //(RD)
      // RESULTRECORDFOREXPOP

      CURRINST = 0;
      TWSPHEAD = 0;
      int SGRUSE[(7) - (0) + 1]

          ;
      int SGRINF[(7) - (0) + 1]

          goto SW[A];
    // INCLUDESOMETHING
    SW_23:
      // REDUNDANTSEP

    SW_24:
      //<CMARK><COMMENTTEXT>

    SW_2:

    CSSEXIT:
      LASTINST = CURRINST;
      while (TWSPHEAD != 0) {
        POP(TWSPHEAD, JJ, KK, QQ);
        RETURNWSP(JJ, KK);
      }
      return;
    //(UI)(S)
    SW_1:

      if (!(LEVEL >= 2)) FAULT(57, 0);
      MARKER = P + 1 + (A << 8) + A;
      P = P + 3;
      if (A == 1) goto LABFND;
      if (A == 2) {
        SETLINE();
        CUI(0);
        goto CSSEXIT;
      }
      MARKE = 0;
      MARKR = 0;
      MARKUI = P;
      MARKIU = MARKER + 1;
      MARKC = MARKIU + 1;
      if (A == 3) {
        CIFTHEN(MARKIU, MARKC, MARKUI, 0, 0, NO);
        goto CSSEXIT;
      }
      CLOOP(A, MARKC + 2, MARKUI);
      goto CSSEXIT;
    // 1STOFUIANDNOAPP
    LABFND:
      if (!(A == 1 && A == 2)) goto SWITCH;
      // NOENAMSEORASSNMNT

      if (!(A == 2 && A == 2)) goto SWITCH;

      JJ = ENTERLAB(FROMAR2(P + 3), 0);
      goto CSSEXIT;
    // cycle
    SW_5:

      if (!(LEVEL >= 2)) FAULT(57, 0);
      if (A == 2) {
        // OPENCYCLE

        CLOOP(0, P + 1, 0);

      } else {
        CLOOP(6, P + 6, P + 1);
      }

      goto CSSEXIT;
      //
      // REPEAT

    SW_6:

      goto CSSEXIT;
    //'%CONTROL'(CONST)
    SW_22:

      J = FROMAR4(P + 2);
      CODEOUT();
      DCOMP = J >> 28;
      goto CSSEXIT;
      //
      //(iu)(COND)then(UI)(ELSE'')

    SW_3:

      MARKIU = P + 1;
      MARKC = MARKIU + 3;
      //! FROMAR2(P+2)
      MARKR = P + 2 + (A << 8) + A;

      MARKE = 0;
      if (A == 3) {
        MARKE = MARKR + 1 + FROMAR2(MARKR + 1);
        MARKUI = MARKR + 3;
      }

      CIFTHEN(MARKIU, MARKC, MARKUI, MARKE, MARKR, NO);
      goto CSSEXIT;
    SW_4:
      //'%FINISH(ELSE')(S)

      goto CSSEXIT;
    SWITCH : {
      // SWITCHLABEL

      int HEAD;
      int BASEPT;
      int NAPS;
      int FNAME;

      int BITS[(2) - (0) + 1]

          ;

      FORGET(-1);
      FNAME = FROMAR2(P + 3);
      if (!(A == 1 && A == 1)) {
        FAULT2(5, 0, FNAME);
        goto BEND;
      }
      // 1STOFUI+APP

      P = P + 3;
      TESTAPP(NAPS);
      P = P + 6;
      if (!(INTEXP(JJ) == 0)) {
        FAULT2(41, 0, 0);
        goto BEND;
      }
      // UNLESSEXPRESSIONEVALUATESAND

      if (!(NAPS == 1)) {
        FAULT2(21, NAPS - 1, FNAME);
        goto BEND;
      }
      // NORESTOFAPP

      if (!(A == 2 && 2 == A)) {
        FAULT2(5, 0, FNAME);
        goto BEND;
      }
      // NOENAMEORRESTOFASSIGMENT

      COPYTAG(FNAME);
      HEAD = K;
      if (OLDI != LEVEL || TYPE != 6) {
        FAULT(4, FNAME);
        goto BEND;
      }
      FROM123(HEAD, BASEPT, KKK, KK)
      // EXTRACTTABLEADDR,LB&UB
      ;

      MLINK(HEAD)
      // KPOINTSTOBITLIST
      ;

      if (KKK <= JJ && JJ <= KK) goto INBD;
      FAULT2(50, JJ, FNAME);
      goto BEND;
    INBD:
      Q = JJ - KKK;
      while (Q >= 96) {
        MLINK(HEAD);
        Q = Q - 96;
      }
      //
      // ASLIST(HEAD)ISTHESTARTOF96BITENTRYINTHEBITLIST
      // CHECKBITNOQTOSEEIFLABELALREADYSETANDTHENSETBITQ
      //
      FROM123(HEAD, BITS[(0) - (0)], BITS[(1) - (0)], BITS[(2) - (0)]);
      // RIGHTWORD
      QQ = Q >> 5;
      // BITINWORD

      Q = Q & 31;
      JJJ = 1 << Q;

      if (!(BITS[(QQ) - (0)] & JJJ == 0)) FAULT2(6, JJ, FNAME);
      BITS[(QQ) - (0)] = BITS[(QQ) - (0)] | JJJ;
      REPLACE123(HEAD, BITS[(0) - (0)], BITS[(1) - (0)], BITS[(2) - (0)]);
      //
      // OPTIMISED(ARR=2)SWITCHESBASEPTPOINTSTOTHE
      // ZEROETHNOTTHEFIRSTELEMENT
      //
      // RESETLBIFDESCTOELEMNT0
      if (ARR == 2) KKK = 0;
      // RELPOSITIONOFLABEL

      QQ = BASEPT + (JJ - KKK) * 4;

      PLUG(2, QQ, CA, 4)
      // OVERWRITETHEWORDINTABLE
      ;
      // RELOCATION(BYHDOFCODE)INTACT

    BEND:
    };
      goto CSSEXIT;
    //(wu)(SC)(COND)(RESTOFWU)
    SW_7:

      if (!(LEVEL >= 2)) FAULT(57, 0);
      // TOWHILE/UNTIL
      MARKIU = P + 1;
      // TO(SC)(COND)

      MARKC = MARKIU + 3;

      CLOOP(A + 3, MARKC, MARKIU + 1 + FROMAR2(MARKIU + 1));
      goto CSSEXIT;
      //
      // SIMPLEDECLN

    SW_8:

      if (!(LEVEL >= 2)) FAULT(57, 0);
      if (NMDECS[(LEVEL) - (0)] & 1 != 0) FAULT(40, 0);
      QQ = P;
      P = P + 5;
      CLT();
      ROUT = 0;
      LITL = 0;
      if (A != 1) {
        // ARRAYDECLARATIONS

        if (TYPE == 5 && ACC == 0) FAULT(70, 0);
        NAM = 0;
        SETLINE();
        // QQ=1FORARRAYFORMATS
        QQ = 2 - A;
        P = P + 2;

        DECLAREARRAYS(QQ, 0);

      } else {
        if (A == 128) {
          // NOTLINKED&SHUFFLED

          CQN(P + 1);
          P = P + 2;
          DECLARESCALARS(1, 0);
        }
      }

      goto CSSEXIT;
      //
      // end

    SW_9 :

    {
      goto S[A];
    // ENDOFPROGRAM
    S_1:
      // ENDOFFILE

    S_2:

      if (CPRMODE == 0) CPRMODE = 2;
      if (!(LEVEL + CPRMODE == 3)) FAULT(15, 0);
      if (!(A == CPRMODE)) FAULT(56, 0);
      CEND(CPRMODE);
      goto BEND;
    // ENDOFLIST
    S_3:

      LIST = 0;
      goto BEND;
    // END
    S_4:

      CEND(FLAG);
    BEND:
    };

      goto CSSEXIT;
      //

    SW_11 :

    {
      int MARKER1;
      int KK;
      int KKK;

      _imp_string XNAME;

      P = P + 1;
      MARKER1 = FROMAR2(P)
                //(SEX)(RT)(SPEC'')(NAME)(FPP)
                + P;

    AGN:
      Q = P;
      KK = FROMAR2(MARKER1 + 5)
          // KKONNAME
          ;

      EXTRN = A;
      LITL = EXTRN & 3;
      if (A == 1) {
        // P<spec''>='%SPEC'

        P = P + 3;
        CRSPEC(1 - (EXTRN >> 2))
        // 0FORROUTINESPEC
        ;
        // 1FOREXTERNAL(ETC)SPEC

        goto BEND;
      }

      COPYTAG(KK);
      if (OLDI == LEVEL) {
        // FLAGASFILEOFROUTINES

        if (CPRMODE == 0) CPRMODE = 2;
        //

        if (CPRMODE == 2 && LEVEL == 1) {
          if (EXTRN == 3) EXTRN = 2;
          XNAME = ;
          if (EXTRN == 1) XNAME = "S#".XNAME;
          if (EXTRN == 4) XNAME = "";
          // CODEDESCRIPTORRELADDR
          JJ = MIDCELL;

          if (EXTRN != 4) USEBITS = 2;
          DEFINEEP(XNAME, CA, JJ, 0);
          if (JJ != 0) PSF1(INCA, 0, -JJ);

        } else {
          // EXTERNALSINPRGMORWRNGLEVEL

          if (!(EXTRN == 4)) FAULT(55, KK);
          EXTRN = 4;
        }

        if (A == 1)
          KKK = LITL << 14 | 0x1000;
        else {
          // FIGUREOUTPTYPEFORFNS&MAPS

          ROUT = 1;
          P = P + 4;

          CLT();
          ARR = 0;
          NAM = 0;
          // SETNAMEARRAYBITFORMAPS
          if (A == 2) NAM = 2;

          PACK(KKK)
          // ANDSTOREPTYPEINKKK
          ;
        }
      }

      if (!(OLDI == LEVEL && J == 15 && PTYPE == KKK)) {
        P = Q + 3;
        CRSPEC(0);
        P = Q;
        goto AGN;
      }
      // DEALWITHroutinespecFOLLOWED

      PTYPE = PTYPE | (EXTRN & 3) << 14;
      // BYexternalroutine

      {
        int PTR;
        int PTYPEP;
        int CNT;
        int PP;

        J = 0;
        REPLACETAG(KK)
        // BODYGIVENSOUPDATETAGSINFO
        ;

        JJ = K;
        PLABEL = PLABEL - 1;
        if (!(COMPILER == 1 || CPRMODE == 2 && LEVEL == 1)) {
          if (JROUND[(LEVEL + 1) - (0)] = 0) {
            // NOTJUMPOUTSTANDING

            JROUND[(LEVEL + 1) - (0)] = PLABEL;
            ENTERJUMP(15, PLABEL, 0);
          }
        }

        PTYPEP = PTYPE;
        P = MARKER1 + 7;
        RHEAD(KK);
        N = 20;
        CNT = 1;
        while (A == 1) {
          // WHILESOME(MORE)FPPART

          PP = P + 1 + FROMAR2(P + 1);
          P = P + 3;
          CFPDEL();
          PTR = P;
          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  Error
          : (...) not allowed here

              do {
            // CYCLEDOWNNAMELIST

            if (JJ != 0) {
              FROM12(JJ, J, JJJ)
              // EXTRACTPTYPEXTRAINFO
              ;

              if (!(J >> 16 == PTYPE && PTYPE != 5 || JJJ >> 16 == ACC))
                FAULT2(9, CNT, KK);

            } else
              FAULT2(8, 0, KK)
              // MOREFPSTHANINSPEC
              ;

            PTR = PTR + 3;
            CNT = CNT + 1;
            MLINK(JJ);
          }
          while (!(A == 2))
            ;
          DECLARESCALARS(0, 0);
          P = PP;
          // UNTILNOMOREFP-PART
        }
        // TOWORDBOUNDARYAFTERALLSYSTEM

        N = (N + 3) & (-4);
        // STANDARDPARAMETERSHAVEBEENDECLARED

        if (!(JJ == 0)) FAULT2(10, 0, KK);
        PTYPE = PTYPEP;
        // STRFNSRESULTPARAMISSTACKED
        if (PTYPE & 0xF0F == 5) N = N + 8;
        // ASXTRAPARMJUSTBEFOREDISPLAY

        RDISPLAY(KK);
        MAKEDECS(MARKER1 + 1);
      };

    BEND:
    };
      goto CSSEXIT;
      //
      // REALS(LN)

    SW_13:

      if (!(CPRMODE == 0)) FAULT(58, 0);
      ALLLONG = A & 1;
      goto CSSEXIT;
      //
      // begin

    SW_14 :

    {
      PTYPE = 0;
      if (LEVEL == 1 && RLEVEL == 0 && CPRMODE == 0) {
        CODEDES(JJ);
        DEFINEEP(MAINEP, CA, JJ, 1);
        RLEVEL = 1;
        RBASE = 1;
        L[(1) - (0)] = 0;
        M[(1) - (0)] = 0;
        DIAGINF[(1) - (0)] = 0;
        AUXSBASE[(1) - (0)] = 0;
        CPRMODE = 1;
        N = 24;
        NMAX = N;
        FORGET(-1);
        DIAGPOINTER(LEVEL + 1);
        //
        // THECODEPLANTEDISASFOLLOWS:-
        // STD(LNB+3)SAVEDESCRIPTOGTOGLA(PLT)
        // LXN(LNB+4)TOGLA(PLT)
        // STLN(XNB+5)SAVELNBFORSTOPSEQUENCE
        // ASF1FORREPORTWORD
        //
        PSF1(STD, 1, 12);
        PSF1(LXN, 1, 16);
        PF1(STLN, 0, XNB, 20);
        // PSF1(ASF,0,1)
        //
        // THENEXT8INSTRUCTIONSAREREQUIREDTOSETSF6WORDSINFRONTOFLNB
        // ANASF1WORKSASWELLEXCEPTFORK-STANDALONEWHENTHEREMAYBE
        // AUSELESSREDUNDANTDESCRIPTORONTHESTACK
        //
        PF1(STLN, 0, TOS, 0);
        PF1(LSS, 0, TOS, 0);
        PSF1(IAD, 0, 24);
        PF1(STSF, 0, TOS, 0);
        PF1(ISB, 0, TOS, 0);
        PSF1(ISH, 0, -2);
        PF1(ST, 0, BREG, 0);
        PF1(ASF, 0, BREG, 0);
        //
        //
        // SETTHEPROGRAMMASKTOMASKOUTUNDERFLOWANDALLOWALLOTHERINTS
        //
        // MPSRX'40C0'
        //
        PF1(MPSR, 0, 0, 0x40C0);
        PTYPE = 1;

      } else
        SETLINE()
        // SO'ENTERED FROM LINE'ISOK
        ;

      RHEAD(-1);
      RDISPLAY(-1);
      MAKEDECS(P + 1);
    };

      goto CSSEXIT;
      //

    SW_15:
      //'%ON'(EVENT'')(N)(NLIST)'%START'

      if (!(LEVEL >= 2)) FAULT(57, 0);
      if (NMDECS[(LEVEL) - (0)] & 1 != 0) FAULT(40, 0);
      // NOMOREDECSANDINONCOND
      NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 0x11;

      if (STACK == 0) {
        SAVEAUXSTACK();
        DISP = AUXSBASE[(LEVEL) - (0)];
        PSF1(LSS, 2, DISP)
        // SAVETOPOFAUXSTACK
        ;

        PSF1(ST, 1, DISP + 12);
      }

      GRUSE[(ACCR) - (0)] = 0;
      PSF1(CPSR, 1, N + 8);
      PLABEL = PLABEL - 1;
      JJJ = PLABEL;
      ENTERJUMP(15, JJJ, 0b10)
      // JUMPROUNDONBODY
      ;
      //
      // SETUPABITMASKINJJ

      P = P + 2;
      JJ = 0;

      ? Please recode the source file so that loops with
              "%until <cond> %cycle ... %repeat" are replaced by
              "%cycle ... %repeat %until <cond>" *
              Error
      : (...) not allowed here

          do {
        // UNTILNOMORENLIST

        KK = A;
        if (!(1 <= KK && KK <= 14)) FAULT2(26, KK, 0);
        JJ = JJ | 1 << (KK - 1);
        P = P + 2;
      }
      while (!(A == 2))
        ;
      KK = CA;
      PGLA(4, 4, );
      RELOCATE(GLACA - 4, KK, 1)
      // ENTRYADDRESSINPLT
      ;

      ONWORD[(LEVEL) - (0)] = JJ << 18 | (GLACA - 4);
      FORGET(-1);
      PSF1(ST, 1, N)
      // STOREEVENT,SUBEVENT&LINE
      ;

      PSF1(MPSR, 1, N + 8);
      ONINF[(LEVEL) - (0)] = N;
      N = N + 12;
      if (STACK == 0) {
        PSF1(LSS, 1, DISP + 12)
        // RESETAUXSTACKTOP
        ;

        PSF1(ST, 2, DISP);
      }

      CSTART(0, 3);
      // NOTINONCOND
      NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] ^ 0x10;

      JJ = ENTERLAB(JJJ, 0b111)
          // REPLACEENVIRONMENT
          ;

      goto CSSEXIT;
    SW_16:
      if (!(LEVEL >= 2)) FAULT(57, 0);

      {
        // switch(SWITCHLIST)

        int Q;
        int RANGE;
        int KKK;
        int KK;
        int LB;
        int PP;
        int D0;
        int D1;
        int OPHEAD;
        int V;
        int ARRP;
        int R;

        Q = P;
        ARRP = 1;
        if (PARMOPT == 0) ARRP = 2;
        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          // UNTILNO'REST OF SW LIST'

          P = P + 3;
          while (A == 1) P = P + 3;
          // TOP(+'')
          P = P + 4;

          KKK = INTEXP(LB)
              // EXTRACTLOWERBOUND
              ;

          P = P + 3;
          KKK = KKK | INTEXP(KK)
              // EXTRACTUPPERBOUND
              ;

          RANGE = (KK - LB + 1);
          if (RANGE <= 0 || KKK != 0) {
            FAULT2(38, 1 - RANGE, FROMAR2(Q + 1));
            LB = 0;
            KK = 10;
            RANGE = 11;
          }
          // ZEROETHELEMENTOFFFRONT

          if (GLACA + 8 - 4 * LB < 0) ARRP = 1;
          // WORDLABELARRAY

          PTYPE = 0x56 + (ARRP << 8);

          PP = P;
          P = Q + 1;
          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  Error
          : (...) not allowed here

              do {
            // DOWNNAMELIST

            K = FROMAR2(P);
            P = P + 3;
            OPHEAD = 0;
            R = LB;
            //
            // SETUPABITLIST(96BITSPERCELL)TOCHECKFORSWITCHLABELS
            // SETTWICE
            //
            ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" do {
              PUSH(OPHEAD, 0, 0, 0);
              R = R + 96;
            }
            while (!(R > KK))
              ;
            //
            // FORCHECKINGMODEUSEABOUNDEDWORDDESCRIPTORANDWORDSIZE
            // ENTRIESPRESETTO"SW LABEL NOT SET".OPTIMISINGUSEBCIWORD
            // ARRAYSWITHBASESETTOZEROETHELEMENT
            // FIRSTTABLEENTRY
            D1 = (GLACA + 15) & (-8);
            // SCALEDWORDDES

            D0 = 0x28000000 | RANGE;

            if (ARRP == 2) {
              // SETBCIBIT

              if (!(LB == 0)) D0 = D0 | 0x01000000;

              D1 = D1 - 4 * LB;
            }

            PGLA(8, 8, );
            // WORDPLTDISP
            SNDISP = (GLACA >> 2) - 2;

            RELOCATE(GLACA - 4, D1, 2)
            // RELOCATERELATIVETOGLA
            ;

            PUSH(OPHEAD, D1, LB, KK);
            KFORM = 0;
            ACC = 4;
            J = 1;
            STORETAG(K, OPHEAD);
            //
            // THETABLEWILLCONSISTOFRELATIVEDISPLACEMENTSFROMTHETABLEHEAD
            // TOTHELABELPOSN.SETALLTOGOTOPLAB(6)INITIALLY
            //
            V = PLABS[(6) - (0)];
            for (KKK = LB; KKK != KK; KKK += 1) {
              RELOCATE(-1, V, 1)
              // PLABS(6)RELOCATEDBYHDOFCODE
              ;
            }
            // FORANYMORENAMESINNAMELIST
          }
          while (!(A == 2))
            ;

          Q = PP;
          P = Q;
          // UNTILA(Q)=2
        }
        while (!(A == 2))
          ;
      };
      goto CSSEXIT;
      //

    SW_17:
      LIST = 1;
      goto CSSEXIT;
      //
      //'%OWN'(TYPE)(OWNDEC)

    SW_12 :

    {
      //***********************************************************************
      //*INITIALISEDDECLARATIONGOINTOTHEGLAORGLASYMBOLTABLES*
      //*EXCEPTFORCONSTARRAYSWHICHGOINTOTHECODESYMBOLTABLES*
      //*STRINGSANDARRAYSHAVEAHEADERINTHEGLA.LPUTARRANGES*
      //*FORTHELOADERTORELOCATETHEHEADERS.*
      //*EXTERNALSAREIDENTICALWITHOWNBUTALSOHAVEADATAEPDEFN*
      //*INTHELOADDATASOTHEYCANBEFOUNDATLOADTIME*
      //*EXTRINSICSHAVEADATAREFERENCEANDADUMMYHEADERINTHEGLA*
      //*THELOADERUSESTHEFORMERTORELOCATETHELATTER.*
      //***********************************************************************
      auto void CLEAR(int L);
      auto void STAG(int J, int DATALEN);
      auto void XTRACTCONST(int CONTYPE, int CONPREC);
      auto void INITSPACE(int A, int B);
      int LENGTH;
      int BP;
      int PP;
      int SIGN;
      int CBASE;
      int MODE;
      int UICONST;
      int ICONST;
      int TAGDISP;
      int EPTYPE;
      int EPDISP;
      int AH1;
      int AH2;
      int AH3;
      int AH4;
      int AD;
      int FNAM;
      int FINF;
      int SPOINT;
      int CONSTSFOUND;
      int CPREC;
      int EXTRN;
      int NNAMES;
      int MARK;
      int LPUTP;
      int MARKER1;
      int LB;
      int CTYPE;
      int CONSTP;
      int FORMAT;
      int PTSIZE;
      int DIMEN;
      int SACC;
      int TYPEP;

      double RCONST;
      double LRCONST;

      static double ZERO = 0;

      _imp_string SCONST;
      _imp_string NAMTXT;

      int *STPTR;
      // NORMALCASEGLASYMBOLTABLES

      LPUTP = 5;
      STPTR = USTPTR;
      // FAULT(40,0)ifNMDECS&1#0

      EXTRN = A;
      // CONST&CONSTANT->0
      if (EXTRN >= 4) EXTRN = 0;

      LITL = EXTRN;
      if (LITL <= 1) LITL = LITL ^ 1;
      KFORM = 0;
      SNDISP = 0;
      CONSTSFOUND = 0;
      if (EXTRN == 0) {
        LPUTP = 4;
        STPTR = SSTL;
      }
      P = P + 3;
      CBASE = 0;
      // MODE=1FORNORMALOWNS
      MODE = A;
      // MODE=2FOROWNRECORDS

      if (MODE > 1) goto RECORD;

      CLT()
      // MODE=3FOROWNRECORDARRAYS
      ;

      if (A == 1)
        CQN(P + 1);
      else {
        ARR = 1;
        NAM = 0;
      }
      if (TYPE == 5 && ACC == 0 && 0 == NAM) {
        FAULT(70, 0);
        ACC = 2;
      }
      ROUT = 0;
      PACK(PTYPE);
      if (ARR != 0 && NAM == 0) goto NONSCALAR;
      P = P + 1;
      ? Please recode the source file so that loops with
              "%until <cond> %cycle ... %repeat" are replaced by
              "%cycle ... %repeat %until <cond>" *
              Error
      : (...) not allowed here

          do {
        // UNTIL<RESTOFOWNDEC>NULL

        MARK = P + 1 + FROMAR2(P + 1);
        NNAMES = 1;
        // PPONFIRSTNAME''
        PP = P + 3;
        P = PP + 2;

        while (A == 1) {
          NNAMES = NNAMES + 1;
          P = P + 3;
        }
        // PONCONST''
        P = P + 1;
        //
        // OBTAINTHEINITIALCONSTANT,ITSTYPE(CTYPE)ANDSIGN(SIGN)
        //
        ICONST = 0;
        UICONST = 0;
        RCONST = 0;
        LRCONST = 0;
        SCONST = "";
        SIGN = 3;
        CTYPE = TYPE;
        CONSTSFOUND = 0;
        CPREC = PREC;
        if (NAM != 0) {
          CTYPE = 1;
          CPREC = 5;
        }
        //

        if (A == 1) {
          // CONSTANTGIVEN

          P = P + 1;
          XTRACTCONST(CTYPE, CPREC);
        }
        //

        ? Please recode the source file so that loops with
            "%until <cond> %cycle ... %repeat" are replaced by
            "%cycle ... %repeat %until <cond>" do {
          // DOWN<NAMELIST>

          J = 0;
          K = FROMAR2(PP);
          NAMTXT = ;
          if (NAM != 0) {
            // OWNNAMESANDARRAYNAMES

            if (EXTRN == 3)
              FAULT2(46, 0, K)
              // NOEXTRINSICNAMES
              ;

            UICONST = 0xFFFF | PREC << 27;
            PGLA(8, ACC, );
            TAGDISP = GLACA - ACC;
            EPDISP = TAGDISP;

          } else {
            if (TYPE == 5) {
              // STRING

              QQ = STPTR;
              AD = ;
              if (EXTRN == 3) {
                // EXTRINSICSTRINGS
                // DUMMYSTRINGHEADER

                AH3 = 0;
                AH2 = PREC << 27 | ACC;

              } else {
                if (INHCODE == 0)
                  LPUT(LPUTP, ACC, QQ, AD)
                  // O/PSTRING
                  ;

                STPTR = (STPTR + ACC + 3) & (-4);
                AH3 = QQ;
                AH2 = 3 << 27 | ACC;
              }

              PGLA(8, 8, );
              TAGDISP = GLACA - 8;
              if (EXTRN == 3)
                GXREF(NAMTXT, 2, 2 << 24 | ACC, TAGDISP + 4);
              else
                RELOCATE(TAGDISP + 4, AH3, LPUTP);
              // DATAINGLASYMBOLTABLES
              EPTYPE = 5;
              EPDISP = QQ;

            } else {
              // INTEGER&REAL

              if (EXTRN == 3) {
                // EXTRINSICS
                // EXTRINSICSVIAPTR

                PTYPE = PTYPE | 1 << 10;

                AH2 = PREC << 27;
                AH3 = 0;
                PGLA(8, 8, );
                TAGDISP = GLACA - 8;
                GXREF(NAMTXT, 2, 2 << 24 | ACC, TAGDISP + 4);

              } else {
                // OWN,EXTERNAL&CONST

                if (TYPE == 2) {
                  AD = ;

                } else {
                  // INTEGERVARIABLES
                  // Usually -1 means an explicitly unassigned variable
                  // somewhere

                left_operand:
                  Diagnose(0xffffffff, "left_operand",
                           "/home/gtoal/github/uparse-main/lang/imp80/"
                           "imp80-compile.h",
                           334);
                right_operand:
                  Diagnose(0x884a7cab, "right_operand",
                           "/home/gtoal/github/uparse-main/lang/imp80/"
                           "imp80-compile.h",
                           335)
                      : AST_PHRASE stored at AST(4881579)
                      : AST_CONST Index = 4881579 AD = -ACC;
                }

                if (EXTRN != 0)
                  PGLA(ACC, ACC, AD)
                  // PUTCONSTANTINTOGLA
                  ;
                // OFFSETOFVARFORTAGS

                TAGDISP = GLACA - ACC;
                // ANDFORENTRYDEFN

                EPDISP = TAGDISP;
                // DATAINADRESSABLEGLA

                EPTYPE = 2;
              }
            }
          }

          STAG(TAGDISP, ACC);
          if (EXTRN == 0 && 0 == NAM) {
            // CONST=LITERAL

            REPLACE2(TAGS[(K) - (0)], )
            // BYTES!
            ;

            if (PREC == 6) REPLACE3(TAGS[(K) - (0)], );
            if (PREC == 7) REPLACE3(TAGS[(K) - (0)], CONSTP);
          }

          PP = PP + 3;
          NNAMES = NNAMES - 1;
        }
        while (!(NNAMES == 0))
          ;
        P = MARK;
      }
      while (!(A == 2))
        ;
      goto BEND;
    //<XOWN>'%RECORD'<NAMELIST>
    RECORD:
      //***********************************************************************
      //*NOINITIALISATIONOFOWNRECORDSALLOWEDSOTHEYAREALL*
      //*CLEAREDTOZERO.*
      //***********************************************************************
      MARKER1 = P + 1 + FROMAR2(P + 1)
          // TOFORMATNAME
          ;

      FNAM = FROMAR2(MARKER1);
      COPYTAG(FNAM);
      FINF = TCELL;
      if (PTYPE != 4) {
        FAULT(62, FNAM);
        goto BEND;
      }
      PTYPE = 0x133 | LITL << 14;
      KFORM = FINF;
      UNPACK();
      if (MODE == 3) {
        FORMAT = 2 - A;
        P = P + 2;
        goto RECIN;
      }
      // SIZEOFRECORDFROMFORMAT
      P = P + 1;
      BP = ACC;

      PTYPE = 0x33;
      J = 0;
      if (A != 3) {
        CQN(P - 1);
        PACK(PTYPE);
      }
      // SIZEOFHOLEFORPOINTER
      P = P + 1;
      PTSIZE = ACC;

      ? Please recode the source file so that loops with
              "%until <cond> %cycle ... %repeat" are replaced by
              "%cycle ... %repeat %until <cond>" *
              Error
      : (...) not allowed here

          do {
        P = P + 1;
        K = FROMAR2(P);
        NAMTXT = ;
        if (NAM != 0) {
          // OWNNAMESANDARRAYNAMES

          if (EXTRN == 3)
            FAULT2(46, 0, K)
            // NOEXTRINSICNAMES
            ;

          UICONST = 0xFFFF | PREC << 27;
          PGLA(8, PTSIZE, );
          EPTYPE = 2;
          TAGDISP = GLACA - PTSIZE;
          EPDISP = TAGDISP;

        } else {
          if (EXTRN == 3) {
            // EXTRINISIC
            // FORCENAM=1(IEVIAPOINTER)

            PTYPE = PTYPE | 0x400;

            AH2 = 0x18000000 + BP;
            AH3 = 0;
            PGLA(8, 8, );
            TAGDISP = GLACA - 8;
            GXREF(NAMTXT, 2, 2 << 24 | BP, TAGDISP + 4)
            // RELOCATEBYEXTERNAL
            ;

          } else {
            EPDISP = (GLACA + 15) & (-8);
            AH3 = EPDISP;
            // TOPWORDOFDESRCIPTOR
            AH2 = 0x18000000 + BP;

            PGLA(8, 4, )
            // ADDED18MAR76TOFIXBUG
            ;

            RELOCATE(-1, AH3, 2)
            // PUTDISPINTOGLA
            ;
            // ANDRELOCATERELAPPROPIATEAREA

            TAGDISP = EPDISP;
            // DATAINGLATABLES

            EPTYPE = 2;

            I = 0;
            ICONST = 0;
            while (I < BP) {
              PGLA(4, 4, );
              I = I + 4;
            }
          }
        }
        // ACCTOSIZEOFRECORD

        ACC = BP;

        STAG(TAGDISP, BP);
        P = P + 2;
      }
      while (!(A == 2))
        ;
      goto BEND;
    // OWNANDOWNRECORDARRAYS
    NONSCALAR:
      //***********************************************************************
      //*OWNARRAYSCANBEINITIALISEDBUTONLYONEARRAYCANBE*
      //*DECLAREDINASTATEMENT.(THANKHEAVENS!)*
      //*OWNRECORDARRAYSARECLEAREDTOZERO*
      //***********************************************************************
      P = P + 1;
      FORMAT = 2 - A;
    RECIN:
      PP = P + 1;
      P = P + 3;
      NNAMES = 1;
      K = FROMAR2(PP);
      NAMTXT = ;
      if (TYPE >= 3)
        BP = ACC;
      else
        BP = BYTES[(PREC) - (0)];
      SACC = ACC;
      TYPEP = PTYPE;
      AH4 = 12 + DOPEVECTOR(TYPE, BP, 0, K, QQ, LB);
      // DVDISP(+TOPBITFLAG)
      SNDISP = AH4 - 12;
      // BUMDOPEVECTOR

      if (SNDISP == -1) SNDISP = 0;
      // ASWORDDISPLACEMENT

      SNDISP = (SNDISP & 0x3FFFF) >> 2;
      // SAVENOOFDIMENESIONS

      DIMEN = J;

      ACC = SACC;
      PTYPE = TYPEP;
      UNPACK();
      if (LB == 0 && J == 1 && TYPE <= 3) {
        ARR = 2;
        PACK(PTYPE);
      }
      // NOOFELEMENTS
      LENGTH = QQ / BP;

      SPOINT = STPTR;
      if (MODE != 3 && FORMAT == 0) {
        // NOTARECORDARRAY

        if (A == 1) {
          P = P + 1;
          INITSPACE(QQ, LENGTH);
        }
      }

      if (CONSTSFOUND == 0) {
        // NOCONSTANTSGIVEN
        // SOCLEARANAREATOZERO

        CONSTSFOUND = LENGTH;
        if (!(LENGTH < 1 || EXTRN == 3 || FORMAT != 0)) CLEAR(QQ);

      } else {
        if (EXTRN == 3 || FORMAT != 0) FAULT2(49, 0, K);
      }

      if (EXTRN == 3)
        EPDISP = 0;
      else
        EPDISP = SPOINT;
      //
      // OUTPUTANARRAYHEADINTOTHEGLARELATIVETOTHESTARTOFTHESYMBOL-
      // TABLESINWHICHTHEARRAYRESIDES.
      //
      // RESETDIMENSIONSAFTERINITTING
      J = DIMEN;

      if (TYPE <= 2)
        AH1 = PREC << 27 | LENGTH;
      else
        AH1 = 3 << 27 | 1 << 25 | QQ;
      // SETBCIIFBASETOBESHIFTED
      AH1 = AH1 | (1 - PARMARR) << 24;

      if (PREC == 4) AH1 = 0x58000002;
      AH2 = EPDISP;
      // DVDESPTR=WORDCHKD
      AH3 = 5 << 27 | 3 * J;

      if (TYPE <= 3 && PARMARR == 0 && 0 == FORMAT && PARMCHK == 0 && J == 1)
        AH2 = AH2 - BP * LB;
      PGLA(8, 16, );
      TAGDISP = GLACA - 16;
      if (EXTRN == 3) {
        // EXTRINSICARRAYS

        GXREF(NAMTXT, 2, 2 << 24 | QQ, TAGDISP + 4)
        // RELOCATEADDR(A(FIRST))
        ;

      } else {
        RELOCATE(TAGDISP + 4, AH2, LPUTP)
        // RELOCATEADDR(A(FIRST))
        ;
      }

      RELOCATE(TAGDISP + 12, AH4, 1)
      // RELOCATEDVPOINTER
      ;

      AH4 = (AH4 << 1 >> 3) | 0x80000000;
      NOTECREF(AH4 | (TAGDISP + 12) >> 2 << 16, (AH4 & 0xFFFF) << 2);
      // DATAINGLASYMBOLTABLES
      EPTYPE = 5;

      STAG(TAGDISP, QQ);
      goto BEND;
      void INITSPACE(int SIZE, int NELS) {
        //***********************************************************************
        //*PISTOFIRSTENTRYFORCONSTLIST*
        //*MAPSPACEONTOWORKFILEENDTOGIVESANEERRORMESSAGEIF*
        //*THEREWASNOTENOUGHSPACE*
        //***********************************************************************
        int RF;
        int I;
        int K;
        int ELSIZE;
        int AD;
        int SPP;
        int LENGTH;
        int SAVER;
        int WSIZE;
        int WRIT;

        char **SP;

        if (SIZE > 4096)
          WSIZE = 4096;
        else
          WSIZE = SIZE;

        ;

        SAVER = R;
        R = R + WSIZE + 256;
        if (R > ARSIZE) FAULT(102, 0);
        SP = ;
      // Usually -1 means an explicitly unassigned variable somewhere
      left_operand:
        Diagnose(0xffffffff, "left_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 334);
      right_operand:
        Diagnose(0x884b3955, "right_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 335)
            : AST_PHRASE stored at AST(4929877)
            : AST_CONST Index = 4929877 if (TYPE == 1) AD = -ACC;
        if (TYPE == 2) AD = ;
        if (TYPE == 5) AD = ;
        SPP = 0;
        WRIT = 0;
        ELSIZE = SIZE / NELS;
        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          XTRACTCONST(TYPE, PREC);
          if (A == 1) {
            // REPITITIONFACTOR

            P = P + 1;
            if (INTEXP(RF) != 0) {
              FAULT(44, CONSTSFOUND);
              RF = 1;
            }
            P = P + 1;

          } else {
            RF = 1;
            P = P + 2;
          }
          if (RF <= 0) FAULT(44, CONSTSFOUND);
          for (I = RF; I != 1; I += -1) {
            for (K = 0; K != ELSIZE - 1; K += 1) {
              if (CONSTSFOUND <= NELS) {
                SP = ;
                SPP = SPP + 1;
              }
            }
            CONSTSFOUND = CONSTSFOUND + 1;
            if (SPP >= 4096) {
              // EMPTYBUFFER

              if (INHCODE == 0) LPUT(LPUTP, SPP, STPTR + WRIT, );
              WRIT = WRIT + SPP;
              SPP = 0;
            }
          }
          // UNTILP<ROCL>=null
        }
        while (!(A == 2))
          ;

        if (CONSTSFOUND != NELS) FAULT(45, CONSTSFOUND);
        STPTR = (STPTR + 3) & (-4);
        LENGTH = (SIZE + 3) & (-4);
        if (INHCODE == 0) LPUT(LPUTP, LENGTH - WRIT, STPTR + WRIT, );
        STPTR = STPTR + LENGTH;
        R = SAVER;
      };

      void CLEAR(int LENGTH) {
        STPTR = (STPTR + 3) & (-4);
        LENGTH = (LENGTH + 3) & (-4);
        if (INHCODE == 0) LPUT(LPUTP, LENGTH, STPTR, 0);
        STPTR = STPTR + LENGTH;
      };

      void STAG(int J, int DATALEN) {
        if (EXTRN == 2) LPUT(14, EPTYPE << 24 | DATALEN, EPDISP, );
        RBASE = CBASE;
        STORETAG(K, J);
        RBASE = RLEVEL;
      };

      void XTRACTCONST(int CONTYPE, int CONPREC) {
        //***********************************************************************
        //*PPOINTSTOP<+'> OF <+'><OPERNAD><RESTOFEXPR>ANDISUPDATED*
        //*THECONSTISCONVERTEDTOREQUIREDFORMANDIFINTEGER*
        //*ISLEFTINICONST,IFREALINRCONSTANDIFSTRINGINSCONST*
        //***********************************************************************
        int LENGTH;
        int STYPE;
        int SPREC;
        int SACC;
        int CPREC;
        int MODE;
        int I;
        // MAYBECHANGEDIFCONSTISEXPR

        STYPE = PTYPE;
        SACC = ACC;

        if (CONTYPE == 5) {
          CTYPE = 5;
          if (A == 4 && A == 2 && A == 0x35 && A == 2) {
            SCONST = ;
            LENGTH = A;
            P = P + A + 9;

          } else {
            FAULT(44, CONSTSFOUND);
            SCONST = "";
            LENGTH = 0;
            P = P - 3;
            SKIPEXP();
          }

        } else {
          MODE = CONPREC << 4 | CONTYPE;
          if (CONPREC < 5) MODE = CONTYPE | 0x50;
          CONSTP = CONSTEXP(MODE);
          if (CONSTP == 0) {
            FAULT(41, 0)
            // CANTEVALUATEEXPT
            ;
            CONSTP = ;
          }

          CTYPE = TYPE;
          CPREC = PREC;
          if (CTYPE == 1) {
            ICONST = ;
            if (CONPREC == 6) {
              UICONST = ICONST;
              ICONST = ;
            }

          } else {
            RCONST = ;
            if (CONPREC == 7) {
              // LONGLONGSUNALIGNEDINAR

              for (I = 0; I != 15; I += 1) {
              Mk_AST_assignment:
                Var = -1;
              }
            }
          }
        }

        PTYPE = STYPE;
        UNPACK();
        ACC = SACC;
        //
        // FAULTANYOBVIOUSERRORSIE:-
        // CONSTANTFOREXTRINSICORINCOMPATIBLETYPEORSTRINGTOOLONG
        //
        if (EXTRN == 3 || CTYPE == 5 && LENGTH >= ACC ||
            CONTYPE == 1 && CONPREC == 3 && ICONST > 255 ||
            CONPREC == 4 && ICONST > 0xFFFF)
          FAULT(44, CONSTSFOUND);
      };

    BEND:
    };
      goto CSSEXIT;
    SW_18:
      ABORT();
    SW_10 :

    {
      // record(RDECLN)
      //***********************************************************************
      //*RECORDSAREALLOCATEDATCOMPILETIMEWHENPOSSIBLE*
      //*SEECRFORMATFORACTIONONRECORDFORMATDECLARATIONS*
      //***********************************************************************
      int MODE;
      int RECL;
      int ALLOC;
      int FNAM;
      int FINF;
      int NAME;
      int OPHEAD;

      P = P + 1;
      MODE = A;
      SNDISP = 0;
      if (MODE == 1) {
        // DEALWITHFORMAT

        NAME = FROMAR2(P + 1);
        P = P + 3;
        CRFORMAT(OPHEAD);
        K = NAME;
        PTYPE = 4;
        J = 0;
        KFORM = OPHEAD;
        STORETAG(K, OPHEAD);
        goto BEND;
      }

      P = P + 1;
      MARKER = P + FROMAR2(P);
      FNAM = FROMAR2(MARKER)
          // FORMATNAME
          ;

      COPYTAG(FNAM);
      FINF = TCELL;
      if (TYPE != 4) {
        FINF = DUMMYFORMAT;
        ACC = 4;
        FAULT(62, FNAM);
      }

      RECL = ACC;
      if (MODE == 2) {
        //'%RECORDSPEC'

        COPYTAG(FROMAR2(P + 2));
        if (A == 1 && TYPE == 4) {
          // SPECFORFORMATELEMENT

          P = P + 5;
          Q = DISPLACEMENT(TCELL);
          UNPACK();
        }

        if (TYPE == 3 && NAM == 1 && FROM3(TCELL) & 0xFFFF == 0) {
          REPLACE3(TCELL, FINF | K << 16);
          REPLACE2(TCELL, SNDISP << 16 | RECL);

        } else
          FAULT(63, 0);

      } else {
        // RECORDDECLARATION

        if (!(LEVEL >= 2)) FAULT(57, 0);
        if (NMDECS[(LEVEL) - (0)] & 1 != 0) FAULT(40, 0);
        TYPE = 3;
        PREC = 3;
        ROUT = 0;
        if (A == 1) {
          // SIMPLERECORDANDRECORDNAMES

          ALLOC = ACC;
          CQN(P + 3);
          ACC = ALLOC;
          P = P + 4;
          DECLARESCALARS(1, FINF);

        } else {
          // ARRAYSOFRECORDS

          NAM = 0;
          // Q=1FORARRAYFORMAT
          Q = 2 - A;
          P = P + 4;

          SETLINE();
          DECLAREARRAYS(Q, FINF);
        }
      }

    BEND:
    };
      goto CSSEXIT;
      //

    SW_19:
      //'*'(UCI)(S)

      if (!(LEVEL >= 2)) FAULT(57, 0);

      {
        auto void CIND(void);
        int FNAME;
        int ALT;
        int OPCODE;
        int FORM;
        int H;
        int Q;
        int MASK;
        int FILLER;

        ALT = A;
        P = P + 2;
        OPCODE = CALL;
        goto SW[ALT];
      SW_1:
      SW_2:
        FNAME = FROMAR2(P);
        COPYTAG(FNAME);
        if (!(ROUT == NAM && NAM == 0 && ARR == 0 && PREC > 4 && I == RBASE &&
              TYPE != 7))
          FAULT(33, FNAME);
        if (ALT == 1)
          PSF1(ST, 1, K);
        else
          GETINACC(ACCR, BYTES[(PREC) - (0)] >> 2, 0, LNB, K);
        goto EXIT;
      // PUT(HEXHALFWORD)
      SW_3:

        TYPE = A;
        PREC = TYPE >> 4;
        TYPE = TYPE & 7;
        if (!(TYPE == 1 && PREC < 6)) FAULT(32, 0);
        if (PREC == 5) P = P + 2;
        PLANT(FROMAR2(P + 1));
        goto EXIT;
      // CNOP
      SW_5:

        CNOP(A, A);
        goto EXIT;
      // ASSEMBLER
      SW_4:
        // FORM=PRIMARY,SECONDARYOR3RY

        FORM = A;

        OPCODE = A;
        P = P + 2;
        goto F[FORM];
      // ALLPRIMARYFORMATINSTRUCTIONS
      F_1:

        ALT = A;
        P = P + 1;
        goto POP[ALT];
      // LABELNAME
      POP_1:

        FNAME = FROMAR2(P);
        P = P + 2;
        ENTERJUMP(OPCODE << 24 | 3 << 23, FNAME, 0);
        goto EXIT;
      // DIRECTSYMBOLIC
      POP_2:

        CIND();
      POPI:
        PSORLF1(OPCODE, ACCESS, AREA, DISP);
        goto EXIT;
      // INDIRECTSYMBOLIC
      POP_3:

        CIND();
        ACCESS = 4 - A;
        P = P + 1;
        goto POPI;
      // DRSYMBOLICALLYMODIFIED
      POP_4:

        CIND();
        ACCESS = 1;
        goto POPI;
      //(DR)&(DR+B)
      POP_5:

        ACCESS = 4 - A;
        AREA = 7;
        DISP = 0;
        P = P + 1;
        goto POPI;
      // B
      POP_6:

        ACCESS = 0;
        AREA = 7;
        DISP = 0;
        goto POPI;
      // SECONDARY(STORE-TOSTORE)FORMAT
      F_2:

        MASK = 0;
        FILLER = 0;
        Q = 0;
        FNAME = 0;
        H = 2 - A;
        if (H == 0) {
          FNAME = FROMAR2(P + 1) - 1;
          P = P + 2;
        }
        if (!(0 <= FNAME && FNAME <= 127)) FAULT(32, 0);
        ALT = A;
        P = P + 2;
        if (ALT == 1) {
          Q = 1;
          MASK = FROMAR2(P);
          FILLER = FROMAR2(P + 2);
          P = P + 4;
          if (!(0 <= MASK | FILLER && MASK | FILLER <= 255)) FAULT(32, 0);
        }

        PF2(OPCODE, H, Q, FNAME, MASK, FILLER);
        goto EXIT;
      // TERTIARYFORMAT
      F_3:

        MASK = FROMAR2(P);
        ALT = A;
        if (!(0 <= MASK && MASK <= 15)) FAULT(32, 0);
        P = P + 3;
        goto TOP[ALT];
      // LABEL
      TOP_1:

        FNAME = FROMAR2(P);
        P = P + 2;
        ENTERJUMP(OPCODE << 24 | MASK << 21, FNAME, 0);
        goto EXIT;
      // SYMBOLICOPERAND
      TOP_2:

        CIND();
        if (AREA >= 6) FAULT(32, 0);
        if (AREA == LNB || AREA == XNB || AREA == CTB) DISP = DISP / 4;
      TOPI:
        PF3(OPCODE, MASK, AREA, DISP);
        goto EXIT;
      //(DR)&(DR+B)
      TOP_3:

        DISP = 0;
        AREA = 8 - A;
        P = P + 1;
        goto TOPI;
      //(DR+N)
      TOP_4:

        DISP = FROMAR2(P);
        P = P + 2;
        AREA = 1;
        goto TOPI;
        void CIND(void) {
          //***********************************************************************
          //*COMPILEASYMBOLICOPERANDBYSETTINGACCESS,AREA&DISP*
          //***********************************************************************

          int ALT;
          int AFN;
          int FN0;
          int FN1;
          int FN2;
          int FN3;
          int JJ;
          int D;
          int CTYPE;
          int CPREC;

          AFN = ;
          ALT = A;
          ACCESS = 0;
          P = P + 1;
          goto SW[ALT];
        //(=')(PLUS')(ICONST)
        SW_1:
          // PAST(='')

          P = P + 1;

          D = A;
          CTYPE = A;
          CPREC = CTYPE >> 4;
          CTYPE = CTYPE & 7;
          if (CPREC == 4)
            FN0 = FROMAR2(P + 2);
          else {
            for (JJ = 0; JJ != BYTES[(CPREC) - (0)] - 1; JJ += 1) {
            Mk_AST_assignment:
              Var = -1;
            }
          }

          P = P + 2 + BYTES[(CPREC) - (0)];
          if (D == 2) {
            if (CTYPE == 2)
              FN0 = FN0 ^ 0x80000000;
            else {
            Mk_AST_assignment:
              Var = -1 if (CPREC == 6);
              else FN0 = -FN0;
            }
          }

        CNST:
          if (!(CTYPE == 1 && CPREC <= 5 && X 'FFFE0000' <= FN0 &&
                FN0 <= 0x1FFFF))
            goto LIT;
          AREA = 0;
          DISP = FN0;
          return;
        LIT:
          if (!(1 <= CTYPE && CTYPE <= 2 && 5 <= CPREC && CPREC <= 7))
            FAULT(32, 0);
          STORECONST(DISP, BYTES[(CPREC) - (0)], AFN);
          AREA = PC;
          ACCESS = 0;
          return;
        //(NAME)(OPTINC)
        SW_2:

          FN0 = FROMAR2(P);
          P = P + 2;
          COPYTAG(FN0);
          if (LITL == 1 && ARR == 0) {
            CTYPE = TYPE;
            CPREC = PREC;
            ALT = TAGS[(FN0) - (0)];
            FROM123(ALT, D, FN0, FN1);
            if (CPREC == 7) AFN = FN1;
            goto CNST;
          }

          if (TYPE >= 6 || TYPE == 4 || ROUT == 1 && NAM == 0) {
            FAULT(33, FN0);
            return;
          }
          if (ROUT == 1) K = FROM1(K);
          AREA = LNB;
          if (I != RBASE) AREA = SETXORYNB(XNB, I);
          ALT = A;
          D = FROMAR2(P + 1);
          if (ALT == 1) K = K + D;
          if (ALT == 2) K = K - D;
          P = P + 1;
          if (ALT <= 2) P = P + 2;
          DISP = K;
          return;
        //'('(REG)(OPTINC)')'
        SW_3:

          AREA = A + 1;
          ALT = A;
          P = P + 2;
          DISP = 0;
          D = FROMAR2(P);
          if (ALT == 1) DISP = D;
          if (ALT == 2) FAULT(32, 0);
          if (AREA == PC)
            DISP = CA + 2 * DISP;
          else
            DISP = 4 * DISP;
          if (!(ALT == 3)) P = P + 2;
          return;
        //'%TOS'
        SW_4:

          AREA = 6;
          DISP = 0;
        };

      EXIT:
        GRUSE[(ACCR) - (0)] = 0;
        GRUSE[(DR) - (0)] = 0;
        GRUSE[(BREG) - (0)] = 0;
        if (OPCODE == CALL || OPCODE == LXN || OPCODE == JLK || OPCODE == OUT)
          GRUSE[(XNB) - (0)] = 0;
        if (OPCODE == CALL || OPCODE == LCT || OPCODE == JLK || OPCODE == OUT)
          GRUSE[(CTB) - (0)] = 0;
      };

      goto CSSEXIT;
    SW_20:
      //'%TRUSTEDPROGRAM'

      if (PARMARR == 0 && PARMCHK == 0) COMPILER = 1;
      goto CSSEXIT;
    //'%MAINEP'(NAME)
    SW_21:

      KK = FROMAR2(P + 1);
      if (!(CPRMODE == 0)) FAULT(58, 0);
      MAINEP = ;
      goto CSSEXIT;
      void CRFORMAT(int *OPHEAD) {
        //***********************************************************************
        //*CONVERTSARECORDFORMATSTATEMENTTOALISTHEADEDBYOPHEAD*
        //*FORMATOFANENTRY.*
        //*S1=SUBNAME<<20!PTYPE<<4!J*
        //*S2,S3=416BITDISPLACEMENTSD2,ACC,D1,KFORM*
        //*NORMALLYD1=RECORDRELATIVEDISPLACEMENTANDACC=LMAX(STRINGS)*
        //*FORARRAYSD2=FIRSTELEMENTDISPLACEMENTANDD1=DISPLACEMENT*
        //*OFRECORDRELATIVEARRAYHEADINTHEGLA*
        //*KFORMISONLYUSEDFORRECORDSANDPOINTSTOTHEFORMAT*
        //*ONEXITACCHASTHERECORDSIZEROUNDEDUPTOTHEBOUNDARY*
        //*REQUIREDBYITSLARGESTCOMPONENT*
        //***********************************************************************
        int D1;
        int D2;
        int NLIST;
        int FORM;
        int RL;
        int MRL;
        int UNSCAL;
        int SC;
        int DESC;
        int FN;
        int INC;
        int Q;
        int R;
        int A0;
        int A1;
        int A2;
        int DV;
        int RFD;
        int LB;
        int OB;
        int TYPEP;
        int SACC;

        auto void SN(int Q);
        auto void ROUND(void);
        NLIST = 0;
        OPHEAD = 0;
        FORM = 0;
        ACC = 0;
        OB = 0;
        // INCCOUNTSDOWNRECORD
        MRL = 0;
        INC = 0;

      NEXT:
        ROUT = 0;
        LITL = 0;
        NAM = 0;
        RFD = A;
        if (RFD <= 2) {
          P = P + 1;
          CLT();
        }
        goto RFEL[RFD];
      //(TYPE)(QNAME'')(NAMELIST)
      RFEL_1:

        CQN(P);
        P = P + 1;
        PACK(PTYPE);
        D2 = 0;
        RL = 3;
        if (NAM == 0 && 3 <= PREC && PREC <= 4) RL = PREC - 3;
      AGN:
        ROUND();
        J = 0;
        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          D1 = INC;
          SN(P);
          P = P + 3;
          INC = INC + ACC;
        }
        while (!(A == 2))
          ;
        // EXTRA2FORRECORDSTOSKIPFORMAT
        P = P + (RFD >> 2 << 1);

      TRYEND:
        if (A == 2) goto END;
        P = P + 1;
        goto NEXT;
      //(TYPE)array(NAMELIST)(BPAIR)
      RFEL_2:
      RFEL2:

        Q = P;
        ARR = 1;
        PACK(PTYPE);
        if (TYPE <= 2) {
          UNSCAL = 0;
          SC = PREC;
        } else {
          UNSCAL = 1;
          SC = 3;
        }
        if (PREC == 4)
          DESC = 0x58000002;
        else
          DESC = SC << 27 | UNSCAL << 25 | (1 - PARMARR) << 24;
        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          // UNTIL<RESTOFARRAYLIST>NULL

          do
            P = P + 3;
          while (!(A == 2))

              TYPEP = PTYPE;
          SACC = ACC;
          DV = DOPEVECTOR(TYPE, ACC, 0, FROMAR2(Q), R, LB) + 12;
          // DOPEVECTORINTOSHAREABLES.T.

          ACC = SACC;
          PTYPE = TYPEP;
          UNPACK();
          if (TYPE == 5 || TYPE == 1 && PREC == 3)
            RL = 0;
          else
            RL = 3;
          ROUND();
          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  Error
          : (...) not allowed here

              do {
            // HEADINTOGLAFOREACHARRAY

            A0 = R;
            if (UNSCAL == 0) A0 = A0 / ACC;
            // STRINGDESCRIPTORS!
            if (PREC == 4) A0 = 0;

            A0 = A0 | DESC;
            A1 = INC;
            if (TYPE <= 3 && PARMARR == 0 && 0 == PARMCHK && J == 1)
              A1 = A1 - LB * ACC;
            A2 = 5 << 27 | 3 * J;
            PGLA(4, 16, );
            D1 = GLACA - 16;
            RELOCATE(D1 + 12, DV, 1)
            // RELOCATEDVPOINTER
            ;

            NOTECREF(0x80000000 | (DV << 1 >> 3) | (D1 + 12) >> 2 << 16,
                     (DV & 0xFFFF) << 2);
            D2 = INC;
            SN(Q);
            INC = INC + R;
            Q = Q + 3;
          }
          while (!(A == 2))
            ;
          P = P + 1;
          Q = P;
        }
        while (!(A == 2))
          ;
        if (RFD == 5) P = P + 2;
        goto TRYEND;
      // record(array)name
      RFEL_3:

        TYPE = 3;
        PREC = 3;
        NAM = 1;
        ARR = 2 - A;
        P = P + 2;
        PACK(PTYPE);
        D2 = 0;
        RL = 3;
        ACC = 8 + 8 * ARR;
        FORM = 0;
        goto AGN;
      // RECORDSINRECORDS
      RFEL_4:
        // RECORDARRAYSINRECORDS

      RFEL_5:

        Q = P + FROMAR2(P + 1) + 1;
        FN = FROMAR2(Q);
        COPYTAG(FN)
        // COPYFORMATTAG&SETACC
        ;

        if (!(PTYPE == 4)) FAULT(62, FN);
        TYPE = 3;
        PREC = 3;
        FORM = TCELL;
        if (RFD == 4) {
          PTYPE = 0x33;
          P = P + 3;
          D2 = 0;
          RL = 3;
          goto AGN;
        }

        P = P + 3;
        goto RFEL2;
      // FINISHOFF
      END:

        RL = MRL;
        ROUND();
        // SIZEROUNDEDAPPROPRIATELY
        ACC = INC;

        if (!(INC <= 0x7FFF)) FAULT(98, 0);
        CLEARLIST(NLIST);
        return;
        void SN(int Q) {
          //***********************************************************************
          //*CHECKTHESUBNAMEHASNOTBEENUSEDBEFOREINTHISFORMAT*
          //*ANDENTERITWITHITSDESCRIPTORSINTOTHELIST.*
          //***********************************************************************
          FNAME = FROMAR2(Q);
          if (!(FIND(FNAME, NLIST) == -1)) FAULT2(61, 0, FNAME);
          BINSERT(OPHEAD, OB, FNAME << 20 | PTYPE << 4 | J, D2 << 16 | ACC,
                  D1 << 16 | FORM);
          PUSH(NLIST, 0, FNAME, 0);
        };

        void ROUND(void) {
          if (RL > MRL) MRL = RL;
          while (INC & RL != 0) INC = INC + 1;
        };
      };
      // OFROUTINECRFORMAT

      int DISPLACEMENT(int LINK) {
        //***********************************************************************
        //*SEARCHAFORMATLISTFORASUBNAME*
        //*A(P)HASENAME--LINKISHEADOFRFORMATLIST.RESULTISDISP*
        //*FROMSTARTOFRECORD*
        //***********************************************************************
        recfm *FCELL;
        recfm *PCELL;
        recfm *LCELL;
        //(LISTF)

        int RR;
        int II;
        int ENAME;
        int CELL;

        ENAME = (A << 8) + A;
        CELL = 0;
        if (LINK != 0) {
          // CHKRECORDSPECNOTOMITTED
          // ONTOFORMATTAGCELL

          FCELL = ASLIST[(LINK) - (0)];
          // LINKTOSIDECHAIN

          LINK = FCELL & 0x7FFF;

          CELL = LINK;
          II = -1;
          ACC = -1;
          while (LINK > 0) {
            LCELL = ASLIST[(LINK) - (0)];
            if (LCELL >> 20 == ENAME) {
              // RIGHTSUBNAMELOCATED

              TCELL = LINK;
              RR = LCELL;
              SNDISP = LCELL;
              K = LCELL;
              J = RR & 15;
              PTYPE = RR >> 4 & 0xFFFF;
              ACC = SNDISP & 0xFFFF;
              SNDISP = (SNDISP & 0xFFFF0000) / 0x10000;
              KFORM = K & 0xFFFF;
              K = K >> 16;
              if (LINK != CELL) {
                // NOTTOPCELLOFFORMAT

                PCELL = LCELL;
                LCELL = CELL;
                FCELL = FCELL & 0xFFFF0000 | LINK;
              }
              // ARRANGINGLISTWITHTHISSUBNAME
              // ATTHETOP

              return K;
            }

            PCELL = LCELL;
            LINK = LCELL;
          }
        }

        FAULT(65, ENAME);
        if (CELL > 0) PUSH(ASLIST[(CELL) - (0)], ENAME << 20 | 7 << 4, 0, 0);
        PTYPE = 7;
        TCELL = 0;
        return -1;
      };

      int COPYRECORDTAG(int *SUBS) {
        //***********************************************************************
        //*PRODUCEPTYPEETCFORACOMPOUNDNAMEBYCHAININGDOWNONE*
        //*ONEORMORERECORDFORMATLISTS.ONEXITRESULT=0IFNO*
        //*SUBNAMEFOUNDORSUBNAMEISOFTYPERECORDWITHNOFURTHER*
        //*SUBNAMEATTACHED.RESULT#0IFBONE-FIDESUBNAMELOCATED*
        //*ONENTRYKFORMHASPOINTERTOTHE(FIRST)FORMATLISTAND*
        //*PPOINTSTOTHEA.R.ENTRYFOR(FIRST)ENAME*
        //***********************************************************************
        int Q;
        int FNAME;

        SUBS = 0;
        ? Please recode the source file so that loops with
            "%until <cond> %cycle ... %repeat" are replaced by
            "%cycle ... %repeat %until <cond>" do {
          FNAME = KFORM;
          P = P + 2;
          SKIPAPP();
          // NO(FURTHER)ENAME
          if (A == 2 || FNAME <= 0) return 0;

          SUBS = SUBS + 1;
          P = P + 1;
          Q = DISPLACEMENT(FNAME);
          UNPACK();
        }
        while (!(TYPE != 3))
          ;
        // GIVES0IFSUBNAMENOTKNOWN
        return Q + 1;
      };

      void CRNAME(int Z, int REG, int MODE, int BS, int AR, int DP,
                  int *NAMEP) {
        //***********************************************************************
        //*DEALWITHRECORDELEMENTNAMES.ZASFORCNAME.CLINK=TAGS(RN)*
        //*MODE=ACCESSFORRECORD(NOTTHEELEMENT!)*
        //*ONEXITBASE,AREA&DISPPOINTTOREQUIREDELEMENT*
        //*RECURSIVECALLISNEEDEDTODEALWITHRECORDSINRECORDS*
        //*DEPTHSHEWSRECURSIVELEVELS-NEEDEDTOAVOIDMISSETTING*
        //*REGISTERINUSEIFRECORDNAMEINRECORDHASTHESAMENAMEAS*
        //*AGENUINERECORDNAME.*
        //***********************************************************************
        int DEPTH;
        int FNAME;

        auto void CENAME(int MODE, int FNAME, int BS, int AR, int DP, int XD);
        DEPTH = 0;
        // POINTERTOFORMAT
        FNAME = KFORM;

        if (ARR == 0 || Z == 6 && A == 2) {
          // SIMPLERECORD

          if (A == 2)
            P = P + 3;
          else
            NOAPP();
          CENAME(MODE, FNAME, BS, AR, DP, 0);

        } else {
          CANAME(ARR, BS, DP);
          CENAME(ACCESS, FNAME, BASE, AREA, DISP, 0);
        }
        return;
        //

        void CENAME(int MODE, int FNAME, int BS, int AR, int DP, int XD) {
          //***********************************************************************
          //*FINDSOUTABOUTSUBNAMEANDACTSACCORDINGLY.MOSTLYACTION*
          //*CONSISTSOFUPPINGXDBYOFFSETOFTHESUBNAMEBUTISVERY*
          //*HAIRYFORRECORDSINRECORDSETC*
          //*MODEISACCESSFORTHERECORD*
          //***********************************************************************
          auto void FETCHRAD(void);
          auto void LOCALISE(int SIZE);
          int Q;
          int QQ;
          int D;
          int C;
          int W;

          DEPTH = DEPTH + 1;
          if (A == 2) {
            // ENAMEMISSING

            ACCESS = MODE;
            AREA = AR;
            XDISP = XD;
            // FORPOINTER
            BASE = BS;
            DISP = DP;

            if (Z < 14) {
              // NOTARECORDOPERATION

              if (!(3 <= Z && Z <= 4 || Z == 6)) {
                // ADDR(RECORD)

                FAULT(64, 0);
                BASE = RBASE;
                AREA = -1;
                DISP = 0;
                ACCESS = 0;
                PTYPE = 1;
                UNPACK();
              }
            }

            return;
          }
          // FINDOUTABOUTSUBNAME

          P = P + 1;

          Q = DISPLACEMENT(FNAME)
              // TCELLPOINTSTOCELLHOLDING
              ;

          UNPACK()
          // INFOABOUTTHESUBNAME
          ;

          if (Q == -1 && -1 == ACC || PTYPE == 7) {
            // WRONGSUBNAME(HASBEENFAULTED)

            P = P + 2;
            SKIPAPP();
            P = P - 3;
            ACCESS = 0;
            BASE = RBASE;
            DISP = 0;
            AREA = -1;
            return;
          }
          // NAMEP=-1UNALTERED!

          NAMEP = (A << 8 | A) << 16 | NAMEP;
          // ARRAYSINCLUDINGRECORDARRAYS

          if (ARR == 1) goto AE;

          if (A == 2)
            P = P + 3;
          else
            NOAPP();
          if (TYPE <= 2 || TYPE == 5 ||
              TYPE == 3 && A == 2 && 3 <= Z && Z <= 4 || Z == 6) {
            ACCESS = MODE + 4 + 4 * NAM;
            BASE = BS;
            AREA = AR;
            DISP = DP;
            XDISP = XD + Q;
            return;
          }
          //
          // NOWCODINGBECOMESHAIRY:-STILLLEFTARE
          // A)RECORDSINRECORDSQPOINTSTOSECONDARYRECORD
          // B)RECORDNAMESINRECORDSQHASOFF-SETOFAPOINTER
          // C)RECORDARRAYNAMESINRECORDSQHASOFF-SETAHEADERINRECORD
          // D)RECORDARRAYSINRECORDSNOTYETALLOWED
          // QWOULDHAVEOFF-SETOFARECORDRELATIVEHEADERINTHEGLA
          //
          XD = XD + Q;
          NAMEP = -1;
          if (NAM == 1) {
            if (MODE == 0) {
              DP = DP + XD;
              XD = 0;
              MODE = 2;

            } else {
              LOCALISE(8)
              // PICKUPRECNAMEDESCR&STCK
              ;

              AR = AREA;
              DP = DISP;
              BS = BASE;
            }
          }

          CENAME(MODE, KFORM, BS, AR, DP, XD);
          return;
        // ARRAYSANDARRAYNAMESASELEMEN
        AE:

          FROM123(TCELL, Q, SNDISP, K);
          ACC = SNDISP & 0xFFFF;
          SNDISP = (SNDISP & 0xFFFF0000) / 0x10000;
          KFORM = K & 0xFFFF;
          K = K >> 16;
          C = ACC;
          D = SNDISP;
          Q = K;
          QQ = KFORM;
          if (Z == 6 || Z == 12 && A == 2) {
            //'GET ARRAYHEAD'CALL

            P = P + 3;
            if (NAM == 1) {
              ACCESS = MODE + 8;
              BASE = BS;
              AREA = AR;
              DISP = DP;
              XDISP = XD + Q;
              return;
            }
            //
            // PASSINGANARRAYINARECORDBYNAMEMUSTCONSTRUCTPROPERARRAYHEAD
            // FROMTHERECORDRELATIVEONEATQ(GLA)
            //
            NAMEP = -1;
            FETCHRAD();
            AREA = -1;
            DISP = Q;
            BASE = 0;
            ACCESS = 0;
            CREATEAH(1);

          } else {
            // ARRAYELEMENTSINRECORDS

            NAMEP = -1;
            if (NAM == 1) {
              // ARRAYNAMES-FULLHEADINRECORD

              XD = XD + Q;
              LOCALISE(16)
              // MOVEHEADUNDERLNB
              ;

              CANAME(3, BASE, DISP)
              // ARRAYMODESETSDISP,AREA&BASE
              ;

            } else {
              // ARRAYRELATIVEHEADINGLA

              if (MODE == 0 || MODE == 2) {
                if (MODE == 0)
                  W = DP - 4;
                else
                  W = DP + 4;

              } else {
                FETCHRAD()
                // RECORDADDRTOACC
                ;

                GETWSP(W, 1);
                PSF1(ST, 1, W);
                XD = 0;
                BS = RBASE;
              }

              CANAME(3, 0, Q)
              // RECORDRELARRAYACCESS
              ;
              // CANRETURNACCESS=1OR3ONLY

              if (PARMARR == 0 && 0 == PARMCHK && ACCESS == 3 && PREC == 3 ||
                  TYPE >= 3) {
                PSORLF1(ADB, 0, AREACODE2(BS), W);
                if (!(XD == 0)) PSF1(ADB, 0, XD);
                GRUSE[(BREG) - (0)] = 0;

              } else {
                GETINACC(DR, 2, 0, AREACODE(), Q);
                PSORLF1(INCA, 0, AREACODE2(BS), W);
                if (ACCESS == 1) {
                  ACCESS = 2;
                  AREA = 7;
                  XD = XD + NUMMOD * BYTES[(PREC) - (0)];
                }
                if (!(XD == 0)) PSF1(INCA, 0, XD);
                FORGET(DR);
                // ANDACCESS=2OR3ONLY
                AREA = 7;
                DISP = 0;

                if (TYPE == 3 && A == 1) {
                  // WILLBEAFURTHERCALL
                  // ONROUTINECENAME

                  GETWSP(DISP, 2);
                  PSF1(STD, 1, DISP);
                  AREA = LNB;
                  BASE = RBASE;
                }
              }
            }

            if (TYPE == 3) CENAME(ACCESS, QQ, BASE, AREA, DISP, 0);
          }

          return;
          void FETCHRAD(void) {
            //***********************************************************************
            //*SETACCTO32BITADDRESSOFRECORD.*
            //***********************************************************************

            ACCESS = MODE + 4;
            AREA = AR;
            BASE = BS;
            DISP = DP;
            XDISP = XD;
            NAMEOP(4, ACCR, 4, -1);
          };

          void LOCALISE(int SIZE) {
            //***********************************************************************
            //*REMOVESADESCRIPTORORARRAYHEADFROMARECORDANDSTORES*
            //*ITINATEMPORARYUNDERLNB.*
            //***********************************************************************
            int HOLE;

            ACCESS = MODE + 4;
            AREA = AR;
            BASE = BS;
            DISP = DP;
            XDISP = XD;
            NAMEOP(2, ACCR, SIZE, -1);
            GETWSP(HOLE, SIZE >> 2);
            PSF1(ST, 1, HOLE);
            MODE = 2;
            AREA = LNB;
            BASE = RBASE;
            DISP = HOLE;
            XD = 0;
          };
          // OFROUTINELOCALISE
        };
        // OFROUTINECENAME
      };
      // OFROUTINECRNAME

      void CSTREXP(int MODE, int REG) {
        //***********************************************************************
        //*PLANTIN-LINECODEFORCONCATENATION.AWORKAREAUNDER*
        //*BASEREGISTERCOVERISUSUALLYREQUIRED.THECURRENTLENGTH*
        //*OFSTRINGINTHEWORKAREAISKEPTINAREGISTER(BREG)*
        //*WHICHISPROTECTEDTHROUGHTHENORMALINTERMEDIATE-RESULT*
        //*MECHANISMS.*
        //*ONENTRY:-*
        //*MODE=0NORMAL.WKAREANOTUSEDFORONEOPERANDEXPSSNS*
        //*MODE=1STRINGMUSTGOTOWORKAREA*
        //*(ANDTOCOME)*
        //*MODE=3CONCATENATEINTOLHSOF=ASSNMNT(E.G.A=B.C)*
        //*MODE=4OPTIMISES=S.TBYNOTCOPYINGS*
        //*2**4BITOFMODEISSETIFWK-AREANOTTOBEFREEDONEXIT*
        //*ONEXIT:-*
        //*BASE,DISP&INDEXDEFINERESULT*
        //*VALUE#0ifRESULTINAWORKAREA(CCONDMUSTKNOW)*
        //*STRINGLSETIFSTRINGLENGTHKNOWN.STRFNRESDEFINESLENREG*
        //***********************************************************************
        int PP;
        int WKAREA;
        int DOTS;
        int REXP;
        int ERR;
        int CLEN;
        int KEEPWA;
        int FNAM;

        auto int STROP(int REG);
        KEEPWA = MODE & 16;
        MODE = MODE & 15;
        PP = P;
        STRINGL = 0;
        FNAM = 0;
        WKAREA = 0;
        //=0ifONEOPERANDEXP
        REXP = 2 - A;

        if (!(A == 4 && REXP == 0 && MODE == 0)) goto NORMAL;
        if (A == 2) goto SIMPLE;
        if (!(A == 1)) goto NORMAL;
      // COPYTAG(FROMAR2(P+5))
      // ifPTYPE=SNPTthenPTYPE=TSNAME(K)
      //->NORMALunlessROUT=0
      // BEWAREOFMAP=FN
      //->NORMALifPARMARR=1and(ARR#0orA(P+7)=1)
      SIMPLE:
        P = P + 4;
        ERR = STROP(REG);
        if (!(ERR == 0)) goto ERROR;
        VALUE = WKAREA;
        P = P + 1;
        STRFNRES = 0;
        return;
      ERROR:
        FAULT2(ERR, 0, FNAM);
        BASE = RBASE;
        DISP = 0;
        VALUE = 0;
        ACCESS = 0;
        P = PP;
        SKIPEXP();
        return;
      // LENGTHOFCONSTANTPART
      NORMAL:
        CLEN = 0;
        P = P + 3;

        ERR = 72;
        if (!(A == 4)) goto ERROR;
        P = P + 1;
        GETWSP(WKAREA, 268)
        // GETNEXTOPERAND
        ;
        // NOOPERATORSYET

        DOTS = 0;

      NEXT:
        STRINGL = 0;
        ERR = STROP(DR)
            // GETNEXTOPERAND
            ;

        if (!(ERR == 0)) goto ERROR;
        if (REGISTER[(ACCR) - (0)] = 0) BOOTOUT(ACCR);
        PSF1(LB, 0, WKAREA)
        // BYTEDISPFROMLNB
        ;

        PPJ(0, 19 + DOTS)
        // TOSUBROUTINE19OR20
        ;
        // NOMOREOPERATIONS

        if (A == 2) goto TIDY;
        // CONCATENATE

        ERR = 72;
        if (!(A == CONCOP)) goto ERROR;

        DOTS = DOTS | 1;
        P = P + 2;
        goto NEXT;
      // FINISHOFF
      TIDY:

        VALUE = WKAREA;
        // PASTRESTOFEXPRN
        P = P + 1;

        if (KEEPWA == 0) RETURNWSP(WKAREA, 268);
        STRINGL = 0;
        return;
        int STROP(int REG) {
          //***********************************************************************
          //*DEALSWITHOPERANDFORCONCATENATION.RETURNRESULT=0FOR*
          //*VALIDOPERANDOTHERWISEANERRORNUMBER.*
          //***********************************************************************
          int CTYPE;
          int VAL;
          int MODE;
          // ALTERNATIVEOFOPERAND

          MODE = A;

          if (MODE > 2) return 75;
          if (MODE != 1) {
            // GETCONSTTYPE&LOSEAMCKFLAGS

            CTYPE = A;

            if (CTYPE == 0x35) {
              STRINGL = A;
              DISP = FROMAR4(P + 2);
              P = P + STRINGL + 7;

            } else
              return 71;
            PF1(LDRL, 0, PC, STRLINK);
            if (DISP != 0) PSF1(INCA, 0, DISP);
            if (STRINGL != 1) {
              if (STRINGL <= 63)
                PSF1(LDB, 0, STRINGL);
              else
                PF1(LDB, 2, 7, 0)
                //((DR))
                ;
            }

            GRUSE[(DR) - (0)] = 0;
            if (REG == ACCR) COPYDR();

          } else {
            // MUSTCHECKFIRST

            P = P + 1;

            REDUCETAG()
            // SINCECNAMEONLYLOADSSTRINGS
            ;
            // ANDLONGINTSTODR!

            if (5 != TYPE && TYPE != 7) {
              FNAM = FROMAR2(P);
              return 71;
            }
            CNAME(2, REG);
            STRINGL = 0;
            if (ROUT != 0 && NAM <= 1) {
              // WASFUNCTIONNOTMAP

              if (WKAREA == 0 && KEEPWA != 0)
                WKAREA = STRFNRES;
              else
                RETURNWSP(STRFNRES, 268);
            }
          }

          return 0;
        };
        // OFINTEGERFNSTROP
      };
      // OFROUTINECSTREXP

      void CRES(int LAB) {
        //**********************************************************************
        //*COMPILESARESOLUTIONE.GA->B.(C).D.(E).FANDJUMPSTOLAB*
        //*ONFAILURE.(LAB=0FORUNCONDITIONALRESOLUTIONTOPERMON*
        //*FAILURE).*
        //*THEMETHODISTOCALLASUBROUTINEPASSING3PARAMS:-*
        //*P1POINTSTOLHS(A)*
        //*P2STRINGTOCONTAINFRAGMENT(PASSEDBYNAME)*
        //*P3THEEXPRESSIONPASSEDASDESCRIPTOR*
        //*SUBROUTINETRIESTOPERFORMTHERESOLUTIONANDSETSTHE*
        //*CONDITIONCODE=8IFITSUCCEEDS.*
        //**
        //*ONENTRYLHSISDEFINEDBYDESCRIPTORREG.*
        //*PPOINTSTOP(+') OF RHS DEFINED AS (+')(OPERAND)(RESTOFEXP)*
        //**
        //$THEROUTINEISCOMPACTBUTDIFFICULTTOFOLLOW(ORALTER)*
        //*THETIMEINPERMISLARGESOITISNOTWORTHWHILETOPERSUE*
        //*CODEEFFICIENCYTOOINDUSTRIOUSLY.*
        //**********************************************************************
        int P1;
        int P2;
        int SEXPRN;
        int W;
        int LAST;
        int ERR;
        int FNAM;

        recfm R;
        //(RD)
        //=1WHENENDOFEXPRNSNFOUND

        LAST = 0;
        FNAM = 0;
        // RESOLUTION(BRKTD)EXPRESSNS

        SEXPRN = 0;
        // NORMALCRESFAULT

        ERR = 74;

        PSF1(INCA, 0, 1)
        // TOFIRSTCHAR
        ;

        P1 = P;
        P = P + 3;
        // LHSMUSTBEASTRING
        if (A == 4) goto RES;
        // BUTTHISCHECKEDBEFORECALL

        ERR = 72;
      ERROR:
        FAULT2(ERR, 0, FNAM);
        P = P1;
        SKIPEXP();
        return;
      // TOP(OPERAND)
      RES:
        P = P + 1;

        PSF1(PRCL, 0, 4);
        if (SEXPRN == 0)
          W = STD;
        else
          W = ST;
        PF1(W, 0, TOS, 0);
        if (A == 3) {
          PSF1(LSD, 0, 0);
          GRUSE[(ACCR) - (0)] = 0;
        } else {
          // BOMITTED
          // P(OPERAND)=NAME

          if (!(A == 1)) goto ERROR;

          P = P + 1;
          P2 = P;
          CNAME(3, ACCR);
          if (TYPE != 5) {
            ERR = 71;
            FNAM = FROMAR2(P2);
            goto ERROR;
          }
          if (A != CONCOP) {
            ERR = 72;
            goto ERROR;
          }
          P = P + 2;
        }

        PF1(ST, 0, TOS, 0)
        // B(ORDUMMY)TOP2
        ;
        // P(OPERAND)='('(EXPR)')'

        if (!(A == 3)) goto ERROR;

        SEXPRN = SEXPRN + 1;
        P = P + 1;
        CSTREXP(0, DR)
        // TOREGISTERDR
        ;
        //

        PF1(STD, 0, TOS, 0);
        PSF1(RALN, 0, 11);
        PPJ(-1, 16);
        // DEALWITHCC#8IERESLNFAILED

        if (LAB != 0)
          ENTERJUMP(7, LAB, 0b11);
        else
          PPJ(7, 12);
        //

        if (A == 2) goto END;
        if (A != CONCOP) {
          ERR = 72;
          goto ERROR;
        }
        if (!(A == 1)) goto ERROR;
        P2 = P + 1;
        P = P2 + 1;
        do {
          P = P + 3;
          SKIPAPP();
        } while (!(A == 2)) if (A == 1) {
          P = P2;
          goto RES;
        }
        P1 = P + 1;
        REGISTER[(ACCR) - (0)] = 1;
        OLINK[(ACCR) - (0)] = ;
        R = 1;
        R = ACCR;
        R = 9;
        P = P2 + 2;
        CNAME(1, DR);
        if (R != 9) PF1(LSD, 0, TOS, 0);
        REGISTER[(ACCR) - (0)] = 0;
        PF1(STUH, 0, BREG, 0);
        PF1(LUH, 0, BREG, 0);
        PF2(MVL, 0, 0, 0, 0, 0);
        if (ROUT != 0 || NAM != 0)
          PPJ(0, 18)
          // ASSNMNTCHECK(Q.V)
          ;

        PF2(MV, 1, 1, 0, 0, UNASSPAT & 255);
        GRUSE[(ACCR) - (0)] = 0;
        if (PARMARR == 1) {
          PSF1(USH, 0, 8);
          PSF1(USH, 0, -40);
          PPJ(36, 9);
        }

        P = P1;
      END:
        P = P + 1;
      };

      void SAVEAUXSTACK(void) {
        //***********************************************************************
        //*COPYAUXSTACKDESCRPTR&POINTERINTOCURRENTSTACKFRAME*
        //*FIVEWORDSAREUSEDFORTHISPURPOSE:-*
        //*1&2HOLDAUXSTACKDESCRIPTOR*
        //*3HOLDSVALUEATBLKENTRYFORUSEATEXIT*
        //*4HOLDSSTACKTOPVALUEAFTERALLARRAYDECLNS(FORons)*
        //*5HOLDSTACKLIMITFORCHECKINGATARRAYDECLARATIONS*
        //*THELATTERISOMITTEDINPARM=OPT*
        //***********************************************************************
        int XYNB;
        int DR0;
        int DR1;

        if (AUXST == 0) {
          // FIRSTREFPUTREFINPLT

          DR0 = 0x30000001;
          DR1 = 0;
          PGLA(8, 8, );
          AUXST = GLACA - 8;
          GXREF(AUXSTEP, 2, 0x02000008, AUXST + 4);
        }

        if (AUXSBASE[(LEVEL) - (0)] = 0) {
          XYNB = SETXORYNB(-1, -1);
          PF1(LD, 2, XYNB, AUXST);
          if (PARMOPT != 0) {
            PF1(LSS, 1, 0, 2)
            // PICKUPSTACKTOP
            ;

            PSF1(ST, 1, N + 16);
          }

          PF1(LSS, 2, 7, 0);
          PSF1(STD, 1, N);
          PSF1(ST, 1, N + 8);
          AUXSBASE[(LEVEL) - (0)] = N;
          N = N + 16;
          if (PARMOPT != 0) N = N + 4;
          GRUSE[(DR) - (0)] = 0;
          GRUSE[(ACCR) - (0)] = 11;
          GRINF1[(ACCR) - (0)] = 0;
        }
      };

      void RESETAUXSTACK(void) {
        //***********************************************************************
        //*IFANYARRAYSHAVEBEENPUTONTHEAUXSTACKTHENUNDECLARE*
        //***********************************************************************

        if (AUXSBASE[(LEVEL) - (0)] = 0) {
          PSF1(LB, 1, AUXSBASE[(LEVEL) - (0)] + 8);
          PSF1(STB, 2, AUXSBASE[(LEVEL) - (0)]);
          GRUSE[(BREG) - (0)] = 0;
        }
      };

      void RTEXIT(void) {
        //***********************************************************************
        //*THISROUTINECOMPILESCODEFORROUTINEEXIT(IE'%RETURN')*
        //***********************************************************************

        RESETAUXSTACK();
        PSF1(EXIT, 0, -0x40);
      };

      void CLAIMSTFRAME(int AT, int VALUE) {
        //***********************************************************************
        //*FILLASFINSTNINRTENTRYSEQUENCETOCLAIMTHESTACKFRAME*
        //***********************************************************************

        int INSTR;
        int WK;
        // BYTESCLAIMEDBYENTRYSEQ

        WK = AT >> 18;
        // ADRROFASFINSTRN

        AT = AT & 0x3FFFF;

        INSTR = (ASF + 12 * PARMCHK) << 24 | 3 << 23 | (VALUE - WK + 3) >> 2;
        PLUG(1, AT, INSTR, 4);
      };

      void CEND(int KKK) {
        //***********************************************************************
        //*DEALWITHALLOCCURENCESOF'%END'*
        //*KKK=PTYPE(>=X'1000')FORROUTINES,FNSANDMAPS*
        //*KKK=0FORENDSOF'%BEGIN'BLOCKS*
        //*KKK=1FOR'%ENDOFPROGRAM'*
        //*endofprogramISREALLYTWOENDS.THEFIRSTISTHEUSERS*
        //*ANDTHESECONDISPERMS.KKK=2FORARECURSIVECALLOFCEND*
        //*ONENDOFPROGRAMTODEALWITHTHEendCORRESPONDINGTO*
        //*THEbeginCOMPILEDINTHEINITIALISATIONSEQUENCE*
        //***********************************************************************
        int KP;
        int JJ;
        int BIT;

        auto void DTABLE(int LEVEL);
        if (!(KKK == 2)) SETLINE();
        FORGET(-1);
        BIT = 1 << LEVEL;
        //
        // NOWPLANTANERROREXITFORFNSANDMAPS-CONTROLSHOULDBERETURNED
        // VIAresult=ANSHOULDNEVVERREACHTHEendINSTRUCTION
        //
        if (KKK & 0x3FFF > 0x1000 && COMPILER == 0 && LASTINST == 0)
          PPJ(15, 10)
          // RUNFAULT11
          ;
        // WORKSPACEPOINTER

        if (N > NMAX) NMAX = N;
        //
        // CLEAROUTTHELABELLISTFAULTINGLABELSWITHJUMPSOUTSTANDING
        // ASNOTSETANDCOMMENTINGONLABELSNOTUSED
        //
        while (LABEL[(LEVEL) - (0)] = 0) {
          POP(LABEL[(LEVEL) - (0)], I, J, KP);
          I = I >> 24;
          if (J & 0xFFFF != 0) {
            J = J & 0xFFFF;
            if (0 < KP && KP <= MAXULAB) FAULT2(11, FROM3(J), KP);
            CLEARLIST(J);

          } else {
            if (I == 0 && KP < MAXULAB) WARN(3, KP);
          }
        }
        //

        for (JJ = 0; JJ != 4; JJ += 1) {
          CLEARLIST(AVLWSP[(JJ) - (0)][(LEVEL) - (0)])
          // RELEASETEMPORARYLOCATIONS
          ;
        }
        //

        DTABLE(LEVEL)
        // OUTPUTDIAGNOSTICTABLES
        ;
        //
        // CLEARDECLARATIONS-POPUPANYGLOBALNAMESTHATWEREREDECLARED
        // DESTROYSIDECHAINSFORROUTINES,FORMATSANDSWITCHES
        //
        //
        // NOWCLAIMTHESTACKFRAMEBYFILINGTHEASFINTHEBLOCKENTRYCODING
        //
        NMAX = (NMAX + 7) & (-8);
        if (KKK == 2) return;
        if (KKK >= 0x1000 || KKK == 1) CLAIMSTFRAME(SET[(RLEVEL) - (0)], NMAX);
        //
        // NOWPLANTTHEBLOCKEXITSEQUENCE
        //

        if (KKK & 0x3FFF == 0x1000 && LASTINST == 0) RTEXIT();
        if (KKK == 1 && LASTINST == 0)
          PPJ(15, 21)
          // stopATendofprogram
          ;

        if (KKK == 0) {
          // BEGINBLOCKEXIT

          if (PARMTRACE == 1) {
            // RESTOREDIAGSPOINTERS

            PSF1(LD, 1, 12);
            DIAGPOINTER(LEVEL - 1);
            PSF1(STD, 1, 12);
          }

          if (STACK != 0) {
            JJ = NMDECS[(LEVEL) - (0)] >> 14;
            if (JJ != 0) {
              // ARRAYSTOBEUNDECLARED

              PF1(STSF, 0, TOS, 0);
              PF1(LSS, 0, TOS, 0);
              PSF1(ISB, 1, JJ);
              PSF1(USH, 0, -2);
              PF1(ST, 0, TOS, 0);
              PF1(ASF, 0, TOS, 0);
              GRUSE[(ACCR) - (0)] = 0;
            }

          } else
            RESETAUXSTACK();
        }
        //
        // RETURNTOPREVIOUSLEVELPROVIDEDTHEREISAVALIDONE!
        //

        if (!(LEVEL > 2 || LEVEL == 2 && CPRMODE == 2)) {
          if (KKK == 1 && LEVEL == 2)
            KKK = 2;
          else {
            FAULT(14, 0);
            exit(0);
          }
        }

        LEVEL = LEVEL - 1;
        if (KKK >= 0x1000) {
          RLEVEL = RLEVEL - 1;
          RBASE = RLEVEL;
        }
        //
        // RESTOREINFORMATIONABOUTTHE(NEW)CURRENTLEVEL
        //

        POP(LEVELINF, KP, N, KP);
        if (KKK >= 0x1000) NMAX = N >> 16;
        N = N & 0x7FFF;
        if (KKK == 2)
          CEND(KKK)
          // ROUNDAGAINFOR'ENDOFPROGRAM'
          ;
        //
        // COMPLETETHEJUMPAROUNDALLNON-EXTERNALROUTINESEXCEPTWHEN
        // trustedprogramISINOPERATION.
        //
        if (ASLWARN != 0) {
          ASLWARN = 0;
          EPILOGUE();
        }
        if (KKK >= 0x1000 && COMPILER == 0 && RLEVEL > 0 || CPRMODE != 2) {
          JJ = NEXTP + 6;
          if (!(A == 11 && A == 2)) {
            JJ = ENTERLAB(JROUND[(LEVEL + 1) - (0)], 0);
            JROUND[(LEVEL + 1) - (0)] = 0;
          }
        }

        return;
        //
        // LAYOUTOFDIAGNOSICTABLES
        //***********************
        //
        // THEBOUNDFIELDOFPLTDESCRIPTORSTOREDAT(LNB+3&LNB+4)IF
        // USEDTOCONTAINADISPLACEMENTRELATIVETOTHESTARTOFSSTOFTHE
        // DIAGNOSTICTABLESFORTHEBLOCKORROUTINEBEINGEXECUTED.
        // AZEROBOUNDMEANSNODIAGNOSTICREQUESTED.(NBTHISMAYMEANADUMMY
        // FIRSTWORDINTHESST).
        // THEABSOLUTEADDRESSOFTHESSTFORTHECURRENTCODESEGMENTWILL
        // ALWAYSBEFOUNDINTHESTANDARD10WORDSOFTHEGLA/PLT
        //
        // FORMOFTHETABLES:-
        //
        // WORD0=LINEOFRTINSOURCEPROG<<16!LINENOPOSN(FROMLNB)
        // WORD1=(12LANGDEPENDENTBITS)<<18!ENVIRONMENT
        //(TOP2BITSOFLANGDEPENDENTHASLITLFROMPTYPE)
        //(BOTTOM4BITSHAVETEXTUALLEVEL)
        // WORD2=DISPLAYPOSN(FROMLNB)<<16!RTTYPEINFO
        // WORD3=ZEROFORBLKSORSTRING(<=11BYTES)BEINGTHE
        // RTNAME.THISWILLTAKEWORDS4AND5IFNEEDED
        // WORD6=LANGUAGEDEPENDENTINFO.IMPONCONDITIONSETC
        //
        // THERESTISMADEUPOFVARIABLEENTRIESANDTHESECTIONISTERMINATEDBY
        // AWORDOFX'FFFFFFFF'
        //
        // EACHVARIABLEENTRYCONSISTSOFTHEVARIABLEWORDFOLLOWEDBY
        // THEVARIABLENAMEASASTRING.THEWORDCONSISTSOF
        // BITS2**31TO2**20TYPEINFORMATION(MAYBELANGUAGEDEPENDENT
        // BIT2**19=0UNDERLNB=1INGLA
        // BITS2**18TO2**0DISPLACEMENTFROMLNB(GLA)INBYTES
        //
        //
        // THEENVIRONMENTISAPOINTER(RELATIVETOSST)OFTHENEXTOUTERMOST
        // BLOCKORAPOINTERTOGLOBALOWNS,EXTERNALORCOMMONAREAS
        // AZEROMEANSNOENCLOSINGBLOCK.WORD1=WORD3=0ISAN
        // IMPMAINPROGRAMANDWILLTERMINATETHEDIAGNOSTICS.
        //
        void DTABLE(int LEVEL) {
          //***********************************************************************
          //*THISROUTINELOOKSATTHEDECLARATIONSFORTHECURRENTLEVEL&*
          //*SETSUPTHESEGMENTOFSHARABLESYMBOLTABLESTODESCRIBETHEM.*
          //*FORMAINPROGRAMSOREXTERNALROUTINESTHE'GLOBAL'VARIABLES*
          //*(IFANY)AREALSOINCLUDED.*
          //***********************************************************************
          _imp_string RTNAME;

          _imp_string LOCALNAME;

          recfm *LCELL;
          //(LISTF)

          const int LARRROUT = 0xF300;

          int DPTR;
          int LNUM;
          int ML;
          int KK;
          int JJ;
          int Q;
          int DEND;
          int BIT;
          int S1;
          int S2;
          int S3;
          int S4;
          int LANGD;
          int II;

          int DD[(500) - (0) + 1]

              ;
          // BUFFERFORSEGMENTOFSST
          //
          // FILLALLOUTSTANDINGREFERENCESTOTHISDIAGSBLOCK
          //
          BIT = 1 << LEVEL;
          // GETLITLFROMPTYPE
          LANGD = KKK >> 14 << 30 | LEVEL << 18;

          while (RAL[(LEVEL) - (0)] = 0) {
            POP(RAL[(LEVEL) - (0)], Q, JJ, KK);
            PLUG(Q, JJ, KK | SSTL, 4);
          }
          if (PARMTRACE != 0) PUSH(RAL[(LEVEL - 1) - (0)], 4, SSTL + 4, LANGD);
          DD[(0) - (0)] = L[(LEVEL) - (0)] << 16 | (DIAGINF[(LEVEL) - (0)]);
          DD[(1) - (0)] = LANGD;
          DD[(2) - (0)] = DISPLAY[(RLEVEL) - (0)] << 16 | FLAG & 0x3FFF;
          // ROUTINENAME(=0FORbegin)
          ML = M[(LEVEL) - (0)];
          // LENGTHOFTHENAME

          LNUM = ;

          DPTR = 4;
          DEND = 0;
          if (LNUM == 0)
            DD[(3) - (0)] = 0;
          else {
            Q = DICTBASE + ML;
            // FORRTSMOVEIN1ST32CHARS
            RTNAME = ;

            LNUM = ;
          Mk_AST_assignment:
            Var = -1
                // ANDUPDATEPOINTERPAST
                ;
            // ACTUALNOOFCHARS

            DPTR = DPTR + (LNUM >> 2);
          }
          // ONCONDITIONWORD

          DD[(DPTR) - (0)] = ONWORD[(LEVEL) - (0)];

          DPTR = DPTR + 1;
          JJ = NAMES[(LEVEL) - (0)];
          while (0 <= JJ && JJ < 0x3FFF) {
            LCELL = ASLIST[(TAGS[(JJ) - (0)]) - (0)];
            // OBTAINNEXTNAMEFORMDECLNS

            if (LCELL & 0xF000 == 0) WARN(2, JJ);
            //
            // GETONLYTHEMINIMUMOFDETALSNECESSARY
            //

            S1 = LCELL;
            S2 = LCELL;
            S3 = LCELL;
            S4 = LCELL;
            LCELL = ASL;
            ASL = TAGS[(JJ) - (0)];
            TAGS[(JJ) - (0)] = S4 & 0x3FFFF;
            PTYPE = S1 >> 16;
            TYPE = PTYPE & 15;
            I = S1 >> 4 & 15;
            J = S1 & 15;
            K = S3 >> 16;
            //
            // ALLOWOWNS(LITL=0)ANDEXTERNALS(=2)NOTCONSTS(=1)OREXTRINSIC(=3)
            //

            if (PARMDIAG != 0 && PTYPE & 0x7300 <= 0x200 && DPTR < 497 &&
                    TYPE == 1 ||
                TYPE == 2 || TYPE == 5) {
              // ADDRESSOFNAME

              Q = DICTBASE + WORD[(JJ) - (0)];
              // GLAORLNBBIT

              if (I == 0)
                II = 1;
              else
                II = 0;

              DD[(DPTR) - (0)] = PTYPE << 20 | II << 18 | K;
              // TEXTOFNAMEFROMDICTIONARY
              LOCALNAME = ;

              LNUM = ;
            Mk_AST_assignment:
              Var = -1
                  // MOVEINNAME
                  ;

              DPTR = DPTR + ((LNUM + 8) >> 2);
            }

            if (J == 15 && S2 != 0) FAULT2(28, 0, JJ);
            // SPEC&CALLEDBUTNOBODYGIVEN

            if (PTYPE & 0x3000 != 0 || TYPE == 4 || TYPE == 6)
              CLEARLIST(K);
            else {
              if (I != 0 && K > 511 && PTYPE & LARRROUT == 0 && TYPE != 7)
                WARN(5, JJ);
            }

            JJ = S4 >> 18;
          }
          //'END OF SEGMENT'MARK
          DD[(DPTR) - (0)] = -1;

          DPTR = (DPTR << 2) + 4;
          if (PARMTRACE == 1) {
            LPUT(4, DPTR, SSTL, )
            // ADDTOSHARABLESYMTABS
            ;

            SSTL = SSTL + DPTR;
          }
        };
        // OFROUTINEDTABLE
      };

      void MAKEDECS(int Q) {
        //***********************************************************************
        //*QISTOARENTRYFORHEADOFLINKEDDECLARATIONS*
        //***********************************************************************

        int QQ;
        int HEAD;
        int PRIO;
        int COUNT;
        int SL;

        int *THEAD;

        recfm *CELL;
        //(LISTF)

        SL = LINE;
        QQ = FROMAR4(Q);
        HEAD = 0;
        COUNT = 0;
        while (QQ != 0) {
          COUNT = COUNT + 1;
          if (!(A == 8))
            ABORT()
            // LINEISADECLARATION
            ;

          P = QQ + 10;
          CLT();
          if (PREC == 3 || A != 1 || A != 3) {
            if (A == 1) INSERTATEND(HEAD, 0xFFFF, QQ, 0);

          } else {
            PRIO = PREC << 4 | TYPE;
            THEAD = HEAD;
            do {
              CELL = ASLIST[(THEAD) - (0)];
              if (THEAD == 0 || PRIO < CELL) {
                PUSH(THEAD, PRIO, QQ, 0);
                break;
              }
              THEAD = CELL;
            } while (1);
          }

          QQ = FROMAR4(QQ + 6);
        }
        //
        // NOWMAKETHEORDEREEDDECLARATIONS
        // FIRSTGRABTWOTEMPORARIESIFSPACEISLIKELYTOBETIGHT
        //
        if (COUNT >= 7) {
          GETWSP(QQ, 2)
          // ADIUBLEWORD
          ;

          if (AVLWSP[(1) - (0)][(LEVEL) - (0)] = 0) GETWSP(QQ, 1);
        }

        while (HEAD != 0) {
          POP(HEAD, PRIO, QQ, COUNT);
          LINE = FROMAR2(QQ + 3);
          P = QQ + 10;
          CLT();
          ROUT = 0;
          LITL = 0;
          CQN(P + 1);
          P = P + 2;
          DECLARESCALARS(1, 0);
        }
        LINE = SL;
      };

      void DECLARESCALARS(int PERMIT, int XTRA) {
        //***********************************************************************
        //*THISROUTINEDECLARESALISTOFSCALARSFROMINFORMATION*
        //*INTHEGLOBALVARIABLESROUT,NAM,ARR,PREC,TYPE&ACC.ITWORKS*
        //*OUTROUNDINGFACTORSFORITSELF.*
        //*PPOINTSTOTHENAMELISTONENTRYANDISUPDATED.*
        //***********************************************************************
        int INC;
        int Q;
        int SCHAIN;
        int DMADE;
        int NPARMS;
        int D0;
        int SCALNAME;
        int TYPEP;

        PACK(PTYPE);
        J = 0;
        INC = ACC;
        DMADE = 0;
        SNDISP = 0;
        if (PTYPE == 0x33) INC = (INC + 3) & (-4);
        if (NAM != 0 && ROUT == 0 && ARR == 0) INC = 8;
        if (NAM > 0 && ARR > 0) INC = 16;
        if (PTYPE == 0x35 && ACC == 0) FAULT(70, 0);
        if (PERMIT != 0 && INC == 8 || INC == 16) ODDALIGN();
        if (PTYPE == 0x33 || PTYPE == 0x35 && PERMIT != 0) {
          D0 = 0x18000000 + ACC;
          STORECONST(Q, 4, );
          PF1(LDTB, 0, PC, Q);
          GRUSE[(DR) - (0)] = 0;
        }

        if (PTYPE == 0x35) {
          INC = 8;
          if (PERMIT != 0) {
            PF1(STSF, 0, TOS, 0);
            PF1(LDA, 0, TOS, 0);
          }
        }

        N = (N + 3) & (-4);
        if (PTYPE == 0x33) {
          PSF1(LDA, 1, PTROFFSET(RBASE));
          PSF1(INCA, 0, N + 8);
        }

        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          // DOWNTHENAMELIST

          DMADE = DMADE + 1;
          SCALNAME = FROMAR2(P);
          // BYTEPARAMS
          if (PTYPE == 0x31 && PERMIT == 0) N = N + 3;

          if (PTYPE == 0x41 && PERMIT == 0) N = N + 2;
          SCHAIN = N;
          KFORM = XTRA;
          if (ROUT == 1) {
            // CHANGEDBYCFPLIST!

            TYPEP = PTYPE;

            Q = P;
            // TOFPP
            do
              P = P + 3;
            while (!(A == 2))

                CFPLIST(SCHAIN, NPARMS);
            P = Q;
            J = 13;
            // NOOFPARAMSOFFORMAL
            KFORM = NPARMS;
            // DISPLACEMENTTOMIDCELL

            ACC = N;

            PTYPE = TYPEP;
            UNPACK();
          }

          P = P + 3;
          if (PTYPE == 0x33) {
            PSF1(STD, 1, N);
            N = N + 8;
            SCHAIN = N;
            if (A == 1) PSF1(INCA, 0, INC + 8);
          }

          if (PTYPE == 0x35 && PERMIT != 0) {
            PSF1(STD, 1, N);
            if (A == 1)
              PSF1(INCA, 0, (ACC + 3) & (-4));
            else {
              Q = ((ACC + 3) >> 2) * DMADE;
              PSF1(ASF + 12 * PARMCHK, 0, Q);
              if (PARMCHK != 0) PPJ(0, 4);
            }
          }

          STORETAG(SCALNAME, SCHAIN);
          N = N + INC;
        }
        while (!(A == 2))
          ;
        // NOROUNDINGAMONGPARAMS
        if (PERMIT != 0) N = (N + 3) & (-4);
      };

      int DOPEVECTOR(int TYPEP, int ELSIZE, int MODE, int IDEN, int *ASIZE,
                     int *LB) {
        //***********************************************************************
        //*CONSTRUCTSTHEDOPE-VECTORFORACONSTANTARRAYINTHE*
        //*SHAREABLESYMBOLTABLESANDRETURNSITSDISPLACEMENTASRESULT*
        //*EVENTUALLYALLNONDYNAMICDOPEVECTORSSHOULDGOVIAHERE*
        //*PISTOALT(MUSTBE1!)OFP<BPAIR>*
        //*DOPEVECTORCONSISTSOF:-*
        //*DESRIPTOR(SCALEDWORD)POINTINGATFIRSTTRIPLEBND=3*ND*
        //*SIZE(INBYTESOFENTIREARRAY)FORSTACKADJUSTMENT*
        //*ANDNDTRIPLESEACHCONSISTINGOF:-*
        //*LBI-THELOWERBOUNDOFTHEITHDIMENSION*
        //*MI-THESTRIDEFORTHEITHDIMENSION*
        //*CBITHEUPPERCHECK=(UBI-LBI+1)*MI*
        //*WHEREM1=1(SCALEDARRAYS)ORTHEELEMENTSIZEAND*
        //*MI=M(I-1)*RANGE(I-1)*
        //*MODE=0DVMUSTBECONST,MODE#0CANBEDYNAMIC*
        //*PTOALT(ALWAYS=1)OFP(BPAIR)*
        //***********************************************************************
        int I;
        int JJ;
        int K;
        int ND;
        int D;
        int UNSCAL;
        int M0;
        int HEAD;
        int NOPS;
        int TYPEPP;
        int PIN;
        int PTR;

        recfm *LCELL;
        //(LISTF)

        int LBH[(12) - (0) + 1]

            ;
        int LBB[(12) - (0) + 1]

            int UBH[(12) - (0) + 1]

            int UBB[(12) - (0) + 1]

            int DV[(39) - (0) + 1]

            ;
        // ENOUGHFOR12DIMENSIONS

        ND = 0;
        NOPS = 0;
        TYPEPP = 0;
        PIN = P;
        if (TYPEP > 2 || TYPEP == 1 && PREC == 4) {
          UNSCAL = 1;
          M0 = ELSIZE;
        } else {
          UNSCAL = 0;
          M0 = 1;
        }
        ? Please recode the source file so that loops with
                "%until <cond> %cycle ... %repeat" are replaced by
                "%cycle ... %repeat %until <cond>" *
                Error
        : (...) not allowed here

            do {
          ND = ND + 1;
          P = P + 4;
          LBH[(ND) - (0)] = 0;
          LBB[(ND) - (0)] = 0;
          UBB[(ND) - (0)] = 0;
          UBH[(ND) - (0)] = 0;
          TORP(LBH[(ND) - (0)], LBB[(ND) - (0)], NOPS);
          P = P + 3;
          TYPEPP = TYPEPP | TYPE;
          TORP(UBH[(ND) - (0)], UBB[(ND) - (0)], NOPS);
          TYPEPP = TYPEPP | TYPE;
        }
        while (!(A == 2))
          ;
        P = P + 1;
        if (!(TYPEPP == 1 && NOPS & 0x40040000 == 0)) goto NONCONST;
        //
        // NOWONECANWORKOUTANDFILLINTHETRIPLES
        //

        PTR = 1;
        for (D = ND; D != 1; D += -1) {
          K = 3 * D;
          EXPOP(LBH[(PTR) - (0)], ACCR, NOPS, 0x251);
          if (!(EXPOPND <= 1 && EXPOPND == 0x51)) {
            EXPOPND = 0;
            FAULT(41, 0);
          }
          DV[(K) - (0)] = EXPOPND;
          DV[(K + 1) - (0)] = M0;
          EXPOP(UBH[(PTR) - (0)], ACCR, NOPS, 0x251);
          if (!(EXPOPND <= 1 && EXPOPND == 0x51)) {
            EXPOPND = 10;
            FAULT(41, 0);
          }
          JJ = EXPOPND;
          M0 = M0 * (JJ - DV[(K) - (0)] + 1);
          if (!(JJ >= DV[(K) - (0)])) FAULT2(38, 1 - M0, IDEN);
          DV[(K + 2) - (0)] = M0;
          PTR = PTR + 1;
        }
        //

        if (UNSCAL == 0) M0 = M0 * ELSIZE;
        if (ND == 1) LB = DV[(3) - (0)];
        ASIZE = M0;
        DV[(2) - (0)] = ASIZE;
        DV[(1) - (0)] = 12;
        // DESPTRFORDV
        DV[(0) - (0)] = 5 << 27 | 3 * ND;

        K = 3 * ND + 2;
        // DIMENSIONALITYFORDECLN
        J = ND;

        HEAD = DVHEADS[(ND) - (0)];
        while (HEAD != 0) {
          LCELL = ASLIST[(HEAD) - (0)];
          if (LCELL == ASIZE && LCELL == DV[(5) - (0)]) {
            for (D = 0; D != K; D += 1) {
              if (!(DV[(D) - (0)] = CTABLE)) goto ON;
            }
            return 0x80000000 | 4 * LCELL;
          }

        ON:
          HEAD = LCELL;
        }
        if (CONSTPTR & 1 != 0) {
          CONSTHOLE = CONSTPTR;
          CONSTPTR = CONSTPTR + 1;
        }
        I = 4 * CONSTPTR | 0x80000000;
        PUSH(DVHEADS[(ND) - (0)], CONSTPTR, ASIZE, DV[(5) - (0)]);
        for (D = 0; D != K; D += 1) {
          CTABLE = DV[(D) - (0)];
          CONSTPTR = CONSTPTR + 1;
        }
        if (CONSTPTR > CONSTLIMIT) FAULT(107, 0);
      WAYOUT:
        for (D = ND; D != 1; D += -1) {
          ASLIST[(LBB[(D) - (0)]) - (0)] = ASL;
          ASL = LBH[(D) - (0)];
          ASLIST[(UBB[(D) - (0)]) - (0)] = ASL;
          ASL = UBH[(D) - (0)];
        }
        return I;
      // NOTACONSTDV
      NONCONST:

        J = ND;
        I = -1;
        LB = 0;
        ASIZE = ELSIZE;
        if (MODE == 0)
          FAULT(41, 0);
        else
          P = PIN;
        goto WAYOUT;
      };

      void DECLAREARRAYS(int FORMAT, int FINF) {
        //***********************************************************************
        //*FORMAT=1FOR'ARRAYFORMAT'=0OTHERWISE*
        //*FINF>0FORRECORDFORMATINFORMATION=0OTHERWISE*
        //*PISATP<ADECLN>IN*
        //**
        //*P<ADECLN>=<NAMELIST><BPAIR><RESTOFDECLN>*
        //*P<BPAIR>='('<EXPR>':'<EXRR><RESTOFBP>*')'*
        //**
        //*ARRAYSWITHCONSTANTBOUNDSHAVETHEIRD-VINTHESST*
        //*ALLOTHERARRAYSHAVEADOPEVECTORAMONGTHELOCALSANDGET*
        //*THEIRSPACEOFFTHESTACKATRUNTIME*
        //*BOTHSORTSOFARRAYSHAVEAFOURWORDHEADANDD-VTOEMAS*
        //*SYSTEMSTANDARDS*
        //***********************************************************************
        auto void CLAIMAS(void);
        int DVDISP;
        int PP;
        int DVF;
        int ELSIZE;
        int TOTSIZE;
        int D0;
        int D1;
        int PTYPEP;
        int ARRP;
        int NN;
        int ND;
        int II;
        int JJ;
        int QQ;
        int R;
        int CDV;
        int UNSCAL;
        int DESC;
        int SC;
        int LWB;
        int PTYPEPP;
        int JJJ;
        int JJJJ;
        int ADJ;

        if (STACK != 0 && FLAG == 0 && 0 == NMDECS[(LEVEL) - (0)] >> 14) {
          PSF1(STSF, 1, N);
          NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | (N << 14);
          N = N + 4;
        }

        if (STACK == 0) SAVEAUXSTACK();
        ARRP = 2 * FORMAT + 1;
        ARR = ARRP;
        PACK(PTYPEP);
        ELSIZE = ACC;
        if (TYPE > 2 || TYPE == 1 && PREC == 4) {
          UNSCAL = 1;
          SC = 3;
        } else {
          UNSCAL = 0;
          SC = PREC;
        }
        // ARRAYDESCRIPTORSKELETON
        DESC = SC << 27 | UNSCAL << 25 | (1 - PARMARR) << 24;

        if (PREC == 4) DESC = 0x58000002;
      // NOOFNAMESINNAMELIST
      START:
        NN = 1;
        P = P + 1;

        PP = P;
        CDV = 0;
        PTYPEPP = PTYPEP;
        while (A == 1) {
          P = P + 3;
          NN = NN + 1;
        }
        P = P + 3;
        DVDISP = DOPEVECTOR(TYPE, ELSIZE, 1, FROMAR2(PP), TOTSIZE, LWB);
        ND = J;
        if (!(DVDISP == -1)) goto CONSTDV;
        // NORMALCASE-PLANTCODETOSETUPDOPE-VECTORATRUNTIME

        DVF = 0;
        TOTSIZE = 0xFFFF;
        // DVDISPISD-VPOSITION
        DVDISP = N;
        // CLAIMSPACEFORTHED-V

        N = N + 12 * ND + 12;

        if (ND > 12)
          FAULT(37, 0)
          // TOOMANYDIMENSIONS
          ;
        // DESCPTRFORDV

        D0 = 5 << 27 | 3 * ND;
        D1 = 12;

        STORECONST(JJ, 8, );
        PF1(LD, 0, PC, JJ);
        PSF1(STD, 1, DVDISP);
        GRUSE[(DR) - (0)] = 0;

        if (UNSCAL == 0)
          JJ = 1;
        else
          JJ = ELSIZE;
        PSF1(LSS, 0, JJ)
        // M1THEFIRSTMULTIPLIER
        ;

        GRUSE[(ACCR) - (0)] = 0;
        for (II = ND; II != 1; II += -1) {
          P = P + 1;
          // TRIPLEFORIITHDIMENSION
          QQ = DVDISP + 12 * II;

          PSF1(ST, 1, QQ + 4)
          // STOREMULTIPLIER
          ;

          CSEXP(ACCR, 0x51)
          // LOWERBOUND
          ;

          if (ND == 1 && PTYPEP & 7 <= 3 && FORMAT == 0 &&
              GRUSE[(ACCR) - (0)] = 5 && GRINF1[(ACCR) - (0)] = 0)
            PTYPEPP = PTYPEPP + 256;
          PSF1(ST, 1, QQ)
          // STOREDINDV
          ;

          CSEXP(ACCR, 0x51)
          // UPPERBOUND
          ;

          PSF1(ISB, 1, QQ);
          GRUSE[(ACCR) - (0)] = 0;
          if (COMPILER == 0 || PARMARR != 0) {
            PF3(JAF, 6, 0, 3)
            // JUMPUNLESSNEGATIVE
            ;

            PSF1(LSS, 0, -1)
            // SETUP-1(ENSURES0ELEMENTS
            ;
          }

          PSF1(IAD, 0, 1)
          // CONVERTEDTORANGE
          ;

          PSF1(IMY, 1, QQ + 4)
          // RANGE*MULTIPLIER
          ;

          PSF1(ST, 1, QQ + 8)
          // ANDSTOREDINDV
          ;
        }
        P = P + 1;
        if (UNSCAL == 0 && ELSIZE != 1) PSF1(IMY, 0, ELSIZE);
        PSF1(ST, 1, DVDISP + 8);
        // DVNOTAVAILABLEATCOMPILETIME
        SNDISP = 0;

        goto DECL;
      // ONEDIMENSION-CONSTANTBOUNDS
      CONSTDV:

        DVF = 1;
        CDV = 1;
        if (ND == 1 && LWB == 0 && PTYPEP & 15 <= 3 && FORMAT == 0)
          PTYPEPP = PTYPEP + 256;
        // SETARR=2IFLWB=ZERO

        SNDISP = (DVDISP & 0xFFFFFF) >> 2;
      // MAKEDECLN-BOTHWAYS
      DECL:

        J = ND;
        ODDALIGN();
        PTYPE = PTYPEPP;
        UNPACK();
        if (DVF != 0) {
          // ARRAYISSTRINGOFLOCALS

          R = TOTSIZE;
          if (UNSCAL == 0) R = R / ELSIZE;
          D0 = DESC;
          if (!(PREC == 4)) D0 = D0 | R;
          STORECONST(D1, 4, );
          PF1(LB, 0, PC, D1);

        } else {
          STORECONST(D1, 4, );
          PF1(LB, 0, PC, D1);
          if (!(PREC == 4)) PSF1(ADB, 1, DVDISP + 20);
        }

        if (DVF != 0)
          QQ = PC;
        else
          QQ = LNB;
        PSORLF1(LDRL, 0, QQ, DVDISP);
        GRUSE[(BREG) - (0)] = 0;
        GRUSE[(DR) - (0)] = 0;
        for (JJJ = 0; JJJ != NN - 1; JJJ += 1) {
          // DOWNNAMELIST

          PSF1(STB, 1, N + 16 * JJJ)
          // ARRAYBOUND
          ;

          PSF1(STD, 1, N + 8 + 16 * JJJ)
          // DVPOINTER
          ;
        }
        if (PARMARR == 0 && PARMCHK == 0 && ND == 1 && TYPE <= 3 &&
            PTYPEPP & 0xF00 != 0x200)
          ADJ = 1;
        else
          ADJ = 0;
        for (JJJ = 0; JJJ != NN - 1; JJJ += 1) {
          // DOWNNAMELIST

          if (ADJ != 0) {
            // ADJUSTDESC

            if (STACK != 0) {
              // ARRAYONAUTOMATICSTACK

              PF1(STSF, 0, BREG, 0)
              // CURRENTSFTOB
              ;

              if (DVF != 0)
                PSF1(SBB, 0, LWB * ELSIZE);
              else {
                if (ELSIZE == 1)
                  PSF1(SBB, 1, DVDISP + 12);
                else {
                  PSF1(SLB, 1, DVDISP + 12);
                  PSF1(MYB, 0, ELSIZE);
                  PF1(SLB, 0, TOS, 0);
                  PF1(SBB, 0, TOS, 0);
                }
              }

              PSF1(STB, 1, N + 4);
              GRUSE[(BREG) - (0)] = 0;

            } else {
              // ARRAYONAUXSTACK

              if (DVF != 0) {
                // CONSTDOPEVECTOR

                if (!(GRUSE[(ACCR) - (0)] = 11)) {
                  PSF1(LSS, 2, AUXSBASE[(LEVEL) - (0)]);
                  GRUSE[(ACCR) - (0)] = 11;
                  GRINF1[(ACCR) - (0)] = 0;
                }

                JJJJ = LWB * ELSIZE - GRINF1[(ACCR) - (0)];
                if (!(JJJJ == 0)) PSF1(ISB, 0, JJJJ);
                GRINF1[(ACCR) - (0)] = LWB * ELSIZE;

              } else {
                // DYNAMICARRAYS

                if (GRUSE[(ACCR) - (0)] = 11 && GRINF1[(ACCR) - (0)] = 0 &&
                    ELSIZE == 1)
                  PSF1(ISB, 1, DVDISP + 12);
                else {
                  PSF1(LSS, 1, DVDISP + 12);
                  if (!(ELSIZE == 1)) PSF1(IMY, 0, ELSIZE);
                  PSF1(IRSB, 2, AUXSBASE[(LEVEL) - (0)]);
                }

                GRUSE[(ACCR) - (0)] = 0;
              }

              PSF1(ST, 1, N + 4);
            }

          } else {
            // NOADJUSTMENTOFDESCRPT

            if (STACK != 0)
              PSF1(STSF, 1, N + 4);
            else {
              if (!(GRUSE[(ACCR) - (0)] = 11 && GRINF1[(ACCR) - (0)] = 0))
                PSF1(LSS, 2, AUXSBASE[(LEVEL) - (0)]);
              PSF1(ST, 1, N + 4);
              GRUSE[(ACCR) - (0)] = 11;
              GRINF1[(ACCR) - (0)] = 0;
            }
          }
          // RESETACCAFTERDVCMPLD

          ACC = ELSIZE;
          // FORMATINFORMATION

          KFORM = FINF;

          K = FROMAR2(PP + 3 * JJJ);
          STORETAG(K, N);
          if (FORMAT == 0) CLAIMAS();
          N = N + 16;
        }
        // PASTRESTOFARRAYLIST
        P = P + 1;

        if (A == 1) goto START;
        return;
        void CLAIMAS(void) {
          //***********************************************************************
          //*CLAIMTHESPACEFORANARRAYFROMSTACKORAUXSTACK*
          //***********************************************************************

          int T;
          int B;
          int D;
          int ADJMENT;

          if (STACK == 1) {
            // FROMAUTOMATICSTACK

            if (CDV == 1) {
              // CONSTANTBOUNDS

              T = (TOTSIZE + 3) / 4;
              PSF1(ASF + 12 * PARMCHK, 0, T)
              // ASFORLB
              ;

              if (PARMCHK != 0) PPJ(0, 4);

            } else {
              // DYNAMICBOUNDS

              if (PARMCHK == 0 && PTYPEP & 7 <= 2 && ELSIZE == 4 ||
                  ELSIZE == 8) {
                PSF1(ASF, 1, DVDISP + 20)
                // SIZEINELEMENTSWORD
                ;

                if (ELSIZE == 8) PSF1(ASF, 1, DVDISP + 20);

              } else {
                PSF1(LSS, 1, DVDISP + 8)
                // ARRAYSIZEBYTES
                ;

                if (ELSIZE & 3 != 0) PSF1(IAD, 0, 3);
                PSF1(USH, 0, -2)
                // ARRAYSIZEWORDS
                ;

                PF1(ST, 0, BREG, 0);
                FORGET(BREG);
                if (PARMCHK != 0)
                  PPJ(0, 4);
                else
                  PF1(ASF, 0, BREG, 0);
              }
            }

            CHECKSTOF();

          } else {
            if (!(GRUSE[(ACCR) - (0)] = 11 && GRINF1[(ACCR) - (0)] = 0 ||
                  CDV == 1)) {
              PSF1(LSS, 2, AUXSBASE[(LEVEL) - (0)]);
              GRUSE[(ACCR) - (0)] = 11;
              GRINF1[(ACCR) - (0)] = 0;
            }

            if (CDV == 1) {
              ADJMENT = ((TOTSIZE + 7) & (-8)) + GRINF1[(ACCR) - (0)];
              if (ADJMENT < 0x1FFFF) {
                B = 0;
                D = ADJMENT;
              } else {
                STORECONST(D, 4, );
                B = PC;
              }

              if (ADJ == 1 && JJJ != NN - 1 && PARMOPT == 0)
                GRINF1[(ACCR) - (0)] = ADJMENT;
              else {
                GRINF1[(ACCR) - (0)] = 0;
                if (!(B == D && D == 0)) PSORLF1(IAD, 0, B, D);
              }

            } else {
              B = LNB;
              D = DVDISP + 8;
              PSF1(IAD, 1, D);
              if (!(ELSIZE & 7 == 0)) {
                PSF1(IAD, 0, 7);
                PSF1(AND, 0, -8);
              }

              GRINF1[(ACCR) - (0)] = 0;
            }

            if (JJJ == NN - 1 || ADJ == 1 && CDV == 0)
              PSF1(ST, 2, AUXSBASE[(LEVEL) - (0)]);
            if (PARMOPT != 0) {
              PSF1(ICP, 1, AUXSBASE[(LEVEL) - (0)] + 16);
              PPJ(2, 8);
            }

            if (PARMCHK != 0) {
              PF1(LDTB, 0, PC, PARAMDES(3));
              PSORLF1(LDB, 0, B, D);
              PSF1(LDA, 1, N + 4);
              PF2(MVL, 1, 1, 0, 0, UNASSPAT & 255);
              GRUSE[(DR) - (0)] = 0;
            }
          }
        };
      };
      // routineTESTNST
      //!***********************************************************************
      //!*SEEIFNAME'K'HASBEENDECLAREDBEFOREATTHISLEVEL*
      //!***********************************************************************
      // FNAME=K
      // FAULT(7,FNAME)ifFROM1(TAGS(FNAME))>>8&15=LEVEL
      // end
      void CLT(void) {
        //***********************************************************************
        //*DEALWITHPHRASETYPEANDSETPREC,TYPE&ACC*
        //*ONLYPROBLEMISSTRINGWHICHHASOPTIONALMAXLENGTHALSO*
        //*PONPHRASETYPEATENTRY-TONEXTPHRASEATEXIT.*
        //***********************************************************************
        const char TYPEFLAG[(10) - (1) + 1] = X '51',
            0x52, 0, 0x31, 0x35, 0x41, 0, 0x62, 0x61, 0x72;

        int ALT;

        ALT = A;
        TYPE = TYPEFLAG[(ALT) - (1)];
        if (TYPE == 0) {
          P = P + 1;
          TYPE = TYPEFLAG[(A + 7) - (1)];
        }
        PREC = TYPE >> 4;
        TYPE = TYPE & 7;
        // DEALWITH'%REALSLONG'
        if (TYPE == 2 && ALLLONG != 0 && PREC <= 5) PREC = 6;

        ACC = BYTES[(PREC) - (0)];
        if (TYPE == 5) {
          // P<TYPE>='%STRING'

          if (A == 1) {
            // MAXLENGTHGIVEN

            P = P + 2;
            ACC = A + 1;

          } else {
            ACC = 0;
            P = P + 1;
          }
        }

        P = P + 1;
      };

      void CQN(int P) {
        //***********************************************************************
        //*SETNAM,ARR&ACCFROMALTERNATIVEOFPHRASE<QNAME'>         *
        //*       P<QNAME'>='%ARRAYNAME','%NAME',<null>*
        //*PPOINTSTOTHEANALYSISRECORDENTRYASISNOTUPDATED*
        //***********************************************************************
        int I;

        I = A;
        NAM = 0;
        ARR = 0;
        // ARRAYNAMES
        if (I == 1) {
          ARR = 1;
          ACC = 16;
        }
        // ARRAYNAMES&NAMES

        if (I <= 2) NAM = 1;
        // NAMESUSE8-BYTEDESCRIPTOR

        if (I == 2) ACC = 8;
      };

      void CRSPEC(int M) {
        //***********************************************************************
        //*MODE=0FORNORMALROUTINESPEC*
        //*MODE=1FOREXTERNAL(ETC)ROUTINESPECSXREFNEEDED*
        //*PONENTRYTOP(RT)IN(RT)(MARK)(spec'')(NAME)(FPP)*
        //***********************************************************************
        int KK;
        int JJ;
        int TYPEP;
        int OPHEAD;
        int NPARMS;

        _imp_string XNAME;

        LITL = EXTRN & 3;
        if (A == 1) {
          // P<RT>=routine

          TYPEP = LITL << 14 | 0x1000;
          // IGNORINGALTOFP(SPEC'')
          P = P + 2;

        } else {
          // P<RT>=<TYPE><FNORMAP>

          ROUT = 1;
          ARR = 0;
          P = P + 1;
          CLT();
          NAM = 0;
          // 2FORMAP0FORFN
          if (A == 2) NAM = 2;

          PACK(TYPEP);
          // AGAINIGNORINGALTOFP(SPEC'')
          P = P + 2;
        }
        // PASTHOLEFORDECLINKS

        P = P + 4;

        KK = FROMAR2(P);
        JJ = 0;
        P = P + 2;
        CFPLIST(OPHEAD, NPARMS);
        if (M == 1) {
          XNAME = ;
          if (EXTRN == 1) XNAME = "S#".XNAME;
          CXREF(XNAME, PARMDYNAMIC | (EXTRN / 3), 2, JJ)
          // ststem&external=STATIC
          ;
          // dynamic=DYNAMIC
        }

        if (M == 0 && RLEVEL == 0) CODEDES(JJ);
        J = 15 - M;
        PTYPE = TYPEP;
        KFORM = NPARMS;
        SNDISP = JJ >> 16;
        ACC = JJ & 0xFFFF;
        STORETAG(KK, OPHEAD);
      };

      void CFPLIST(int *OPHEAD, int *NPARMS) {
        //***********************************************************************
        //*COMPILEAFORMALPARAMETERPARTINTOALISTOFPARAMETERTYPES*
        //*P(FPP)='('*')',0.*
        //**
        //*THELISTOFPARAMETERLOOKSLIKE:-*
        //*S1=PTYPEFORPARAM<<16!DIMENSION(DIMENDEDUCEDLATER)*
        //*S2=ACC<<16!SPARE*
        //*S3=0(RESERVEDFORFPPOFRTS)*
        //**
        //*ONENTRYPISATALTOFFPP(WHICHMAYBENULL)*
        //***********************************************************************
        int OPBOT;
        int PP;

        OPHEAD = 0;
        OPBOT = 0;
        // ZEROPARAMETERSASYET
        NPARMS = 0;

        while (A == 1) {
          // WHILESOME(MORE)FPS

          PP = P + 1 + FROMAR2(P + 1)
              // TONEXTFPDEL
              ;
          // TOALTOFFPDEL

          P = P + 3;

          CFPDEL()
          // GETTYPE&ACCFORNEXTGROUP
          ;

          ? Please recode the source file so that loops with
                  "%until <cond> %cycle ... %repeat" are replaced by
                  "%cycle ... %repeat %until <cond>" *
                  Error
          : (...) not allowed here

              do {
            // DOWN<NAMELIST>FOREACHDEL

            BINSERT(OPHEAD, OPBOT, PTYPE << 16, ACC << 16, 0);
            NPARMS = NPARMS + 1;
            P = P + 3;
          }
          while (!(A == 2))
            ;
          P = PP;
        }
        P = P + 1;
      };

      void CFPDEL(void) {
        //***********************************************************************
        //*SETUPPTYPE&ACCFORAFORMALPARAMETERDEFINITION*
        //*P<FPDEL>=<TYPE><qname'>,                                        *
        //*             'record'<%ARRAY'>'%NAME'.*
        //*(RT)(name'')(NAMELIST)(FPP),*
        //*'%NAME'.*
        //***********************************************************************
        int FPALT;

        FPALT = A;
        P = P + 1;
        KFORM = 0;
        LITL = 0;
        goto FP[FPALT];
      //(TYPE)(qname'')
      FP_1:

        ROUT = 0;
        CLT();
        CQN(P);
        if (TYPE == 5 && ACC == 0) FAULT(70, 0);
        P = P + 1;
        goto PK;
      // RECORD(array'')name
      FP_2:

        ARR = 2 - A;
        ROUT = 0;
        ACC = 8 + 8 * ARR;
        TYPE = 3;
        PREC = 3;
        NAM = 1;
        P = P + 1;
        goto PK;
      //(RT)(name'')(NAMELIST)(FPP)
      FP_3:

        ROUT = 1;
        NAM = 1;
        ARR = 0;
        if (A == 1) {
          // RT=rouitne

          TYPE = 0;
          PREC = 0;
          P = P + 2;

        } else {
          P = P + 1;
          CLT()
          // RT=(TYPE)(FM)
          ;

          NAM = 1;
          // 1FORFN3FORMAP
          if (A == 2) NAM = 3;
          // PAST(name'')WHICHISIGNORED

          P = P + 2;
        }

        ACC = 16;
        goto PK;
      // name
      FP_4:

        ACC = 8;
        NAM = 1;
        ROUT = 0;
        TYPE = 0;
        ARR = 0;
        PREC = 0;
      PK:
        PACK(PTYPE);
      };

      void DIAGPOINTER(int LEVEL) {
        if (PARMTRACE != 0) {
          PUSH(RAL[(LEVEL) - (0)], 1, CA, LDB << 24 | 3 << 23);
          PF1(LDB, 0, 0, 0);
          GRUSE[(DR) - (0)] = 0;
        }
      };

      void RHEAD(int KK) {
        //***********************************************************************
        //*COMPILESCODEFORBLOCKANDROUTINEENTRY*
        //*KKISTHERT/FN/MAPNAME(=-1FORbeginBLOCKS)*
        //***********************************************************************
        int W1;
        int W3;
        int INSRN;
        int AT;

        PUSH(LEVELINF, 0, NMAX << 16 | N, 0);
        LEVEL = LEVEL + 1;
        NMDECS[(LEVEL) - (0)] = 0;
        AUXSBASE[(LEVEL) - (0)] = 0;
        NAMES[(LEVEL) - (0)] = -1;
        ONINF[(LEVEL) - (0)] = 0;
        ONWORD[(LEVEL) - (0)] = 0;
        if (KK >= 0) {
          RLEVEL = RLEVEL + 1;
          RBASE = RLEVEL;
        }

        if (LEVEL == MAXLEVELS) FAULT(34, 0);
        if (LEVEL > MAXLEVELS) FAULT(105, 0);
        if (KK >= 0 && RLEVEL > 1) {
          // ROUTINEENTRY

          COPYTAG(KK)
          // LISTOFJUMPS
          ;
          JJ = K;

          J = MIDCELL;
          if (J == 0 && LEVEL > 2) {
            // REPLACE'NOT USED'BIT

            REPLACE1(TAGS[(KK) - (0)], FROM1(TAGS[(KK) - (0)]) & 0xFFFF3FFF);
          }
          //
          // NOWFILLANYJUMPSTOTHISROUTINEPLANTEDSINCE
          // THEROUTINESPECWASCOMPILED.SEEALSO'RT JUMP'
          //
          while (J != 0) {
            POP(J, INSRN, AT, W1);
            W3 = CA - AT;
            if (INSRN >> 25 == CALL >> 1) W3 = W3 / 2;
            INSRN = INSRN + W3;
            PLUG(1, AT, INSRN, 4);
          }
          REPLACE2(TAGS[(KK) - (0)], CA)
          // NOTEADDRFORFUTURECALLS
          ;
        }

        if (KK >= 0 && RLEVEL == 1) {
          DIAGPOINTER(LEVEL);
          PSF1(STD, 1, 12);
        }
        if (KK < 0)
          W3 = 0;
        else
          W3 = WORD[(KK) - (0)];
        L[(LEVEL) - (0)] = LINE;
        M[(LEVEL) - (0)] = W3;
        // CURRENTBLOCKTYPEMARKER
        FLAG = PTYPE;
      };

      void RDISPLAY(int KK) {
        //***********************************************************************
        //*SETUPORCOPYTHEDISPLAY(AWORDARRAYCONTAININGCOPIESOF*
        //*LNBFORTHEGLOBALLEVELS.THEHIGHESTLEVELENTRYISTOTHE*
        //*GLA(PLT)FOROWNSANDISALSOKEPTIN(LNB+4)INCASEWEWISH*
        //*TOMOVETOREAD-ONLYPLTS.ONINTERNALCALLSTHELNBFORTHE*
        //*NEXTMOSTGLOBALLEVELISSTACKEDASANEXTRAPARAMETER*
        //***********************************************************************
        int W1;
        int W2;
        int STACK;
        int OP;
        int INC;

        if (KK >= 0 || LEVEL == 2) {
          // DISPLAYNEEDED

          STACK = 0;
          DISPLAY[(RLEVEL) - (0)] = N;
          GRUSE[(XNB) - (0)] = 0;
          GRUSE[(CTB) - (0)] = 0;
          GRUSE[(BREG) - (0)] = 0;
          if (LEVEL != 2) {
            // PF1(LXN,0,TOS,0)

            GRUSE[(XNB) - (0)] = 4;
            GRINF1[(XNB) - (0)] = RLEVEL - 1;
            GRAT[(XNB) - (0)] = CA;
            PF1(LD, 0, XNB, 12)
            // COPYPLTDESCRIPTOR
            ;

            DIAGPOINTER(LEVEL);
            PSF1(STD, 1, 12);
            W1 = RLEVEL - 1;
            W2 = DISPLAY[(W1) - (0)];
            if (W1 == 1) {
              PF1(STXN, 0, TOS, 0);
              N = N + 4;
            } else {
              while (W1 > 0) {
                OP = LSS;
                INC = 1;
                if (W1 >= 2) {
                  OP = LSD;
                  INC = 2;
                }
                if (W1 >= 4) {
                  OP = LSQ;
                  INC = 4;
                }
                PF1(OP + STACK, 0, XNB, W2);
                STACK = -32;
                N = N + 4 * INC;
                W2 = W2 + 4 * INC;
                W1 = W1 - INC;
              }
            }
          }

          if (STACK != 0)
            PF1(ST, 0, TOS, 0)
            // STTOS
            ;

          PF1(STLN, 0, TOS, 0);
          N = N + 4;
        }
        //
        // IFINDIAGNOSTICMODEPLANTCODETOSAVETHELINE&ROUTINENOOF
        // THECALLINGROUTINEANDSETUPTHENEWBLOCK/ROUTINEIDENTNO.
        //
        if (PARMTRACE != 0) {
          if (PARMOPT != 0)
            PF1(LSS, 0, PC, 4 * CONSTBTM | 0x80000000)
            // M'IDIA'
            ;

          if (KK >= 0 || LEVEL == 2) {
            if (PARMOPT != 0) {
              PSF1(SLSS, 0, LINE);
              N = N + 4;

            } else
              PSF1(LSS, 0, LINE);
            PF1(ST, 0, TOS, 0);

          } else {
            if (PARMOPT != 0) {
              PSF1(ST, 1, N);
              N = N + 4;
            }

            PSF1(LSS, 0, LINE);
            PSF1(ST, 1, N);
            PSF1(LD, 1, 12)
            // UPDATEBNDFIELD
            ;

            DIAGPOINTER(LEVEL);
            PSF1(STD, 1, 12);
          }

          DIAGINF[(LEVEL) - (0)] = N;
          N = N + 4;
          // NEEDEDFORbeginBLOCKS
          GRUSE[(ACCR) - (0)] = 0;
        }

        if (PARMOPT != 0 && KK >= 0 && LEVEL == 2) {
          PF1(STSF, 0, BREG, 0);
          PF1(STLN, 0, TOS, 0);
          PF1(SBB, 0, TOS, 0);
          PSF1(CPB, 0, N);
          PPJ(7, 13);
        }
        //
        // CLAIM(THERESTOF)THESTACKFRAME
        //

        if (KK >= 0 || LEVEL == 2) {
          SET[(RLEVEL) - (0)] = N << 18 | CA;
          NMAX = N;
          PF1(ASF + 12 * PARMCHK, 0, 0, 0)
          // ASFORLB
          ;

          if (PARMCHK != 0) PPJ(0, 4);
        }
        //

        if (KK >= 0 && PARMCHK != 0) {
          CHECKSTOF()
          // CHECKFORSTACKO''FLOW
          ;
        }

        if (PARMDBUG != 0)
          SETLINE()
          // TOCALLDBUGPACKAGE
          ;
      };

      void CHECKSTOF(void) {
        //***********************************************************************
        //*CHECKTHESTACKFOROVERFLOW(LEAVING4KMARGINFORMDIAG*
        //***********************************************************************

        if (PARMOPT != 0) {
          //
          // STSFTOSGETSTACKPOINTER
          // LSSTOS
          // USH+14
          // USH-15LOSESEGMENTNO
          // ICPX'1F800'CHECKWITHINSEGADDRESS
          // SHIFTEDDOWN1PLACE
          // JCC2,EXCESSBLKS
          //
          PF1(STSF, 0, TOS, 0);
          PF1(LSS, 0, TOS, 0);
          PSF1(USH, 0, 14);
          PSF1(USH, 0, -15);
          PF1(ICP, 0, 0, STLIMIT >> 1);
          PPJ(2, 8);
        }
      };
      // OFROUTINERHEAD

      void CIOCP(int N, int REG) {
        //***********************************************************************
        //*COMPILESACALLONIOCPENTRYPOINTNO'N'*
        //*2NDPARAMETERISALREADINTHEACCWHICHIS32BITS*
        //***********************************************************************
        int XYNB;
        int OP1;
        int OP2;

        if (IOCPDISP == 0) CXREF(IOCPEP, PARMDYNAMIC, 2, IOCPDISP);
        if (REGISTER[(BREG) - (0)] = 0) BOOTOUT(BREG);
        if (REG == ACCR) {
          OP1 = LUH;
          OP2 = ST;
        } else {
          OP1 = LDTB;
          OP2 = STD;
        }
        PSF1(OP1, 0, N);
        PSF1(PRCL, 0, 4);
        PF1(OP2, 0, TOS, 0);
        XYNB = SETXORYNB(-1, -1)
            // TOPLT
            ;

        PSF1(RALN, 0, 7);
        PF1(CALL, 2, XYNB, IOCPDISP);
        FORGET(-1);
      };

      void CUI(int CODE) {
        //***********************************************************************
        //*COMPILEANUNCONDITIONALINSTRNWHEREEVERITOCCURS*
        //*CODE=0UNCONDITIOALLY,=1AFTERthen,=2AFTERelse*
        //***********************************************************************
        int MARKER;
        int J;
        int LNAME;
        int TYPEP;
        int PRECP;
        int GWRDD;
        int LWB;
        int XYNB;
        int ARRP;
        int ALT;

        REPORTUI = 0;
        ALT = A;
        goto SW[ALT];
      //(NAME)(APP)(ASSMNT?)
      SW_1:

        P = P + 1;
        MARKER = P + FROMAR2(P);
        if (A == 1) {
          J = P + 2;
          P = MARKER + 2;
          ASSIGN(A, J);

        } else {
          P = P + 2;
          CNAME(0, 0);
          P = P + 1;
        }

      AUI:
        J = A;
        P = P + 1;
        if (J == 1) CUI(CODE);
        return;
      //->(NAME)(APP)
      SW_2:

        NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 1;
        if (CODE == 0) CURRINST = 1;
        LNAME = FROMAR2(P + 1);
        J = A;
        P = P + 4;
        if (J == 2) {
          // SIMPLELABEL

          ENTERJUMP(15, LNAME, 0);
          REPORTUI = 1;

        } else {
          // SWITCHLABELS

          COPYTAG(LNAME);
          ARRP = ARR;
          // BYTEDISPOFDESCRIPTORINPLT
          GWRDD = SNDISP << 2;

          if (!(OLDI == LEVEL && TYPE == 6)) {
            FAULT(4, LNAME);
            P = P - 1;
            SKIPAPP();
            return;
          }

          LWB = FROM2(K)
              // GETLOWERBOUND
              ;

          CSEXP(BREG, 0x51);
          if (ARRP == 1) PSF1(SBB, 0, LWB);
          XYNB = SETXORYNB(-1, -1)
              // TOPLT
              ;

          PF1(JUNC, 3, XYNB, GWRDD)
          // JUMPINDIRECTVIAWORDARRAY
          ;
          // OF32BITRELOCATEDADDRESSES

          REPORTUI = 1;
          FORGET(-1);
        }

        return;
      // RETURN
      SW_3:

        if (!(FLAG & 0x3FFF == 0x1000)) FAULT(30, 0);
        P = P + 1;
      RET:
        RTEXIT();
        REPORTUI = 1;
        if (CODE == 0) CURRINST = 1;
        return;
      // result(ASSOP)(EXPR)
      SW_4:

        PTYPE = FLAG & 0x3FFF;
        UNPACK();
        if (PTYPE > 0x1000 && A != 3) {
          // ASSOP#'->'

          if (A == 1 && NAM != 0 && A == 4 && A == 1) {
            P = P + 7;
            TYPEP = TYPE;
            PRECP = PREC;
            CNAME(4, ACCR);
            if (!(A == 2)) FAULT(81, 0);
            P = P + 1;
            if (!(TYPEP == TYPE && PRECP == PREC)) FAULT(83, 0);
            goto RET;
          }

          if (A == 2) {
            // ASSOP='='

            P = P + 2;
            // MAPSHAVEINTEGERRESULTS
            if (NAM != 0) TYPE = 1;

            if (TYPE == 5) {
              CSTREXP(0, ACCR);
              PSF1(LD, 1, DISPLAY[(RBASE) - (0)] - 8)
              // RESULTDESCRPT
              ;

              PF1(IAD, 0, PC, SPECIALCONSTS(2));
              PF2(MV, 1, 1, 0, 0, UNASSPAT & 255);
              PSF1(LDB, 2, DISPLAY[(RBASE) - (0)] - 8);
              COPYDR();

            } else {
              if (PREC < 5) PREC = 5;
              if (NAM == 0)
                KK = PREC << 4 | TYPE;
              else
                KK = 0x51;
              CSEXP(ACCR, KK);
            }
            goto RET;
          }
        }

        FAULT(31, 0);
        P = P + 2;
        SKIPEXP()
        // IGNORESPURIOUSRESULT
        ;

        return;
      // monitor(AUI)
      SW_5:

        PSF1(LSD, 0, 0)
        // ERR=0&EXTRA=0
        ;

        PPJ(0, 2)
        // TOERRORROUTINE
        ;

        P = P + 1;
        goto AUI;
      // stop
      SW_6:

        PPJ(0, 21);
        P = P + 1;
        if (CODE == 0) CURRINST = 1;
        REPORTUI = 1;
        return;
      //'%SIGNAL'(EVENT'')(N)(OPEXPR)
      SW_7:

        PSF1(PRCL, 0, 4);
        PSF1(JLK, 0, 1)
        // STACKDUMMYPC
        ;

        if (NMDECS[(LEVEL) - (0)] & 16 != 0) {
          // INAN'ON'GROUP

          if (FLAG <= 2) {
            // INABEGINBLOCK

            PSF1(LD, 1, 12)
            // SORESETDIAGPOINTER
            ;

            DIAGPOINTER(LEVEL - 1)
            // TONEXTOUTERBLOCK
            ;

            PSF1(STD, 1, 12);
            PF1(STLN, 0, TOS, 0);

          } else {
            //''ONINART/FN/MAP

            PSF1(LSS, 1, 0)
            // GETPREVIOUSLNB
            ;

            PF1(ST, 0, TOS, 0)
            // ANDSTACKTHAT
            ;
          }

        } else
          PF1(STLN, 0, TOS, 0);
        GRUSE[(ACCR) - (0)] = 0;
        // EVENTNO
        J = A;

        if (!(1 <= J && J <= 15)) FAULT2(26, J, 0);
        if (A == 1) {
          // SUBEVENTSPECIFIED

          P = P + 4;
          CSEXP(ACCR, 0x51);
          PF1(AND, 0, 0, 255);
          PF1(OR, 0, 0, 256 * J);

        } else
          PF1(LSS, 0, 0, 256 * J);
        PSF1(SLSS, 0, 0);
        PF1(ST, 0, TOS, 0);
        XYNB = SETXORYNB(-1, -1)
            // TOPLT
            ;

        PSF1(RALN, 0, 9);
        PF1(CALL, 2, XYNB, 40);
        if (CODE == 0) CURRINST = 1;
        REPORTUI = 1;
        return;
      // exit
      SW_8:
        // continue

      SW_9:
        // 0FOREXIT1FORCONTINUE

        ALT = ALT & 7;

        if (EXITLAB == 0) {
          FAULT2(54 + ALT, 0, 0);
          return;
        }
        KK = ;
        ENTERJUMP(15, KK, 0b10);
        REPORTUI = 1;
        if (CODE == 0) CURRINST = 1;
      };

      void CIFTHEN(int MARKIU, int MARKC, int MARKUI, int MARKE, int MARKR,
                   int SKIP) {
        //***********************************************************************
        //*THISROUTINECOMPILESCONDITIONALEXPRESSIONS.ITREQUIRESTHE*
        //*FOLLOWINGPARAMETERSTOBESETTOTHEIRA.R.ENTRY.*
        //*MARKIUTOTHEENTRYFORP(iu)*
        //*MARKCTOTHEENTRYFORP(COND)*
        //*MARKUITOTHEENTRYFOR(FIRSTOCCURRENCEOF)P(UI)*
        //*MARKETOTHEENTRYFORP(ELSE'')-=0FORBACKWARDSCONDITION*
        //*MARKRTOENTRYFORP(RESTOFIU)-=0FORBACKWARDSCONDITION*
        //***********************************************************************
        int ALTUI;
        int CCRES;
        int ELRES;
        int THENLAB;
        int ELSELAB;
        int USERLAB;
        int REPORT;
        int START;
        int ELSEALT;
        int K;

        const int NULLELSE = 4;

        if (!(SKIP == YES)) SETLINE();
        // ALTOFIU1=if,2=unless
        MARKIU = A;

        PLABEL = PLABEL - 1;
        THENLAB = PLABEL;
        // NOSTARTINCONDITIONYET
        START = 0;
        // MEANSNOELSECLAUSE

        ELSELAB = 0;

        P = MARKC;
        //'%START'OR'%THENSTART'
        if (MARKR > 0 && A <= 2) START = 1;

        if (MARKE != 0 && LEVEL < 2 && START == 0) FAULT(57, 0);
        USERLAB = -1;
        if (START != 0)
          ALTUI = 0;
        else
          ALTUI = A;
        if (ALTUI == 2 && A == 2)
          USERLAB = FROMAR2(MARKUI + 1)
              // UI=SIMPLELABEL
              ;

        if (8 <= ALTUI && ALTUI <= 9 && EXITLAB != 0) {
          // VALIDEXIT

          if (ALTUI == 8)
            USERLAB = EXITLAB;
          else
            USERLAB = CONTLAB;
        }
        //

        if (SKIP == YES) {
          // NOCODENEEDED

          if (START != 0) {
            P = MARKR + 1;
            CSTART(2, 1)
            // NOCODE
            ;

            MARKE = P;
          }
          // NOCODEFORELSE

          CCRES = 1;

          goto ELSE;
        }
        //

        if (USERLAB >= 0) {
          // FIRSTUIIS'->'<LABEL>

          NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 1;
          CCRES = CCOND(0, 3 - MARKIU, USERLAB);
          // CONDITIONBACKWARDS!
          if (CCRES != 0) CCRES = CCRES ^ 3;
          // NOTHENLABINTHISCASE

          THENLAB = 0;
          // UITRANSFEREDCONTROL

          REPORT = 1;

        } else {
          CCRES = CCOND(1, MARKIU, THENLAB);
          if (START != 0) {
            // thenstart

            if (CCRES == 0) {
              // CONDITIONAL

              if (LEVEL < 2) FAULT(57, 0);
              NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 1;
            }

            P = MARKR + 1;
            CSTART(CCRES, 1);
            if (A <= 2) {
              PLABEL = PLABEL - 1;
              ELSELAB = PLABEL;
            }
            MARKE = P;
            REPORT = LASTINST;

          } else {
            if (CCRES != 2) {
              P = MARKUI;
              CUI(1);
              REPORT = REPORTUI;

            } else {
              // FIRSTUINEVEREXECUTED

              REPORT = 1;
            }
          }
        }
        // ELSEPART

      ELSE:

        if (MARKE == 0)
          ELSEALT = NULLELSE;
        else
          ELSEALT = A;
        if (ELSEALT < NULLELSE) {
          PLABEL = PLABEL - 1;
          ELSELAB = PLABEL;
        }
        P = MARKE + 1;
        if (REPORT == 0 && 0 == CCRES && ELSEALT < NULLELSE) {
          REPORT = 1;
          ENTERJUMP(15, ELSELAB, 0b10)
          // LONGJUMPBUTSAVEENV
          ;
        }

        if (THENLAB > 0) ELRES = ENTERLAB(THENLAB, 0b11 | REPORT << 2);
        // CONDITIONAL&MERGEORREPLACE

        goto ESW[ELSEALT];
      //'%ELSESTART'
      ESW_1:

        if (CCRES == 0) NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 1;
        CSTART(CCRES, 2);
        REPORT = LASTINST;
        goto ENTERELSELAB;
      //'%ELSE'(iu)ETC
      ESW_2:

        MARKE = 0;
        MARKUI = 0;
        MARKR = P + 1 + FROMAR2(P + 1);
        if (A == 3) {
          MARKE = MARKR + 1 + FROMAR2(MARKR + 1);
          MARKUI = MARKR + 3;
        }

        if (CCRES == 1 || SKIP == YES)
          K = YES;
        else
          K = NO;
        CIFTHEN(P, P + 3, MARKUI, MARKE, MARKR, K);
        goto ENTERELSELAB;
      //'%ELSE'<UI>
      ESW_3:

        if (CCRES != 1) {
          if (START != 0)
            SETLINE()
            // FORCORRECTLINEIFFAILSINUI
            ;

          if (THENLAB == 0)
            K = 0;
          else
            K = 2;
          CUI(K);
          REPORT = REPORTUI;
        }

      ENTERELSELAB:
        if (ELSELAB > 0) ELRES = ENTERLAB(ELSELAB, 0b11 | REPORT << 2);
        // CONDITIONALMERGE
        // NULLELSECLAUSE

      ESW_NULLELSE:
      };

      void CSTART(int CCRES, int CODE) {
        //***********************************************************************
        //*COMPILEACOMPLETESTART-FINISHBLOCKBYRECURSION*
        //*IFSTARTNEVEREXECUTEDSKIPTOCORRESPONDINGFINISH*
        //*CODE=0WASUNCONDITIONALNOWSHOULDBEUNUSED*
        //*CODE=1AFTERTHEN*
        //*CODE=2AFTERELSE*
        //*CODE=3AFTERONEVENT*
        //*PONENTRYTOFORWARDPOINTERTOTHERIGHTFINISH*
        //*PONEXITTOTHEELSECLAUSEAFTERTHERIGHTFINISH*
        //***********************************************************************
        int SKIPCODE;
        int FINISHAR;
        int OLDNEXTP;
        int OLDLINE;

        SKIPCODE = NO;
        // NEVEREXECUTED
        if (1 <= CODE && CODE <= 2 && CCRES | CODE == 3) SKIPCODE = YES;

        FINISHAR = FROMAR4(P)
            // TOSTARTOFARFORFINISH
            ;

        if (FINISHAR <= P)
          ABORT()
          // FORTESTING
          ;
        // FORERRORMESSAGES

        OLDLINE = LINE;

        do {
          // THROUGHINTERVENINGSTATMNTS

          OLDNEXTP = NEXTP;
          if (SKIPCODE == NO)
            COMPILEASTMNT();
          else {
            LINE = A << 8 | A;
            NEXTP = NEXTP + (A << 16) + (A << 8) + A;
          }
          // HAVINGCOMPILEDFINISH

        } while (!(OLDNEXTP >= FINISHAR));
        // TOELSECLAUSE

        P = FINISHAR + 6;
        //

        if (A <= 2 && CODE != 1) FAULT2(45 + CODE, OLDLINE, 0);
        if (SKIPCODE == YES) LASTINST = 1;
      };

      void CCYCBODY(int UA, int ELAB, int CLAB) {
        //***********************************************************************
        //*COMPILESACYCLEREPEATBODYBYRECURSION*
        //*ONENTRYPISTOFORWARDPOINTER.ONEXITTOALTOFUNTIL*
        //*UA=OIFUNTILNOTALLOWED*
        //*ELAB&CLABARELABELSFORELSE&CONTINUE*
        //***********************************************************************
        int FINISHAR;
        int OLDLINE;
        int SAVEE;
        int SAVEC;

        FINISHAR = FROMAR4(P);
        if (FINISHAR <= P) ABORT();
        OLDLINE = LINE;
        SAVEE = EXITLAB;
        SAVEC = CONTLAB;
        EXITLAB = ELAB;
        CONTLAB = CLAB;
        while (NEXTP <= FINISHAR) {
          COMPILEASTMNT();
        }
        EXITLAB = SAVEE;
        CONTLAB = SAVEC;
        P = FINISHAR + 6;
        if (A == 1 && UA == 0) FAULT2(12, OLDLINE, 0);
      };

      void CLOOP(int ALT, int MARKC, int MARKUI) {
        //***********************************************************************
        //*ALT=1FORwhile,=2FORuntil,=3FORfor*
        //*MARKCISTOTHECONDITIONORCONTROLCLAUSE*
        //*MARKUIISTOTHEUI,SPECIALFORcycle*
        //***********************************************************************
        int L1;
        int L2;
        int L3;
        int CCRES;
        int ELRES;

        int FORNAME;
        int INITTYPE;
        int INITVAL;
        int STEPTYPE;
        int STEPVAL;
        int FINALTYPE;
        int FINALVAL;
        int FACC;
        int FDISP;
        int FBASE;
        int INITP;
        int REPMASK;
        int USEDEBJ;
        int DEBTO;

        auto void FOREXP(int *ETYPE, int *EVALUE, int TT, int REG);
        auto void VALIDATEFOR(void);

        P = MARKC;
        SFLABEL = SFLABEL - 2;
        L1 = SFLABEL;
        L2 = L1 + 1;
        //
        // SETL3FORALTS0,5&6ONLY
        //

        L3 = 0;
        if (0b1100001 & 1 << ALT != 0) {
          L3 = SFLABEL - 1;
          SFLABEL = L3;
        }
        //
        // UPDATETHELINENUMBERFORALTS1TO3ONLY
        //

        if (1 <= ALT && ALT <= 3) SETLINE();
        //
        // ENTERTHEFIRSTLABEL(L1)FORALLALTSEXCEPT3&6
        //

        if (0b0110111 & 1 << ALT != 0) ELRES = ENTERLAB(L1, 0);
        goto SW[ALT];
      // cycle
      SW_0:

        CCYCBODY(1, L2, L3);
        ELRES = ENTERLAB(L3, 0b011);
        if (A == 1) {
          // repeatuntil<COND>

          P = P + 1;
          CCRES = CCOND(0, 1, L1);

        } else
          ENTERJUMP(15, L1, 0);
        ELRES = ENTERLAB(L2, 0b011);
      // REMOVELABELSNOTREQUIRED
      WAYOUT:

        REMOVELAB(L1);
        REMOVELAB(L2);
        if (L3 > 0) REMOVELAB(L3);
        return;
      // UIWHILECOND
      SW_1:

        CCRES = CCOND(0, 1, L2);
        P = MARKUI;
        CUI(1);
        ENTERJUMP(15, L1, 0)
        // UNCONDITIONALLYBACKTOWHILE
        ;

        ELRES = ENTERLAB(L2, 0b111)
            // CONDITIONAL(?)&REPLACEENV
            ;

        goto WAYOUT;
      // UIuntilCOND
      SW_2:

        P = MARKUI;
        CUI(1);
        P = MARKC;
        CCRES = CCOND(0, 1, L1);
        goto WAYOUT;
      // UIfor....
      SW_3:
        // for...cycle

      SW_6:

        FORNAME = FROMAR2(P);
        INITP = P + 2;
        P = INITP;
        COPYTAG(FORNAME);
        FDISP = K;
        FBASE = I;
        FACC = 2 * NAM;
        if (!(TYPE == 1 && PREC == 5 && ROUT == 0 && 0 == ARR))
          FAULT2(91, 0, FORNAME);
        if (!(FBASE == RBASE)) WARN(4, FORNAME);
        //

        SKIPEXP()
        // PTOSTEPEXPRSN
        ;

        FOREXP(STEPTYPE, STEPVAL, 1, ACCR)
        // STEPTOACCRANDTEMP
        ;

        if (STEPTYPE == 0) {
          if (STEPVAL == 0)
            FAULT2(92, 0, 0)
            // ZEROSTEP
            ;

        } else {
          if (PARMOPT != 0)
            PPJ(26, 11)
            // FAULTCOMPUTEDZEROSTEP
            ;
        }
        //

        FOREXP(FINALTYPE, FINALVAL, 1, ACCR)
        // EVALUATEFINAL
        ;
        //

        P = INITP;
        FOREXP(INITTYPE, INITVAL, 0, BREG)
        // INITIALVALUETOB
        ;

        if (PARMOPT != 0) VALIDATEFOR();
        //
        // DONTUSEIT

        USEDEBJ = 0;

        if (STEPVAL == -1 && FINALTYPE | STEPTYPE == 0 && FINALVAL == 1) {
          // CANUSEBESTBRANCHINSTRN

          USEDEBJ = 1;

          if (INITTYPE == 0) PSF1(LB, 0, INITVAL);
          if (!(INITTYPE == 0 && INITVAL >= 1))
            ENTERJUMP(32 + 13, L2, 0b10)
            // JAFB>0NOTRAVERSES
            ;
          // SAVECAFORDEBJ

          DEBTO = CA;

        } else {
          if (INITTYPE | STEPTYPE == 0) {
            PSF1(LB, 0, INITVAL - STEPVAL);

          } else {
            if (INITTYPE == 0) PSF1(LB, 0, INITVAL);
            PSF1(SBB, STEPTYPE, STEPVAL);
          }
          //
          // HAVEBSETTOINIT-STEP.FORCOMPUTEDSTEPSNOWMUSTCHECK
          // FORNEGATIVETRAVERSES.FORFIXEDSTEPSTHISCANBESET
          // INMASKFORREPEATING
          //
          if (STEPTYPE == 1) {
            PF1(LSS, 0, BREG, 0);
            PSF1(IRSB, FINALTYPE, FINALVAL);
            PSF1(IDV, 1, STEPVAL);
            GRUSE[(ACCR) - (0)] = 0;
            ENTERJUMP(37, L2, 0b10);
            REPMASK = 7;
            // AORC

          } else
            REPMASK = 8 | (2 << (STEPVAL >> 31));
          //

          ELRES = ENTERLAB(L1, 0)
              // LABELFORREPEATING
              ;
          //

          if (STEPTYPE == 0 && STEPVAL == 1) {
            PSF1(CPIB, FINALTYPE, FINALVAL);

          } else {
            PSF1(CPB, FINALTYPE, FINALVAL);
            PSF1(ADB, STEPTYPE, STEPVAL);
          }

          GRUSE[(BREG) - (0)] = 0;
          ENTERJUMP(REPMASK, L2, 0b10);
        }

        BASE = FBASE;
        AREA = -1;
        PSORLF1(STB, FACC, AREACODE(), FDISP);
        NOTEASSMENT(BREG, 2, FORNAME);
        //
        // TOUIOR'%CYCLE'(HOLE)

        P = MARKUI;

        if (ALT == 3) {
          // DEALWITHCONTROLLEDSTMNTS

          CUI(0);

        } else {
          CCYCBODY(0, L2, L3);
          ELRES = ENTERLAB(L3, 0b011)
              // LABELFORCONTINUE
              ;
        }

        BASE = FBASE;
        ACCESS = FACC;
        AREA = -1;
        DISP = FDISP;
        NAMEOP(2, BREG, 4, FORNAME)
        // CONTROLTOB
        ;

        if (USEDEBJ == 0)
          ENTERJUMP(15, L1, 0);
        else {
          PSF1(DEBJ, 0, (DEBTO - CA) / 2);
          GRUSE[(BREG) - (0)] = 0;
        }
        ELRES = ENTERLAB(L2, 0b111 ^ (USEDEBJ << 2))
            // REPLACEENVUNLESSDEBJ
            ;
        // WHENMERGEENV

        goto WAYOUT;
      // whileCONDcycle
      SW_4:

        CCRES = CCOND(0, 1, L2);
        CCYCBODY(0, L2, L1);
        ENTERJUMP(15, L1, 0);
        ELRES = ENTERLAB(L2, 0b111)
            // CONDITIONAL&REPLACEENV
            ;

        goto WAYOUT;
      // until...cycle
      SW_5:
        // ALSOcycle...repeatuntil
        // MARKUITOcycle

        P = MARKUI;
        CCYCBODY(0, L2, L3);
        P = MARKC;
        ELRES = ENTERLAB(L3, 0b011)
            // CONTINUELABELIFNEEDED
            ;

        CCRES = CCOND(0, 1, L1);
        ELRES = ENTERLAB(L2, 0b011);
        goto WAYOUT;
        void FOREXP(int *ETYPE, int *EVALUE, int TOTEMP, int USEREG) {
          //***********************************************************************
          //*PINDEXESEXPRESSION.IFCONSTPUTINTOEVALUEOTHERWISE*
          //*COMPILETOUSEREGANDSTOREINTEMPIFTOTEMP#0*
          //***********************************************************************
          int INP;
          int VAL;
          int OP;

          INP = P;
          P = P + 3;
          if (INTEXP(VAL) == 0 && < 0x1FFFF) {
            // EXPRESSIONALITERALCONST

            EVALUE = VAL;
            ETYPE = 0;

            return;
          }

          P = INP;
          CSEXP(USEREG, 0x51)
          // INTEGERMODETOREG
          ;
          // NOTCONST

          ETYPE = 1;

          if (TOTEMP != 0) {
            GETWSP(VAL, 1);
            if (USEREG == ACCR)
              OP = ST;
            else
              OP = STB;
            PSF1(OP, 1, VAL);
            EVALUE = VAL;
          }
        };

        void VALIDATEFOR(void) {
          //***********************************************************************
          //*INITIALVALUEINBREGORACONSTANT*
          //***********************************************************************

          int I;

          if (INITTYPE | STEPTYPE | FINALTYPE == 0) {
            // ALLCONSTANTCANCHECKNOW

            J = FINALVAL - INITVAL;

            if ((J / STEPVAL) * STEPVAL != J) FAULT2(93, 0, 0);
            return;
          }

          if (STEPTYPE == 0 && == 1) return;
          //
          // CHECKBYPLANTINGCODE
          //

          if (INITTYPE == 0)
            PSF1(LSS, 0, INITVAL);
          else
            PF1(LSS, 0, BREG, 0);
          PSF1(IRSB, FINALTYPE, FINALVAL);
          PSF1(IMDV, STEPTYPE, STEPVAL);
          PF1(LSS, 0, TOS, 0);
          GRUSE[(ACCR) - (0)] = 0;
          PPJ(36, 11);
        };
      };

      void ASSIGN(int ASSOP, int P1) {
        //***********************************************************************
        //*HANDLESARITHMETIC,STRING&ADDRESSASSIGNMENTSTOVARIABLES*
        //*FORMALPARAMETERSANDDOPEVECTORS*
        //*ASSOP:-*
        //*1ISFOR'=='*
        //*2ISFOR'='*
        //*3ISFOR'<-'(JAMTRANSFER)*
        //*4ISFOR'->'(UNCONDITIONALRESOLUTION)*
        //*>4ISFORSTOREACCBY'ASSOP&3'INTONAME*
        //**
        //*PPOINTSTOTHEEXPRESSION.P1TOTHENAMEONLHS*
        //***********************************************************************
        int Q;
        int QQ;
        int KK;
        int TYPEP;
        int PRECP;
        int PTYPEP;
        int JJJ;
        int P2;
        int JJ;
        int REG;
        int STCODE;
        int RHTYPE;
        int ACCP;
        int II;
        int HEAD1;
        int NOPS;
        int TPCELL;
        int LVL;
        int BOT1;
        int LHNAME;
        int RHNAME;

        recfm R;
        //(RD)
        // TOSWITCHONASSOP

        P2 = P;
        if (ASSOP > 4) RHTYPE = TYPE;
        LHNAME = A << 8 | A;
        P = P1;
        REDUCETAG()
        // LOOKATLHSIDE
        ;

        PTYPEP = PTYPE;
        JJ = J;
        KK = K;
        II = I;
        LVL = OLDI;
        TPCELL = TCELL;
        ACCP = ACC;
        // SAVEUSEFULINFOFORLATER
        P = P2;
        TYPEP = TYPE;
        PRECP = PREC;

        goto SW[ASSOP & 3];
        //
        // ARITHMETICASSIGNMENTS

      SW_2:
      SW_3:

        if (TYPE == 3) goto RECOP;
        // INCASEOFRUBBISHYSUBNAMES
        if (!(TYPE == 2 || TYPE == 5)) TYPE = 1;
        // LHSISASTRING

        if (TYPE == 5) goto ST;
        // CLEARTEMPORAYRYLISTHEADS

      BACK:
        HEAD1 = 0;
        // DEALWITHUNSETNAMES

        if (!(TYPE == 2)) TYPE = 1;

        TYPEP = TYPE;
        NOPS = (1 << 18) + 1;
        P = P2 + 3;
        PUSH(HEAD1, (ASSOP & 3) + 33, PRECP, 0)
        // ASSIGNMENTOPERATOR
        ;

        BOT1 = HEAD1;
        PUSH(HEAD1, PTYPEP << 16 | 2, P1, 0)
        // LHS
        ;

        if (ASSOP > 4) {
          if (!(TYPE == RHTYPE)) FAULT(24, 0);
          PUSH(HEAD1, RHTYPE << 16 | 9, 0, 0);
          OLINK[(ACCR) - (0)] = HEAD1;

        } else
          TORP(HEAD1, BOT1, NOPS)
          // RHSTOREVERSEPOLISH
          ;

        EXPOP(HEAD1, -1, NOPS, 256 + (PRECP << 4) + TYPEP)
        // PLANTCODE
        ;
        // CLEARLIST(HEAD1)

        ASLIST[(BOT1) - (0)] = ASL;
        ASL = HEAD1;
        return;
        // NA:NOTEASSMENT(-1,ASSOP&3,A(P1))
        // STRINGS

      ST:
        //
        // PICKOFFNULLSTRINGSANDSUBSTITUTEACRAFTYMVLFORS=""
        //
        if (A == 4 && A == 2 && A == 0x35 && A == 0 && A == 2) {
          Q = P + 12 - (A >> 1);
          P = P1;
          CNAME(1, DR);
          PF2(MVL, 0, 1, 0, 0, 0);
          P = Q;
          return;
        }

        if (ASSOP <= 3) CSTREXP(0, ACCR);
        ASSOP = ASSOP & 3;
        QQ = STRINGL;
        Q = P;
        REGISTER[(ACCR) - (0)] = 1;
        OLINK[(ACCR) - (0)] = ;
        R = 0x51;
        R = 9;
        R = 0;
        R = ACCR;
        P = P1;
        CNAME(1, DR);
        if (R != 9) PF1(LSD, 0, TOS, 0);
        PF1(IAD, 0, PC, SPECIALCONSTS(2));
        if (ASSOP != 3 && ROUT != 0 || NAM != 0 && 0 == ARR && QQ == 0) {
          // LHS=MAP:DRBOUNDNOTVALID
          // ALSONAMESMAPPED==STRING(ADDR)

          if (PARMOPT != 0)
            PPJ(0, 18);
          else {
            PF1(STUH, 0, BREG, 0);
            PF1(LUH, 0, BREG, 0);
            PF1(LDB, 0, BREG, 0);
          }

          GRUSE[(BREG) - (0)] = 0;
        }

        GRUSE[(ACCR) - (0)] = 0;
        REGISTER[(ACCR) - (0)] = 0;
        if (QQ > 0 && ASSOP != 3)
          PF2(MV, 0, 0, QQ, 0, 0);
        else {
          if (ASSOP == 3) PF1(STD, 0, TOS, 0);
          PF2(MV, 1, 1, 0, 0, UNASSPAT & 255);
          if (PARMARR != 0 || ASSOP == 3) {
            PSF1(USH, 0, 8);
            PSF1(USH, 0, -40);
          }
          if (PARMARR != 0 && ASSOP == 2) PPJ(36, 9);
          if (ASSOP == 3) {
            PF1(IRSB, 2, TOS, 0);
            PF1(ST, 2, 7, 0)
            // STOREAMENDEDCURRENTLENGTH
            ;
          }
        }

        P = Q;
        return;
        //
        // THISSECTIONDEALSWITHOPERATIONSONCOMPLETERECORDS
        //
        // LHSISRECORDWITHOUTSUBNAME

      RECOP:
        // INCASEFAULT66

        REG = ACCR;

        Q = TSEXP(JJJ);
        if (Q == 1 && JJJ == 0) {
          // CLEARARECORDTOZERO

          P = P1;
          CNAME(3, DR);
          if (ACC <= 128) {
            JJ = 0;
            KK = ACC - 1;
          } else {
            JJ = 1;
            KK = 0;
            if (NAM != 0 || ARR != 0) PSF1(LDB, 0, ACC);
          }

          PF2(MVL, JJ, 1, KK, 0, 0);

        } else {
          if (!(TYPE == 3 && A == 4 && A == 1)) goto BACK;
          P = P2 + 5;
          CNAME(3, ACCR);
          ACCP = ACC;
          if (!(A == 2)) {
            FAULT2(66, 0, LHNAME);
            goto F00;
          }
          R = 0x61;
          R = 9;
          R = ACCR << 5;
          R = 0;
          OLINK[(ACCR) - (0)] = ;
          REGISTER[(ACCR) - (0)] = 1;
          P = P1;
          CNAME(3, DR);
          REGISTER[(ACCR) - (0)] = 0;
          if (R != 9) PF1(LSD, 0, TOS, 0);
          if (ASSOP == 2 && ACCP != ACC) {
            FAULT2(67, LHNAME, FROMAR2(P2 + 5));
            goto F00;
          }
          if (ACCP > ACC) ACCP = ACC;
          ? Please recode the source file so that loops with
              "%until <cond> %cycle ... %repeat" are replaced by
              "%cycle ... %repeat %until <cond>" do {
            if (ACCP > 128)
              KK = 128;
            else
              KK = ACCP;
            PF2(MV, 0, 0, KK - 1, 0, 0);
            ACCP = ACCP - KK;
          }
          while (!(ACCP == 0))
            ;
          GRUSE[(ACCR) - (0)] = 0;
        }

        P = P2;
        SKIPEXP();
        GRUSE[(DR) - (0)] = 0;
        return;
      // RESOLUTION
      SW_0:

        P = P1;
        CNAME(2, DR);
        P = P2;
        if (TYPE == 5)
          CRES(0);
        else {
          SKIPEXP();
          if (!(TYPE == 7)) FAULT2(71, 0, FROMAR2(P1));
        }

        return;
      //'=='ANDnamePARAMETERS
      SW_1:
        // NORMALLYUSEACC

        REG = ACCR;
        STCODE = ST;

        if (!(A == 4 && A == 1)) goto F81;
        if (!(NAM == 1)) {
          FAULT2(82, 0, LHNAME)
          // ONLYPOINTERSONLHSOF==
          ;
          goto F00;
        }

        P = P2 + 5;
        RHNAME = A << 8 | A;
        if (ARR == 1) goto ARRNAME;
        if (A == 2 && 2 == A) {
          // LHSSCALARPOINTERNAME

          COPYTAG(RHNAME)
          // LOOKATRHS
          ;

          if (PTYPE != SNPT && ARR != 0) {
            REG = DR;
            STCODE = STD;
          }
        }

        CNAME(3, REG)
        // DESCRPTRTOACC
        ;

        R = 0x61;
        R = 9;
        R = REG;
        OLINK[(REG) - (0)] = ;
        REGISTER[(REG) - (0)] = 1;
        // NORESTOFEXPONRHS
        if (!(A == 2)) goto F81;

        Q = P + 1;
        P = P1;
        if (!(TYPE == TYPEP && PREC == PRECP)) goto F83;
        if (!(OLDI <= LVL || BASE == 0 || NAM != 0)) goto F86;
        // GLOBAL==NONOWNLOCAL

        CNAME(6, 0);
        if (R != 9) {
          if (REG != ACCR) ABORT();
          PF1(LSD, 0, TOS, 0);
          GRUSE[(ACCR) - (0)] = 0;
        }

        REGISTER[(REG) - (0)] = 0;
      COM:
        PSORLF1(STCODE, ACCESS, AREACODE(), DISP);
        if (REG == DR && ACCESS != 0) ABORT();
        NOTEASSMENT(REG, 1, A << 8 | A);
        P = Q;
        return;
      ARRNAME:
        CNAME(12, ACCR);
        if (ACCESS >= 8)
          ACCESS = ACCESS - 4;
        else
          ACCESS = 0;
        if (!(TYPE == TYPEP && PREC == PRECP && ARR > 0)) goto F83;
        if (!(OLDI <= LVL || BASE == 0 || NAM != 0)) goto F86;
        // GLOBAL==NONOWNLOCAL

        TYPE = 0;
        NAMEOP(2, ACCR, 16, -1);
        R = 0x72;
        R = 0;
        R = 9;
        R = ACCR;
        R = -1;
        REGISTER[(ACCR) - (0)] = 1;
        OLINK[(ACCR) - (0)] = ;
        if (!(A == 2)) goto F81;
        Q = P + 1;
        P = P1;
        CNAME(6, 0);
        if (!(R == 9)) PF1(LSQ, 0, TOS, 0);
        REGISTER[(ACCR) - (0)] = 0;
        goto COM;
      F83:
        FAULT2(83, LHNAME, RHNAME);
        goto F00;
      F86:
        FAULT2(86, LHNAME, RHNAME);
        goto F00;
      F81:
        FAULT2(81, 0, LHNAME);
      F00:
        REGISTER[(REG) - (0)] = 0;
        P = P2;
        SKIPEXP();
      };

      void CSEXP(int REG, int MODE) {
        //***********************************************************************
        //*COMPILEASIGNEDEXPRESSIONTOREGISTER'REG'INMODE'MODE'*
        //*MODE=1FORinteger,=2REAL,=3LONG,=0INTEGERifPOSSIBLE*
        //*MODE=5FORADDRESSEXPRESSNS(IELEAVEANYCONSTANTIN'ADISP')*
        //***********************************************************************
        int EXPHEAD;
        int NOPS;
        int EXPBOT;

        EXPHEAD = 0;
        EXPBOT = 0;
        NOPS = 0;
        P = P + 3;
        TORP(EXPHEAD, EXPBOT, NOPS);
        //

        EXPOP(EXPHEAD, REG, NOPS, MODE);
        // CLEARLIST(EXPHEAD)

        ASLIST[(EXPBOT) - (0)] = ASL;
        ASL = EXPHEAD;
      };

      int CONSTEXP(int PRECTYPE) {
        //***********************************************************************
        //*COMPILESANEXPRESSIONWHICHSHOULDEVALUATETOACONSTANTOF*
        //*TYPE'PRECTYPE'.PASFORFNINTEXP.*
        //***********************************************************************
        int EXPHEAD;
        int EXPBOT;
        int NOPS;
        int RES;

        EXPHEAD = 0;
        EXPBOT = 0;
        NOPS = 0;
        RES = 0;
        TORP(EXPHEAD, EXPBOT, NOPS);
        if (!(NOPS & 0x00040000 == 0)) goto WAYOUT;
        EXPOP(EXPHEAD, ACCR, NOPS, 0x200 + PRECTYPE);
        if (EXPOPND == 3) {
          RES = EXPOPND;
          goto WAYOUT;
        }
        if (!(EXPOPND <= 1)) goto WAYOUT;
        RES = ;
      WAYOUT:
        if (RES == 0 && DCOMP != 0) assert(_IMP_MONITOR_);
        ASLIST[(EXPBOT) - (0)] = ASL;
        ASL = EXPHEAD;
        return RES;
      };

      int INTEXP(int *VALUE) {
        //***********************************************************************
        //*COMPILESANEXPRESSIONWHICHSHOULDEVALUATETOACONSTANT*
        //*VALUERETURNEDINVALUE.RESULT#0IFFAILEDTOEVALUATE*
        //*PPOINTSTOP(+') IN (+')(OPERNAD)(RESTOFEXPR)*
        //***********************************************************************
        int EXPHEAD;
        int EXPBOT;
        int NOPS;
        int CODE;
        int SPTYPE;
        int SACC;

        EXPHEAD = 0;
        EXPBOT = 0;
        NOPS = 0;
        CODE = 0;
        // CALLEDINDECLARATIONS
        SPTYPE = PTYPE;
        SACC = ACC;

        TORP(EXPHEAD, EXPBOT, NOPS);
        if (NOPS & 0x00040000 == 0 && TYPE == 1) {
          EXPOP(EXPHEAD, ACCR, NOPS, 0x251);
          if (!(EXPOPND <= 1 && EXPOPND == 0x51)) CODE = 1;
          VALUE = EXPOPND;

        } else {
          CODE = 1;
          VALUE = 1;
        }
        ASLIST[(EXPBOT) - (0)] = ASL;
        ASL = EXPHEAD;
        ACC = SACC;
        PTYPE = SPTYPE;
        UNPACK();
        return CODE;
      };

      void TORP(int *HEAD, int *BOT, int *NOPS) {
        //***********************************************************************
        //*CONVERTTHESIGNEDEXPRESSIONINDEXEDBYPINTOREVERSE*
        //*POLISHNOTATION.THEREVERSEPOLISHLISTISADDEDTO'HEAD'*
        //*WHICHMAYCONTAINANOTHEREXPRESSION.THENUMBEROFOPERATORS*
        //*ISADDEDTONOPS.*
        //*N.B.ANINTEGEREXPRESSIONISASPECIALCASEOFAREALEXPRSN*
        //*THETOP20BITSOFNOPSAREUSEDTORETURNDETAILSOFTHEEXPR*
        //*THESEBITSSIGNIFYASFOLLOWS:-*
        //*1<<17CONTAINSVARIABLEOFMORETHAN32BITS*
        //*1<<18NOTCONSTANTEXPRSSNIECONTAINSATLEAST1VARIABLE*
        //*1<<19COMPLEXIECONTAINSFNCALLORNEEDSDRTOEVALUATE*
        //*1<<20CONTAINSTHEOPERATOR+*
        //*1<<21CONTAINSTHE-OPERATOR(INCLUDESUNARYMINUS)*
        //*1<<22CONTAINSOPERATOR!!(INCUDESUNARYNOT)*
        //*1<<23-7CONTAINSOPERATORS!,*,//,/,&RESPECTIVELY*
        //*1<28&9CONTAINS<<OR>>*
        //*1<<30CONTAINSEXPONETIATION*
        //***********************************************************************
        const char PRECEDENCE[(15) - (1) + 1] = 3,
            3, 4, 5, 5, 4, 3, 3, 4, 4, 5, 5, 3, 5, 5;

        const char OPVAL[(15) - (1) + 1] = 20,
            21, 27, 37, 30, 24, 22, 23, 25, 26, 28, 29, 20, 37, 30;

        int RPHEAD;
        int PASSHEAD;
        int SAVEHEAD;
        int REAL;
        int REALOP;
        int COMPLEX;
        int OPERATOR;
        int OPPREC;
        int OPND;
        int C;
        int D;
        int E;
        int RPTYPE;
        int RPINF;
        int BDISP;
        int OPNAME;
        int OPMASK;
        int XTRA;
        int RPBOT;
        int OPSTK;
        int OPPSTK;
        int PASSBOT;

        recfm *LCELL;
        //(LISTF)
        //

        PASSHEAD = 0;
        RPHEAD = 0;
        SAVEHEAD = 0;
        REAL = 0;
        REALOP = 0;
        BDISP = 0;
        RPBOT = 0;
        OPSTK = 0;
        OPPSTK = 0;
        //

        C = A;
        if (2 <= C && C <= 3) {
          // INITIAL'-'OR'\'

          NOPS = NOPS + 1;
          //'-'=(11,3)'\'=(10,5)

          OPSTK = 4 - C;
          OPPSTK = (C << 1) - 1;
          //-or!!
          OPMASK = 1 << (19 + C);

        } else
          OPMASK = 0;
      NEXTOPND:
        OPND = A;
        P = P + 2;
        COMPLEX = 0;
        XTRA = 0;
        // SWITCHONOPERAND
        goto OPERAND[OPND];
        // NAME

      OPERAND_1:

        OPNAME = (A << 8) + A;
        LCELL = ASLIST[(TAGS[(OPNAME) - (0)]) - (0)];
        PTYPE = LCELL >> 16;
        // NAMENOTSET
        if (PTYPE == 0xFFFF) PTYPE = 7;

        TYPE = PTYPE & 7;
        PREC = PTYPE >> 4 & 15;
        if (PTYPE == SNPT) {
          D = LCELL >> 16;
          if (D == 38 && A == 2) {
            // PICKOFFNL

            RPTYPE = 0;
            RPINF = 10;
            PTYPE = 0x51;
            P = P + 2;
            goto SKNAM;
          }

          if (D == 52 && A == 2) {
            // PICKOFFPI

            RPTYPE = 1;
            PTYPE = 0x62;
            RPINF = 0x413243F6;
            XTRA = 0xA8885A31;
            P = P + 2;
            REAL = 1;
            goto SKNAM;
          }

          COMPLEX = 1;
          PTYPE = TSNAME[(D) - (0)];
          UNPACK();
        }

        if (PTYPE & 0xFF00 == 0x4000 && A == 2 && 2 == A && 1 <= TYPE &&
            TYPE <= 2) {
          // CONSTVAR
          // SETUSEDBIT

          LCELL = LCELL | 0x8000;

          RPINF = LCELL;
          XTRA = LCELL;
          RPTYPE = 1;
          PTYPE = PTYPE & 255;
          if (TYPE == 1 && PREC <= 5 && 0xFFFE0000 <= RPINF &&
              RPINF <= 0x1FFFF) {
            RPTYPE = 0;
            PTYPE = 0x51;
          }
          if (PREC == 7) RPTYPE = 3;
          if (TYPE == 2) REAL = 1;
          P = P + 2;
          goto SKNAM;
        }

        XTRA = OPNAME;
        if (PTYPE & 0x3F00 != 0 || PARMCHK == 1 || PREC < 5) {
          COMPLEX = 1;
          XTRA = -1;
        }
        OPMASK = OPMASK | (COMPLEX << 19);
        // XTRA=NAMEFORLOCALSCALRSONLY
        if (A != 2 || A != 2) XTRA = -1;

        if (TYPE == 3) {
          D = P;
          KFORM = LCELL & 0xFFFF;
          C = COPYRECORDTAG(E);
          P = D;
          if (!(E == 1 && 1 <= TYPE && TYPE <= 2 && NAM == ARR && ARR == 0 &&
                PREC != 3))
            COMPLEX = 1;
        }
        // MORETHAN32BITS

        if (PREC >= 6) OPMASK = OPMASK | 1 << 17;

        RPTYPE = 2;
        RPINF = P;
        if (PTYPE == 7) PTYPE = 0x51;
        if (TYPE == 5) {
          FAULT2(76, 0, OPNAME);
          RPTYPE = 0;
          PTYPE = 0x51;
        }
        if (TYPE == 2) REAL = 1;
        P = P + 2;
      SKNAM:
        if (A == 2)
          P = P + 1;
        else
          SKIPAPP();
        if (A == 1) {
          P = P + 3;
          goto SKNAM;
        }
        P = P + 2;
      INS:
        if (RPTYPE == 2) OPMASK = OPMASK | 1 << 18;
        BINSERT(RPHEAD, RPBOT, PTYPE << 16 | COMPLEX << 8 | RPTYPE, RPINF,
                XTRA);
        goto OP;
      // CONSTANT
      OPERAND_2:

        PTYPE = A;
        D = PTYPE >> 4;
        C = PTYPE & 7;
        if (D == 4) {
          RPINF = FROMAR2(P + 1);
          PTYPE = 0x51;

        } else
          RPINF = FROMAR4(P + 1);
        if (C == 2) REAL = 1;
        RPTYPE = 1;
        if (D == 6) XTRA = FROMAR4(P + 5);
        if (C == 5) {
          // STRINGCONSTANT

          FAULT2(77, 0, 0);
          RPINF = 1;
          RPTYPE = 0;
          P = P + A + 7;
          PTYPE = 0x51;

        } else {
          if (D == 7) {
            XTRA = ;
            RPTYPE = 3;
          }
          if (PTYPE == 0x51 && 0xFFFE0000 <= RPINF && RPINF <= 0x1FFFF)
            RPTYPE = 0;
          P = P + 2 + BYTES[(D) - (0)];
        }
        goto INS;
      // SUBEXPRESSION
      OPERAND_3:

        PASSHEAD = 0;
        PASSBOT = 0;
        P = P + 3;
        TORP(PASSHEAD, PASSBOT, NOPS);
        if (TYPE == 2) REAL = 1;
        // CONCAT(RPHEAD,PASSHEAD)

        if (RPBOT == 0)
          RPHEAD = PASSHEAD;
        else
          ASLIST[(RPBOT) - (0)] = PASSHEAD;
        RPBOT = PASSBOT;
        P = P + 1;
      // DEALWITHOPERATOR
      OP:
        // EXPRFINISHED

        if (A == 2) goto EOE;

        OPERATOR = A;
        //
        // THESTRINGOPERATOR'.'CAUSESCHAOSINANARITHMETICEXPRSN
        // SOFAULTITANDCHANGEITTOTHEINNOCUOUS'+'
        //
        if (OPERATOR == CONCOP) FAULT2(78, 0, 0);
        OPPREC = PRECEDENCE[(OPERATOR) - (1)];
        OPERATOR = OPVAL[(OPERATOR) - (1)];
        if (OPERATOR == 26 || OPERATOR == 30) REAL = 1;
        NOPS = NOPS + 1;
        //
        // UNLOADTHEOPERATORSTACKOFALLOPERATORSWHOSEPRECEDENCEIS
        // NOTLOWERTHANTHECURRENTOPERATOR.ANEMPTYSTACKGIVES'-1'
        // ASPRECEDENCE.
        //
        while (OPPREC <= OPPSTK & 31) {
          BINSERT(RPHEAD, RPBOT, (OPSTK & 31) + 9, 0, 0);
          OPSTK = OPSTK >> 5;
          OPPSTK = OPPSTK >> 5;
        }
        //
        // THECURRENTOPERATORCANNOWBESTORED
        //

        OPSTK = OPSTK << 5 | (OPERATOR - 9);
        OPPSTK = OPPSTK << 5 | OPPREC;
        if (OPERATOR >= 31) OPERATOR = 30;
        OPMASK = OPMASK | (1 << OPERATOR);
        goto NEXTOPND;
      // ENDOFEXPRESSION
      EOE:
        // EMPTYREMAININGOPERATORS

        while (OPSTK != 0) {
          BINSERT(RPHEAD, RPBOT, (OPSTK & 31) + 9, 0, 0);
          OPSTK = OPSTK >> 5;
        }
        PTYPE = REAL + 1;
        TYPE = PTYPE;
        // CONCAT(RPHEAD,HEAD)

        if (HEAD == 0)
          BOT = RPBOT;
        else
          ASLIST[(RPBOT) - (0)] = HEAD;
        // HEADBACKTOTOPOFLIST
        HEAD = RPHEAD;

        NOPS = NOPS | OPMASK;
      };

      void EXPOP(int INHEAD, int REG, int NOPS, int MODE) {
        //***********************************************************************
        //*EVALUATEALISTOFOPERANDAND'NOPS'OPERATORSANDLEAVE*
        //*THERESULTINREG*
        //*INHEADHOLDSTHELISTTHEBOTTOMBYTEOFSTREAM1DEFINESTHE*
        //*ENTRYASFOLLOWS:-*
        //*0=SHORT(INTEGER)CONSTANT<18BITS--S2=CONSTANT*
        //*1=OTHERCONSTANTS2(+S3IFNEEDED)=CONSTANT*
        //*2=VARIABLES2POINTTOARENTRYFORNAME&SUBSCRIPTS*
        //*(3=DOPEVECTORITEMIFNEEDED)*
        //*(4=CONDITONALEXPRESSIONASINALGOL)*
        //*7=INTERMEDIATERESULTUNDERLNBS2=DISPLCMNTFROMLNB*
        //*8=INTERMEDIATERESULTSTACKED*
        //*9=INTERMEDIATERESULTINAREGISTERS2=REG*
        //**
        //*10-19=UNARYOPERATORS2=OPS3=EXTRA*
        //*20UP=BINARYOPERATOR*
        //**
        //*ARRAYMCINSTHOLDTHEOPCODESCORRESPONDINGTOTHEOPERATORS:-*
        //*TOPBYTE=REALFORWARDFORM*
        //*2NDBYTE=REALREVERSEFORM*
        //*3RDBYTE=INTEGERFORWARDFORM*
        //*BTMBYTE=INTEGERREVERSEFORM*
        //*MODEHASTYPE&PRECREQD+256BITIFNORESULTREQD*
        //***********************************************************************
        auto void CTOP(int *A);
        auto void VMY(void);
        auto void VMY1(void);
        auto void CHOOSE(int *I);
        auto void PUT(void);
        auto void STARSTAR(void);
        auto void REXP(void);
        auto void LOAD(recfm * OP, int REG, int MODE);
        auto void FLOAT(recfm * OPND, int OTHERPTYPE);
        auto void COERCET(recfm * OP1, recfm * OP2, int MODE);
        auto void COERCEP(recfm * OP1, recfm * OP2);
        auto void LENGTHEN(recfm * OP);
        auto void SHORTEN(recfm * OP);
        //

        int OPERAND[(2) - (1) + 1]

            ;
        int STK[(99) - (0) + 1]

            ;

        recfm *LIST;
        //(LISTF)

        recfm *OPND1;
        recfm *OPND2;
        recfm *OPND;
        //(RD)
        //

        int C;
        int D;
        int KK;
        int JJ;
        int OPCODE;
        int COMM;
        int XTRA;
        int PP;
        int PT;
        int JJJ;
        int LOADREG;
        int EVALREG;
        int STPTR;
        int CONSTFORM;
        int CONDFORM;
        int SAVEP;

        const int MCINST[(37) - (10) + 1] = 0x8E8E,
            0xF4F4E4E4, 0xA8A8, 0xF4F4E4E4,
            [LOW... HIGH] = 0, 0xF0F0E0E0, 0xF2F4E2E4, 0x8E8E, 0x8C8C,
                    0xFAFAEAEA, 0xAAAC, 0xBABC0000, 0x8A8A,
                    [LOW... HIGH] = 0xC800, 0xFA000000, 0xF6F6E6E6, 0x00F600E6,
                    0x2C002C00, 0x02000200, [LOW... HIGH] = 0x48004800, 0xEA00;

        const char CORULES[(37) - (20) + 1] = [LOW... HIGH] = 0x1F,
                      [LOW... HIGH] = 0x11, 0x1F, 0x11, 0x12, 0x11, 1, 1, 0,
                      [LOW... HIGH] = 0x1F, [LOW... HIGH] = 0, 1;

        const char FCOMP[(28) - (1) + 1] = 8,
            10, 2, 7, 12, 4, 7, 8, 12, 4, 7, 10, 2, 7, 16, 34, 17, 32, 33, 18,
            32, 16, 33, 18, 32, 34, 17, 32;
        //

        STPTR = 0;
        CONSTFORM = MODE & 512;
        CONDFORM = MODE & 256;
        SAVEP = P;
        // EVALUATEINACCUNLESS
        EVALREG = ACCR;

        if (REG == BREG && NOPS & 0x7EC20000 == 0) EVALREG = BREG;
        // ONLY'+'and'*'PRESENT
        // NOTHING>32BITS

      NEXT:
        LIST = ASLIST[(INHEAD) - (0)];
        C = LIST;
        XTRA = LIST;
        JJ = C & 255;
        D = INHEAD;
        INHEAD = LIST;
        if (JJ >= 10) goto OPERATOR;
        //
        // ANYOPERANDWHICHMAYNEEDDRORBORACCINTHEIREVALUATION
        // EGFUNCTIONS,ARRAYELEMENTSETCAREFETCHEDANDSTACKKEDFIRST
        //
        OPERAND[(1) - (1)] = ;
        OPND1 = ASLIST[(D) - (0)];
        if (OPND1 == 2 && OPND1 != 0) LOAD(OPND1, EVALREG, 0);
        STK[(STPTR) - (0)] = OPERAND[(1) - (1)];
        STPTR = STPTR + 1;
        if (STPTR > 99) ABORT();
      ANYMORE:
        if (!(INHEAD == 0 || MODE == 100)) goto NEXT;
        goto FINISH;
      OPERATOR:
        // UNARYORBINARY
        if (JJ < 19)
          KK = 1;
        else
          KK = 2;

        for (KK = KK; KK != 1; KK += -1) {
          STPTR = STPTR - 1;
          C = STK[(STPTR) - (0)];
          OPERAND[(KK) - (1)] = C;
        }
        OPCODE = MCINST[(JJ) - (10)];
        COMM = 1;
        OPND1 = ;
        OPND2 = OPND1;
        if (JJ >= 19) {
          OPND2 = ;
          C = CORULES[(JJ) - (20)];
          if (C & 15 != 0) COERCET(OPND1, OPND2, C & 15);
          if (C >> 4 != 0) COERCEP(OPND1, OPND2);
        }

        if (JJ > 19) {
          CHOOSE(COMM);
          OPND1 = ;
          OPND2 = ;
        }

        PTYPE = OPND1;
        TYPE = PTYPE & 7;
        // INTEGERORREALFORMS
        if (TYPE == 1)
          OPCODE = OPCODE & 0xFFFF;
        else
          OPCODE = OPCODE >> 16;

        if (2 != OPND1 && OPND1 < 4 && 2 != OPND2 && OPND2 < 4) CTOP(JJ);
        // CTOPCARRIEDOUT
        if (JJ == 0) goto STRES;

        goto SW[JJ];
      //
      SW_10:

        LOAD(OPND1, EVALREG, 2);
        if (!(TYPE == 1 || TYPE == 7)) FAULT(24, 0);
        PSF1(OPCODE & 255, 0, -1)
        // NEQ-1
        ;

        GRUSE[(EVALREG) - (0)] = 0;
      SUSE:
        OLINK[(EVALREG) - (0)] = OPERAND[(COMM) - (1)];
      STRES:
        STK[(STPTR) - (0)] = OPERAND[(COMM) - (1)];
        STPTR = STPTR + 1;
        goto ANYMORE;
      // NEGATE
      SW_11:

        LOAD(OPND1, EVALREG, 2);
        if (EVALREG == BREG) {
          PSF1(SLB, 0, 0);
          PF1(SBB, 0, TOS, 0);
        } else
          PSF1(OPCODE & 255, 0, 0)
          // IRSB0ORRRSB0
          ;

        GRUSE[(EVALREG) - (0)] = 0;
        goto SUSE;
      // FLOAT
      SW_12:

        ABORT();
      // ABS
      SW_13:

        LOAD(OPND1, EVALREG, 2)
        // OPERANDTOACC
        ;

        if (TYPE == 2)
          C = 2;
        else
          C = 6;
        PF3(JAF, C, 0, 3)
        // JAF*+3ONACC<0
        ;

        PSF1(OPCODE & 255, 0, 0)
        // IRSB0ORRRSB0
        ;

        GRUSE[(EVALREG) - (0)] = 0;
        goto SUSE;
      // STRETCH
      SW_14:

        ABORT();
      // ADD
      SW_20:

        if (TYPE == 1 && GRUSE[(EVALREG) - (0)] = 10 && OPND1 == 2 &&
            OPND2 == 0 && REGISTER[(EVALREG) - (0)] = 0) {
          P = OPND1;
          D = GRINF1[(EVALREG) - (0)];
          if (FROMAR2(P) == D & 0xFFFF && A == 2 && 2 == A) {
            if (EVALREG == ACCR)
              C = IAD;
            else
              C = ADB;
            PSF1(C, 0, OPND2 - (D >> 16));
            GRINF1[(EVALREG) - (0)] = D & 0xFFFF | OPND2 << 16;
            REGISTER[(EVALREG) - (0)] = 1;
            OPND1 = 9;
            OPND1 = EVALREG << 4;
            OPND1 = 0;
            goto SUSE;
          }
        }

      BINOP:
        LOAD(OPND1, EVALREG, 2);
        LOAD(OPND2, EVALREG, 1);
        PUT();
        goto SUSE;
      // SUBTRACT
      SW_21:

        goto BINOP;
      // EXCLUSIVEOR
      SW_22:
        // OR

      SW_23:
        // AND

      SW_27:

        if (TYPE == 1) goto BINOP;
      F24:
        if (!(TYPE == 7)) FAULT(24, 0);
        JJ = 20;
        OPCODE = MCINST[(20) - (10)];
        // CHANGEOPNTO+
        goto BINOP;
        // SRL

      SW_28:

        if (OPND2 == 0)
          OPND2 = -OPND2;
        else {
          LOAD(OPND2, EVALREG, 2)
          // OPNDTOACC
          ;

          PSF1(IRSB, 0, 0)
          // ANDNEGATEIT
          ;

          GRUSE[(EVALREG) - (0)] = 0;
        }
        // SLL

      SW_29:

        if (OPND2 >> 4 == 6)
          SHORTEN(OPND2)
          // LONINTTOINT
          ;

        goto BINOP;
      // MULT
      SW_24:

        goto BINOP;
      // INTEGERDIVISION
      SW_25:

        if (!(TYPE == 1)) goto F24;
        goto BINOP;
      // NORMALDIVISION
      SW_26:

        goto BINOP;
      // EXPINREALEXPRSN
      SW_30:

        if (OPND1 & 7 == 1) FLOAT(OPND1, 0);
        if (OPND2 & 7 == 1) {
          STARSTAR();
          goto SUSE;
        }
        // REAL**REALBYSUBROUTINE

        REXP();
        COMM = 2;
        goto SUSE;
      // EXPININTEGERCONTEXT
      SW_37:

        STARSTAR();
        goto SUSE;
      // COMPARISONS
      SW_31:
        // DSIDEDCOMPARISONS

      SW_32:

        PTYPE = OPND1;
        // INT0ORLONGINT0
        if (OPND1 <= 1 && OPND1 == 0 && JJ == 31 && OPND1 == 0 ||
            PTYPE >> 4 == 5)
          goto Z1;

        if (OPND2 <= 1 && OPND2 == 0 && OPND2 == 0 || OPND2 >> 4 == 5) goto Z2;
        LOAD(OPND1, EVALREG, 2);
        LOAD(OPND2, EVALREG, 1);
        PUT();
        REGISTER[(EVALREG) - (0)] = 0;
        // NOTEBACKWARDSORFORWARDS
        BFFLAG = COMM - 1;

        MASK = FCOMP[(XTRA + 7 * BFFLAG) - (1)];
        // 2NDOPERANDMAYBENEEDEDIN
        COMM = 2;
        goto STRES;
        // DOUBLESIDEDANDISTHEREFORE
        // TAKENASTHE'RESULT'

      Z1:
        COMM = 3 - COMM;
      Z2:
        OPND = ;
        C = EVALREG;
        D = EVALREG ^ 7;
        if (OPND == 2 && GRUSE[(D) - (0)] = 9 &&
                GRINF1[(D) - (0)] & 0xFFFF == OPND ||
            GRINF1[(D) - (0)] >> 16 == OPND)
          C = D;
        LOAD(OPND, C, 2);
        REGISTER[(C) - (0)] = 0;
        MASK = FCOMP[(XTRA + 7 * COMM + 7) - (1)];
        if (TYPE == 1) MASK = MASK + 4;
        if (C == BREG) MASK = MASK + 8;
        COMM = 2;
        goto STRES;
      // SPECIALMHFORARRAYACCESS
      SW_33:
        // CURRENTDIMENSION

        C = OPND2 >> 24;
        // TOTALNOOFDIMENSIONS

        D = OPND2 >> 16 & 31;

        if (D == 1)
          VMY1();
        else
          VMY();
        // IFRESULTTHENPROTECTIT
        if (OPND1 > 1) OLINK[(LOADREG) - (0)] = OPERAND[(COMM) - (1)];

        if (C == 1) goto STRES;
        goto ANYMORE;
      //->LABMASKSANDLABASOPND2
      SW_34:
        // OPND1MIDDLEOFD-SIDED

        ABORT();
      // ASSIGN(=)
      SW_35:
        // ASSIGN(<-)

      SW_36:

        PT = OPND2;
        PP = OPND2;
        if (PT & 7 == 1 && OPND1 & 7 == 2) FAULT(24, 0);
        if (PT & 7 == 2 && OPND1 & 7 == 1) FLOAT(OPND1, OPND2);
        LOAD(OPND1, EVALREG, 2)
        // RHSTOACC
        ;

        REGISTER[(EVALREG) - (0)] = 2;
        C = PT >> 4;
        D = OPND1 >> 4;
        if (C < 5) C = 5;
        if (D < 5) D = 5;
        while (D < C) {
          LENGTHEN(OPND1);
          D = OPND1 >> 4;
        }
        while (C < D && TYPE == 1 && JJ != 36 || C < D - 1) {
          SHORTEN(OPND1);
          D = OPND1 >> 4;
        }
        P = PP;
        CNAME(1, 0)
        // STORECALL
        ;
        // SAVEINFOFORSTORE

        D = DISP;
        C = ACCESS;
        JJJ = AREA;

        KK = PREC;
        LOAD(OPND1, EVALREG, 2)
        // INCASESTACKED
        ;

        if (JJ == 36 && TYPE == 1) {
          if (3 <= XTRA && XTRA <= 4) {
            PF1(AND, 0, 0, (-1) >> (8 * (6 - XTRA)));
            GRUSE[(ACCR) - (0)] = 0;
          }
          if (KK <= 5 && PREC == 6) {
            PSF1(MPSR, 0, 17);
            GRUSE[(ACCR) - (0)] = 0;
          }
        }

        if (TYPE == 2 && KK < PREC)
          KK = STUH;
        else
          KK = ST;
        if (EVALREG == BREG) KK = STB;
        PSORLF1(KK, C, JJJ, D);
        if (C & 1 == 0 && STNAME > 0 || C == 3 && STNAME >> 16 > 0)
          NOTEASSMENT(EVALREG, JJ - 33, STNAME);
        if (C >= 2 && JJJ != 7) {
          // DRWILLBELOADEDSYSTORE

          if (STNAME > 0) {
            GRUSE[(DR) - (0)] = 7;
            GRINF1[(DR) - (0)] = STNAME & 0xFFFF;
          } else
            GRUSE[(DR) - (0)] = 0;
        }

        if (KK == STUH) GRUSE[(ACCR) - (0)] = 0;
        COMM = 1;
        goto STRES;
      FINISH:
        C = STK[(STPTR - 1) - (0)];
        OPERAND[(1) - (1)] = C;
        OPND1 = ;
        // BITS&BYTES->INTEGERS
        if (OPND1 >> 4 & 15 < 5) OPND1 = OPND1 & 0xF | 0x50;

        if (CONDFORM == 0) {
          // INCONDSONLYCCMATTERS
          // SKIPGETIINGOPNDINRIGHTFORM
          // ANDINTHERIGHTREGISTER

          D = MODE >> 4 & 7;
          if (D < 5) D = 5;
          if (MODE & 7 == 2 && OPND1 & 7 == 1) FLOAT(OPND1, D << 4);
          while (D<OPND1>> 4) SHORTEN(OPND1);
          while (D > OPND1 >> 4) LENGTHEN(OPND1);
          if (CONSTFORM == 0 || 2 <= OPND1 && OPND1 != 3) LOAD(OPND1, REG, 2);
        }
        // SETRESULTRECORD

        EXPOPND = OPND1;

        PTYPE = OPND1;
        TYPE = PTYPE & 7;
        PREC = PTYPE >> 4;
        if (TYPE == 2 && MODE & 7 == 1) FAULT(24, 0);
        if (OPND1 == 9) REGISTER[(OPND1 >> 4) - (0)] = 0;
        P = SAVEP;
        return;
        //

        void CHOOSE(int *CHOICE) {
          recfm *OPND1;
          recfm *OPND2;
          //(RD)

          OPND1 = ;
          OPND2 = ;
          CHOICE = 1;
          // NOREVERSESUBTRACTB
          if (JJ == 21 && EVALREG == BREG) return;

          if (OPCODE & 0xFF00FF00 == 0 ||
              OPCODE & 0xFF00FF != 0 && OPND2 == 9 ||
              OPND2 == 2 && GRUSE[(EVALREG) - (0)] = 9 &&
                  GRINF1[(EVALREG) - (0)] = OPND2 && OPND2 > 0)
            CHOICE = 2;
        };

        void LOAD(recfm * OPND, int REG, int MODE) {
          //***********************************************************************
          //*LOADOPERANDOPNDASDIRECTEDBYMODETOREGISTERREG*
          //*MODE=0LEAVEINSTOREIFPOSSIBLE*
          //*MODE=1LEAVEINSTOREIFSUITABLEFORRXINSTRUCTIONS*
          //*MODE=2LOADTOREGISTERREGARDLESS*
          //***********************************************************************
          int K;
          int KK;

          K = OPND;
          if (!(MODE == 2 || K == 2 || K <= 3 && MODE == 1)) return;
          PTYPE = OPND;
          TYPE = PTYPE & 15;
          PREC = PTYPE >> 4;
          if (K < 0 || K > 9) ABORT();
          goto SW[K];
        // CONSTANT<18BITS
        SW_0:
        LITCONST:

          AREA = 0;
          ACCESS = 0;
          if (PREC <= 5)
            DISP = OPND;
          else {
            DISP = OPND;
            if (!(DISP >= 0 && OPND == 0 || DISP < 0 && OPND == -1)) ABORT();
          }

          if (MODE == 2) {
            // FETCHTOREG

            if (GRUSE[(REG) - (0)] & 255 == 5 && 5 == PREC &&
                GRINF1[(REG) - (0)] = DISP) {
              if (REGISTER[(REG) - (0)] = 0) BOOTOUT(REG);

            } else
              GETINACC(REG, BYTES[(PREC) - (0)] >> 2, ACCESS, AREA, DISP);
            if (PREC <= 5) {
              GRUSE[(REG) - (0)] = 5;
              GRINF1[(REG) - (0)] = DISP;
            }
            goto LDED;
          }
          // CONSTBYTEINTEGERSAGAIN

          if (PREC == 3) OPND = 0x51;

          OPND = 7;
          OPND = AREA << 4 | ACCESS;
          OPND = DISP;
          return;
        // LONGCONSTANT
        SW_1:

          if (OPND == 0 && 0 == OPND && PREC <= 6) goto LITCONST;
        // 128BITCONSTANT
        SW_3:

          if (PREC == 7)
            KK = OPND;
          else
            KK = ;
          STORECONST(DISP, BYTES[(PREC) - (0)], KK);
          if (MODE != 2) {
            OPND = 7;
            OPND = PC << 4;
            OPND = DISP;
            return;
          }

          if (GRUSE[(REG) - (0)] & 255 == 6 && GRINF1[(REG) - (0)] = DISP) {
            if (REGISTER[(REG) - (0)] = 0) BOOTOUT(REG);

          } else
            GETINACC(REG, BYTES[(PREC) - (0)] >> 2, 0, PC, DISP);
          GRUSE[(REG) - (0)] = 6;
          GRINF1[(REG) - (0)] = DISP;
          goto LDED;
        // NAME
        SW_2:

          P = OPND;
          // COMPLEXNAMESMUSTBELOADED
          if (MODE == 2 || OPND != 0) goto LOAD;

          CNAME(5, REG);
          if (NEST >= 0) goto LDED;
          AREA = -1;
          AREA = AREACODE();
          OPND = PTYPE;
          OPND = 7;
          OPND = AREA << 4 | ACCESS;
          OPND = DISP;
          return;
        LOAD:
          CNAME(2, REG);
        // CLAIMTHEREGISTER
        LDED:
          REGISTER[(REG) - (0)] = 1;

          OLINK[(REG) - (0)] = ;
          if (PREC < 5) OPND = OPND & 15 | 0x50;
          OPND = 9;
          OPND = 0;
          OPND = REG << 4;
          if (REG == BREG && REGISTER[(ACCR) - (0)] & 1 != 0)
            REGISTER[(BREG) - (0)] = 2;
          return;
        // CONDITIONALEXPRESSION
        SW_4:
          // UNASSIGNED

        SW_5:
          // UNASSIGNED

        SW_6:

          ABORT();
        // I-RINASTACKFRAME
        SW_7:

          AREA = OPND >> 4;
          ACCESS = OPND & 15;
          DISP = OPND;
        PICKUP:
          GETINACC(REG, BYTES[(PREC) - (0)] >> 2, ACCESS, AREA, DISP);
          goto LDED;
        // I-RTHATHASBEENSTACKED
        SW_8:

          AREA = TOS;
          ACCESS = 0;
          DISP = 0;
          goto PICKUP;
        // I-RINAREGISTER
        SW_9:

          if (OPND >> 4 == REG) goto LDED;
          if (REG != ACCR) {
            if (!(REGISTER[(BREG) - (0)] = 0)) BOOTOUT(BREG);
            PF1(ST, 0, BREG, 0);

          } else
            GETINACC(ACCR, 1, 0, BREG, 0);
          REGISTER[(OPND >> 4) - (0)] = 0;
          OPND = REG << 4;
          GRUSE[(REG) - (0)] = 0;
          REGISTER[(REG) - (0)] = 1;
          OLINK[(REG) - (0)] = ;
        };

        void PUT(void) {
          //***********************************************************************
          //*THISROUTINEPLANTSCODETOPERFORMTHEBASIC*
          //*OPERATIONDEFINEDBYOPND1,OPND2&OPCODE*
          //***********************************************************************
          int CODE;
          int OCODE;

          CODE = OPCODE;
          if (COMM == 1) CODE = CODE >> 8;
          CODE = CODE & 255;
          OCODE = CODE;
          if (EVALREG == BREG) CODE = CODE - 0xC0;
          if (!(OPND1 == 9)) ABORT();
          PSORLF1(CODE, OPND2 & 15, OPND2 >> 4, OPND2);
          if (OCODE == IAD && GRUSE[(EVALREG) - (0)] = 9 && OPND2 == 0 &&
              OPND2 < 4095 && GRINF1[(EVALREG) - (0)] >> 16 == 0) {
            GRUSE[(EVALREG) - (0)] = 10;
            GRINF1[(EVALREG) - (0)] =
                GRINF1[(EVALREG) - (0)] & 0xFFFF | OPND2 << 16;

          } else {
            if (!(31 <= JJ && JJ <= 32)) GRUSE[(EVALREG) - (0)] = 0;
          }

          OLINK[(EVALREG) - (0)] = OPERAND[(COMM) - (1)];
        };

        void FLOAT(recfm * OPND, int OTHERPTYPE) {
          //***********************************************************************
          //*PLANTCODETOCONERTOPERANDFROMFIXEDTOFLOATING*
          //***********************************************************************

          if (OPND <= 1) {
            CVALUE = OPND;
            OPND = ;
            OPND = ;
            OPND = 1;

          } else {
            LOAD(OPND, ACCR, 2);
            if (OTHERPTYPE & 0xF0 == 0x70 && OPND & 0xF0 <= 0x50) {
              PSF1(IMYD, 0, 1);
              OPND = OPND & 15 | 0x60;
            }
            PSF1(FLT, 0, 0);
            GRUSE[(ACCR) - (0)] = 0;
          }

          OPND = OPND + 0x11;
          TYPE = 2;
        };

        void COERCET(recfm * OPND1, recfm * OPND2, int MODE) {
          //***********************************************************************
          //*MODE=1BOTHOPERANDSINTEGERELSEERROR*
          //*MODE=2FORCEBOTHOPERANDTOBEOFTYPEREAL*
          //*MODE=15BOTHOPERANDSTOBEOFLAGESTTYPE*
          //***********************************************************************
          int PT1;
          int PT2;

          PT1 = OPND1 & 7;
          PT2 = OPND2 & 7;
          if (MODE == 1 || MODE == 15 && PT1 == 1 && 1 == PT2) return;
          if (MODE == 1) {
            FAULT(24, 0);
            return;
          }
          if (PT1 == 1) FLOAT(OPND1, OPND2);
          if (PT2 == 1) FLOAT(OPND2, OPND1);
        };

        void COERCEP(recfm * OPND1, recfm * OPND2) {
          //***********************************************************************
          //*FORCEBOTHOPERANDTOTHESAMEPRECISIONBEFOREOPRNTN*
          //***********************************************************************
          int PREC1;
          int PREC2;

          PREC1 = OPND1 >> 4;
          PREC2 = OPND2 >> 4;
          while (PREC1 < PREC2) {
            LENGTHEN(OPND1);
            PREC1 = OPND1 >> 4;
          }
          //

          while (PREC2 < PREC1) {
            LENGTHEN(OPND2);
            PREC2 = OPND2 >> 4;
          }
        };

        void LENGTHEN(recfm * OPND) {
          //***********************************************************************
          //*INCREASEOPNDPRECISIONBYONESIZEATCOMPILETIMEIFPOSS*
          //***********************************************************************

          int TP;
          int PR;

          TP = OPND & 7;
          PR = OPND >> 4;
          if (OPND <= 1 && PR <= 4 + TP) {
            // LENGTHENCONSTANT

            if (TP == 1 && OPND <= 1) {
              // INTEGERCONSTANT

              OPND = OPND;
              if (OPND < 0)
                OPND = -1;
              else
                OPND = 0;

            } else {
              if (PR == 6) {
                TOAR8(R, );
                TOAR8(R + 8, 0);
                OPND = ;
                OPND = 3;
                R = R + 16;

              } else
                OPND = 0;
            }

          } else {
            // CODEPLANTINGREQRD

            LOAD(OPND, ACCR, 2);
            if (TP == 1)
              PSF1(IMYD, 0, 1);
            else
              PF1(RMYD, 0, PC, SPECIALCONSTS(1))
              // REALONE=X'41000000'
              ;

            GRUSE[(ACCR) - (0)] = 0;
          }

          OPND = ((PR + 1) << 4) + TP;
        };

        void SHORTEN(recfm * OPND) {
          //***********************************************************************
          //*PLANTCODETOREDUCEACCSIZE*
          //***********************************************************************

          int TY;
          int PR;
          int F;
          int I;
          int J;

          TY = OPND & 7;
          PR = OPND >> 4;
          F = OPND;
          if (F == 3) {
            // LONGLONGREALCONSTS

            for (I = 0; I != 3; I += 1) {
            Mk_AST_assignment:
              Var = -1;
            }
            OPND = J;
            // CONSTNOWIN_D&_XTRA
            OPND = 1;

            goto WAYOUT;
          }

          if (F <= 1) {
            if (TY == 2) goto WAYOUT;
            if (OPND == 0 && OPND >= 0 || OPND == -1 && OPND < 0) {
              OPND = OPND;
              goto WAYOUT;
            }
          }

          LOAD(OPND, ACCR, 2);
          if (PR == 7) {
            // SHORTENQUAD

            PF1(RDDV, 0, PC, SPECIALCONSTS(1));

          } else {
            if (TYPE == 1 && 1 == PARMARR) PSF1(ISH, 0, 32);
            if (PARMARR == 1 || TYPE != 1) PSF1(USH, 0, -32);
            if (REGISTER[(BREG) - (0)] = 0) {
              PF1(STUH, 0, BREG, 0);
              GRUSE[(BREG) - (0)] = 0;
            } else
              PSF1(MPSR, 0, 17)
              // ACSTO1WORD
              ;
          }

          GRUSE[(ACCR) - (0)] = 0;
        WAYOUT:
          OPND = ((PR - 1) << 4) + TY;
        };

        void EXTRACT(recfm * OPND, long int *VAL, long double *RVAL) {
          //***********************************************************************
          //*EXTRACTSACONTANTOPERANDRETURNINGREAL&INTVALUES*
          //***********************************************************************

          int TYPE;
          int PREC;
          int S;
          int I;
          int AD;

          TYPE = OPND;
          PREC = TYPE >> 4;
          TYPE = TYPE & 15;
          if (TYPE == 1) {
            if (PREC <= 5)
              VAL = OPND;
            else {
            Mk_AST_assignment:
              Var = -1;
            Mk_AST_assignment:
              Var = -1;
            }

            RVAL = VAL;

          } else {
            RVAL = 0;
            if (PREC == 7) {
              S = 15;
              AD = OPND;
            } else {
              S = 7;
              AD = ;
            }
            for (I = 0; I != S; I += 1) {
            Mk_AST_assignment:
              Var = -1;
            }
          }
        };

        void VMY1(void) {
          //***********************************************************************
          //*DOESVECTORMULTIPLIESFORONEDIMENSIONARRAYS*
          //***********************************************************************

          int OPNAME;
          int VUSE;
          int DVPOS;
          int DVNAME;
          int X;
          int Y;
          int DTYPE;
          int DPREC;
          int DACC;
          int DPTYPE;

          DPTYPE = XTRA >> 16;
          DVNAME = XTRA & 0xFFFF;
          DVPOS = OPND2 & 0xFFFF;
          if (DVPOS > 0 && OPND1 <= 1) {
            // CONSTITEM&DVFOLDIT

            X = OPND1;
            X = X - CTABLE;
            X = X * CTABLE;
            if (X < 0 || X >= CTABLE) FAULT2(50, X, DVNAME);
            //
            // IFARRAYBASEHASBEENSHIFTEDTOZEROELEMENTPUTBACKTHELBCORRN
            // NOWTHEBOUNDCHECKHASBEENCOMPUTED
            //
            if (PARMARR == 0 && 0 == PARMCHK && DPTYPE & 0xC0F <= 3)
              X = X + CTABLE * CTABLE;
            OPND1 = X;
            return;
          }

          OPNAME = -1;
          if (OPND1 == 2) OPNAME = OPND1;
          VUSE = DVNAME | OPNAME << 16;
          if (OPNAME >= 0 && GRUSE[(BREG) - (0)] = 14 &&
              GRINF1[(BREG) - (0)] = VUSE)
            goto DONE;
          if (PARMARR == 0 && 0 == PARMCHK && DVPOS > 0) {
            LOAD(OPND1, BREG, 2);
            X = CTABLE;
            if (X != 1) {
              PSF1(MYB, 0, X);
              GRUSE[(BREG) - (0)] = 0;
            }
            Y = X * CTABLE;
            if (DPTYPE & 0xC0F <= 3) {
              if (X != 1) goto DONE;
              goto OUT;
            }
            // TESTNAM=0WHENZEROADJSTD

            if (Y != 0) {
              PSF1(SBB, 0, Y);
              GRUSE[(BREG) - (0)] = 0;
            }
            goto DONE;
          }

          if (PARMARR == 0 && 0 == PARMCHK && DPTYPE & 0x300 == 0x200 ||
              DPTYPE & 0xC0F <= 3 || COMPILER != 0) {
            // IEARR=2ORNAM=0

            DTYPE = DPTYPE & 15;
            DPREC = DPTYPE >> 4 & 7;
            if (!(OPND1 <= 1)) LOAD(OPND1, BREG, 2);
            if (DTYPE >= 3 || DPREC == 4) {
              // PUTTHEREBYCANAME

              DACC = LIST;

              if (OPND1 <= 1) {
                OPND1 = OPND1 * DACC;
                return;
              }
              if (!(DACC == 1)) PSF1(MYB, 0, DACC);
              GRUSE[(BREG) - (0)] = 0;
              goto DONE;
            }

            if (OPND1 <= 1) return;
            LOADREG = BREG;
            goto OUT;
          }

          if (OPND1 == 9 && OPND1 >> 4 == ACCR) {
            PF1(ST, 0, TOS, 0)
            // ACCCANNOTBEUSEDINDVM
            ;

            CHANGERD(ACCR);
            REGISTER[(ACCR) - (0)] = 0;
          }
          //

          BASE = OPND2 >> 18;
          AREA = -1;
          GETINACC(DR, 2, 0, AREACODE(), (OPND2 & 0x1FFFF) + 8);
          //

          LOAD(OPND1, EVALREG, 0);
          if (OPND1 >> 4 >= 6) FAULT(24, 0);
          if (REGISTER[(BREG) - (0)] = 1 && OPND1 != 9 || OPND1 >> 4 != BREG) {
            OPND = ;
            OPND = 0;
            REGISTER[(BREG) - (0)] = 2;
            BOOTOUT(BREG);
          }

          AREA = OPND1 >> 4;
          ACCESS = OPND1 & 15;
          PSORLF1(OPCODE >> 8, ACCESS, AREA, OPND1);
          GRUSE[(BREG) - (0)] = 0;
        DONE:
          if (OPNAME >= 0) {
            GRUSE[(BREG) - (0)] = 14;
            GRINF1[(BREG) - (0)] = VUSE;
            GRINF2[(BREG) - (0)] = 0;
          }

        OUT:
          LOADREG = BREG;
          REGISTER[(LOADREG) - (0)] = 1;
          OPND1 = 9;
          OPND1 = LOADREG << 4;
        };

        void VMY(void) {
          //***********************************************************************
          //*DOESALLVECTORMULTIPLIESEXCEPTONEDIMENSION*
          //***********************************************************************

          if (OPND1 == 9 && OPND1 >> 4 == ACCR) {
            PF1(ST, 0, TOS, 0)
            // ACCCANNOTBEUSEDINDVM
            ;

            CHANGERD(ACCR);
            REGISTER[(ACCR) - (0)] = 0;
          }
          //

          if (C == D) {
            // TOPDIMENSIONLOADDVDES

            BASE = OPND2 >> 18;
            AREA = -1;
            GETINACC(DR, 2, 0, AREACODE(), (OPND2 & 0x1FFFF) + 8);
          }
          //

          LOAD(OPND1, EVALREG, 0);
          if (OPND1 >> 4 >= 6) FAULT(24, 0);
          if (C == D && REGISTER[(BREG) - (0)] = 1 && OPND1 != 9 ||
              OPND1 >> 4 != BREG) {
            OPND = ;
            OPND = 0;
            REGISTER[(BREG) - (0)] = 2;
            BOOTOUT(BREG);
          }

          AREA = OPND1 >> 4;
          ACCESS = OPND1 & 15;
          PSORLF1(OPCODE >> 8, ACCESS, AREA, OPND1);
          GRUSE[(BREG) - (0)] = 0;
          //

          LOADREG = ACCR;
          if (C == D)
            GETINACC(ACCR, 1, 0, 7, 0);
          else
            PF1(IAD, 0, BREG, 0);
          if (C == 1) {
            PF1(ST, 0, BREG, 0);
            REGISTER[(ACCR) - (0)] = 0;
            LOADREG = BREG;
          }

          REGISTER[(LOADREG) - (0)] = 1;
          OPND1 = 9;
          OPND1 = LOADREG << 4;
        };

        void CTOP(int *FLAG) {
          //***********************************************************************
          //*ANOPERATIONHASBEENFOUNDWHEREBOTHOPERANDSARECONSTANTS*
          //*THISROUTINEATTEMPTSTOINTERPRETTHISOPERATIONIFIT*
          //*CANBEDONESAFELY*
          //*ONEXITFLAG=0ifOPERATIONCARRIEDOUT*
          //***********************************************************************
          const int TRUNCMASK = 0x01300800;

          int K;
          int TYPEP;
          int PRECP;
          int OP;
          int TYPEPP;
          int VAL;
          int SVAL1;
          int SVAL2;

          long int VAL1;
          long int VAL2;

          long double RVAL1;
          long double RVAL2;

          if (_imp_onevent(1, 2)) {
            return;
          }

          TYPEP = TYPE;
          PRECP = PTYPE >> 4 & 15;
          OP = FLAG;
          EXTRACT(OPND1, VAL1, RVAL1);
          EXTRACT(OPND2, VAL2, RVAL2);
          SVAL1 = VAL1;
          SVAL2 = VAL2;
          if (TYPEP == 1 && OP == 37) goto ISW37;
          if (OP > 32) return;
          if (TYPEP == 2)
            goto RSW[OP];
          else
            goto ISW[OP];
        //
        ISW_10:

          VAL1 = ~VAL1;
        INTEND:
          if (PRECP == 6) {
            OPND1 = VAL1 >> 32;
            OPND1 = VAL1;
            FLAG = 0;

          } else {
            VAL = VAL1;
            // NOARITHOFLOWCONDITION
            if (VAL == VAL1 || 1 << OP & TRUNCMASK == 0) {
              FLAG = 0;
              OPND1 = VAL;
            }
          }

          if (FLAG == 0) {
            OPND1 = PRECP << 4 | 1;
            if (0xFFFE0000 <= VAL1 && VAL1 <= 0x1FFFF)
              OPND1 = 0;
            else
              OPND1 = 1;
          }

          return;
        // INTEGERNEGATE
        ISW_11:

          VAL1 = -VAL1;
          goto INTEND;
        // INTEGERABS
        ISW_13:

          VAL1 = ;
          goto INTEND;
        // INTEGERFLOAT
        ISW_12:

          RVAL1 = VAL1;
          PRECP = 5 + XTRA;
          goto REALEND;
        // STRETCHREAL
        RSW_14:

          PRECP = PRECP + 1;
        REALEND:
          OPND1 = 1;
          OPND1 = ;
          OPND1 = ;
          if (PRECP == 7) {
            OPND1 = 3;
            OPND1 = ;
            for (K = 0; K != 15; K += 1) {
              A = ;
              R = R + 1;
            }
          }

          FLAG = 0;
          OPND1 = 16 * PRECP + 2;
          return;
        // STRETCHINTEGER
        ISW_14:
          // FLOATREAL

        RSW_12:

          ABORT();
        // ADD
        ISW_20:

          VAL1 = VAL1 + VAL2;
          goto INTEND;
        // MINUS
        ISW_21:

          VAL1 = VAL1 - VAL2;
          goto INTEND;
        // EXCLUSIVEOR
        ISW_22:

          VAL1 = VAL1 ^ VAL2;
          goto INTEND;
        // OR
        ISW_23:

          VAL1 = VAL1 | VAL2;
          goto INTEND;
        // MULT
        ISW_24:

          VAL1 = VAL1 * VAL2;
          goto INTEND;
        /// DIVISION
        ISW_26:
          return;
          ////DIVISION

        ISW_25:
          if (VAL2 == 0) return;

          VAL1 = VAL1 / VAL2;
          goto INTEND;
        // AND
        ISW_27:

          VAL1 = VAL1 & VAL2;
          goto INTEND;
        // SLL
        ISW_29:

          if (PRECP == 6)
            VAL1 = VAL1 << SVAL2;
          else
            VAL1 = SVAL1 << SVAL2;
          goto INTEND;
        // SRL
        ISW_28:

          if (PRECP == 6)
            VAL1 = VAL1 >> SVAL2;
          else
            VAL1 = SVAL1 >> SVAL2;
          goto INTEND;
          // COMPARISONS

        ISW_31:
        ISW_32:
          // REALCOMPARISONS

        RSW_31:
        RSW_32:

          BFFLAG = COMM - 1;
          MASK = FCOMP[(XTRA + 7 * BFFLAG) - (1)];
          COMM = 2;
          FLAG = 0;
          if (TYPE == 2) goto RCOMP;
          if (MASK & 8 != 0 && VAL1 == VAL2 || MASK & 4 != 0 && VAL1 < VAL2 ||
              MASK & 2 != 0 && VAL1 > VAL2)
            MASK = 15;
          else
            MASK = 0;
          return;
        RCOMP:
          if (MASK & 8 != 0 && RVAL1 == RVAL2 ||
              MASK & 4 != 0 && RVAL1 < RVAL2 || MASK & 2 != 0 && RVAL1 > RVAL2)
            MASK = 15;
          else
            MASK = 0;
          return;
        // NEGATE
        RSW_11:

          RVAL1 = -RVAL1;
          goto REALEND;
        // ABS
        RSW_13:

          RVAL1 = ;
          goto REALEND;
        // ADD
        RSW_20:

          RVAL1 = RVAL1 + RVAL2;
          goto REALEND;
        // SUBTRACT
        RSW_21:

          RVAL1 = RVAL1 - RVAL2;
          goto REALEND;
        // MULT
        RSW_24:

          RVAL1 = RVAL1 * RVAL2;
          goto REALEND;
        // DIVISION
        RSW_26:
          // AVOIDDIVBYZERO

          if (RVAL2 == 0) return;

          RVAL1 = RVAL1 / RVAL2;
          goto REALEND;
        //'**'WITH2INTEGEROPERANDS
        ISW_30:
          //'****'WITH2INTEGEROPERAND

        ISW37:

          if (!(0 <= VAL2 && VAL2 <= 63)) return;
          VAL2 = 1;
          while (SVAL2 > 0) {
            VAL2 = VAL2 * VAL1;
            SVAL2 = SVAL2 - 1;
            if (VAL2 !=) return;
          }
          VAL1 = VAL2;
          goto INTEND;
        RSW_22:
        RSW_23:
        RSW_25:
        RSW_27:
        RSW_28:
        RSW_29:
        };

        void REXP(void) {
          //***********************************************************************
          //*CALLSAPERMROUTINETOPERFORMREAL**REAL*
          //***********************************************************************

          int I;
          int PR;

          recfm *OPND;
          //(RD)

          if (REGISTER[(BREG) - (0)] > 0) BOOTOUT(BREG);
          for (I = 1; I != 2; I += 1) {
            OPND = ;
            if (!(I == 1 && OPND == 8)) LOAD(OPND, ACCR, 2);
            PR = OPND >> 4;
            if (PR < 6) LENGTHEN(OPND);
            if (PR > 6) SHORTEN(OPND);
          }
          PPJ(0, 17);
        };

        void STARSTAR(void) {
          //***********************************************************************
          //*PLANTIN-LINECODEFOREXPONENTIATION*
          //*IMPALLOWSEXPONENTSININTEGEREXPRESSIONSFROM0-63AND*
          //*INREALEXPRESSIONSFROM-255TO+255*
          //***********************************************************************
          int TYPEP;
          int PRECP;
          int WORK;
          int C;
          int EXPWORK;
          int VALUE;
          // INSPECTTHEOPERAND

          PTYPE = OPND1;

          UNPACK();
          TYPEP = TYPE;
          PRECP = PREC;
          if (TYPEP == 2)
            OPCODE = 0xFA;
          else
            OPCODE = 0xEA;
          VALUE = 0;
          // EXPONENTIS#0ANDCONSTANT
          if (OPND2 == 0 && 1 <= OPND2 && OPND2 <= 63 * TYPE) VALUE = OPND2;

          LOAD(OPND1, ACCR, 2)
          // FETCHOPERANDTOACC
          ;

          if (TYPEP == 2 && PRECP == 5) {
            LENGTHEN(OPND1);
            PRECP = 6;
          }
          //
          // OPTIMISE**2**3AND**4
          //

          if (2 <= VALUE && VALUE <= 4) {
            PF1(ST, 0, TOS, 0);
            if (VALUE == 3) PF1(ST, 0, TOS, 0);
            PF1(OPCODE, 0, TOS, 0);
            if (VALUE == 4) PF1(ST, 0, TOS, 0);
            if (VALUE > 2) PF1(OPCODE, 0, TOS, 0);
            GRUSE[(ACCR) - (0)] = 0;
            return;
          }
          //
          // OTHERWISESTOREOPERANDIN'WORK'ANDGETHOLDOFEXPONENT
          //

          GETWSP(WORK, BYTES[(PRECP) - (0)] >> 2);
          if (TYPEP == 2) GETWSP(EXPWORK, 1);
          PSF1(ST, 1, WORK);
          REGISTER[(ACCR) - (0)] = 0;
          // LABELFORJUMPINGOUT
          PLABEL = PLABEL - 1;

          if (OPND2 >> 4 == 6)
            SHORTEN(OPND2)
            // LONGEXPONENT
            ;

          LOAD(OPND2, BREG, 2)
          // EXPONENTTOANYREGISTER
          ;

          if (TYPEP == 2) PSF1(STB, 1, EXPWORK);
          //
          // GET'1'INTOACCINAPPROPIATEFORM
          //

          GETINACC(ACCR, BYTES[(PRECP + 1 - TYPEP) - (0)] >> 2, 0, 0, 1);
          if (TYPEP == 2) PSF1(FLT, 0, 0);
          //
          // IFEXPONENTNOTKNOWNATCOMPILETIMETOBE+VECONSTANTMUST
          // ALLOWFORZERO:-XX**0=1FORALLXX
          // ALSOALLOWFORX**(-N)WHICHIS1/(X**N)FORALLX&N
          //
          if (VALUE == 0) {
            // NOT+VECONSTANT

            ENTERJUMP(28, PLABEL, 0b11)
            // J(B=0)ENDOFEXPROUTINE
            ;

            if (TYPEP == 2) {
              PF3(JAT, 13, 0, 4)
              // J*+4IFB>0
              ;

              PSF1(SLB, 0, 0);
              PF1(SBB, 0, TOS, 0);
            }
            //
            // INCHECKINGMODEPLANTCODETOCHECKRANGEOFEXPONENT
            //

            if (PARMOPT == 1) {
              if (TYPEP == 1)
                PPJ(30, 7)
                // JUMPB<0
                ;

              PSF1(CPB, 0, 64 * TYPEP * TYPEP - 1);
              PPJ(2, 7);
            }
          }

          C = CA;
          PSF1(OPCODE, 1, WORK);
          PSF1(DEBJ, 0, (C - CA) / 2);
          //
          // FORREALEXPONENTSCHECKIFNEGATIVEANDEVALUATEINVERSE
          //

          if (VALUE == 0 && TYPEP == 2) {
            PSF1(LB, 1, EXPWORK)
            // LBONORIGINALEXPONENT
            ;

            ENTERJUMP(46, PLABEL, 0b11)
            // BPENDOFEXPROUTINE
            ;

            if (PRECP < 7)
              PF1(RRDV, 0, PC, SPECIALCONSTS(1));
            else {
              PSF1(SLSD, 0, 1);
              PSF1(FLT, 0, 0);
              PF1(RDV, 0, TOS, 0);
            }
          }
          //
          // ALLOVER.REALRESULTSAREINFRWORK.INTRESULTSINGRWORK+1
          // FREEANDFORGETANYOTHERREGISTERS
          //
          TYPE = TYPEP;
          PREC = PRECP;
          REGISTER[(BREG) - (0)] = 0;
          GRUSE[(ACCR) - (0)] = 0;
          GRUSE[(BREG) - (0)] = 0;
          REGISTER[(ACCR) - (0)] = 1;
          OPND1 = 16 * PREC + TYPE;
          OPND1 = 0;
          OPND1 = ACCR;
          C = ENTERLAB(PLABEL, 0b11)
              // LABELATENDOFEXPROUTINE
              ;
        };
      };
      // OFROUTINEEXPOP

      void REDUCEENV(int *HEAD) {
        //***********************************************************************
        //*HEADHASANENVIRONMENT-THISROUTINEREMOVESANYTHING*
        //*INCOMPATIBLEWITHTHECURRENTREGISTERSTATE*
        //***********************************************************************
        int NEWHEAD;
        int I;
        int J;
        int K;
        int REG;
        int USE;

        NEWHEAD = 0;
        while (HEAD != 0) {
          POP(HEAD, I, J, K);
          REG = K >> 8;
          USE = K & 255;
          if (USE == GRUSE[(REG) - (0)] & 255 && I == GRINF1[(REG) - (0)])
            PUSH(NEWHEAD, I, J, K);
        }
        HEAD = NEWHEAD;
      };

      int CCOND(int CTO, int IU, int FARLAB) {
        //***********************************************************************
        //*COMPILES<IU><SC><RESTOFCOND>then<UI1>else<UI2>*
        //*CTO=0JUMPTOFARLABMUSTBEPLANTEDIFCONDUNCONDITIONAL*
        //*CTO#0JUMPMAYBEOMITTED*
        //*IU=1FORif=2FORUNLESS.FARLABTOGOONUI2*
        //*THEROUTINEMAKESFOURPASSESTHROUGHTHECONDITION*
        //*PASS1ANALYSESTHESTRUCTUREANDDECIDESTOBRANCHONTRUE*
        //*(TF=2)ORONFALSE(TF=1)FOREACHCOMPARISON*
        //*PASS2WORKSOUTWHERETHEBRANCHESOFPASS1SHOULDGOTO*
        //*PASS3ASSIGNSLABELNUMBERS*
        //*PASS4EVALUATESCOMPARISIONSANDPLANTSTHECODE*
        //**
        //*ONENTRYPPOINTSTO<SC>IN<HOLE><SC><RESTOFCOND>*
        //*RESULT=0CONDITIONCOMPILED*
        //*RESULT=1UNCONDITIONALLYTO1STALTERNATIVE*
        //*RESULT=2UNCONDITIONALLYTO2NDALTERNATIVE(FARLAB)*
        //***********************************************************************
        auto void WRITECONDLIST(void);
        auto void SKIPSC(int REVERSED);
        auto void SKIPCOND(int REVERSED);
        auto int CCOMP(void);
        auto void JUMP[(int MASK) - (0)];
        auto void LABUNUSED(int LAB);
        auto void OMITTO(int LAB);
        //
        // FCOMPHASBCMASKSFOREACHSTRINGCOMPARATOR.
        // THEFIRST7ARETOBRANCHIFTRUEWITHNORMALCOMPARISON
        // THESECONDSEVENARETOBRANCHIFTRUEWITHBACKWARDSCOMPARISON
        //
        const char FCOMP[((21) - (1) + 1) - (1)] = 8,
            13, 5, 7, 10, 2, 7, 8, 10, 2, 7, 13, 5, 7, 27, 0, 0, 43, 0, 0, 43;
        //

        int PIN;
        int PP;
        int II;
        int L;
        int CPTR;
        int CMAX;
        int LL;
        int BITMASK;
        int LA;

        typedef struct CF {
          char SP;
          int SP2;
        } CF;
        
        CF CLIST[(30) - (1) + 1]; //(CF)

        CF *C1;
        CF *C2; //(CF)
        
        //
        // PASS1.ANALYSESTHECONDITION
        //
        // SAVEINITIALARPOINTER
        PIN = P;
        // LEVEL=3TOALLOW2LOWER

        CPTR = 1;
        L = 3;
        // SETUPRECORDFORFIRSTCMPARSN

        C1 = CLIST[(CPTR) - (1)];

        C1 = 0;
        SKIPSC(0)
        // SKIPTHE1STCMPARSN
        ;

        SKIPCOND(0)
        // ANDANYand/orCLAUSES
        ;
        // LEVEL=-1FORif/thenENTRY

        C1 = 2;

        C1 = IU;
        CMAX = CPTR + 1;
        C1 = CLIST[(CMAX) - (1)];
        C1 = 0;
        // LEVEL=-2FORELSEENTRY
        C1 = 1;
        // C1_REVNEVERSETHERE(PDSHOPES)

        C1 = 3 - IU;

        C1 = FARLAB;
        // SAVEFINALARPOINTER
        PP = P;

        if (CMAX > 29)
          FAULT(209, 0)
          // TOOCOMPLICATED
          ;
        //
        // PASS2WORKSOUTWHERETOJUMPTO
        // THEJUMPISFORWARDTOTHESTARTOFTHECLAUSEWITHADIFFERENT
        // CONNECTOR(AND/OR)PROVIDEDTHISISATALOWERLEVELTHANTHEBRANCH
        // ANDALSOATALOWERLEVELTHANTHELOWESTPOINTREACHEDENROUTE
        //
        // ALSOCONTAINSPASS3(TRIVIAL)
        // ASSIGNLABELSWHERELABUSHOWSTHEYAREREQUIRED
        //
        for (CPTR = 1; CPTR != CMAX - 1; CPTR += 1) {
          C1 = CLIST[(CPTR) - (1)];
          // LLFORLOWESTLEVELENROUTE
          L = C1;
          LL = L;

          for (II = CPTR + 1; II != CMAX + 1; II += 1) {
            C2 = CLIST[(II) - (1)];
            if (C1 != C2 && C2 < LL) break;
            if (C2 < LL) LL = C2;
          }
          // CLAUSETOJUMPTO
          C1 = II;

          C2 = C2 + 1;
          if (C1 != 0 || C1 == 8) {
            // D-SIDEDORRESLN
            // REQIUIRESALABELONTHE
            // THENEXTSIMPLECONDITION

            C1 = C1 + 1;
          }

          if (C1 != 0 && C1 <= 0) {
            PLABEL = PLABEL - 1;
            C1 = PLABEL;
          }
        }
        //
        // PASS4GENERATETHECODE
        // MAINTAINBITMASKTOHELP.2**0JUMPTOFARLABPLANTED
        // 2**1JUMPTOINTERMEDIATELABPLANTED
        //
        if (DCOMP == 1) WRITECONDLIST();
        BITMASK = 0;
        CPTR = 1;
        do {
          C1 = CLIST[(CPTR) - (1)];
          LA = CCOMP();
          if (LA != 0) {
            OMITTO(LA);
            if (CPTR >= CMAX) {
              if (CTO == 0) ENTERJUMP(15, LA, 0b11);
              return 2;
            }

            C1 = CLIST[(CPTR) - (1)];
          }

          if (C1 > 0) II = ENTERLAB(C1, 0b11);
          CPTR = CPTR + 1;
          if (CPTR >= CMAX) break;
        } while (1);
        //

        P = PP;
        if (BITMASK & 1 == 0) return 1;
        return 0;
        void LABUNUSED(int LAB) {
          //***********************************************************************
          //*ALABELISNOTJUMPEDTOASCONDITIONALWAYSFALSE*
          //*REMOVEITFROMLIST*
          //***********************************************************************
          int I;

          recfm *C1;
          //(CF)

          for (I = CPTR; I != CMAX - 1; I += 1) {
            C1 = CLIST[(I) - (1)];
            if (C1 == LAB) {
              // COUNTDOWNUSECOUNT

              C1 = C1 - 1;

              if (C1 == 0) C1 = 0;
              return;
            }
          }
        };

        void OMITTO(int LAB) {
          //***********************************************************************
          //*AJUMPTURNSOUTTOBEUNCONDITIONAL.OMITCODEFORSKIPPEDBIT*
          //***********************************************************************

          recfm *C1;
          //(CF)

          do {
            C1 = CLIST[(CPTR) - (1)];
            if (C1 > 0) {
              if (C1 == LAB) return;
              JUMP[(15) - (0)];
              return;
            }

            CPTR = CPTR + 1;
            if (CPTR >= CMAX) break;
          } while (1);
        };

        void SKIPSC(int REVERSED) {
          //***********************************************************************
          //*REVERSED=1FORRECURSIVECALLINnot(SC)*
          //*SKIPSOVERASIMPLECONDITION.PONALTOF<SC>*
          //***********************************************************************
          int ALT;

          ALT = A;
          P = P + 1;
          goto SCALT[ALT];
        //<EXP><COMP><EXP><SECONDSIDE>
        SCALT_1:

          C1 = P - PIN;
          SKIPEXP();
          C1 = A;
          C1 = 3 * REVERSED;
          P = P + 1;
          C1 = P - PIN;
          SKIPEXP();
          if (A == 2)
            P = P + 1;
          else {
            // DEALWITH2NDHALFOFD-SIDED

            C1 = A;

            P = P + 2;
            SKIPEXP();
          }

          return;
        //'('<SC><RESTOFCOND>')'
        SCALT_2:

          L = L + 1;
          SKIPSC(REVERSED);
          SKIPCOND(REVERSED);
          L = L - 1;
          return;
        // not(SC)
        SCALT_3:

          SKIPSC(REVERSED ^ 1);
        };
        // OFROUTINESKIPSC

        void SKIPCOND(int REVERSED) {
          //***********************************************************************
          //*SKIPSOVER<RESTOFCOND>*
          //***********************************************************************

          int ALT;
          int ALTP;
          // 1=and<ANDC>,2=or<ORC>,3=NULL

          ALT = A;

          P = P + 1;
          if (ALT != 3) {
            // NULLALTERNATIVENOTHINGTODO
            do {
              // UNTILNOMORE<SC>S

              C1 = L;
              C1 = ALT;
              C1 = C1 ^ (3 * REVERSED);
              CPTR = CPTR + 1;
              C1 = CLIST[(CPTR) - (1)];
              C1 = 0;
              SKIPSC(REVERSED);
              ALTP = A;
              P = P + 1;
            } while (!(ALTP == 2));
          }
        };

        void WRITECONDLIST(void) {
          const _imp_string CM[(10) - (0) + 1] = "     ",
              "    =", "   >=", "    >", "    #", "   <=", "    <",
              "   \=", "   ->", "   ==", "  \==";

          ;
          for (CPTR = 1; CPTR != CMAX; CPTR += 1) {
            C1 = CLIST[(CPTR) - (1)];
            ;
            ;
            ;
            ;
            ;
            ;
            ;
            ;
            ;
            ;
          }
        };

        int CCOMP(void) {
          //***********************************************************************
          //*COMPILESACOMPARISION:THREEDIFFERENTCASES*
          //*1)ARITHMETICEXPRESSIONSEXPOPISUSED*
          //*2)STRINGEXPRESSIONAD-HOCCODEPLANTEDBYTHISROUTINE*
          //*3)RESOLUTIONS-CRESCANBEUSED*
          //*4)EQUIVALENCESINTEGERCOMPARISONSONADDRESSES*
          //*RESULT=0CODECOMPILED*
          //*RESULT#0UNCODITIONALJUMPTOLAB=RESULT*
          //***********************************************************************
          auto void ACOMP(int TF, int DS);
          auto void ADCOMP(int TF);
          auto void SCOMP(int DS, int TF, int LAB, int *WA);
          int HEAD1;
          int HEAD2;
          int NOPS;
          int TE1;
          int TE2;
          int TEX1;
          int TEX2;
          int P1;
          int P2;
          int FEXIT;
          int IEXIT;
          int CMP;
          int WA1;
          int WA2;
          int WA3;
          int BOT1;
          int BOT2;
          //

          HEAD1 = 0;
          HEAD2 = 0;
          NOPS = 0;
          BOT1 = 0;
          BOT2 = 0;
          // FINALEXIT
          FEXIT = CLIST[(C1) - (1)];
          // INTERMEDIATEEXIT(D-SIDEDETC)

          IEXIT = FEXIT;

          if (C1 ^ C1 == 2 && C1 == 8 || C1 != 0) IEXIT = C1;
          //

          P = PIN + C1;
          P2 = P;
          P1 = PIN + C1;
          if (C1 == 8) {
            // CONDITIONALRESOLUTION
            // NBCRESBRANCHESONFALSE!!

            P = P1;
            if (A == 4 && A == 1) {
              P = P + 5;
              CNAME(2, DR)
              // LHSTRINGTODR
              ;

              if (A == 2) {
                if (TYPE != 5) {
                  FAULT2(71, 0, FROMAR2(P1 + 5));
                  return 0;
                }
                P = P2;
                CRES(IEXIT)
                // FAILURES->IEXIT
                ;

                if (IEXIT == FARLAB)
                  BITMASK = BITMASK | 1;
                else
                  BITMASK = BITMASK | 2;
                if (C1 ^ C1 == 2) JUMP[(15) - (0)];
                return 0;
              }
            }

            FAULT2(74, 0, 0);
            return 0;
          }

          if (C1 > 8) goto ADRCOMP;
          MASK = FCOMP[(C1) - (1)];
          TE2 = TSEXP(TEX2);
          if (TYPE == 5) goto STR;
          if (!(TE2 == 1)) goto ARITH;
          P = P1;
          TE1 = TSEXP(TEX1);
          if (TYPE == 5) goto STR;
        // ARITHMETICCOMPARISIONS
        ARITH:

          P = P1 + 3;
          TORP(HEAD1, BOT1, NOPS)
          // FIRSTEXPRESSIONTOREVERSEPOL
          ;

          CMP = C1;
          P = P2 + 3;
          if (C1 != 0) {
            // IFD-SIDEDDEALWITHMIDDLE

            ACOMP(1, 1)
            // BRANCHIEXITifFALSE
            ;

            if (MASK == 15) return IEXIT;
            JUMP[(MASK) - (0)];
            // TOTHETHIRDEXPRSN
            P = P + 5;
            // COMPARATORNO2

            CMP = C1;
          }
          //

          ACOMP(C1 ^ C1, 0)
          // SECONDORONLYCOMPARISION
          ;

          if (MASK == 15) return FEXIT;
          JUMP[(MASK) - (0)];
          return 0;
        // STRINGCOMPARISIONS
        STR:
          // SOMECAREISNEEDEDINFREEING
          // STRINGWK-AREASSETBYCSTREXP

          P = P1;
          WA1 = 0;
          WA2 = 0;
          WA3 = 0;
          if (C1 == 0 && 7 <= FCOMP[(C1) - (1)] && FCOMP[(C1) - (1)] = 8 &&
              A == 4 && A == 2 && A == 0x35 && A == 0 && A == 2) {
            CSTREXP(0, DR);
            MASK = FCOMP[(C1 + 14) - (1)];
            if (C1 ^ C1 == 1) MASK = REVERSE(MASK);
            JUMP[(MASK) - (0)];
            return 0;
          }

          CSTREXP(16, ACCR)
          // DONOTFREEWK-AREA
          ;
          // SAVEADDRESSOFWK-AREA

          WA1 = VALUE;

          CMP = C1;
          P = P2;
          //

          if (C1 != 0) {
            // D-SIDEDDEALWITHMIDDLE

            SCOMP(1, 1, IEXIT, WA2);
            P = P + 2;
            CMP = C1;
            if (WA1 != 0) {
              RETURNWSP(WA1, 256);
              WA1 = 0;
            }
          }
          //

          SCOMP(0, C1 ^ C1, FEXIT, WA3);
          for (CMP = ; CMP != ; CMP += 4) {
            if (!= 0) RETURNWSP(, 256);
          }
          return 0;
        // ADRESSCOMPARISONS
        ADRCOMP:

          ADCOMP(C1 ^ C1);
          JUMP[(MASK) - (0)];
          return 0;
          void ADCOMP(int TF) {
            //***********************************************************************
            //*COMPILESAN==ORADDRESSCOMPARISONWHICHCANNOTBE*
            //*DOUBLESIDED.BETTERCODECOULDBEGENERATEDFORTHE*
            //*MOSTCOMMONCASEIEPOINTERNAME==VARIABLE*
            //************************************************************************
            int TYPEP;
            int PRECP;
            int LHNAME;
            int RHNAME;
            int FNAME;

            recfm R;
            //(RD)

            LHNAME = A << 8 | A;
            FNAME = RHNAME;
            RHNAME = A << 8 | A;
            if (!(A == 4 && A == 1)) goto FLT;
            P = P1 + 5;
            CNAME(4, ACCR);
            // NORESTOFEXPR
            if (!(A == 2)) goto FLT;

            TYPEP = TYPE;
            PRECP = PREC;
            REGISTER[(ACCR) - (0)] = 1;
            OLINK[(ACCR) - (0)] = ;
            R = 1;
            R = ACCR << 4;
            R = 9;
            //

            FNAME = LHNAME;
            if (!(A == 4 && A == 1)) goto FLT;
            P = P2 + 5;
            CNAME(4, ACCR);
            // NORESTOFEXPR
            if (!(A == 2)) goto FLT;

            if (!(TYPEP == TYPE && PRECP == PREC)) FAULT2(83, LHNAME, RHNAME);
            PF1(ICP, 0, TOS, 0);
            if (C1 == 10)
              MASK = 7;
            else
              MASK = 8;
            if (TF == 1) MASK = REVERSE(MASK);
            return;
          FLT:
            REGISTER[(ACCR) - (0)] = 0;
            FAULT2(80, 0, FNAME);
            MASK = 7;
          };

          void ACOMP(int TF, int DS) {
            //***********************************************************************
            //*TYPE&PRECDEFINETHEEXPRSNINREVERSEPOLISHINHEAD1*
            //*THISROUTINECONVERTSTHENEXTEXPRSNTOREVERSEPOLISHAND*
            //*ADDSOPERATORSFORTYPECHANGING(IFREQ)CMPRSNANDJUMP*
            //***********************************************************************
            int PRECP;
            int TYPEP;
            int REG;

            PRECP = PTYPE >> 4 & 15;
            TYPEP = TYPE;
            //
            // ADDOPERATORATBOTTOM.EITHERCOMPARE(31)ORDSCOMPARE(32)
            //

            PUSH(HEAD2, 31 + DS, CMP, 0);
            BOT2 = HEAD2;
            // FLAGCOMPARE
            NOPS = (NOPS + 1) | 1 << 31;
            //
            // CONVERTNEXTEXPRSNTOREVERSEPOLISHANDTOTHESAMETYPEASTHE
            // FIRSTIFPOSSIBLE.MODE=0INTEGERIFPOSSIBLE,=2REAL,=3LONGREAL
            //
            TORP(HEAD2, BOT2, NOPS);
            if (TYPEP > TYPE) TYPE = TYPEP;
            // CONCAT(HEAD1,HEAD2)

            ASLIST[(BOT1) - (0)] = HEAD2;
            BOT1 = BOT2;
            BOT2 = 0;
            HEAD2 = 0;
            EXPOP(HEAD1, -1, NOPS, 256 + 16 * PRECP + TYPE)
            // PLANTTHECODE
            ;
            // CLEARLIST(HEAD1)

            ASLIST[(BOT1) - (0)] = ASL;
            ASL = HEAD1;
            HEAD1 = 0;
            if (DS != 0) {
              PUSH(HEAD1, , EXPOPND, EXPOPND);
              BOT1 = HEAD1;
              if (EXPOPND == 9) {
                REG = EXPOPND >> 4;
                REGISTER[(REG) - (0)] = 1;
                OLINK[(REG) - (0)] = ;
              }
            }

            if (TF == 1) MASK = REVERSE(MASK);
          };

          void SCOMP(int DS, int TF, int LAB, int *WA) {
            //***********************************************************************
            //*1STSTRINGISDEFINEDBY(ACCR)*
            //*THISROUTINEEVALUATESTHENEXTSTRINGEXPRSANDPERFORMS*
            //*THECOMPARISON&BRANCH.*
            //*DS=0UNLESSTHISCOMPARISONISTHEFIRSTHALFOFADBLE-SIDED*
            //***********************************************************************
            int MASK;

            recfm R;
            //(RD)
            //

            REGISTER[(ACCR) - (0)] = 1;
            OLINK[(ACCR) - (0)] = ;
            R = 1;
            R = ACCR << 4;
            R = 9;
            MASK = FCOMP[(CMP) - (1)];
            if (TF == 1)
              MASK = REVERSE(MASK)
                  // REVERSEMASKTOJMPIFFALS
                  ;
            //

            CSTREXP(16, DR)
            // SAVEWK-AREA
            ;

            WA = VALUE;
            REGISTER[(ACCR) - (0)] = 0;
            if (R != 9) PF1(LSD, 0, TOS, 0);
            if (DS != 0) PF1(STD, 0, TOS, 0);
            PSF1(INCA, 0, 1);
            PSF1(IAD, 0, 1);
            PF2(CPS, 1, 1, 0, 0, 0);
            GRUSE[(ACCR) - (0)] = 0;
            GRUSE[(DR) - (0)] = 0;
            //
            // IFCC=8MUSTCHECKTHATACCSTRINGISEXHAUSTEDOTHERWISECHANGECC
            // TOGIVERESULTACC>DR.THISISBESTFIDDLEDUSINGISH.
            // CANSKIPTHISCHECKIFMASKISSUCHTHAT2**3&2**2BITSSETTHESAME
            //
            if (0 != MASK & 0xC && MASK & 0xC != 0xC) {
              PF3(JCC, 7, 0, 4);
              PSF1(USH, 0, -32);
              PSF1(ISH, 0, -24);
            }

            if (DS != 0)
              PF1(LSD, 0, TOS, 0)
              // DOESNOTCHANGECC
              ;

            JUMP[(MASK) - (0)];
          };
        };

        void JUMP[(int MASK) - (0)] {
          //***********************************************************************
          //*CALLSENTERJUMPWHILEMAINTAININGBITMASK*
          //***********************************************************************

          if (MASK == 0) {
            LABUNUSED(LAB);
            return;
          }
          ENTERJUMP(MASK, LAB, FLAGS);
          if (LAB == FARLAB)
            BITMASK = BITMASK | 1;
          else
            BITMASK = BITMASK | 2;
        };
      };
      // OFCCOND

      int REVERSE(int MASK) {
        //***********************************************************************
        //*REVERSETHEMASKFORAJCC(MASK<=15),JAT(>15)ORJAF(>31)*
        //***********************************************************************

        if (MASK > 15)
          MASK = MASK ^ 0x30;
        else
          MASK = MASK ^ 15;
        return MASK;
      };

      int ENTERLAB(int LAB, int FLAGS) {
        //***********************************************************************
        //*ENTERANEWLABELONTHELABELLISTFORTHECURRENTLEVEL*
        //*2**0OFFLAGS=1CONDITIONALENTRY*
        //*2**1OFFLAGS=1UPDATEENVIRONMENT*
        //*2**2OFFLAGS=1REPLACEENV=0MERGEENV*
        //*THELABELLIST*
        //*S1=USEBITS<<8!LABELADDR*
        //*S2=ENVIRONMENTLIST<<16!UNFILLEDJUMPSLIST*
        //*S3=LABNO-RESETTOFFFFWHENUSEDFORINTERNALLABELS*
        //*RESULT=1LABELENTERED*
        //*RESULT=0CONDITIONALLABELNOTREQUIRED*
        //***********************************************************************
        int CELL;
        int AT;
        int ENVHEAD;
        int JUMPHEAD;
        int INSTRN;
        int OLDCELL;
        int WORK;

        recfm *LCELL;
        //(LISTF)

        int *LHEAD;

        CELL = LABEL[(LEVEL) - (0)];
        OLDCELL = 0;
        while (CELL > 0) {
          LCELL = ASLIST[(CELL) - (0)];
          if (LCELL == LAB) break;
          OLDCELL = CELL;
          CELL = LCELL;
        }
        //

        if (CELL <= 0) {
          // LABELNOTKNOWN

          if (FLAGS & 1 == 0) {
            // UNCONDITIONALENTRY

            PUSH(LABEL[(LEVEL) - (0)], CA, 0, LAB);
            FORGET(-1);
            return 1;
          }

          return 0;
        }
        //
        // LABELHASBEENREFERENCED-FILLINITSADDRESS
        //

        if (LCELL & 0xFFFFFF != 0) {
          FAULT(2, LAB)
          // LABELSETTWICE
          ;

        } else {
          LCELL = 0x1000000 | CA;
        }
        //
        // SORTOUTENVIRONMENTS-ASDIRECTEDBYFLAGS
        //

        JUMPHEAD = LCELL;
        ENVHEAD = JUMPHEAD >> 16;
        JUMPHEAD = JUMPHEAD & 0xFFFF;
        if (FLAGS & 2 == 0) {
          FORGET(-1);
          CLEARLIST(ENVHEAD);

        } else {
          if (FLAGS & 4 == 0) REMEMBER();
          RESTORE(ENVHEAD);
          ENVHEAD = 0;
          if (FLAGS & 4 == 0) MERGEINFO();
        }
        //
        // NOWFILLJUMPSTOTHISLABEL-JUMPLISTFORMATGIVENIN'ENTER JMP'
        //

        while (JUMPHEAD != 0) {
          POP(JUMPHEAD, AT, INSTRN, WORK);
          PLUG(1, AT, INSTRN | (CA - AT) / 2, 4);
        }
        LCELL = 0;
        if (LAB > MAXULAB) {
          if (OLDCELL == 0)
            LHEAD = LABEL[(LEVEL) - (0)];
          else
            LHEAD = ASLIST[(OLDCELL) - (0)];
          POP(LHEAD, AT, AT, AT);
        }

        return 1;
      };

      void ENTERJUMP(int MASK, int LAB, int FLAGS) {
        //***********************************************************************
        //*IFLABHASBEENENCOUNTEREDTHENPLANTAJCCOTHERWISEENTER*
        //*THELABELINTHELABELLISTANDATTACHTHEJUMPTOITSOIT*
        //*CANBEPLANTEDWHENTHELABELISFOUND*
        //*THELABELLISTISDESCRIBEDUNDER'ENTER LAB'*
        //*THEJUMPSUB-LISTHASTHEFORM*
        //*S1=ADDROFJUMP*
        //*S2=INSTRN*
        //*S3=LINENOOFJUMPFORDIAGNOSTICS*
        //**
        //*FLAGSBITSSIGNIFYASFOLLOWS*
        //*2**0=1JUMPISKNOWNTOBESHORT*
        //*2**1=1ENVIRONMENTMERGEINGREQUIRED*
        //***********************************************************************
        int AT;
        int CELL;
        int J;
        int JJ;
        int LABADDR;
        int I;
        int ENVHEAD;
        int OLDENV;
        int JCODE;
        int INSTRN;

        recfm *LCELL;
        //(LISTF)

        ENVHEAD = 0;
        AT = CA;
        // NOMERGE
        if (LAB < MAXULAB) FLAGS = FLAGS & 0xFD;
        // SFORUSERLAB=LONG

        if (LAB < 21000) FLAGS = FLAGS & 0xFE;

        CELL = LABEL[(LEVEL) - (0)];
        while (CELL > 0) {
          LCELL = ASLIST[(CELL) - (0)];
          if (LAB == LCELL) break;
          CELL = LCELL;
        }
        INSTRN = MASK;
        if (INSTRN >> 8 == 0) {
          JCODE = JCC;
          if (MASK >= 16) JCODE = JAT;
          if (MASK >= 32) JCODE = JAF;
          INSTRN = JCODE << 24 | (MASK & 15) << 21;
          if (MASK == 15) INSTRN = JUNC << 24 | 3 << 23;
        }

        if (CELL <= 0) goto FIRSTREF;
        LABADDR = LCELL & 0xFFFFFF;
        if (LABADDR == 0) goto NOTYETSET;
        // FLAGLABELASUSED
        LCELL = LABADDR | 0x1000000;

        I = (LABADDR - CA) / 2;
        if (MASK == 15)
          PSF1(JUNC, 0, I);
        else
          PCONST(INSTRN | (I & 0x3FFFF));
        return;
      // FIRSTREFERENCETOANEWLABEL
      FIRSTREF:

        if (LAB > MAXULAB && FLAGS & 2 != 0) GETENV(ENVHEAD);
        PUSH(LABEL[(LEVEL) - (0)], 0x1000000, ENVHEAD << 16, LAB);
        CELL = LABEL[(LEVEL) - (0)];
        LCELL = ASLIST[(CELL) - (0)];
        goto CODE;
      // LABELREFERENCEDBEFORE
      NOTYETSET:

        if (LAB > MAXULAB && FLAGS & 2 != 0) {
          I = LCELL;
          OLDENV = I >> 16;
          REDUCEENV(OLDENV);
          LCELL = OLDENV << 16 | I & 0xFFFF;
        }
        // ACTUALLYPLANTTHEJUMP

      CODE:

        J = LCELL;
        JJ = J & 0xFFFF;
        PUSH(JJ, CA, INSTRN, LINE);
        LCELL = J & 0xFFFF0000 | JJ;
        PCONST(INSTRN);
      };

      void REMOVELAB(int LAB) {
        //***********************************************************************
        //*REMOVESAALBELFROMTHECURRENTLABELLISTWHENKNOWNTO*
        //*BEREDUNDANT.MAINLYUSEDFORCYCLELABELS*
        //***********************************************************************
        recfm *LCELL;
        //(LISTF)

        int *LHEAD;

        int CELL;
        int AT;

        LHEAD = LABEL[(LEVEL) - (0)];
        CELL = LHEAD;
        while (CELL > 0) {
          LCELL = ASLIST[(CELL) - (0)];
          if (LCELL == LAB) break;
          LHEAD = LCELL;
          CELL = LHEAD;
        }
        if (CELL > 0) POP(LHEAD, AT, AT, AT);
      };

      void MERGEINFO(void) {
        //***********************************************************************
        //*MERGETHECURRENTSTATUSOFTHEREGISTERSWITHTHEVALUES*
        //*ATTHESTARTOFTHECONDITIONALCLAUSE.THISPERMITSTHE*
        //*THECOMPILERTOREMEMBERUNCHANGEDREGISTERSBUTNOTTHOSE*
        //*WHICHDEPENDONAPARTICULARRUNTIMEROUTEBEINGTAKEN*
        //***********************************************************************
        int I;

        for (I = 0; I != 7; I += 1) {
          if (!(SGRUSE[(I) - (0)] = GRUSE[(I) - (0)] & 255 &&
                SGRINF[(I) - (0)] = GRINF1[(I) - (0)]))
            GRUSE[(I) - (0)] = 0;
        }
      };

      void REMEMBER(void) {
        int I;

        for (I = 0; I != 7; I += 1) {
          SGRUSE[(I) - (0)] = GRUSE[(I) - (0)] & 255;
          SGRINF[(I) - (0)] = GRINF1[(I) - (0)];
        }
      };

      void CREATEAH(int MODE) {
        //***********************************************************************
        //*CREATEANARRAYHEADINTEMPORARYSPACEBYMODIFYINGTHEHEAD*
        //*THEHEADATAREA,ACCESS&DISPASFOLOWS:-*
        //*MODE=0(ARRAYMAPPING)ACCHASADDR(1STELEMENT)*
        //*MODE=1(ARRAYSINRECORDS)ACCHASRELOCATIONFACTOR*
        //***********************************************************************
        int WK;

        GETWSP(WK, 4);
        AREA = AREACODE();
        if (MODE == 0) {
          if (COMPILER == 1 && 1 == J && TYPE <= 2) {
            PF1(SLSS, 2, AREA, DISP + 8)
            // LWBTOACC
            ;

            if (!(PREC == 3)) PSF1(IMY, 0, -BYTES[(PREC) - (0)]);
            PF1(IAD, 0, TOS, 0);
            GRUSE[(DR) - (0)] = 0;
          }

          PSORLF1(LUH, ACCESS, AREA, DISP);

        } else {
          PSF1(LUH, 0, 0);
          PSORLF1(IAD, ACCESS, AREA, DISP);
        }
        //

        PSF1(ST, 1, WK)
        // 1STPARTOFHEAD=DESCTOARRAY
        ;

        PSORLF1(LSD, ACCESS, AREA, DISP + 8);
        PSF1(ST, 1, WK + 8)
        // 2NDPART=DESCPTRTODV
        ;

        GRUSE[(ACCR) - (0)] = 0;
        ACCESS = 0;
        AREA = LNB;
        DISP = WK;
      };

      void CSNAME(int Z, int REG) {
        //***********************************************************************
        //*COMPILEASPECIALNAME-PTYPE=10006(=routinelabel)*
        //*THEIRTRUEPTYPEISINGLOBALARRAYTSNAME.*
        //*SNINFOHASAFOURBYTERECORDFOREACHNAME(biFLAG,PTR,*
        //*siXTRA).THETOPBITSOFFLAGCATEGORISEASFOLLOWS:-*
        //*2**7SETFORIMPLICITLYSPECIFIEDCONSTRUCTAspec*
        //*2**6SETFORIOCPCALL*
        //*2**5SETFORBUILTINMAPPINGFUNCTIONS*
        //*2**4SETIFAD-HOCCODEPLANTEDBYTHISROUTINE*
        //*2**3SETIFFIRSTPARAMETERISOFnameTYPE*
        //*2**2-2**0HOLDNUMBEROFPARAMS*
        //**
        //*THEFULLSPECSAREASFOLLOWS:-*
        //*0=routineSELECTINPUT(integerSTREAM)*
        //*1=routineSELECTOUTPUT(integerSTREAM)*
        //*2=routineNEWLINE*
        //*3=routineSPACE*
        //*4=routineSKIPSYMBOL*
        //*5=routineREADSTRINWG(stringnameS)*
        //*6=routineNEWLINES(integerN)*
        //*7=routineSPACES(integerN)*
        //*8=integerfnNEXTSYMBOL*
        //*9=routinePRINTSYMBOL(integerSYMBOL)*
        //*10=routineREADSYMBOL(nameSYMBOL)*
        //*11=routineREAD(nameNUMBER)*
        //*12=routineWRITE(integerVALUE,PLACES)*
        //*13=routineNEWPAGE*
        //*14=integerfnADDR(nameVARIABLE)*
        //*15=longrealfnARCSIN(longrealX)*
        //*16=integerfnINT(longrealX)*
        //*17=integerfnINTPT(lonrgrealX)*
        //*18=longrealfnFRACPT(longrealX)*
        //*19=routinePRINT(longrealNUMBER,integerBEFORE,AFTER)*
        //*20=routinePRINTFL(longrealNUMBER,integerPLACES)*
        //*21=realmapREAL(integerVARADDR)*
        //*22=integermapINTEGER(integerVARADDR)*
        //*23=longrealfnMOD(longrealX)*
        //*24=longrealfnARCCOS(longrealX)*
        //*25=longrealfnSQRT(longrealX)*
        //*26=longrealfnLOG(longrealX)*
        //*27=longrealfnSIN(longrealX)*
        //*28=longrealfnCOS(longrealX)*
        //*29=longrealfnTAN(longrealX)*
        //*30=longrealfnEXP(longrealX)*
        //*31=routineCLOSESTREAM(integerSTREAM)*
        //*32=byteintegermapBYTEINTEGER(integerVARADDR)*
        //*33=integerfnEVENTINF*
        //*34=longrealfnRADIUS(longrealX,Y)*
        //*35=longrealfnARCTAN(longrealX,Y)*
        //*36=byteintegermapLENGTH(stringnameS)*
        //*37=routinePRINTSTRING(string(255)MESSAGE)*
        //*38=integerfnNL*
        //*39=longrealmapLONGREAL(integerVARADDR)*
        //*40=routinePRINTCH(integerCHARACTER)*
        //*41=routineREADCH(nameCHARACTER)*
        //*42=stringmapSTRING(integerVARADDR)*
        //*43=routineREADITEM(stringnameITEM)*
        //*44=string(1)fnNEXTITEM*
        //*45=byteintegermapCHARNO(stringnameSTR,integerCHARREQD)*
        //*46=string(1)fnTOSTRING(integerSYMBOL)*
        //*47=string(255)fnFROMSTRING(string(255)S,integerBEG,END)*
        //*48=recordmapRECORD(integerRECADDR)*
        //*49=arraymapARRAY(integerA1ADDR,arraynameFORMAT)*
        //*50=routineSETMARGINS(integerINOUT,LHM,RHM)*
        //*51=integerfnIMOD(integerVALUE)*
        //*52=longrealfnPI*
        //*53=integerfnEVENTLINE*
        //*54=longintegermapLONGINTEGER(integerADR)*
        //*55=longlongrealmapLONGLONGREAL(integerADR)*
        //*56=longintgerefnLENGTHENI(integerVAL)*
        //*57=longlongrealfnLENGTHENR(longrealVAL)*
        //*58=integerfnSHORTENI(longintegerVAL)*
        //*59=longrealfnSHORTENR(longlongrealVAL)*
        //*60=integerfnNEXTCH*
        //*61=halfintegermapHALFINTEGER(integerADDR)*
        //*62=routinePPROFILE*
        //***********************************************************************
        auto int OPTMAP(void);

        const int SNINFO[(62) - (0) + 1] = X '41080001',
            0x41090001, 0x408A0001, 0x40A00001, 0x40010001, 0x800D0000,
            0x11010001, 0x11010001, 0x10020024, 0x41030001, 0x19030001,
            0x80130001, 0x801B0014, 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, 0x110A8018, 0x120B1000, 0x80170013,
            0x11060024, 0x100C0024, 0x100D0024,
            [LOW... HIGH] = 0x2100003E, [LOW... HIGH] = 0x110E0024, 0x10020024,
                    0x2100003E, 0x100F0001;

        const _imp_string SNXREFS[(20) - (0) + 1] = "READSTRING",
            "S#READ", "S#IARCSIN", "S#INT", "S#INTPT", "S#FRACPT", "S#PRINT",
            "S#PRINTFL", "S#IARCCOS", "S#ISQRT", "S#ILOG", "S#ISIN", "S#ICOS",
            "S#ITAN", "S#IEXP", "CLOSESTREAM", "S#IRADIUS", "S#IARCTAN",
            "FROMSTRING", "SETMARGINS", "S#WRITE";
        //
        // SNPARAMSHOLDSNUMBERANDPTYPEOFFORMALPARAMETERFORIMPLICITLY
        // SPECIFIEDEXTERNALROUTINES.APOINTERINSNINFOMEANSTHATNO
        // DUPLICATESNEEDTOBERECORDED.
        //
        const int SNPARAMS[(29) - (0) + 1] = 0,
            1, 0x62, 2, 0x62, 0x62, 2, 0x62, 0x51, 3, 0x62, 0x51, 0x51, 1,
            0x435, 3, 0x35, 0x51, 0x51, 1, 0x400, 1, 0x51, 3, 0x51, 0x51, 0x51,
            2, 0x51, 0x51;
        //

        auto void RTOS(int REG);
        recfm R;
        //(RD)

        int ERRNO;
        int FLAG;
        int POINTER;
        int WREG;
        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;

        SNNAME = FROMAR2(P);
        // INDEXINTOSNINFO
        SNNO = K;

        TESTAPP(NAPS)
        // COUNTACTUALPARAMETERS
        ;

        PIN = P;
        P = P + 2;
        SNPTYPE = TSNAME[(SNNO) - (0)];
        SNINF = SNINFO[(SNNO) - (0)];
        XTRA = SNINF & 0xFFFF;
        POINTER = (SNINF >> 16) & 255;
        FLAG = SNINF >> 24;
        //
        // THEIMPLICITLYSPECIFIEDROUTINEARETHEEASIESTOFALLTODEALWITH.
        // JUSTSETUPTHEEXTERNALSPEC&PARAMETERS.THENARECURSIVECALL
        // OFCNAMETHENFINDSTHEROUTINEUNDERITSTRUECOLOURSANDCOMPILES
        // THECALL.ALLCALLSEXCEPTTHEFIRSTAREDEALTWITHDIRECTLYBYCNAME.
        // ALLNONTRIVIALROUTINESSHOULDBEDEALTWITHINTHISMANNER
        // XTRAHASINDEXINTOARRAYOFEXTERNALNAMESSOTHATTHESE
        // CANEASILYBECHANGED.
        //
        if (FLAG & 0x80 != 0) {
          CXREF(SNXREFS[(XTRA) - (0)], PARMDYNAMIC, 2, JJ)
          // JJSETWITHREFDISPLACEMENT
          ;

          if (SNNO == 26) LOGEPDISP = JJ;
          if (SNNO == 31) EXPEPDISP = JJ;
          OPHEAD = 0;
          P0 = SNPARAMS[(POINTER) - (0)];
          K = OPHEAD;
          D = 1;
          while (D <= P0) {
            PTYPE = SNPARAMS[(POINTER + D) - (0)];
            UNPACK();
            if (NAM == 0)
              ACC = BYTES[(PREC) - (0)];
            else
              ACC = 8;
            // STRINGBYVALUE
            if (PTYPE == 0x35) ACC = 256;

            INSERTATEND(OPHEAD, PTYPE << 16, ACC << 16, 0);
            D = D + 1;
          }
          I = 1;
          J = 14;
          OLDI = 0;
          PTYPE = SNPTYPE;
          K = OPHEAD;
          KFORM = P0;
          REPLACETAG(SNNAME);
          REPLACE2(TAGS[(SNNAME) - (0)], JJ)
          // DIPLACEMENTINTOS2
          ;

          P = PIN;
          CNAME(Z, REG)
          // RECURSIVECALL
          ;

          NEST = REG;
          // DUPLICATESCHECKOF<ENAME>
          P = P - 1;
          return;
        }
        //
        // ALLROUTINESEXCEPTTHEIMPLICITSREQUIREACHECKTHATTHEUSEOFTHE
        // NAMEISLEGALANDTHATTHECORRECTNOOFPARAMETERS(BOTTOM2BITSOF
        // FLAG)HASBEENSUPPLIED.THECHECKISTRIVIAL-THEPROBLEM
        // ISTOGETTHERIGHTERRORNUMBER.
        // XTRAHASABITMASKOFALLOWEDUSES(IEALLOWEDZVALUES)
        //
        if (NAPS != FLAG & 3) {
          ERRNO = 19;
          goto ERREXIT;
        }
        JJ = 1 << Z;
        if (JJ & XTRA == 0) {
          // ILLEGALUSE

          ERRNO = 23;
          if (Z == 0) ERRNO = 17;
          if (Z == 1 || 3 <= Z && Z <= 4) ERRNO = 29;
          if (XTRA & 0xF000 != 0) ERRNO = 84;
          goto ERREXIT;
        }
        //
        // ANUMBEROFINPUT-OUTPUTROUTINESAREMAPPEDONTOCALLSOFIOCP.
        // THISARRANGEMENTHASTHEADVANTAGEOFREQUIRINGONL1EXTERNALREF
        // INTHEGLABUTHASTHEDISADVANTAGETHATTHEI-OROUTINESCANNOT
        // BEPASSEDASRT-TYPEPARAMETERSASWELLASREQUIRINGMESSYCODE
        // HEREABOUTS.SNINF_PTRHOLDEITHER:-
        // 1)THEIOCPENTRYPOINTNO
        // OR2)THESYMBOLTOBEOUTPUTWITH2**7BITSET
        //
        // THISSECTIONDEALSWITHSELECTINPUT,SELECTOUTPUT,NEWLINE,NEWPAGE
        // SPACE,SKIPSYMBOL,PRINTSYMBOL,PRINTSTRING
        // ANDPRINTCH
        //
        if (FLAG & 0x40 != 0) {
          IOCPEP = POINTER;
          B = ACCR;
          if (FLAG & 3 != 0) {
            // RTHASPARAMS

            P = P + 1;
            if (SNNO == 37) {
              CSTREXP(0, DR);
              B = DR;
            } else
              CSEXP(ACCR, 0x51);
          }

          if (IOCPEP > 127) {
            PSF1(LSS, 0, IOCPEP & 127);
            IOCPEP = 5;
          }
          if (SNNO == 4)
            PSF1(LSS, 0, 0)
            // SKIPSYMBOLFORCEACS=1
            ;

          CIOCP(IOCPEP, B)
          // PLANTCALLOFIOCP
          ;

          P = P + 1;
          goto OKEXIT;
        }
        //
        // THEBUILT-INMAPS(INTEGERETCBUTNOTRECORDORARRAY)
        //

        if (FLAG & 0x20 != 0) {
          // ADDMAPBITS

          SNPTYPE = 0x1C00 + SNPTYPE;

          if (PARMOPT == 0 && OPTMAP() != 0) goto OKEXIT;
          // SPECIALFLAGFORSTOREVIAMAP
          if (Z == 1) BIMSTR = 1;

          P = P + 1;
          CSEXP(BREG, 0x51);
          P = P + 1;
          if (Z == 1) BIMSTR = 0;
          JJ = SNPTYPE >> 4 & 15;
          DISP = MAPDES(JJ);
          AREA = PC;
          ACCESS = 3;
          // FORCHECKIN==ASSGNMNT
          OLDI = 0;

          goto OKEXIT;
        }
        //
        // ADHOCCODINGISREQUIREDFORTHEREMAININGROUTINESAPARTFROM
        // ACHECKFORNAMETYPEPARAMETERS.THESWITCHNOISKEPTINPOINTER
        //
        P = P + 1;
        if (FLAG & 8 != 0 && A != 4 || A != 1 || A != 2) {
          ERRNO = 22;
          goto ERREXIT;
        }
        goto ADHOC[POINTER];
      // NEWLINES(=6)&SPACES(=7)
      ADHOC_1:

        CSEXP(ACCR, 0x51)
        // REPITITIONNOTOACC
        ;

        if (SNNO == 6)
          JJ = 10;
        else
          JJ = 32;
        PSF1(USH, 0, 8)
        // SHIFTUP8PLACES
        ;

        PSF1(OR, 0, JJ)
        // ORSYMBOL
        ;

        CIOCP(17, ACCR);
        P = P + 1;
        goto OKEXIT;
      // NEXTSYMBOL(=8)&NEXTITEM(=44)
      ADHOC_2:
        // ALSONEXTCH(=60)

        GETINACC(ACCR, 1, 0, 0, 0)
        // PRESERVEANYINTERMEDIATES
        ;

        if (SNNO == 60)
          JJ = 18;
        else
          JJ = 2;
        CIOCP(JJ, ACCR)
        // LEAVESTHESYMBOLINACC
        ;

        if (SNNO == 44) {
          RTOS(BREG);
          SNPTYPE = 0x1435;
          AREA = PC;
          ACCESS = 3;
          DISP = MAPDES(3);
        }
        // CONVERTR1TOSTRING

        NEST = ACCR;

        goto OKEXIT;
      // READSYMBOL(=10),CH(=41)&ITEM(=43)
      ADHOC_3:

        if (SNNO == 41)
          JJ = 4;
        else
          JJ = 1;
        PSF1(LSS, 0, 0);
        CIOCP(JJ, ACCR)
        // SYMBOLORCHTOGR1
        ;

        P = P + 5;
        if (SNNO == 43) {
          TYPE = 5;
          RTOS(ACCR);
          PF1(LUH, 0, PC, PARAMDES(3));

        } else {
          REGISTER[(ACCR) - (0)] = 1;
          TYPE = 1;
        }

        JJ = TYPE;
        ASSIGN(6, P)
        // BY'='TOPARAMETER
        ;

        P = PIN + 6 + FROMAR2(PIN + 4);
        goto OKEXIT;
      // INT(=16)ANDINTPT(=17)
      ADHOC_4:

        CSEXP(ACCR, 0x62);
        if (SNNO == 16)
          PF1(RAD, 0, PC, SPECIALCONSTS(0))
          // RAD0.5
          ;

        if (PARMOPT == 0) {
          PSF1(RSC, 0, 55);
          PSF1(RSC, 0, -55);
        }
        if (REGISTER[(BREG) - (0)] = 0) BOOTOUT(BREG);
        PF1(FIX, 0, BREG, 0);
        PSF1(MYB, 0, 4);
        PSF1(CPB, 0, -64);
        PF3(JCC, 10, 0, 3);
        PSF1(LB, 0, -64);
        PF1(ISH, 0, BREG, 0);
        PF1(STUH, 0, BREG, 0);
        GRUSE[(ACCR) - (0)] = 0;
        GRUSE[(BREG) - (0)] = 0;
        NEST = ACCR;
        P = P + 1;
        goto OKEXIT;
      // ADDR(=14)
      ADHOC_5:

        P = P + 5;
        CNAME(4, REG)
        // FETCHADDRESSMODE
        ;

        NEST = REG;
        P = P + 2;
        goto OKEXIT;
      // MOD(=23),IMOD(=51)
      ADHOC_6:

        if (SNNO == 51) {
          JJ = 0x51;
          B = 5;
          D = IRSB;
          XTRA = 3;
          WREG = ACCR;
          if (REG == BREG) {
            B = 13;
            D = SLB;
            XTRA = 4;
            WREG = BREG;
          }

        } else {
          JJ = 0x62;
          B = 1;
          D = RRSB;
          XTRA = 3;
          WREG = ACCR;
        }

        CSEXP(WREG, JJ)
        // INTEGERORLONGREALMODE
        ;

        PF3(JAT, B, 0, XTRA)
        // JUMPACC>0
        ;

        PSF1(D, 0, 0);
        if (WREG == BREG) PF1(SBB, 0, TOS, 0);
        GRUSE[(WREG) - (0)] = 0;
        NEST = WREG;
        P = P + 1;
        goto OKEXIT;
      // CHARNO(=45)&LENGTH(=36)
      ADHOC_7:

        P = P + 5;
        if (PARMARR != 0 && SNNO == 45)
          CNAME(Z, DR);
        else
          CNAME(4, BREG);
        ERRNO = 22;
        if (!(TYPE == 5 && ROUT == 0)) goto ERREXIT;
        P = P + 2;
        if (SNNO != 36) {
          if (PARMARR == 0 && 0 == PARMCHK) {
            PF1(STB, 0, TOS, 0);
            CSEXP(BREG, 0x51);
            PF1(ADB, 0, TOS, 0);

          } else {
            // FRIGBNDCHECKFORPARM=ARR

            GETWSP(JJ, 2);
            if (Z == 2 || Z == 5)
              B = INCA;
            else
              B = MODD;
            PSF1(B, 0, 1);
            PSF1(STD, 1, JJ);
            CSEXP(BREG, 0x51);
            PSF1(LD, 1, JJ);
            PSF1(SBB, 0, 1);
            PF1(MODD, 0, BREG, 0);
            GRUSE[(DR) - (0)] = 0;
            PSF1(ADB, 1, JJ + 4);
          }

          P = P + 1;
          GRUSE[(BREG) - (0)] = 0;
        }

        DISP = MAPDES(3);
        AREA = PC;
        ACCESS = 3;
        // CANTREMEBERNAME
        if (Z == 1) STNAME = -1;

        SNPTYPE = SNPTYPE + 0x1C00;
        goto OKEXIT;
      // PI(=52)
      ADHOC_12:
        // NL(=38).THISFNISPICKEDOFF

      ADHOC_8:
        // INCSEXP.ONLYCOMESHEREIN

        NEST = 0;

        P = P + 1;
        // ERROREGNL=A+B
        goto OKEXIT;
        // TOSTRING(=46)

      ADHOC_9:

        CSEXP(ACCR, 0x51)
        // RETEXPSN
        ;

        P = P + 1;
        RTOS(BREG);
        DISP = MAPDES(3);
        AREA = PC;
        ACCESS = 3;
        SNPTYPE = SNPTYPE + 0x1C00;
        goto OKEXIT;
      // RECORD(=48)
      ADHOC_10:

        if (RECTB == 0) {
          JJ = 0x1800FFFF;
          STORECONST(RECTB, 4, );
        }
        if (REG == ACCR) {
          CSEXP(ACCR, 0x51);
          PF1(LUH, 0, PC, RECTB);

        } else {
          CSEXP(BREG, 0x51);
          PF1(LDTB, 0, PC, RECTB);
          PF1(LDA, 0, BREG, 0);
        }

        P = P + 1;
        GRUSE[(REG) - (0)] = 0;
        OLDI = 0;
        ACC = 0xFFFF;
        // ADDMAPBITS
        SNPTYPE = SNPTYPE + 0x1C00;

        goto OKEXIT;
      // ARRAY(=49)
      ADHOC_11:

        CSEXP(ACCR, 0x51)
        // ADDR(A(0))TOACCR
        ;

        ERRNO = 22;
        if (!(A == 4 && A == 1)) goto ERREXIT;
        REGISTER[(ACCR) - (0)] = 1;
        OLINK[(ACCR) - (0)] = ;
        R = 0;
        R = 0x51;
        R = 9;
        R = ACCR;
        P = P + 6;
        CNAME(12, 0);
        if (R != 9) PF1(LSS, 0, TOS, 0);
        REGISTER[(ACCR) - (0)] = 0;
        if (!(A == 2 && ARR > 0)) goto ERREXIT;
        P = P + 2;
        CREATEAH(0);
        return;
      // EVENTINF(=33)&EVENTLINE
      ADHOC_13:

        D = ONINF[(LEVEL) - (0)];
        if (D == 0) FAULT(16, SNNAME);
        if (SNNO != 33) D = D + 4;
        GETINACC(ACCR, 1, 0, LNB, D);
        GRUSE[(ACCR) - (0)] = 0;
        NEST = ACCR;
        goto OKEXIT;
      // LENGTHENANDSHORTEN
      ADHOC_14:

        D = (SNNO & 3) * 8;
        CSEXP(ACCR, 0x62517261 >> D & 255);
        P = P + 1;
        NEST = ACCR;
        goto OKEXIT;
      // PPROFILE(IGNOREDUNLESSPARMSET)
      ADHOC_15:

        if (!(PARMPROF == 0)) PPJ(0, 22);
      // NORMALEXIT
      OKEXIT:

        PTYPE = SNPTYPE;
        UNPACK();
        return;
      // ERROREXIT
      ERREXIT:

        FAULT(ERRNO, SNNAME);
        BASE = 0;
        DISP = 0;
        ACCESS = 0;
        AREA = 0;
        P = PIN + 2;
        SKIPAPP();
        P = P - 1;
        return;
        int OPTMAP(void) {
          //***********************************************************************
          //*LOOKFOREXPRESSIONLIKEINTEGER(ADDR(X))ANDAVOIDUSINGDR*
          //***********************************************************************

          int VARNAME;
          int REXP;
          int PP;
          int CVAL;
          int OP;
          int XYNB;

          if (3 <= Z && Z <= 4 || SNNO == 42 || SNNO == 32 || SNNO == 61)
            return 0;
          PP = P + 2;
          REXP = FROMAR2(PP)
                 // TORESTOFEXP
                 + PP;

          VARNAME = FROMAR2(PP + 4)
              // SHOULDBEADDR
              ;

          if (!(A == 4 && A == 1)) return 0;
          COPYTAG(VARNAME)
          // CHECKITWASADDR
          ;

          if (PTYPE == SNPT && K == 14 && A == 1) goto WASADR;
          if (PTYPE & 0xFBFF == 0x51 && A == 2 && 2 == A) goto WASLOC;
          return 0;
        WASADR:
          PP = PP + 10;
          if (!(A == 4 && A == 1 && A == 2 && 2 == A && A == 2 && 2 == A &&
                A == 2))
            return 0;
          VARNAME = FROMAR2(PP + 2);
          COPYTAG(VARNAME);
          if (!(PTYPE & 0xFF0C == 0)) return 0;
          if (A == 2)
            P = REXP + 2;
          else {
            OP = A;
            if (!(1 <= OP && OP <= 2 && A == 2 && A == 0x41 && A == 2))
              return 0;
            CVAL = FROMAR2(REXP + 4);
            if (OP == 1)
              K = K + CVAL;
            else
              K = K - CVAL;
            if (K < 0) return 0;
            P = REXP + 8;
          }

          BASE = I;
          DISP = K;
          AREA = -1;
          ACCESS = 0;
          AREA = AREACODE();
          return 1;
          // FORMINTEGER(NAME+CONST)

        WASLOC:

          CVAL = 0;
          if (A == 2) {
            PP = REXP + 2;
            goto FETCH;
          }
          if (!(A == 1 && A == 2)) return 0;
          if (A == 0x41 && A == 2) {
            CVAL = FROMAR2(REXP + 4);
            PP = REXP + 8;
            goto FETCH;
          }
          if (A == 0x51 && A == 2) {
            CVAL = FROMAR4(REXP + 4);
            PP = REXP + 10;
            goto FETCH;
          }
          return 0;
        // MAXFORXNB+N
        FETCH:
          if (!(CVAL & 3 == 0 && CVAL >> 20 == 0)) return 0;

          XYNB = XORYNB(9, VARNAME);
          if (!(GRUSE[(XYNB) - (0)] = 9 && GRINF1[(XYNB) - (0)] = VARNAME)) {
            AREA = -1;
            BASE = I;
            PSORLF1(LDCODE[(XYNB) - (0)], 2 * NAM, AREACODE(), K);
            GRUSE[(XYNB) - (0)] = 9;
            GRINF1[(XYNB) - (0)] = VARNAME;
          }

          P = PP;
          AREA = XYNB;
          ACCESS = 0;
          DISP = CVAL;
          return 1;
        };

        void RTOS(int REG) {
          //***********************************************************************
          //*PLANTSCODETOCONVERTASYMBOLINACCTOAONE*
          //*CHARACTERSTRINGINATEMPORARARYVARIABLE.*
          //***********************************************************************
          int KK;

          GETWSP(KK, 1)
          // GET1WORDWKAREA
          ;

          STRINGL = 1;
          DISP = KK + 2;
          PF1(OR, 0, 0, 256);
          PSF1(ST, 1, KK);
          GETINACC(REG, 1, 0, LNB, PTROFFSET(RBASE));
          if (REG == BREG)
            KK = ADB;
          else
            KK = IAD;
          PSF1(KK, 0, DISP);
          GRUSE[(BREG) - (0)] = 0;
        };
      };
      // OFROUTINECSNAME

      void CANAME(int ARRP, int BS, int DP) {
        //***********************************************************************
        //*BS&DPDEFINETHEPOSITIONOFTHEARRAYHEAD*
        //*ARRP=1FORARRAYS,2FORVECTORS,3FORARRAYSINRECORDS*
        //*BASICDISP=DISPMNTOFA(0)FORVECTORSORARRAYSINRECORDS*
        //***********************************************************************
        int HEAD1;
        int HEAD2;
        int HEAD3;
        int NOPS;
        int PTYPEP;
        int KK;
        int PP;
        int JJ;
        int SOLDI;
        int TYPEP;
        int ARRNAME;
        int Q;
        int PRECP;
        int ELSIZE;
        int NAMINF;
        int BOT1;
        int BOT2;
        int BOT3;
        int DVD;
        int VMYOP;

        PP = P;
        TYPEP = TYPE;
        JJ = J;
        PTYPEP = PTYPE;
        PRECP = PREC;
        SOLDI = OLDI;
        if (TYPE <= 2)
          ELSIZE = BYTES[(PRECP) - (0)];
        else
          ELSIZE = ACC;
        // LOCATIONOFDVIFCONSTANT
        DVD = SNDISP;

        ARRNAME = FROMAR2(P)
            // NAMEOFENTITY
            ;

        NAMINF = TAGS[(ARRNAME) - (0)];
        if (ARR == 3)
          FAULT(29, ARRNAME)
          // ARRAYFORMATUSEDASARRAY
          ;
        // ARRAYSINRECORDS

        if (ARRP > 2) {
          NAMINF = -2;
          DVD = 0;
        }

        TESTAPP(Q)
        // COUNTNOOFSUBSCRIPTS
        ;
        //
        // CHECKCORRECTNOOFSUBSCRIPTSPROVIDED.HOWEVERENTITIESDECLARED
        // AS<TYPE>ARRAYNAMEHAVENODIMENSION.THISSECTIONSETSTHE
        // DIMENSIONFROMTHEFIRSTUSEOFTHENAME.
        //
        if (JJ == 0) {
          // 0DIMENSIONS=NOTKNOWN

          REPLACE1(TCELL, FROM1(TCELL) | Q)
          // DIMSNISBOTTOM4BITSOFTAG
          ;

          JJ = Q;
        }

        if (JJ == Q && Q != 0) {
          // INLINECODE
          //
          // FORIN-LINECODEWESETUPACHAINOFREVERSEPOLISHOPERATIONSTO
          // EVALUATETHEVARIOUSSUBSCRIPTS,MULTIPLYBYTHEMULTIPLIERSAND
          // ADDTHEMTOGETHER.
          //
          // CLEARLISTHEADS
          NOPS = 0;
          HEAD1 = 0;
          HEAD2 = 0;
          HEAD3 = 0;

          BOT1 = 0;
          BOT3 = 0;
          //
          // NOWPROCESSTHESUBSCRIPTSCALLINRTORPTOCONVERTTHEEXPRESSIONS
          // TOREVERSEPOLISHANDADDINGTHEEXTRAOPERATIONS.
          //
          P = PP + 3;
          for (KK = 1; KK != JJ; KK += 1) {
            // THROUGHTHESUBSCRIPTS

            P = P + 3;
            BOT2 = 0;
            TORP(HEAD2, BOT2, NOPS)
            // SUBSCRIPTTOREVERSEPOLISH
            ;

            P = P + 1;
            //
            // MULTIPLIERSAREDOPEVECTORITEMS(OPTYPE=3)
            //
            // NSUBSCRIPTSWILLREQUIRE(N-1)MULTIPLICATIONSANDADDITIONS
            //
            // DVMAS'*'
            NOPS = (NOPS + 1) | 1 << 24;

            PUSH(HEAD3, 33, PTYPEP << 16 | ARRNAME, ELSIZE)
            // DOPEVECTORMULTIPLY
            ;

            if (BOT3 == 0) BOT3 = HEAD3;
            VMYOP = KK << 24 | JJ << 16 | DVD;
            PUSH(HEAD3, 1 << 16, VMYOP, BS << 18 | DP)
            // MULTIPLIER
            ;

            if (HEAD1 == 0)
              HEAD1 = HEAD2;
            else
              ASLIST[(BOT1) - (0)] = HEAD2;
            BOT1 = BOT2;
            HEAD2 = 0;
          }
          //
          // ADDOPERATORSTOTHEBACKOFOPERANDSANDEVALUATE
          //

          ASLIST[(BOT1) - (0)] = HEAD3;
          BOT1 = BOT3;
          EXPOP(HEAD1, BREG, NOPS, 0x251)
          // EVALUATETHEREVERSEPOLISHLIST
          ;
          // CONSTANTACCEPTABLEASRESULT

          ASLIST[(BOT1) - (0)] = ASL;
          ASL = HEAD1;
          BASE = BS;
          DISP = DP;
          ACCESS = 3;
          AREA = -1;
          if (EXPOPND <= 1) {
            // EVALUATEDTOCONSTANT
            // VALUEOFCONSTANT

            NUMMOD = EXPOPND;

            if (NUMMOD < 0)
              GETINACC(BREG, 1, 0, 0, NUMMOD)
              // DESCPTRWITHCONSTMODIFIER
              ;
            else
              ACCESS = 1;
          }

        } else {
          if (JJ > Q)
            FAULT2(20, JJ - Q, ARRNAME);
          else
            FAULT2(21, Q - JJ, ARRNAME);
          P = P + 2;
          SKIPAPP();
          BASE = BS;
          DISP = 0;
          ACCESS = 3;
          AREA = -1;
        }

        ACC = ELSIZE;
        PTYPE = PTYPEP;
        UNPACK();
        J = JJ;
        // FORNAME==A(EL)VALIDATION
        OLDI = SOLDI;
      };
      // OFROUTINECANAME

      void CNAME(int Z, int REG) {
        //***********************************************************************
        //*THISISTHEMAINROUTINEFORPROCESSINGNAMES.CANAME,CSNAME*
        //*ANDCRNAMEAREONLYCALLEDFROMHERE,THENAME(ANDANYPARAMS*
        //*ORSUBNAMES)AREACCESSEDBYPWHICHISADVANCED.*
        //*ZSPECIFIESACTIONASFOLLOWS:-*
        //*Z=0COMPILEAROUTINECALL*
        //*Z=1SETACCESS,AREAANDDISPFORA'STORE'OPERATION*
        //*Z=2FETCHNAMETO'REG'*
        //*Z=3SETDESCRIPTORINREGFORPASSINGBYNAME*
        //*Z=4SET32BITADDRESSOFNAMEINREG*
        //*Z=5DELAYEDFETCHIFNAMESIMPLEELSEASZ=2*
        //*Z=6STORE'REG'(CONTAINSPOINTER)INTOPOINTERVARIABLE*
        //*Z=7->11NOTNOWUSED*
        //*Z=12SETBASEANDDISPTOPOINTTOARRAYHEAD*
        //*Z=13SETREGTOPOINTTO4WORDROUTINEDISCRIPTOR*
        //*(INTERNALROUTINESFIRSTCREATETHEDISCRIPTOR)*
        //*Z=14STORE'REG'INTOARECORDNAMEVARIABLE*
        //*Z=15SET'REG'TOPOINTTOARECORD*
        //*Z=16SETBASEANDDISPFORRECORD*
        //**
        //*REG(WHEREAPPROPRIATE)ISSETASFOLLOWS:-*
        //*>=0AREGISTER*
        //*-1MEANSCHOOSEANYREGISTER*
        //*IFAREGISTERISCHOSENTHENNESTISSETWITHCHOICE*
        //***********************************************************************
        int JJ;
        int JJJ;
        int KK;
        int RR;
        int LEVELP;
        int DISPP;
        int NAMEP;
        int PP;
        int SAVESL;
        int FNAME;

        PP = P;
        FNAME = (A << 8) + A;
        if (Z == 1 || Z == 6) STNAME = FNAME;
        COPYTAG(FNAME);
        if (I == -1) {
          FAULT(16, FNAME);
          I = RLEVEL;
          J = 0;
          K = FNAME;
          KFORM = 0;
          SNDISP = 0;
          ACC = 4;
          PTYPE = 7;
          STORETAG(K, N);
          K = N;
          N = N + 4;
          COPYTAG(FNAME)
          // SETUSEBITS!
          ;
        }

        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 && TYPE < 5 && ARR == 0)
          FAULT(29, FNAME);
        if (TYPE == 7) goto NOTSET;
        if (Z == 0 && ROUT != 1 || 0 != TYPE && TYPE != 6 ||
            Z == 13 && ROUT == 0) {
          FAULT2(27, 0, FNAME);
          goto NOTSET;
        }
        if (Z >= 10) goto FUNNY[Z];
        if (ROUT == 1) goto RTCALL;
        goto SW[TYPE];
      SW_6:
      // RECORDFORMATNAME
      SW_4:

        FAULT2(5, 0, FNAME);
      SW_7:
      // NAMENOTSET
      NOTSET:

        NEST = 0;
        BASE = I;
        DISP = K;
        ACCESS = 0;
        AREA = LNB;
        PTYPE = 1;
        UNPACK();
        P = P + 2;
        SKIPAPP();
        goto CHKEN;
      // SETBASE&DISPFORARRAYHEAD
      FUNNY_12:

        if (TYPE == 3 && ARR == 0 || A == 1) goto SW[3];
        if (PTYPE == SNPT) {
          CSNAME(12, REG);
          goto CHKEN;
        }
        if (A == 2)
          P = P + 3;
        else
          NOAPP();
        ACCESS = 0;
        BASE = I;
        DISP = K;
        AREA = -1;
      ADJUSTHEAD:
        if (ARR == 1 && 1 == J && PARMARR == 0 && 0 == NAM && PARMCHK == 0 &&
            TYPE <= 3) {
          // ADJUSTDESRTO1STELMNT

          GETWSP(JJ, 4);
          GETINACC(ACCR, 4, ACCESS, AREACODE(), DISP);
          PSF1(ST, 1, JJ);
          GETINACC(BREG, 1, 2, LNB, JJ + 8);
          if (TYPE == 3)
            KK = ACC;
          else
            KK = BYTES[(PREC) - (0)];
          if (!(KK == 1)) PSF1(MYB, 0, KK);
          PSF1(LD, 1, JJ);
          PF1(INCA, 0, BREG, 0)
          // ADJUSTDESCRPTR
          ;

          PSF1(STD, 1, JJ);
          GRUSE[(DR) - (0)] = 0;
          GRUSE[(ACCR) - (0)] = 0;
          GRUSE[(BREG) - (0)] = 0;
          AREA = LNB;
          DISP = JJ;
        }

        goto CHKEN;
      // ARRAYSINRECORDSBYNAME
      S_12:

        NAMEOP(1, ACCR, 16, NAMEP)
        // Z=STORETOUPDATEBASE&DISP
        ;

        goto ADJUSTHEAD;
      // LOADADDRFORRT-TYPE
      FUNNY_13:

        if (PTYPE == SNPT) {
          CSNAME(Z, REG);
          P = P + 1;
          goto CHKEN;
        }
        DISP = MIDCELL;
        BASE = I;
        if (NAM & 1 != 0) {
          AREA = -1;
          GETINACC(REG, 4, 0, AREACODE(), DISP);

        } else {
          if (J == 14) {
            // EXTERNALROUTINEPASSED

            GETINACC(REG, 2, 0, 0, 0)
            // ZEROENVIRONMENT
            ;

            GETINACC(DR, 2, 0, SETXORYNB(-1, -1), DISP);
            // PSF1(MODD,0,0)
            // PROVOKEESCAPEIFDYNAMIC

          } else {
            if (BASE == 0 && CPRMODE == 2) {
              // INFILEOFRTS

              PSF1(LD, 1, 12);
              if (!(DISP == 0)) PSF1(INCA, 0, DISP);
              GETINACC(ACCR, 2, 0, 0, 0);

            } else {
              PSF1(JLK, 0, 1)
              // GETPCTOTOS
              ;

              RTJUMP(LDA, ASLIST[(TAGS[(FNAME) - (0)]) - (0)])
              // ADDNTOPOINT@ENTRY
              ;

              PF1(INCA, 0, TOS, 0)
              // ANDTODESREG
              ;

              JJ = 0xE0000001;
              STORECONST(JJJ, 4, );
              PF1(LDTB, 0, PC, JJJ);
              GETINACC(ACCR, 1, 0, LNB, PTROFFSET(BASE));
              JJ = 'IMP';
              STORECONST(JJJ, 4, );
              PF1(LUH, 0, PC, JJJ)
              // SPAREFIELDINRTHDDR
              ;
            }
          }

          PF1(STD, 0, TOS, 0)
          // DRTOTOPOFSTACK
          ;

          PF1(LUH, 0, TOS, 0)
          // ANDTOTOP64BITSOFACC
          ;

          GRUSE[(DR) - (0)] = 0;
        }

        if (A == 2)
          P = P + 3;
        else
          NOAPP();
        goto CHKEN;
      // RECORD
      SW_3:

        CRNAME(Z, REG, 2 * NAM, I, -1, K, NAMEP);
        if (Z >= 10) goto S[Z];
        if (Z == 1 || Z == 6) STNAME = NAMEP;
        if (TYPE == 5 && Z != 6) goto STRINREC;
        if (TYPE == 7) goto NOTSET;
        NAMEOP(Z, REG, BYTES[(PREC) - (0)], NAMEP);
        goto CHKEN;
      // TYPE=STRING
      SW_5:
        //
        // ALLSTRINGOPERATIONSAREONTHERELEVANTDESCRIPTOR.Z=2&Z=5
        // REQUIREACURRENTLENGTH(IEMODIFIED)DESCRIPTOR.OTHEROPERATIONS
        // REQUIRETHEMAXLENGTHDESCRIPTOR(IEUNMODIFIEDHEADER)
        //
        if (Z == 6) goto SW[1];
        if (ARR >= 1) goto STRARR;
        if (A == 2)
          P = P + 3;
        else
          NOAPP();
        BASE = I;
        ACCESS = 2;
        AREA = -1;
        DISP = K;
      // STRINGNAMESINRECORDS
      SNINREC:
        if (Z == 1) Z = 3;

        if (Z == 3 || Z == 4) {
          NAMEOP(Z, REG, 8, -1);
          goto CHKEN;
        }
        if (ACCESS == 2 && PARMCHK == 0 && REGISTER[(DR) - (0)] = 0) {
          PSORLF1(LDB, 2, AREACODE(), DISP)
          // LOADBND&DRIN1INSTRN
          ;

          GRUSE[(DR) - (0)] = 0;
          if (REG == ACCR) COPYDR();
          goto CHKEN;
        }

        NAMEOP(3, DR, 8, -1);
      MBND:
        if (PARMCHK == 1) TESTASS(DR, 5, 8);
        PF1(LDB, 2, 7, 0)
        // LBOUNDFIRSTBYTE=CURRENTL
        ;

        if (REG == ACCR) COPYDR();
        goto CHKEN;
      // STRINGARRAYS&ARRAYNAMES
      STRARR:

        CANAME(ARR, I, K);
        NAMEP = -1;
        if (Z == 1 || Z == 6) STNAME = NAMEP;
      // STRINGARRAYSINRECORDS
      SAINREC:

        if (Z == 1 || Z == 3) {
          if (NAM == 1) {
            GETINACC(DR, 2, 0, AREACODE(), DISP + 8)
            // DVDR
            ;
            // CANAMEWILLHAVESETJ=DIMEN
            // FORALLCASESINCLUDINGRECORDS

            PF1(SLB, 1, 0, 1 + 3 * (J - 1))
            // STACKMODIFIERAND
            ;
            // SETBREGTOSTRINGLENGTH
          }

          if (AREA != 7)
            GETINACC(DR, 2, 0, AREACODE(), DISP)
            // ALREADYINDR
            ;

          if (NAM == 1) {
            PF1(MODD, 0, TOS, 0);
            PF1(LDB, 0, BREG, 0);

          } else {
            if (ACCESS == 1) {
              if (!(NUMMOD == 0)) PSF1(MODD, 0, NUMMOD);

            } else {
              if (ACCESS == 3) PF1(MODD, 0, BREG, 0);
            }

            PSF1(LDB, 0, ACC);
          }

          if (REG == ACCR) COPYDR();
          goto CHKEN;
        }

        if (Z == 4) {
          NAMEOP(Z, REG, 4, -1);
          goto CHKEN;
        }
        if (!(AREA == 7)) GETINACC(DR, 2, 0, AREACODE(), DISP);
        if (ACCESS == 1) {
          if (!(NUMMOD == 0)) PSF1(MODD, 0, NUMMOD);

        } else {
          if (ACCESS == 3) PF1(MODD, 0, BREG, 0);
        }

        goto MBND;
      // STRINGSINRECORDS
      STRINREC:

        if (ARR != 0) goto SAINREC;
        if (NAM != 0 || Z == 4) goto SNINREC;
        //
        // STRINGSINRECORDSHAVENOHEADERANDARESPECIAL
        //

        NAMEOP(4, BREG, 4, -1);
        PF1(LDTB, 0, PC, PARAMDES(3));
        PF1(LDA, 0, BREG, 0);
        if (!(Z == 2 && PARMCHK == 0)) PSF1(LDB, 0, ACC);
        GRUSE[(DR) - (0)] = 0;
        if (Z == 2) goto MBND;
        if (REG == ACCR) COPYDR();
        goto CHKEN;
        //
        // SECTIONTODEALWITHALLNAMESINVOLVINGROUTINECALL
        //
        // FIRSTCHECK

      RTCALL:

        if (TYPE == 0 && Z != 0) {
          FAULT(23, FNAME);
          goto NOTSET;
        }
        // RTNAMEINEXPRSN

        if (PTYPE == SNPT) {
          CSNAME(Z, REG)
          // SPECIALNAME
          ;

          if (ROUT == 1 && NAM >= 1 && Z != 0) goto BIM;
          if (TYPE != 0 && NEST == ACCR) goto MVFNRES;
          goto CHKEN;
        }

        CRCALL(FNAME)
        // DEALWITHPARAMS
        ;
        P = P + 1;

        if (PTYPE & 15 == 0) goto CHKEN;
        // MAPS
        if (NAM > 1) goto UDM;

        if (!(Z == 2 || Z == 5)) {
          // FUNCTIONS

          FAULT(29, FNAME);
          BASE = 0;
          ACCESS = 0;
          DISP = 0;
        }

      MVFNRES:
        if (TYPE == 5) {
          // STRINGFNS

          if (REG == DR) {
            PF1(ST, 0, TOS, 0);
            PF1(LD, 0, TOS, 0);
          }

        } else {
          if (REG == BREG) {
            if (REGISTER[(BREG) - (0)] = 0) BOOTOUT(BREG);
            PF1(ST, 0, BREG, 0);
          }
        }

        NEST = REG;
        goto CHKEN;
      // USERDEFINEDMAPS
      UDM:

        PF1(ST, 0, BREG, 0)
        // RETURN32BITADDRINACC
        ;

        DISP = MAPDES(PREC);
        ACCESS = 3;
        AREA = PC;
        NAMEP = -1;
        STNAME = -1;
      // BUILTINMAPS
      BIM:

        if (!(AREA == PC && ACCESS == 3)) {
          NAMEP = -1;
          STNAME = -1;
        }
        // MAPRECORDUSEVERYLIMITED
        if (TYPE == 3) goto CHKEN;

        if (Z == 3 || TYPE == 5 && Z != 4) {
          PF1(LDTB, 0, PC, DISP);
          if (TYPE == 5 && PARMCHK != 0 || Z != 2) PSF1(LDB, 0, 255);
          PF1(LDA, 0, BREG, 0);
          GRUSE[(DR) - (0)] = 0;

        } else {
          if (GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
              GRINF1[(DR) - (0)] = NAMEP & 0xFFFF && 1 <= Z && Z <= 2)
            AREA = 7;
          // CHANGETO(dr+b)FORM
        }
        // NAM=0

        KK = Z;
        if (Z == 5) KK = 2;
        goto MAP[KK & 3];
      // FETCHADDRESS
      MAP_0:

        if (REG != BREG) GETINACC(ACCR, 1, 0, BREG, 0);
        goto CHKEN;
      // STORE
      MAP_1:

        if (!(TYPE == 5)) goto CHKEN;
        goto MAP[3];
      // FETCH
      MAP_2:

        if (TYPE == 5) goto MBND;
        GETINACC(REG, BYTES[(PREC) - (0)] >> 2, ACCESS, AREA, DISP);
        if (NAMEP > 0) {
          GRUSE[(DR) - (0)] = 7;
          GRINF1[(DR) - (0)] = NAMEP;
        }
        if (PARMCHK == 1 && PREC >= 5) TESTASS(REG, 1, BYTES[(PREC) - (0)]);
        goto CHKEN;
      // SETDESCRIPTOR
      MAP_3:

        if (TYPE == 5) PF1(LDB, 0, 0, 256);
        if (!(REG == DR)) COPYDR();
        goto CHKEN;
      // namePARAMETERSNOTYPE
      SW_0:
        // ALLOWFETCHADDROPERATIONS
        // ANDSPECIALFORBUILTINMAPS

        if (!(3 <= Z && Z <= 4)) {
          FAULT2(90, 0, FNAME);
          TYPE = 1;
        }
        // TYPE=INTEGER

      SW_1:
        // TYPE=REAL

      SW_2:

        if (ARR == 0 || Z == 6 && A == 2) {
          BASE = I;
          ACCESS = 2 * NAM;
          DISP = K;
          AREA = -1;
          if (A == 2)
            P = P + 3;
          else
            NOAPP();

        } else {
          CANAME(ARR, I, K);
          NAM = 0;
        }

        NAMEOP(Z, REG, BYTES[(PREC) - (0)], NAMEP);
        goto CHKEN;
      //
      // GENERALFETCHING&STORING
      // SECTION
      //
      CHKEN:
        while (A == 1) {
          FAULT(69, FNAME);
          P = P + 3;
          SKIPAPP();
        }
        P = P + 1;
      };

      void NAMEOP(int Z, int REG, int SIZE, int NAMEP) {
        //***********************************************************************
        //*FETCHORSTOREREGFROMORTOVARIABLEDEFINEDBYAREAACCESS*
        //*BASEANDDISP.*
        //***********************************************************************
        auto int BASEREG(int GRUSEVAL, int GRINFVAL);
        int KK;
        int JJJ;
        int TOTHER;
        int XYNB;
        int JJ;
        int OP1;
        int OP2;

        KK = Z;
        if (Z == 5) KK = 2;
        if (Z == 6) {
          if (!(NAM == 1 && ROUT == 0 && ACCESS >= 8 || ACCESS == 2))
            FAULT2(82, 0, NAMEP);
          KK = 1;
          SIZE = 8;
          if (ACCESS >= 8)
            ACCESS = ACCESS - 4;
          else
            ACCESS = 0;
        }

        KK = KK & 3;
        goto MOD[ACCESS << 2 | KK];
      //
      // AREAANDACCESS
      //*************
      // THESEVARIABLESDEFINEHOWTOACCESSANYIMPVARIABLE.AREAHASTHE
      // THREEBITAREACODEFROMTHEPRIMARYFORMATINSTRN.(EG6=TOSETC)
      // THESPECIALCASEAREA=-1ISUSEDFORENTITIESINSTACKFRAME'BASE'
      // THEFNAREACODECONVERTSTHISCASETOAREA=LNBORAREA=XNBARRANGING
      // TOLOADXNBIFNECESSARY.
      // ACCESSHASTWOVERSIONSOFTHE2-BITINDIRECTIONCODEFROMPRIMARY
      // FORMATINSTRNS:-
      //=0VARIABLEDIRECTLYADDRESSEDIN'AREA'BY'DISP'
      //=1VARIABLEADDRESSEDBYDESCPTRATAREA&DISPMODDEDBYCONSTNUMMOD
      //=2DESCRIPTORTOVARIABLEDIRECTLYADDRESSBY'AREA'&'DISP'
      //=3DESCRIPTORASIN=2ISTOBEMODIFIEDBY'B'
      //=4VARIABLE'XDISP'INTORECORDDIRECTLYADDRESSEDBY'AREA'&'DISP'
      //=5VARIABLE'XDISP'INTORECORDADDRESSEDBYDRMODIFIEDAS=1
      //=6VAR'XDISP'INTORECORDADDRESSEDBYDESCRIPTORAT'AREA'&'DISP'
      //=7AS=6BUTDESCRIPTORMODIFIEDBYB
      //=8-11AS4-7BUTTHEREISADESCRIPTORTOITEMAT'XDISP'INTORECORD
      // THESECOVERALLTHECOMMONCASES.ITEMSLIKEARRAYSINRECORDARRAYS
      // NEEDANINTERMEDIATEDESCRIPTORTOBECALCULATEDAND(USUALLY)STACKED
      //
      // NOTETHATACCESS=1ASUSEDONVARIABLESISDIFFERENTFROMACCESS=1
      // ASUSEDINACTUALPLANTINGROUTINESPF1ETC.THECODEACCESS=1NEEDS
      // THERELEVANTDESCRIPORINDRFIRST!
      //
      // AREA=7WITHACCESS=2OR3ISUSEDWHENTHEDESCRIPTORISALREADY
      // LOADEDINDR.THISISAWKARDESPECIALLYONTHEGET32BITADDR
      // CASEANDNEEDSPLANTINGOFIMAGESTOREFORMATINSTRNS
      //
      // ACCESS=0FETCHADDRESS
      MOD_0:

        if (TYPE == 3) {
          GETINACC(REG, 1, 0, AREACODE(), DISP - 4);
          return;
        }
        GETINACC(REG, 1, 0, LNB, PTROFFSET(BASE));
        if (REG == BREG)
          JJJ = ADB;
        else
          JJJ = IAD;
        PSF1(JJJ, 0, DISP);
        if (BIMSTR == 1) NOTEASSMENT(REG, 3, NAMEP);
        return;
      // ACCESS=0STORE
      MOD_1:

        if (1 <= SIZE && SIZE <= 2) {
          // BYTES&HALFSREQUIREDESCRIPTOR

          if (!(GRUSE[(DR) - (0)] = SIZE + 11))
            PF1(LDTB, 0, PC, MAPDES(SIZE + 2));
          if (!(12 <= GRUSE[(DR) - (0)] && GRUSE[(DR) - (0)] = 13 &&
                GRINF1[(DR) - (0)] = BASE))
            PSF1(LDA, 1, PTROFFSET(BASE));
          GRUSE[(DR) - (0)] = SIZE + 11;
          GRINF1[(DR) - (0)] = BASE;
          ACCESS = 1;
          AREA = 0;

        } else
          AREA = AREACODE();
        return;
      // ACCESS=0FETCH
      MOD_2:

        if (SIZE > 2 && Z == 5 && PARMCHK == 0) {
          NEST = -1;
          return;
        }
      // ACCESS=2FETCH
      MOD_10:

        if (GRUSE[(REG) - (0)] = 9 && NAMEP > 0) {
          if (GRINF1[(REG) - (0)] = NAMEP && GRUSE[(REG) - (0)] & 255 == 9 ||
              GRINF2[(REG) - (0)] = NAMEP && GRUSE[(REG) - (0)] >> 16 == 9) {
            if (REGISTER[(REG) - (0)] = 0) BOOTOUT(REG);
            NEST = REG;
            return;
          }
        }

        TOTHER = REG ^ 7;
        if (GRUSE[(TOTHER) - (0)] = 9 && NAMEP > 0) {
          KK = GRINF1[(TOTHER) - (0)];
          if (KK == NAMEP && GRUSE[(TOTHER) - (0)] & 255 == 9 ||
              GRINF2[(TOTHER) - (0)] = NAMEP &&
                  GRUSE[(TOTHER) - (0)] >> 16 == 9) {
            if (REG == BREG && REGISTER[(BREG) - (0)] = 0) {
              PF1(ST, 0, BREG, 0)
              // ACCTOBRGE
              ;

              GRUSE[(REG) - (0)] = GRUSE[(TOTHER) - (0)];
              GRINF1[(REG) - (0)] = GRINF1[(TOTHER) - (0)];
              GRINF2[(REG) - (0)] = GRINF2[(TOTHER) - (0)];
              NEST = REG;
              return;
            }

            if (REG == ACCR && Z == 2) {
              ACCESS = 0;
              AREA = 7;
              SIZE = 4;
              DISP = 0;
            }
          }
        }

        if (1 <= SIZE && SIZE <= 2 && ACCESS == 0) {
          // BYTES

          if (!(GRUSE[(DR) - (0)] = SIZE + 11))
            PF1(LDTB, 0, PC, MAPDES(SIZE + 2));
          if (!(12 <= GRUSE[(DR) - (0)] && GRUSE[(DR) - (0)] = 13 &&
                GRINF1[(DR) - (0)] = BASE))
            PSF1(LDA, 1, PTROFFSET(BASE));
          GRUSE[(DR) - (0)] = SIZE + 11;
          GRINF1[(DR) - (0)] = BASE;
          if (Z == 5 && PARMCHK == 0) {
            ACCESS = 1;
            AREA = 0;
            NEST = -1;
            return;
          }

          GETINACC(REG, 1, 1, 0, DISP);
          if (PARMCHK != 0 && SIZE == 2) TESTASS(REG, TYPE, SIZE);
          NEST = REG;
          return;
        }
        // ACCESS=3FETCH

      MOD_14:

        if (ACCESS >= 2 && AREA == 7 ||
            GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
                GRINF1[(DR) - (0)] = NAMEP & 0xFFFF) {
          AREA = 7;
          DISP = 0;
        } else
          AREA = AREACODE();
      DRFETCH:
        GETINACC(REG, SIZE >> 2, ACCESS, AREA, DISP);
        if (PARMCHK == 1 && SIZE != 1) TESTASS(REG, TYPE, SIZE);
        if (ACCESS == 0 || ACCESS == 2 && NAMEP > 0) {
          GRUSE[(REG) - (0)] = 9;
          GRINF1[(REG) - (0)] = NAMEP;
        }
        if (ACCESS >= 2 && NAMEP > 0) {
          GRUSE[(DR) - (0)] = 7;
          GRINF1[(DR) - (0)] = NAMEP & 0xFFFF;
        }
        NEST = REG;
        return;
      // ACCESS=0SETDESCRIPTOR
      MOD_3:

        if (!(REG == ACCR || REG == DR)) ABORT();
        if (TYPE == 3) {
          GETINACC(REG, 2, 0, AREACODE(), DISP - 8)
          // PTRBEFORESTART
          ;

          return;

        } else
          JJJ = PARAMDES(PREC);

        if (REG == ACCR) {
          GETINACC(REG, 1, 0, LNB, PTROFFSET(BASE));
          OP1 = IAD;
          OP2 = LUH;

        } else {
          PSF1(LDA, 1, PTROFFSET(BASE));
          OP1 = INCA;
          OP2 = LDTB;
        }

        PSF1(OP1, 0, DISP);
        PF1(OP2, 0, PC, JJJ);
        GRUSE[(REG) - (0)] = 0;
        return;
      // ACCESS=1FETCHADDRESS
      MOD_4:

        JJ = NUMMOD;
        // HALFCOMEWITHBYTEMODIFIER
        if (PREC > 4) JJ = JJ * BYTES[(PREC) - (0)];

        goto MD20;
      // ACCESS=5FETCHADDRESS
      MOD_20:

        JJ = NUMMOD + XDISP;
      MD20:
        GETINACC(REG, 1, 0, AREACODE(), DISP + 4)
        // BACKHALFOFDESCTR
        ;

        if (REG == ACCR)
          OP1 = IAD;
        else
          OP1 = ADB;
        if (!(JJ == 0)) PSF1(OP1, 0, JJ);
        return;
      // ACCESS=1SETDESCRIPTOR
      MOD_7:

        JJ = NUMMOD;
        // HALFCOMEWITHBYTEMODIFIER
        if (PREC > 4) JJ = JJ * BYTES[(PREC) - (0)];

        GETINACC(REG, 2, 0, AREACODE(), DISP)
        // DESCTR
        ;

        if (REG == ACCR)
          OP1 = IAD;
        else
          OP1 = INCA;
        if (!(JJ == 0)) PSF1(OP1, 0, JJ);
        return;
      // ACCESS=1STORE
      MOD_5:
        // ACCESS=1FETCH

      MOD_6:

        if (NUMMOD == 0) {
          ACCESS = 2;
          goto MOD[KK + 8];
        }

        if (!(GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
              GRINF1[(DR) - (0)] = NAMEP & 0xFFFF))
          GETINACC(DR, 2, 0, AREACODE(), DISP);
        if (NAMEP > 0) {
          GRUSE[(DR) - (0)] = 7;
          GRINF1[(DR) - (0)] = NAMEP & 0xFFFF;
        }
        AREA = 0;
        DISP = NUMMOD;
        if (Z == 2) goto DRFETCH;
        return;
      // ACCESS=3FETCHADDRESS
      MOD_12:

        JJJ = BYTES[(PREC) - (0)];
        //
        // REMEMBERHALFINTEGERSREADYSCALEDBYVMYORINCANAME
        //

        if (!(JJJ == 1 || PREC == 4)) {
          PSF1(MYB, 0, JJJ);
          GRUSE[(BREG) - (0)] = 0;
        }
      MD12:
        if (REG == BREG) {
          if (AREA == 7) {
            PF1(INCA, 0, BREG, 0);
            GRUSE[(DR) - (0)] = 0;
            PF1(LB, 2, 0, 11)
            // DRBTMHALFTOBVIAIMAGESTOREINSTRUCTION
            ;

          } else
            PF1(ADB, 0, AREACODE(), DISP + 4);
          GRUSE[(BREG) - (0)] = 0;
          return;
        }
        // ACCESS=2FETCHADDRESS

      MOD_8:

        if (AREA == 7)
          GETINACC(REG, 1, 2, 0, 11);
        else
          GETINACC(REG, 1, 0, AREACODE(), DISP + 4);
        if (ACCESS & 3 == 3) PF1(IAD, 0, BREG, 0);
        return;
      // ACCESS=2STORE
      MOD_9:
        // ACCESS=3STORE

      MOD_13:

        if (AREA == 7) {
          DISP = 0;
          return;
        }
        if (GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
            GRINF1[(DR) - (0)] = NAMEP & 0xFFFF) {
          AREA = 7;
          DISP = 0;
        } else
          AREA = AREACODE();
        return;
      // ACCESS=2SETDESCRIPTOR
      MOD_11:

        if (AREA == 7) {
          if (!(REG == DR)) COPYDR();
          return;
        }

        GETINACC(REG, 2, 0, AREACODE(), DISP);
        return;
      // ACCESS=3SETDESCRIPTOR
      MOD_15:

        if (!(AREA == 7)) GETINACC(DR, 2, 0, AREACODE(), DISP);
        if (PREC == 4 || TYPE == 3 && PARMARR == 0)
          JJ = INCA;
        else
          JJ = MODD;
        PF1(JJ, 0, BREG, 0);
        if (REG != DR) COPYDR();
        GRUSE[(DR) - (0)] = 0;
        return;
      // ACCESS=4STORE
      MOD_17:
        // ACCESS=4FETCH

      MOD_18:

        if (SIZE == 1) {
          DISP = DISP - 8;
          goto MD2526;
        }
        DISP = DISP + XDISP;
        ACCESS = 0;
        // REDUCESTOACCESS=0
        goto MOD[KK];
        // ACCESS=9FETCHADDRESS

      MOD_36:
        // ACCESS=9STORE

      MOD_37:
        // ACCESS=9FETCH

      MOD_38:
        // ACCESS=9SETDESCRIPTOR

      MOD_39:

        XYNB = BASEREG(8, NAMEP & 0xFFFF);
        DISP = NUMMOD + XDISP;
        AREA = XYNB;
        ACCESS = 3;
        NAMEP = 0;
        // HASREDUCEDTOACCESS=2
        goto MOD[KK + 8];
        // ACCESS=4FETCHADDRESS

      MOD_16:

        DISP = DISP - 8;
      // ACCESS=6FETCHADDRESS
      MOD_24:

        GETINACC(REG, 1, 0, AREACODE(), DISP + 4);
        if (REG == BREG)
          KK = ADB;
        else
          KK = IAD;
        if (!(XDISP == 0)) PSF1(KK, 0, XDISP);
        return;
      MD2526:
      // ACCESS=6STORE
      MOD_25:
        // ACCESS=6FETCH

      MOD_26:

        if (SIZE > 2) {
          XYNB = BASEREG(8, NAMEP & 0xFFFF);
          AREA = XYNB;
          ACCESS = 0;
          DISP = XDISP;
          goto MOD[KK];
        }

        if (SIZE == 1) {
          // SIZE=1FORBYTES

          if (!(GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
                GRINF1[(DR) - (0)] = NAMEP & 0xFFFF))
            PSORLF1(LD, 0, AREACODE(), DISP);

        } else {
          // SIZE=2FORHALFS

          if (!(GRUSE[(DR) - (0)] = 13 || GRUSE[(DR) - (0)] = 15))
            PF1(LDTB, 0, PC, MAPDES(4));
          if (!(NAMEP > 0 && GRINF1[(DR) - (0)] = NAMEP & 0xFFFF &&
                    GRUSE[(DR) - (0)] = 7 ||
                GRUSE[(DR) - (0)] = 15))
            PSORLF1(LDA, 0, AREACODE(), DISP + 4);
        }

        GRUSE[(DR) - (0)] = 0;
        if (NAMEP > 0) {
          GRUSE[(DR) - (0)] = 8 * SIZE - 1;
          GRINF1[(DR) - (0)] = NAMEP & 0xFFFF;
        }
        ACCESS = 1;
        AREA = 0;
        DISP = XDISP;
        if (DISP == 0 && ACCESS == 1) {
          AREA = 7;
          ACCESS = 2;
        }
        if (Z == 2) goto DRFETCH;
        return;
      // ACCESS=5SETDESCRIPTOR
      MOD_23:

        XDISP = NUMMOD + XDISP;
        goto MD31;
      // ACCESS=4SETDESCRIPTOR
      MOD_19:

        DISP = DISP - 8;
      // ACCESS=6SETDESCRIPTOR
      MOD_27:
        // ACCESS=7SETDESRCPTOR

      MOD_31:

      MD31:
        GETINACC(DR, 2, 0, AREACODE(), DISP);
        if (!(XDISP == 0)) PSF1(INCA, 0, XDISP);
        if (ACCESS == 7) PF1(INCA, 0, BREG, 0);
        if (TYPE == 3 || TYPE == 5)
          PSORLF1(LDB, 0, 0, ACC);
        else
          PF1(LDTB, 0, PC, PARAMDES(PREC));
        if (REG != DR) COPYDR();
        return;
      // ACCESS=7FETCHADDRESS
      MOD_28:

        if (!(XDISP == 0)) {
          PSF1(ADB, 0, XDISP);
          GRUSE[(BREG) - (0)] = 0;
        }
        ACCESS = 3;
        goto MD12;
      // ACCESS=7STORE
      MOD_29:
        // ACCESS=7FETCH

      MOD_30:
        // ACCESS=5STORE

      MOD_21:
        // ACCESS=5FETCH

      MOD_22:

        if (1 <= SIZE && SIZE <= 2) {
          if (SIZE == 1) {
            if (!(GRUSE[(DR) - (0)] = 7 && NAMEP > 0 &&
                  GRINF1[(DR) - (0)] = NAMEP & 0xFFFF))
              PSORLF1(LD, 0, AREACODE(), DISP);

          } else {
            // SIZE=2HALFS

            if (!(NAMEP >= 0 && GRINF1[(DR) - (0)] = NAMEP & 0xFFFF &&
                      GRUSE[(DR) - (0)] = 7 ||
                  GRUSE[(DR) - (0)] = 15))
              PSORLF1(LDA, 0, AREACODE(), DISP + 4);
            if (!(GRUSE[(DR) - (0)] = 13 || GRUSE[(DR) - (0)] = 15))
              PF1(LDTB, 0, PC, MAPDES(4));
          }

          GRUSE[(DR) - (0)] = 0;
          if (NAMEP > 0) {
            GRUSE[(DR) - (0)] = 8 * SIZE - 1;
            GRINF1[(DR) - (0)] = NAMEP & 0xFFFF;
          }
          if (ACCESS == 7) {
            if (XDISP != 0) PSF1(ADB, 0, XDISP);
            ACCESS = 3;
            AREA = 7;
            DISP = 0;
            GRUSE[(BREG) - (0)] = 0;

          } else {
            // ACCESS=5

            DISP = XDISP + NUMMOD;
            ACCESS = 1;
            AREA = 0;
          }

          NAMEP = 0;
          if (Z == 2) goto DRFETCH;
          return;
        }

        if (ACCESS == 7) {
          PSORLF1(ADB, 0, AREACODE(), DISP + 4);
          GRUSE[(BREG) - (0)] = 0;
          XYNB = XORYNB(0, 0);
          PF1(LDCODE[(XYNB) - (0)], 0, BREG, 0);
          GRUSE[(XYNB) - (0)] = 0;
          DISP = XDISP;

        } else {
          // ACCESS=5

          XYNB = BASEREG(8, NAMEP & 0xFFFF);
          DISP = NUMMOD + XDISP;
        }

        AREA = XYNB;
        ACCESS = 0;
        NAMEP = 0;
        goto MOD[KK];
      // ACCESS=8FETCHADDRESS
      MOD_32:
        // ACCESS=8STORE

      MOD_33:
        // ACCESS=8FETCH

      MOD_34:
        // ACCESS=8SETDESCRIPTOR

      MOD_35:

        DISP = DISP + XDISP;
        NAMEP = 0;
        ACCESS = 2;
        goto MOD[KK + 8];
      // ACCESS=10FETCHADDRESS
      MOD_40:
        // ACCESS=10STORE

      MOD_41:
        // ACCESS=10FETCH

      MOD_42:
        // ACCESS=10SETDESCRIPTOR

      MOD_43:

        XYNB = BASEREG(8, NAMEP & 0xFFFF);
        AREA = XYNB;
        ACCESS = 2;
        DISP = XDISP;
        NAMEP = 0;
        goto MOD[KK + 8];
      // ACCESS=11FETCHADDRESS
      MOD_44:
        // ACCESS=11STORE

      MOD_45:
        // ACCESS=11FETCH

      MOD_46:
        // ACCESS=11SETDESCRIPTOR

      MOD_47:

        PSORLF1(ADB, 0, AREACODE(), DISP + 4);
        GRUSE[(BREG) - (0)] = 0;
        XYNB = XORYNB(0, 0);
        PF1(LDCODE[(XYNB) - (0)], 0, BREG, 0);
        GRUSE[(XYNB) - (0)] = 0;
        NAMEP = 0;
        AREA = XYNB;
        ACCESS = 2;
        DISP = XDISP;
        goto MOD[KK + 8];
        int BASEREG(int GRUSEVAL, int GRINFVAL) {
          //***********************************************************************
          //*SETSABASEREGISTERFORRECORDWHOSEPOINTERISATAREA&DISP*
          //***********************************************************************

          int XYNB;

          if (NAMEP <= 0) {
            GRUSEVAL = 0;
            GRINFVAL = 0;
          }
          XYNB = XORYNB(GRUSEVAL, GRINFVAL);
          if (!(GRUSE[(XYNB) - (0)] = GRUSEVAL && GRUSEVAL > 0 &&
                GRINF1[(XYNB) - (0)] = GRINFVAL))
            PSORLF1(LDCODE[(XYNB) - (0)], 0, AREACODE(), DISP + 4);
          GRUSE[(XYNB) - (0)] = GRUSEVAL;
          GRINF1[(XYNB) - (0)] = GRINFVAL;
          GRAT[(XYNB) - (0)] = CA;
          return XYNB;
        };
      };

      void CRCALL(int RTNAME) {
        //***********************************************************************
        //*COMPILEAROUTINEORFNCALL*
        //*THEPROCEDURECONSISTOFTHREEPARTS:-*
        //*A)PLANTTHEPARAMETER(IFANY)*
        //*B)ENTERTHEROUTINEORFN*
        //*C)FORGETANYREGISTERSWHICHHOLDENTITIESTHATCANBE*
        //*ALTEREDBYTHECALLEDPROCEDURE.*
        //***********************************************************************
        int II;
        int III;
        int QQQ;
        int DLINK;
        int JJ;
        int JJJ;
        int NPARMS;
        int PT;
        int LP;
        int PSIZE;
        int TWSP;
        int FPTR;
        int TYPEP;
        int PRECP;
        int NAMP;
        int TL;
        int MOVEPTR;
        int CLINK;
        int RDISP;

        recfm *LCELL;
        //(LISTF)

        PT = PTYPE;
        JJJ = J;
        TL = OLDI;
        TWSP = 0;
        LP = I;
        CLINK = K;
        TYPEP = TYPE;
        PRECP = PREC;
        NAMP = NAM;
        RDISP = MIDCELL;
        //
        // NOWCHECKTHATTHERIGHTNUMBEROFPARAMETERSHAVEBEENPROVIDED
        //

        TESTAPP(NPARMS);
        P = P + 2;
        if (KFORM != NPARMS) {
          FAULT(19, RTNAME)
          // WRONGNOOFPARAMETERSGIVEN
          ;

          SKIPAPP();
          P = P - 1;
          return;
        }
        //

        SAVEIRS()
        // STACKANYIRSBEFORSASF
        ;

        PSF1(PRCL, 0, 4);
        FPTR = 20;
        goto FIRSTPARM;
        //

      NEXTPARM:
        CLINK = LCELL;
      // DEPARTATONCEIFNOPARAMS
      FIRSTPARM:
        if (CLINK == 0) goto ENTRYSEQ;

        LCELL = ASLIST[(CLINK) - (0)];
        PSIZE = LCELL >> 16;
        P = P + 1;
        PTYPE = LCELL >> 16;
        UNPACK();
        II = TYPE;
        III = PREC;
        JJ = (NAM << 1 | ARR) & 3;
        if (!(JJ == 0 && ROUT == 0 || A == 4 && A == 1 && A == 2)) {
          FAULT(22, 0);
          SKIPEXP();
          goto NEXTPARM;
        }
        //
        // RTTYPEPARAMS,PASS4WORDSSETUPASCODEDESC,DUMMY&ENVIRONMENT
        //

        if (ROUT == 1) {
          II = PTYPE;
          P = P + 5;
          CNAME(13, ACCR)
          // SETUP4WDSINACC
          ;

          if (II & 255 != PTYPE & 255)
            FAULT(22, 0)
            // PREC&TYPESIMILAR
            ;

          P = P + 1;
          MOVEPTR = 16;
          goto STUFF;
        }

        goto FPD[JJ];
      // VALUEPARAMETERS
      FPD_0:

        if (TYPE == 5) {
          CSTREXP(17, DR)
          // TOWKAREA&KEEPWKAREA
          ;

          PSF1(LDB, 0, PSIZE);
          if (REGISTER[(ACCR) - (0)] = 3) {
            PF1(ST, 0, TOS, 0);
            REGISTER[(ACCR) - (0)] = 0;
          }
          PF1(STD, 0, TOS, 0);
          PUSH(TWSP, VALUE, 268, 0)
          // RETURNWKAREAATCALL
          ;

          FPTR = FPTR + 8;
          goto NEXTPARM;

        } else {
          if (PREC == 6)
            JJ = 3;
          else
            JJ = TYPE;
          CSEXP(ACCR, III << 4 | II);
          MOVEPTR = ((BYTES[(III) - (0)] + 3) & (-4));
        }

        goto STUFF;
        //
        // NAMEPARAMETERS

      FPD_2:

        P = P + 5;
        FNAME = FROMAR2(P);
        COPYTAG(FNAME);
        if (II != 0 || TYPE == 0) {
          CNAME(3, ACCR);
          if (!(II == TYPE && III == PREC)) FAULT(22, FNAME);

        } else {
          CNAME(4, ACCR);
          if (TYPE <= 2)
            JJ = PREC << 27 | TYPE;
          else
            JJ = (0x1A << 24) + ACC;
          STORECONST(III, 4, );
          PF1(LUH, 0, PC, III);
        }

        P = P + 1;
        MOVEPTR = 8;
        goto STUFF;
        //
        // ARRAYNAME(&VALUE)

      FPD_1:
      FPD_3:
        //
        // FORARRAYNAMEPARAMETERSTHENOOFDIMENSIONSOFTHEARRAYIS
        // DEDUCEDFROMTHEFIRSTCALLANDSTOREDINSTREAM3OFTHEPARAMETER
        // LIST.ONANYSUBSEQUENTCALLONLYARRAYSOFTHESAMEDIMENSIONCAN
        // BEPASSED
        //
        P = P + 5;
        CNAME(12, ACCR);
        GETINACC(ACCR, 4, 0, AREACODE(), DISP);
        P = P + 1;
        MOVEPTR = 16;
        if (!(1 <= ARR && ARR <= 2 && II == TYPE && III == PREC)) {
          FAULT(22, 0);
          goto STUFF;
        }
        QQQ = FROM1(TCELL)
              // DIMENSIONOFACTUAL(IFKNOWN)
              & 15;
        // DIMENSIONOFFORMAL

        JJ = LCELL & 15;

        if (JJ == 0) {
          JJ = QQQ;
          LCELL = LCELL | JJ;
        }
        if (QQQ == 0) {
          QQQ = JJ;
          REPLACE1(TCELL, FROM1(TCELL) | JJ);
        }
        if (!(JJ == QQQ)) FAULT(22, 0);
      STUFF:
        REGISTER[(ACCR) - (0)] = 3;
        FPTR = FPTR + MOVEPTR;
        goto NEXTPARM;
      // CODEFORRTENTRY
      ENTRYSEQ:

        if (REGISTER[(ACCR) - (0)] = 3) {
          PF1(ST, 0, TOS, 0);
          REGISTER[(ACCR) - (0)] = 0;
        }
        J = JJJ;
        //
        // RETURNANYSTRINGWSPACEHERE.CANBEUXEDAGAINFORRESULT
        //

        while (TWSP != 0) {
          POP(TWSP, QQQ, JJ, III);
          RETURNWSP(QQQ, 268);
        }
        //
        // STRINGFNSNEEDAWORKAREATORETURNTHEIRRESULTS
        //

        if (TYPEP == 5 && NAMP <= 1) {
          GETWSP(QQQ, 268);
          // FORCSTREXPTOUSE
          STRFNRES = QQQ;

          III = 0x18000100;
          QQQ = QQQ + 8;
          STORECONST(JJ, 8, );
          PF1(LD, 0, PC, JJ);
          PSF1(INCA, 1, PTROFFSET(RBASE));
          PF1(STD, 0, TOS, 0);
          FPTR = FPTR + 8;
        }
        //
        // ORDINARYROUTINESWILLANDRTPARAMSMAYREQUIREANEXTRAPARAMETER
        // BEINGLNBFORTHELEVELOFROUTINEDECLARATIONTOBESTACKED
        //
        if (JJJ == 14) {
          // EXTERNAL

          NMDECS[(LEVEL) - (0)] = NMDECS[(LEVEL) - (0)] | 2;
          II = SETXORYNB(-1, -1);
          PSF1(RALN, 0, FPTR >> 2);
          PF1(CALL, 2, II, RDISP);

        } else {
          if (NAMP & 1 == 0) {
            // INTERNALRTCALLS

            if (LP == 0) {
              PSF1(LD, 1, 12);
              if (!(RDISP == 0)) PSF1(INCA, 0, RDISP);
              PSF1(RALN, 0, FPTR >> 2);
              PF1(CALL, 2, 7, 0);

            } else {
              // NORMALINTERNALCALL

              II = SETXORYNB(XNB, LP);
              PSF1(RALN, 0, FPTR >> 2);
              RTJUMP(CALL, ASLIST[(TAGS[(RTNAME) - (0)]) - (0)]);
            }

          } else {
            AREA = -1;
            BASE = LP;
            AREA = AREACODE();
            GETINACC(DR, 2, 0, AREA, RDISP)
            // DESCRTODR
            ;

            PSORLF1(LXN, 0, AREA, RDISP + 12)
            // XNBTOENVIRONMENT
            ;

            PSF1(RALN, 0, FPTR >> 2)
            // RAISEFORNORMALPARAMS
            ;

            PF1(CALL, 2, 7, 0)
            // ANDENTERVIADESCRPTRINDR
            ;
          }
        }

        FORGET(-1);
        ROUT = 1;
        TYPE = TYPEP;
        NAM = NAMP;
        PREC = PRECP;
        PTYPE = PT;
      };

      void RTJUMP(int CODE, int *LINK) {
        //***********************************************************************
        //*PLANTSACALLTOTHEAPPROPIATEENTRYADDRESSINLINK*
        //*IFROUTINEHASBEENSPECIFIEDBUTNOTDESCRIBEDTHEJUMPCAN*
        //*NOTBEPLANTEDANDISLINKEDINTOALISTHEADEDBYLINK*
        //*TOAWAITFILLING(BY' RHEAD ')WHENTHEBODYISGIVEN.*
        //*THEFORMATOFANENTRYIS:-*
        //*S1(32BITS)=INSTRNTOBEPLANTED*
        //*S2(32BITS)=ADDRESSOFJUMPTOBEFILLED*
        //*THECODINGASSUMESI,J&OLDIARESETUPFORTHECALLEDROUTINE*
        //***********************************************************************
        int DP;

        if (J == 15) {
          // RTBODYNOTGIVENYET

          PUSH(LINK, CODE << 24 | 3 << 23, CA, 0);
          PF1(CODE, 0, 0, 0);

        } else {
          // BODYGIVENANDADDRESSKNOWN

          DP = LINK - CA;
          // CALLWORKSINHALFWORDS!
          if (CODE == CALL) DP = DP / 2;

          PSF1(CODE, 0, DP);
        }
      };

      int TSEXP(int *VALUE) {
        int PP;
        int REXP;
        int KK;
        int SIGN;
        int CT;

        TYPE = 1;
        PP = P;
        REXP = 2 - A;
        P = P + 3;
        SIGN = A;
        if (!(SIGN == 4 || A == 2)) goto TYPED;
        goto SW[A];
      // NAME
      SW_1:

        P = P + 2;
        REDUCETAG();
        goto TYPED;
      // CONSTANT
      SW_2:

        CT = A;
        TYPE = CT & 7;
        if (!(CT == 0x41 && SIGN != 3)) goto TYPED;
        KK = FROMAR2(P + 3);
        if (REXP != 0 && A == CONCOP) {
          TYPE = 5;
          goto TYPED;
        }
        if (!(REXP == 0 && 0 <= KK && KK <= 255)) goto TYPED;
        VALUE = KK;
        P = P + 6;
        if (SIGN != 2) return 1;
        VALUE = -VALUE;
        return -1;
      // SUBEXPRN
      SW_3:

      TYPED:
        P = PP;
        return 0;
      };

      void SKIPEXP(void) {
        //***********************************************************************
        //*SKIPSOVERTHEEXPRESSIONPOINTEDATBYP.USEDFORERROR*
        //*RECOVERYANDTOEXTRACTINFORMATIONABOUTTHEEXPRESSION.*
        //***********************************************************************
        int OPTYPE;
        int PIN;
        int J;

        PIN = P;
        // TOP<+''>
        P = P + 3;

        do {
          // DOWNTHELISTOFOPERATORS
          // ALTOFP<OPERAND>

          OPTYPE = A;

          P = P + 2;
          if (OPTYPE == 0 || OPTYPE > 3) ABORT();
          if (OPTYPE == 3)
            SKIPEXP()
            // SUBEXPRESSIONS
            ;
          //

          if (OPTYPE == 2) {
            // OPERANDISACONSTANT
            // CONSTANTTYPE

            J = A & 7;

            if (J == 5)
              P = P + A + 6;
            else
              P = P + 1 + BYTES[(A >> 4) - (0)];
          }
          //

          if (OPTYPE == 1) {
            // NAME

            P = P - 1;
            do {
              P = P + 3;
              SKIPAPP()
              // TILLNOENAME
              ;
            } while (!(A == 2))

                P = P + 1;
          }
          //

          P = P + 1;
          // NOMORERESTOFEXP
          if (A == 2) break;

        } while (1);
      };
      // OFROUTINESKIPEXP

      void SKIPAPP(void) {
        //***********************************************************************
        //*SKIPSACTUALPARAMETERPART*
        //*PISONALTOFP<APP>ATENTRY*
        //***********************************************************************
        int PIN;

        PIN = P;
        while (A == 1) {
          P = P + 1;
          SKIPEXP();
        }
        P = P + 1;
      };

      void NOAPP(void) {
        P = P + 2;
        if (A == 1) {
          //<APP>PRESENT

          FAULT2(17, 0, FROMAR2(P - 2));
          SKIPAPP();
          // PNOWPOINTSTOENAME

        } else
          P = P + 1;
      };

      void TESTAPP(int *NUM) {
        //***********************************************************************
        //*THISROUTINECOUNTSTHENUMBEROFACTUALPARAMETERS*
        //*WHICHITRETURNSINNUM.*
        //***********************************************************************
        int PP;
        int Q;
        // PONNAMEATENTRY

        Q = 0;
        PP = P;
        P = P + 2;

        while (A == 1) {
          // NO(MORE)PARAMETERS

          P = P + 1;
          Q = Q + 1;
          SKIPEXP();
        }
        P = PP;
        NUM = Q;
      };

      void TESTASS(int REG, int TYPE, int SIZE) {
        //***********************************************************************
        //*TESTACCORBFORTHEUNASSIGNEDPATTERN*
        //***********************************************************************

        int OPCODE;
        int A;
        int D;

        if (TYPE == 5) {
          if (!(REG == DR)) return;
          PF1(STD, 0, TOS, 0);
          PF2(SWEQ, 1, 1, 0, 0, UNASSPAT & 255);

        } else {
          if (REG == BREG)
            OPCODE = CPB;
          else
            OPCODE = UCP;
          if (SIZE == 16) PF1(STUH, 0, TOS, 0);
          if (SIZE == 2) {
            A = 0;
            D = UNASSPAT >> 16;
          } else {
            A = PC;
            D = PLABS[(1) - (0)];
          }
          PF1(OPCODE, 0, A, D);
          if (SIZE == 16) PF1(LUH, 0, TOS, 0);
        }

        PPJ(8, 5)
        // BEERRORROUTINE5
        ;

        if (TYPE == 5) PF1(LD, 0, TOS, 0);
      };

      void GETWSP(int *PLACE, int SIZE) {
        //***********************************************************************
        //*FINDORCREATEATEMPORARYVARIABLEOF'SIZE'WORDS*
        //***********************************************************************

        int J;
        int K;
        int L;

        if (SIZE > 4) SIZE = 0;
        POP(AVLWSP[(SIZE) - (0)][(LEVEL) - (0)], J, K, L);
        if (K <= 0) {
          // MUSTCREATETEMPORARY

          if (SIZE > 1) ODDALIGN();
          K = N;
          if (SIZE == 0)
            N = N + 268;
          else
            N = N + (SIZE << 2);
        }

        PLACE = K;
        if (!(SIZE == 0)) PUSH(TWSPHEAD, K, SIZE, 0);
      };

      void RETURNWSP(int PLACE, int SIZE) {
        if (SIZE > 4) SIZE = 0;
        if (PLACE < 511)
          PUSH(AVLWSP[(SIZE) - (0)][(LEVEL) - (0)], 0, PLACE, 0);
        else
          INSERTATEND(AVLWSP[(SIZE) - (0)][(LEVEL) - (0)], 0, PLACE, 0);
      };

      void SETLINE(void) {
        //***********************************************************************
        //*UPDATETHESTATEMENTNO*
        //***********************************************************************

        int XYNB;
        int I;
        int LDI;
        int STI;
        int REG;

        LDI = LSS;
        STI = ST;
        REG = ACCR;
        if (PARMDBUG | PARMPROF == 0 && GRUSE[(ACCR) - (0)] = 0 &&
                GRUSE[(BREG) - (0)] = 0 ||
            GRUSE[(BREG) - (0)] = 5) {
          LDI = LB;
          STI = STB;
          REG = BREG;
        }

        if (PARMLINE | PARMDBUG != 0) PSF1(LDI, 0, LINE);
        if (PARMLINE == 1) {
          PSF1(STI, 1, DIAGINF[(LEVEL) - (0)]);
          GRUSE[(REG) - (0)] = 5;
          GRINF1[(REG) - (0)] = LINE;
        }

        if (PARMDBUG != 0) PPJ(0, 3);
        if (PARMPROF != 0) {
          XYNB = SETXORYNB(-1, 0)
              // TOPLT
              ;

          PSF1(LSS, 0, 1);
          I = PARMPROF + 8 + 4 * LINE;
          PF1(IAD, 0, XYNB, I);
          PF1(ST, 0, XYNB, I);
          GRUSE[(ACCR) - (0)] = 0;
        }
      };

      void FORGET(int REG) {
        int L;
        int U;

        L = REG;
        U = L;
        if (L < 0) {
          L = 0;
          U = 7;
        }
        for (REG = L; REG != U; REG += 1) {
          if (REGISTER[(REG) - (0)] = 0) {
            GRUSE[(REG) - (0)] = 0;
            GRINF1[(REG) - (0)] = 0;
          }
        }
      };

      void SAVEIRS(void) {
        //***********************************************************************
        //*DUMPACCAND-ORBONTOTHESTACK.USEDBEFORECALLINGFNS*
        //*INEXPRESSIONS.*
        //***********************************************************************
        if (REGISTER[(ACCR) - (0)] = 1 && 1 == REGISTER[(BREG) - (0)]) ABORT();
        if (REGISTER[(ACCR) - (0)] = 1) BOOTOUT(ACCR);
        if (REGISTER[(BREG) - (0)] = 1) BOOTOUT(BREG);
        if (REGISTER[(DR) - (0)] = 1) BOOTOUT(DR);
      };

      void BOOTOUT(int REG) {
        //***********************************************************************
        //*REMOVETEMPORARIESFROMREGINTOLOCALORONTOSTACK*
        //*ITISVITALTHATACCISSTACKEDFIRSTBEFOREBORDR*
        //*OTHERWISEMIXUPSOCCURWHENPASSINGMULTI-DIMENSIONARRAY*
        //*ELEMENTSWITHFNSASSUBSCRIPTSASVALUESCALARS*
        //***********************************************************************
        const char BOOTCODE[(7) - (0) + 1] = 0x48,
            0x58, 0x5C, [LOW... HIGH] = 0, 0x5A;

        int CODE;

        recfm *R;
        //(RD)

        CODE = BOOTCODE[(REG) - (0)];
        if (!(1 <= REGISTER[(REG) - (0)] && REGISTER[(REG) - (0)] = 3 &&
              CODE != 0))
          ABORT();
        R = ;
        if (REGISTER[(REG) - (0)] = 2) {
          if (R == 0) GETWSP(R, BYTES[(R >> 4) - (0)] >> 2);
          PSF1(CODE, 1, R);

        } else {
          if (REG != ACCR && REGISTER[(ACCR) - (0)] = 1 ||
              REGISTER[(ACCR) - (0)] = 3)
            BOOTOUT(ACCR);
          PF1(CODE, 0, TOS, 0);
        }

        CHANGERD(REG);
        REGISTER[(REG) - (0)] = 0;
      };

      void COPYDR(void) {
        //***********************************************************************
        //*COPYTHEDRTOACCSAVINGANYTHINGINACC*
        //***********************************************************************

        if (REGISTER[(ACCR) - (0)] = 0) BOOTOUT(ACCR);
        PSF1(CYD, 0, 0);
        GRUSE[(ACCR) - (0)] = 0;
      };

      void CHANGERD(int REG) {
        //***********************************************************************
        //*CHANGEARESULTDESCRIPTORWHENOPERANDISSTACKED*
        //***********************************************************************

        recfm *OPND;
        //(RD)

        if (!(1 <= REGISTER[(REG) - (0)] && REGISTER[(REG) - (0)] = 3))
          ABORT()
          // I-RORPARAM
          ;

        OPND = ;
        if (REGISTER[(REG) - (0)] = 1) {
          // CHANGERESULTDESCRIPTOR

          if (!(OPND == 9 && OPND >> 4 == REG)) ABORT();
          // CHANGETO'STACKED'
          OPND = 8;

          OPND = TOS << 4;
        }

        if (REGISTER[(REG) - (0)] = 2) {
          OPND = 7;
          OPND = LNB << 4;
        }
      };

      void STORETAG(int KK, int SLINK) {
        int Q;
        int QQ;
        int QQQ;
        int I;
        int TCELL;

        recfm *LCELL;
        //(LISTF)

        TCELL = TAGS[(KK) - (0)];
        Q = PTYPE << 16 | LEVEL << 8 | RBASE << 4 | J;
        // ABORTunless(KFORM!ACC)>>16=0

        QQQ = SLINK << 16 | KFORM;
        QQ = SNDISP << 16 | ACC;
        if (FROM1(TCELL) >> 8 & 63 == LEVEL) {
          FAULT(7, KK);
          Q = FROM1(TCELL)
                  // COPYUSEDBITSACCROSS
                  & 0xC000 |
              Q;

          REPLACE123(TCELL, Q, QQ, QQQ);

        } else {
          I = ASL;
          if (I == 0) I = MORESPACE();
          LCELL = ASLIST[(I) - (0)];
          ASL = LCELL;
          LCELL = TAGS[(KK) - (0)] | NAMES[(LEVEL) - (0)] << 18;
          LCELL = Q;
          LCELL = QQ;
          LCELL = QQQ;
          TAGS[(KK) - (0)] = I;
          NAMES[(LEVEL) - (0)] = KK;
        }
      };

      void COPYTAG(int KK) {
        int QQQ;

        recfm *LCELL;
        //(LISTF)

        TCELL = TAGS[(KK) - (0)];
        if (TCELL == 0) {
          // NAMENOTSET

          TYPE = 7;
          PTYPE = 0x57;
          PREC = 5;
          ROUT = 0;
          NAM = 0;
          ARR = 0;
          LITL = 0;
          ACC = 4;
          I = -1;
          J = -1;
          K = -1;
          OLDI = -1;

        } else {
          LCELL = ASLIST[(TCELL) - (0)];
          KK = LCELL;
          LCELL = KK | 0x8000;
          MIDCELL = LCELL;
          QQQ = LCELL;
          PTYPE = KK >> 16;
          USEBITS = KK >> 14 & 3;
          OLDI = KK >> 8 & 63;
          I = KK >> 4 & 15;
          J = KK & 15;
          SNDISP = (MIDCELL & 0xFFFF0000) / 0x10000;
          ACC = MIDCELL & 0xFFFF;
          K = QQQ >> 16;
          KFORM = QQQ & 0xFFFF;
          LITL = PTYPE >> 14;
          ROUT = PTYPE >> 12 & 3;
          NAM = PTYPE >> 10 & 3;
          ARR = PTYPE >> 8 & 3;
          PREC = PTYPE >> 4 & 15;
          TYPE = PTYPE & 15;
        }
      };

      void REDUCETAG(void) {
        //***********************************************************************
        //*ASCOPYTAGFORNAMEATA(P)EXCEPT:-*
        //*1)SPECIALNAMESHAVETHEIRCORRECTPREC&TYPESUBSTITUTED*
        //*2)RECORDELEMENTSHAVETHESUBNAMEPARTICULARSRETURNED*
        //***********************************************************************
        int SUBS;
        int QQ;
        int PP;

        COPYTAG(FROMAR2(P));
        if (PTYPE == SNPT) {
          PTYPE = TSNAME[(K) - (0)];
          UNPACK();
          ROUT = 1;
        }
        // TOAVOIDCHECKINGPARAMS

        if (TYPE == 3) {
          PP = P;
          QQ = COPYRECORDTAG(SUBS);
          P = PP;
        }
      };

      void REPLACETAG(int KK) {
        int P;
        int Q;

        P = TAGS[(KK) - (0)];
        Q = PTYPE << 16 | USEBITS << 14 | OLDI << 8 | I << 4 | J;
        REPLACE1(P, Q);
        REPLACE3(P, K << 16 | KFORM);
      };
      // LAYOUTOFPTYPE
      //*************
      // PTYPEREQUIRES16BITSTODEFINEAVARIABLEANDCANBEREGARDEDAS
      // ASTWOBYTEINTEGERS:=
      // UPPERONE(UPTYPE):=LITL<<6!ROUT<<4!NAM<<2!ARR
      // LOWERONE(PTYPE):=PREC<<4!TYPE
      // OFTEN(EGINEXPOP)ONLYTHELOWERPARTISREQUIREDASFUNCTIONS
      // ETCAREPREFETCHEDANDSTACKED.
      // LITL:=1=CONST,2=EXTERNAL,3=EXTRINSIC(ORDYNAMIC),0=NONEOFTHESE
      // ROUT:=1FORROUTINEORFNORMAP,=0NONEOFTHESE
      // NAM:=2FORMAPSAND'REFREFS',=1FORNAMES,=0DIRECTLYADDRESSED
      // ARR:=1FORARRAYS=0SCALARS
      // PRECISDESCRIPTORSIZECODEFOREACHPRECISION:-
      //:=0BITS,=3BYTES,=5WORDS,=6D-WRDS,=7,QUADWRDS
      // TYPE:=THEVARIABLETYPE
      //:=0(TYPEGENERAL),=1INTEGER,=2REAL,=3RECORD
      //:=4(RECORDFORMAT),=5STRING,=6LABEL/SWITCH.=7NOTSET
      //
      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 << 2 | ROUT) << 2 | NAM) << 2 | ARR) << 4 | PREC)
                    << 4 |
                TYPE;
      };

      void PPJ(int MASK, int N) {
        //***********************************************************************
        //*PLANTA'JCC MASK,PERMENTRY(N)'*
        //*IFMASK=0THENPLANTAJLK*
        //*IFMASK=-1THENPLANTACALLTOPERM*
        //***********************************************************************
        int VAL;
        int INSTRN;
        int CODE;
        int J;

        recfm *LCELL;
        //(LISTF)

        if (MASK == 0)
          CODE = JLK;
        else
          CODE = CALL;
        if (MASK > 0) CODE = JCC;
        if (MASK >= 16) CODE = JAT;
        if (MASK >= 32) CODE = JAF;
        VAL = PLABS[(N) - (0)];
        if (MASK <= 0)
          INSTRN = CODE << 24 | 3 << 23;
        else
          INSTRN = CODE << 24 | (MASK & 15) << 21;
        if (VAL > 0)
          INSTRN = INSTRN | ((VAL - CA) / 2) & 0x3FFFF;
        else {
          LCELL = ASLIST[(PLINK[(N) - (0)]) - (0)];
          // ONLY18BITSNEEDEDFORCA
          J = INSTRN | CA;

          if (LCELL != 0)
            PUSH(PLINK[(N) - (0)], J, 0, 0);
          else {
            if (LCELL == 0)
              LCELL = J;
            else
              LCELL = J;
          }
        }

        PCONST(INSTRN);
        if (MASK <= 0) FORGET(-1);
      };

      int SETXORYNB(int WHICH, int RLEV) {
        //***********************************************************************
        //*SETEXTRANAMEBASETOADDRESSROUTINELEVEL'RLEV'*
        //*RLEV=0FOROWNS,=-1FORTHEPLTTHESEARETHESAME!BUTCODED*
        //*SEPARATELYSOTHATTHEYCANBESEPARATEDIFNECESSARY*
        //***********************************************************************
        int USE;
        int INF;
        int OFFSET;

        if (!(-1 <= RLEV && RLEV <= RLEVEL)) ABORT();
        if (RLEV <= 0) {
          USE = 3;
          INF = 0;
        } else {
          USE = 4;
          INF = RLEV;
        }
        if (WHICH <= 0) WHICH = XORYNB(USE, INF);
        if (GRUSE[(WHICH) - (0)] = USE && GRINF1[(WHICH) - (0)] = INF) {
          GRAT[(WHICH) - (0)] = CA;
          return WHICH;
        }
        OFFSET = PTROFFSET(RLEV);
        PSF1(LDCODE[(WHICH) - (0)], 1, OFFSET);
        GRUSE[(WHICH) - (0)] = USE;
        GRINF1[(WHICH) - (0)] = INF;
        GRAT[(WHICH) - (0)] = CA;
        return WHICH;
      };

      int XORYNB(int USE, int INF) {
        //***********************************************************************
        //*CHECKSIFXNBORYNBSETUP.IFNOTDECIDESWHICHTOOVERWRITE*
        //***********************************************************************

        if (GRUSE[(XNB) - (0)] = USE && GRINF1[(XNB) - (0)] = INF) {
          GRAT[(XNB) - (0)] = CA;
          return XNB;
        }
        if (GRUSE[(CTB) - (0)] = USE && GRINF1[(CTB) - (0)] = INF) {
          GRAT[(CTB) - (0)] = CA;
          return CTB;
        }
        if (GRUSE[(XNB) - (0)] | GRUSE[(CTB) - (0)] = 0) {
          // BOTHREGSAREFREE

          if (USE == 3) return CTB;
          return XNB;
        }
        //
        // IFONLYONEFREETHENNOPROBLEM

        if (GRUSE[(XNB) - (0)] = 0) return XNB;
        if (GRUSE[(CTB) - (0)] = 0) return CTB;
        //
        // BOTHAREINUSE.THISISWORTHCAREFULCONSIDERATIONANDEXPERIMENT
        // AVALUETABLEMAYBEUSEASMAYLOOKAHEAD.CURRENTLYTRYLRU
        //
        if (GRAT[(XNB) - (0)] < GRAT[(CTB) - (0)]) return XNB;
        return CTB;
      };

      void ODDALIGN(void) {
        //***********************************************************************
        //*SETSNTOODDWORDBOUNDARY.SINCEPRECALLALSOSETSSFTOODD*
        //*WORDBOUNDARYTHISMEANS64BITQUANTITIESARE64BITALIGNED*
        //*ANDCANBEREFERNCEDINASINGLCORECYCLE*
        //***********************************************************************
        if (N & 7 == 0) {
          RETURNWSP(N, 1);
          N = N + 4;
        }
      };

      int PTROFFSET(int RLEV) {
        //***********************************************************************
        //*RETURNSOFFSETFROMLNBOFRELEVANTITEMINTHECURRENTDISPLAY*
        //*WHICHENABLESTEXTTUALLEVEL'RLEV'TOBEADDRESSED*
        //*AFUNCTIONISUSEDTOALLOWCHANGESINTHEDISPLAYFORMAT*
        //***********************************************************************
        if (RLEV <= 0) return 16;
        return DISPLAY[(RLEVEL) - (0)] + ((RLEV - 1) << 2);
      };

      int AREACODE(void) {
        //***********************************************************************
        //*RETURNSTHEAREACODEFORROUTINELEVEL'BASE'LOADING*
        //*XNBWHERETHISISNEEDED*
        //***********************************************************************
        if (AREA < 0) {
          // LOCALLEVEL

          if (BASE == RBASE) {
            AREA = LNB;
            return LNB;
          }

          AREA = SETXORYNB(-1, BASE);
        }

        return AREA;
      };

      int AREACODE2(int BS) {
        //***********************************************************************
        //*AVERSIONOFAREACODEWITHOUTSIDEEFFECTS!*
        //***********************************************************************

        if (BS == RBASE) return LNB;
        return SETXORYNB(-1, BS);
      };

      void GETINACC(int REG, int SIZE, int ACCESS, int AREA, int DISP) {
        //***********************************************************************
        //*LOADSTHEREGISTERSPECIFIEDARRANGINGFORAUTOMATIC*
        //*STACKINGWHENTHISISNEEDED*
        //*ITISVITALTHATACCISSTACKEDFIRSTBEFOREBORDR*
        //*OTHERWISEMIXUPSOCCURWHENPASSINGMULTI-DIMENSIONARRAY*
        //*ELEMENTSWITHFNSASSUBSCRIPTSASVALUESCALARS*
        //***********************************************************************
        int OPCODE;
        // BITSABDBYTES!

        if (SIZE == 0) SIZE = 1;
        // ABORTunlessREG=ACCRor(REG=DRandSIZE=2)or  (REG=BREGandSIZE=1)

        if (REG == DR)
          OPCODE = LD;
        else {
          if (REG == BREG)
            OPCODE = LB;
          else
            OPCODE = LSS + (SIZE & 6);
        }
        //

        if (REGISTER[(REG) - (0)] = 1) {
          if (REGISTER[(REG) - (0)] = 2 || ACCESS == 2 && AREA == 0)
            BOOTOUT(REG);
          else {
            // CANNOTSLSSISNONALLMCS

            if (REG != ACCR && REGISTER[(ACCR) - (0)] = 1 ||
                REGISTER[(ACCR) - (0)] = 3)
              BOOTOUT(ACCR);
            CHANGERD(REG);
            REGISTER[(REG) - (0)] = 0;
            if (REG == ACCR)
              OPCODE = OPCODE - 32;
            else
              OPCODE = OPCODE - 40;
          }
        }

        PSORLF1(OPCODE, ACCESS, AREA, DISP);
        if (ACCESS >= 2 && 0 != AREA && AREA != 7) GRUSE[(DR) - (0)] = 0;
        GRUSE[(REG) - (0)] = 0;
      };

      void NOTEASSMENT(int REG, int ASSOP, int VAR) {
        //***********************************************************************
        //*NOTESTHEASSIGNMENTTOSCALAR'VAR'.THISINVOLVESREMOVING*
        //*OLDCOPIESFROMREGISTERSTOAVOIDCONFUSINGOLDANDNEWVALUE*
        //*ASSOP=1FOR'==',=2FOR'=',=3FOR'<-'*
        //***********************************************************************
        const int EEMASK = 0b100011110000000;
        // MASKOFUSESRELEVANTTO==

        const int EMASK = 0b100011000000000;
        // MASKOFUSESRELEVANTTO=

        const int NREGS = 5;

        const int REGS = 16 * 16 * 16 * 16 * CTB + 16 * 16 * 16 * XNB +
                         16 * 16 * ACCR + 16 * BREG + DR;

        int I;
        int USE1;
        int USE2;
        int II;

        if (VAR <= 0) return;
        if (ASSOP == 1) {
          for (I = 0; I != 7; I += 1) {
            USE1 = GRUSE[(I) - (0)];
            USE2 = USE1 >> 16;
            USE1 = USE1 & 255;
            if (EEMASK & 1 << USE2 != 0 && GRINF2[(I) - (0)] & 0xFFFF == VAR ||
                GRINF2[(I) - (0)] >> 16 == VAR) {
              GRUSE[(I) - (0)] = USE1;
              USE2 = 0;
            }
            if (EEMASK & 1 << USE1 != 0 && GRINF1[(I) - (0)] & 0xFFFF == VAR ||
                GRINF1[(I) - (0)] >> 16 == VAR) {
              GRUSE[(I) - (0)] = USE2;
              GRINF1[(I) - (0)] = GRINF2[(I) - (0)];
            }
          }
          GRUSE[(REG) - (0)] = 7;
          GRINF1[(REG) - (0)] = VAR;

        } else {
          for (II = 0; II != 4 * (NREGS - 1); II += 4) {
            I = REGS >> II & 15;
            USE1 = GRUSE[(I) - (0)];
            USE2 = USE1 >> 16;
            USE1 = USE1 & 255;
            if (EMASK & 1 << USE2 != 0 && GRINF2[(I) - (0)] & 0xFFFF == VAR ||
                GRINF2[(I) - (0)] >> 16 == VAR || GRINF2[(I) - (0)] = VAR) {
              GRUSE[(I) - (0)] = USE1;
              USE2 = 0;
            }
            if (EMASK & 1 << USE1 != 0 && GRINF1[(I) - (0)] & 0xFFFF == VAR ||
                GRINF1[(I) - (0)] >> 16 == VAR || GRINF1[(I) - (0)] = VAR) {
              GRUSE[(I) - (0)] = USE2;
              GRINF1[(I) - (0)] = GRINF2[(I) - (0)];
            }
            //
            // ALLTHEFOREGOINGCONDITIONSARENOTASSILLYASTHEYSEEM.MUST
            // BEARINMINDTHATBOTHGRINF&VARMAYBERECORDELEMENTSDEFINED
            // BYALL32BITSOFINFASWELLASMODIFIEDSCALARSWHENTHENAME
            // ONLYTAKES16BITS
            //
          }
          if (ASSOP == 2 && VAR > 0) {
            USE1 = GRUSE[(REG) - (0)];
            if (5 <= USE1 & 255 && USE1 & 255 <= 6) {
              // ASSIGNCONSTTOVAR

              GRUSE[(REG) - (0)] = USE1 & 255 | (9 << 16);
              GRINF2[(REG) - (0)] = VAR;

            } else {
              // ASSIGNVAROREXPTOVAR

              GRUSE[(REG) - (0)] = USE1 << 16 | 9;
              // PREVIOUSUSEBECOMES2NDRY
              GRINF2[(REG) - (0)] = GRINF1[(REG) - (0)];

              GRINF1[(REG) - (0)] = VAR;
            }
          }
        }
      };
    };
    // OFROUTINECSS
    //*DELSTART

    void PRINTUSE(void) {
      //***********************************************************************
      //*UPTOTWOUSESAREREMEMBEREDINFOINGRINF1&GRINF2*
      //*BOTTOMHALFOFGRUSERELATESTOINF1TOPHALFTOINF2*
      //*THEMEANSCLEARINGGRUSETOFORGETSTHEREGCOMPLETELY*
      //*ARRAYREGISTERKEEPSTHECLAIMSTATUSANDGRATTHELASTUSE*
      //***********************************************************************
      const _imp_string REGS[(7) - (0) + 1] = "ACC",
          " DR", "LNB", "XNB", " PC", "CTB", "TOS", "  B";

      const _imp_string USES[(15) - (0) + 1] = " NOT KNOWN ",
          " I-RESULT  ", " TEMPORARY ", "  PLTBASE  ", " NAMEBASE  ",
          " LIT CONST ", " TAB CONST ", " DESC FOR  ", " RECD BASE ",
          " LOCAL VAR ", " NAME+CNST ", " AUXSTPTR- ", " BYTE DES  ",
          " HALF DES  ", "  VMY RES  ", " REC HDES  ";

      const _imp_string STATE[(3) - (-1) + 1] = "  LOCKED   ",
          "   FREE    ", " I-RESULT  ", " TEMPORARY ", " RT-PARAM  ";

      auto void OUT(int USE, int INF);
      int I;
      int USE;
      int INF;

      for (I = 0; I != 7; I += 1) {
        if (REGISTER[(I) - (0)] | GRUSE[(I) - (0)] = 0) {
          USE = GRUSE[(I) - (0)];
          ;
          OUT(USE & 255, GRINF1[(I) - (0)]);
          if (USE >> 16 != 0) {
            ;
            OUT(USE >> 16, GRINF2[(I) - (0)]);
          };
        }
      }
      return;
      void OUT(int USE, int INF) {
        const int LNMASK = 0b1100011110000000;

        const int UNMASK = 0b0100001110000000;

        ;
        if (LNMASK & 1 << USE != 0)
          ;
        else
          ;
        if (USE == 10) {
          ;
          ;
        }
        if (UNMASK & 1 << USE != 0 && INF >> 16 != 0) {
          ;
          ;
        }
      };
    };
    //*DELEND

    void ABORT(void) {
      ;
      //*DELSTART

      if (!(CA == CABUF)) NCODE(, , CABUF);
      PRINTUSE();
      //*DELEND

      assert(_IMP_MONITOR_);
      exit(0);
    };

    void EPILOGUE(void) {
      //***********************************************************************
      //*PLANTANYSUBROUINESTHATHAVEBEENREQUIREDDURING*
      //*THECODEGENERATIONPHASE*
      //***********************************************************************
      int D;
      int J;

      auto void FILL(int LAB);
      if (PLINK[(15) - (0)] = 0) goto P16;
      ABORT();
    P16:
      //
      // STRINGRESOLUTIONSUBROUTINE
      // THISISENTEREDVIAACALLINSTRNANDHAS3PARAMETERS
      // P1(LNB+5)=RESDACURRENTLENGTHDESCRIPTORPOINTINGATTHEFIRSTBYTE
      // OFTHESTRINGBEINGRESOLVED
      // P2(LNB+7)=STDAMAXLENGTHDESCRIPTORTOTHESTRINGINWHICHANY
      // FRAGMENTISTOBESTORED
      // P3(LNB+9)-EXPDACURRENTLENGTHDESCRIPTORPOINTINGATTHE
      // LENGTHBYTEOFSTRINGTOBESEARCHEDFOR
      //
      // IFRESOLUTIONISSUCCESSFULLCCISSETTO0ANDANUPDATEDVERSION
      // OFRESDISRETURNEDINTHEACCINCASETHEREAREFURTHERRESLNS
      //
      // CODEISASFOLLOWS:-
      //
      // LXN(LNB+0)OLDLNB
      // LD(XNB+3)PLTDESCRIPTOR
      // LDB0ZEROBOUNDFORMDIAG
      // STD(LNB+3)STANDARDPLACE
      // ASF4GRAB2TEMPORARIES
      // LD(LNB+5)RESULTIFNULLROUTETAKEN
      // SLD(LNB+9)EXPD
      // LB0
      // JAT11,LNULLJUMPIFEXPNULL
      // INCA1TOFIRSTCHAR
      // LB@DRFIRSTCHARINTOB
      // STD(LNB+11)TEMP1
      // LSS(LNB+5)TYPE&BNDOFRESD
      // ANDXIFF
      // JAT4,RESFAILRESDISNULL&EXPDNOTNULL
      // LD(LNB+5)RESDTODR
      // AGNSWNEL=DRSEARCHFORFIRSTCHAR
      // JCC8,RESFAILNOTFOUND
      // STD(LNB+13)SAVEINTEMP2
      // CYD0
      // LD(LNB+11)EXPDESCRIPTORFORCOMPARISON
      // CPSL=DR,FILLER=FFCHECKRESTOFEXPRSN
      // JCC8,L2RESLNHASSUCCEEDED
      // LD(LNB+13)RESUMESCANNING
      // SWEQL=1ADVANCEBY1AVOIDINGMODD
      // JAGN
      //
      // RESOLUTIONCOMPLETE.ARRANGETOSTOREFRAGMENTWITHOUTANYFILLERCHARS
      // SOS->S.(T).ZWORKSOKANDALLOWINGSTDTOBENULL
      //
      // L2SLSS(LNB+5)STOREUPDATEDDES&GETBND
      // ISB(LNB+13)GIVELENGTHOFFRAGMENT
      // STB
      // LSS(LNB+7)LENGTHOFSTD
      // JAF4,*+6!ZEROFORNO1STPARTRESLN
      // LSS1
      // ANDX1FF
      // ICPB
      // JCC12,RESFAIL
      // LNULLLD(LNB+7)STDTODR
      // JAT11,L3STDNULLDONTSETLENGTH
      // LSD(LNB+5)ORIGINIALSTRING
      // MVLL=1SETLENGTHBYTEFROMB
      // LDBBTOSTORECHARS
      // MVL=DR,FILLER=X'80'ASSIGN
      // L3LDTOSRESULTANDSETCC=0
      // CYD0
      // EXIT
      // RESFAILMPSRX'24'SETCC=1
      // EXIT
      if (PLINK[(16) - (0)] = 0) goto P17;
      FILL(16);
      PSF1(LXN, 1, 0);
      PF1(LD, 0, XNB, 12);
      PSF1(LDB, 0, 0);
      PSF1(STD, 1, 12);
      PSF1(ASF, 0, 4);
      PSF1(LD, 1, 20);
      PSF1(SLD, 1, 36);
      PSF1(LB, 0, 0);
      PF3(JAT, 11, 0, 0x24);
      PSF1(INCA, 0, 1);
      PF1(LB, 2, 7, 0);
      PSF1(STD, 1, 44);
      PSF1(LSS, 1, 20);
      PF1(AND, 0, 0, 0x1FF);
      PF3(JAT, 4, 0, 0x27);
      PSF1(LD, 1, 23);
      PF2(SWNE, 1, 0, 0, 0, 0);
      PF3(JCC, 8, 0, 0x23);
      PSF1(STD, 1, 52);
      PSF1(CYD, 0, 0);
      PSF1(LD, 1, 44);
      PF2(CPS, 1, 1, 0, 0, 0xFF);
      PF3(JCC, 8, 0, 5);
      PSF1(LD, 1, 52);
      PF2(SWEQ, 0, 0, 0, 0, 0);
      PSF1(JUNC, 0, -12);
      PSF1(SLSS, 1, 20);
      PSF1(ISB, 1, 52);
      PF1(ST, 0, BREG, 0);
      PSF1(LSS, 1, 28);
      PF3(JAF, 4, 0, 3);
      PSF1(LSS, 0, 1);
      PF1(AND, 0, 0, 0x1FF);
      PF1(ICP, 0, BREG, 0);
      PF3(JCC, 12, 0, 13);
      PSF1(LD, 1, 28);
      PF3(JAT, 11, 0, 7);
      PSF1(LSD, 1, 20);
      PF2(MVL, 0, 0, 0, 0, 0);
      PF1(LDB, 0, BREG, 0);
      PF2(MV, 1, 1, 0, 0, UNASSPAT & 255);
      PF1(LD, 0, TOS, 0);
      PSF1(CYD, 0, 0);
      PSF1(EXIT, 0, -0x40);
      PSF1(MPSR, 0, 0x24);
      PSF1(EXIT, 0, -0x40);
    P17:
      //
      // EVALUATEX**Y
      //************
      // YISINACCXISSTACKEDBELOWTHELINK(UNAVOIDABLE)
      // FAULT(21)ISGIVENIFX<0OR(X=0ANDY<=0)
      // REPEATEDMULTIPLICATIONISUSEDIFY>0ANDFRACPT(Y)=0
      // OTHERWISERESULT=EXP(Y*LOG(Y))
      //
      // LBTOSSWOPRETURNADDRESS&X
      // LDTOSXTODR
      // STBTOS
      // STDTOS
      // SLSDTOSXTOACCYTOTOS
      // JAT2,EXPERRERRORIFX<0
      // JAF0,TRYMULTJUMPX#0
      // SLSDTOSSTACKX&GETY
      // JAF1.EXPERRY<=0
      // LSDTOSX(=0)=RESULTTOACC
      // JTOSRETURN
      // TRYMULTXISINACC&YSTACKED
      // SLSDTOSYTOACCANDXSTACKED
      // STTOSYSTACKED
      // JAT2,NONINTYISNEGATAIVE
      // RSC55
      // RSC-55
      // FIXBFIXPINCHEDFROMICLALGOL
      // MYB4
      // CPB-64
      // JCC10,*+3
      // LB-64
      // ISHB
      // STUHBACCTO1WORD
      // JCC7,NONINTJUMPIFTRUNCATION
      // ASF-2LOSEYOFSTACK
      // STBINTEGERVERSIONOFYTOB
      // LSS1
      // FLT0
      // JAF12,MULJUMPIFB#0
      // ASF-2LOSEXOFFSTACK
      // JTOSX**0=1
      // AGNSTDTOSSTACKANOTHERCOPYOFX
      // MULRMYTOS
      // DEBJAGNREPEATEDMULTIPLICATION
      // JTOS
      // NONINTYISSTACKEDOVERX
      // LSDTOS
      // SLSDTOS
      // PRCL4
      // STTOS
      // LXN(LNB+4)
      // RALN7
      // CALL((XNB+LOGEPDISP)
      // RMYTOS
      // PRCL4
      // STTOS
      // LXN(LNB+4)TOPLT
      // RALN7
      // CALL((XNB+EXPEPDISP))CALLEXP
      // JTOS
      // EXPERRJERRORRTNO7
      //
      if (PLINK[(17) - (0)] = 0) goto P18;
      FILL(17);
      if (LOGEPDISP == 0) CXREF("S#ILOG", PARMDYNAMIC, 2, LOGEPDISP);
      if (EXPEPDISP == 0) CXREF("S#IEXP", PARMDYNAMIC, 2, EXPEPDISP);
      PF1(LB, 0, TOS, 0);
      PF1(LD, 0, TOS, 0);
      PF1(STB, 0, TOS, 0);
      PF1(STD, 0, TOS, 0);
      PF1(SLSD, 0, TOS, 0);
      PF3(JAT, 2, 0, 0x35);
      PF3(JAF, 0, 0, 7);
      PF1(SLSD, 0, TOS, 0);
      PF3(JAF, 1, 0, 0x30);
      PF1(LSD, 0, TOS, 0);
      PF1(JUNC, 0, TOS, 0);
      PF1(SLSD, 0, TOS, 0);
      PF1(ST, 0, TOS, 0);
      PF3(JAT, 2, 0, 26);
      PSF1(RSC, 0, 55);
      PSF1(RSC, 0, -55);
      PF1(FIX, 0, BREG, 0);
      PSF1(MYB, 0, 4);
      PSF1(CPB, 0, -64);
      PF3(JCC, 10, 0, 3);
      PSF1(LB, 0, -64);
      PF1(ISH, 0, BREG, 0);
      PF1(STUH, 0, BREG, 0);
      PF3(JCC, 7, 0, 14);
      PSF1(ASF, 0, -2);
      PF1(ST, 0, BREG, 0);
      PSF1(LSS, 0, 1);
      PSF1(FLT, 0, 0);
      PF3(JAF, 12, 0, 5);
      PSF1(ASF, 0, -2);
      PF1(JUNC, 0, TOS, 0);
      PF1(STD, 0, TOS, 0);
      PF1(RMY, 0, TOS, 0);
      PSF1(DEBJ, 0, -2);
      PF1(JUNC, 0, TOS, 0);
      PF1(LSD, 0, TOS, 0);
      PF1(SLSD, 0, TOS, 0);
      PSF1(PRCL, 0, 4);
      PF1(ST, 0, TOS, 0);
      PSF1(LXN, 1, 16);
      PSF1(RALN, 0, 7);
      PF1(CALL, 2, XNB, LOGEPDISP);
      PF1(RMY, 0, TOS, 0);
      PSF1(PRCL, 0, 4);
      PF1(ST, 0, TOS, 0);
      PSF1(LXN, 1, 16);
      PSF1(RALN, 0, 7);
      PF1(CALL, 2, XNB, EXPEPDISP);
      PF1(JUNC, 0, TOS, 0);
      PF1(JUNC, 0, 0, (PLABS[(7) - (0)] - CA) / 2);
    P18:
      //
      // MAPPEDSTRINGASSIGNMENTCHECK.CHECKINGMODEONLY.MUSTMOVEONLY
      // CURRENTLENGTHINTOMAPPEDSTRINGSBUTMUSTNOTOMITTHECAPACITY
      // CHECK.ACC&DRSETFORMV
      //
      // STTOSSAVEACCDESRPTR
      // ANDX'1FF00000000'GETCURRENTLENGTH
      // STUHBINTOBREG
      // LSDTOSRESTOREACC
      // STDTOSSAVEDRDESCRPTR
      // SBB1
      // JAF13,*+3
      // MODDBPROVOKEFAILUREIFRELEVANT
      // ADB1
      // LDTOS
      // LDBBBOUND=CURRENTL+1(FORLBYTE)
      // JTOS
      //
      if (PLINK[(18) - (0)] = 0) goto P19;
      CNOP(0, 8);
      D = CA;
      PCONST(511);
      PCONST(0)
      // XFF00000000
      ;

      FILL(18);
      PF1(ST, 0, TOS, 0);
      PF1(AND, 0, PC, D);
      PF1(STUH, 0, BREG, 0);
      PF1(LSD, 0, TOS, 0);
      PF1(STD, 0, TOS, 0);
      PSF1(SBB, 0, 1);
      PF3(JAF, 13, 0, 3);
      PF1(MODD, 0, BREG, 0);
      PSF1(ADB, 0, 1);
      PF1(LD, 0, TOS, 0);
      PF1(LDB, 0, BREG, 0);
      PF1(JUNC, 0, TOS, 0);
    P19:
      // CONCATENATIONONE
      // COPYTHEFIRSTSTRINGINTOTHEWORKAREA
      // BHASRELDISPOFTHEWORKAREAFROMLNB
      // DRHASCURRENTLENGTHDESCRIPTOROFFIRSTSTRING
      // RESULTISACURRENTLENGTHDESCRIPTORTOWORKAREAINDRANDACC
      //
      // STLNTOS
      // ADBTOS
      // LXNBXNBTOWORKAREA
      // SLB@DRCURRENTLENGTHTOB
      // STB(xnb+2)INTOLENGTHBYTEOFWKAREA
      // INCA1DRPASTLENGTHBYTE
      // CYD0BECOMESSOURCESTRING
      // LD=X'180000FF0000000C'
      // INCATOSDESCRIPTORTOWKSTRING
      // STD(xnb+0)STOREDFORLATER
      // LDBBADJUSTEDSONOFILLING
      // MVL=DRTHEMOVE
      // LD(xnb+0)SETUPDRWITHRESULT
      // LDBBCURRENTLENGTHASBOUND
      // INCA-1TOPOINTATLENGTHBYTE
      // CYD0TOACCASWELL
      // JTOSRETURN
      if (PLINK[(19) - (0)] | PLINK[(20) - (0)] = 0) goto P21;
      CNOP(0, 8)
      // DOUBLEWORDALLIGN
      ;

      D = CA;
      PCONST(0x180000FF);
      PCONST(12);
      FILL(19);
      PF1(STLN, 0, TOS, 0);
      PF1(ADB, 0, TOS, 0);
      PF1(LXN, 0, BREG, 0);
      PF1(SLB, 2, 7, 0);
      PF1(STB, 0, XNB, 8);
      PSF1(INCA, 0, 1);
      PSF1(CYD, 0, 0);
      PF1(LD, 0, PC, D);
      PF1(INCA, 0, TOS, 0);
      PF1(STD, 0, XNB, 0);
      PF1(LDB, 0, BREG, 0);
      PF2(MV, 1, 0, 0, 0, 0);
      PF1(LD, 0, XNB, 0);
      PF1(LDB, 0, BREG, 0);
      PSF1(INCA, 0, -1);
      PSF1(CYD, 0, 0);
      PF1(JUNC, 0, TOS, 0);
      //
      // CONCATENATIONTWO
      // ADDTHESECONDANDSUBSEQUENTSTRINGSTOTHEFIRST
      // PARAMETERSANDRESULTSASCONCATENATIONONE
      //
      // STLNTOS
      // ADBTOS
      // LXNBXNBTOWORKAREA
      // LB@DRCURRENTLENGTHTOB
      // STBTOSKEEPFORTHEMOVE
      // ADB(xnb+2)ADDOLDLENGTH
      // INCA1PASTLENGTHBYTE
      // CYD0BECOMESSOURCESTRING
      // LD(xnb+0)GETDESCRIPTORTOWKSTRING
      // MODD(xnb+2)MOVEONPASTFIRSTSTRING
      // LDBTOSTOMOVERIGHTAMOUNT
      // MVL=DR
      // STB(xnb+2)UPDATEWKSTRINGLENGTH
      // CPB255
      // JCC2,CAPACITYEXCEEDED
      // LD(xnb+0)SETUPDRWITHRESULT
      // LDBBCURRENTLENGTHASBOUND
      // INCA-1TOPOINTATLENGTHBYTE
      // CYD0TOACCASWELL
      // JTOSRETURN
      if (PLINK[(20) - (0)] = 0) goto P21;
      FILL(20);
      PF1(STLN, 0, TOS, 0);
      PF1(ADB, 0, TOS, 0);
      PF1(LXN, 0, BREG, 0);
      PF1(LB, 2, 7, 0);
      PF1(STB, 0, TOS, 0);
      PF1(ADB, 0, XNB, 8);
      PSF1(INCA, 0, 1);
      PSF1(CYD, 0, 0);
      PF1(LD, 0, XNB, 0);
      PF1(MODD, 0, XNB, 8);
      PF1(LDB, 0, TOS, 0);
      PF2(MV, 1, 0, 0, 0, 0);
      PF1(STB, 0, XNB, 8);
      PF1(CPB, 0, 0, 255);
      PF3(JCC, 2, 0, (PLABS[(9) - (0)] - CA) / 2);
      PF1(LD, 0, XNB, 0);
      PF1(LDB, 0, BREG, 0);
      PSF1(INCA, 0, -1);
      PSF1(CYD, 0, 0);
      PF1(JUNC, 0, TOS, 0);
    P21:
      //
      // THESTOPSEQUENCE
      // CALLsystemroutineSTOP(NOPARAMETERS)
      //
      // STOP1PRCL4
      // LXN(LNB+4)
      // RALN5
      // CALL((XNB+STOPEPDISP))!**PLEASEDONTCOMEBACK**
      //
      if (PLINK[(21) - (0)] = 0) goto P22;
      FILL(21);
      CXREF("S#STOP", PARMDYNAMIC, 2, J);
      PSF1(PRCL, 0, 4);
      PSF1(LXN, 1, 16);
      PSF1(RALN, 0, 5);
      PF1(CALL, 2, XNB, J);
      PF1(0x4E, 0, 0, 0xB00B)
      // IDLEB00B
      ;

    P22:
      //
      // PRINTPROFILE
      //

      if (PLINK[(22) - (0)] = 0) goto P23;
      FILL(22);
      CXREF("S#PPROFILE", PARMDYNAMIC, 2, J);
      PSF1(PRCL, 0, 4);
      PSF1(LXN, 1, 16);
      PF1(LDRL, 0, XNB, PARMPROF);
      PF1(STD, 0, TOS, 0);
      PSF1(RALN, 0, 7);
      PF1(CALL, 2, XNB, J);
      PF1(JUNC, 0, TOS, 0);
    P23:
      return;
      void FILL(int LAB) {
        //***********************************************************************
        //*FILLJUMPSTOTHISLABWITHJUMPTOCURRENTADDRESS*
        //***********************************************************************

        int AT;
        int INSTRN;
        int I;
        int J;

        int A[(2) - (0) + 1]

            ;

        while (PLINK[(LAB) - (0)] = 0) {
          POP(PLINK[(LAB) - (0)], A[(0) - (0)], A[(1) - (0)], A[(2) - (0)]);
          for (I = 0; I != 2; I += 1) {
            INSTRN = A[(I) - (0)];
            if (INSTRN != 0) {
              AT = INSTRN & 0x3FFFF;
              INSTRN = INSTRN & 0xFFC00000;
              INSTRN = INSTRN | (CA - AT) >> 1;
              PLUG(1, AT, INSTRN, 4);
            }
          }
        }
        PLABS[(LAB) - (0)] = CA;
      };
    };

    void DUMPCONSTS(void) {
      //***********************************************************************
      //*OUTPUTTHECONSTANTTABLEANDMAKEANYRELEVANTRELOCATIONS*
      //***********************************************************************

      auto void DOIT(int VAL);
      auto void FILL(int CREFHEAD);
      int I;
      int J;
      int K;
      int DISP;
      int SIZE;
      int BASE;

      BASE = 0;
      SIZE = CONSTPTR - BASE;
      if (SIZE <= 0) return;
      if (!(CA & 7 == 0)) CNOP(0, 8);
      CODEOUT();
      LPUT(1, SIZE * 4, CA, );
      //*DELSTART

      if (DCOMP != 0) {
        ;
        I = BASE;
        do {
          ;
          PRHEX(CA + 4 * (I - BASE), 5);
          for (J = 0; J != 7; J += 1) {
            ;
            PRHEX(CTABLE, 8);
          };
          for (J = 0; J != 31; J += 1) {
            K = ;
            if (K < 31 || K > 95) K = 32;
            ;
          }
          I = I + 8;
          if (I >= CONSTPTR) break;
        } while (1);
      }
      //*DELEND
      //

      FILL(CREFHEAD);
      SIZE = (SIZE + 1) & (-2);
      CA = CA + 4 * SIZE;
      CABUF = CA;
      return;
      void FILL(int CREFHEAD) {
        // RELOCATIONFACTOR
        DISP = (CA - 4 * BASE) / 2;

        while (CREFHEAD != 0) {
          POP(CREFHEAD, I, J, K);
          DOIT(I);
          if (J != 0) DOIT(J);
          if (K != 0) DOIT(K);
        }
      };

      void DOIT(int VAL) {
        //***********************************************************************
        //*IFVAL+VETHENVALISCODEADDRESSFORLPUT(18)UPDATE*
        //*IFVAL-VEITISGLAWRDADDRR<<16!CTABLEWRDADDR*
        //*THEGLAWORDISTORELOCATEDBYHEADOFCODE(ALREADYDONE)*
        //*HOWEVERTHEGLAWORDNEEDSUPDATINGFROMRELCTABLETORELCODE*
        //***********************************************************************
        int I;
        int J;

        if (VAL > 0)
          LPUT(18, 0, VAL, DISP);
        else {
          // GLABYTEADDRESS

          I = (VAL >> 16 & 0x7FFF) << 2;
          // CTABLEENTRYRELHDOFCODE

          J = 4 * (VAL & 0xFFFF) + CA;

          PLUG(2, I, J, 4)
          // UPDATETHEGLAWORD
          ;
        }
      };
    };
  };
  // OFSUBBLOCKCONTAININGPASS2
  _imp_string MESSAGE(int N) {
    //***********************************************************************
    //*OUTPUTSANERRORMESSAGESTOREDINACOMPRESSEDFORMAT*
    //*1repeatISNOTREQUIRED*
    //*2LABEL&HASALREADYBEENSETINTHISBLOCK*
    //*4SWITCH&HASNOTBEENDECLARED*
    //*5SWITCHNAME&INEXPRESSIONORASSIGNMENT*
    //*6SWITCHLABEL&(#)SETASECONDTIME*
    //*7NAME&HASALREADYBEENDECLARED*
    //*8ROUTINEORFN&HASMOREPARAMETERSTHANSPECIFIED*
    //*9PARAMETER#OF&DIFFERSINTYPEFROMSPECIFICATION*
    //*10ROUTINEORFN&HASFEWERPARAMETERSTHANSPECIFIED*
    //*11LABEL&REFERENCEDATLINE#HASNOTBEENSET*
    //*12cycleATLINE#HASTWOCONTROLCLAUSES*
    //*13repeatFORcycleATLINE#ISMISSING*
    //*14TOOMANYENDS*
    //*15MISSINGENDS*
    //*16NAME&HASNOTBEENDECLARED*
    //*17NAME&DOESNOTREQUIREPARAMETERSORSUBSCRIPTS*
    //*19WRONGNOOFPARAMETERS*
    //*20#TOOFEWSUBSCRIPTSPROVIDEDFORARRAY&*
    //*21#TOOMANYSUBSCRIPTSPROVIDEDFORARRAY&*
    //*22ACTUALPARAMETERSNOTASSPEC*
    //*23ROUTINENAMEINEXPRSSN*
    //*24REALININTEGEREXPRSSN*
    //*26#ISNOTAVALIDeventNUMBER*
    //*27&ISNOTAROUTINENAME*
    //*28ROUTINEORFN&HASSPECIFICATIONBUTNOBODY*
    //*29LHSNOTDESTNTN*
    //*30returnOUTWITHROUTINEBODY*
    //*31resultOUTWITHFNORMAPBODY*
    //*32INVALIDASSEMBLER*
    //*33INVALIDNAMEINASSEMBLER*
    //*34TOOMANYLEVELS*
    //*37TOOMANYDIMENSIONS*
    //*38ARRAY&HASUPPERBOUND#LESSTHANLOWERBOUND*
    //*40DECLNMISPLACED*
    //*41CONSTANTCANNOTBEEVALUATEDATCOMPILETIME*
    //*44ILLEGALCONST*
    //*45WRONGNOOFCONST*
    //*46&ISDECLAREDASINVALIDTYPEextrinsicname*
    //*47elseALREADYGIVENATLINE#*
    //*48elseINVALIDAFTERonevent*
    //*49ATTEMPTTOINITIALISEextrinsicORformat&*
    //*50SUBSCRIPTOF#ISOUTWITHTHEBOUNDSOF&*
    //*51finishISNOTREQUIRED*
    //*52repeatINSTEADOFfinishFORstartATLINE#*
    //*53finishFORstartATLINE#ISMISSING*
    //*54exitOUTWITHcyclerepeatBODY*
    //*55continueOUTWITHcyclerepeatBODY*
    //*56ENDOFFILEOUTOFCONTEXT*
    //*57BEGINMISSING*
    //*58CONTROLSTMNTMISPLACED*
    //*59finishINSTEADOFrepeatFORcycleATLINE#*
    //*61NAME&HASALREADYBEENUSEDINTHISformat*
    //*62NOTFORMATNAME*
    //*63RECORDSPECERROR*
    //*64SUBNAMEMISSING*
    //*65SUBNAMENOTINFORMAT*
    //*66EXPRESSIONASSIGNEDTORECORD&*
    //*67RECORDS&&AND&HAVEDIFFERENTFORMATS*
    //*69SUBNAMEOUTOFCONTEXT*
    //*70ILLEGALSTRINGDECLN*
    //*71&ISNOTASTRINGVARAIBLE*
    //*72ARITHMETICOPERATORINASTRINGEXPRESSION*
    //*73ARITHMETICCONSTANTINASTRINGEXPRESSION*
    //*74RESOLUTIONISNOTTHECORRECTFORMAT*
    //*75STRINGEXPRESSIONCONTAINSASUBEXPRESSION*
    //*76STRINGVARIABLE&INARITHMETICEXPRESSION*
    //*77STRINGCONSTANTINARITHMETICEXPRESSION*
    //*78STRINGOPERATOR'.'INARITHMETICEXPRESSION*
    //*80POINTERVARIABLE&COMPAREDWITHEXPRESSION*
    //*81POINTERVARIABLE&EQUIVALENCEDTOEXPRESSION*
    //*82&ISNOTAPOINTERNAME*
    //*83&&AND&ARENOTEQUIVALENTINTYPE*
    //*84RECORDOUTOFCONTEXT*
    //*86GLOBALPOINTER&&EQUIVALENCEDTOLOCAL&*
    //*90UNTYPEDNAME&USEDASVARIABLE*
    //*91forCONTROLVARIABLE&NOTINTEGER*
    //*92forCLAUSEHASZEROSTEP*
    //*93forCLAUSEHASNONINTEGERNUMBEROFTRAVERSES*
    //*101SOURCELINETOOLONG*
    //*102WORKFILETOOSMALL*
    //*103NAMESTOOLONG*
    //*104TOOMANYNAMES*
    //*105TOOMANYLEVELS*
    //*106STRINGCONSTTOOLONG*
    //*107COMPILERTABLESFULL*
    //*202NAME&NOTUSED*
    //*203LABEL&NOTUSED*
    //*204GLOBALforCONTROLVARIABLE&*
    //*205NAME&NOTADDRESSABLE*
    //*255SEEIMPMANUAL*
    //***********************************************************************
    const char OUTTT[(63) - (0) + 1] = '?',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '&', '-',
        '/', '\'', '(', ')', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
        'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
        'y', 'z', '.', '%', '#', [LOW... HIGH] = '?';

    const int WORDMAX = 584;
    const int DEFAULT = 580;
    const unsigned short int WORD[((WORDMAX) - (0) + 1) - (0)] = 0,
        1, 32769, 32771, 32772, 32773, 2, 32775, 32776, 32777, 32778, 32780,
        32781, 32782, 32783, 32784, 4, 32785, 32776, 32777, 32772, 32780, 32787,
        5, 32785, 32789, 32776, 32782, 32790, 32792, 32793, 6, 32785, 32795,
        32796, 32781, 32797, 32798, 32800, 7, 32801, 32776, 32777, 32778, 32780,
        32787, 8, 32802, 32792, 32804, 32776, 32777, 32805, 32806, 32808, 32809,
        9, 32811, 32813, 32814, 32776, 32815, 32782, 32817, 32818, 32819, 10,
        32802, 32792, 32804, 32776, 32777, 32822, 32806, 32808, 32809, 11,
        32775, 32776, 32823, 32825, 32826, 32813, 32777, 32772, 32780, 32781,
        12, 32827, 32825, 32826, 32813, 32777, 32829, 32830, 32832, 13, 32769,
        32834, 32827, 32825, 32826, 32813, 32771, 32835, 14, 32837, 32838,
        32839, 15, 32840, 32839, 16, 32801, 32776, 32777, 32772, 32780, 32787,
        17, 32801, 32776, 32842, 32772, 32843, 32806, 32792, 32845, 19, 32847,
        32848, 32849, 32850, 20, 32813, 32852, 32853, 32845, 32854, 32834,
        32856, 32776, 21, 32813, 32852, 32857, 32845, 32854, 32834, 32856,
        32776, 22, 32858, 32850, 32860, 32861, 32862, 23, 32863, 32865, 32866,
        32867, 24, 32869, 32866, 32870, 32867, 26, 32813, 32771, 32772, 32797,
        32872, 32873, 32875, 27, 32776, 32771, 32772, 32797, 32877, 32789, 28,
        32802, 32792, 32804, 32776, 32777, 32819, 32879, 32880, 32881, 29,
        32882, 32860, 32883, 30, 32885, 32887, 32877, 32881, 31, 32889, 32887,
        32804, 32792, 32891, 32881, 32, 32892, 32894, 33, 32892, 32865, 32866,
        32894, 34, 32837, 32838, 32896, 37, 32837, 32838, 32898, 38, 32900,
        32776, 32777, 32901, 32902, 32813, 32903, 32808, 32904, 32902, 40,
        32905, 32906, 41, 32908, 32910, 32912, 32913, 32825, 32915, 32800, 44,
        32917, 32919, 45, 32847, 32848, 32849, 32919, 46, 32776, 32771, 32787,
        32920, 32921, 32817, 32923, 32925, 47, 32926, 32778, 32927, 32825,
        32826, 32813, 48, 32926, 32921, 32928, 32929, 32873, 49, 32930, 32932,
        32933, 32923, 32792, 32935, 32776, 50, 32937, 32814, 32813, 32771,
        32887, 32939, 32940, 32814, 32776, 51, 32942, 32771, 32772, 32773, 52,
        32769, 32944, 32814, 32942, 32834, 32946, 32825, 32826, 32813, 53,
        32942, 32834, 32946, 32825, 32826, 32813, 32771, 32835, 54, 32948,
        32887, 32827, 32769, 32881, 55, 32949, 32887, 32827, 32769, 32881, 56,
        32951, 32953, 32849, 32954, 57, 32956, 32840, 58, 32957, 32959, 32906,
        59, 32942, 32944, 32814, 32769, 32834, 32827, 32825, 32826, 32813, 61,
        32801, 32776, 32777, 32778, 32780, 32960, 32782, 32783, 32935, 62,
        32860, 32961, 32865, 63, 32963, 32862, 32965, 64, 32966, 32840, 65,
        32966, 32860, 32866, 32961, 66, 32968, 32970, 32932, 32972, 32776, 67,
        32974, 32976, 32977, 32776, 32978, 32979, 32981, 69, 32966, 32953,
        32849, 32954, 70, 32917, 32983, 32905, 71, 32776, 32771, 32772, 32797,
        32985, 32987, 72, 32989, 32991, 32782, 32797, 32985, 32790, 73, 32989,
        32993, 32782, 32797, 32985, 32790, 74, 32995, 32771, 32772, 32939,
        32997, 32999, 75, 32985, 32790, 33001, 32797, 33003, 32790, 76, 32985,
        33004, 32776, 32782, 33006, 32790, 77, 32985, 32993, 32782, 33006,
        32790, 78, 32985, 32991, 33008, 32782, 33006, 32790, 80, 33009, 33004,
        32776, 33011, 33013, 32790, 81, 33009, 33004, 32776, 33014, 32932,
        32790, 82, 32776, 32771, 32772, 32797, 33017, 32789, 83, 32976, 32977,
        32776, 33019, 32772, 33020, 32782, 32817, 84, 32963, 32953, 32849,
        32954, 86, 33022, 33017, 32976, 33014, 32932, 33024, 32776, 91, 33025,
        32830, 33004, 32776, 32772, 33026, 92, 33025, 33028, 32777, 33030,
        33031, 93, 33025, 33028, 32777, 33032, 32875, 32814, 33034, 90, 33036,
        32789, 32776, 32960, 32920, 33004, 8, 33038, 101, 33041, 33043, 32837,
        33044, 102, 33045, 32837, 33047, 103, 33048, 32837, 33044, 104, 32837,
        32838, 33048, 105, 32837, 32838, 32896, 106, 32983, 32919, 32837, 33044,
        107, 33049, 33051, 33053, 202, 32801, 32776, 32772, 32960, 203, 32775,
        32776, 32772, 32960, 204, 33022, 33025, 32830, 33004, 32776, 205, 32801,
        32776, 32772, 33054, 255, 33057, 33058, 33059, 0;

    const int LETT[((292) - (0) + 1) - (0)] = 0,
        X '7890A80B', 0x02A00000, 0x53980000, 0x5D7E8000, 0x652E3AD3,
        0x652C8000, 0x190C52D8, 0x36000000, 0x510E6000, 0x436652C3, 0x49C80000,
        0x452CB700, 0x672E8000, 0x53700000, 0x69453980, 0x4565F1D6, 0x27BD3A47,
        0x50000000, 0x492C7643, 0x652C8000, 0x5D0DB280, 0x4BC6194B, 0x679D37DC,
        0x5F900000, 0x439E74CF, 0x5D6CB768, 0x590C52D8, 0x36FFB000, 0x42000000,
        0x672C77DD, 0x48000000, 0x694DB280, 0x1D0DB280, 0x257EBA53, 0x5D280000,
        0x4D700000, 0x5B7E5280, 0x610E50DB, 0x4BA4B966, 0x69443700, 0x6784B1D3,
        0x4D4CB200, 0x210E50DB, 0x4BA4B900, 0x7A000000, 0x5F300000, 0x494CD34B,
        0x65980000, 0x69CE1280, 0x4D95F680, 0x6784B1D3, 0x4D4C70E9, 0x537DC000,
        0x4D2EF2E4, 0x652CD2E5, 0x4B7472C8, 0x43A00000, 0x594DD280, 0x781B2199,
        0x0A000000, 0x69BDE000, 0x477DDA65, 0x5F600000, 0x47643AE7, 0x4B980000,
        0x4D7E4000, 0x5B4E79D3, 0x5D380000, 0x2879E000, 0x1A09CC80, 0x0A708980,
        0x1A4A6993, 0x1C380000, 0x497CB980, 0x652E3AD3, 0x65280000, 0x67AC59C7,
        0x654E1A66, 0x2E91E70E, 0x1C780000, 0x1E300000, 0x200A409B, 0x0AA0A926,
        0x697DE000, 0x4D2EE000, 0x6195FB53, 0x492C8000, 0x439650F2, 0x5B0DDC80,
        0x021A8A83, 0x18000000, 0x1C7A8000, 0x02980000, 0x2680A180, 0x247AAA13,
        0x1C280000, 0x1C09A280, 0x12700000, 0x0AC20927, 0x26700000, 0x24282600,
        0x1272828F, 0x0A900000, 0x6D0D94C8, 0x782AC29D, 0x28000000, 0x5DADB14B,
        0x64000000, 0x657EBA53, 0x5D280000, 0x45AE8000, 0x5D780000, 0x457C9C80,
        0x18426000, 0x082A6A1D, 0x28700000, 0x7890AA2B, 0x24700000, 0x5FAE9BD3,
        0x69400000, 0x7890A9AB, 0x18A00000, 0x5B0E0000, 0x1272C099, 0x12200000,
        0x029A629B, 0x0460A900, 0x182AC299, 0x26000000, 0x0849A29D, 0x2649E726,
        0x039650F2, 0x6B8612E4, 0x457EB748, 0x592E7980, 0x597EF2E4, 0x0828661C,
        0x1A4A6819, 0x0218A200, 0x077DD9E9, 0x43768000, 0x470DD75F, 0x68000000,
        0x45280000, 0x4BB4366B, 0x43A4B200, 0x477DB853, 0x59280000, 0x1261828F,
        0x02600000, 0x0679C9A8, 0x43980000, 0x5376D0D9, 0x53200000, 0x782B0A25,
        0x12726486, 0x7870268A, 0x7829898A, 0x4F4ED2DC, 0x433692E4, 0x7879C000,
        0x03A692DB, 0x61A00000, 0x69780000, 0x53753A53, 0x436539CA, 0x7831E91B,
        0x02A00000, 0x27AC59C7, 0x654E1A00, 0x6944A000, 0x457EB749, 0x66000000,
        0x78312713, 0x26400000, 0x53767A4B, 0x43200000, 0x789A80A5, 0x28000000,
        0x782B04A8, 0x7819E729, 0x1272A280, 0x0A70878D, 0x0C498280, 0x1EAA8000,
        0x0679CA0B, 0x30A00000, 0x0428E49C, 0x0679CA25, 0x1E600000, 0x26A1A728,
        0x6B9CB200, 0x0C7A4683, 0x28000000, 0x242867A5, 0x08000000, 0x0A9247A4,
        0x26A84703, 0x1A280000, 0x0BC6194B, 0x679D37DC, 0x439E74CF, 0x5D2C8000,
        0x652C77E5, 0x48000000, 0x252C77E5, 0x49980000, 0x36D80000, 0x43748000,
        0x510ED280, 0x494CD34B, 0x652DDA00, 0x4D7E56C3, 0x69980000, 0x26A2449D,
        0x0E000000, 0x27A654DD, 0x4E000000, 0x6D0E50D3, 0x4564A000, 0x03953A51,
        0x5B2E94C6, 0x5F84B943, 0x697E4000, 0x477DD9E9, 0x43768000, 0x252E77D9,
        0x6BA537DC, 0x477E594B, 0x47A00000, 0x4D7E56C3, 0x68000000, 0x477DDA43,
        0x53766000, 0x67AC4000, 0x6D0E54C3, 0x4564A000, 0x43953A51, 0x5B2E94C6,
        0x3DDBC000, 0x217D3769, 0x4B900000, 0x477DB843, 0x652C8000, 0x6F4E9400,
        0x4B8EB4ED, 0x4364B747, 0x4B200000, 0x617D3769, 0x4B900000, 0x4394A000,
        0x4B8EB4ED, 0x4364B768, 0x0F65F143, 0x58000000, 0x597C70D8, 0x7831E900,
        0x537692CF, 0x4B900000, 0x47643AE7, 0x4A000000, 0x752E5780, 0x67A4B800,
        0x5D7DD4DD, 0x692CF2E4, 0x69943B4B, 0x659CB980, 0x2B769CE1, 0x4B200000,
        0x0220890B, 0x26982113, 0x184A8C80, 0x267AA907, 0x0A000000, 0x1849C280,
        0x1879C380, 0x2E7A458D, 0x1260A000, 0x26682618, 0x1C09A2A6, 0x0679A813,
        0x182A4000, 0x2808460B, 0x26000000, 0x0CA98600, 0x4324994B, 0x679C3159,
        0x4A000000, 0x2628A000, 0x126A0000, 0x1A09CA83, 0x18000000;

    int I;
    int J;
    int K;
    int M;
    int Q;
    int S;

    _imp_string OMESS;

    OMESS = " ";
    for (I = 1; I != WORDMAX - 1; I += 1) {
      if (N == WORD[(I) - (0)]) goto FOUND;
    }
    I = DEFAULT;
  FOUND:
    J = 1;
    do {
      K = WORD[(I + J) - (0)];
      if (K & 0x8000 == 0) break;
      K = K ^ 0x8000;
      if (!(J == 1)) OMESS = OMESS." ";
      ? Please recode the source file so that loops with
          "%until <cond> %cycle ... %repeat" are replaced by
          "%cycle ... %repeat %until <cond>" do {
        M = LETT[(K) - (0)];
        S = 25;
        ? Please recode the source file so that loops with
            "%until <cond> %cycle ... %repeat" are replaced by
            "%cycle ... %repeat %until <cond>" do {
          Q = M >> S & 63;
        left_operand:
          Diagnose(0x886c0efa, "left_operand",
                   "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                   334)
              : AST_PHRASE stored at AST(7081722)
              : AST_RVALUE Index = 7081722
                // Usually -1 means an explicitly unassigned variable somewhere
                right_operand
              : Diagnose(
                    0xffffffff, "right_operand",
                    "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                    335);
          if (Q != 0) OMESS = ;
          S = S - 6;
        }
        while (!(S < 0))
          ;
        K = K + 1;
      }
      while (!(M & 1 == 0))
        ;
      J = J + 1;
    } while (1);
    return OMESS;
  };

  _imp_string SWRITE(int VALUE, int PLACES) {
    _imp_string S;

    int D0;
    int D1;
    int D2;
    int D3;
    int L;

    PLACES = PLACES & 15;
    // SETCC=0
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    // UNPACK&SPACEFILL

    asm();
    // FORSIGNINSERTION

    asm();
    asm();
    asm();
    asm();
    // FORCEISOZONECODES

    asm();
    asm();

  Mk_AST_assignment:
    Var = -1 if (VALUE < 0);
    L = D3 - D1;
  OUT:
    if (PLACES >= L) L = PLACES + 1;
    D3 = D3 - L - 1;
  Mk_AST_assignment:
    Var = -1;
    return;
  WASZERO:
  Mk_AST_assignment:
    Var = -1;
    L = 2;
    goto OUT;
  };

  void FAULT2(int N, int DATA, int IDENT) {
    //***********************************************************************
    //*SETSUPANERRORMESSAGEANDSHOVESITOUTONTOTHELISTING*
    //*ANALSOOPTIONALLYTOTHETERMINAL*
    //***********************************************************************
    int I;
    int J;
    int T;

    _imp_string MESS1;
    _imp_string MESS2;
    _imp_string WK1;
    _imp_string WK2;
    //*DELSTART

    if (FAULTY <= 1 && SMAP != 0 || DCOMP != 0) assert(_IMP_MONITOR_);
    //*DELEND

    MESS1 = "";
    MESS2 = "";
    FAULTY = FAULTY + 1;
    if (N == 100) {
      // SYNTAXFAULTSARESPECIAL

      J = 0;
      S = 0;
      T = 0;
      ? Please recode the source file so that loops with
          "%until <cond> %cycle ... %repeat" are replaced by
          "%cycle ... %repeat %until <cond>" do {
        // DATAHASADDR(CC(0))
        I = J;
        J = ;

        if (J > 128 && I < 128) {
          MESS2 = MESS2." %";
          T = T + 2;
        }
        if (I > 128 && J < 128) {
          MESS2 = MESS2." ";
          T = T + 1;
        }
      left_operand:
        Diagnose(0x886c4884, "left_operand",
                 "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                 334)
            : AST_PHRASE stored at AST(7096452)
            : AST_RVALUE Index = 7096452
              // Usually -1 means an explicitly unassigned variable somewhere
              right_operand
            : Diagnose(
                  0xffffffff, "right_operand",
                  "/home/gtoal/github/uparse-main/lang/imp80/imp80-compile.h",
                  335);
        MESS2 = ;
        T = T + 1;
        if (Q == QMAX) S = T;
        Q = Q + 1;
        if (T >= 250) break;
      }
      while (!(J == ';' && Q > QMAX || Q == LENGTH))
        ;
      if (Q == QMAX) S = T;
    }
  }
  else {
    ."   ";
    PARMOPT = 1;
    // STOPGENERATINGCODE
    if (PARMLET == 0) INHCODE = 1;

    MESS1 = MESS1."FAULT".SWRITE(N, 2);
    MESS2 = MESSAGE(N);
    if (MESS2->WK1.("##").WK2) MESS2 = WK1.SWRITE(IDENT, 1).WK2;
    if (MESS2->WK1.("#").WK2) MESS2 = WK1.SWRITE(DATA, 1).WK2;
    if (MESS2->WK1.("&&").WK2) MESS2 = WK1.PRINTNAME(DATA).WK2;
    if (MESS2->WK1.("&").WK2) MESS2 = WK1.PRINTNAME(IDENT).WK2;
    if (N > 100) MESS2 = MESS2." Disaster";
  }

  for (I = 2; I != 1; I += -1) {
    if (I == 1)
      ;
    ;
    if (MESS2 != "")
      ;
    if (N == 100 && S < 115) {
      ;
      ;
      ;
    }

    ;
    if (I == 1)
      ;
    if (TTOPUT <= 0) break;
  }
  if (N > 100) {
    assert(_IMP_MONITOR_);
    exit(0);
  }
};

void FAULT(int N, int FNAME) { FAULT2(N, FNAME, FNAME); };

void WARN(int N, int V) {
  _imp_string T;
  _imp_string S;

  S = MESSAGE(N + 200);
  if (S->S.("&").T) S = S.PRINTNAME(V).T;
  ;
  ;
};
// THENEXT4ROUTINESCANBE
// MACROISEDUSINGMVC
//

void TOAR2(int PTR, int VALUE) {
  if (USEIMP == YES) {
    A = VALUE;
    A = VALUE >> 8;

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

void TOAR4(int PTR, int VALUE) {
  int I;

  if (USEIMP == YES) {
    for (I = 0; I != 3; I += 1) {
      A = ;
    }

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

void TOAR8(int PTR, double VALUE) {
  int I;

  if (USEIMP == YES) {
    for (I = 0; I != 7; I += 1) {
      A = ;
    }

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

int FROMAR2(int PTR) {
  if (USEIMP == YES)
    return A << 8 | A;
  else {
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

int FROMAR4(int PTR) {
  if (USEIMP == YES) {
    return A << 24 | A << 16 | A << 8 | A;

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

_imp_string PRINTNAME(int N) {
  int V;
  int K;

  _imp_string S;

  V = WORD[(N) - (0)];
  K = ;
  if (K == 0)
    S = "???";
  else
    S = ;
  return S;
};
//*DELSTART

void PRHEX(int VALUE, int PLACES) {
  const char HEX[(15) - (0) + 1] = '0',
      '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F';

  int I;

  for (I = (PLACES << 2) - 4; I != 0; I += -4) {
    ;
  }
};

void PRINTLIST(int HEAD) {
  int I;
  int J;
  int K;

  ;
  ;
  ;
  while (HEAD != 0) {
    FROM123(HEAD, I, J, K);
    ;
    ;
    PRHEX(I, 8);
    ;
    PRHEX(J, 8);
    ;
    PRHEX(K, 8);
    ;
    MLINK(HEAD);
    // EXTRALINKINTAGSLIST!!
    HEAD = HEAD & 0xFFFF;
  }
};
//

void CHECKASL(void) {
  //***********************************************************************
  //*CHECKASLANDPRINTNOOFFREECELLS.DEBUGGINGSERVICEONLY*
  //***********************************************************************

  int N;
  int Q;

  Q = ASL;
  N = 0;
  while (Q != 0) {
    N = N + 1;
    Q = ASLIST[(Q) - (0)];
  };
  ;
  ;
  ;
  ;
};
//*DELEND

int MORESPACE(void) {
  //***********************************************************************
  //*FORMATSUPSOMEMOREOFTHEASL*
  //***********************************************************************

  int I;
  int N;
  int CL;
  int AMOUNT;

  N = ASLCURBTM - 1;
  // EIGHTTHOFNNAMES
  AMOUNT = (NNAMES + 1) >> 3;
  // GAPBETWEENCONSTS&ASL

  I = ASLCURBTM - ((CONSTPTR + 8) >> 2);
  // HALFTHEGAPMAX

  if (I >> 1 < AMOUNT) {
    AMOUNT = I >> 1;
    ASLWARN = 1;
  }

  if (AMOUNT < 20) AMOUNT = 0;
  ASLCURBTM = ASLCURBTM - AMOUNT;
  if (ASLCURBTM <= 1) ASLCURBTM = 1;
  CL = 4 * ASLCURBTM - 8;
  if (ASLCURBTM >= N || CONSTPTR > CL) {
    // ASYOUWERE

    ASLCURBTM = N + 1;

    for (I = 12; I != 1; I += -1) {
      if (DVHEADS[(I) - (0)] = 0) CLEARLIST(DVHEADS[(I) - (0)]);
    }
    if (ASL != 0) return ASL;
    FAULT(107, 0);
    // NEWVALUEWITHBIGGERASL

  } else
    CONSTLIMIT = CL;

  for (I = ASLCURBTM; I != N - 1; I += 1) {
    ASLIST[(I + 1) - (0)] = I;
  }
  ASLIST[(ASLCURBTM) - (0)] = 0;
  ASL = N;
  return N;
};
// integerfnNEWCELL
//***********************************************************************
//*PROVIDEANEWLISTPROCESSINGCELL.CRAPOUTIFNONEAVAILABLE*
//***********************************************************************
// integerI
// ifASL=0thenASL=MORESPACE
// I=ASL
// ASL=ASLIST(ASL)_LINK
// ASLIST(I)_LINK=0
// result=I
// end
void PUSH(int *CELL, int S1, int S2, int S3) {
  //***********************************************************************
  //*PUSHACELLCONTAININGTHE3STREAMSOFINFORMATIONGIVEN*
  //*ONTOTHETOPOFTHELISTPOINTEDATBYCELL.*
  //***********************************************************************
  recfm *LCELL;
  //(LISTF)

  int I;

  I = ASL;
  if (I == 0) I = MORESPACE();
  if (USEIMP == YES) {
    LCELL = ASLIST[(I) - (0)];
    ASL = LCELL;
    LCELL = CELL;
    CELL = I;
    LCELL = S1;
    LCELL = S2;
    LCELL = S3;

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
  }
};

void POP(int *CELL, int *S1, int *S2, int *S3) {
  //***********************************************************************
  //*COPYTHEINFORMATIONFROMTHETOPCELLOFLIST'CELL'INTO*
  //*S1,S2&S3ANDTHENPOPTHELISTUP1CELL.EMPTYLISTGIVE-1S*
  //***********************************************************************
  recfm *LCELL;
  //(LISTF)

  int I;

  if (USEIMP == YES) {
    I = CELL;
    LCELL = ASLIST[(I) - (0)];
    S1 = LCELL;
    S2 = LCELL;
    S3 = LCELL;
    if (I != 0) {
      CELL = LCELL;
      LCELL = ASL;
      ASL = I;
    }

  } else {
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
    asm();
  END:
  }
};

void REPLACE1(int CELL, int S1) { ASLIST[(CELL) - (0)] = S1; };

void REPLACE2(int CELL, int S2) { ASLIST[(CELL) - (0)] = S2; };

void REPLACE3(int CELL, int S3) { ASLIST[(CELL) - (0)] = S3; };

void BINSERT(int *TOP, int *BOT, int S1, int S2, int S3) {
  //***********************************************************************
  //*INSERTACELLATTHEBOTTOMOFALIST*
  //*UPDATINGTOPANDBOTTOMPOINTERSAPPROPIATELY*
  //***********************************************************************
  int I;
  int J;

  recfm *LCELL;
  //(LISTF)

  I = ASL;
  if (I == 0) I = MORESPACE();
  LCELL = ASLIST[(I) - (0)];
  ASL = LCELL;
  LCELL = S1;
  LCELL = S2;
  LCELL = S3;
  LCELL = 0;
  J = BOT;
  if (J == 0) {
    BOT = I;
    TOP = BOT;
  } else {
    ASLIST[(J) - (0)] = I;
    BOT = I;
  }
};

void INSERTATEND(int *CELL, int S1, int S2, int S3) {
  //***********************************************************************
  //*ADDACELLTOTHEBOTTOMOFTHELISTHEADEDBY'CELL'*
  //***********************************************************************

  int I;
  int J;
  int N;

  recfm *LCELL;
  //(LISTF)

  I = CELL;
  J = I;
  while (I != 0) {
    J = I;
    I = ASLIST[(J) - (0)];
  }
  N = ASL;
  if (N == 0) N = MORESPACE();
  LCELL = ASLIST[(N) - (0)];
  ASL = LCELL;
  if (J == 0)
    CELL = N;
  else
    ASLIST[(J) - (0)] = N;
  LCELL = S1;
  LCELL = S2;
  LCELL = S3;
  LCELL = 0;
};

void REPLACE123(int CELL, int S1, int S2, int S3) {
  ASLIST[(CELL) - (0)] = S1;
  ASLIST[(CELL) - (0)] = S2;
  ASLIST[(CELL) - (0)] = S3;
};

void MLINK(int *CELL) { CELL = ASLIST[(CELL) - (0)]; };

int FIND(int LAB, int LIST) {
  //***********************************************************************
  //*THISFUNCTIONSEARCHESLIST'LIST'FORLABINSTREAM2AND*
  //*RETURNSTHECORRESPONDINGCELLNO.ITUSEDFORMORETHAN*
  //*SCANNINGLABELLISTS.*
  //***********************************************************************
  while (LIST != 0) {
    if (LAB == ASLIST[(LIST) - (0)]) return LIST;
    LIST = ASLIST[(LIST) - (0)];
  }
  return -1;
};

void FROM123(int CELL, int *S1, int *S2, int *S3) {
  //***********************************************************************
  //*ALLTHEFROMSRETURNINFOFROMCELLSOFALISTWITHOUT*
  //*AFFECTINGTHELISTINANYWAY.*
  //***********************************************************************
  recfm *LCELL;
  //(LISTF)

  LCELL = ASLIST[(CELL) - (0)];
  S1 = LCELL;
  S2 = LCELL;
  S3 = LCELL;
};

void FROM12(int CELL, int *S1, int *S2) {
  recfm *LCELL;
  //(LISTF)

  LCELL = ASLIST[(CELL) - (0)];
  S1 = LCELL;
  S2 = LCELL;
};

int FROM1(int CELL) { return ASLIST[(CELL) - (0)]; };

int FROM2(int CELL) { return ASLIST[(CELL) - (0)]; };

int FROM3(int CELL) { return ASLIST[(CELL) - (0)]; };

void CLEARLIST(int *OPHEAD) {
  //***********************************************************************
  //*THROWAWAYACOMPLETELIST(MAYBENULL!)*
  //***********************************************************************

  int I;
  int J;

  I = OPHEAD;
  J = I;
  while (I != 0) {
    J = I;
    I = ASLIST[(J) - (0)];
  }
  if (J != 0) {
    ASLIST[(J) - (0)] = ASL;
    ASL = OPHEAD;
    OPHEAD = 0;
  }
};
// routineCONCAT(integernameLIST1,LIST2)
//!***********************************************************************
//!*ADDSLIST2TOBOTTOMOFLIST1*
//!***********************************************************************
// integerI,J
// I=LIST1
// J=I
// whileI#0thenJ=IandI=ASLIST(J)_LINK
// ifJ=0thenLIST1=LIST2elseASLIST(J)_LINK=LIST2
// LIST2=0
// end
// ANERRORPUTSCELLTWICEONTO
// FREELIST-CATASTROPHIC!
exit(0);
}
