               %BEGIN
               %INTEGER I,J,K,SS
%OWNBYTEINTEGERARRAY CLETT(1: 425)=   1,
  43,   1,  45,   1,  92,   1,  40,   1,  41,   1,  33,   1,  44,   2,
  42,  42,   2,  33,  33,   1,  42,   2,  47,  47,   1,  47,   1,  38,
   2,  62,  62,   2,  60,  60,   1,  46,   1,  63,   2, 201, 198,   6,
 213, 206, 204, 197, 211, 211,   7, 201, 206, 212, 197, 199, 197, 210,
   4, 210, 197, 193, 204,   4, 194, 217, 212, 197,   5, 211, 200, 207,
 210, 212,   4, 204, 207, 206, 199,   6, 211, 212, 210, 201, 206, 199,
   7, 210, 207, 213, 212, 201, 206, 197,   2, 198, 206,   3, 205, 193,
 208,   4, 206, 193, 205, 197,   6, 210, 197, 195, 207, 210, 196,   4,
 211, 212, 207, 208,   7, 195, 207, 205, 208, 201, 204, 197,   6, 201,
 199, 206, 207, 210, 197,   2, 207, 206,   3, 207, 198, 198,   5, 193,
 210, 210, 193, 217,   3, 193, 206, 196,   2, 207, 210,   2,  61,  61,
   1,  61,   2,  60,  45,   2,  45,  62,   4, 211, 208, 197, 195,   6,
 206, 207, 210, 205, 193, 204,   6, 214, 197, 195, 212, 207, 210,   1,
  58,   2,  62,  61,   1,  62,   1,  35,   2,  60,  61,   1,  60,   2,
  92,  61,   4, 197, 204, 211, 197,   1,  95,   6, 211, 217, 211, 212,
 197, 205,   8, 197, 216, 212, 197, 210, 206, 193, 204,   5, 195, 204,
 193, 201, 205,   7, 210, 197, 204, 197, 193, 211, 197,   1,  80,   3,
  80,  85,  84,   1,  64,   9, 208, 210, 201, 206, 212, 212, 197, 216,
 212,   6, 210, 197, 212, 213, 210, 206,   7, 210, 197, 211, 213, 204,
 212,  61,   7, 205, 207, 206, 201, 212, 207, 210,   5, 211, 212, 193,
 210, 212,   7, 209, 213, 197, 210, 201, 197, 211,   5, 195, 217, 195,
 204, 197,   6, 210, 197, 208, 197, 193, 212,   4, 212, 200, 197, 206,
   3, 197, 206, 196,   7, 195, 207, 205, 205, 197, 206, 212,   5, 210,
 197, 193, 204, 211,   5, 194, 197, 199, 201, 206,   2, 207, 198,   7,
 208, 210, 207, 199, 210, 193, 205,   6, 211, 215, 201, 212, 195, 200,
   8, 210, 197, 199, 201, 211, 212, 197, 210,   3, 207, 215, 206,   5,
 205, 195, 207, 196, 197,   5, 198, 193, 213, 204, 212,   4, 198, 201,
 204, 197,   6, 196, 197, 198, 201, 206, 197,   1, 210,   7, 211, 208,
 197, 195, 201, 193, 204,   4, 204, 201, 211, 212,   7, 195, 207, 206,
 212, 210, 207, 204,   6, 198, 201, 206, 201, 211, 200,   6, 198, 207,
 210, 205, 193, 212;
%OWNSHORTINTEGERARRAY SYMBOL(1300: 2148)=  1309,
  1303,     1,  1305,     3,  1307,     5,  1309,  1000,  1316,  1312,
     1,  1314,     3,  1316,  1000,  1335,  1321,  1001,  1342,  1706,
  1323,  1003,  1329,     7,  1300,  1316,  1335,     9,  1335,    11,
  1300,  1316,  1335,    11,  1342,  1340,  1361,  1316,  1335,  1342,
  1000,  1352,  1350,     7,  1300,  1316,  1335,  1352,     9,  1352,
  1000,  1361,  1359,    13,  1300,  1316,  1335,  1352,  1361,  1000,
  1388,  1364,    15,  1366,     1,  1368,     3,  1370,    18,  1372,
    11,  1374,    21,  1376,    23,  1378,    26,  1380,    28,  1382,
    30,  1384,    33,  1386,    36,  1388,  1000,  1393,  1391,    38,
  1393,  1000,  1398,  1396,    13,  1398,  1000,  1403,  1401,    40,
  1403,    43,  1420,  1406,    50,  1408,    58,  1411,    63,    50,
  1414,    68,    50,  1417,    74,    58,  1420,    79,  1883,  1426,
  1423,    86,  1426,  1403,  1426,  1431,  1429,    94,  1431,    97,
  1445,  1435,  1420,  1467,  1438,  1403,  1472,  1441,  1462,   101,
  1445,   106,  1462,   101,  1450,  1448,  1005,  1450,  1001,  1457,
  1453,   113,  1455,   118,  1457,   126,  1462,  1460,   133,  1462,
   136,  1467,  1465,   140,  1467,  1000,  1472,  1470,   101,  1472,
  1000,  1484,  1477,   101,   140,   101,  1480,   140,   101,  1482,
   101,  1484,  1000,  1493,  1491,     7,  1431,  1009,  1493,     9,
  1493,  1000,  1501,  1499,  1393,  1431,  1009,  1493,  1501,  1000,
  1520,  1513,  1010,  1300,  1316,  1335,  1669,  1300,  1316,  1335,
  1520,  1011,  1520,     7,  1010,  1501,  1528,  1011,     9,  1528,
  1526,  1669,  1300,  1316,  1335,  1528,  1000,  1539,  1533,   146,
  1501,  1539,  1537,   150,  1501,  1546,  1539,  1000,  1546,  1544,
   146,  1501,  1539,  1546,  1000,  1553,  1551,   150,  1501,  1546,
  1553,  1000,  1562,  1560,  1562,  1300,  1316,  1335,  1388,  1562,
  1000,  1571,  1565,   153,  1567,   156,  1569,   158,  1571,   161,
  1576,  1574,   164,  1576,  1000,  1581,  1579,    74,  1581,   169,
  1588,  1586,    13,  1714,  1581,  1588,  1000,  1599,  1592,  1472,
  1009,  1596,  1467,   140,  1599,  1599,   176,  1613,  1607,  1607,
  1009,     7,  1714,  1581,     9,  1607,  1613,  1611,    13,  1599,
  1613,  1000,  1618,  1618,  1009,  1635,  1618,  1624,  1622,    13,
  1613,  1624,  1000,  1635,  1629,  1001,  1723,  1006,  1635,   140,
  1001,  1635,  1890,  1004,  1644,  1644,     7,  1309,  1003,   183,
  1309,  1003,     9,  1651,  1649,    13,  1005,  1644,  1651,  1000,
  1661,  1659,    13,  1005,  1644,   161,  1445,  1651,  1661,  1000,
  1669,  1667,    13,  1009,  1635,  1661,  1669,  1000,  1686,  1672,
   156,  1674,   185,  1676,   188,  1678,   190,  1680,   192,  1682,
   195,  1684,   197,  1686,   161,  1694,  1689,  1006,  1694,  1398,
  1501,  1528,  1006,  1700,  1698,   200,  1902,  1700,  1000,  1706,
  1704,   205,  1001,  1706,  1000,  1714,  1712,   205,  1001,  1342,
  1706,  1714,  1000,  1723,  1723,  1300,  1316,  1335,   183,  1300,
  1316,  1335,  1730,  1728,   156,  1300,  1003,  1730,  1000,  1737,
  1733,   207,  1735,   214,  1737,  1000,  1742,  1740,   223,  1742,
   229,  1747,  1745,   140,  1747,   106,  1757,  1755,  1393,  1403,
  1467,   140,  1599,  1747,  1757,  1000,  1764,  1762,  1431,  1009,
  1493,  1764,  1000,  1772,  1768,  1001,  1857,  1772,   195,  1445,
   188,  1785,  1780,  1005,     7,  1005,    13,  1005,     9,  1785,
  1764,     7,  1005,     9,  1792,  1789,  1764,  1883,  1792,  1005,
  1792,  1805,  1799,     7,  1005,    13,  1005,     9,  1803,     7,
  1005,     9,  1805,  1000,  1811,  1809,    13,  1003,  1811,  1000,
  1817,  1814,  1764,  1817,  1005,  1883,  1857,  1823,  1012,  1005,
    13,  1005,  1828,  1013,  1005,    13,  1785,  1835,  1014,  1005,
    13,  1005,    13,  1811,  1839,  1015,  1811,  1805,  1844,  1016,
  1005,    13,  1811,  1849,  1017,  1772,    13,  1811,  1854,  1018,
  1772,    13,  1772,  1857,  1019,  1005,  1863,  1861,     1,  1005,
  1863,  1000,  1883,  1872,    21,  1005,    13,  1895,  1001,  1342,
  1706,  1876,   161,   237,  1005,  1879,  1002,  1817,  1883,   239,
   205,  1003,  1890,  1888,     7,  1005,     9,  1890,  1000,  1895,
  1893,   156,  1895,  1000,  1902,  1898,   243,  1900,   156,  1902,
  1000,  1943,  1910,  1010,  1001,  1342,  1706,  1011,  1553,  1918,
   161,  1001,     7,  1300,  1316,  1335,     9,  1921,   161,  1445,
  1924,   245,  1008,  1926,   255,  1931,   262,  1300,  1316,  1335,
  1933,   113,  1936,   270,   113,  1938,   278,  1940,   270,  1943,
   284,  1457,  2149,  1949,  1010,  1902,  1011,  1686,  1967,   292,
  1001,  1342,  1706,   156,  1300,  1316,  1335,    13,  1300,  1316,
  1335,    13,  1300,  1316,  1335,  1006,  1970,   298,  1006,  1973,
  1445,   183,  1985,  1398,  1010,  1501,  1528,   305,  1011,  1010,
  1902,  1011,  1694,  1006,  1988,    11,  1007,  1992,  1403,  1588,
  1006,  1995,   310,  1006,  2004,  1010,  1730,  1420,  1011,  1571,
  1001,  1484,  1006,  2007,   314,  1007,  2011,   322,  1576,  1006,
  2014,   328,  1006,  2019,   310,   334,   337,  1006,  2026,  1001,
     7,  1309,  1003,     9,   183,  2032,   345,  1009,  1635,  1661,
  1006,  2036,  1450,   284,  1006,  2040,   352,  1001,  1006,  2044,
   361,  1403,  1624,  2050,  1737,  1742,   352,  1001,  1006,  2053,
   365,  1006,  2057,    68,    86,  1006,  2061,    21,  1863,  1006,
  2069,   371,  1005,  1644,   161,  1445,  1651,  1006,  2074,   310,
   334,   377,  1006,  2079,   310,   334,   365,  1006,  2084,   382,
   118,   389,  1006,  2090,   164,  1001,  1706,  1484,  1006,  2095,
   391,   101,  1001,  1006,  2098,   399,  1006,  2103,   310,   334,
   399,  1006,  2107,   404,  1003,  1006,  2111,   412,  1694,  1006,
  2120,   106,   419,  1001,     7,  1757,  1747,     9,  1006,  2129,
   106,  1010,  1588,  1011,     7,  1001,     9,  1006,  2136,  1010,
  1420,   101,  1011,  1009,  1006,  2147,   106,   164,  1010,  1001,
  1700,  1011,     7,  1001,     9,  1006,  2149,  1006;
SS= 1943
         %OWNBYTEINTEGERARRAY OPC(0:120)=0,
             8,9,X'10',X'11',X'12',
               X'13',X'20',X'21',X'22',X'23',
               X'30',X'31',X'32',X'33',X'24',
               X'34',0,X'45',X'46',X'47',
               X'54',X'55',X'56',X'57',X'58',X'59',X'5A',X'5B',X'5C',
               X'5D',X'5E',X'5F',X'68',X'69',X'6A',
               X'6B',X'6C',X'6D',X'6E',X'6F',
               X'78',X'79',X'7A',X'7B',X'7C',
               X'7D',X'7E',X'7F',0,X'70',
               X'60',X'50',X'4E',X'4F',X'4C',
               X'4B',X'4A',X'49',X'48',X'44',
               X'43',X'42',X'41',X'40',0,
               X'90',X'98',X'86',X'87',0,
               X'91',X'92',X'94',X'95',X'96',
               X'97',X'9C',X'9E',X'9D',X'9F',
               X'82',X'84',X'85',0,X'88',
               X'89',X'8A',X'8B',X'8C',X'8D',
               X'8E',X'8F',0,X'D0',X'D1',
               X'D2',X'D4',X'D5',X'D6',X'D7',
               X'D8',X'DC',X'DD',X'DE',X'DF',
               X'D3',0,X'F1',X'F2',X'F3',
               X'F8',X'F9',X'FA',X'FB',X'FC',
               X'FD',0,10,4,X'80';
         %OWNINTEGERARRAY NEM(0:120)=M'CNOP',
               M'ISK',M'SSK',M'LP',M'LN',M'LT',
               M'LC',M'LPD',M'LND',M'LTD',M'LCD',
               M'LPE',M'LNE',M'LTE',M'LCE',M'HD',
               M'HE',0,M'BAL',M'BCT',M'BC',
               'N',M'CL','O','X','L','C','A','S','M','D',
               M'AL',M'SL',M'LD',M'CD',M'AD',
               M'SD',M'MD',M'DD',M'AW',M'SW',
               M'LE',M'CE',M'AE',M'SE',M'ME',
               M'DE',M'AU',M'SU',0,M'STE',
               M'STD',M'ST',M'CVD',M'CVB',M'MH',
               M'SH',M'AH',M'CH',M'LH',M'EX',
               M'IC',M'STC',M'LA',M'STH',0,
               M'STM',M'LM',M'BXH',M'BXLE',0,
               M'TM',M'MVI',M'NI',M'CLI',M'OI',
               M'XI',M'SDV',M'HDV',M'TDV',M'CKC',
               M'PC',M'WRD',M'RDD',0,M'SRL',
               M'SLL',M'SRA',M'SLA',M'SRDL',M'SLDL',
               M'SRDA',M'SLDA',0,M'SSP',M'MVN',
               M'MVC',M'NC',M'CLC',M'OC',M'XC',
               M'LSP',M'TR',M'TRT',M'ED',M'EDMK',
               M'MVZ',0,M'MVO',M'PACK',M'UNPK',
               M'ZAP',M'CP',M'AP',M'SP',M'MP',
               M'DP',0,M'SVC',M'SPM',M'IDL';
         %OWNSHORTINTEGERARRAY CLODS(0:88)=  %C
               4,X'50CD',X'001C',X'58CD',X'5C',
               4,X'50FB',X'003C',X'45FC',X'4C',
         6,X'5820',X'2000',X'0620',
               X'8920',24,X'1602',0,
               8,X'50B0',0,X'4AB0',X'4002',
                   X'41BB',X'7',X'54BD',84,
               4,X'581D',36,X'9200',X'1001',
               11,X'0510',X'2826',X'6E6D',X'48',
                   X'6A6D',X'28',X'2B26',X'47B0',
                   X'1014',X'6A2D',X'30',
               4, X'9003',X'B000',X'41BB',X'10',
               5, X'4100',0,X'58EC',186,X'5FE',
               5, X'904E',X'B010',X'98CE',
                   X'D000',X'5FE',
               7, X'904E',X'B010',X'98CF',0,
                   X'9859',X'F014',X'5FE',
               5,X'4100',255,X'8900',X'18',X'1610',
               6,X'4100',4,X'59BD',X'44',
                   X'4720',X'C054'     ,
               6,X'6000',X'B040',X'4100',12,X'5000',X'B048'
         %OWNBYTEINTEGERARRAY TSNAME (0:50)=0(8),
               1,0(5),1,26,1,1,26,0(2),2,1,26(8),
               3,9,17,26(2),1,0,1,26,0(2),5,0(8)
         NEWLINES(3); SPACES(30)
         %PRINTTEXT'E.R.C.C. IMP(SYS1) COMPILER '
         %PRINTTEXT' RELEASE 5 ALL-IMP VERSION'
         %PRINTTEXT'   DATED 1/5/70'
         NEWLINES(3)
         %OWNBYTEINTEGERARRAY BYTES(0:3)=4,1,2,8;
         %OWNBYTEINTEGERARRAY PRECEDENCE (1:12)=0,3,3,3,3,4,4,4,4,5,5,5;
         %OWNBYTEINTEGERARRAY TYPEFLAG(1:6)=1,2,
               B'1001',B'10001',B'11010',5;
         %OWNINTEGER MASK1=X'0F0F0F0F'
         %OWNINTEGER MASK2=X'0F0F0F0F'
         %OWNSHORTINTEGER MAXLEVELS=11
         %OWNINTEGER CODER=12
         %OWNINTEGER  LINK =15
         %OWNINTEGER  WSPR =11
         %OWNINTEGER  GLA =13
         %SHORTINTEGER CCSIZE,ARSIZE,DSIZE,NROUTS
         %ROUTINESPEC SIZES
         %INTEGER ASL,NNAMES
         %INTEGER CABUF,PPCURR,QPREAL,OLDLINE
         %INTEGER LINE,LENGTH,LENGTHP,N0,NUM,SNUM
         %INTEGER RLEVEL,NMAX,OWNLINK,CONSTPTR
         %INTEGER PLABEL,LEVEL,CA,MARKER1,MARKER2,LABSET
         %INTEGER R13,RP13,SIGFIGS
         %BYTEINTEGER AFLAG,FFLAG,CHECKS,SBFLAG
         %BYTEINTEGER FAULTY,MONE,HIT,QU,PERM,MCSWITCH,LIST,ALLLONG
         %BYTEINTEGER LINENOS,DIAGS1,DIAGS2,CHECKSP
         %BYTEINTEGER CTYPE,DCOMP,COMPILER,CPRMODE
         %BYTEINTEGER UNASS,PRINTMAP
         %LONGREAL CVALUE,IMAX
         %INTEGER MASK,RBASE,SFLABEL
%INTEGER NEXT,N,NR,ITEM,STRINST
         %INTEGER P,Q,R,S,T,U,V,NEST,FNAME
         %INTEGER XREFLINK,LDPTR
         %SHORTINTEGER NEPS,EPLINK
         %INTEGER SSTL,QMAX,STMTS
               %INTEGERARRAY REGISTER(0:15)
         %INTEGERARRAY ST(0:1300)
         %INTEGER %ARRAY SET,CODEBASE,FREG,RAL(0:MAXLEVELS)
         %SHORTINTEGERARRAY CYCLE,JUMP,NAME,LABEL,FLAG,SBR,WSP,%C
L,M,LWSP,MDARR,RNEXT,NMDECS,STRWSP(0:MAXLEVELS)
         %SHORTINTEGERARRAY CODE(0:192)
         %SHORTINTEGERARRAY PAGENOS(0:50)
         %INTEGERARRAY UVARREG(5:8)
         SIZES
         %BYTEINTEGERARRAY CC(0:CCSIZE),ASLIST(0:ASL),LETT(0:DSIZE+20)
         %SHORTINTEGERARRAY RA(0:NROUTS),A(-2:ARSIZE)
         %SHORTINTEGERARRAY WORD,TAGS(0:NNAMES)
         %SYSTEMINTEGERFNSPEC COM(%INTEGER N)
         %SYSTEMROUTINESPEC SET COM(%INTEGER I,J)
         %SYSTEMROUTINESPEC IOCP(%INTEGER A,B)
         %ROUTINESPEC CNOP(%INTEGER I,J)
         %ROUTINESPEC PCONST(%INTEGER X)
         %ROUTINESPEC PSI(%INTEGER OPCODE,J,BASE,DISP)
         %ROUTINESPEC PSS(%INTEGER OPCODE,N,BASE,DISP,P,Q)
         %ROUTINESPEC PRX(%INTEGER OPCODE,R1,R2,BASE,DISP)
         %ROUTINESPEC PACLOD(%INTEGER PTR,AT,VALUE)
         %ROUTINESPEC PCLOD(%INTEGER PTR)
         %ROUTINESPEC PLANT(%INTEGER VALUE)
         %ROUTINESPEC PRR (%INTEGER OPCODE,R1,R2)
         %SYSTEMROUTINESPEC LPUT(%INTEGER A,B,C,D)
         %ROUTINESPEC PLUG(%INTEGER J,K)
         %ROUTINESPEC PRHEX(%INTEGER VALUE,PLACES)
         %ROUTINESPEC INITIALISE
         %ROUTINESPEC PSYM(%INTEGER X)
                %ROUTINESPEC COMPARE
         %ROUTINESPEC PNAME
         %ROUTINESPEC CONST(%BYTEINTEGER MODE)
         %ROUTINESPEC CONSTLIST
         %ROUTINESPEC TEXTTEXT
         %ROUTINESPEC FROMAR8(%INTEGER PTR,%LONGREALNAME VALUE)
         %ROUTINESPEC FROMAR4(%INTEGER PTR,%INTEGERNAME VALUE)
         %ROUTINESPEC TOAR8(%INTEGER PTR,%LONGREAL VALUE)
         %ROUTINESPEC TOAR4(%INTEGER PTR,VALUE)
         %ROUTINESPEC CSS(%INTEGER P)
         %ROUTINESPEC FAULT(%BYTEINTEGER N)
          %ROUTINESPEC FINALISE
                %ROUTINESPEC PRINT NAME (%INTEGER N)
%EXTERNAL %C
         %ROUTINESPEC RECODE (%INTEGER START,FINISH,CA)
         %ROUTINESPEC READ LINE(%BYTEINTEGER N)
         %FAULT 9->INEND,18->SUBSCHAR
 ! START OF COMPILATION
INITIALISE
         LPUT(0,1,1,ADDR(LETT(1)))
8:       READLINE(0); Q=1
5:       R=1; P=SS
         OLDLINE=LINE; COMPARE
         FAULT(102) %IF R>ARSIZE
               ->6 %IF HIT=0
         STMTS=STMTS+1
          CSS(1)
         %IF DCOMP#0 %AND CA>CABUF %THEN %START
         RECODE(ADDR(CODE(0)),ADDR(CODE(PPCURR)),CABUF)
         NEWLINE
         LPUT(1,CA-CABUF,CABUF,ADDR(CODE(0)))
         PPCURR=0; CABUF=CA; %FINISH
         ->7 %IF A(1)=13;              ! END OF PROGRAM
9:       ->8 %IF Q>=LENGTH              ;->5
6:             FAULT(100); ->9
7:             !DEAL WITH END OF PROGRAM
          FINALISE
         SET COM(24,0) %IF COMPILER =0 %AND FAULTY=0
         %STOP
INEND:   FAULT(108)
SUBSCHAR:LINE=LINE+1;FAULT(48)
         SPACES(5)
15:      READSYMBOL(I); ->8 %IF I=10
         PRINTSYMBOL(I); ->15
          %ROUTINE    FINALISE
         N0=N0+1 %IF N0&1#1
         CNOP(0,8);ST(0)=X'20000'
         ST(1)=X'10100000'
         ST(4)=-1; ST(6)=255
ST(8)=OWNLINK
         ST(12)=X'41100000';           ! D'1'
         ST(14)=X'41200000';           ! D'2'
         ST(18)=X'4E000000';           ! FOR IN LINE FLOATING
         ST(20)=-4; ST(21)=-8
         ST(22)=XREFLINK; XREFLINK=88
         ST(26)=X'80000000'; ST(27)=X'06492350'; ST(28)=M'ERMA'
         ST(29)=X'904EB010';           ! ROUTINE ENTRY SUBROUTINE
         ST(30)= X'5A10D01C'
         ST(31)=X'07F10700'
         ST(32)=X'80808080'
         ST(33)=X'80808080'
         ST(38)=X'80000000'; ST(39)=X'06532349'; ST(40)=M'OCP '
         K=CA
         LPUT(1,CA-CABUF,CABUF,ADDR(CODE(0))) %UNLESS CA=CABUF
         LPUT(2,N0<<2+4,0,ADDR(ST(0)));! GLA
         FAULT(99) %IF N0>1023
         I=X'E2E2E2E2'
         LPUT(4,4,SSTL,ADDR(I))
         %IF CONSTPTR&1#0 %THEN PSYM(0)
         ->129 %IF FAULTY #0
         NEWLINE; WRITE(STMTS,4)
         %PRINTTEXT' STATEMENTS COMPILED SUCCESSFULLY'
120:          %PRINTTEXT'
CODE OCCUPIES'
         WRITE(K,3);%PRINTTEXT' BYTES      GLAP'
         WRITE(N0<<2,3); %PRINTTEXT' +'
         WRITE(CONSTPTR<<2,1); %PRINTTEXT' BYTES      DIAG TABLES'
         WRITE(SSTL+4,4); %PRINTTEXT' BYTES      TOTAL'
         ST(0)=CA; ST(1)=N0<<2+4
         ST(2)=(LDPTR<<2+7)&(-8); ST(3)=(SSTL+11)&(-8)
         ST(4)=CONSTPTR<<2
         ST(5)=CA+ST(1)+ST(2)+ST(3)+ST(4)
         WRITE(ST(5),5); %PRINTTEXT' BYTES'
         NEWLINE
         NEWLINE
         LPUT(7,24,0,ADDR(ST(0)))
%RETURN
129:     %PRINTTEXT'
PROGRAM CONTAINS'; WRITE(FAULTY,2); %PRINTTEXT' FAULTS'; ->120
         %END
         %ROUTINE     READ LINE(%BYTEINTEGER N)
         %SHORTROUTINE
         %INTEGER DEL
         %BYTEINTEGER NP
         %COMMENT ABOUT 30% CPU TIME OF COMPILATION IS SPENT IN THIS
         %COMMENT ROUTINE AS WRITTEN. A HAND CODED VERSION USING I
         %COMMENT ISO CARD NOT READ SYMBOL IS USED IN PRODUCTION VRSN
         Q=1; LINE=LINE+1
         LENGTH=0; DEL=0
1:       ->START %UNLESS N=0 %AND NEXT SYMBOL=10;! IGNORE EMPTY LINES
         SKIP SYMBOL; ->1;                       ! IN PROGRAM MODE ONLY
START:   ->2 %IF LIST=0
         WRITE(LINE,5)
         PRINT SYMBOL(M'''') %IF N#0
         SPACES(4*LEVEL-N)
2:       READ SYMBOL(I)
         PRINT SYMBOL(I) %UNLESS LIST=0
         ->4 %UNLESS N=0
         ->3 %UNLESS I='%'
         DEL=128; ->2
3:       DEL=0 %UNLESS 'A'<=I<='Z'
         ->2 %IF I=' '
4:       LENGTH=LENGTH+1
         CC(LENGTH)=I!DEL
         %IF I=M'''' %THEN N=1-N
         ->2 %UNLESS I=10
         %RETURN %UNLESS CC(LENGTH-1)= 'C'+128
         LENGTH=LENGTH-1
         ->2 %IF LIST=0
         SPACES(5); PRINTSYMBOL('C'); SPACES(4*LEVEL); ->2
         %END
         %ROUTINE     FAULT(%BYTEINTEGER N)
         %SHORTROUTINE
         %INTEGER I,J,QP
         %PRINTTEXT'
*';      WRITE(LINE,4); I=3; I=3*LEVEL %IF LIST=0     ; SPACES(I)
         FAULTY=FAULTY+1
         ->9 %IF N=100; %PRINTTEXT'FAULT'; WRITE(N,2)
         ->2 %IF N<100; %PRINTTEXT' DISASTER '
         %MONITORSTOP
2:       PRINTNAME(FNAME) %UNLESS 7#N#16; ->99
9:       %PRINTTEXT'  SYNTAX   '
         ->11 %IF LINE#OLDLINE
         QP=Q
               %CYCLE Q=Q,1,LENGTH-1
               PRINTSYMBOL(CC(Q))
               ->10 %IF CC(Q)=';'
         %REPEAT
10:            Q =Q+1
         ->99 %IF I+20+Q-QP>120
         NEWLINE; SPACES(I+QMAX-QP+17)
         PRINTSYMBOL('!')
         NEWLINE
         ->99
11:      %PRINTTEXT'
         TEXT MODE FAILURE '; WRITE(LINE-OLDLINE,1)
         %PRINTTEXT' LINES LOST '
         NEWLINE; Q=QMAX
99:      NEWLINE; %END
               %ROUTINE COMPARE
         %SHORTROUTINE
         %INTEGER RA,RP,RQ,RR,RS,MARKER
         %SWITCH BIP(1000:1019)
         RP=SYMBOL(P)
         RQ=Q; RR=R;                   ! RESET VALUES OF LINE&AR PTRS
         A(R)=1;                       ! FIRST ALTERNATIVE TO BE TRIED
         P=P+1; RA=SYMBOL(P); RS=P;    ! RA TO NEXT PHRASE ALTERNATIVE
         %COMMENT  ROUTINE REALLY STARTS HERE
1:       R=R+1
BIP(1000):2:                           ! SUCCESS ON TO NEXT ITEM
         RS=RS+1; ->8 %IF RS=RA;       ! RS=NEXT ALTERNATIVE MEANS THAT
                                       ! THIS ALT HAS BEEN COMPLETED SO
                                       ! EXIT WITH HIT=1
         ITEM=SYMBOL(RS);              ! NEXT BRICK IN THE CURRENT ALT
         ->4 %IF ITEM>=1300;           ! BRICK IS A PHRASE TYPE
         ->6 %IF ITEM>=1000;           ! BRICK IS BUILT IN PHRASE
         %CYCLE J=1,1,CLETT(ITEM);     ! BRICK IS LITERAL
         ->3 %UNLESS CC(Q)=CLETT(J+ITEM)
         Q=Q+1; %REPEAT;               !CHECK IT WITH LITERAL DICT ENTRY
         ->2;                          ! MATCHED SUCCESSFULLY
4:                                     ! PHRASE TYPE ALTERNATE
         P=ITEM; COMPARE;              ! RCALL COMPARE TO RECOGNISE IT
         ->2 %IF HIT#0;                ! FOUND
3:       QMAX=Q %IF Q>QMAX;            ! FAILURE - NOTE POSITION REACHD
         Q=RQ; R=RR;                   ! RESET LINE AND A.R. POINTERS
         ->7 %IF RA=RP;                !TOTAL FAILURE NO ALT LEFT TO TRY
         RS=RA; A(R)=A(R)+1;           ! MOVE TO NEXT ALT OF PHRASE
         RA=SYMBOL(RA); ->1
8:                                     ! COMPLETE SUCCESS
         HIT=1; %RETURN
7:                                     ! UTTER FAILURE
         HIT=0; %RETURN
6:                                     ! BUILT IN PHRASE
         I=CC(Q); ->BIP(ITEM);         ! SO SWITCH TO IT
BIP(1001):                             ! PHRASE NAME
               PNAME; ->1 %IF HIT=1; ->3
BIP(1002):                             ! PHRASE U/CODE INSRN
         ->3 %UNLESS 'A'<=I<='Z'
         S=I; J=1
200:     Q=Q+1; I=CC(Q)
         ->201 %UNLESS 'A'<=I<='Z'
         S=S<<8!I;J=J+1; ->200
201:     ->3 %UNLESS I='_' %AND J<=4
         Q=Q+1; ->2
BIP(1003):                             ! PHRASE CONST
         CONST(0)
               ->3 %IF HIT=0
         ->1 %IF CTYPE=5
         ->26 %IF CTYPE=2;             ! %REAL
         ->22 %IF S>>12=0
         A(R)=1
         TOAR4(R+1,S); R=R+3; ->2
22:      A(R)=9; R=R+1; A(R)=S; ->1
26:      A(R)=2; TOAR8(R+1,CVALUE); R=R+5; ->2
BIP(1005):                             ! PHRASE N
         ->3 %UNLESS '0'<=I<='9';      ! MUST START WITH DIGIT
         CONST(2); A(R)=S; ->1
BIP(1004):                             ! PHRASE CONSTLIST
         CONSTLIST;->1
BIP(1006):                             ! PHRASE S=SEPARATOR
         ->2 %IF I=10
         ->3 %UNLESS I=';'
         Q=Q+1; ->2
BIP(1007):30:                          ! PHRASE TEXT=COMMENT TEXT
         ->1 %UNLESS 10#I#';'
         Q=Q+1; I=CC(Q); ->30
BIP(1008):                             ! PHRASE TEXTTEXT=BETWEEN QUOTES
         TEXTTEXT
         ->3 %IF HIT=0;->1
BIP(1009):                             ! PHRASE NAMELIST
         ! GIVES AR IN FORM NNAMES,NAME1,....NAMEN
         U=R; V=1; R=R+1
         PNAME; ->3 %IF HIT=0
90:      ->91 %UNLESS CC(Q)=','
         Q=Q+1; R=R+1
         I=CC(Q)
         PNAME
         ->92 %IF HIT=0; V=V+1; ->90
92:      R=R-1; Q=Q-1
91:      A(U)=V; ->1
BIP(1010):                             ! PHRASE HOLE
         MARKER=R; ->1
BIP(1011):                             ! PHRASE MARK
         A(MARKER)=R-MARKER; ->2
BIP(1012):                             ! PHRASE UCRR=RR FORMAT
         ->124 %IF S&255='R';          ! LAST LETTER=R
         %CYCLE I=0,1,2
         ->120 %IF S=NEM(I)
         %REPEAT; ->3
120:     A(R)=OPC(I)&63; ->1
124:       J=S>>8; %CYCLE I=2,1,48
         ->120 %IF J=NEM(I)
         %REPEAT; ->3
BIP(1013):                             ! PHRASE UCRX=RX FORMAT
         %CYCLE I=18,1,64
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
130:     A(R)=OPC(I); ->1
BIP(1014):                             ! PHRASE UCRS=R,R,DB FORMAT
         %CYCLE I=66,1,69
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
BIP(1015):                             ! PHRASE UCSI=STORE IMDTE
         %CYCLE I=71,1,83
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
BIP(1016):                             ! PHRASE UCSHIFT=SHIFT INSTRNS
         %CYCLE I=85,1,92
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
BIP(1017):                             ! PHRASE UCSS=STORE TO STORE
         %CYCLE I=94,1,106
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
BIP(1018):                             ! PHRASE UCPD=PACKED DECIMAL
         %CYCLE I=108,1,116
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
BIP(1019):                             ! PHRASE UCSPEC=THE FUNNIES
         %CYCLE I=118,1,120
         ->130 %IF S=NEM(I)
         %REPEAT; ->3
               %END                    ;!OF ROUTINE 'COMPARE'
         %INTEGERFN HASH(%INTEGER ADDR)
         %RESULT=NNAMES &(19*BYTE INTEGER(ADDR)+31*BYTE INTEGER(ADDR+1))
         %END
         %ROUTINE PNAME
         %INTEGER  JJ,KK,LL
         %SHORTROUTINE
         HIT=0; I=CC(Q)
         -> 3 %UNLESS 'A'<=I<='Z';     ! 1ST CHAR MUST BE LETTER
         ->3 %IF CC(Q+1)=M'''' %AND(I='B' %OR I='X' %OR I='M')
         S=2; T=1; -> 10
12:      Q=Q+1; I=CC(Q)
         -> 101 %UNLESS 'A'<=I<='Z' %OR '0'<=I<='9'
         T=T+1; S=S+1
10:      LETT(NEXT+T)=I; ->12
101:     LETT(NEXT)=T;                 ! INSERT LENGTH
         FAULT(108) %IF NEXT+S>DSIZE;  !DICTIONARY OVERFLOW
         JJ=HASH(ADDR(LETT(NEXT)));    !PREPARE TO LOOK UP
         %CYCLE NUM=JJ,1,JJ+NNAMES
         KK=NUM&NNAMES;                ! TREAT DICTIONARY AS CYCLIC
         LL=WORD(KK)
         -> 2 %IF LL=0;                ! NAME NOT KNOWN
         %CYCLE JJ=1,1,LETT(LL)
         -> FAIL %UNLESS LETT(NEXT+JJ)=LETT(LL+JJ)
         %REPEAT; -> 41;               ! NAME FOUND
FAIL:    %REPEAT
         FAULT(104);                   ! TOO MANY NAMES
2:       WORD(KK)=NEXT; NEXT=NEXT+S
41:      A(R)=KK; HIT=1
3:       %END
         %ROUTINE     CONST(%BYTEINTEGER MODE)
         %COMMENT MODE=0 FOR NORMAL  MODE=2 FOR EXPONENT ETC
         %INTEGER Z
         %LONGREAL X
         CVALUE=0; I=CC(Q)
         %SHORTROUTINE
               S=0; -> N %IF M'0'<=I<=M'9'
         ->DOT %IF I='.' %AND MODE=0 %AND '0'<=CC(Q+1)<='9';! 1 DIDT MIN
         -> PI %IF I='$' %AND MODE=0
         ->101 %IF I=M''''
         ->150 %UNLESS CC(Q+1)=M''''; Q=Q+2
         ->102 %IF I='X'; ->MULT %IF I='M'
         ->104 %IF I=M'B'
         Q=Q-2; ->150
PI:
         CVALUE=3.14159 26535 89793 23846; Q=Q+1; ->40
101:     S=R; A(R)=5; R=R+1
         TEXTTEXT
         ->24 %IF A(S+1)=0;            ! NULL STRING
         ->27 %IF A(S+1)=1;            ! SINGLE CHAR CONSTANT
         CTYPE=5; %RETURN
24:      R=S; S=0; ->99
27:      R=S; S=A(S+2); ->99
102:     I=CC(Q); Q=Q+1;               ! HEX CONSTANTS
         ->99 %IF I=M''''
               ->5 %IF M'0'<=I<=M'9'
         ->150 %UNLESS M'A'<=I<=M'F'
         S=S<<4!(I-'A'+10); ->102
5:       S=S<<4!(I-'0'); ->102
MULT:          T=0;                    ! MULTIPLE CONSTANTS
28:            I=CC(Q); Q=Q+1; ->22 %IF I=M''''
29:      S=S<<8!I; T=T+1; ->150 %IF T>=5; ->28
22:      ->99 %UNLESS CC(Q)=M''''; Q=Q+1; ->29
104:     T=Q;                          ! BINARY CONST
32:            I=CC(Q); Q=Q+1
               ->31 %IF M'1'#I#M'0'
               S=S<<1!(I-'0')
         ->150 %IF Q-T>=33; ->32
31:      ->99 %IF I=M''''; ->150
N:       I=I&15; CVALUE=10*CVALUE+I
         Q=Q+1; I=CC(Q)
         ->N %IF M'0'<=I<=M'9'
         -> ALPHA %UNLESS MODE=0 %AND I='.'
DOT:     Q=Q+1; X=10
45:      I=CC(Q); -> ALPHA %UNLESS M'0'<=I<=M'9'
         I=I&15; CVALUE=CVALUE+I/X
         X=10*X
         Q=Q+1; ->45
ALPHA:   %COMMENT TEST FOR EXPONENT
         -> FIX %UNLESS MODE=0 %AND CC(Q)='@'
         Q=Q+1; X=CVALUE
         Z=1; ->39 %IF '+'#CC(Q)#'-'
         Z=-1 %IF CC(Q)='-'; Q=Q+1
39:      CONST(2); ->150 %IF HIT=0; S=S*Z
         %IF S=-99 %THEN CVALUE=0 %ELSE CVALUE=X*10**S
FIX:     %COMMENT SEE IF IT IS INTEGER
         ->40 %IF CVALUE>IMAX;         ! TOO BIG
         ->41 %IF FRACPT(CVALUE)=0
40:      CTYPE=2; HIT=1; %RETURN
41:      S=INT(CVALUE)
99:      CTYPE=1; HIT=1; %RETURN
150:     HIT=0;                        ! FAILURE
               %END
         %ROUTINE CONSTLIST
         %SHORTROUTINE
         %INTEGER PRECP,NCONST,RF,J,K,CPW
         %INTEGER KK,SIGN,SP,RQ,VALUE
         %INTEGER TYPEP,ACC,RP,N,JJ
         %LONGREAL C
         VALUE=0; NCONST=0
         %IF CONSTPTR&1#0 %THEN PSYM(0)
         A(R+1)=CONSTPTR
         RP=R; R=R+2; ACC=0; N=24
         TYPEP=TYPEFLAG(A(2)); PRECP=TYPEP>>3
         TYPEP=TYPEP&7
         %IF TYPEP=5 %THEN ACC=A(4)
         PRECP=3 %IF TYPEP=2 %AND ALL LONG=1
         CPW=4//BYTES(PRECP)
         CPW=4 %IF TYPEP=5
6:       RQ=Q; I=CC(Q); SIGN=1; ->7 %IF I='-'
         ->8 %IF I='+'; ->9
7:       SIGN=-1; ->99 %IF CPW=4
8:       Q=Q+1; I=CC(Q)
9:       CONST(0); RF=1
         ->98 %IF HIT=0
         ->1 %UNLESS CC(Q)='('
         J=S; Q=Q+1; C=CVALUE
         CONST(2); ->98 %UNLESS HIT=1 %AND S>0 %AND CC(Q)=')'
         Q=Q+1
         CVALUE=C; RF=S; S=J
1:       ->21 %IF TYPEP=2
         ->51 %IF TYPEP=5
         ->99 %IF CPW=4 %AND S>255
         ->99 %IF CPW=2 %AND !S!>>16#0;! SHORT TOO LARGE
         S=S*SIGN
         S=S&X'FFFF' %IF CPW=2
          %CYCLE KK=1,1,RF
         J=NCONST//CPW
         K=NCONST-CPW*J
         SP=S<<(32*(CPW-K-1)//CPW)
         VALUE=SP!VALUE
         NCONST=NCONST+1
         ->5 %UNLESS (CPW-1)&NCONST=0
         PSYM(VALUE); VALUE=0
5:       %REPEAT
         11:   ->99 %UNLESS CC(Q)=','; Q=Q+1
         ->6 %UNLESS CC(Q)=10
         READLINE(0); Q=1; ->6
21:      %IF CTYPE=1 %THEN CVALUE=S
         CVALUE=SIGN*CVALUE
         J=INTEGER(ADDR(CVALUE))
         K=INTEGER(ADDR(CVALUE)+4)
         %CYCLE KK=1,1,RF; NCONST=NCONST+1
         PSYM(J); PSYM(K) %IF PRECP=3
         %REPEAT; ->11
51:      ->52 %IF CTYPE=5
         ->98 %UNLESS CTYPE=1 %AND S<=127
         A(RP+3)=1; A(RP+4)=S
52:      ->98 %UNLESS SIGN=1 %AND ACC>=A(RP+3)
         %CYCLE KK=1,1,RF
         %CYCLE JJ=0,1,ACC
         S=A(RP+JJ+3)&127
         SP=S<<N
         VALUE=SP!VALUE; N=N-8
         ->55 %UNLESS N<0
         PSYM(VALUE); N=24; VALUE=0
55:      %REPEAT
         NCONST=NCONST+1
         %REPEAT; R=RP+2; ->11
98:      Q=RQ
99:      R=RP; A(R)=NCONST
PSYM(VALUE) %IF(TYPEP=5%AND N#24)%OR(TYPEP#5 %AND(CPW-1)&NCONST#0)
         %END
         %ROUTINE TEXTTEXT
         %SHORTROUTINE
         %INTEGER S,J
         S=R; R=R+1
         ->98 %UNLESS I=M''''          ;!FAIL UNLESS  INITIAL QUOTE
         Q=Q+1
1:       I=CC(Q);A(R)=I;R=R+1
         ->31 %IF I=M''''
         ->32 %IF I=10
         Q=Q+1;FAULT(106) %IF R-S>256
         ->1
32:      READ LINE(1);Q=1;->1
31:      ->35 %UNLESS CC(Q+1)=M''''
         Q=Q+2;->1
35:      R=R-2;J=R-S;->36 %UNLESS J&1=0
         R=R+1;A(R)=0
36:      A(S)=J;Q=Q+1;HIT=1;->99
98:      HIT=0
99:      %END
         %ROUTINE SET UP LIST
         %SHORTROUTINE
         %INTEGER J,K
         %CYCLE J=0,8,ASL-16
         SHORT INTEGER(ADDR(ASLIST(J))+14)=J
         %REPEAT
         INTEGER(ADDR(ASLIST(0)))=-1;  !   INITIALISE BOTTOM CELL
         INTEGER(ADDR(ASLIST(4)))=X'FFFF0000'
         ASL=ASL-8
         %END
%ROUTINE INITIALISE
         %SHORTROUTINE
         %OWNBYTEINTEGERARRAY ILETT(1:320)=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',
               6,'R','U','N','O','U','T',
               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',
               9,'M','A','P','R','E','C','O','R','D' ,
               11,'B','Y','T','E','I','N','T','E','G','E','R',
               12,'S','H','O','R','T','I','N','T','E','G','E','R',
               6,'R','A','D','I','U','S',
               6,'A','R','C','T','A','N',
               6,'P','A','R','I','T','Y',
              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'
         %OWNSHORTINTEGERARRAY IWORD(0:42)=1,
               13,26,34,40,51,58,67,74,85,97,
               108,113,119,127,132,139,143,149,156,162,
               170,175,183,187,194,199,203,207,211,215,
               219,229,241,254,261,268,275,287,290,299,307,
         314
         %INTEGER I
         CABUF=0; PPCURR=0; QPREAL=0; OLDLINE=0
         LINE=0; RLEVEL=0; NMAX=0; CONSTPTR=0
         LEVEL=0; CA=0; AFLAG=0; FFLAG=0; SBFLAG=0
         FAULTY=0; PERM=0; MCSWITCH=0; ALL LONG=0
         DCOMP=0; COMPILER=0; CPRMODE=0; PRINT MAP=0
         NEXT=1; NR=0; LDPTR=0; NEPS=0; EPLINK=0
         RBASE=0; STRINST=0
         IMAX=(-1)>>1;PLABEL=24999
         SSTL=0; STMTS=0; SNUM=0
         LABSET=3<<30;LETT(0)=0
         N0=41; N=12
         CHECKSP=1 ;  CHECKS=1
         LINENOS=1; DIAGS1=1; QU=1; MONE=1
         LIST=1; SFLABEL=20999; UNASS=1
         OWNLINK=0; XREFLINK=136
         I=COM(24)
         LIST=0 %IF I&2#0
         LINENOS=0 %IF I&4#0
         UNASS=0 %IF I&16#0
         CHECKS=0 %IF I&32#0
         PRINTMAP=1 %IF I&X'8000'#0
         DIAGS1=0 %IF I&64#0
         %CYCLE I=0,1,MAXLEVELS
         SET(I)=0; CODEBASE(I)=0; FREG(I)=0; RAL(I)=0
         LWSP(I)=0; MDARR(I)=0; RNEXT(I)=0; STRWSP(I)=0
         CYCLE(I)=0; JUMP(I)=0; NAME(I)=0
         LABEL(I)=0; FLAG(I)=0; SBR(I)=0; WSP(I)=0
         %REPEAT
         %CYCLE I=0,1,50
         ST(I)=0; PAGENOS(I)=0
         REGISTER(I)=0 %IF I<16
         UVARREG(I)=0 %IF 5<=I<=8
         %REPEAT; PAGENOS(1)=10
         %CYCLE I=0,1,NNAMES
         WORD(I)=0; TAGS(I)=0
         %REPEAT
         SET UP LIST
         PCLOD(0);                     !  ST 12,28(GLA)--L 12,92(GLA)
         PCLOD(5);                     !  ST 15,60(11)--BAL 15,RTI
         A(1)=28
         %CYCLE I=0,1,42
         J=IWORD(I)
         %CYCLE K=1,1,ILETT(J)
         CC(K)=ILETT(J+K);             ! COPY SPECIAL NAMES TO SOURCE
         %REPEAT; CC(K+1)=';'
         R=2;Q=1; PNAME;               ! SPECIAL NAME TO DICTIONARY
         CSS(1); %REPEAT;              ! AND COMPILED
         A(1)=12; CSS(1);              ! COMPILE A BEGIN
         %END
!
         %COMMENT THE NEXT 4 ROUTINES CAN BE MACROISED USING MVC
!
         %ROUTINE     TOAR4(%INTEGER PTR,VALUE)
         %INTEGER AD; AD=ADDR(VALUE)
         A(PTR)<-SHORT INTEGER(AD)
         A(PTR+1)<-SHORT INTEGER (AD+2)
         %END
         %ROUTINE     TOAR8(%INTEGER PTR,%LONGREAL VALUE)
         %INTEGER AD; AD=ADDR(VALUE)
         A(PTR)<-SHORT INTEGER(AD)
         A(PTR+1)<-SHORT INTEGER(AD+2)
         A(PTR+2)<-SHORT INTEGER(AD+4)
         A(PTR+3)<-SHORT INTEGER(AD+6)
         %END
         %ROUTINE     FROMAR4(%INTEGER PTR,%INTEGERNAME VALUE)
         %INTEGER AD; AD=ADDR(VALUE)
         SHORT INTEGER(AD)<- A(PTR)
         SHORT INTEGER(AD+2)<- A(PTR+1)
         %END
         %ROUTINE     FROMAR8(%INTEGER PTR,%LONGREALNAME VALUE)
         %INTEGER AD; AD=ADDR(VALUE)
         SHORT INTEGER(AD)<- A(PTR)
         SHORT INTEGER(AD+2)<- A(PTR+1)
         SHORT INTEGER(AD+4)<- A(PTR+2)
         SHORT INTEGER(AD+6)<- A(PTR+3)
         %END
               %ROUTINE PRINTNAME (%INTEGER N)
         %SHORTROUTINE
         %INTEGER J,V
         ->4 %IF N>=0; N=-N
         ->5 %UNLESS 16384<=N<=16384+NNAMES
         N=N-16384; ->4
5:       WRITE(N,1); ->3
4:       SPACE; V=WORD(N)
         %CYCLE J=1,1,LETT(V)
         PRINT SYMBOL(LETT(V+J))
         %REPEAT
3:             %END
         %ROUTINE     PCLOD(%INTEGER PTR)
         %INTEGER I
         %CYCLE I=PTR+1,1,PTR+CLODS(PTR)
         PLANT(CLODS(I))
         %REPEAT
         %END
         %ROUTINE     PACLOD(%INTEGER PTR,AT,VALUE)
         %INTEGER I,J,K
         J=CLODS(PTR); AT=AT+PTR
         %CYCLE I=PTR+1,1,PTR+J
         K=CLODS(I)
         K=K!VALUE %IF I=AT
         PLANT(K);%REPEAT
         %END
         %ROUTINE     PLANT(%INTEGER VALUE)
         %SHORTROUTINE
         CODE(PPCURR)<-VALUE
   PPCURR=PPCURR+1; CA=CA+2
         %RETURN %UNLESS PPCURR=192
         LPUT(1,384,CABUF,ADDR(CODE(0)))
         PPCURR=0; CABUF=CA
         %END
         %ROUTINE     PRR (%INTEGER OPCODE,R1,R2)
         PLANT(OPCODE<<8!R1<<4!R2)
         %END
         %ROUTINE     PRX(%INTEGER OPCODE,R1,R2,BASE,DISP)
         PLANT(OPCODE<<8!R1<<4!R2)
         PLANT(BASE<<12!DISP)
         %END
         %ROUTINE     PSI(%INTEGER OPCODE,J,BASE,DISP)
         PLANT(OPCODE<<8!J)
         PLANT(BASE<<12!DISP)
         %END
         %ROUTINE     PSS(%INTEGER OPCODE,N,BASE,DISP,P,Q)
         PLANT(OPCODE<<8!(N-1))
         PLANT(BASE<<12!DISP)
         PLANT(P<<12!Q)
         %END
         %ROUTINE     PCONST(%INTEGER X)
         PLANT(X>>16); PLANT(X&X'FFFF')
         %END
         %ROUTINE     CNOP(%INTEGER I,J)
         J=J-1
1:       ->9 %IF CA&J=I; PLANT(X'0700'); ->1
9:       %END
         %ROUTINE     PSYM(%INTEGER X)
         LPUT(5,4,CONSTPTR<<2,ADDR(X))
         CONSTPTR=CONSTPTR+1
         %END
         %ROUTINE     PLUG(%INTEGER J,K)
         %SHORTROUTINE
         ->INBUF %IF J>=CABUF
         LPUT(1,2,J,ADDR(K)+2)    ; ->99
INBUF:   CODE((J-CABUF)>>1)<-K
99:      %END
         %ROUTINE     PRHEX(%INTEGER VALUE,PLACES)
         %OWNBYTEINTEGERARRAY HEX(0:15)='0','1','2','3','4',
               '5','6','7','8','9','A','B','C','D','E','F';
         %INTEGER I
         %CYCLE I=PLACES<<2-4,-4,0
         PRINT SYMBOL(HEX(VALUE>>I&15))
         %REPEAT
         %END
         %ROUTINE SIZES
         %SHORTROUTINE
         %ROUTINESPEC SUM(%INTEGER I)
         %INTEGER I,J,FREE,TOTAL
         I=COM(2)
         FREE=INTEGER(I+4);            !TOP OF STORE
         FREE=FREE-ADDR(TOTAL)-10000
         ! TOTAL IS CURRENT TOP OF STACK - 10K FOR COMPARE
         %CYCLE J=0,1,5; SUM(J)
         ->1 %IF TOTAL>FREE
         %REPEAT
         %RETURN
1:       ->2 %UNLESS J=0
         %PRINTTEXT'NOT ENOUGH CORE ALLOCATED FOR IMP'
         %MONITORSTOP
2:       SUM(J-1)
         %RETURN
         %ROUTINE     SUM(%INTEGER I)
         NNAMES=128*2**I-1
         CCSIZE=200+40*I
         NROUTS=NNAMES//2
         ASL   =24*NNAMES
         ASL=32760 %IF ASL>32760;      ! MAX FOR 16BIT LINKS
         ARSIZE=300+50*I
         DSIZE= 6*NNAMES
         TOTAL=CCSIZE+ASL+2*(NROUTS+ARSIZE+DSIZE)
         %END
         %END
!
         %ROUTINE CSS (%INTEGER P)
       %ROUTINESPEC REDEFINE EP(%INTEGER TYPEP,%INTEGERARRAYNAME PARAMS)
         %ROUTINESPEC CIOCP(%INTEGER N)
         %ROUTINESPEC DEFINE EP(%INTEGER MODE, NAME, ADDR)
         %ROUTINESPEC LOAD DATA
         %ROUTINESPEC P LOCAL JUMP(%INTEGER MASK,LAB)
         %ROUTINESPEC FILL LOCAL JUMPS
         %ROUTINESPEC CLEAR LIST (%SHORTINTEGERNAME OPHEAD)
         %ROUTINESPEC STORE STRING(%INTEGER Z,FROM,TO,BML,DML)
         %ROUTINESPEC CEND(%INTEGER KKK)
         %ROUTINESPEC CBPAIR(%INTEGERNAME LB,UB)
         %ROUTINESPEC UNDCRF (%SHORTINTEGERNAME OPHEAD)
          %ROUTINESPEC CCOND(%INTEGER IU,REG,ADDR)
         %ROUTINESPEC FILL JUMPS(%INTEGER LEVEL)
               %ROUTINESPEC SET LINE
         %ROUTINESPEC CUI(%BYTEINTEGER CODE)
         %ROUTINESPEC SET80(%INTEGER WHERE,N)
         %ROUTINESPEC CVDECLN
         %ROUTINESPEC CSEXP(%INTEGER REG,%BYTEINTEGER MODE)
         %ROUTINESPEC CSTREXP(%INTEGER REG)
               %ROUTINESPEC CHECK RF
         %ROUTINESPEC ASSIGN (%INTEGER P1,P2)
         %INTEGERFNSPEC COPY RECORD TAG
         %INTEGERFNSPEC COUNT APS
         %INTEGERFNSPEC DISPLACEMENT(%INTEGER LINK)
         %ROUTINESPEC LOADAD(%INTEGER REG,BASE,X,DISP)
                %ROUTINESPEC SKIP APP
         %ROUTINESPEC CQUERY(%INTEGER REG)
         %ROUTINESPEC CRFORMAT
         %ROUTINESPEC CADCLN(%BYTEINTEGER MODE)
         %ROUTINESPEC CQN(%INTEGER P)
         %ROUTINESPEC CLT
               %ROUTINESPEC MOVE R(%INTEGER R,N)
         %INTEGERFNSPEC GET ARR WSP
         %INTEGERFNSPEC GET DBLE WRD
         %ROUTINESPEC CRCALL (%INTEGER CLINK)
         %ROUTINESPEC CNAME(%INTEGER Z,REG)
         %ROUTINESPEC CRNAME(%INTEGER Z,MODE,CLINK,BS,DP)
         %ROUTINESPEC CANAME(%INTEGER Z,BS,DP,LINK,BSRF,DPRF)
         %ROUTINESPEC CENAME(%INTEGER Z,MODE,BS,DP)
         %ROUTINESPEC INSERTAFTER(%SHORTINTEGERNAME STAD,%INTEGER S1,S2)
         %ROUTINESPEC FROM LIST(%INTEGER CELL,%INTEGERNAME S1,S2)
         %ROUTINESPEC POP(%SHORTINTEGERNAME CELL,%INTEGERNAME S1,S2)
         %ROUTINESPEC PUSH(%SHORTINTEGERNAME CELL,%INTEGER S1,S2)
         %INTEGERFNSPEC FIND(%INTEGER LAB,LIST)
         %ROUTINESPEC MLINK(%INTEGERNAME CELL)
         %ROUTINESPEC REPLACE2(%INTEGER CELL,S2)
         %ROUTINESPEC REPLACE1(%INTEGER CELL,S1)
         %ROUTINESPEC REPLACE BOTH(%INTEGER CELL,S1,S2)
         %ROUTINESPEC FROM2(%INTEGER CELL,%INTEGERNAME S2)
         %ROUTINESPEC FROM1(%INTEGER CELL,%INTEGERNAME S1)
         %ROUTINESPEC CRES(%INTEGER MODE,LAB)
               %INTEGERFNSPEC NEWCELL
               %ROUTINESPEC COPY TAG (%INTEGER KK)
         %ROUTINESPEC CSNAME(%INTEGER Z,REG)
               %ROUTINESPEC REPLACE TAG (%INTEGER KK)
               %INTEGERFNSPEC PARK(%INTEGER REG)
         %INTEGERFN %SPEC PARKF (%INTEGER REG,PREC)
         %INTEGERFNSPEC  CLAIMABLE REG
               %INTEGERFNSPEC       FIND PP
         %INTEGERFNSPEC GET STR WSP
         %ROUTINESPEC SETEX
         %ROUTINESPEC GXREF(%INTEGER NAME,HASH)
         %ROUTINESPEC UNPARK(%INTEGER OPCODE,REG,Q)
         %ROUTINESPEC STORE TAG(%INTEGER KK,SLINK)
         %INTEGERFNSPEC PAGENO(%INTEGER N)
               %ROUTINESPEC TESTNST
               %ROUTINESPEC CUCI
               %ROUTINESPEC SKIP EXP
               %ROUTINESPEC UNPACK
         %INTEGERFNSPEC SORT CONST(%INTEGER P,LONG,TYPE)
         %ROUTINESPEC PACK(%INTEGERNAME PTYPE)
         %ROUTINESPEC CRSPEC (%BYTEINTEGER M)
         %ROUTINESPEC DUMP(%INTEGER CODE,REG,DIS,X,LEVEL)
         %ROUTINESPEC RHEAD(%INTEGER KK)
         %ROUTINESPEC TEST ASS(%INTEGER REG)
               %ROUTINESPEC PJ(%INTEGER MASK,STAD)
         %ROUTINESPEC COMPILE FORMAL PARAMETER
         %ROUTINESPEC PPJ(%BYTEINTEGER N)
               %ROUTINESPEC PLAB(%INTEGER M)
         %ROUTINESPEC CHECK CAPACITY(%INTEGER REG,DIS,X,LEVEL)
               %INTEGERFNSPEC TSEXP(%INTEGERNAME CODE)
         %SWITCH SW(1:45)
         %INTEGER INC,INCP,BXLE,ACC
         %SHORTINTEGER OPHEAD
         %INTEGER JJ,JJJ,KK,KKK,Q,QQ,EXTRN
         %INTEGER BASE,DISP,VALUE,INDEX
         %INTEGER LOCAL BASE, LOCAL ADDR
         %SHORTINTEGER LOCAL JUMP,LOCAL LABEL
         %BYTEINTEGER ROUT,NAM,ARR,PREC,TYPE,PRECP
         %INTEGER PTYPE,I,J,K,OLDI,INREG
         %INTEGER PTYPEP,SAVE13,CHNGE13
         LOCAL JUMP=0;LOCAL LABEL=0
         LOCAL BASE=0
         OLDI=0; ->SW(A(P))
SW(1):   MARKER2=P+1+A(P+1); SET LINE
         P=P+2; ->101 %IF A(MARKER2)=2
         MASK=15; CUI(0); ->1
101:     Q=P
         FAULT(54) %IF A(P)=9;         ! START
         SAVE13=R13; CHNGE13=0
         ->103 %IF A(P)=3;   ! UI =JUMP
         PLABEL=PLABEL-2; JJJ=PLABEL+1
         KKK=PLABEL; P=MARKER2+2
         CCOND(A(P-1)-1,JJJ,KKK)
         PLOCAL JUMP(MASK,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         PUSH(LOCAL LABEL,CA,JJJ)
         P=Q; CUI(1)
104:     PUSH(LOCAL LABEL,CA,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
102:     REGISTER(LOCAL BASE)=0 %UNLESS LOCAL BASE=10 %OR LOCALBASE=0
         FILL LOCAL JUMPS; ->1
103:     PLABEL=PLABEL-1; JJJ=PLABEL
         NMDECS(LEVEL)=1
         KKK=A(P+2)+(A(P+1)-1)<<14
         P=MARKER2+2; CCOND(2-A(P-1),JJJ,KKK)
         PLOCAL JUMP(MASK,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         PUSH(LOCAL LABEL,CA,JJJ); ->102
!
SW(2):   SET LINE;P=P+1; BXLE=0; CNAME(3,4)
         INC=N; N=N+12
               FAULT(25) %UNLESS TYPE=1 %AND PREC=0
         Q=P; SKIP EXP; REGISTER(4)=1
         JJ=P; BXLE=1 %IF 3900>CA-CODEBASE(LEVEL)%AND 1<=TSEXP(JJJ)<=2
         P=JJ; CSEXP(2,1);             ! INTEGER TO REG2
         JJJ=P; KKK=TSEXP(QQ); P=JJJ
         DUMP(1,2,INC,0,RBASE) %IF KKK=0
         CSEXP(3,1)
         %IF KKK=0 %THEN PRX(X'90',3,4,RBASE,INC+4) %ELSE %C
PRX(X'90',2,4,RBASE,INC)
         P=Q; CSEXP(1,1)
         ->202 %IF CHECKSP=0
         DUMP(0,2,INC,0,RBASE); PPJ(17)
202:     PLAB(-1); REGISTER(4)=0
         DUMP(1,1,0,0,4)
         PUSH(CYCLE(LEVEL),K,INC+4096*BXLE)
         ->1
!
 SW(3):        !REPEAT
         SET LINE
               POP(CYCLE(LEVEL),J,K)
         ->302 %UNLESS J=-1
         FAULT(1); ->1
302:     BXLE=K>>12; K=K&4095
         PRX(X'98',2,4,RBASE,K);       ! LM 2,4,?
         DUMP(2,1,0,0,4); ->301 %IF BXLE=1
         PLANT(X'1A12');               ! AR 1,2
         PCONST(X'59304000');          !  C 3,0(4)
         K=J; PJ(7,K); ->1
301:     I=FIND(J,LABEL(LEVEL))
         PRX(X'87',1,2,10,I-CODEBASE(LEVEL)); ->1;! BXLE 1,2,ADDR
SW(4):                                 ! (LABEL)':'
         K=A(P+2)+(A(P+1)-1)<<14
        ->402 %IF FIND(K,LABEL(LEVEL))=-1
         FAULT(2); ->1
402:     PLAB(K); ->1
SW(5):   Q=P+1; MARKER2=P+3+A (P+2);
         SET LINE; P=MARKER2
         SAVE13=R13; CHNGE13=0
         ->510 %IF A(P)=3;   ! UI=JUMP
         ->520 %IF A(P)=9;   ! UI =START
         PLABEL=PLABEL-2; JJJ=PLABEL+1; KKK=PLABEL
         P=Q+2; CCOND(A(Q)-1,JJJ,KKK)
         P LOCAL JUMP(MASK,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         PUSH(LOCAL LABEL,CA,JJJ)
         P=MARKER2; CUI(1)
         ->104 %UNLESS A(P)=1;         ! %ELSE FOLLOWS
         P=P+1; ->107 %IF A(P)=9;      ! UI=START
         PLABEL=PLABEL-1; JJJ=PLABEL
         P LOCAL JUMP(15,JJJ)
         PUSH(LOCAL LABEL,CA,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         MASK=15; CUI(2); KKK=JJJ; ->104
107:     PJ(15,SFLABEL-1)
         CUI(2); ->104
510:     PLABEL=PLABEL-1; JJJ=PLABEL
         NMDECS(LEVEL)=1
         KKK=A(P+2)+(A(P+1)-1)<<14
         P=Q+2; CCOND(2-A(Q),JJJ,KKK)
         PLOCAL JUMP(MASK,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         PUSH(LOCAL LABEL,CA,JJJ)
         P=MARKER2+3; ->102 %UNLESS A(P)=1
         P=P+1; MASK=15; CUI(0); ->102
520:     PLABEL=PLABEL-1; JJJ=PLABEL
        KKK=SFLABEL-1
         P=Q+2; CCOND(A(Q)-1,JJJ,KKK)
         P LOCAL JUMP(MASK,KKK)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         PUSH(LOCAL LABEL,CA,JJJ)
         P=MARKER2; CUI(1); P=P+1
         FAULT(53) %IF A(P)=1; ->102
SW(6):1:                               ! %COMMENT
         %RETURN
SW(7):                                 ! SIMPLE DECLN
         FAULT(57) %UNLESS LEVEL>=2
         FAULT(40) %IF NMDECS(LEVEL)#0
         P=P+1;CLT;ROUT=0
         FAULT(70) %IF TYPE=5 %AND ACC=0
         ->SCALAR %IF A(P)=1
         ->VECTOR %IF A(P)=3
         ARR=1; NAM=(2-A(P+1))<<1;     ! NAME ARRAY BIT
         PACK(PTYPE); P=P+2; SET LINE
         ACC=4 %IF NAM#0;CADCLN(0);->1
VECTOR:  ARR=2; NAM=0; PACK(PTYPE)
         P=P+1; SET LINE; CVDECLN; ->1
SCALAR:  J=0;ROUT=0;CQN(P+1);P=P+2
         INC=N
         QQ=ACC;ACC=4 %IF TYPE=5;JJ=0
         ->701 %UNLESS ACC=8 %AND N&7#0
         PUSH(WSP(LEVEL),0,N);N=N+4    ;!DOUBLE WORD BOUNDARY
701:     SET LINE %IF TYPE=5
         PACK(PTYPE)
         %CYCLE KK=1,1,A(P)
         K=A(P+KK);TESTNST
         STORE TAG(K,N)
         ->705 %UNLESS TYPE=5
         JJ=JJ+QQ
         PSS(X'D2',2,WSPR,0,GLA,128) %IF UNASS=1
         PRX(X'50',WSPR,RBASE,0,N)     ;!STORE POINTER
         PSI(X'92',QQ-1,RBASE,N)       ;!STORE MAX LENGTH
         %IF KK=A(P) %THEN QQ=QQ+(JJ+7)&(-8)-JJ
         PRX(X'41',WSPR,WSPR,0,QQ)     ;!ADVANCE WORK SPACE
705:     N=N+ACC;%REPEAT
         N=N+3; N=N&(-4)
         SET80(INC,N-INC) %IF UNASS=1 %AND TYPE#5
         ->1
SW(8):                                 ! %END
         CEND(FLAG(LEVEL))
              ->1
SW(9):   P=P+1; MARKER1=A(P)+P;    !(SEX)(RT)(SPEC')(NAME)(FPP)
900:     Q=P; KKK=A(MARKER1+1);        !KKK ON NAME
         EXTRN=A(P+1)
         ->902 %IF A(MARKER1)=2
         P=P+1; CRSPEC(0); ->1 %IF EXTRN=3
         N0=N0-1; KK='S'*(2-EXTRN)
         GXREF(KKK,KK); JJ=TAGS(KKK)
         FROM1(JJ,Q)
         REPLACE1(JJ,Q&(-2)); ->1
902:     FILL JUMPS(LEVEL)
         KK=KKK
         COPY TAG(KKK); ->939 %IF OLDI#LEVEL
         %UNLESS EXTRN=3 %THEN %START
         CPRMODE=2 %IF CPRMODE=0
               FAULT(55) %UNLESS CPRMODE=2 %AND LEVEL=1
         DEFINE EP(EXTRN,KKK,CA)
               PCLOD(0);               !  ST 12,28(GLA)--L 12,=A(PERM)
         %FINISH
         ->908 %IF A(P+2)=1; ROUT=1
         P=P+3
         CLT;ARR=0;NAM=(A(P)-1)<<1;    ! SET NAME ARRAY BIT FOR MAPS
         PACK(KKK); ->909
908:     KKK=10000
909:     ->940 %IF J=15 %AND PTYPE=KKK
         FNAME=KK; FAULT(7) %UNLESS PTYPE&7=7
939:     P=Q+1; CRSPEC(0); P=Q; ->900
940:     J=0; REPLACETAG(KK); JJ=K;    ! CHANGE TAGTO ROUT SPECIFIED%C
AND DESCRIBED
         PLABEL=PLABEL-1
         PJ(15,PLABEL) %UNLESS COMPILER=1 %OR(CPRMODE=2 %AND LEVEL=1)
         RAL(LEVEL)=NMAX<<16!SBFLAG<<15!N
         RHEAD(KK)
         PPJ(40) %UNLESS EXTRN=3;      ! TO RELOCATE OWNS
         FLAG(LEVEL)=PTYPE
         P=MARKER1+1
         ->942 %IF A(P+1)=2
943:     P=P+2; COMPILE FORMAL PARAMETER
         %CYCLE BXLE=1,1,A(P)
         MLINK(JJ); -> 945 %UNLESS JJ=0
         FAULT(8); ->946
945:     FROM LIST(JJ,J,JJJ)
         ->946 %IF J=PTYPE %AND(PTYPE#5 %OR JJJ=ACC)
         FAULT(9); PRINT NAME(A(P+BXLE))
946:     K=A(P+BXLE); TESTNST
         OPHEAD=0; UNPACK
         ->947 %IF ROUT=1;             ! RT TYPES
         ->9040 %IF PTYPE=5; J=JJJ
         ->948 %IF TYPE=3;             !RECORDS
         R=N; ->950 %IF ARR=1
         ->949 %IF PREC=3 %AND NAM=0;  ! LONG
         N=N+4-ACC; R=N
950:     STORE TAG(K,N)
         N=R+ACC; ->999
947:     PUSH(OPHEAD,N,1000);          !SET DUMMY SIDECHAIN FOR RT TYPES
         J=13
951:     KK=OPHEAD
         R=N; N=KK; ->950
9040:    PRX(X'41',1,0,RBASE,N+4);     ! STRING VALUE SET PTR
         PRX(X'50',1,0,RBASE,N)
         PSI(X'92',JJJ-1,RBASE,N)
         STORE TAG(K,N)
         N=N+(ACC+7)&(-4); ->999
948:     PUSH(OPHEAD,0,N); J=0; ->951; ! DUMMY SIDECHAIN FOR RECORD
949:     R=N; ->950 %IF N&7=0
         PUSH(WSP(LEVEL),0,N)
         N=N+4; R=N; ->950;            !ALLIGN ON D W BOUNDARY
999:     %REPEAT
         P=P+1+BXLE; ->943 %IF A(P)=1
942:     MLINK(JJ); FAULT(10) %UNLESS JJ=0; ->1202
!
 SW(10):       ! COMMENT
               ->1
!
SW(11):                                !REALS(LN)
         ALL LONG=A(P+1)&1;->1
SW(12):                                !%BEGIN
         FILL JUMPS(LEVEL)
         RAL(LEVEL)=SBFLAG<<15!N
         PTYPE=0; RHEAD(-1)
         FLAG(LEVEL)=0
         ->1 %IF LEVEL=1=RLEVEL
         ->1202 %UNLESS LEVEL=2
         CPRMODE=1 %IF CPRMODE=0
         DEFINE EP(0,0,0)
         FAULT(55) %UNLESS CPRMODE=1
1202:    PLANT(X'05A0'); CODEBASE(LEVEL)=CA; ->1
SW(13):                                ! %ENDOFPROGRAM
         FAULT(15) %UNLESS LEVEL=2
         FAULT(56) %UNLESS CPRMODE=1
         PERM=0; CEND(1)
         LOAD DATA; ->1
SW(14):  %BEGIN;                       !SWITCH LABEL
         %SHORTROUTINE
         R13=0;MONE=1
         COPYTAG(A(P+1))
         ->1401 %IF OLDI=LEVEL %AND TYPE=6
         FAULT(4); ->1
1401:    FROM LIST(K,ACC,KKK)
         MLINK(K); FROM LIST(K,QQ,KK); ! UB & BIT LIST PART 1
         ->1411 %UNLESS A(P+3)&7=1
         %IF A(P+3)=9 %THEN JJ=A(P+4) %ELSE %START
         FROMAR4(P+4,JJ); P=P+1; %FINISH
         JJ=-JJ %IF A(P+2)=2
         ->1402 %IF KKK<=JJ<=KK
1411:    FAULT(5); ->1
1402:    Q=JJ-KKK
1404:    ->1403 %IF 31>=Q
         MLINK(K); Q=Q-32
         FROM LIST(K,QQ,JJJ); ->1404
1403:    JJJ=1<<Q; FAULT(6) %UNLESS JJJ&QQ=0
         REPLACE1(K,QQ!JJJ);           ! UPDATE BIT LIST
         Q=CA-CODEBASE(LEVEL)
         ->1407 %IF PREC#0
         QQ=ACC+8+(JJ-KKK)<<2;         ! WHERE TO PLUG
         PLUG(QQ,Q>>16) %UNLESS Q>>16=0
1406:    PLUG(QQ+2,Q&X'FFFF'); ->1
1407:    QQ=ACC+6+(JJ-KKK)<<1
         FAULT(99) %IF Q>X'7FFF';->1406
!
1:       %END;->1
SW(15):  %BEGIN;                       !SWITCH (SWITCH LIST)
         %SHORTROUTINE
         %INTEGER BP,QQQ
         Q=P;CNOP(0,4);PJ(15,PLABEL-1)
         FAULT(56) %UNLESS LEVEL>=2
1528:    P=Q+A(Q+1)+2
         CBPAIR(KKK,KK);               ! LB TO KKK, UB TO KK
         ->1501 %UNLESS !KKK!<X'7FFF'>!KK!
         ->1535 %IF KKK<=KK; FAULT(27); KK=KKK
1535:    %CYCLE QQ=1,1,A(Q+1)
         K=A(Q+QQ+1);TEST NST
         PREC=0
         PREC=2 %IF SBFLAG=1 %OR COMPILER=1
         TYPE=6; ROUT=0; NAM=0; ARR=1; PACK(PTYPE)
         OPHEAD=NEWCELL; JJ=OPHEAD
         J=0;STORE TAG(K,OPHEAD);R=KKK
         INSERT AFTER (OPHEAD,0,KK)
1503:    ->1504 %IF KK-R<32
         INSERT AFTER(OPHEAD,0,0)
         R=R+32; ->1503;               ! SET UP BIT LIST
1504:    REPLACE BOTH(JJ,CA,KKK)
         PCONST(KKK&X'FFFFFF'!PREC<<24)
         PCONST(KK)
         JJJ=KK-KKK
         JJJ=(JJJ+1)//2 %IF PREC=2
         %CYCLE I=0,1,JJJ
         PCONST(0);%REPEAT
         %REPEAT
         Q=P; ->1528 %UNLESS A(Q)=2
         PLAB(-1); ->1
1501:    FAULT(18); KK=0; KKK=0; ->1535
1:       %END;->1
SW(16):  QU=\A(P+1)&1; P=P+2; ->1
!
SW(17):                                ! '%REGISTER' (NAME)
         KK=CLAIMABLE REG
         ->1999 %IF KK=0
         REGISTER(KK)=-LEVEL
         UVARREG(KK)=LEVEL
         PTYPE=8; J=0
         K=A(P+1); TESTNST
         STORE TAG(K,KK); ->1
SW(18):                                ! '%OWN' (TYPE)(OWNDEC)
         %BEGIN
         %SHORTROUTINE
         %INTEGER WSP1,LENGTH,BP,PP,SIGN
         %INTEGERNAME VAR
         FAULT(40) %UNLESS NMDECS(LEVEL)=0
         P=P+1; CLT
         FAULT(70) %IF TYPE=5 %AND ACC=0
         NAM=0; ROUT=0; ARR=A(P)-1; PACK(PTYPE)
         PP=P+1; P=P+2; ->NONSCALAR %UNLESS ARR=0
         ->1801 %UNLESS A(P)=2;        ! NO CONST
         A(P+1)=4; A(P+2)=9; A(P+3)=0; ! 0== NULL STRING ALSO
1801:    SIGN=A(P+1); ->1820 %IF TYPE=5;! STRING
         JJ= SORT CONST(P+2,PREC&1,TYPE)
         ->1810 %IF TYPE=2
         VAR==ST(N0-1)
         FAULT(44)%IF(PREC=1 %AND VAR>255)%OR(PREC=2 %AND !VAR!>>16#0)
         FAULT(44) %IF A(P+2)&7=2;     ! REAL CONST FOR INTEGER VARIABLE
         %IF SIGN=2 %THEN VAR=-VAR
         %IF SIGN=3 %THEN VAR=\VAR
1803:    K=A(PP); TESTNST
         JJ=JJ+4-BYTES(PREC) %UNLESS PREC=3
         PUSH(TAGS(K),PTYPE<<16!LEVEL<<8!GLA<<4,JJ)
         PUSH(NAME(LEVEL),0,K); ->99
1810:    FAULT(44) %IF SIGN=3;         ! \ WITH REAL
         ->1803 %UNLESS SIGN=2
         ST(JJ>>2)=ST(JJ>>2)!X'80000000';! OR IN SIGN BIT
         ->1803
1820:                                  ! STRINGS
         ->1822 %UNLESS A(P+2)=9 %AND A(P+3)<127
         A(P+2)=5; A(P+4)=A(P+3); A(P+3)=1
1822:    FAULT(44) %UNLESS SIGN=4 %AND A(P+2)=5 %AND A(P+3)<ACC
         QQ=CONSTPTR<<2
         %CYCLE JJ=0,4,(ACC-1)&(-4)
         WSP1=A(P+JJ+3)<<8!A(P+JJ+4)&255;! COLLECT THE SYMBOLS FROM
         WSP1=WSP1<<8!A(P+JJ+5)&255;   ! A.R AND ASSEMBLE INTO FOURS
         WSP1=WSP1<<8!A(P+JJ+6)&255
         PSYM(WSP1);                   ! THEN ADD TO SYMBOL TABLES
         %REPEAT
               PRX(X'58',2,0,GLA,8);   ! BASE OF ST TO REG2
               LOADAD(1,2,GLA,QQ);     ! ABSOLUTE ADDR OF STING
               PRX(X'50',1,0,RBASE,N); ! STUFF IT OFF
               PSI(X'92',ACC-1,RBASE,N);                               !
         K=A(PP); TESTNST
         J=0;STORE TAG(K,N)
         N=N+4; ->99
NONSCALAR:CBPAIR(KK,KKK)
         %IF TYPE=5 %THEN BP=ACC %ELSE BP=BYTES(PREC)
         LENGTH=KKK-KK+1
         %IF A(P+1)=0 %THEN ->3;       ! NO CONSTLIST
1:       FAULT(45) %UNLESS KKK>=KK %AND LENGTH=A(P+1)
         QQ=CONSTPTR<<2
         JJ=A(P+2)<<2
         %COMMENT OUTPUT AN ARRAYHEAD RELATIVE TO QQ
         ST(N0)=JJ-KK*BP
         ST(N0+1)=JJ
         ST(N0+2)=QQ
         ST(N0+3)=OWNLINK
         %COMMENT NOW OUTPUT DOPE VECTOR
         PSYM(1<<16!BP)
         PSYM(KK)
         PSYM(KKK)
         %COMMENT NOW PLANT CODE
         K=A(PP); J=1; TEST NST
         OWNLINK=N0<<2
         RBASE=GLA; STORETAG(K,OWNLINK)
         RBASE=10-RLEVEL; N0=N0+4; ->99
3:       A(P+2)=CONSTPTR
         A(P+1)=LENGTH; ->1 %IF LENGTH<1
         %CYCLE JJ=1,1,(LENGTH*BP+3)//4
         PSYM(0); %REPEAT; ->1
99:      %END; ->1
SW(19):                                ! %CLAIM/RELEASE ETC
         COPY TAG(A(P+3))
         ->1910 %IF A(P+2)=1;          ! '%ARRAY'
         ->1999 %UNLESS ARR=0 %AND TYPE=3
         FROM2(K,K); ->1920
1910:    ->1999 %UNLESS ARR=1 %AND TYPE<=3 %AND J<=2
1920:    ->1930 %IF A(P+1)=2;          ! %RELEASE
         KK=CLAIMABLE REG; ->1999 %IF KK=0
         REGISTER(KK)=A(P+3)+1
         PRX(X'58',KK,0,I,K);          ! LOAD THE REGISTER
         JJ=TAGS(A(P+3))
         FROM1(JJ,JJJ)
         JJJ=JJJ!KK<<12
1925:    REPLACE1(JJ,JJJ); ->1
1930:    ->1999 %UNLESS INREG#0 %AND REGISTER(INREG)=A(P+3)+1
         REGISTER(INREG)=0; JJ=TAGS(A(P+3))
         FROM1(JJ,JJJ)
         JJJ=JJJ&X'FFFF0FFF'; ->1925
1999:    FAULT(58); ->1
SW(26):  COMPILER=1; UNASS=0; ->1
SW(27):                                ! '%SPEC' FPP
         P=P+1; ->2701 %IF A(P+1)=1
         CRSPEC(2); ->1
2701:    COPY TAG(A(P))
         ->3901 %UNLESS PTYPE=4 %AND A(P+4)=2=A(P+3)
         P=P+2; K=DISPLACEMENT(TAGS(A(P-2)))
         ->1 %IF K=-1; OPHEAD=K;
         P=P+2; CRSPEC(3); ->1
SW(20):  MCSWITCH=1; PERM=1; ->1;       ! %MCODE
SW(21):  SBFLAG=1; ->1
SW(22):  P=2; CUCI; ->1;                ! *UCI(S)
SW(23):                                ! %FAULT FAULTLIST
         FAULT(26) %UNLESS LEVEL=2 %AND CPRMODE#2
         P=P+1; Q=P+1
2302:    %IF A(Q)=2 %THEN ->2303
         Q=Q+2; ->2302
2303:    K=A(Q+2)+(A(Q+1)-1)<<14
         KKK=A(P);PCONST(X'41100000'!KKK)
         FAULT(36) %IF KKK>32 %OR KKK=0 %OR KKK=29 %OR 12<=KKK<=13
         PPJ(20); QQ=CA
         PJ(15,K);                     ! JUMP TO LABEL
         PCONST(X'07000700') %UNLESS CA=QQ+8;! JUMP MUST BE 8 BYTES
         P=P+2; ->2303 %IF A(P-1)=1
         ->1 %IF A(P+2)=2
         P=P+3; Q=P+1; ->2302
SW(24):  FAULT(56) %UNLESS CPRMODE=2 %AND RLEVEL=1
         LOAD DATA;FINALISE
         %STOP
SW(25):  MCSWITCH=0; PERM=0; ->1;       ! %ENDOFMCODE
SW(28):                                !%NAME - SPECIAL NAME
         J=0; PTYPE=10006
         STORE TAG(A(P+1),SNUM)
         SNUM=SNUM+1;->1
SW(29):  LIST=1; ->1;                   ! %LIST
SW(30):   LIST=0; ->1
SW(31):                      ! %CONTROL CONST
         %IF A(P+1)=9 %THEN J=A(P+2) %ELSE FROMAR4(P+2,J)
         K=J&15; LINENOS=K %UNLESS K=15
         K=J>>4&15; DIAGS1=K %UNLESS K=15
         K=J>>8&15
         CHECKS=K %UNLESS K=15
         CHECKSP=K&14 %UNLESS K=15
         K=J>>12&15
         UNASS=K %UNLESS K=15
         K=J>>28
         DCOMP=K %UNLESS K=15
         ->1
SW(32):  POP(SBR(LEVEL),J,K);           ! FINISH (ELSE')
         ->321 %UNLESS J=-1; FAULT(51); ->1
321:     POP(CYCLE(LEVEL),JJ,KK)
         ->322 %IF 0>=JJ
         FAULT(52); ->321
322:     ->402 %UNLESS A(2)=1;         ! ELSE FOLLOWS
          FAULT(47) %UNLESS J=1
         P=P+2; KK=K
         MONE=0;R13=0;SET LINE         ;!CLEAR AFTER FINISH
         %IF A(P)=9 %THEN JJ=SFLABEL-1 %ELSE JJ=PLABEL-1
         PJ(15,JJ); PLAB(KK); CUI(2); PLAB(-1); ->1
SW(33):                                !RECORD FORMAT
         FAULT(56) %UNLESS LEVEL>=2
         SET LINE; CRFORMAT; ->1
SW(34):                                !RECORDS
         %BEGIN
         %SHORTROUTINE
         %ROUTINESPEC TEST AND SET
         SET LINE; P=P+1; MARKER1=P+A(P)
         FAULT(57) %UNLESS LEVEL>=2
         FAULT(40) %IF NMDECS(LEVEL)#0
         CHECK RF;->1 %IF K=-1
         TYPE=3;PREC=0;ROUT=0
         ->SCALAR %IF A(P+1)=1
         FAULT(41) %UNLESS A(P+2)=2;   ! RECORD NAME ARRAYS FAULTED
         NAM=0; ARR=1; PACK(PTYPE)
         P=P+3
3401:    QQ=P+1
         PSS(X'D2',4,WSPR,0,4,0); ! MVC FOR LENGTH
         CADCLN(2)
         %CYCLE Q=1,1,A(QQ)
         K=A(Q+QQ)
         TEST AND SET
         PPJ(13)
         PRX(X'90',0,3,RBASE,N)
         N=N+16
         %REPEAT
         ->1 %IF A(P)=2
         P=P+1;CHECK RF;->3401
SCALAR:  CQN(P+2);P=P+3;J=0
         PACK(PTYPE)
         %CYCLE Q=1,1,A(P)
         K=A(P+Q)
         TEST AND SET
         %IF NAM=1 %THEN PSS(X'D2',4,RBASE,N,GLA,128) %ELSE %C
               PACLOD(18,2,RBASE<<12!N)
%COMMENT = ST WSP,? - AH WSP,LENGTH - LA WSP,7(WSP) - N WSP,=F'-8'
         N=N+4; %REPEAT; ->1
         %ROUTINE TEST AND SET
         TEST NST
         JJJ=NEWCELL
         STORE TAG(K,JJJ)
         REPLACE BOTH(JJJ,TAGS(A(MARKER1)),N)
         %END
1:       %END;->1
SW(35):                                ! (RT)'%NAME'(NAMELIST)
         P=P+1; MARKER1=P+A(P)
         ->3801 %IF A(P+1)=1
         ROUT=1; P=P+2;CLT
         ARR=2-A(P+1);NAM=(A(P+2)-1)<<1
         PACK(PTYPE); ->3802
3801:    PTYPE=11000
3802:    J=0;%CYCLE KK=1,1,A(MARKER1)
         K=A(MARKER1+KK)
         TESTNST; OPHEAD=0
         PUSH(OPHEAD,N,1000);          ! SIDE CHAIN AS RT PARAM
         STORE TAG(K,OPHEAD);          !LINK IN SIDE CHAIN
         N=N+40; %REPEAT; ->1
SW(36):                                ! RECORD SPEC
         P=P+1; MARKER1=P+A(P)
         CHECK RF; ->1 %IF K=-1
         P=P+1; COPYTAG(A(P))
         ->3910 %IF A(P+1)=1
         ->3902 %IF TYPE=3 %AND NAM=1
3901:    FAULT(63); ->1
3902:    FROM1(K,Q)
         FAULT(63) %UNLESS Q=0
         REPLACE1(K,TAGS(A(MARKER1))); ->1
3910:
         P=P+2; K=DISPLACEMENT(TAGS(A(P-2)))
         ->3901 %IF K=-1; ->3902
SW(37):  ->1;                          ! (S)
!
         %ROUTINE CEND (%INTEGER KKK)
         %SHORT %ROUTINE
         %INTEGER DPTR,LNUM,W1,W2
         %INTEGERARRAY DD(0:300)
         SET LINE; R13=0; MONE=1
1:       FROM LIST (SBR(LEVEL),J,K)
         ->2 %IF J=-1; FAULT (53);     ! FINISH MISSING
         A(2)=32; A(3)=2; CSS(2);      ! SO COMPILE IT IN
         ->1
2:       FILL JUMPS(LEVEL)
         NMAX=N %IF N>NMAX;            ! WORK SPACE POINTER
         POP (JUMP(LEVEL),J,K)
         ->3 %IF J=-1
         ->2 %IF K>=SFLABEL; FAULT(11)
         %IF K<16384 %THEN WRITE(K,4) %ELSE PRINTNAME(K-16384); ->2;
3:       CLEAR LIST(LABEL(LEVEL))
         CLEAR LIST (WSP (LEVEL))
         CLEAR LIST(LWSP(LEVEL))
         CLEAR LIST(MDARR(LEVEL))
         CLEAR LIST(STR WSP(LEVEL))
         %COMMENT CLEAR DECLARATIONS -PLANT DIAGNOSTICS IF REQUIRED
         ->10 %IF DIAGS1=0
         LNUM=LETT(M(LEVEL))
         DD(0)=X'C2C2C2C2'
         DD(1)=L(LEVEL)<<16!RBASE<<8!LNUM
         DPTR=3; ->9 %UNLESS LNUM=0
         DD(2)=L(LEVEL-1); ->10
9:       W1=M(LEVEL)
         %CYCLE W2=1,1,LNUM
         BYTE INTEGER(ADDR(DD(0))+7+W2)=LETT(W1+W2);! MOVE IN RT NAME
         %REPEAT
         DPTR=DPTR+(LNUM-1)>>2
10:      POP(NAME(LEVEL),J,JJ)
         ->20 %IF J=-1
         COPY TAG(JJ);POP(TAGS(JJ),KK,KK)
         %IF PTYPE=8 %THEN %START
         REGISTER(K)=0; UVARREG(K)=0; %FINISH;!RELEASE REGISTERS
         %IF INREG#0 %THEN REGISTER(INREG) =0
         ->12 %UNLESS J=15
         FAULT (28); PRINT NAME (JJ)
12:      OPHEAD=K; ->13 %IF TYPE=4
         ->14 %UNLESS ROUT=1 %OR TYPE=3 %OR TYPE=6 %OR ARR=2
         CLEAR LIST(OPHEAD); ->10
13:      UNDCRF (OPHEAD)
         ->10
14:      ->10 %UNLESS TYPE=1 %OR TYPE=2 %OR TYPE=5
         ->10 %UNLESS ARR=0 %AND DIAGS1=1 %AND ROUT=0
         ->10 %IF DPTR>297
         Q=WORD(JJ);LNUM=LETT(Q)
         LNUM=8 %IF LNUM>8;            ! TRUNCATE NAMES TO 8 CHARS
         PTYPE= NAM<<6!PREC<<3!TYPE
         DD(DPTR)=PTYPE<<24!I<<20!K<<8!LNUM
         %CYCLE W1=1,1,LNUM
         BYTE INTEGER(ADDR(DD(DPTR))+W1+3)=LETT(W1+Q)
         %REPEAT
         DPTR=DPTR+1+(LNUM+3)>>2;->10
20:      ->21 %IF DIAGS 1=0
         DD(DPTR)=-1
         LPUT(4,DPTR<<2+4,SSTL,ADDR(DD(0)))
         SSTL=SSTL+DPTR<<2+4
         %COMMENT CHECK CYCLE-REPEATS
21:      ->22 %IF CYCLE(LEVEL)=0
         FROM2(CYCLE(LEVEL),J)
         ->22 %IF J=0
         POP(CYCLE(LEVEL),I,I)
         FAULT (13); ->21
22:      %COMMENT GARBAGE COLECT DICTIONARY
         NEXT=RNEXT(LEVEL)
         %CYCLE W1=0,1,NNAMES
         WORD(W1)=0 %IF WORD(W1)>NEXT
         %REPEAT
         %COMMENT PLANT ANY NECESSARY CODE
         NMAX=(NMAX+7)&(-8)
         FAULT (99) %IF NMAX>4092
         PLUG(SET(RLEVEL),NMAX) %IF KKK>=10000 %OR KKK=1
         ->23 %IF KKK=10000
         ->24 %IF KKK=0
         %IF KKK>10000 %AND COMPILER =0 %THEN %START
         PCONST(X'4100000B')           ;!LA 0,11  --- FAULT 11
         PPJ(21);%FINISH               ;! *->RTF1
         PPJ(6) %IF KKK=1; ->30;       ! 'STOP' AT END OF PROGRAM
23:      P=P+1; A(P)=5; CUI(0); ->30;  ! COMPILE '%RTURN' FOR ROUTINES
24:      JJ=X'FFF'&RAL(LEVEL-1)
         PRX(X'98',10,11,RBASE,JJ);    ! RESTORE R11&12
         PSS(X'D2',4,GLA,20,RBASE,JJ+8) %IF DIAGS1=1
30:      ->99 %IF KKK=2; NEWLINE
         %IF PRINTMAP=1 %AND LIST=1 %AND KKK#0 %THEN %START
         %PRINTTEXT' LOCALS EXTEND TO '
         WRITE(NMAX,2); NEWLINE; %FINISH
         ->31 %IF LIST#0; WRITE(LINE,5)
         SPACES(3*LEVEL-3); %PRINTTEXT 'END'
31:      ->33 %IF LEVEL>2 %OR PERM=1 %OR CPRMODE=2
         ->32 %IF KKK=1
         FAULT(14); A(1)=13; ->99;     ! TOO MANY ENDS
32:      KKK=2
33:      LEVEL=LEVEL-1
         RLEVEL=RLEVEL-1 %IF KKK>=10000
         RBASE=10-RLEVEL; REGISTER (9-RLEVEL)=0
         N=RAL(LEVEL); SBFLAG=N>>15&1
         NMAX=N>>16 %IF KKK>=10000; N=N&4095
         ->2 %IF KKK=2;                ! ROUND AGAIN FOR 'ENDOFPROGRAM'
         ->99 %IF RLEVEL=1 %AND CPRMODE=2
         ->99 %IF KKK=0 %OR COMPILER=1
         FROM2(JUMP(LEVEL),J)    ; PLAB(J)
99:      %END
         %ROUTINE     CRSPEC (%BYTEINTEGER M)
         %SHORTROUTINE
         %INTEGER PP,KK,JJ,JJJ,Q,TYPEP
         ->12 %IF M=3
         PP=P; ->2 %UNLESS M=2
         KK=A(P); P=P+1; COPYTAG(KK)
         ->1 %IF OLDI=LEVEL %AND 10006#PTYPE>=10000
         FAULT(3); ->99
1:       FROM LIST(K,JJ,Q); OPHEAD=K
         ->12 %IF Q=1000; ->10
2:       ->3 %IF A(PP+1)=2
         TYPEP=10000; P=PP+3; ->4
3:       ROUT=1;ARR=0;P=PP+2;CLT
         NAM=(A(P)-1)*2; PACK(TYPEP); P=P+2
4:       KK=A(P); COPYTAG(KK)
         ->11 %IF OLDI#LEVEL
         ->1 %IF PTYPE=TYPEP %OR !PTYPE-TYPEP!=1000
10:      FNAME=KK;FAULT(7) %UNLESS PTYPE=7
         ->99 %IF M=2
11:      JJ=NR; NR=NR+1; RA(JJ)=4*N0; N0=N0+1
         FAULT(109) %IF NR>NROUTS
         OPHEAD=NEWCELL;J=15;PTYPE=TYPEP
         STORE TAG(KK,OPHEAD)
12:      JJJ=OPHEAD; Q=0; ->24 %IF A(P+1)=2;     ! NO FORMAL PARAMS
13:      P=P+2; COMPILE FORMAL PARAMETER
         %CYCLE PP=1,1,A(P)
         KK=0; KK=ACC %IF PTYPE=5
         INSERT AFTER(OPHEAD,PTYPE,KK);! FOR STRINGS PUSH IN LMAX
         Q=Q+1; %REPEAT
         P=P+PP+1; ->13 %IF A(P)=1
24:      REPLACE2(JJJ,Q)
         ->99 %IF M=3
         REPLACE1(JJJ,JJ)
99:      %END
         %ROUTINE     COMPILE FORMAL PARAMETER
         %SHORT %ROUTINE
         %SWITCH FPD(1:5)
         ->FPD(A(P))
FPD(1):  !(RT)
         ACC=16;ROUT=1;NAM=1
         ARR=0
         ->1 %UNLESS A(P+1)=1
         PREC=0;TYPE=0;P=P+3; ->98
1:       P=P+2; CLT;NAM =2*(A(P)-1)+1
         P=P+2; ACC=16; ->98
FPD(2):  !(LENGTH')(TYPE)(ARRAY')(NAME)
         P=P+1; CLT
         CQN(P); ROUT=0
         FAULT(70) %IF TYPE=5 %AND ACC=0
         P=P+1; ->98
FPD(3):  !%NAME
         TYPE=0
31:      NAM=1; ARR=2-A(P+1); ROUT=0
         ACC=4+12*ARR
         PREC=0; P=P+2; ->98
FPD(4):  TYPE=3; ->31
98:      PACK(PTYPE)
         %END
         %ROUTINE ASSIGN (%INTEGER P1,P2)
         %SHORTROUTINE
         %INTEGER Q,ASSOP,KK,REG,PRECP,Z,ZP,TYPEP
         %INTEGER JJJ
         %SWITCH SW(1:4), S(0:15)
         ASSOP=A(P2); ->SW(ASSOP);     !P2 ON ASSOP
SW(2):SW(3):   COPYTAG(A(P1+1)); P=P2+1
         ->REGVAR %IF TYPE=8
         -> MAPS %IF ROUT=1
         ->34 %IF TYPE=2
         ->50 %IF TYPE=5
         ->35 %IF TYPE=3
         ->32 %IF NAM=0 %AND TYPE=1 %AND ARR=0
33:      P=P2+1
         KK=0; KK=4 %UNLESS ARR=0 %AND ROUT=0 %AND 1>=TYPE
36:      %IF KK=4 %AND REGISTER(4)#0 %THEN KK=14
         CSEXP(KK,1); REG=NEST;KK=P
         REGISTER(REG)=1 %IF REGISTER(REG)=0
         P=P1+1; CNAME((ASSOP-1)*(ASSOP-1),REG)
         REGISTER(REG)=0 %IF REGISTER(REG)>0
30:
         P=KK; %IF A(P)=1=QU  %THEN CQUERY (REG)
         P=P+1; ->1
31:      %PRINTTEXT' CRUNCH '; %MONITORSTOP
32:      ->33 %IF ROUT=1 %OR A(P1+2)=1 %OR A(P1+3)=1;! ACTUAL PARAMS
         ->33 %IF UNASS =1
         PRECP=PREC; TYPEP=PTYPE
         KK=K; REG=I; Q=TSEXP(JJJ)
         PTYPE=TYPEP; UNPACK
         ->33 %IF Q=0 %OR A(P)=1=QU
         ->37 %IF 10<=Q<=12 %AND Q-10=PRECP
         ->33 %UNLESS Q=1 %AND PRECP=1
         PSI(X'92',JJJ,REG,KK);        ! MVI TO SET BYTE
         P=P+1;->1;                     ! SKIP QUERY IF ANY
37:      PSS(X'D2',BYTES(PRECP),REG,KK,I,K); ! MVC IF POSSIBL
         P=P+1; ->1
34:      Q=2; Q=3 %IF PREC=3
         %IF A(P1+2)=1 %THEN %START
         P=P1+2; FFLAG=0; SKIP APP; ->55 %IF FFLAG#0
         P=P2+1; %FINISH
         CSEXP(0,Q); KK=P
         FREG(NEST)=1; REG=NEST
         P=P1+1; CNAME(1,NEST)
         FREG(REG)=0
         ->30
35:      P=P1+1; Q=COPY RECORD TAG
         P=P2+1
         TYPE=1 %UNLESS TYPE=2 %OR TYPE=5
         ->50 %IF TYPE=5
         KK=4; ->36 %IF TYPE=1; ->34
50:      CSTREXP(4);KK=P
         REGISTER(4)=1
         P=P1+1;
         CNAME((ASSOP-1)**2,4)
         REGISTER(4)=0
         REG=4; ->30
MAPS:    %IF PTYPE=10006 %THEN %START
         TYPE=TSNAME(K);PREC=TYPE>>3
         TYPE=TYPE&7; %FINISH
         ->33 %IF TYPE=1;              ! NORMAL CHANNELS FOR INT MAPS
         ->50 %IF TYPE=5;              ! STRING MAPS
55:      P=P2+1; PRECP=PREC
         CSEXP(0,2+PREC&1)
         Q=PARKF(NEST,3)
         KK=P; P=P1+1; CNAME(3,1);     ! ADDR TO GR1
         DUMP(16,0,Q,0,RBASE);         ! PICK UP TO FR0
         DUMP(9+2*PREC,0,0,0,1);       ! STUFF IT OFF
         PUSH(LWSP(LEVEL),0,Q); ->30;  ! TO QUERY PRINT
REGVAR:  FAULT(59) %UNLESS A(P1+2)=2=A(P1+3)
         KK=K; CSEXP(KK,1)
         REGISTER(KK)=-1
         %IF A(P)=1=QU %THEN CQUERY(REG)
         P=P+1; ->1
SW(4):                                  !ASSOP=->
         P=P1+1; CNAME(2,1)
         P=P2+1
         CRES(0,0)
         P=P+1;->1
SW(1):   !ASSOP='=='
         P=P1+1; COPYTAG(A(P))
         ->9 %IF I=-1;Q=1
         %IF TYPE=3 %THEN Q=COPY RECORD TAG
         ->201 %IF Q=0
         FAULT(81) %UNLESS A(P2+1)=4 %AND A(P2+2)=1
         ->101 %IF ROUT=1; NEST=4
         ->S((NAM&2+ARR)<<2!(NAM&1)*2!(2-A(P+1)))
9:       FNAME=A(P); FAULT(16)
S(0):S(1):S(3):S(4):S(5):
S(7):S(8):S(10):S(11):S(12):
10:      FAULT(82)
         P=P2+1; SKIPEXP; P=P+1; ->1
S(2): ! NAM=1; S(9):!NAMARR + APP; S(15):! NAMARR +NAM+APP; S(13):
         Z=3; ZP=6
12:      P=P2+3; CNAME(Z,4)
         ->10 %UNLESS A(P)=2; PRECP=PREC
         TYPEP=TYPE
         KK=P+2; P=P1+1; CNAME(ZP,4)
14:
         P=KK;     ->1 %IF PREC=PRECP %AND TYPE=TYPEP
         FAULT(83); ->1
S(6):    ! ARRAYNAME-NO APP
S(14):   !NAMARRAYNAME-NO APP
         Z=12; ZP=11; ->12
201:
         ->S(6) %IF ARR=1 %AND NAM=1 %AND A(P+1)=2
         Z=15; ZP=14; ->12
101:     P=P1+1; CNAME(13,1);          ! ASSIGNMENTS TO RECORDNAMES
         PRECP=PREC; TYPEP=TYPE; JJJ=K;
         ->10 %UNLESS J=0 %AND NAM=1
         REG=FINDPP; ->31 %IF REG=0
         DUMP(0,REG,DISP,INDEX,BASE);  ! ADDRESS OF LHS TO SAFE PLACE
         P=P2+3; CNAME(13,1);          ! RHSIDE
         ->102 %IF BASE=GLA %AND J=0;  ! COMMON OR GARDEN ROUTINE
         PSS(X'D2',16,REG,0,BASE,DISP)
         ->103 %IF J=14;     ! EXTERNAL ROUTINE
110:     REGISTER(REG)=0; KK=P+2
         FROM2(JJJ,Z); FROM2(K,ZP)
         FAULT(83) %UNLESS Z=ZP
         ->14
102:     DUMP(2,2,DISP,INDEX,BASE);      ! PICK UP RT ADDR
         PRX(X'5A',2,0,GLA,28);        ! RELOCATE
         PCONST(X'180C181D');          ! LR 0,12 LR1,13 PERM AND GLA
         PRR(X'18',3,REG);             ! CUNNING PTR TO ENVRMNT
         PRX(X'90',0,9,REG,0); ->110;  ! STUFF OFF + ENVRMNT
103:     PRX(X'50',9,0,REG,12); ->110; ! EXTRNS DUMMY ENVRMNT
1:       %END
         %ROUTINE     CUI(%BYTEINTEGER CODE)
         %SHORTROUTINE
         %INTEGER KK,JJ,QQ
         %SWITCH SW(1:11)
               ->SW(A(P))
SW(1):   P=P+1; MARKER1=P+A(P);      !(NAME)(APP)(RESTOFUI)
               ->3 %IF A(MARKER 1)=1
         P=P+1; CNAME(0,0); P=P+1; ->1
3:       ASSIGN(P,MARKER1+1); ->1
SW(2):   !-><NAME><EXRN>
         NMDECS(LEVEL)=1
               COPY TAG(A(P+1))
         PTYPEP=PTYPE
         KK=K; P=P+2
         ->200 %IF OLDI=LEVEL %AND TYPE=6
         FAULT(4);SKIP EXP; ->1
200:     CSEXP(1,1);PTYPE=PTYPEP; UNPACK
         FROM LIST(KK,QQ,JJ)
         QQ=QQ-CODEBASE(LEVEL)
         ->205 %IF CHECKSP=0
201:     LOADAD( 2,10,0,QQ);PPJ(7); ->1
205:     JJ=8+QQ-JJ*BYTES(PREC);       !@ SW(0)
         ->201 %UNLESS 0<=JJ<=4095
         ->210 %IF PREC=0
         PLANT(X'1A11');KK= X'48';     !AR_1,1
207:     PRX(KK,1,1,10,JJ);            !L(H)_1,JJ(1,10)
         PCONST(X'47F1A000');->1;      !BC_15,0(1,10)
210:     PCONST(X'89100002');KK= X'58';->207;! SLL_1,2
SW(3):                                 ! '->'(LABEL)
         NMDECS(LEVEL)=1
         K=A(P+2)+(A(P+1)-1)<<14
         PJ(MASK,K); P=P+3; ->1
 SW(4):        !PRINT TEXT
         K=(A(P+1)+2)//2; P=P+1; PPJ(30)
         %CYCLE KK=1,1,K; PLANT(A(P)<<8!A(P+1))
         P=P+2; %REPEAT; ->1
 SW(5):        !RETURN
         FAULT(30) %UNLESS FLAG(LEVEL)=10000 %OR PERM=1
               P=P+1
6:       PSS(X'D2',4,GLA,20,RBASE,0) %IF DIAGS1=1
         %COMMENT CHECK FOR REGISTER VARS & UPDATE CORE COPY
         %CYCLE KK=5,1,8
         %IF 0#UVARREG(KK)<LEVEL %THEN PRX(X'50',KK,0,RBASE,KK<<2)
         %REPEAT
         PRX(X'98',4,15,RBASE,16);     ! LM OLD REGISTERS
         R13=0; PRR(7,15,LINK); ->1;   ! BR LINK
SW(6):   ! %RESULT =EXPR
         P=P+1; KK=FLAG(LEVEL)
         FAULT(31) %UNLESS KK>10000
         ->61 %IF KK=10002
         ->62 %IF KK=10032
         ->63 %IF KK=10005
         CSEXP(1,1); ->6
61:      CSEXP(2,2); ->6
62:      CSEXP(2,3); ->6
63:      CSTREXP(1); ->6
SW(7):SW(8):   ! STOP & MONITORSTOP
         PPJ(6*(A(P)-6)); P=P+1; ->1
SW(9):  SFLABEL=SFLABEL-1
        PUSH(SBR(LEVEL),CODE,SFLABEL)
         PUSH(CYCLE(LEVEL),0,0)
         ->1
SW(11):                                ! %QUERIES (ONOFF)
         KK=2-A(P+1); P=P+2
         PSI(X'92',KK,GLA,1); ->1
SW(10):  PPJ(31); P=P+1; ;             ! %MONITOR
 1:            %END
         %ROUTINE     CRFORMAT
         %SHORTROUTINE
         %INTEGER LENGTHP,QQQ,REP,CODE
         K=A(P+1);TEST NST
         J=0;PTYPE=4;OPHEAD=NEWCELL
         JJJ=OPHEAD;STORE TAG(K,JJJ)
         P=3;Q=0;INC=4;INCP=0
! INC COUNTS ALONG RECORD FORMAT DOPEVECTOR..INCP BYTES FROM RECORDHD
         ->101 %IF A(P)=2;             ! NO FPP
1:       P=P+1; COMPILE FORMAL PARAMETER
         LENGTHP=ACC-1; LENGTHP=3 %IF ACC>8
2:       ->3 %IF INCP&LENGTHP=0; INCP=INCP+1; ->2
3:       %CYCLE REP=1,1,A(P); P=P+1
         CODE=255; LENGTHP=ACC
         ->11 %IF ROUT=1
         ->12 %IF TYPE=3;QQQ=INCP
         ->4 %UNLESS TYPE=5
         CODE=250; LENGTHP=ACC-1; QQQ=INC
4:       INSERT AFTER(OPHEAD,PTYPE<<4!A(P)<<20,QQQ)
         PSI(X'92',CODE,RBASE,N+INC)
         PSI(X'92',LENGTHP,RBASE,N+INC+1)
         Q=Q+1
         INC=INC+4; INCP=INCP+ACC
         ->15
11:      QQQ=NEWCELL; REPLACE BOTH(QQQ,INCP,100)
         FAULT(41) %UNLESS PTYPE=11000;! FUNCTIONS TOO DICEY AT PRESENT
         ACC=40; LENGTHP=ACC; ->4;     ! RT NAME MUST CARRY ENVRMNT
12:      QQQ=NEWCELL; REPLACE BOTH(QQQ,0,INCP); ->4
15:      %REPEAT
         P=P+1;                        ! P ON REST OF FP LIST
         ->101 %IF A(P)=2; P=P+1; ->1
101:     P=P+1
102:     ->201 %IF A(P)=2;             ! NO ARRAYS
         P=P+2; CLT
         NAM= 2*(2-A(P))
         ACC=4 %IF NAM#0;P=P+1
         ROUT=0; ARR=1; PACK(PTYPE)
103:
         PSI(X'92',0,RBASE,N+INC);     ! FLAG FOR ARRAYS
         DUMP(1,WSPR,N+INC+8,0,RBASE); ! PTR TO DOPE VECTOR
         QQ=P; CADCLN(1)
         JJ=P; P=QQ+2
         REP=P+A(P-1);                 ! AFTER LAST NAME
105:     INSERT AFTER(OPHEAD,J!PTYPE<<4!A(P)<<20,INC)
         INC=INC+16; Q=Q+1
         P=P+1; ->106 %IF P=REP
         PSS(X'D2',16,RBASE,N+INC,RBASE,N+INC-16); ->105
106:     P=JJ+2
         ->103 %IF A(P-1)=1; ->102;    ! P ON RESTOFARRAYLIST
201:     REPLACE BOTH(JJJ,N,Q)
         PRX(X'41',1,0,0,Q);           ! LA 1,ITEMS
         DUMP(5,1,N,0,RBASE);         !STH
         DUMP(0,1,N,0,RBASE)
         PPJ(25); N=N+INC
         %END
         %ROUTINE     CADCLN(%BYTEINTEGER MODE)
         %SHORTROUTINE
! MODE=0 NORMAL DECN, =1 IN RECORD FORMAY, =2 RECORD ARRAY
! P POINTS TO NAMELIST -1
         %INTEGER Q,QQ,KK,S,JJ,JJJ
         Q=P; PTYPEP=PTYPE
1:       P=A(Q+1)+Q+1
         KK=0;  %IF MODE=1 %THEN ->4
         PRX(X'50',WSPR,0,GLA,36);     ! PTR TO DOPE VECTOR INTO GLA
         PSI(X'92',1,GLA,36) %IF UNASS=1;! FLAG TO FILL WITH X'000'
4:       P=P+2; JJ=P; KK=KK+1
         SKIP EXP; QQ=TSEXP(JJJ); P=JJ
         %IF QQ=0 %THEN CSEXP(4,1) %ELSE CSEXP(1,1)
         REGISTER(4)=1; CSEXP(2,1); REGISTER(4)=0
         PRR(X'18',1,4) %IF QQ=0;      ! BOUND PAIR NOW IN R1 & R2
         ->41 %UNLESS KK=1; S=1
         %UNLESS MODE=2 %THEN %START
         S=0; PRX(X'41',0,0,0,ACC); %FINISH;
         PRX(X'90',S,2,WSPR,4*S); !      STM TO DUMP BOUND PAIR & R0
         PSI(X'92',3-A(P),WSPR,1);     ! MVI TO SET DIMENSION
         MOVER(WSPR,16); ->42
41:      S=(KK&1)<<2
         %IF S=0 %THEN JJJ=8*A(P) %ELSE JJJ=16
         PRX(X'90',1,2,WSPR,S)
         MOVER(WSPR,JJJ)
42:      ->4 %IF A(P)=1;               ! FOR NEXT BOUND PAIR
         ->5 %IF KK<=2
         FAULT(37) %IF KK>6
               PACLOD(27,3,KK);        !  L 1,=A(DV)--MVI 1(1),KK
5:       QQ=Q+1; J=KK; PTYPE=PTYPEP; ->9 %IF MODE >=1
         %CYCLE JJJ=1,1,A(QQ)
         K=A(QQ+JJJ); TESTNST; J=KK
         STORE TAG(K,N);PPJ(13)
         PRX(X'90',0,3,RBASE,N);       ! STM 0,3--SAVE ARRAYHEAD
         N=N+16; %REPEAT
         Q=P+2; ->1 %IF A(Q-1)=1
9:       %END
         %ROUTINE     CVDECLN
         %SHORTROUTINE
         %INTEGER LB,UB,ADV,Q,QQ,RANGE,JJJ,KK,DISP0,DISP1
         Q=P
         P=A(Q+1)+Q+2
         CBPAIR(LB,UB)
         ADV=N0
         ST(N0)=1<<16!ACC
         ST(N0+1)=LB
         ST(N0+2)=UB
         RANGE=UB-LB+1
         ST(N0+3)=RANGE; N0=N0+4
         FAULT(44) %IF LB>UB
         PRX(X'41',2,0,GLA,ADV<<2)
         PRX(X'41',3,0,0,RANGE)
         QQ=Q+1; J=1
         %CYCLE JJJ=1,1,A(QQ)
         N=(N+7)&(-8)
         DISP1=N+16
         DISP0=DISP1-LB*ACC; FAULT(44) %UNLESS 0<DISP0<4095
         KK=NEWCELL; REPLACE BOTH(KK,DISP0,N)
         PRX(X'41',0,0,RBASE,DISP0)
         PRX(X'41',1,0,RBASE,DISP1)
         K=A(QQ+JJJ); TESTNST
         STORE TAG(K,KK)
         PRX(X'90',0,3,RBASE,N)
         SET80(DISP1,ACC*RANGE) %IF UNASS=1
         N=DISP1+ACC*RANGE
         %REPEAT
         P=P+1; %IF A(P-1)=1 %THEN CVDECLN
         N=(N+3)&(-4)
         %END
         %ROUTINE     CSEXP(%INTEGER REG,%BYTEINTEGER MODE)
         %COMMENT MODE=1 FOR %INTEGER, =2REAL, =3LONG,=0INTEGER %IF PNS
         %INTEGER C,D,QP,NOP,X,JJ,OPCODE
         %INTEGER EVALUATE,OPND
         %SHORTINTEGER OPHEAD
         %BYTEINTEGER REAL,LONGREAL,REALOP
         %INTEGER OPERATOR,NOPS,LASTOP
         %INTEGERARRAY BS,PT,DP(1:2)
               %INTEGERARRAY OP,OPPREC(0:5)
         %ROUTINESPEC TEST(%INTEGER N)
         %ROUTINESPEC PLANT(%INTEGER A,B,C)
         %INTEGERFNSPEC FINDR
         %ROUTINESPEC LOAD(%INTEGERNAME N,%INTEGER REG,MODE)
         %ROUTINESPEC PRINT ORDERS
         %OWNINTEGER N0=1024
         QP=0; OPHEAD=0; OPCODE=0
         REAL=0; LONGREAL=0; REALOP=0
         NOPS=0; LASTOP=0
         %BEGIN
         %SHORTROUTINE
         %SWITCH S,SW(1:4)
         AFLAG=0; NOP=N0
         OP(0)=0; OPPREC(0)=0
         ->S(A(P));                    !SWITCH ON PHRASE (+1)
S(2):                                  !NEGATE
         OP(1)=11;
101:     OPPREC(1)=2+OP(1)//6; QP=1; ->1
S(3):    OP(1)=23; ->101;              !INITIAL NOT
S(1):S(4):1:                           ! PLUS OR NULL ALTERNATIVE
         OPND=A(P+1); P=P+2; QP=QP+1
         ->SW(OPND);         ! SWITCH ON OPERAND
SW(1):                                 !NAME
         COPYTAG(A(P))
         ->REGVAR %IF TYPE=8
         ->19 %IF TYPE=3 %AND ARR=0 %AND INREG#0
         ->171 %IF ARR=2 %AND A(P+1)=1
         ->17 %IF 1<=TYPE<=2 %AND ARR=0 %AND ROUT=0 %AND A(P+1)=2=A(P+2)
10:
         ->14 %UNLESS TYPE=1 %OR(ROUT=1%AND TYPE=6%AND TSNAME(K)&7=1)
         C=P; ->11 %IF QP>1
         P=P+1; SKIPAPP; ->11 %UNLESS A(P)=A(P+1)=2
         P=C; C=REG
         %IF REG<=0 %THEN %START
         C=FINDR; REGISTER(C)=0
         %FINISH
         CNAME(2,C); NEST=C; ->80;     ! ONE OPND EXPR
11:      P=C
         C=FINDPP; ->14 %IF C=0
         CNAME(2,C); NEST=C
         ->80 %IF QP=1 %AND A(P)=2;P=P+1;   ! ONE OPND EXPR
12:      ST(N0)=9; ST(N0+1)=C; N0=N0+3
         REGISTER(C)=1
         ->50
14:      %COMMENT OPERAND MUST BE FETCHED AND STORED
         CNAME (2,2);NEST =2
         %IF TYPE=5 %THEN %START; FAULT(42); TYPE=1; %FINISH;
         %IF TYPE=2 %THEN FREG(2)=1 %ELSE REGISTER(2)=1
         NAM=0;ARR=0;ROUT=0
         LONGREAL=1 %IF PREC=3
         ->80 %IF QP=1 %AND A(P)=2
16:      ->15 %IF TYPE=1
         REAL=1; LONGREAL=1 %IF PREC=3
         ->161 %IF A(P)=2;             ! EXPRESSION ENDED
         C=PARKF(NEST,PREC)
         FREG(NEST)=0
13:      ST(N0)=10; P=P+1
         ST(N0+1)=RBASE!(TYPE!PREC<<3!NAM<<6)<<8
         ST(N0+2)=C; N0=N0+3; ->50
161:     ST(N0)=8; ST(N0+1)=NEST+512+PREC<<11
         FREG(NEST)=1
         N0=N0+3; P=P+1; ->50
15:      C=NEST
         C=PARK(NEST)
         REGISTER(NEST)=0 %UNLESS NEST=C
         ->18 %IF C>0;     ! IN GENERAL REGISTER
         C=!C!; PREC=0; ->13;          ! IN CORE EQUIVALENT TO INTEGER
18:      P=P+1; ->12
17:      %COMMENT OPND HAS BASE REGISTER COVER
         ST(N0)=2; ST(N0+1)=I!(TYPE!PREC<<3!NAM<<6)<<8
         ST(N0+2)=K; P=P+4; N0=N0+3
         REAL=1 %IF TYPE=2
         LONGREAL=1 %IF PREC=3
         ->50 %UNLESS UNASS=1 %AND(PREC=0 %OR PREC=3)
         ->50 %IF NAM=1
         PSS(X'D5',BYTES(PREC),I,K,GLA,128);      ! CLC V,=X'80808080'
         PRX(X'47',8,0,CODER,40); ->50;;! CHECK ASSIGNED
171:     ->10 %UNLESS A(P+2)=4 %AND A(P+3)=2 %AND A(P+4)=9
         ->10 %UNLESS A(P+5)<256 %AND A(P+6)=2 %AND A(P+7)=2=A(P+8)
         FROM1(K,C); C=C+BYTES(PREC)*A(P+5)
         ->10 %UNLESS 0<C<4096; K=C; P=P+6; ->17
19:      ->14 %UNLESS A(P+1)=2 %AND A(P+2)=1;    ! NO APP BIUT ENAME
         P=P+3; FROM1(K,FNAME); I=INREG
         K=DISPLACEMENT(FNAME)
         ->191 %IF I=-1; UNPACK
         ->17 %IF ARR=0 %AND ROUT=0 %AND 1<=TYPE<=2 %AND A(P+1)=2%C
         =A(P+2);                      ! NO APP OR SECOND ENAME
191:     P=P-3; ->14
REGVAR:  ->14 %UNLESS A(P+1)=2=A(P+2);! NO APP OR ENAME
         P=P+4; ST(N0)=9; ST(N0+1)=K
         N0=N0+3; ->50
SW(2):                                 !CONSTANT
         C=A(P); ST(N0+1)=P; ST(N0+2)=A(P+1)
         ->24 %IF C&7=2
         %IF C=5 %THEN %START
         FAULT(42); P=P+A(P+1)&X'FE'+1
         C=9; %FINISH
         ->22 %UNLESS C>8;             !GO UNLESS IMMEDIATE
         ST(N0)=0
21:      N0=N0+3; P=P+3;
         ->50
22:      ST(N0)=1; P=P+1; ->21
24:      REAL=1; P=P+2; ->22
SW(3):SW(4):                 ! SUB EXPRESSION
         D=0; D=1 %IF MODE=1 %OR LASTOP=12;! INTEGER EXPONENTS
         CSEXP(0,D)
         ->32 %UNLESS OPND=4
         D=16*TYPE
         D=48 %IF TYPE=2 %AND PREC=0
         PRR(D,NEST,NEST);             !DEAL WITH MOD SIGNS
32:      LONGREAL=1 %IF PREC=3
         ->80 %IF QP=1 %AND A(P)=2;    !ONE OPD EXPRESSION
         ->16 ;                        !TO STORE RESULT
50:      %COMMENT DEAL WITH OPERATOR
         ->60 %IF A(P-1)=2;            !EXPRESSION FINISHED
         OPERATOR=A(P)
         %IF OPERATOR=12 %THEN %START; ! '.'
         FAULT(42); OPERATOR=2; %FINISH;!   CHANGE TO +
         OPERATOR = 6 %IF OPERATOR=13;     !%NULL == *
         REALOP=1 %IF OPERATOR=1 %OR OPERATOR=8
         OPERATOR=12 %IF OPERATOR=1
         NOPS=NOPS+1; LASTOP=OPERATOR
         C=PRECEDENCE(OPERATOR)
51:      ->52 %IF C>OPPREC(QP-1);      !OPERATOR MAY BE STORED
         QP=QP-1
         ST(N0)=OP(QP)
         N0=N0+3; ->51;                !UNLOAD STACK
52:      OP(QP)=10+OPERATOR
         OPPREC(QP)=C; ->1;            !FOR NEXT OPERAND
60:      %COMMENT - END OF EXPRESSION
         %CYCLE JJ=QP-1,-1,0
         ST(N0)=OP(JJ)
         N0=N0+3; %REPEAT;             !EMPTY OPERATOR STACK
         REAL=1 %IF MODE#1 %AND REALOP=1
         ->70 %IF REAL=1
         %COMMENT - CAN EVALUATE AS INTEGER
         PRINT ORDERS
61:      ->71 %IF MODE>=2
72:      D=1; REG=REG-1 %IF 0>=REG
         LOAD(D,REG,REAL) %UNLESS REAL=0 %AND 0>REG %AND DP(1)<0 %C
         %AND REGISTER(BS(1))<0;       ! RESULT IN LOCKED REG
         NEST=BS(1)
         %IF REAL=1 %THEN FREG(NEST)=0 %ELSE %START
         REGISTER(NEST)=0 %IF REGISTER(NEST)>0; %FINISH
         PTYPE=1+30*LONGREAL+REAL
         N0=NOP; UNPACK; ->99
70:      %COMMENT EVALUATE AS REAL
         FAULT(24) %IF MODE=1;         ! REAL IN INTEGER EXPRN
         LONGREAL=1 %IF MODE=3
         EVALUATE=16*LONGREAL
         PRINT ORDERS
         ->72
71:      LONGREAL=1 %IF MODE=3
         REAL=1
         EVALUATE=16*LONGREAL
         ->72
80:      %COMMENT SINGLE OPERAND EXPRESSION
         BS(1)=NEST; DP(1)=-1
         PT(1)=PREC<<3!TYPE
         AFLAG=0; P=P+1
         FAULT(24) %IF TYPE=2 %AND MODE=1
         ->61 %IF TYPE=1; ->71
99:      %END;->99
         %INTEGERFN FINDR
         %SHORTROUTINE
         %INTEGER I
         ->2 %IF 0>=REG
         I=REG; ->1 %IF REGISTER(I)=0
2:       %CYCLE I=1,1,RBASE-1
         ->1 %IF REGISTER(I)=0
         %REPEAT; FAULT(241)
1:       REGISTER(I)=1; %RESULT=I; %END
         %INTEGERFN FINDPR
         %INTEGER I
         %CYCLE I=0,2,6
         ->FOUND %IF REGISTER(I)=0 %AND REGISTER(I+1)=0
         %REPEAT
         FAULT(242)
FOUND:   REGISTER(I)=1
         REGISTER(I+1)=1
         %RESULT=I
         %END
         %INTEGERFN FIND FR
         %SHORTROUTINE
         %INTEGER I
         %CYCLE I=6,-2,0
         ->1 %IF FREG (I)=0
         %REPEAT; FAULT(242)
1:       FREG(I)=1; %RESULT=I
         %END
         %ROUTINE     LOAD(%INTEGERNAME N,%INTEGER REG,MODE)
         %SHORTROUTINE
         %INTEGER I,X
         %INTEGERNAME BSI,DPI,PTI
         I=N; ->NOCHOICE %UNLESS I=0
         I=1; ->CHOSEN %IF DP(1)<0 %AND REGISTER(BS(1))>=0
         I=2; ->CHOSEN %IF DP(2)<0 %AND REGISTER(BS(2))>=0
         ->CHOSEN %IF MODE=0 %AND (PT(2)=255 %OR PT(2)&24=8)
         ->CHOSEN %IF MODE=1 %AND (PT(2)&7=1 %OR (EVALUATE>0 %AND  %C
         PT(2)&24=0)); I=1
CHOSEN:  N=I
NOCHOICE:BSI==BS(I);DPI==DP(I);PTI==PT(I)
         ->SHORT CONST %IF MODE=0 %AND PTI=255
         TEST(I) %IF MODE=1 %OR PTI&64#0
         ->INREG %IF DPI<0
         ->NOFIND %IF REG>=0
         %IF MODE=0 %THEN REG=FINDR %ELSE REG=FINDFR
NOFIND:  X=MODE<<3! (PTI>>2&6)+2
         DUMP(X,REG,DPI,0,BSI) ; ->98 ;! PICK UP VARIABLE
INREG:   ->90 %IF MODE=1
         ->99 %IF BSI=REG
         ->LOCKED %IF REGISTER(BSI)<0
         ->99 %IF 0>REG
         REGISTER(BSI)=0
SWOP:    PRR(X'18',REG,BSI); ->98
LOCKED:  REG=FINDR %IF 0>REG; ->SWOP
90:      ->91 %IF BSI=0;             !CURRENTLY CAN LEAVE NOTHING INFR0
         ->99 %IF BSI=REG %OR 0>REG
91:
         REG=FINDFR %IF 0>REG
         PRR(X'38'-EVALUATE,REG,BSI)
         FREG(BSI)=0; ->98
SHORT CONST:   REG=FINDR %IF 0>REG
             DUMP(0,REG,DPI,0,0);      !LOAD ADDRESS
98:      BSI=REG; DPI=-2
99:      %END
         %ROUTINE PLANT(%INTEGER OPCODE,R1,R2)
         %SHORTROUTINE
         %INTEGER BSR2
         BSR2=BS(R2);R1=BS(R1)
         ->RROP %IF DP(R2)<0
         %IF PT(R2)&24=16 %AND X'5A'<=OPCODE<=X'5B' %THEN   %C
         OPCODE=OPCODE-16;             ! CAN PLANT HALF LENGTH OP
         PRX(OPCODE,R1,0,BSR2,DP(R2));->99
RROP:    PRR(OPCODE-64,R1,BSR2)
         %IF REAL=1 %THEN FREG(BSR2)=0
         %IF REAL=0 %AND REGISTER(BSR2)>0 %THEN REGISTER(BSR2)=0
99:      %END
         %ROUTINE TEST(%INTEGER N)
         %SHORTROUTINE
         %COMMENT INSPECTS OPERAND - MAKES TYPE CONVERSIONS ETC.
         %INTEGER X
         %INTEGERNAME LBASE,LDISP,LPTYPE
         %BYTEINTEGER LPREC
         LPTYPE==PT(N); LDISP==DP(N)
         LBASE==BS(N); LPREC=LPTYPE>>3&3
         -> SHORT CONST %IF LPTYPE=255
         -> START %UNLESS LPTYPE&64 #0 ;! GO UNLESS NAME TYPE
         RP13=R13;R13=LBASE<<12!LDISP
         PRX(X'58',LINK,0,LBASE,LDISP) %UNLESS R13=RP13
         LPTYPE=LPTYPE&31; LBASE=LINK;LDISP=0
START:   -> FLOATING %IF REAL#0
         -> FINISH %IF LPREC=0 %OR (LPREC=2 %AND 12<=OPCODE<=13)
PICKUP:  LOAD(N,-1,0)
         LPREC=0; ->FINISH
SHORTCONST:    LPREC=0; -> PICK UP %IF REAL=0
               ->INGLA %IF 0<=LDISP<=2;! THESE 3 ALWAYS IN THE GLA
         A(-2)=9; A(-1)=LDISP
         LDISP= SORT CONST(-2,LONGREAL,2);! COMPILE TIME FLOAT
1:       LBASE=GLA; -> FINISH
INGLA:   LDISP= 8*LDISP+40; ->1
FLOATING:->FLOAT IT %IF LPTYPE&7=1     ;! INTEGER - RUN TIME FLOAT
         ->FINISH %IF LPREC=3 %OR EVALUATE=0
         %COMMENT MUST STRETCH A 32 BIT REAL
         FREG(LBASE)=1 %IF LDISP<0
         X=FINDFR;PRR(X'2B',X,X);      !FIND AND CLEAR REGISTER
         %IF LDISP<0 %THEN %START
         PRR(X'38',X,LBASE);           ! LER_X,LBASE
         FREG(LBASE)=0;
         %FINISH %ELSE PRX(X'78',X,0,LBASE,LDISP)
         LBASE=X;LDISP=-2; ->FINISH
FLOATIT: LOAD(N,1,0);PPJ(43); REGISTER(1)=0
         LBASE=0; LDISP=-2
FINISH:  LPTYPE=(1+REAL)!LPREC<<3
         %IF LONGREAL=1 %AND REAL=1 %THEN LPTYPE=LPTYPE!24
         %END
         %ROUTINE     MULT(%INTEGERNAME RESULT)
         %SHORTROUTINE
         %INTEGER I,K
         %CYCLE I=1,1,2
         ->30 %IF PT(I)=255 %AND DP(I)=2
         ->1 %IF DP(I)<0 %AND REGISTER(BS(I))>=0
5:       %REPEAT
         I=1; K=FINDPR
         LOAD(I,K+1,0); ->11
1:       ->14 %IF BS(I)&1=1 %AND I>0 %AND REGISTER(BS(I)-1)=0
         ->12 %IF BS(I)&1=0 %AND REGISTER(BS(I)+1)=0
         ->5
12:      K=BS(I); REGISTER(K+1)=1
         PRR(X'18',K+1,K); ->13
14:      REGISTER(BS(I)-1)=1
11:      BS(I)=BS(I)-1
13:      TEST(3-I); PLANT(X'5C',I,3-I);! MULTIPLY
         ->15 %IF CHECKSP=0
         PRX(X'8F',BS(I),0,0,32);      ! SLDA ?,32
15:      RESULT=257+BS(I)-CHECKSP
         REGISTER(BS(I)+CHECKSP)=0
         AFLAG=CHECKS
         ->99
30:      K= 3-I; LOAD(K,-1,0)
         PRR(X'1A',BS(K),BS(K))
         AFLAG=1; RESULT=256+BS(K)
99:      %END
         %ROUTINE     DIV(%INTEGERNAME RESULT)
         %SHORTROUTINE
         %INTEGER I,K
         ->3 %IF DP(1)<0
1:       K=FIND PR
2:       I=1; LOAD(I,K,0); ->10
3:       ->4 %IF BS(1)&1=0 %AND REGISTER(BS(1)+1)=0
         K=FINDPR; ->2
4:       ->1 %IF REGISTER(BS(1))<0;    !A CLAIMED REGISTER
         REGISTER(BS(1)+1)=1; K=BS(1)
10:      PRX(X'8E',K,0,0,32);          ! SRDA K,32
         TEST(2); PLANT(X'5D',1,2);    ! DIVIDE
         ->20 %IF CHECKSP=0
         ->20 %IF OPCODE=17; PRR(X'12',K,K);     ! LTR
         PRX(X'47',7,0,CODER,64);         ! BC 7,64(CODE)
20:      REGISTER(K)=0
         AFLAG=0;RESULT=K+257
         %END
         %ROUTINE PRINT ORDERS
         %SHORTROUTINE
         %SWITCH S(0:49)
         %INTEGER C,D,LAST,KK
         LAST=N0-6
         %CYCLE JJ=NOP,3,LAST
         OPCODE=ST(JJ)
         -> SKIP %IF 10>=OPCODE %OR OPCODE=24
         %IF OPCODE=11 %OR OPCODE=23 %THEN KK=1 %ELSE KK=2
         %CYCLE KK=KK,-1,1
         POP(OPHEAD,C,DP(KK))
         PT(KK)=C>>8; BS(KK)=C&15
         %REPEAT
SKIP:    -> S(OPCODE+25*REAL)
S(0):                                  ! INTEGER CONST<4096 IN INT EXP
S(25):                                 ! INT CONST<4096 IN REAL EXRRN
         D=X'FF00'; C=ST(JJ+2);->99
S(1):                                  ! LONG INT CONST IN INT EXPRN
         C=SORT CONST(ST(JJ+1),0,1)
         D=256+GLA;->99
S(26):                                 ! LONG ICONST IN EXPRN
         D=512+GLA; D=D+3<<11 %IF LONGREAL=1
         C=SORT CONST(ST(JJ+1),LONGREAL,2);->99
S(2):    S(27):                        !LOCAL VARIABLE
         D=ST(JJ+1); C=ST(JJ+2); ->99
S(33):                            ! REAL IN FR
         D=ST(JJ+1); C=-2; ->99
S(9):    S(34):                        !(INTEGER)  IN G.R.
         D=256+ST(JJ+1); C=-2; ->99
S(10):   S(35):                        !PARKED IN CORE
         C=ST(JJ+2);D=ST(JJ+1)
         %IF REAL=1 %AND D>>8&24=24 %THEN PUSH(LWSP(LEVEL),0,C) %ELSE %C
         PUSH(WSP(LEVEL),0,C); ->99
S(11):                                 ! NEGATE IN INTEGER EXPRN
         -> 109 %UNLESS PT(1)=255 %AND DP(1)=1
         AFLAG=0; D=256+GLA; C=16; ->99 ;! OPTIMISE (-1)
S(36):                                 ! NEGATE IN REAL EXPRN
109:     C=1; D=X'13'+REAL*(32-EVALUATE)
         LOAD(C,-1,REAL)
         AFLAG=1
         PRR(D,BS(1),BS(1));           ! LCR,LCER,LCDR
111:     D=(REAL+1+24*LONGREAL)<<8!BS(C)
         C=-2; ->99
S(23):                                 !INITIAL NOT
         C=1; AFLAG=2; LOAD(C,-1,0)
         PRX(X'57',BS(1),0,GLA,16); ->111
S(12):   S(37):                        !ADDITION
         AFLAG=1;D=X'5A'
125:     C=0
126:     LOAD(C,-1,REAL); TEST(3-C)
         D=D+REAL*(X'20'-EVALUATE)
         PLANT(D,C,3-C);->111
S(13):   S(38):                        !SUBTRACTION
         AFLAG=1; D=X'5B';C=1
         ->126 %UNLESS REAL=0 %AND PT(2)=255 %AND 1<=DP(2)<=2
         AFLAG=0; LOAD(C,-1,0)
         PRR(6,BS(1),0) %IF DP(2)=2
         PRR(6,BS(1),0);->111          ;!BCTR TO SUBTRACT 1 OR 2
S(14):   D=X'57';                      !EXCLUSIVE OR
141:     AFLAG=2; ->125
S(15):   D=X'56';->141;                !OR
S(16):   MULT(D); C=-2; ->99
S(17):S(18):   DIV(D); C=-2; ->99
S(19):   D=X'54';->141;                !AND
S(20):S(21):                           !SLL(21) AND SLR
         D=0
         C=1; LOAD(C,-1,0)
         D=1 %IF PT(2)=255
         C=2; LOAD(C,-1,0) %IF D=0
         PRX(X'89'+OPCODE-21,BS(1),0,BS(2),D*DP(2))
         REGISTER(BS(2))=0 %IF D=0
         C=1; AFLAG=0; ->111
S(22):   %CYCLE C=1,1,2
         LOAD(C,-1,0)
         DUMP(1,BS(C),28+4*C,0,GLA)
         REGISTER(BS(C))=0; %REPEAT
         ->221 %IF REGISTER(0)#0
         C=2; AFLAG=0
         REGISTER(0)=1
         PPJ(15); BS(2)=0; ->111;      ! RESULT IN R0
221:     C=FINDR; D=FINDR; PRR(X'18',C,0)
         PPJ(15); PRR(X'18',D,0); PRR(X'18',0,C)
         REGISTER(C)=0; C=2; AFLAG=0; BS(2)=D; ->111
S(39):S(40):S(42):S(44):S(45):S(46):S(48):  !INTEGER OP IN REAL
         FAULT(24);                    ! INTEGER OP IN REAL
         %IF OPCODE=23 %THEN OPCODE=36 %ELSE OPCODE=37;! \ -> -
         ->S(OPCODE);                  ! ! TREAT OTHERS AS +
S(41):                                 !REAL MULT
         D=X'5C';C=0
410:     AFLAG=0; -> 126
S(43):                                 ! REAL DIVISION
         D=X'5D';C=1;->410
S(47):                                 !REAL EXPONENTIATION
         C=1; LOAD(C,-1,1)
         ->222 %IF PT(2)=255 %AND DP(2)=2;       ! OPTIMISE **2
         PRR(X'38'-EVALUATE,0,BS(1))
         C=2; FAULT(39) %UNLESS PT(2)=255 %OR PT(2)&7<=1
         LOAD(C,1,0); PPJ(36)
         REGISTER(1)=0
         PRR(X'38'-EVALUATE,BS(1),0)
         C=1;->111
222:     PRR(X'3C'-EVALUATE,BS(1),BS(1))
         C=1; ->111
99:      PUSH(OPHEAD,D,C) %UNLESS JJ=LAST
S(24):S(49): %REPEAT
         DP(1)=C;PT(1)=D>>8;BS(1)=D&15 ;! FINAL RESULT
         %END
99:      %END;               ! OF ROUTINE CSEXP
         %INTEGERFN SORT CONST(%INTEGER P,LONG,TYPE)
         %SHORTROUTINE
         %LONGREAL CVALUE
         %INTEGER I,K
         ->50 %IF TYPE=2
         FAULT(24) %IF A(P)&7#1
         %IF A(P)=9 %THEN I=A(P+1) %ELSE FROMAR4(P+1,I)
40:      K=N0
         ST(K)=I; N0=N0+1
         %RESULT =K<<2
50:      CVALUE=0
         ->60 %UNLESS A(P)&7=1
         %IF A(P)=9 %THEN I=A(P+1) %ELSE FROMAR4(P+1,I)
         CVALUE=I;->70
60:      FROMAR8(P+1,CVALUE)
70:      ->75 %IF LONG#0
         I=INTEGER(ADDR(CVALUE)); ->40
75:      K=(N0+1)&(-2)
         ST(K)=INTEGER(ADDR(CVALUE))
         ST(K+1)=INTEGER(ADDR(CVALUE)+4)
         N0=K+2
         %RESULT=K<<2
         %END
         %ROUTINE CSTREXP(%INTEGER REG)
         %SHORTROUTINE
         %COMMENT EVALUATES STRING EXPR USING CURRENT
         %COMMENT WORKAREA AND 1 SUBROUTINES LEAVES ADDR IN
         %COMMENT REG -VE IF STRING MUST BE MOVED TO WK.ARREA
         %INTEGER JJ,QQ,KK,WKAREA,PP
         SETEX %UNLESS STRINST#0
         PP=P
         JJ=TSEXP(QQ); ->71 %IF JJ=20 %AND REG>=0
         P=PP; REG=!REG!
         WKAREA=GET STR WSP
         PSI(X'92',0,RBASE,WKAREA);    ! CLEAR WORK AREA
         ->2 %IF A(P)=4
1:       FAULT(71)
4:       P=PP; SKIP EXP; ->99
5:       FAULT(72); ->4
2:       ->10 %IF A(P+1)=2
         ->1 %UNLESS A(P+1)=1          ;!NAME
         P=P+2; CNAME(2,1)
         ->1 %UNLESS TYPE=5;->20
10:      P=P+2;->14 %IF A(P)=5
         ->1 %UNLESS A(P)=9 %AND A(P+1)<127
         ->11 %IF A(P+1)=0
               PRX(X'41',1,0,0,A(P+1))
         P=P+2;->20
11:      P=P+2; ->21;                  ! NULL STRING
14:      %COMMENT STRING CONSTANT PUT IN CODE CF (TEXTTEXT)
         KK=(CA+6+A(P+1)-CODEBASE(LEVEL))&(-2)
         QQ=0;->15 %IF KK<4095
         KK=KK+4;QQ=1
         PRX(X'58',1,GLA,0,PAGENO(KK)<<2)
15:      PRX(X'45',1,10,QQ,KK&4095)
         P=P+1; %CYCLE KK=1,1,(A(P)+2)//2
         PLANT(A(P)<<8!A(P+1))
         P=P+2;%REPEAT
20:      PRX(X'41',2,RBASE,0,WKAREA)
         PPJ(26)
21:      ->90 %IF A(P)=2;              ! END OF EXPRN
         ->5 %UNLESS A(P+1)=12
         P=P+1;->2
71:      DUMP(2,REG,K,I,0); ->99
90:      P=P+1
         PUSH(STR WSP(LEVEL),0,WKAREA)
         PRX(X'41',REG,0,RBASE,WKAREA)
99:      PTYPE=5; UNPACK; %END
         %ROUTINE     CRES(%INTEGER MODE,LAB)
         %ROUTINESPEC SKIP NAME
         %ROUTINESPEC FAIL(%INTEGER MASK)
         %SHORTROUTINE
         %INTEGER P1,P2,P3,W,SEXPRN
         %COMMENT MODE=0 UNCONDITIONAL # 0 CONDITIONAL
         %COMMENT ENTER WITH ADDR OF LHS IN R1 AND P ON PLUS'
         SEXPRN=0;W=GET DBLE WRD
         P1=P;->1 %IF A(P)=4
1000:    P=P1;SKIP EXP
         FAULT(74);->99
1:       ->1000 %UNLESS TYPE=5
         PRR(X'1B',2,2)                ;!SR_2,2
         PRX(X'90',1,2,RBASE,W)        ;!STM_1,2,W(RBASE)
         P2=-1;P=P+2
         ->10 %IF A(P-1)=3             ;!SUB EXPRESSION
         ->1000 %UNLESS A(P-1)=1
3:       P2=P;SKIP NAME
         ->50 %IF A(P)=2               ;!END
         ->1000 %UNLESS A(P+1)=12      ;!ONLY - PERMITTED
         ->1000 %UNLESS A(P+2)=3; P=P+3
10:      CSTREXP(-4);          ! STRING MUST GO TO WK.AREA
                               ! IN CASE OF SIDE EFFECTS
         SEXPRN=SEXPRN+1
         PRX(X'98',1,2,RBASE,W)
         PPJ(27)
         FAIL(7)
         PRX(X'90',1,2,RBASE,W);       ! SAVE R1 AND R2 FOR LATER
         ->15 %IF P2<0
         P3=P;P=P2
         CNAME(1,4)
         FAULT(71) %UNLESS TYPE=5
         P=P3
12:      ->1000 %UNLESS A(P)=1 %AND A(P+1)=12 %AND A(P+2)=1
         P=P+3;->3
15:      PSI(X'95',0,4,0)
         FAIL(7);->12
50:      ->1000 %IF SEXPRN=0
         PRX(X'98',1,2,RBASE,W);       ! SAVE R1 AND R2 FOR LATER
         PPJ(37)
         P3=P;P=P2
         CNAME(1,4)
         FAULT(71) %UNLESS TYPE=5
         P=P3+1
99:      PUSH(LWSP(LEVEL),0,W)
         %RETURN
         %ROUTINE SKIP NAME
1:       P=P+1;SKIP APP
         P=P+1;%RETURN %IF A(P-1)=2
         P=P+1;->1
         %END
         %ROUTINE FAIL(%INTEGER MASK)
         %IF MODE=0 %THEN PRX(X'47',MASK,0,CODER,152) %ELSE %C
P LOCAL JUMP(MASK,LAB)
         %END
         %END
         %ROUTINE CCOND(%INTEGER IU,NEARLAB,FARLAB)
               %COMMENT IU=0 FOR IF =1 FOR UNLESS
               %ROUTINESPEC CCC
         %ROUTINESPEC CSC(%INTEGERNAME FLAB)
         %COMMENT  P ON ALT OF (SC)
         %INTEGER T,C,FAILPT,BASE,DISP
         %INTEGER JNPORFP,TP,CLAUSES
         CLAUSES=0
         T=A(P+1+A(P+1))
         T=0 %IF T=3;                  !0=SC  1=%AND 2=%OR
         TP=T ; TP=TP+1 %IF T=0
         %IF IU!!(TP-1)=0 %THEN JNPORFP=FARLAB %ELSE JNPORFP=NEARLAB
         FAILPT = 0; CCC ;  -> 99
               %ROUTINE CCOMP(%INTEGER C)
         %SHORTROUTINE
               ! C=1 FIRST TIME, 2 SECOND
         %INTEGER M,L,Q,R,T
         %OWNBYTEINTEGERARRAY FCOMP(1:7)=8,10,2,7,12,4,7;
         %OWNBYTEINTEGERARRAY BCOMP(1:7)=8,12,4,7,10,2,7;
         %SWITCH SW(-10:2)
         M=A(P)
         P=P+1; ->SW(C) %UNLESS M=8
         FAULT(73); SKIP EXP; ->1
SW(-10):                               ! FIRST OPERAND SIMPLE STRING
         CSTREXP(1); NEST=1; DUMP(2,2,DISP,0,BASE); ->161
SW(-9):  T=P; R=TSEXP(Q)
         ->REG1 %IF R=10 %AND A(P)=2
         ->REG2 %IF R=11 %AND A(P)=2
         P=T; CSEXP(0,0)
         ->REG3 %IF TYPE=2
         PRR(X'19',DISP,NEST); ->20;   !CR
REG1:    Q=X'59'; ->RCOM
REG2:    Q=X'49'
RCOM:    PRX(Q,DISP,0,I,K); ->20;      !C OR CH
REG3:    PRR(X'18',1,DISP); ->37 ;     !TO FLOAT ETC
SW(-5):                                !FIRST OPERAND LONG REAL
         CSEXP(0,3); Q=X'69';          ! COMPILE LONG
51:      PRX(Q,NEST,0,BASE,DISP); ->21
SW(-4):                                !FIRST OPERAND SHORT REAL
         Q=X'79'; CSEXP(0,2)
40:      ->51 %IF PREC=0;              !SHORT EXPRESSION
         PRR(X'2B',0,0)
         PRX(X'78',0,0,BASE,DISP);     !STETCH IST OPN
         PRR(X'29',0,NEST); ->20
SW(-3):                                !FIRST OPERAND ASHORT CONSTANY
         CSEXP(0,0)
         ->30 %IF VALUE=0
         ->36 %IF TYPE=2
         R=2
         R=1 %IF NEST=2
         DUMP(0,R,VALUE,0,0);          !LOAD ADDR FOR CONSTANT
29:      PRR(X'19',R,NEST); ->20;      !CR2,1
30:                                    !COMPARISONS WITH ZERO
         ->35 %IF TYPE=5
         ->32 %IF AFLAG=1
         ->31 %IF TYPE=2
         ->32 %IF AFLAG=2 %AND 7<=FCOMP(M)<=8
31:      PRR((TYPE-1)*(2-PREC&1)*16+X'12',NEST,NEST);   !LTR,LTER,LTDR
32:      ->21 %IF C=-3; ->20
35:      PSI(X'95',0,NEST,0); ->20;    ! NULL STRING LENGTH=0
36:      DUMP(0,1,VALUE,0,0);
37:      PPJ(43);
         PRR((1-PREC&1)*16+X'29',0,NEST);        ! CDR OR CER
         ->20
SW(-2):  Q=X'49';                      !OPERAND SHORT
24:      CSEXP(0,0); ->25 %IF TYPE=2
          PRX(Q,NEST,0,BASE,DISP); ->21;          ! C OR CH
25:      R=2; R=6 %IF Q=X'49';         ! HERE FOR REALS
26:      DUMP(R,1,DISP,0,BASE); ->37
SW(-1):  ! FIRST OPERAND A BYTE
         T=P; R=TSEXP(Q); L=1
         ->18 %IF R=11 %AND A(P)=2
         ->19 %IF R=1 %AND A(P)=2
         P=T;CSEXP(0,0); ->14 %IF TYPE=2
         R=2; R=1 %IF NEST=2
         DUMP(4,R,DISP,0,BASE); ->29
14:      R=4; ->26
18:      PSS(X'D5',L,BASE,DISP,I,K); ->20;       ! CLC COMPARISONS
19:      PSI(X'95',Q,BASE,DISP);->20;  !CLI FOR BYTE/INTEGER
SW(0):                                 !FIRST OPERAND INTEGER
         T=P; R=TSEXP(Q); L=4
         ->RSTORE %UNLESS R=10 %AND A(P)=2
         ->18 %IF 7<=FCOMP(M)<=8
RSTORE:  P=T; Q=X'59'; ->24
SW(1):                                 !FIRST OPERAND EXPRESSION
SW(2):                                 !2ND HALT OF DOUBLE SEDED
         T=P; PTYPEP=PTYPE; R=TSEXP(VALUE)
         PTYPE=PTYPEP;UNPACK
         ->30 %IF R=1 %AND VALUE=0 %AND(A(P)=2 %OR C=2)
         ->160 %IF TYPE=5
         ->150 %IF TYPE=2
         ->120 %IF R=0 %OR 14<=R<=15 %OR(A(P)=1 %AND C=1)
         ->130 %IF UNASS=1 %OR R=100 %OR R=11 %OR R<=2
         ->131 %IF R=50;               ! REGISTER VARIABLE
         Q=X'59'; Q=X'49' %IF R=12
         PRX(Q,NEST,0,I,K); ->20
130:     !1ST OPND INTEGER IN NEST-2ND OPN SIMPLE INTEGER EXPRN
         R=NEST; REGISTER(R)=1 %IF REGISTER(R)=0
         P=T; CSEXP(0,1)
         REGISTER(R)=0 %IF REGISTER(R)>0; ->29
131:      PRR(X'19',NEST,K); ->20
120:     !1ST OPND INTEGER EXPRN IN NEST-SECOND OPND UNKNOWN
         Q=PARK(NEST); P=T
         CSEXP(0,0); ->122 %IF TYPE=2
         UNPARK(X'59',NEST,Q); ->21
122:     UNPARK(X'58',1,Q); ->37;       ! TO FLOAT FIRST OPERAND
150:     P=T; Q=PARKF(NEST,PREC);      !
         ->155 %IF PREC=0
         CSEXP(0,3);                   !1ST OPND LONG REAL EXPR
         PUSH(LWSP(LEVEL),0,Q)
         BASE=RBASE
         DISP=Q; Q=X'69'; ->51
155:     CSEXP(0,2);                   !1ST OPND SHORT REAL EXPRN
         PUSH(WSP(LEVEL),0,Q)
         BASE=RBASE;DISP=Q
         Q=X'79'; ->40
160:     %COMMENT 1ST OPERAND A STRING EXPRESSION PTR IN NEST
         P=T; POP(STR WSP(LEVEL),R,T);! RMEOVE WKAREA WITH STRING%C
FROM FREE LIST TO PREVENT CORRUPTION
         R=PARK(NEST)
         CSTREXP(1); NEST=1
         UNPARK(X'58',2,R)
         PUSH(STR WSP(LEVEL),0,T)
161:     ->162 %UNLESS 7<=FCOMP(M)<=8; ! OPTIMISE = & \=
         PRX(X'43',3,0,1,0);           ! IC TO SET UP FOR EX
         PRX(X'44',3,0,GLA,STRINST+6); ->20;     ! EX_3,COMPARISON
162:     PPJ(35);                      ! GO TO SUBROUTINE FOR COMPARISON
20:      MASK=FCOMP(M); ->1;           ! MASK FOR NORMAL COMPARISON
21:      MASK=BCOMP(M);                ! BACKWARDS COMPARISON
1:             %END
         %ROUTINE CCC
         %SHORTROUTINE
         %INTEGER LINE,FLAB
         CSC(FLAB)
         C=A(P) ; P=P+1
         CLAUSES=CLAUSES+1
         ->10 %IF T=0       %OR(CLAUSES>1 %AND C=2)
         -> 2 %IF FAILPT#0
         FAILPT=1 ; LINE=1 ; ->3
2:       LINE=0
3:
         PLOCAL JUMP(MASK,JNPORFP)
         %UNLESS FLAB=0 %THEN %START
         PUSH(LOCAL LABEL,CA,FLAB)
         R13=0 %UNLESS R13=SAVE13 %AND CHNGE13=0
         %FINISH
         CCC;                          !FIX NEXT CLAUSE
         -> 10 %IF LINE=0
         MASK=MASK!!15 %IF JNPORFP=NEARLAB
10:      %END
         %ROUTINE CSC(%INTEGERNAME FLAB)
         %SHORTROUTINE
         %INTEGER LINE,Q,R,S,TP,NEAR
         FLAB=0
         S=A(P+1+A(P+1))
         LINE=S
         NEAR=NEARLAB
         ->START %IF T=0 %OR(S=2 %AND CLAUSES>0)
         PLABEL=PLABEL-1; NEAR=PLABEL
START:   -> 1 %IF A(P)=1
         P=P+2
         -> REDUND %IF T=0
         ->REDUND2 %IF T=A(P+1+A(P+1))
         FLAB=NEAR %UNLESS NEAR=NEARLAB
         TP=T-1; ->LAST %IF NEAR=NEARLAB
         CCOND(TP,NEAR,FARLAB); ->9
REDUND:CCOND(IU,NEARLAB,FARLAB); ->9
REDUND2: CCOND(IU,NEARLAB,FARLAB)
         MASK=MASK!!15 %IF JNPORFP=NEARLAB       ;->9
LAST:    CCOND(IU,NEAR,FARLAB)
         NEARLAB=0; ->9
1:       %COMMENT CLASSIFY SIMPLE CONDITION AND ACT ACCORDINGLY
         P=P+2; S=P; SKIP EXP
         ->21 %IF A(P)=8;              ! RESOLUTION (ALL OCCURRENCES)
         P=P+1; Q=TSEXP(R);            ! TEST MIDDLE OPERAND FIRST
         %IF TYPE=3 %THEN %START
         P=P+2; R=COPY RECORD TAG; %FINISH
         -> STR %IF TYPE=5
         -> ZERO %IF Q=1 %AND R=0 %AND A(P)=2;! ! NOT DOUBLE SIDED
         P=S; Q=TSEXP(R);              ! TEST LHS
         -> CONST %IF 1<=Q<=2
         -> SIMPLE %IF Q=20
         ->REGVAR %IF Q=50
         -> STR %IF TYPE=5
         -> NORMAL %UNLESS UNASS=0 %AND 10<=Q<=15
SIMPLE:  BASE=I; DISP=K; CCOMP(10-Q); ->8
REGVAR:  DISP=K; CCOMP(-9); ->8
STR:     P=S; CSTREXP(1); NEST=1; CCOMP(1); ->8
CONST:   VALUE=R; CCOMP(-3); ->8
21:      P=S+2; ->22 %UNLESS A(S)=4 %AND A(S+1)=1
         CNAME(2,1)
         ->23 %IF A(P)=2 %AND TYPE=5
22:      P=S; SKIP EXP
28:      P=P+1; SKIP EXP
         FAULT(73); ->8
23:      P=P+2
         FLAB=NEAR %UNLESS NEAR=NEARLAB
         %IF T#2 %THEN R=JNPORFP %ELSE %START
         %IF JNPORFP#FARLAB %AND LINE=2 %AND CLAUSES>0  %C
         %THEN R=FARLAB %ELSE R=NEAR
         %FINISH
         CRES(1,R)
         ->28 %UNLESS A(P)=2           ;! NO DOUBLE SIDED RESOLUTION
         P=P+1;
         MASK=15; ->10
ZERO:    P=S; Q=TSEXP(R); -> SIMPLE %IF Q=11;    ! CLI FOR BYTE/ZERO
         -> STR %IF TYPE=5
NORMAL:  P=S; CSEXP(0,0); CCOMP(1)
8:       P=P+1
               ->10 %IF A(P-1)=2;      ! GO UNLESS DOUBLESIDED
         FLAB=NEAR %UNLESS NEAR=NEARLAB
         ->ORCOND %IF T=2
         R=JNPORFP; ->7
ORCOND:  %IF JNPORFP#FARLAB %AND LINE=2 %AND CLAUSES>0 %THEN %C
R=FARLAB %ELSE R=NEAR
%COMMENT LAST DOUBLESIDED IN OR CONDITION IS SPECIAL
7:
         PLOCAL JUMP(MASK!!15,R)
         CCOMP(2)
10:      MASK=MASK!!15 %IF T=1 %OR(T=0 %AND IU=0)
9:       %END
 99:           %END                    ;!OF CCOND
         %ROUTINE FILL LOCAL JUMPS
         %SHORTROUTINE
         %INTEGER T,C,J
1:       POP(LOCAL JUMP,T,C)
         ->98 %IF T=-1
         J=FIND(C,LOCAL LABEL)
         FAULT(233) %IF J=-1
         J=J-LOCAL ADDR
         PLUG(T+2,J); ->1
98:      CLEAR LIST(LOCAL LABEL)
         %END
         %ROUTINE P LOCAL JUMP(%INTEGER MASK,LABEL)
         %SHORTROUTINE
         %RETURN %IF MASK=0
         CHNGE13=1 %UNLESS SAVE13=R13
         ->1 %IF LABEL>21000
         PJ(MASK,LABEL); ->99
1:       ->2 %UNLESS LOCAL BASE=0
         LOCAL BASE=10; LOCAL ADDR=CODEBASE(LEVEL)
         ->2 %IF SBFLAG=1 %OR 3000+800*COMPILER>CA-CODEBASE(LEVEL)
         LOCAL BASE=FIND PP
         FAULT(231) %IF LOCAL BASE<=0
         PRR(5,LOCAL BASE,0); LOCAL ADDR=CA
2:       PUSH(LOCAL JUMP,CA,LABEL)
         PRX(X'47',MASK,LOCAL BASE,0,0)
99:      %END
         %ROUTINE     CSNAME(%INTEGER Z,REG)
         %INTEGERARRAY B(0:5)
         %OWNBYTEINTEGERARRAY PLABEL(0:45)=9,9,3,3,
               1,14(3),2,3,1,18,4,3,12(2),
         33,42,34,35,32,12(16),5,12(8);
         %OWNBYTEINTEGERARRAY MODE(0:45)=16(2),
         0(3),16(3),2,16(2),31,32,0,
         18,31,18(3),63,47,23(2),18,31(7),
         31,23(2),47(2),18,16,2,23,16(2),
         23,0(3);
         ! TOP 4 BITS OF MODE = NO OF PARAMS BOTTOM 4 ALLOWED Z VALUE
         %SWITCH SW(0:45)
         %INTEGER PL,KK,PP,V,JJ
         KK=K; JJ=COUNTAPS
         PL=PLABEL(KK); PP=P+1; V=MODE(K)
         P=P+1; P=P+1 %IF V>>4#0
         ->1010 %IF V&15=15
         ->1001 %IF V>>4#JJ; V=V&15
         ->1002 %IF V=0 %AND Z#0;      ! ROUTINE CALL IN EXPRESSION
         ->1003 %IF V=2 %AND Z#2;      ! FN CALLED INCORRECTLY
         ->1005 %IF Z=0 %AND V#0
1010:    ->SW(KK)
1001:    FAULT(19); PRINTNAME(FNAME)
1000:    P=PP; SKIP APP; P=P-1; ->99
1002:    FAULT(23); ->1000
1003:    FAULT(29); ->1000
1004:    FAULT(22); ->1000
1005:    FAULT(17); ->1000
1:       PPJ(PL); ->99
SW(4):   CIOCP(1); ->99;               ! SKIP SYMBOL
SW(2):   V=10;                         ! NEWLINE
         PRX(X'41',1,0,0,V)
23:      CIOCP(3); ->99
21:      PRX(X'41',1,0,0,V); ->1
SW(3):   V=32; ->21;                   ! SPACE
SW(5):   V=0;                          ! RUNOUT
51:      CSEXP(2,1); ->21
SW(6):   V=10; ->51;                   ! NEWLINES(N)
SW(7):   V=32; ->51;                   ! SPACES(N)
SW(0):SW(1):                           ! SELECT INPUT AND OUTPUT
         CSEXP(1,1); CIOCP(KK+8)
         ->99
SW(9):                                 ! PRINTSYMBOL
         CSEXP(1,1); ->23
SW(8):   CIOCP(2);                     ! NEXT SYMBOL
81:      %UNLESS REG=1 %THEN PRR(X'18',REG,1)
82:      PTYPE=10001;UNPACK; ->99
SW(10):  CIOCP(1);                     ! READ SYMBOL
106:     ->1004 %UNLESS A(P)=4 %AND A(P+1)=1
         P=P+2; COPYTAG(A(P)); UNPACK
         ->104 %UNLESS TYPE=1 %AND ARR=0 %AND ROUT=0
         CNAME(1,1)
102:     ->1004 %UNLESS A(P)=2; P=P+1; ->99
104:     PLANT(X'1841'); REGISTER(4)=1
         CNAME(1,4); REGISTER(4)=0
         ->1004 %UNLESS TYPE=1; ->102
SW(11):                                ! READ
         B(0)=1; B(1)=1000
110:     JJ=10000; ->1004 %IF 0#Z#13; ->302
SW(12):                                ! WRITE
         CSEXP(1,1); P=P+1
         JJ=P; V=TSEXP(KK)
         ->121 %UNLESS V=0
         V=PARK(1); CSEXP(2,1)
         UNPARK(X'58',1,V)
120:     PPJ(PL); ->99
121:     P=JJ; REGISTER(1)=1
         CSEXP(2,1); REGISTER(1)=0; ->120
SW(13):                                ! NEWPAGE
         PRX(X'41',1,0,0,12);          ! LA 0,12
         CIOCP(5); ->99
SW(14):  ->1004 %UNLESS A(P)=4 %AND A(P+1)=1;! ADDR
         P=P+2
         CNAME(3,REG); ->1004 %UNLESS A(P)=2
         P=P+1; ->82
SW(16):                                ! INT
SW(17):                                ! INTPT
         CSEXP(0,3)
         PRR(X'28',0,NEST)%UNLESS NEST=0
         PPJ(PL); ->81
SW(18):        CSEXP(6,3)      ;       ! FRACPT
               PCLOD(32);              !INSERT FRACPT SR IN LINE
         PRR(X'28',REG,2) %UNLESS REG=2
         PTYPE=10032; UNPACK; ->99
SW(19):                                ! PRINT
         B(0)=3;B(3)=1
191:     B(1)=32;B(2)=1;->110
SW(20):                                ! PRINTFL
         QPREAL=N0<<2+4
         B(0)=2;->191
SW(39):  JJ=11032; ->210;              ! LONGREAL
SW(21):  JJ=11002;                     ! REAL
210:     CSEXP(0,1); P=P+1
         ->212 %UNLESS NEST=0
         PLANT(X'1810'); NEST=1
212:     PTYPE=JJ; UNPACK; ->99
SW(22):  JJ=11001; ->210;              ! INTEGER
SW(23):  CSEXP(REG,3);                 ! MOD
         PRR(X'20',REG,REG); ->99;     ! LPDR
SW(25):SW(26):SW(27):                  ! SQRT,LOG,SIN
SW(28):SW(29):SW (30):                 ! COS,TAN,EXP
         B(0)=1
301:     B(1)=32;JJ=10032;
         ->1004 %IF 2#Z#13
302:     REDEFINE EP(JJ,B)
         CNAME(Z,REG);P=P-2;->99
SW(31):  ! MAP RECORD
         CSEXP(REG,1); FAULT(84) %UNLESS Z=15
         PTYPE=3; UNPACK
         ->99
SW(32):  JJ=11011; ->210;              ! BYTEINTEGER
SW(33):  JJ=11021; ->210;              ! SHORT INTEGER
SW(34):SW(35):                         !RADIUS & ARCTAN
         B(0)=2; B(2)=32; ->301
SW(36):                                ! %INTEGERFN PARITY
               CSEXP(REG,1)
               PRX(X'89',REG,0,0,31);  ! SLL REL,31
               PRX(X'8A',REG,0,0,30);  ! SRA REG,30
               PRX(X'5B',REG,0,GLA,16);! S_REG,,=F'-1'
         ->99
SW(37):  CSTREXP(1); CIOCP(7); ->99;   ! PRINT STRING
SW(38):  PRX(X'41',REG,0,0,10); ->82
SW(40):                                ! PRINTCH
         CSEXP(1,1); CIOCP(5); ->99
SW(41):                                ! READ CH
         CIOCP(4); ->106
SW(42):  JJ=11005; ->210;              ! STRING
99:      %END
         %ROUTINE     CIOCP(%INTEGER N)
         PRX(X'41',0,0,0,N);           ! LA 0,N
         PRX(X'90',4,1,11,16);         ! STM 4,1,16(11)
         PRX(X'98',12,14,GLA,140);     ! LM 12,14,=V(IOCP)
         PRR(X'05',15,14);             ! BALR 15,14
         R13=0
         %END
         %ROUTINE     CANAME(%INTEGER Z,BS,DP,CLINK,BSRF,DPRF)
         ! BS& DP FOR ARRAY HEAD BSRF & DPRF POINT TO MULTIPLIER%C
 IN RECORD FORMAT FOR RECORD ARRAYS LINK POINTS TO LP CELL HOLDING%C
 DIMENSION OF ARRAY IN CASE THIS HAS TO BE DEDUCED & INSERTED
         %SHORTROUTINE
         %SWITCH S(0:3)
         %INTEGER PTYPEP,KK,RR,PP,JJ,JJJ
         %INTEGER KKK,DIS,Q,PRECP,CHECKSP
         %INTEGER BASEREG,ARRP,BASIC DISP
         CHECKSP=CHECKS; CHECKSP=1 %IF TYPE=0; ! NO TYPE MUST GO TO PERM
         PP=P; BASEREG=LINK
         %IF INREG#0 %THEN %START
         CHECKSP=0 %IF TYPE#0; BASEREG=INREG
         %FINISH
         JJ=J; PTYPEP=PTYPE
         ARRP=ARR
         Q=COUNT APS; ->1 %UNLESS JJ=0
         FROM1(CLINK,JJ)
         REPLACE1(CLINK,JJ!Q); JJ=Q
1:       ->4 %IF JJ=Q#0
         FAULT(19); PRINTNAME(FNAME)
         P=P+1; SKIP APP; ->99
4:
         %IF ARRP=2 %THEN FROM LIST(K,BASIC DISP,DP)
         ->12 %UNLESS CHECKSP=0 %AND JJ=1 %AND Z#3
         ->12 %UNLESS 2>=TYPE
         PRECP=PREC; KKK=0; P=PP+2; JJJ=TSEXP(KKK)
         %IF 3<=JJJ<=99 %THEN DIS=0 %ELSE DIS=KKK*BYTES(PRECP)
         ->12 %IF DIS>4095 %OR (ARRP=2 %AND DIS+BASIC DISP>4095)
         ->REGVAR %IF JJJ=50 %AND PRECP=1
         ->RDISP %IF JJJ=101
         ->CONST %IF 1<=JJJ<=2
         ->12 %UNLESS JJJ=100
         DUMP(2+2*PREC,1,K,0,I); P=P+1; ->9
REGVAR:  JJJ=K; P=P+1; ->8;            !CAN ONLY OPTIMISE BYTES
RDISP:   ->REGVAR %IF PRECP=1
         PRR(X'18',1,K); P=P+1; ->9
12:      P=PP+2; DIS=0
         ->21 %UNLESS JJ=1
         CSEXP(1,1);P=P+1
         ->10 %IF CHECKSP=1
9:       JJJ=1
8:       %IF BASEREG#LINK %THEN ->5
         ->VECTOR %IF ARRP=2
         RP13=R13; R13=BS<<12!DP
         PRX(X'58',LINK,0,BS,DP) %UNLESS R13=RP13; ! ADDR A0
         ->5
VECTOR:  DIS=DIS+BASIC DISP; BASEREG=BS
5:       PTYPE=PTYPEP; UNPACK
         ->6 %IF JJJ=0
         ->STR %IF TYPE=5
         ->S(PREC) %UNLESS TYPE=3;     ! RECORDS
3:       PRX(X'4C',1,0,BSRF,DPRF); ->6
STR:     PRX(X'58',2,0,BS,DP+8);       ! ADDR OF DV
         BSRF=2; DPRF=2; ->3
S(3):                                  !LONG REAL
S(0):    ! %INTEGER
               PCONST(X'89100002'! PREC); ->6;   ! SLL 1,2 OR 3
S(2):    ! %SHORT
               PLANT(X'1A11');         ! AR 1,1
S(1):6:  DISP=DIS; INDEX=JJJ; BASE=BASEREG; ->99
CONST:   JJJ=0; P=P+1;                 ! 1 D WITH A CONSTANT SUFFIX
         ->8
10:      ! 1 DIMENSION PLUS CHECKS
         DUMP(0,3,DP,0,BS);         ! ADDR ARRAYHEAD
         PPJ(22+JJ); JJJ=1;            ! PERM CHECKS BOUNDS AND SHIFTS
11:      PTYPE=PTYPEP; UNPACK
         ->6
21:      ! TWO DIMENSIONS
         ->31 %UNLESS JJ=2 %AND CHECKSP=0
         CSEXP(2,1);JJJ=2;P=P+1
         KK=P;Q=TSEXP(PP);P=KK
         ->22 %UNLESS Q=0
         JJJ=PARK(2)
22:      CSEXP(1,1);P=P+1
         PRX(X'4C',1,0,BS,DP+14);      ! MH 1,MULTIPLIER
         UNPARK(X'5A',1,JJJ);          !ADD 1ST SUFFIX
         ->9
31:      !MULTIDIMENSION - ALWAYS VIA PERM
         RR=GET ARR WSP
         %CYCLE PP=0,1,JJ-1
         CSEXP(0,1);P=P+1
         DUMP(1,NEST,RR+PP<<2,0,RBASE)
         %REPEAT
         DUMP(0,1,RR+PP<<2,0,RBASE);   !LA  1,2
         DUMP(0,2,DP,0,BS)             ;!LA  2,ARRAY HEAD
         PPJ(24);JJJ=1;
         PUSH(MDARR(LEVEL),0,RR)       ;!FREE WORK SPACE
         ->11
99:      J=JJ; %END
         %ROUTINE     CENAME(%INTEGER Z,MODE,BS,DP)
         %SHORTROUTINE
         %COMMENT MODE=0 POINTER TO RECORD IN CORE AT BS & DP
         %COMMENT MODE=1 POINTER TO RECORD IN REGISTER BS DP RUBBISH
         %COMMENT MODE=2 RECORD REG CLAIMED
! P POINTS TO (ENAME)***** FNAME HOLD FORMAT NAME
         %INTEGER Q,QQQ,BSRF,DPRF
         ->2 %IF A(P)=1
         ->1 %IF Z>=14; FAULT(64)
          P=P-2
         PTYPE=1; UNPACK; ->99
1:       BASE=BS; DISP=DP
         DISP=-1 %IF MODE#0
         INDEX=0; ->99
2:       P=P+1; Q=DISPLACEMENT(FNAME); UNPACK
         ! K POINTS TO CELL HOLD ING DETAILS FOR THOS CELL
         ->98 %IF Q=-1; ->50 %IF TYPE =3
         ->20 %IF ARR=1
         ->30 %IF TYPE=5
         ->11 %IF MODE#0
         RP13=R13; R13=BS<<12!DP
         PRX(X'58',LINK,0,BS,DP) %UNLESS R13=RP13
         BASE=LINK
7:       INDEX=0; DISP=Q
         %IF ROUT=1 %THEN FROM1(Q,DISP); ->99
11:      BASE=BS; ->7
20:      ! DEAL WITH ARRAY IN RECORD
         FROM LIST(FNAME,BSRF,QQQ)
         BSRF=BSRF>>4&15
         FROM1(QQQ,DPRF)
         ->21 %IF Z<10 %OR A(P+1)=1; K=DPRF+Q
         I=BSRF;                       ! SS5V1
         DUMP(2,1,DP,0,BS) %IF MODE=0; ->99;    ! R1 NOW POINTS TO REORD
21:      ->22 %UNLESS MODE=0 %AND BS<4;! WILL POINTER BE DESTROTED?
         DUMP(2,1,DP,0,BS); MODE=1; BS=1;        ! YES-- SO SAVE IT
22:      QQQ=PARK(1) %IF MODE=1
         CANAME(3,BSRF,DPRF+Q,K,0,0)
         R13=0
         %IF MODE=0 %THEN PRX(X'5A',INDEX,BS,0,DP)
         %IF MODE=1 %THEN UNPARK(X'5A',INDEX,QQQ)
         %IF MODE=2 %THEN PRR(X'1A',INDEX,BS)
         I=BSRF; K=DPRF+Q
         ->99
30:      FROMLIST(FNAME,BSRF,QQQ)
         FROM1(QQQ,DPRF); BSRF=BSRF>>4&15
         PRR(X'18',1,BS) %IF MODE#0 %AND BS#1
         PRX(X'58',1,BS,0,DP) %IF MODE=0
         PRX(X'5A',1,BSRF,0,DPRF+Q)
         BASE=1; INDEX=0; DISP=0
         I=BSRF; K=DPRF+Q; ->99
50:      ! RECORDNAME IN RECORD--Q POINTS TO SIDECHAIN
         DUMP(2,1,DP,0,BS) %IF MODE=0;! LOAD PTR TO FIRST RECORD
         PRR(X'18',1,BS) %IF MODE#0
         FROM2(Q,QQQ)
         CRNAME(Z,1,K,1,QQQ); ->99
98:      P=P+1; SKIP APP; P=P-2
99:      %END
         %ROUTINE     CRNAME(%INTEGER Z,MODE,CLINK,BS,DP)
         %SHORTROUTINE
%COMMENT DEALS WITH RECORD NAME CALLING CENAME TO COMPILE SUBFIELDS
         %COMMENT MODE=0 POINTER TO RECORD IN CORE AT BS & DP
         %COMMENT MODE=1 POINTER TO RECORD IN REGISTER BS DP RUBBISH
%COMMENT CLINK POINTS TO CELL CONTAING NAME DETAILS
         %INTEGER KK,JJ,Q,QQ
         FROM2(CLINK,Q)
         FROM1(Q,FNAME)
         ->50 %IF ARR=0
         I=BS; K=DP;
         ->99 %IF 11<=Z<=12 %AND A(P+1)=2           ;! FETCH ARRAYHEAD
         FROM LIST(FNAME,KK,JJ)
         KK=KK>>4&15;                  ! BASE REG OF FORMAT
         FROM1(JJ,JJ)
         %IF MODE=2 %THEN PRR(X'1A',INDEX,BS)
         ->3  %UNLESS MODE=0 %AND BS<4;! WILL POINTER BE DESTROTED?
         DUMP(2,1,DP,0,BS); MODE=1; BS=1;        ! YES-- SO SAVE IT
3:
         QQ=BS; QQ=PARK(BS) %IF MODE=1
         CANAME(Z,QQ,DP,CLINK,KK,JJ+2)
         FROM1(Q,FNAME)
         REGISTER(QQ)=0 %IF MODE=1
         PRR(X'1A',1,LINK)
         CENAME(Z,1,1,0); ->99
50:      P=P+1; ->51 %IF A(P)=2
         FAULT(19); SKIP APP
51:      P=P+1
         %IF INREG=0 %OR Z=14 %THEN CENAME(Z,0,BS,DP) %ELSE %C
         CENAME(Z,2,INREG,0)
99:      %END
         %ROUTINE     CNAME(%INTEGER Z,REG)
         %INTEGER JJ,JJJ,KK,RR,PTYPEP,LEVELP
         %INTEGER DISPP
         %COMMENT Z=0-RTCALL,Z=1STORE(=), Z=2 FETCH,Z=3 FETCH ADDR,Z=4%C
         STORE N<-), Z=6 STORE PTR, Z=12 FETCH ARRAYHEAD, Z=11 STORE %C
         ARRAY HEAD
         %SWITCH S,FUNNY(10:15)
         %SWITCH SW(0:8),MOD(0:31)
         FNAME=A(P); COPYTAG(FNAME)
               ->3 %UNLESS I=-1; FAULT(16)
               I=LEVEL; J=0; K=FNAME
         PTYPE=7;STORE TAG(K,N)
         K=N; N=N+4; UNPACK
3:       JJ=J; JJ=0 %IF JJ=15
         LEVELP=I; DISPP=K
         ->502 %IF TYPE=7
         -> 500 %IF Z=0 %AND (ROUT#1 %OR 0#TYPE#6)
         ->FUNNY(Z) %IF Z>=10
         ->501 %IF ROUT=1
         ->SW(TYPE)
500:     ->SW(3) %IF TYPE=3
         FAULT(17) %UNLESS TYPE=7; ->502
SW(6):   ->661 %UNLESS Z=3 %AND ARR=1
         K=K<<2; ARR=0; I=10; ->600
SW(4):                                 !RECORD FORMAT NAME
661:     FAULT(20)
SW(7):502:     P=P+1;                  ! NAME NOT SET
         PTYPE=1; UNPACK; ->6 %IF A(P)=2; ->102
FUNNY(11): ->1011 %IF TYPE=3
         FAULT(17) %UNLESS ARR=1 %AND NAM=1 %AND K>>12=0
         PRX(X'90',0,3,I,K); ->91
1011:          PCLOD(44);->SW(3);      !STM 0,3,0(11) - LA 11,16(11)
S(11):   MOVER(WSPR,-16)
         PSS(X'D2',16,1,0,WSPR,0); ->91
FUNNY(12):     ->SW(3) %IF TYPE=3
         ->1202 %IF ARR=2;             ! VECTORS
         FAULT(17) %UNLESS ARR=1
1201:    PRX(X'98',0,3,I,K&4095); ->91
1202:    FROM2(K,K); ->1201
S(12):   ->1201 %IF TYPE=3 %AND ARR=1
         PRR(X'18',0,1)
         PRX(X'5A',0,0,I,K)
         PRX(X'5A',1,0,I,K+4)
         PRX(X'98',2,3,I,K+8); ->91
FUNNY(13):     ! SET BASE & DISP FOR ROUTINE ADDR
         ->SW(3) %IF TYPE=3
         ->1302 %IF PTYPE=10006
         ->1301 %IF ROUT=1 %AND NAM&1=1
         BASE=GLA; FROM1(K,DISP)
         INDEX=0; DISP=RA(DISP)
         DISP=DISP+4 %IF J=14;         ! EXTERNAL ROUTINES SKIP LINK
1300:    ->500 %UNLESS ROUT=1
         ->91
1301:    BASE=I; FROM1(K,DISP)
         INDEX=0; ->91
1302:    CSNAME(Z,REG); ->6
S(13):   FROM2(K,K); ->1300
FUNNY(15):                             ! FETCH RECORD NAME
         ->1501 %IF PTYPE=10006
FUNNY(14):     ! STORE INTO RECORD NAME
         RR=0; %IF ARR=0 %AND INREG#0 %AND A(P+1)=2=A(P+2)%THEN RR=INREG
         ->SW(3) %IF TYPE=3; ->661
S(14):   FAULT(20) %UNLESS TYPE=3 %AND NAM=1
         PRR(X'18',RR,REG) %IF REG#RR#0
         DISP=0 %IF DISP<0
         R13=0 %IF R13=BASE<<12!DISP
1401:    DUMP(Z-13,REG,DISP,INDEX,BASE)
         P=P+1; ->9005
S(15):   ->661 %UNLESS TYPE=3
         ->1401 %IF DISP>=0
         DUMP(0,REG,0,INDEX,BASE); P=P+1; ->9005
1501:    CSNAME(Z,REG)
         FAULT(22) %UNLESS A(P)=2 %AND A(P+1)=2; P=P+2; ->9005
SW(3):   ! RECORD
         FROM2(K,JJJ)
         CRNAME(Z,0,TAGS(A(P)),I,JJJ)
         ->S(Z) %IF Z>=10
         ->5020 %IF TYPE=5
         ->601 %UNLESS Z=0
         ->500 %UNLESS ROUT=1 %AND NAM=1
         LEVELP=PARK(BASE); RR=DISP
         PTYPEP=PTYPE; FROM2(K,JJ)
         FROM2(JJ,K); ->22
SW(5):                                 !STRINGS
         BASE=I; INDEX=0; DISP=K
         JJJ=2; ->5000 %UNLESS ARR=1
         CANAME(Z,I,K,TAGS(FNAME),0,0)
4998:    NAM=NAM>>1;JJJ=0
         ->5000 %UNLESS Z=3
         DUMP(0,REG,DISP,INDEX,BASE)
         PRX (X'58',2,0,LEVELP,DISPP+8) %IF CHECKS#0
         PACLOD(10,6,REG<<4); ->9
         %COMMENT L 2,LMAX. BCTR 2,0. SLL 2,24. OR REG,2
5000:    ->605 %IF 2<=Z<=3
         PRR(X'18',4,REG) %UNLESS REG=4
         DUMP(JJJ,1,DISP,INDEX,BASE)
         ->5001 %IF ARR=0
         PRX(X'58',2,0,LEVELP,DISPP+8) %IF Z=4 %OR CHECKS#0
         I=2; K=3
5001:    STORE STRING(Z,4,1,I,K);->9
5020:    ! STRINGS IN RE CORDS
         ->5025 %IF ARR=1
         ->9 %IF 2<=Z<=3
         PRR(X'18',4,REG) %UNLESS REG=4; ->5001
5025:    ! STRING ARRAYS IN RECORDS
         LEVELP=I; DISPP=K; ->4998
SW(8):                                 !REGISTER VARIABLE
         FAULT(29) %UNLESS 1<=Z<=2 %OR Z=4
         ->9 %IF K=REG
         %IF Z=2 %THEN PRR(X'18',REG,K) %ELSE PRR(X'18',K,REG)
         ->9
SW(0):   %UNLESS Z=3 %OR Z>10 %THEN %START
         FAULT(12); TYPE=1; PTYPE=PTYPE+1; %FINISH
SW(2):                                 !REAL
SW(1):   ->600 %IF ARR=0;              ! TYPE 1 = %INTEGER
         CANAME(Z,I,K,TAGS(FNAME),0,0)
         TYPE=1 %IF TYPE=0;            ! IN CASE OF ABUSE OF ARRAYNAME
         NAM=NAM>>1; ->601
501:     ->503 %UNLESS Z#0 %AND PTYPE=10000;!     ROUTINES
         FAULT(23); PRINTNAME(A(P)); ->503
503:     PTYPEP=PTYPE
         ->20 %UNLESS PTYPE=10006
         CSNAME(Z,REG)
         ->202 %IF ROUT=1 %AND NAM>=1 %AND Z#0; ->6; ! MAPS
20:      KK=K; FROM LIST(KK,RR,K)
22:      ->21 %UNLESS K=1000; FAULT(21); ->502
21:      CRCALL(KK)
         PTYPE=PTYPEP; UNPACK
         ->37 %IF NAM&1=1
         ->36 %IF JJ=14
         DUMP(2,1,RA(RR),0,GLA)        ;! RT ADDR TO REG1
         PRX(X'45',LINK,0,GLA,116);    ! BAL 15,SR IN PERM
371:     MONE=1; R13=0
         P=P+1
         ->1 %IF PTYPE=10000 %OR PTYPE=11000;    ! ROUTINE OR RTNAME
         ->201 %IF NAM>1;              !MAPS
         FAULT(29) %UNLESS Z=2;        !FN OUT OF CONTEXT
         ->43 %IF TYPE=2
44:      PRR(X'18',REG,1) %UNLESS REG=1; ->1
43:      PRR(X'28',REG,2) %UNLESS REG=2; ->1
36:      ! CALL OF EXTERNAL ROUTINE
               PACLOD(55,4,RA(RR)+4);  !STM 4,14 - LM 12,14-BALR 13,14
         ->371
37:       ! CALL OF RT PARAM******** REGISTERS MUST BE RESET
         REGISTER(LEVELP)=0 %IF LEVELP<RBASE
               PACLOD(61,4,LEVELP<<12!RR)
%COMMENT STM 4,14,?--LM 12,15 ? -- LM 5,9,20(15) -- BALR 15,14
         ->371
201:     %COMMENT - REAL MAPS AND INTEGER MAPS
         NEST=1
202:
         ->205 %IF TYPE=5;             ! STRING MAPS
         ->203 %IF Z=3
         JJJ=Z; JJJ=1 %IF Z=4
         JJJ=TYPE<<3+PREC<<1-8+JJJ
         DUMP(JJJ,REG,0,0,NEST)
         CHECK CAPACITY(REG,0,0,NEST) %IF Z=1 %AND CHECKS=1
         TEST ASS(REG) %IF Z=2 %AND UNASS=1
         ->1
203:     PRR(X'18',REG,NEST) %UNLESS REG=NEST; ->1
205:     %COMMENT STRING MAPS
         %IF NEST#1 %THEN PRR(X'18',1,NEST)
         ->206 %IF 2<=Z<=3
         STORE STRING(Z,REG,1,0,255); ->1
206:           PCLOD(69);->44;         ! LA 0,255--SLL 0,24 OR 1,0
               !ARR=0
600:     BASE=I; INDEX=0; DISP=K
601:     ->602 %IF Z=6
         ->MOD(NAM<<4!PREC<<2!Z&3)
602:     FAULT(17) %IF NAM=0
         R13=0 %IF R13=BASE<<12!DISP
         JJJ=1; ->605
MOD(1):  ! INTEGER STORE (=)
MOD(0):  ! INTEGER STORE(<-)
MOD(5):  ! BYTE STORE(=)
MOD(4):  ! BYTE STORE(<-)
MOD(9):  ! SHORT STORE(=)
MOD(8):  ! SHORT STORE(<-)
MOD(12):                               !LONG REAL STORE (<-)
MOD(13):                               !LONG REAL STORE (=)
MOD(2):                                !INTEGER OR REAL FETCH
MOD(14):                               !LONGREAL FETCH
         JJJ=Z; JJJ=1 %IF Z=4
         JJJ=TYPE<<3+PREC<<1-8+JJJ
605:     DUMP(JJJ,REG,DISP,INDEX,BASE)
         CHECK CAPACITY(REG,DISP,INDEX,BASE) %IF Z=1 %AND CHECKS=1
         TEST ASS(REG) %IF Z=2 %AND UNASS=1
         ->9
MOD(31):                               !LONG REAL NAME FETCH ADDR
MOD(19):       ! INTEGER NAME FETCH ADDR
MOD(23):       ! BYTE    NAME FETCH ADDR
MOD(27):       ! SHORT   NAME FETCH ADDR
         JJJ=2;->605
MOD(15):                               !LONG REAL FETCH ADDR
MOD(3):  ! INTEGER FETCH ADDR
MOD(7):  ! BYTE    FETCH ADDR
MOD(11): ! SHORT   FETCH ADDR
         JJJ=0;->605
MOD(6):  ! BYTE  FETCH
MOD(10): ! SHORT FETCH
         JJJ=PREC<<1+2;->605
MOD(16):       ! INTEGER NAME STORE (<-)
MOD(20):       ! BYTE    NAME STORE (<-)
MOD(24):       ! SHORT   NAME STORE (<-)
MOD(17):       ! INTEGER NAME STORE (=)
MOD(21):       ! BYTE    NAME STORE (=)
MOD(25):       ! SHORT   NAME STORE (=)
MOD(28):                               !LONG REAL NAME STORE (<-)
MOD(29):                               !LONG REAL NAME STORE (=)
MOD(18):       ! INTEGER NAME FETCH
MOD(22):       ! BYTE    NAME FETCH
MOD(26):       ! SHORT   NAME FETCH
MOD(30):                               !LONG REAL NAME FETCH
         RP13=R13; R13=BASE<<12!DISP
         PRX(X'58',LINK,INDEX,BASE,DISP) %UNLESS R13=RP13 %AND INDEX=0
         JJJ=Z; JJJ=1 %IF Z=4
         JJJ=TYPE<<3+PREC<<1-8+JJJ
         DUMP(JJJ,REG,0,0,LINK)
         CHECK CAPACITY(REG,0,0,LINK) %IF Z=1 %AND CHECKS=1
         TEST ASS (REG) %IF Z=2 %AND UNASS=1
9:       ->1 %UNLESS ARR=0
91:      P=P+1
               ->6 %IF A(P)=2
               FAULT (19)
102:           SKIP APP; ->1
 6:            P=P+1
1:       P=P+1; ->9005 %IF A(P-1)=2
         FAULT(69); ->91
9005:    %END
         %ROUTINE CRCALL (%INTEGER CLINK)
         %SHORTROUTINE
         %SWITCH FPD(0:3)
         %INTEGER KK,II,III,Q,QQ,QQQ,PP,RF
         %ROUTINESPEC MOVEBACK
         %INTEGER MOVED,TOMOVE,TYPEP
         %SHORTINTEGER LIST; LIST=0
         FFLAG=0; KK=COUNT APS
         P=P+1; ->2 %IF K=KK
         FAULT(19); PRINTNAME(FNAME)
         SKIP APP; P=P-1; ->99
2:       ->99 %IF K=0;                 ! NO PARAMETERS
         Q=0; QQ=64; RF=1-FFLAG;       ! RF=1 NO NEED TO MOVE WSPR
         MOVED=0; RF=1 %IF KK=1
7:       MLINK(CLINK)
         FROM1(CLINK,PTYPE)
         P=P+1; UNPACK
         II=TYPE; III=PREC; QQQ=P
         PP=(NAM<<1!ARR)&3
         ->10 %UNLESS(PP=0 %AND ROUT=0) %OR(A(P)=4 %AND A(P+1)=1)
         ->12 %IF ROUT=1; ->FPD(PP)
10:      P=QQQ; SKIP EXP;
11:      FAULT (22); ->53
         %COMMENT ROUTINE TYPE PARAMETERS
12:      II=PTYPE; P=P+2; CNAME(13,0)
         ->10 %IF 1000#!PTYPE-II!#0
         ->10 %IF A(P)=1; P=P+1
         ->13 %IF J=14;      ! EXTERNAL
         ->15 %IF NAM&1#0;             ! RT NAME OR RTTYPE
         DUMP(2,2,DISP,INDEX,BASE);      ! PICK UP RT ADDR
         PRX(X'5A',2,0,GLA,28);        ! RELOCATE
         PCONST(X'180C181D');          ! LR 0,12 LR1,13 PERM AND GLA
         PUSH(LIST,QQ+12,0); ->69
13:      PRX(X'98',0,2,BASE,DISP);     ! CODE,GLA,EP
         PRR(X'18',3,9); ->69;         ! ANYTHING D W ALIGNED AS ENVRMNT
15:      PRX(X'98',0,3,BASE,DISP); ->69
FPD(0):  ->41 %IF PREC=3
         ->45 %IF TYPE=5
         -> 39 %UNLESS UNASS=0 %AND TYPE=1
         PP=P; TYPEP=PREC
         II=TSEXP(III)
         ->42 %IF II=10 %AND TYPEP=0
         ->43 %IF II=1 %AND TYPEP=1
         P=PP; TYPE=1
39:      CSEXP(0,TYPE)
         MOVE BACK
         DUMP(8*TYPE-7,NEST,QQ-MOVED,0,WSPR)
         CHECK CAPACITY(NEST,QQ-MOVED,0,WSPR) %IF CHECKS=1
         TOMOVE=4;->50
42:      MOVEBACK
         PSS(X'D2',4,WSPR,QQ-MOVED,I,K)
         TOMOVE=4; ->50
43:      MOVEBACK
         PSI(X'92',III,WSPR,QQ-MOVED+3)
         TOMOVE=4; ->50
41:      II=0; II=4 %UNLESS QQ&7=0;    !LONG REAL
         CSEXP(0,3)
         DUMP(15,NEST,QQ-MOVED+II,0,WSPR)
         TOMOVE=8+II;->50
45:      CSTREXP(4); FROM2(CLINK,III)
         PRX(X'41',1,0,WSPR,QQ-MOVED+4)
         STORE STRING(1,4,1,0,III-1)
         TOMOVE =(III+7)&(-4); ->50
FPD(2):                                ! NAME TYPES INCLUDES RECORDNAME
         P=P+2
         %IF TYPE=3 %THEN CNAME(15,1) %ELSE CNAME(3,1)
         ->10  %IF A(P)=1; P=P+1;      ! CHECK NO RESTOF EXPRN
         ->11 %UNLESS (II=TYPE %AND III=PREC) %OR II=0
         MOVE BACK
         DUMP(1,1,QQ-MOVED,0,WSPR)
         TOMOVE=4;->50 %UNLESS II=0
         FAULT(12) %UNLESS 2>=TYPE
         PSI(X'92',PREC<<3!TYPE,WSPR,QQ-MOVED); ->50;!FLAG FOR %NAME
FPD(1):FPD(3):                         ! ARRAYNAME (+ARRAY VALUE)
         P=P+2; CNAME(12,0); ->10 %IF A(P)=1;     ! REST OF EXPRN
         P=P+1
         FROM2(CLINK,PP)
         %IF PP=0 %THEN %START; REPLACE2(CLINK,J); %FINISH
         FAULT(22) %UNLESS ARR>0 %AND(J=0 %OR PP=0 %OR J=PP)
         FAULT(22) %UNLESS II=0 %OR(TYPE=II %AND III=PREC)
69:      MOVE BACK
         PRX(X'90',0,3,WSPR,QQ-MOVED); ! STM
         TOMOVE=16
50:      QQ=QQ+TOMOVE
         ->53 %IF RF=1 %OR Q=KK-1
          II=(QQ+7)&(-8)-MOVED
         MOVER(WSPR,II); MOVED=MOVED+II
53:      Q=Q+1; ->7 %UNLESS Q=KK
         MOVER(WSPR,-MOVED) %UNLESS RF=1
55:      POP(LIST,Q,QQ); ->99 %IF Q=-1
         PRX(X'50',WSPR,0,WSPR,Q); ->55;! POINTER TO SAVE AREA RTTYPES
         %ROUTINE MOVEBACK
         ->1 %IF QQ>=MOVED
         MOVER(WSPR,QQ-MOVED); MOVED=QQ
1:       %END
99:      %END
%COMMENT Z=1 FOR= ,4 FOR <- AND MAX LENGTH IN BYTE DEFINED BY BML&DML
         %ROUTINE     STORE STRING(%INTEGER Z,FROM,TO,BML,DML)
         %SHORTROUTINE
%COMMENT REGISTER 2 IS ASSUMED TO BE USABLE.
         FAULT(239) %UNLESS TO=1 %AND FROM=4
         ->10 %IF Z=4
         ->2 %IF CHECKS=0
         ->1 %IF BML>0
         PSI(X'95',DML,FROM,0); ->3;   ! CLI FOR FIXED LENGTH
1:
         PSS(X'D5',1,FROM,0,BML,DML)   ;!CLC_ACTUALL(1),MAX
3:
         PRX(X'47',2,0,CODER,88)       ;!BH_FAIL
2:       PRX(X'43',2,0,FROM,0)         ;!IC_2,ACTUALL
         PRX(X'44',2,0,GLA,STRINST)    ;!EX_2,MOVE
         ->99
10:      PRX(X'43',2,0,BML,DML)        ;!IC_2,MAXL
         PPJ(39)
99:      %END
               %ROUTINE TEST NST
               FNAME=K
               FAULT(7) %UNLESS FIND(FNAME,NAME(LEVEL))=-1
               %END
         %ROUTINE CUCI
         %SHORTROUTINE
         %ROUTINESPEC DXB
         %ROUTINESPEC DLB
         %ROUTINESPEC DB
         %ROUTINESPEC CUCS
         %INTEGER Z,KK,X,OPCODE,REG
         %SWITCH SW(1:4),S(1:8)
         P=2; ->SW(A(P))
SW(1):         ! **(N),(@')(NAME)(APP)
         NEST=A(3); P=5; Z=A(4)-1
         Z=3 %IF Z=0; CNAME(Z,NEST)
         ->99
SW(2):   PPJ(A(P+1)); ->99
SW(4):   ! *PUT_CONST
         ->401 %IF A(P+1)#9
         PLANT(A(P+2)); P=P+3; ->99
401:     FAULT(32) %UNLESS A(P+1)=1
         PLANT(A(P+3));                ! LEAST SIGNIFICANT 16 BITS ONLY
         P=P+4; ->99
SW(3):   OPCODE=A(P+2);P=P+3; ->S(A(P-2))
S(1):    ->87 %IF OPCODE=0;
         PRR(OPCODE,A(P),A(P+1)); P=P+2; ->99;           ! RR
S(2):    REG=A(P); P=P+1;DXB;                    !RX
11:      PRX(OPCODE,REG,X,I,K);->99
S(3):    REG=A(P); X=A(P+1);P=P+2;               !RS
         DB; ->11
S(4):    DB;Z=0;->41 %IF A(P)=2;Z=A(P+2);        !SI
         FAULT(32) %UNLESS A(P+1)=9 %AND Z<256
         P=P+2
41:      PSI(OPCODE,Z,I,K);P=P+1; ->99
S(5):    REG=A(P);P=P+1; DB;                     !SHIFT INSTR.
         X=0; ->11
S(6):    DLB;KK=K;Z=X;REG=I;DB;                  !SS FORMAT
         Z=1 %IF Z=0
61:      PSS(OPCODE,Z,REG,KK,I,K); ->99
S(7):    DLB; KK=K; Z=X; REG=I;                  !PACKED DECIMAL
         DLB; Z=1 %IF Z=0
         X=1 %IF X=0
         Z=(Z-1)<<4!X; ->61
S(8):    REG=A(P); P=P+1;                        !FUNNIES
         -> 85 %IF OPCODE=X'80'       ;! IDL
         ->83 %IF OPCODE=10;           ! SVC
         PRR(OPCODE,REG,0);->99
83:      PLANT(X'A00'!REG); ->99
85:      PSI(OPCODE,REG,0,0); ->99
87:      CNOP(A(P),A(P+1)); ->99
         %ROUTINE DB
         ->2 %IF A(P)=1
         K=A(P+1); I=0; P=P+3
         ->99 %IF A(P-1)=2
         I=A(P);P=P+1;->99
2:       CUCS
99:      %END
         %ROUTINE DXB
         %SWITCH SW(1:3)
         ->2 %IF A(P)=2
         CUCS;X=0;P=P+1
         ->99 %IF A(P-1)=2
         X=A(P);P=P+1; ->99
2:       K=A(P+1);P=P+2;I=0;X=0
         ->SW(A(P))
SW(1):   X=A(P+1);P=P+1
SW(2):   I=A(P+1);P=P+1
SW(3):   P=P+1
99:      %END
         %ROUTINE DLB
         ->2 %IF A(P)=2
         K=A(P+1); X=A(P+2); I=A(P+3); P=P+4; ->99
2:       CUCS; X=A(P); P=P+1
99:      %END
         %ROUTINE     CUCS
         %SWITCH UTYPE(0:8)
         P=P+1
         ->10 %IF A(P)=2
         FNAME=A(P+1); COPYTAG(FNAME)
         P=P+3; ->1 %UNLESS I=-1
         FAULT(16); J=0; I=LEVEL; PTYPE=7; UNPACK
         STORE TAG(FNAME,N);K=N;N=N+4
1:       FAULT(33) %IF ROUT=1; ->UTYPE(TYPE)
UTYPE(3):      FROM2(K,K); ->9;        ! RECORDS
UTYPE(4):      FROM1(K,K); ->9;        ! FORMATS
UTYPE(8):FAULT(33); ->9
UTYPE(6):      FROM1(K,K);             ! SWITCHES
         K=K-CODEBASE(OLDI); FAULT(99) %IF K>4095
         I=10
UTYPE(0):UTYPE(1):UTYPE(2):UTYPE(5):UTYPE(7):
         ->9 %UNLESS ARR=2;            ! VECTOR
         FROM2(K,K);                   ! EXTRACT DISPLACEMENT
9:       ->99 %IF A(P-1)=2
         K=K+A(P); P=P+1; ->99
10:      K=A(P+2)+(A(P+1)-1)<<14
         J=FIND(K,LABEL(LEVEL))
         ->25 %IF J=-1
         K=J-CODEBASE(LEVEL); I=10
         FAULT(99) %IF K>4095; P=P+3; ->99
25:      PUSH(JUMP(LEVEL),CA!LABSET,K)
         K=0; I=0; P=P+3
99:      %END
99:      %END
         %ROUTINE     TEST ASS(%INTEGER REG)
         %SHORTROUTINE
         %INTEGER J
         %RETURN %UNLESS 1<=TYPE<=2
         ->5 %IF TYPE=1
         J=X'79'; J=X'69' %IF PREC=3
3:       PRX(J,REG,0,GLA,128)
         PRX(X'47',8,0,CODER,40); ->99
5:       ->99 %UNLESS PREC=0
         J=X'59'; ->3
99:      %END
         %ROUTINE     GXREF(%INTEGER NAME,HASH)
         %SHORTROUTINE
         %INTEGER I,J,K,N,NP
         I=N0; N0=N0+7; J=WORD(NAME)
         ST(I+1)=0; ST(I+2)=0; ST(I+3)=0
         N=LETT(J); NP=N; NP=8 %IF NP>8
         K=ADDR(ST(I+5)); ->1 %IF HASH=0
         ST(I+5)=HASH<<16!'#'<<8
         K=K+2; N=N+2
         NP=6 %IF NP>6
1:       %CYCLE NP=1,1,NP
         BYTEINTEGER(K+NP)=LETT(J+NP); %REPEAT
         N=8 %IF N>8; ST(I+4)=X'80000000'; ! MARK NEW FORMAT
         ST(I)=XREFLINK; XREFLINK=I<<2; ! LINK IN REFERENCE
         BYTE INTEGER(ADDR(ST(I+5)))=N
         N0=N0+1 %IF N=8
         %END
         %ROUTINE UNDCRF (%SHORTINTEGERNAME OPHEAD)
         %INTEGER I,J
         %SHORTINTEGER OP
         %COMMENT UNSCRAMBLES RECORD FORMAT TAGS LIST & SIDECHAIN
         POP (OPHEAD,I,J);             ! LST ITEM IS DESPMENT
1:       POP (OPHEAD,I,J)
         ->9 %IF I=-1
         OP=J;PTYPE=I>>4&X'FFFF';UNPACK
         %IF ROUT=1 %OR TYPE=3 %THEN CLEAR LIST(OP)
         ->1
9:       %END
         %ROUTINE CLT
         %SHORTROUTINE
         %COMMENT P ON PHRASE TYPE AT ENTRY - TO NEXT PHRASE AT EXIT
         TYPE=TYPEFLAG(A(P))
         PREC=TYPE>>3; TYPE=TYPE&7
         PREC=3 %IF TYPE=2 %AND ALL LONG#0
         ACC=BYTES(PREC);P=P+1
         ->99 %UNLESS TYPE=5
         ->2 %UNLESS A(P)=2
         ACC=0; P=P+1; ->99
1:       P=P+1;FAULT(70);->99
2:       P=P+1;ACC=A(P)+1
         ->1 %UNLESS 2<=ACC<=256
         P=P+1
99:      %END
         %ROUTINE     CQN(%INTEGER P)
         %SHORTROUTINE
         %BYTEINTEGER I
         I=A(P);NAM=0;ARR=0
         NAM=2 %IF I=1 ;ARR=1 %IF I<=2
         NAM=NAM!1 %IF I<=3;ACC=16 %IF ARR=1
         ACC=4 %IF I=3
         %END
         %ROUTINE SKIP EXP
         %SHORTROUTINE
         %SWITCH SW(1:4);%INTEGER J
         %OWNINTEGER RT=10000
3:       P=P+1; ->SW(A(P));            ! SWITCH ON OPERAND
SW(1):   P=P+2;                        ! OPERAND = NAME
         J=ADDR(ASLIST(TAGS(A(P-1))))
         ->5 %IF SHORT INTEGER(J)<RT; FFLAG=1
5:       SKIP APP; P=P+1
         ->1 %IF A(P-1)=2; P=P+1; ->5
SW(2):                                 ! CONST
         P=P+1; J=A(P)
         %IF J=9 %THEN %START; P=P+2; ->1; %FINISH
         %IF J=1 %THEN %START; P=P+3; ->1; %FINISH
         %IF J=2 %THEN %START; P=P+5; ->1; %FINISH
         P=P+A(P+1)&X'FE'+3; ->1
SW(3):SW(4): P=P+1; SKIP EXP
1:       P=P+1; ->3 %IF A(P-1)=1
         %END
          %ROUTINE SKIP APP;           ! SKIPS ACTUAL PARAMETER PART
5:       P=P+1; ->1 %IF A(P-1)=2; SKIP EXP; ->5
1:        %END
         %ROUTINE     CQUERY(%INTEGER REG)
         %SHORTROUTINE
         PSI(X'95',0,GLA,1);           ! CLI 1(GLA),0
         PJ(8,PLABEL-1);               ! JUMP ROUND IF QUERIES OFF
           ->1 %IF TYPE=2
         ->5 %IF TYPE=5
         PRR(X'18',1,REG) %UNLESS REG=1;         ! LR 1,REG
         PCONST(X'4120000B');          ! LA 2,11
         PPJ(4); ->9;                  ! TO WRITE
1:       PCONST(X'41100020'); PPJ(3);  ! OUTPUT SPACE
         %IF QPREAL=0 %THEN %START
         QPREAL=N0<<2+4
         ST(N0)=XREFLINK; XREFLINK=QPREAL-4
         ST(N0+4)=8; ST(N0+5)=M'I#PR'; ST(N0+6)=M'INTF'
         N0=N0+7; %FINISH
         PACLOD(82,1,REG<<4)
         %COMMENT STD REG,64(11).LA 0,12.ST 0,68(11) %ABD SS ENTRYPRINTF
         PACLOD(55,4,QPREAL); ->9
5:       PCONST(X'4110000A'); PPJ(3);  ! NEWLINE
         PRR(X'18',1,REG); PPJ(5)
9:       PLAB(-1)
         %END
         %ROUTINE     LOADAD(%INTEGER REG,BASE,X,DISP)
         %SHORTROUTINE
         ! LOADS ADDRESS & DEALS CORRECTLY WITH DISP>4095
         %INTEGER I
               PRX(X'41',REG,X,BASE,DISP&4095)
         I=PAGENO(DISP)
         PRX(X'5A',REG,0,GLA,4*I)%UNLESS 4095>=DISP
         %END
               %INTEGERFN TSEXP(%INTEGERNAME CODE)
         %SHORTROUTINE
         %SWITCH SW(1:4)
         TYPE=1
         ->9 %IF 1#A(P)#4; ->SW(A(P+1))
SW(1):   CODE=A(P+2); COPYTAG(CODE)
         %IF PTYPE=10006 %THEN %START
         TYPE=TSNAME(K);PREC=TYPE>>3
         TYPE=TYPE&7; %FINISH
         ->40 %IF TYPE=8;              !REGISTER VARIABLE
         ->30 %IF TYPE=3 %AND ARR=0 %AND INREG#0
         ->50 %IF ARR=2 %AND TYPE=1
         ->9 %UNLESS A(P+3)=2 =A(P+4); ! NO APP OR ENAME
         ->9 %UNLESS ROUT=0 %AND ARR=0
         ->20 %IF TYPE=5
         ->9 %UNLESS NAM=0
         ->14 %IF TYPE=2
         ->9 %UNLESS TYPE=1
         ->11 %IF A(P+5)=2;            ! NO RST OF EXPS
         ->9 %UNLESS A(P+6)=2=A(P+7)
         ->9 %UNLESS A(P+8)=9 %AND A(P+10)=2
         CODE=A(P+9); P=P+11; %RESULT=100
11:      P=P+6; %RESULT=10+PREC
14:      ->9 %UNLESS A(P+5)=2;         !NO NOT OF EXPRN
         P=P+6; %RESULT=14+PREC&1
20:      ->9 %UNLESS A(P+5)=2
         P=P+6; %RESULT=20
30:      ->9 %UNLESS A(P+3)=2 %AND A(P+4)=1;     ! NO APP BUT ENAME
         P=P+5; FROM1(K,FNAME); I=INREG
         K=DISPLACEMENT(FNAME); UNPACK
         ->9 %IF I=-1 %OR ARR#0 %OR ROUT#0
         ->9 %UNLESS 1<=TYPE<=2 %AND A(P+1)=2=A(P+2)
         ->9 %UNLESS A(P+3)=2;         ! NO REST OF EXPRN
         P=P-2; ->11 %IF TYPE=1; ->14
40:      ->41 %IF A(P+5)=2;            !NO REST OF EXP
         ->9 %UNLESS A(P+6)=2=A(P+7)
         ->9 %UNLESS A(P+8)=9 %AND A(P+10)=2
         CODE=A(P+9);P=P+11; %RESULT=101
41:      P=P+6; %RESULT=50
50:      ->9 %UNLESS A(P+3)=1 %AND A(P+4)=4 %AND A(P+5)=2
         ->9 %UNLESS A(P+6)=9 %AND A(P+7)<256 %AND A(P+8)=2
         ->9 %UNLESS A(P+9)=2 %AND A(P+10)=2 %AND A(P+11)=2
       FROM1(K,K); K=K+A(P+7)*BYTES(PREC)
         ->9 %UNLESS 0<=K<4096
         P=P+12; %RESULT=10+PREC
SW(2):   TYPE=A(P+2)&7
         ->9 %UNLESS A(P+2)=9
         ->21 %IF A(P+4)=1;            ! REST OF EXPR
               CODE=A(P+3); P=P+5
         %RESULT=1 %IF 256>CODE
         %RESULT=2
21:      %IF A(P+5)=12 %THEN TYPE=5;! STRING EXPRESSION
SW(3):SW(4):9:%RESULT=0
               %END
               %ROUTINE     MOVE R(%INTEGER R,N)
         %SHORTROUTINE
               ->99 %IF N=0; ->2 %IF 0>N
         DUMP(0,R,N,0,R); ->99
2:       N=-N; ->3 %UNLESS N=4 %OR N=8
         PRX(X'5A',R,0,GLA,76+N); ->99
3:       PCONST(X'41000000'!N);        ! LA 0,N
         PRR(X'1B',R,0);               ! SR R,0
99:      %END
               %INTEGERFN     FIND PP
         %SHORTROUTINE
               %INTEGER I
         %CYCLE I=9-RLEVEL,-1,4
               ->1 %IF REGISTER(I)=0
               %REPEAT
         %RESULT=0
1:             REGISTER(I)=1
               %RESULT=I
               %END
         %ROUTINE     UNPARK(%INTEGER OPCODE,REG,Q)
         %SHORTROUTINE
         ->1 %IF 0>Q
         PRR(OPCODE-X'40',REG,Q); REGISTER(Q)=0; ->9
1:       Q=!Q!; PRX(OPCODE,REG,0,RBASE,Q)
         PUSH(WSP(LEVEL),0,Q);
9:       %END
               %INTEGERFN     PARK(%INTEGER REG)
         %SHORTROUTINE
         %INTEGER I,J,P
         P=CLAIMABLE REG
         ->1 %IF P=0
         REGISTER(P)=1
               ->2 %IF P=REG
         PRR(X'18',P,REG);             ! LR P,REG
2:             %RESULT=P
1:       POP(WSP(LEVEL),I,J); ->3 %UNLESS J=-1
         J=N; N=N+4
3:       DUMP(1,REG,J,0,RBASE); %RESULT=-J
               %END
         %INTEGERFN     CLAIMABLE REG
         %SHORTROUTINE
         %INTEGER I
         -> 1 %IF RBASE<= 4
         %CYCLE I=5,1,RBASE
         %RESULT=I %IF REGISTER(I)=0
         %REPEAT
1:       %RESULT=0
         %END
         %INTEGERFN PARKF (%INTEGER REG,PREC)
         %SHORTROUTINE
         %INTEGER I,J
         ->10 %UNLESS PREC=0
         POP(WSP(LEVEL),I,J)
         ->3 %UNLESS J=-1
         J=N; N=N+4
3:       DUMP(9+2*PREC,REG,J,0,RBASE)
         %RESULT=J
10:      J=GET DBLE WRD;->3             ;!PARKING SPACE
         %END
         %INTEGERFN GET ARR WSP
         %COMMENT PRODUCES 6 CONTIGUOUS WORDS UNDER BASE
         %COMMENT REGISTER COVER FOR ARRAY ACCESS
         %INTEGER I,J
         POP(MDARR(LEVEL),I,J)
         ->1 %IF J>0
         J=N;  N=N+24
1:       %RESULT =J
         %END
         %ROUTINE     RHEAD(%INTEGER KK)
         %SHORTROUTINE
         %INTEGER FLAG,W1,W2
         FLAG=KK;FLAG=10000 %IF RLEVEL=0
         ->5 %IF RLEVEL=0
         ->5 %UNLESS LIST=0
         NEWLINE;WRITE(LINE,5);SPACES(3*LEVEL)
         %IF KK<0 %THEN %PRINTTEXT'BEGIN' %ELSE %START
         %PRINTTEXT'RT/FN/MAP '; PRINTNAME(KK); %FINISH
         WRITE(CA,6)
5:       LEVEL=LEVEL+1
         ->6 %IF FLAG<0
         RLEVEL=RLEVEL+1;RBASE=10-RLEVEL;R13=0
         FAULT(35) %IF RBASE=4 %OR REGISTER(RBASE)#0
         REGISTER(RBASE)=1
6:       FAULT(34) %IF LEVEL=10
         FAULT(105) %IF LEVEL>MAX LEVELS
         NMDECS(LEVEL)=0
         ->10 %IF FLAG>=0
         PRX(X'90',10,11,RBASE,N);     ! STM 10,11,?
         N=N+12;W1=RBASE;W2=N-4
         ->20
10:      ->25 %IF KK<0
         FROM LIST(JJ,J,K);ST(RA(J)>>2)=CA
         PRX(X'50',LINK,0,WSPR,60);    !SAVE LINK
         W1=WSPR; W2=0
20:      ->21 %IF DIAGS1=0
         PSS(X'D2',4,W1,W2,GLA,20)
         LOADAD(0,0,0,LINE)
         PCONST(X'4000D014') ;         !STH 0,20(GLA)
21:      MONE=1;SET LINE
25:      PRR(X'18',RBASE,WSPR) %UNLESS FLAG<0
         %IF KK<0 %THEN W1=0 %ELSE W1=WORD(KK)
         L(LEVEL)=LINE;M(LEVEL)=W1
         RNEXT(LEVEL)=NEXT
         %RETURN %IF FLAG<0
         SET(RLEVEL)=CA+2
         PRX(X'41',WSPR,WSPR,0,0);     ! LA WSP,?(WSP)
         %IF CHECKS#0 %THEN PCLOD(75); ! CHECK VFOR EXCESS BLOCKS
         N=64; NMAX=N;
         %END
         %ROUTINE     SET80(%INTEGER WHERE,N)
         %RETURN %IF N<=2
         %INTEGER K
         %SHORTROUTINE
         PSI(X'92',X'80',RBASE,WHERE)
         N=N-1; K=WHERE
1:       ->2 %IF N<=256
         PSS(X'D2',256,RBASE,K+1,RBASE,K)
         K=K+256; N=N-256; ->1
2:       PSS(X'D2',N,RBASE,K+1,RBASE,K)
         %END
         %ROUTINE     CBPAIR(%INTEGERNAME LB,UB)
         %SHORTROUTINE
         %INTEGER KK,KKK,JJ,BP
         P=P+1; KK=0
         %CYCLE JJ=1,1,2; KKK=KK
         %IF A(P)=2 %THEN KK=-1 %ELSE KK=1
         ->REAL %IF A(P+1)&7=2
         ->STRING %IF A(P+1)&7=5
         %IF A(P+1)=9 %THEN BP=A(P+2) %ELSE %START
         FROMAR4(P+2,BP); P=P+1; %FINISH
         KK=KK*BP; P=P+3; ->AGAIN
REAL:    FAULT(24); P=P+6; KK=0; ->AGAIN
STRING:  FAULT(42); P=P*A(P+2)&X'FE'+2; KK=0
AGAIN:   %REPEAT
         LB=KKK; UB=KK
         %END
         %ROUTINE LOAD DATA
         %SHORTROUTINE
         %INTEGER LDLINK,JJ,KK,PTR,JJJ
         %SHORTINTEGER HEAD
         LDPTR=8+8*NEPS
         %INTEGERARRAY BUFFER(0:LDPTR)
         BUFFER(0)=7; BUFFER(2)=88
         BUFFER(3)=0; BUFFER(4)=0
         BUFFER(5)=0; BUFFER(6)=64
         PTR=8;  LDLINK=0
1:       POP(EPLINK,JJ,KK)
         -> 10 %IF JJ<0
         HEAD=KK
         BUFFER(PTR)=LDLINK
         LDLINK=PTR<<2
         BUFFER(PTR+1)=0
         BUFFER(PTR+2)=0
         BUFFER(PTR+3)=JJ
         BUFFER(PTR+4)=X'80000000'
         POP(HEAD,BUFFER(PTR+5),KK);   ! FIRST BIT OF ID.
         %IF KK>3 %THEN POP(HEAD,BUFFER(PTR+6),JJJ)
         PTR=PTR+7; %IF KK>7 %THEN %START
         POP(HEAD,BUFFER(PTR),JJJ); PTR=PTR+1; %FINISH; ->1
10:      BUFFER(1)=LDLINK
         LPUT(3,PTR<<2,0,ADDR(BUFFER(0)))
         LDPTR=PTR
         %END
         %ROUTINE DEFINE EP(%INTEGER MODE,NAME,ADR)
         %SHORTROUTINE
         %SHORTINTEGER HEAD
         %INTEGER JJ,KK,LENGTH,ID1,ID2,ID3
         %SWITCH SW(0:2)
         KK=WORD(NAME)
         HEAD=0;  -> SW(MODE)
SW(0):   %COMMENT DEFINE S#GO
         LENGTH=4; ID1=M'S#G'; ID2=M'O   '; ->10
SW(1):   %COMMENT SYSTEM EP
         LENGTH=LETT(KK)+2
         ID1=M'S#A'; %CYCLE JJ=1,1,6
         BYTEINTEGER(ADDR(ID1)+JJ+2)=LETT(KK+JJ)
         %REPEAT; ->10
SW(2):   %COMMENT ENTRY TO EXTERNAL ROUTINE
         LENGTH=LETT(KK)
         %CYCLE JJ=1,1,8
         BYTE INTEGER(ADDR(ID1)+JJ)=LETT(KK+JJ)
         %REPEAT
10:      LENGTH=8 %IF LENGTH>8
         BYTE INTEGER(ADDR(ID1))=LENGTH
         %IF LENGTH>7 %THEN PUSH(HEAD,ID3,0)
         %IF LENGTH>3 %THEN PUSH(HEAD,ID2,0)
         PUSH(HEAD,ID1,LENGTH) ;       ! COMPLETE SIDE CHAIN
         PUSH(EPLINK,ADR,HEAD);        ! LINK TO MAIN LIST
         NEPS=NEPS+1
         %END
       %ROUTINE     REDEFINE EP(%INTEGER TYPEP,%INTEGERARRAYNAME PARAMS)
         %SHORTROUTINE
         %INTEGER JJ,KK;%SHORTINTEGER OPHEAD
         JJ=N0;P=P-2;GXREF(A(P),'I')
         K=NEWCELL;OPHEAD=K
         ->1 %IF PARAMS(0)=0 ; %CYCLE KK=1,1,PARAMS(0)
         INSERT AFTER(OPHEAD,PARAMS(KK),0)
         %REPEAT
1:       I=9;J=14;OLDI=0;PTYPE=TYPEP
         REPLACE TAG(A(P));REPLACE BOTH(K,NR,PARAMS(0))
         RA(NR)=JJ<<2;NR=NR+1
         %END
         %INTEGERFN GET DBLE WRD
         %SHORT %ROUTINE
         %COMMENT PRODUCES A DOUBLE WORD OF TEMPORARY SPACE
         %COMMENT COVERED BY CURRENT BASE REGISTER (RBASE)
         %INTEGER I,J
         POP(LWSP(LEVEL),I,J)
         ->3 %UNLESS I=-1
         ->2 %IF N&7=0
         PUSH(WSP(LEVEL),0,N);N=N+4
2:       J=N;N=N+8
3:       %RESULT =J
         %END
         %INTEGERFN     GET STR WSP
         %SHORTROUTINE
         %INTEGER I,J
         POP(STR WSP(LEVEL),I,J)
         ->2 %UNLESS J=-1
         J=N; N=N+256
2:       %RESULT=J
         %END
         %ROUTINE SETEX
         %RETURN %UNLESS STRINST=0
         ST(N0)=X'D2001000'
         ST(N0+1)=X'4000D500'
         ST(N0+2)=X'20001000'
         STRINST=N0<<2; N0=N0+3
         %END
               %ROUTINE SETLINE
         %SHORTROUTINE
         %INTEGER K
         %OWNINTEGER VALUE
         %RETURN %UNLESS LINENOS=1
         K=LINE&255
         MONE=1 %IF K=0
         PSI(X'92',K,GLA,23) %UNLESS K=VALUE %AND MONE=0
         VALUE=K
               ->9 %IF MONE=0
         PSI(X'92',LINE>>8,GLA,22);         ! MVI
9:       MONE=0; %END
         %ROUTINE     CHECK CAPACITY(%INTEGER REG,DIS,X,LEVEL)
         %SHORTROUTINE
         %INTEGER MASK
         %RETURN %UNLESS TYPE=1 %AND 1<=PREC<=2
         ->3 %IF PREC=1;               ! %YTE
         MASK=7
         PRX(X'49',REG,LEVEL,X,DIS);   ! CH REG,STORED VALUE
1:       PRX(X'47',MASK,12,0,88); ->99;          ! BC MASK,CAPACITY EXCE
3:       PRX(X'55',REG,0,GLA,24);      ! CL_1,=F'255'
         MASK=2; ->1
99:      %END
! ******* LIST***PROCESSING***ROUTINES
%COMMENT MACROISING  THE FROMS,REPLACES & MLINK SAVES TIME & SPACE;
%COMMENT MACROISING  THE OTHERS SAVES TIME BUT INCREASES SIZE
         %ROUTINE FROM LIST(%INTEGER CELL,%INTEGERNAME S1,S2)
         %INTEGER J
         J=ADDR(ASLIST(CELL))
         S1=INTEGER(J)
         S2= SHORT INTEGER(J+4)
         %END
         %INTEGERFN NEW CELL
         %INTEGER  P
         P=ASL; FAULT(107) %IF P=0
         ASL= SHORT INTEGER(ADDR(ASLIST(P+6)));! NEXT FREE CELL
         SHORT INTEGER(ADDR(ASLIST(P+6)))=0;   ! LINK OF NEWCELL TO 0
         %RESULT=P
         %END
         %ROUTINE PUSH(%SHORTINTEGERNAME CELL,%INTEGER S1,S2)
         %INTEGER P,Q
         P=NEWCELL
         Q=ADDR(ASLIST(P))
         INTEGER(Q)=S1
         SHORT INTEGER(Q+4)=S2
         SHORT INTEGER(Q+6)=CELL
         CELL=P
         %END
         %ROUTINE POP(%SHORTINTEGERNAME CELL,%INTEGERNAME S1,S2)
         %INTEGER P,Q
         Q=ADDR(ASLIST(CELL))
         S1=INTEGER(Q)
         S2=SHORT INTEGER(Q+4)
         -> 1 %IF CELL=0;              ! LIST ALREADY EMPTY
         P=CELL; CELL=SHORT INTEGER(Q+6);! CELL ONTO NEXT CELL
         SHORT INTEGER(Q+6)=ASL; ASL=P;! OLD CELL ONTO FREE LIST
1:       %END
         %ROUTINE     REPLACE1(%INTEGER CELL,S1)
         INTEGER(ADDR(ASLIST(CELL)))=S1
         %END
         %ROUTINE     REPLACE2(%INTEGER CELL,S2)
         SHORT INTEGER(ADDR(ASLIST(CELL+4)))=S2
         %END
         %ROUTINE     MLINK(%INTEGERNAME CELL)
         CELL=SHORT INTEGER(ADDR(ASLIST(CELL+6)))
         %END
         %ROUTINE INSERT AFTER(%SHORTINTEGERNAME CELL,%INTEGER S1,S2)
         -> 1 %IF CELL=0
         PUSH(SHORT INTEGER(ADDR(ASLIST(CELL+6))),S1,S2)
         CELL=SHORT INTEGER(ADDR(ASLIST(CELL+6)))
         %RETURN
1:       PUSH(CELL,S1,S2)
         %END
         %INTEGERFN     FIND(%INTEGER LAB,LIST)
3:       ->1 %IF LIST=0
         ->4 %IF SHORT INTEGER(ADDR(ASLIST(LIST+4)))=LAB
         MLINK(LIST); ->3
4:       %RESULT=INTEGER(ADDR(ASLIST(LIST)))
1:       %RESULT =-1
         %END
         %ROUTINE     FROM1(%INTEGER CELL,%INTEGERNAME S1)
         S1=INTEGER(ADDR(ASLIST(CELL)))
         %END
         %ROUTINE     FROM2(%INTEGER CELL,%INTEGERNAME S2)
         S2=SHORT INTEGER(ADDR(ASLIST(CELL+4)))
         %END
         %ROUTINE     REPLACE BOTH(%INTEGER CELL,S1,S2)
         %INTEGER I
         I=ADDR(ASLIST(CELL))
         INTEGER(I)=S1
         SHORT INTEGER(I+4)=S2
         %END
         %ROUTINE CLEAR LIST (%SHORTINTEGERNAME OPHEAD)
         %INTEGER I,J
1:       POP(OPHEAD,I,J)
         ->1 %UNLESS I=-1
         %END
! ************END****OF****LIST****PROCESSING ROUTINES
         %ROUTINE     STORE TAG(%INTEGER KK,SLINK)
         PUSH(TAGS(KK),PTYPE<<16!LEVEL<<8!RBASE<<4!J,SLINK)
         PUSH(NAME(LEVEL),0,KK) %UNLESS LEVEL<=1
         %END
         %INTEGERFN     COUNT APS
         %INTEGER PP,Q
         Q=0; PP=P; P=P+1;             ! P ON NAME AT ENTRY
1:       ->2 %IF A(P)=2
      P=P+1; Q=Q+1; SKIP EXP; ->1
2:       P=PP; %RESULT=Q
         %END
         %INTEGERFN     DISPLACEMENT(%INTEGER LINK)
         %SHORTROUTINE
! A(P) HAS ENAME--LINK IS HEAD OF RFORMAT LIST. RESULT IS DISP FROM
! START OF RECORD FOR SCALAR DISP OF DV FROM RECORD FORMAT FOR ARRAY
         %INTEGER RR,II
         ->2 %IF LINK=0
         FROM2(LINK,LINK)
1:       MLINK(LINK); FROM LIST(LINK,RR,II)
         ->2 %IF II=-1
         J=RR&15;PTYPE=RR>>4&X'FFFF'
         RR=RR>>20;K=LINK
         INREG=0
         ->99 %IF RR=A(P); ->1
2:       FAULT(65); PRINT NAME(A(P))
         PTYPE=1
99:      %RESULT=II
         %END
         %INTEGERFN     COPY RECORD TAG
         %SHORTROUTINE
         ! AS COPY TAG-GIVES TYNE ETC OF THE ENAME
         !P POINTS TO RECORD NAME
         %INTEGER Q,FNAME
         ! K POINT TO SIDE CHAIN
1:       FROM1(K,FNAME)
         P=P+1; SKIP APP
         %RESULT=0 %IF A(P)=2
         P=P+1; Q=DISPLACEMENT (FNAME)
         PTYPE=7 %IF Q=-1
         UNPACK
         %IF TYPE=3 %THEN %START
         K=Q; ->1; %FINISH
         %RESULT=-1 %IF Q=-1
         %RESULT=1
         %END
         %ROUTINE COPY TAG(%INTEGER KK)
         %INTEGER Q
         FROM LIST(TAGS(KK),Q,K)
         -> NOT SET %IF Q=-1
         PTYPE=Q>>16
         INREG=Q>>12&15
         OLDI=Q>>8&15
         I=Q>>4&15
         J=Q&15
1:       UNPACK
         %RETURN
NOTSET:  PTYPE=7
         I=-1; J=I; OLDI=J; -> 1
         %END
               %ROUTINE REPLACE TAG (%INTEGER KK)
         %SHORTROUTINE
         %INTEGER P,Q
               P=TAGS(KK)
         Q=PTYPE<<16!INREG<<12!OLDI<<8!I<<4!J
         REPLACE BOTH(P,Q,K)
               %END
         %ROUTINE UNPACK
         %INTEGER Q
         ROUT=PTYPE//10000
         Q=PTYPE-10000*ROUT
         NAM=Q//1000
         Q=Q-1000*NAM
         ARR=Q//100
         Q=Q-100*ARR
         PREC=Q//10
         TYPE=Q-10*PREC
         %END
         %ROUTINE     PACK(%INTEGERNAME PTYPE)
         %INTEGER Q
         Q=10000*ROUT+1000*NAM+100*ARR
         PTYPE=Q+10*PREC+TYPE
         %END
!************* LABEL ***** AND**** JUMP **** ROUTINES*************
         %ROUTINE     PPJ(%BYTEINTEGER N)
         R13=0; PCONST(X'45F0C000'!N<<2);   ! BAL LINP,PLAB N
               %END
         %INTEGERFN     PAGENO(%INTEGER N)
         %INTEGER I,J
         J=N>>12; I=PAGENOS(J)
         %RESULT=I %UNLESS I=0
         ST(N0)=J<<12
         PAGENOS(J)=N0
         N0=N0+1
         %RESULT=N0-1
         %END
         %ROUTINE FILL JUMPS(%INTEGER LEVEL)
         %SHORTROUTINE
         %INTEGER J,K,Q,KK
         OPHEAD=0
1:       POP(JUMP(LEVEL),J,K); ->3 %IF J=-1
         Q=FIND(K,LABEL(LEVEL))
         ->2 %UNLESS Q=-1;
         PUSH(OPHEAD,J,K); ->1
2:       KK=0
         Q=Q-CODEBASE(LEVEL); K=Q>>12
         ->22 %IF J&LABSET#0
         ->23 %IF SBFLAG=1
         PLUG(J,X'58E0')
         PLUG(J+2,GLA<<12!4*PAGENO(Q)); J=J+4
         KK=14 %UNLESS K=0
21:      PLUG(J+2,KK<<12!Q&X'FFF'); ->1
22:      J=J&X'FFFFFF'; KK=10
23:      FAULT(99) %IF Q>4095; ->21
3:       JUMP(LEVEL)=OPHEAD
         %END
         %ROUTINE PJ(%INTEGER MASK,LAB)
         %SHORTROUTINE
         %INTEGER I,J,Q
         J=FIND(LAB,LABEL(LEVEL)); ->200 %IF J=-1
         I=J-CODEBASE(LEVEL); ->50 %IF I>=4096
         PRX(X'47',MASK,0,10,I); ->999;!     BC MASK,I(10,0)
50:      Q=4*PAGENO(I);                ! DISPLACEMENT OF MULTIPLE OF 4K
         PCONST(X'58E0D000'!Q);        ! L 14,Q(GLA)
         PRX(X'47',MASK,14,10,I&4095); ->999;! BC MASK,?(10,14)
200:     PUSH(JUMP(LEVEL),CA,LAB); PCONST(0) %UNLESS SBFLAG=1
         PRX(X'47',MASK,10,0,0);       ! BC MASK,?(10,?)
999:     %END
               %ROUTINE     PLAB(%INTEGER M)
         %SHORTROUTINE
               MONE=1
         %IF M>=0 %THEN ->1
               PLABEL=PLABEL-1; K=PLABEL
               M=K
1:       PUSH(LABEL(LEVEL),CA,M)
         R13=0
         %END
!********** END **** OF **** LABEL ****** ROUTINES **************
               %ROUTINE CHECK RF
         %SHORTROUTINE
         COPYTAG(A(MARKER1))
         ->1 %UNLESS TYPE=4
               JJ=K; FROM LIST(JJ,Q,FNAME)
         DUMP(0,4,Q,0,I);    ! ADDR OF FORMAT TO R4
         ->9
1:       K=-1; FAULT(62)
9:       %END
         %ROUTINE     DUMP(%INTEGER CODE,REG,DIS,X,LEVEL)
         %SHORTROUTINE
         %COMMENT CODE=8*(TYPE-1)+2*PREC+Z
         %INTEGER J
         %OWNBYTEINTEGERARRAY OPCODE(0:16)=X'41',
         X'50',X'58',X'42',X'43',X'40',X'48',X'59',X'49',
         X'70',X'78',0(4),X'60',X'68'
         J=OPCODE(CODE);FAULT(248) %IF J=0
         ->4 %IF CODE=4;               ! IC NEEDED
         ->1 %UNLESS CODE=0=DIS;       ! OPTIMISE LOAD ADDR
         ->3 %UNLESS LEVEL=0=X
         PRR(X'1F',REG,REG); ->99;     ! SLR INSTEAD LO LA REG,0
3:       ->1 %UNLESS LEVEL=0 %OR X=0
         PRR(X'18',REG,X+LEVEL) %UNLESS REG=X+LEVEL;->99
4:       PRR(X'1F',REG,REG) %IF X#REG#LEVEL;    ! SLR FOR BYTE
1:       PRX(J,REG,X,LEVEL,DIS)
         %COMMENT AND WITH 255 FOR BYTE IF SLR NOT POSSIBLE AS ADDR IN R
         PRX(X'54',REG,0,GLA,24) %UNLESS CODE#4 %OR X#REG#LEVEL
99:      %END
         %END
         %ENDOFPROGRAM
