#include <imp_perms.h>

$define unless(cond) if (!(cond)) 
$define until(cond) while(!(cond))
imp80: parsed "/dev/stdin" successfully

extern void SELECTINPUT(int STREAM);
extern void SELECTOUTPUT(int STREAM);
extern void NEWLINE(void);
extern void SPACE(void);
extern void SKIPSYMBOL(void);
extern void READSTRING(_imp_string *S);
extern void NEWLINES(int N);
extern void SPACES(int N);
extern int NEXTSYMBOL(void);
extern void PRINTSYMBOL(int SYMBOL);
extern void READSYMBOL(void **SYMBOL);
extern void READ(void **NUMBER);
extern void WRITE(int VALUE, int PLACES);
extern void NEWPAGE(void);
extern int ADDR(void **VARIABLE);
extern double ARCSIN(double X);
extern int INT(double X);
extern int INTPT(double X);
extern double FRACPT(double X);
extern void PRINT(double NUMBER, int BEFORE, int AFTER);
extern void PRINTFL(double NUMBER, int PLACES);
extern float *REAL(int VARADDR);
extern int *INTEGER(int VARADDR);
extern double MOD(double X);
extern double ARCCOS(double X);
extern double SQRT(double X);
extern double LOG(double X);
extern double SIN(double X);
extern double COS(double X);
extern double TAN(double X);
extern double EXP(double X);
extern void CLOSESTREAM(int STREAM);
extern char *BYTEINTEGER(int VARADDR);
extern int EVENTINF(void);
extern double RADIUS(double X, double Y);
extern double ARCTAN(double X, double Y);
extern char *LENGTH(_imp_string *S);
extern void PRINTSTRING(_imp_string STR);
extern int NL(void);
extern double *LONGREAL(int VARADDR);
extern void PRINTCH(int CHARACTER);
extern void READCH(void **CHARACTER);
extern _imp_string *STRING(int VARADDR);
extern void READITEM(_imp_string *ITEM);
extern _imp_string NEXTITEM(void);
extern char *CHARNO(_imp_string *STR, int CHARREQD);
extern _imp_string TOSTRING(int CH);
extern _imp_string SUBSTRING(_imp_string STR, int FIRST, int LAST);
//externalrecord(*)mapspecRECORD(integerRECADDR)


//externalarraymapspecARRAY(integerA1ADDR,arraynameFORMAT)


extern int SIZEOF(void **X);
extern int IMOD(int VALUE);
extern double PI(void);
extern int EVENTLINE(void);
extern long int *LONGINTEGER(int ADR);
extern long double *LONGLONGREAL(int ADR);
extern long int LENGTHENI(int VAL);
extern long double LENGTHENR(double VAL);
extern int SHORTENI(long int VAL);
extern double SHORTENR(long double VAL);
extern int NEXTCH(void);
extern unsigned short int *HALFINTEGER(int ADDR);
extern void PPROFILE(void);
extern double FLOAT(int VALUE);
extern long int LINT(long double X);
extern long int LINTPT(long double X);
extern short int *SHORTINTEGER(int N);
extern int TRUNC(double X);
//endoffile


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

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

const int VMEB = NO;

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


int I; int J; int K;

//PRODUCEDBYOLDPSFROMNRIMPPS8ON16/12/80


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





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


const int SS = 2093;


//


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

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

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

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

//


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

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

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

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


const int CEBIT = 1;
//SETINCOMPILERENVIRONMENT


const int MAXDICT = 0x100;
//SETFORMAXOFEVERYTHING


//


//THEPRINCIPALOPCODESAREHEREDEFINEDASTHEIRMNEMONICS(AMENDED)


//


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


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


//DEFINESOMEMNEMONICSFORTHEVISIBLEREGISTERS(XCEPTLNB)


//


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

//


const _imp_string MDEP = "S#NDIAG";

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


const _imp_string AUXSTEP = "ICL9CEAUXST";
//DATAREFFORINDIRECTAUXST


const int SNPT = 0x1006;
//SPECIALNAMEPTYPE


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


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

//


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

//


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

//


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

//


int MAXULAB; int SFLABEL;

double CVALUE; double IMAX; double CTIME;

_imp_string MAINEP;

int LOGEPDISP; int EXPEPDISP;

//


static int *COMREG(int N);

{ /* %begin block */
    FILEADDR = COMREG(46); //SOURCEFILEIFCLEAN


  PARMBITS1 = COMREG(27); 
    PARMBITS2 = COMREG(28); 
  WKFILEAD = COMREG(14); 
    WKFILEK = INTEGER(WKFILEAD + 8)
 >> 10; 
if  (  FILEADDR <= 0) {   FILESIZE = 64000;     FILEADDR = 0;  } else {

  FILEPTR =   FILEADDR + INTEGER(  FILEADDR + 4); 
  FILEEND =   FILEADDR + INTEGER(  FILEADDR); 
  FILESIZE = INTEGER(  FILEADDR); 

}

  NNAMES = 255; 
if  (FILESIZE > 10000)   NNAMES = 511; 
if  (PARMBITS1 & JOBBERBIT == 0)  {

if  (FILESIZE > 32000)   NNAMES = 1023; 
if  (FILESIZE > 256 * 1024 ||   PARMBITS2 & MAXDICT != 0 ||   WKFILEK > 512)   NNAMES = 2047; 

}

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


  ARSIZE =   WKFILEK * 768 - 300; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

/* TO DO: %ARRAYFORMAT DECLARATION */;

char **A;

/*pending name*/recfm  ASLIST[(ASL)-(0)+1]
;
$define ASLIST[N0] ASLIST[(N0)-(0)]
//(LISTF)


int WORD[(NNAMES)-(0)+1]
;
$define WORD[N0] WORD[(N0)-(0)]
int TAGS[(NNAMES)-(0)+1]
;
$define TAGS[N0] TAGS[(N0)-(0)]
/*H imp80-switch.h:2313*/
int DVHEADS[(12)-(0)+1]
;
$define DVHEADS[N0] DVHEADS[(N0)-(0)]

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


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


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


if  (VMEB == NO)  {

auto void CONSOURCE(_imp_string FILE, int *AD);

}

//STARTOFCOMPILATION


  A = ; 

{ /* %begin block */
//***********************************************************************


//*THISBLOCKINITIALISETHECOMPILERSCALARSANDARRAYS*


//*WASORIGINALLYROUTINE'INITIALISE'.*


//*THEINITIALISATIONOFTHECONSTANTLISTSWITHTHEVALUES*


//*INPERMMAYBEOMITTEDINBATCHORCUT-DOWNVERSIONS.*


//***********************************************************************


auto void READLINE(int MODE, int CHAR);
auto int COMPARE(int P);
auto void PNAME(int MODE);
auto void CONST(int MODE);
auto void TEXTTEXT(int EBCDIC);
int CCSIZE; int DSIZE; int NEXT; int ATLINE1; int STARSTART;

  CCSIZE = 1000;   DSIZE = 7 * NNAMES; 
int DISPLAY[(MAXLEVELS)-(0)+1]
;
$define DISPLAY[N0] DISPLAY[(N0)-(0)]
int SFS[(MAXLEVELS)-(0)+1]
;
$define SFS[N0] SFS[(N0)-(0)]
/*H imp80-switch.h:2313*/
char TLINE[(161)-(-60)+1]
;
$define TLINE[N0] TLINE[(N0)-(-60)]
char CC[(CCSIZE)-(0)+1]
;
$define CC[N0] CC[(N0)-(0)]
char LETT[(DSIZE + 20)-(0)+1]
;
$define LETT[N0] LETT[(N0)-(0)]

long int ATL0; long int ASYM0;

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

  IMAX = (-1) >> 1;   PLABEL = 24999; 
  LETT[0] = 0; 
  ATLINE1 = ADDR(TLINE[1]); 
  INTEGER(ADDR(ATL0)
 + 4)
 = ATLINE1 - 1; 
  INTEGER(ADDR(ATL0)
)
 = 0x18000100; 
  INTEGER(ADDR(ASYM0)
)
 = 0x28000C00; 
  INTEGER(ADDR(ASYM0)
 + 4)
 = ADDR(SYMBOL[1300])
 - 4 * 1300; 
  N = 12; 
  MAXULAB = NNAMES + 16384; //LARGESTVALIDUSERLABEL


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


  DICTBASE = ADDR(LETT[0]); 
//


//OPENOBJECTFILEHEREBEFOREMOREPAGESOFCOMPILERCODE


//AREPAGEDINANDSUB-SYSTEMPAGESMOVEOUT


//


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


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


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


  TTOPUT = COMREG(40); 
if  (I & (1 << 16) != 0)  {

  PARMARR = 0;   PARMOPT = 0; 
  PARMLINE = 0;   PARMCHK = 0;   PARMDIAG = 0; 

}

  PARMTRACE = PARMTRACE | PARMOPT; //ALLOWNOTRACEONLYWITHOPT


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


  IMPS = 1; //FORTESTING


NEWLINES(3); SPACES(14); 
PRINTSTRING("ERCC. Imp"); 
if  (IMPS != 0) PRINTSYMBOL('s'); 
PRINTSTRING(" Compiler Release"); 
WRITE(RELEASE, 1); 
PRINTSTRING(" Version ".LADATE); 
NEWLINES(3); 
WRITE(NNAMES, 5); WRITE(ASL, 5); 
NEWLINE(); 
  ASLWARN = 0; 
  ASLCURBTM = ASL - 240; 
  CONSTLIMIT = 4 * ASLCURBTM - 8; 
for (I = ASLCURBTM; I != ASL - 1; I += 1) {
  ASLIST[I + 1] = I; 
}
  ASLIST[ASLCURBTM] = 0; 
  ASLIST[0] = -1; 
  ASLIST[0] = -1; 
  ASLIST[0] = -1; 
  ASLIST[0] = 0; 
for (I = 0; I != NNAMES; I += 1) {
  WORD[I] = 0;   TAGS[I] = 0; 
}
for (I = 0; I != 12; I += 1) {
  DVHEADS[I] = 0; 
}
//


//NOWDECLARETHESPECIALNAMESWHICHAREINARRAYILETT.


//


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


  COMREG(24)
 = 16; //RETURNCODE


  DUMMYFORMAT = 0; //DUMMYRECORDFORMAT


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


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

FAULT(100, ADDR(CC[0])
); 
  R = STARSTART; 

} else {

if  (R > ARSIZE) FAULT(102, 0); 
if  (A == COMMALT)   R = STARSTART;  else {

  I = R - STARSTART; 
  A = I >> 16; 
  A = I >> 8 & 255; 
  A = I & 255; 
if  (A == DECALT &&   LEVEL > 1)  {

if  (SFS[  LEVEL] == 0)  {

TOAR4(DISPLAY[  LEVEL], STARSTART); 
  DISPLAY[  LEVEL] = STARSTART + 6; 

} else   A = 128; //FLAGASUNLINKED



}

//*DELSTART


if  (SMAP != 0)  {

NEWLINE(); WRITE(  LINE, 5); 
WRITE(STARSTART, 5); NEWLINE();   J = 0; 
for (I = STARSTART; I != R - 1; I += 1) {
WRITE(A, 5); 
  J = J + 1; 
if  (J >= 20) { NEWLINE();   J = 0;  }
}
NEWLINE(); 

}

//*DELEND


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


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

}


}

} while (1);
TOAR8(R, 0);   R = R + 8; 
if  (R + NEXT > ARSIZE) FAULT(102, 0); 
  P1SIZE = R; 
if  (USEIMP == YES)  {

for (I = 0; I != NEXT; I += 1) {
  A = LETT[I]; 
}

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

  LL = 0;   LP = 0;     Q = 1; 
  LENGTH = 0;   DEL = 0; 
NEXT: 
if  (USEIMP == YES)  {

  LP = LP + 1; 
if  (LP > LL) { GETLINE();   LP = 1;  }
  I = TLINE[LP]; 
if  (MODE == 0)  {

if  (I == '%') {   DEL = 128; goto NEXT;  }
  I = ONECASE[I]; 
if  ('A' <= I && I <= 'Z')   I = I | DEL;  else {

  DEL = 0; 
if  (I == ' ') goto NEXT; 

}

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

} else {

  LENGTH = LENGTH + 1; 
  CC[LENGTH] = I; 
if  (I == CHAR)   MODE = 0; 

}

unless  (I == NL()
) goto NEXT; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; GETLINE(); 
asm(/*to do*/)/*5*/; RLL1: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //'%'


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL3: 
asm(/*to do*/)/*5*/; //LOWERCASETOUPPER


asm(/*to do*/)/*5*/; //'A'


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //'Z'


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL4: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //' '


asm(/*to do*/)/*5*/; RLL5: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //''''


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //'"'


asm(/*to do*/)/*5*/; RLL6: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL7: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL2: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL9: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; RLL8: 

}

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

int K;

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


)  */
do {
READSYMBOL(K); 
  TLINE[LL + 1] = ITOI[K]; 
  LL = LL + 1; 
} while (! (K == NL()
) );

} else {

if  (FILEPTR >= FILEEND)  {

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

}

if  (USEIMP == NO)  {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; goto OLIST; 

}

IMP: 
 || K == 0)  */
do {
  K = BYTEINTEGER(FILEPTR); //NEXTCHARFROMSORCEFILE


  FILEPTR = FILEPTR + 1; 
  TLINE[LL + 1] = ITOI[K]; 
  LL = LL + 1; 
} while (! (K == NL()
 || K == 0) );
OLIST: 

}

//ifMODE=0andLL=1thenGETLINEandreturn


//LINE=LINE+1unlessMODE=0andLENGTH>0


    LINE =   LINE + 1; //COUNTALLLINES


if  (LIST != 0)  {

if  (MODE == 0 && LENGTH > 0) PRINTSTRING("     C");  else WRITE(  LINE, 5); 
//SPACES(8)


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

}

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

} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;

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

static int SAVECOMP;
//FORCHECKINGDSIDEDCONDS


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
if  (USEIMP == YES)  {

  RP = SYMBOL[P]; 
  RL =   LEVEL; 
  P = P + 1; 
  PP = P; //ROUTINEREALLYSTARTSHERE



} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; SUBENTRY: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

COMM: 
if  (USEIMP == YES)  {

  RQ =   Q; //RESETVALUESOFLINE&ARPTRS


  RR = R; 
  SSL = STRLINK; //SAVESTRINGLINK


  ALT = 1; //FIRSTALTERNATIVETOBETRIED


  RA = SYMBOL[P]; //RATONEXTPHRASEALTERNATIVE


  RS = P; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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


if  (USEIMP == YES)  {

  RS = RS + 1; //RS=NEXTALTERNATIVEMEANSTHAT


//THISALTHASBEENCOMPLETEDSO


//EXITWITHHIT=1


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


if  (ITEM < 999) goto LIT; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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


if  (USEIMP == YES)  {

if  (COMPARE(ITEM)
 == 0) goto FAIL; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //RESULT=0FORFAIL


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

goto SUCC; 
LIT: //BRICKISLITERAL


if  (USEIMP == YES)  {

  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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



} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

goto SUCC; //MATCHEDSUCCESSFULLY


FAIL: //FAILURE-NOTEPOSITIONREACHD


if  (USEIMP == YES)  {

if  (RA == RP) goto TFAIL; //TOTALFAILURENOALTTOTRY


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


  R = RR + 1; //AVOIDGOINGVIAUPR:


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


  RS = RA; 
  RA = SYMBOL[RA]; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; CPL1: asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

return 0; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

BIP_999://REPEATEDPHRASE


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


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

return 1; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

BIP_1001://PHRASENAME


BIP_1004://PHRASEOLDNAME


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


BIP_1003://PHRASECONST


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


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


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


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


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


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


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


if  (I == 2) FAULT2(13, K, 0); //repeatMISSING


}
    LEVEL =   LEVEL - 1; 
goto SUCC; 
BIP_1017://PHRASELISTON


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


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


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


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


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


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


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


for (I = 3; I != 1; I += -1) {
if  (OPC[I] == S) {   A = 2 * I; goto UPR;  }
}goto FAIL; 
BIP_1026://P(OP)=+,-,&,****,**,*,!!,!,


////,/,>>,<<,.,\\,\


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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

if  (J != I) {   A = 6; goto UPR;  }
if  (CC[  Q + 1] == I && I == CC[  Q + 2]) {   A = 4;     Q =   Q + 3; goto UPR;  }
  A = 5;     Q =   Q + 1; goto UPR; 

}

if  (I == '/')  {

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

}

if  (I == '!')  {

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

}

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

if  (J != I) {   A = 15; goto UPR;  }
    Q =   Q + 1;   A = 14; goto UPR; 

}

goto FAIL; 
BIP_1027://PHRASECHECKUI


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


TOAR4(R, 0); 
PUSH(SFS[  LEVEL], 2, R,   LINE); 
  R = R + 4; 
goto SUCC; 
BIP_1030://P(,'')=',',0


//


//THISISVERYAWKWARDASITMEANSITISVERYTOHARDTOFIND


//THEENDOFAPARAMETERLISTWITHOUTCHURNING.BYMAKINGTHISABIP


//WECANPEEPAHEADFOR')'ANDFAILHERE.


//


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


if  (I == ')') goto FAIL; 
if  (I == ',')     Q =   Q + 1; 
goto SUCC; 
BIP_1031://PHRASECHECKTYPEIEENSURE


//FIRSTLETTERIS(B,H,I,L,R,S)&


//3RDLETTERIS(A,L,N,R,T)


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


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


BIP_1037://PHRASECOMP2(IS2NDHALFOFDSIDED)


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


unless  (32 < I && I <= 92 &&   X'80000000' >> (I & 31) & 0x1004000E != 0) goto FAIL; 
//'='=1,'>='=2,'>'=3


//'#'OR'\='=4,'<='=5,'<'=6


//7UNUSED,'->'=8,'=='=9


//'##'OR'\=='=10


if  (I == '=')  {

if  (CC[  Q + 1] == I) {   J = 9; goto JOIN1;  }
  J = 1; goto JOIN; 

}

if  (I == '#')  {

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

}

if  (I == '\\' && CC[  Q + 1] == '=')  {

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

}

if  (I == '>')  {

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

}

if  (I == '<')  {

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

}

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


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


goto UPR; //NBOWNSWONTWORKIF


//CONDEXPRSALLOWEDASTHE


//CANBENESTED!


BIP_1033://P(ASSOP)-==,=,<-,->


  I = CC[  Q]; //OBTAINCURRENTCHARACTER


if  (I == '=')  {

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

}

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


TOAR4(R, 0); //HOLEFORFORWARDPTR


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


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


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


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


if  (VMEB == YES) goto FAIL; 
  I = CC[  Q]; 
unless  (I == NL()
 || I == ';') goto FAIL; 
if  (I == ';')     Q =   Q + 1; 
unless  (CTYPE == 5) goto FAIL; 
PUSH(IHEAD,   FILEADDR, FILEPTR, FILEEND); 
CONSOURCE(STRING(ADDR(A)
)
,   FILEADDR); //DEPARTSIFFAILS


  FILEPTR =   FILEADDR + INTEGER(  FILEADDR + 4); 
  FILEEND =   FILEADDR + INTEGER(  FILEADDR); 
goto SUCC; 

} /* End of Begin/Rt/Fn/Map depth=2 */;
//OFROUTINE'COMPARE'


void PNAME(int MODE) {
//***********************************************************************


//*MODE=0FOROLDNAME(ALREADYINDICT),MODE=1FORNEWNAME*


//***********************************************************************


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

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

long int DRDES; long int ACCDES;

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


  T = 1; 
  LETT[NEXT + 1] = FS;   JJ = 71 * FS; 
if  (USEIMP == YES)  {

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

} else {

CYC: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //ITOACC


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; SKIP: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; EXIT: 

}

  LETT[NEXT] = T; //INSERTLENGTH


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


  JJ = (JJ + 113 * T) & NNAMES; 
if  (USEIMP == YES)  {

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


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


if  (STRING(ADDR(LETT[NEXT])
)
 == STRING(ADDR(LETT[LL])
)
) goto FND; 
}

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; CYC1: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; CYC2: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

FAULT(104, 0); //TOOMANYNAMES


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

} /* End of Begin/Rt/Fn/Map depth=2 */;



void CONST(int MODE) {
//***********************************************************************


//*SYNTAXCHECKANDEVALUATEALLTHEFORMSOFIMPCONSTANT*


//*MODE=0FORINTEGERCONSTANTS#0FORANYSORTOFCONSTANT*


//***********************************************************************


int Z; int DOTSEEN; int EBCDIC; int FS; int CPREC; int RR; int S; int T; int SS;

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

const long double TEN = R'41A00000000000000000000000000000';

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


  CTYPE = 1;   EBCDIC = 0; 
if  (FS == '\'\'') goto QUOTE; 
if  (FS == 34) goto STR2; 
unless  (CC[  Q + 1] == '\'\'') goto NOTQUOTE;     Q =   Q + 2; 
if  (FS == 'X') goto HEX; 
if  (FS == 'M') goto MULT; 
if  (FS == 'B') goto BIN; 
if  (FS == 'R' && MODE == 0) goto RHEX; 
if  (FS == 'K') goto OCT; 
if  (FS == 'C') {   EBCDIC = 1; goto MULT;  }
if  (FS == 'D' && MODE == 0)  {

  CPREC = 7; 
if  ('0' <= CC[  Q] && CC[  Q] <= '9') goto N; 
if  (CC[  Q] == '.') goto DOT; 

}

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


if  (CC[  Q + 2] == '\'\'')  {

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

}

return; //NOTVALID


NOTQUOTE: //CHECKFORE"...."


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


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


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

  Z = 4 * (T - 8); 
  S = S | (SS << Z); 
  SS = SS >> (32 - Z);   CPREC = 6; 

}

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

  CPREC = 4; TOAR2(R, S);   R = R + 2; 

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


  T = 0; 
do {
  I = CC[  Q];     Q =   Q + 1; 
if  (T & 7 == 0 && T != 0)  {

TOAR4(R, S);   R = R + 4;   S = 0; 

}

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


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


do {
  I = CC[  Q];     Q =   Q + 1;   T = T + 1; 
if  (I == '\'\'')  {

if  (CC[  Q] != '\'\'') break;  else     Q =   Q + 1; 

}

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


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


  I = CC[  Q]; 
do {
  CVALUE = TEN * CVALUE + (I & 15); 
    Q =   Q + 1;   I = CC[  Q]; //ONTONEXTCHAR


} while (! (I < '0' || I > '9') );
unless  (MODE == 0 && I == '.') goto ALPHA; 
DOT:     Q =   Q + 1;   X = TEN;   I = CC[  Q]; 
  DOTSEEN = 1; //CONSTANTHASDECIMALPOINT


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


if  (MODE == 0 && CC[  Q] == '@')  {

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


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

if  (USEIMP == NO)  {

asm(/*to do*/)/*5*/; //MASKOUTREALOVERFLOW



}

while  (S > 0) {
  S = S - 1; 
  CVALUE = CVALUE * TEN; 
if  (USEIMP == NO)  {

asm(/*to do*/)/*5*/; 
}

}
while  (S < 0 && CVALUE != 0) {
  S = S + 1; 
  CVALUE = CVALUE / TEN; 
}

}


}

//SEEIFITISINTEGER


if  (FS == 'D')  {

  I = CC[  Q]; 
if  (I == '\'')     Q =   Q + 1;  else return; 
  DOTSEEN = 1; //ENSURENOTTAKENASINTEGER



}

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


if  (CPREC == 6)  {

if  (USEIMP == NO)  {
//SOFTWAREROUNDINMCCODEONLY


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


}

TOAR8(R, CVALUE);   R = R + 8; 
if  (CPREC == 7) { TOAR8(R, LONGREAL(ADDR(CVALUE)
 + 8)
);   R = R + 8;  }
  A = (CPREC << 4) + CTYPE; 
  HIT = 1; 
FAIL: 
} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*PROCESSESTEXTBETWEENDOUBLEQUOTESANDSTORESINISOOREBCDIC*


//***********************************************************************


int J; int II;

const int QU = '"';

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


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

    Q =   Q + 1; 
if  (CC[  Q] != QU) break; 

}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

BEND: 
} /* End of Begin/Rt/Fn/Map depth=1 */;
//OFBLOCKCONTAININGPASS1


if  (  LEVEL > 1) FAULT(15, 0); 
  I = 0; 
NEWLINE(); 
if  (FAULTY == 0)  {

WRITE(  LINE, 5); 
PRINTSTRING(" LINES ANALYSED IN"); 
WRITE(INT(1000 * (CPUTIME()
 - CTIME))
, 5); 
PRINTSTRING(" MSECS  -  SIZE="); 
WRITE(P1SIZE, 5); 
if  (  LINE > 90 && LIST != 0) NEWPAGE();  else NEWLINE(); 

} else {

PRINTSTRING("CODE GENERATION NOT ATTEMPTED\n"); 
  COMREG(24)
 = 8; 
  COMREG(47)
 = FAULTY; 
exit(0); 

}


{ /* %begin block */
//***********************************************************************


//*SECONDORCODEGENERATINGPASS*


//***********************************************************************


int REGISTER[(7)-(0)+1]
;
$define REGISTER[N0] REGISTER[(N0)-(0)]
int GRUSE[(7)-(0)+1]
;
$define GRUSE[N0] GRUSE[(N0)-(0)]
/*H imp80-switch.h:2313*/int GRAT[(7)-(0)+1]
;
$define GRAT[N0] GRAT[(N0)-(0)]
/*H imp80-switch.h:2313*/int GRINF1[(7)-(0)+1]
;
$define GRINF1[N0] GRINF1[(N0)-(0)]
/*H imp80-switch.h:2313*/int GRINF2[(7)-(0)+1]
;
$define GRINF2[N0] GRINF2[(N0)-(0)]
/*H imp80-switch.h:2313*/int OLINK[(7)-(0)+1]
;
$define OLINK[N0] OLINK[(N0)-(0)]
/*H imp80-switch.h:2313*/
char CODE[(268)-(0)+1]
;
$define CODE[N0] CODE[(N0)-(0)]
char GLABUF[(268)-(0)+1]
;
$define GLABUF[N0] GLABUF[(N0)-(0)]
/*H imp80-switch.h:2313*/
int PLABS[(31)-(0)+1]
;
$define PLABS[N0] PLABS[(N0)-(0)]
int DESADS[(31)-(0)+1]
;
$define DESADS[N0] DESADS[(N0)-(0)]
/*H imp80-switch.h:2313*/int PLINK[(31)-(0)+1]
;
$define PLINK[N0] PLINK[(N0)-(0)]
/*H imp80-switch.h:2313*/
int SET[(MAXLEVELS)-(0)+1]
;
$define SET[N0] SET[(N0)-(0)]
int STACKBASE[(MAXLEVELS)-(0)+1]
;
$define STACKBASE[N0] STACKBASE[(N0)-(0)]
/*H imp80-switch.h:2313*/int RAL[(MAXLEVELS)-(0)+1]
;
$define RAL[N0] RAL[(N0)-(0)]
/*H imp80-switch.h:2313*/int FLAG[(MAXLEVELS)-(0)+1]
;
$define FLAG[N0] FLAG[(N0)-(0)]
/*H imp80-switch.h:2313*/int L[(MAXLEVELS)-(0)+1]
;
$define L[N0] L[(N0)-(0)]
/*H imp80-switch.h:2313*/int M[(MAXLEVELS)-(0)+1]
;
$define M[N0] M[(N0)-(0)]
/*H imp80-switch.h:2313*/int NMDECS[(MAXLEVELS)-(0)+1]
;
$define NMDECS[N0] NMDECS[(N0)-(0)]
/*H imp80-switch.h:2313*/int ONWORD[(MAXLEVELS)-(0)+1]
;
$define ONWORD[N0] ONWORD[(N0)-(0)]
/*H imp80-switch.h:2313*/int ONINF[(MAXLEVELS)-(0)+1]
;
$define ONINF[N0] ONINF[(N0)-(0)]
/*H imp80-switch.h:2313*/int   JUMP[(MAXLEVELS)-(0)+1]
;
$define   JUMP[N0]   JUMP[(N0)-(0)]
/*H imp80-switch.h:2313*/int LABEL[(MAXLEVELS)-(0)+1]
;
$define LABEL[N0] LABEL[(N0)-(0)]
/*H imp80-switch.h:2313*/int JROUND[(MAXLEVELS)-(0)+1]
;
$define JROUND[N0] JROUND[(N0)-(0)]
/*H imp80-switch.h:2313*/int DIAGINF[(MAXLEVELS)-(0)+1]
;
$define DIAGINF[N0] DIAGINF[(N0)-(0)]
/*H imp80-switch.h:2313*/int DISPLAY[(MAXLEVELS)-(0)+1]
;
//$define DISPLAY[N0] DISPLAY[(N0)-(0)]
/*H imp80-switch.h:2313*/int   AUXSBASE[(MAXLEVELS)-(0)+1]
;
$define   AUXSBASE[N0]   AUXSBASE[(N0)-(0)]
/*H imp80-switch.h:2313*/int NAMES[(MAXLEVELS)-(0)+1]
;
$define NAMES[N0] NAMES[(N0)-(0)]
/*H imp80-switch.h:2313*/
int AVLWSP[(4)-(0)+1][(MAXLEVELS)-(0)+1]
;
$define AVLWSP[N0][N1] AVLWSP[(N0)-(0)][(N1)-(0)]

/* TO DO: %ARRAYFORMAT DECLARATION */;

int **CTABLE;

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


auto void PRINTUSE(void);
//*DELEND


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

//*DELSTART


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


  I = NEXTP; 
  NEXTP = NEXTP + (A << 16) + (A << 8) + A; 
    LINE = (A << 8) + A; 
  STMTS = STMTS + 1; 
CSS(I + 5); 
//CHECKASLifLINE&7=0
 PRINTSTRING("CODE GENERATION NOT ATTEMPTED\n");


} /* End of Begin/Rt/Fn/Map depth=2 */;

void LOADDATA(void) {
//***********************************************************************


//*PASSINFORMATIONTOLPUTTOENABLEITTOGENERATETHE*


//*LOADERDATAANDCOMPLETETHEPROGRAMFILE.*


//***********************************************************************


int LANGFLAG; int PARMS;

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


  I = GLACA - GLACABUF; 
if  (INHCODE == 0)  {

unless  (I == 0) LPUT(2, I, GLACABUF, ADDR(GLABUF[0])
); 
//BACKOFGLAP


LPUT(2, FIXEDGLALEN, 0, ADDR(FIXEDGLA[0])
); //FRONTOFGLAP


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


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


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



}

  SSTL = (SSTL + 11) & (-8); 
PRINTSTRING("\nCODE"); 
WRITE(CA, 6); PRINTSTRING(" BYTES      GLAP"); 
WRITE(GLACA, 3); PRINTSTRING("+"); 
WRITE(USTPTR, 1); PRINTSTRING(" BYTES      DIAG TABLES"); 
WRITE(SSTL, 3); PRINTSTRING(" BYTES\nTOTAL"); 
  REGISTER[0] = CA;   REGISTER[1] = GLACA; 
  REGISTER[2] = 0; 
  REGISTER[3] = SSTL; 
  REGISTER[4] = USTPTR; 
  K = CA + GLACA + SSTL + USTPTR;   REGISTER[5] = K; 
WRITE(K, 5); PRINTSTRING(" BYTES"); 
NEWLINE(); PRINTCH(13); //MARKERFORCOMPTOPRINT


//SUMMARY


if  (FAULTY == 0)  {

WRITE(STMTS, 7); PRINTSTRING(" STATEMENTS COMPILED IN"); 
WRITE(INT(1000 * (CPUTIME()
 - CTIME))
, 5); 
PRINTSTRING(" MSECS"); 
  COMREG(47)
 = STMTS; //NOOFSTMTSFORCOMPER



} else {

PRINTSTRING("PROGRAM CONTAINS"); WRITE(FAULTY, 2); 
PRINTSTRING(" FAULT"); if  (FAULTY > 1) PRINTSYMBOL('S'); 
  COMREG(47)
 = FAULTY; //NOOFFAULTSFORCOMPER



}

NEWLINES(2); 
NEWLINE(); 
  I = 0; if  (FAULTY != 0)   I = 8; 
  COMREG(24)
 = I; 
if  (INHCODE == 0) LPUT(7, 24, 0, ADDR(REGISTER[0])
); 
//SUMMARYINFO..REGISTERASBUF


PPROFILE(); 
exit(0); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

//


//***********************************************************************


//*IMPCODEPLANTINGROUTINES*


//*CODEANDGLAPAREPUTINTOTHEBUFFERS'CODE,GLABUF(0:268)'*


//*BYANUMBEROFTRIVIALROUTINES.LPUTISCALLEDTOADDTHE*


//*BUFFERTOTHEOUTPUTFILE.THEBUFFERSAREBASICALLY0:255*


//*WITHA12-BYTEMARGINTOMINIMISETHENUMBEROFTESTSFOR*


//*THEBUFFERFULLCONDITION*


//**


//*PPCURR(GLACURR)ISTHEBUFFERPOINTER*


//*CA(GLACA)ISTHERELATIVEADDRESSOFTHENEXTBYTE*


//*CABUF(GLACABUF)ISCA(GLACA)FORSTARTOFBUFFER*


//***********************************************************************


//*DELSTART


void RECODE(int S, int F, int AD) {
if  (S != F)  {

PRINTSTRING("\nCODE FOR LINE"); WRITE(  LINE, 5); 
NCODE(S, F, AD); 

}


} /* End of Begin/Rt/Fn/Map depth=2 */;

//*DELEND


void CODEOUT(void) {
if  (PPCURR > 0)  {

//*DELSTART


if  (DCOMP != 0) RECODE(ADDR(CODE[0])
, ADDR(CODE[PPCURR])
, CABUF); 
//*DELEND


if  (INHCODE == 0) LPUT(1, PPCURR, CABUF, ADDR(CODE[0])
); 
  PPCURR = 0;   CABUF = CA; 

}


} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*ADDAHALFWORDOFBINARYTOTHEBUFFER*


//***********************************************************************


if  (USEIMP == YES)  {

  CODE[PPCURR] = HALFWORD >> 8; 
  CODE[PPCURR + 1] = HALFWORD; 
  PPCURR = PPCURR + 2; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*ADDAWORDOFBINARYTOTHEBUFFER*


//***********************************************************************


int I;

if  (USEIMP == YES)  {

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

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

void PSF1(int OPCODE, int K, int N) {
//***********************************************************************


//*PLANTTHEHALFWORDFORMSOFPRIMARYFORMATNRINSTRNS*


//*IFNISTOOLARGEFORTHESHORTFORMPF1ISCALLEDTOPLANT*


//*THECORRESPONDINGLONGFORM*


//***********************************************************************


int KPP;

//ABORTunless0<=K<=2andOPCODE&1=0


if  (K == 0 && -64 <= N && N <= 63 || K != 0 && 0 <= N && N <= 511)  {

if  (K != 0)   N = N / 4; 
if  (USEIMP == YES)  {

  CODE[PPCURR] = OPCODE | K >> 1; 
  CODE[PPCURR + 1] = (K & 1) << 7 | N & 127; 
  PPCURR = PPCURR + 2; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

} else {

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

}


} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*PLANTTHENORMALFORMSOFPRIMARYFORMATINSTRNS(IETHOSE*


//*WHICHDONOTDEPENDONTHESIZEOFN)*


//***********************************************************************


int INC;

//ABORTunless0<=KP<=3and0<=KPP<=7andOPCODE&1=0


  INC = 2; 
if  (KPP == PC)  {

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

}

if  ((1 << KPP) & 0b101100 != 0)   N = N / 4; 
if  (USEIMP == YES)  {

  CODE[PPCURR] = OPCODE | 1; 
  CODE[PPCURR + 1] = 0x80 | KP << 5 | KPP << 2 | (N >> 16 & 3); 
  CODE[PPCURR + 2] = N >> 8 & 255; 
  CODE[PPCURR + 3] = N & 255; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*ASPF1BUTCUTVALIDFORMSTOSHORTFORM*


//***********************************************************************


int INC;

  INC = 2; 
if  (KPP == 0 && 0 == KP && -64 <= N && N <= 63 || KPP == LNB && KP & 1 == 0 && 0 <= N && N <= 511)  {

if  (KPP == LNB)   KP = 1 + (KP >> 1); 
if  (KP != 0)   N = N / 4; 
if  (USEIMP == YES)  {

  CODE[PPCURR] = OPCODE | KP >> 1; 
  CODE[PPCURR + 1] = (KP & 1) << 7 | (N & 127); 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} else {

if  (KPP == PC)  {

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

}

if  ((1 << KPP) & 0b101100 != 0)   N = N / 4; 
if  (USEIMP == YES)  {

  CODE[PPCURR] = OPCODE | 1; 
  CODE[PPCURR + 1] = ((4 | KP) << 3 | KPP) << 2 | (N >> 16 & 3); 
  CODE[PPCURR + 2] = N >> 8 & 255; 
  CODE[PPCURR + 3] = N & 255; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}

if  (KPP <= 5)   INC = 4; 

}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

void PF2(int OPCODE, int H, int Q, int N, int MASK, int FILLER) {
//***********************************************************************


//*PLANTSECONDARY(STORETOSTORE)FORMATINSTRNS*


//*THESEMAYBE16OR32BITDEPENDINGONQ*


//***********************************************************************


//ABORTunless0<=H<=1and0<=Q<=1and0<=N<=127  !andOPCODE&1=0


PLANT(OPCODE << 8 | H << 8 | Q << 7 | N); 
if  (Q != 0) PLANT(MASK << 8 | FILLER); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void PF3(int OPCODE, int MASK, int KPPP, int N) {
//***********************************************************************


//*PLANTTHETERTIARY(JUMP)FORMATINSTRUCTIONS*


//***********************************************************************


//ABORTunless0<=MASK<=15and0<=KPPP<=7andOPCODE&1=0


if  (KPPP == PC)  {

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

}

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

  CODE[PPCURR] = N >> 8 & 255; 
  CODE[PPCURR + 1] = N & 255; 
  PPCURR = PPCURR + 2;   CA = CA + 2; 

}

if  (PPCURR >= 256) CODEOUT(); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void NOTECREF(int CA, int N) {
//***********************************************************************


//*NOTETHATA(PC+N)INSTRUCTIONHASNRELATIVETOCONSTTABLE*


//*NOTREATIVETOCODE.REMEMBERTHEADDRESSOFTHEINSTRUCTION*


//*SOTHATANLPUT(18)CORRECTIONCANBEMADEATENDOFCOMPILATION*


//***********************************************************************


/*pending name*/recfm  *CELL;
//(LISTF)


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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*PLANTASERIESOFINTRUNSFROMARRAYFIXEDCODE*


//***********************************************************************


int I;

//constintegerarrayFIXEDCODE(0:127)


//cycleI=FROM,1,TO


//PCONST(FIXEDCODE(I))


//repeat



} /* End of Begin/Rt/Fn/Map depth=2 */;

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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

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


if  (L +   GLACURR > 256)  {

if  (INHCODE == 0) LPUT(2,   GLACURR, GLACABUF, ADDR(GLABUF[0])
); 
    GLACURR = 0;   GLACABUF = GLACA; 

}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*WRITEUPTOONEWORDINTOOBJECTFILEOUTOFSEQUENCE*


//***********************************************************************


int *WCABUF;

int I; int RELAD; int BUFAD;

  WCABUF = CABUF;   BUFAD = ADDR(CODE[0]); 
if  (AREA == 2) {   WCABUF = GLACABUF;   BUFAD = ADDR(GLABUF[0]);  }
  RELAD = AT - WCABUF; 
if  (0 <= RELAD && RELAD <= 256 && AREA <= 3)  {

for (I = 0; I != BYTES - 1; I += 1) {
  BYTEINTEGER(RELAD + BUFAD + I)
 = VALUE >> ((BYTES - 1 - I) << 3); 
}

} else {

if  (RELAD == -2) CODEOUT(); 
if  (INHCODE == 0) LPUT(AREA, BYTES, AT, ADDR(VALUE)
 + 4 - BYTES); 
//*DELSTART


if  (DCOMP == 1 && 1 == AREA) NCODE(ADDR(VALUE)
 + 4 - BYTES, ADDR(VALUE)
 + 4, AT); 
//*DELEND



}


} /* End of Begin/Rt/Fn/Map depth=2 */;


int PARAMDES(int PREC) {
//***********************************************************************


//*SETUPBNDEDL=1DESRIPTORFORPASSINGVARIABLEBYREFERENCE*


//*ONLYTHETOPHALFISSETUP*


//***********************************************************************


int K; int DES;

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*SETUP8BITZEROADDRESSUNSCALEDBCIDESCRTRFORMAPPING*


//***********************************************************************


int K; int DES0; int DES1;

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

int SPECIALCONSTS(int WHICH) {
//***********************************************************************


//*PUTSCERTAINSPECIALCONSTANTSINTOTHECONSTANTTABLEON*


//*DEMANDANDREMEMBERSTHEIRPOSNTOAVOIDSEARCHONG*


//***********************************************************************


const int SCS[(5)-(0)+1]
;
$define SCS[N0] SCS[(N0)-(0)]
 = 
0x40800000, 
0, 
0x41100000, 
0, 
1, 
0;

int K;

  K = DESADS[WHICH + 16]; 
unless  (K == 0) return K; 
STORECONST(K, 8, ADDR(SCS[2 * WHICH])
); 
  DESADS[WHICH + 16] = K; 
return K; 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void STORECONST(int *D, int L, int AD) {
//***********************************************************************


//*PUTTHECONSTANTVALOFLENGTH'L'INTOTHECONSTANTTABLE*


//*ACHECKISMADETOSEEIFTHECONSTANTHASALREADY*


//*BEENINSERTEDINWHICHCASETHEOLDCOPYISREUSED*


//***********************************************************************


int I; int J; int K; int C1; int C2; int C3; int C4; int LP;

  LP = L / 4;   C2 = 0;   C3 = 0;   C4 = 0; 
for (I = 0; I != L - 1; I += 1) {
  BYTEINTEGER(ADDR(C1)
 + I)
 = BYTEINTEGER(AD + I); 
}
if  (PARMOPT != 0) goto SKIP; 
  K = CONSTBTM; //AFTERSTRINGSINCTABLE


if  (L == 4)  {

if  (USEIMP == YES)  {

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

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; AGN1: 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} else {

  J = CONSTPTR - LP; 
while  (K <= J) {
if  (CTABLE == C1 && CTABLE == C2 && CONSTHOLE < K || CONSTHOLE >= K + LP)  {

if  (L == 8 || CTABLE == C3 && CTABLE == C4) {   D = 4 * K | 0x80000000; return;  }

}

  K = K + 2; 
}

}

SKIP: 
if  (L == 4 && CONSTHOLE != 0)  {

  CTABLE = C1; 
  D = 4 * CONSTHOLE | 0x80000000; 
  CONSTHOLE = 0; 
return; 

}

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*SAVEACOPYOFTHEREGISTERSTATEFORFUTUREREFERENCE*


//***********************************************************************


int I; int USE;

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


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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*RESETTHEREGISTERSTOENVIRONMENTINLISTHEADEDBY'HEAD'*


//***********************************************************************


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

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

void RELOCATE(int GLARAD, int VALUE, int AREA) {
//***********************************************************************


//*PLANTSAWORDINTHEGLA(IFGLARAD<0)ANDARRANGESTO*


//*RELOCATEITRELATIVETOANAREA(CODE=1,GLA=2,CST=4,GST=5*


//*IFTHERELOCATIONISRELATIVETOSYMBOLTABLESTHEWORD*


//*CANNOTBERELOCATEDTILLSIZEOFTHECODE(ORGLA)ISKNOWN*


//***********************************************************************


if  (GLARAD < 0) { PGLA(4, 4, ADDR(VALUE)
);   GLARAD = GLACA - 4;  }
LPUT(19, 2, GLARAD, AREA); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void GXREF(_imp_string NAME, int MODE, int XTRA, int AT) {
//***********************************************************************


//*ASKLPUTTOARRANGEFORADOUBLEWORDAT'AT'INTHEGLA*


//*TOCONTAINADESCRIPTORFORNAME'NAME'.*


//*MODE=0STATICCODEXREF*


//*MODE=1DYNAMICCODEXREF*


//*MODE=2DATAXREFXTRA=MINIMIUMLENGTH*


//***********************************************************************


int LPUTNO;

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

void CXREF(_imp_string NAME, int MODE, int XTRA, int *AT) {
//***********************************************************************


//*CREATEAZEROEDAREAINTHEGLAANDCALLGXREFTOGET*


//*ITFILLEDATLOADTIMEWITHINFORMATIONONANEXTERNALOBJECT*


//*PARAMETERSAREASFORGXREF.*


//***********************************************************************


int Z1; int Z2;

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


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

} /* End of Begin/Rt/Fn/Map depth=2 */;

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


//*PUTACODEDESCRIPTORINTOTHEPLTFORUSEBYDEFINEEP*


//***********************************************************************


int DESC1; int DESC2;

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

} /* End of Begin/Rt/Fn/Map depth=2 */;

void DEFINEEP(_imp_string NAME, int ADR, int AT, int MAIN) {
//***********************************************************************


//*ANEPCONSISTSOFACODEDESCRIPTORINTHEGLA(PLT)OF*


//*FILECONTAININGTHEEP.LPUTISTOLDABOUTTHISANDTHELOADER*


//*ARRANGESTOPUTADESCRIPTOR-DESCRIPTORTOTHECODE-DESC*


//*INTHEGLAOFANYFILEREFERENCESTHISEP.THISFIRSTWORD*


//*OFICLSPLTISTHEMAINEPANDWEMIMICTHISASFARASPOSS*


//***********************************************************************


if  (AT == 0)   FIXEDGLA[1] = ADR;  else PLUG(2, AT + 4, ADR, 4); 
RELOCATE(AT + 4, ADR, 1); 
if  (NAME != "") LPUT(11, MAIN << 31 | 2, AT, ADDR(NAME)
); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void PROLOGUE(void) {
//***********************************************************************


//*GENERATESTHESUBROUTINETHATALWAYSAREREQUIREDONTOTHE*


//*FRONTOFTHEOBJECTPROGRAMWHERETHEYAREDIRECTLYADDRESABLE*


//***********************************************************************


auto int STRINGIN(int POS);
auto void ERREXIT(int A, int B, int C);
int I; int K; int L; int STCA;

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


//GENERATETHEFIXED-FLOATCONSTANTSTHATMAYBENEEDED


//


  PLABS[1] = CA; 
for (I = 0; I != 1; I += 1) {
PCONST(UNASSPAT); 
}
//


//GENERATETHERUNTIMEERRORROUTINE:-


//MDIAGSFORNRISroutineMDIAGS(intPC,LNB,ERROR,XTRA)


//PCISADUMMY(SEGFIELDONLYUSED)EXCEPTAFTERCONTINGENCY


//ONENTRYTOTHISSUBROUTINEERROR&XTRAAREINACCAS64BITINTEGER


//ENTRYHASBEENBYJLKSORETURNADDRESSSTACKED


//


//RTFPRCL4TOPLANTPARAMS


//JLK+1STACKDUMMYPC


//STLNTOSLNBASSECONDPARAMETER


//STTOSERRORNOASTHIRDPARAM


//LXN(LNB+4)POINTERTOGLA


//RALN9TOSTOREDLNB


//CALL((XNB+10))VIAXREF=DESCRIPTOR-DESCRIPTOR


//JTOSBACKAFTERAMONITOR


//


  PLABS[2] = CA; 
PSF1(PRCL, 0, 4); 
PSF1(JLK, 0, 1); 
PF1(STLN, 0, TOS, 0); 
PF1(ST, 0, TOS, 0); 
PSF1(LXN, 1, 16); 
PSF1(RALN, 0, 9); 
PF1(CALL, 2, XNB, 40); 
PF1(JUNC, 0, TOS, 0); 
//


//SUBROUTINETOCALLDEBUGROUTINE(S#IMPMON)LINENOINACC


//


//PRCL4


//STTOS


//LXN(LNB+4)


//RALN6


//CALL((XNB+IMPMONEPDISP))


//JUNCTOS


//


if  (PARMDBUG != 0)  {

  PLABS[3] = CA; 
CXREF("S#IMPMON", PARMDYNAMIC, 2, K); 
PSF1(PRCL, 0, 4); 
PF1(ST, 0, TOS, 0); 
PSF1(LXN, 1, 16); 
PSF1(RALN, 0, 6); 
PF1(CALL, 2, XNB, K); 
PF1(JUNC, 0, TOS, 0); 

}

//


//SUBROUTINETOADVANCESTACKFRONTBYBWORDSANDFILLWITHUNASSIGNED


//


//JAT12,*+13BISZERO


//LSSTOS


//STSFTOS


//LDTBSTRINGDECRIPTORSETUPDESCRIPTORFORMVL


//LDATOS


//ASFBADVANCEBYBWORDS


//MYB4CHANGEBTOBYTES


//LDBBANDMOVETOBOUNDFIELD


//MVLL=DRANDFILLWITHX80S


//STTOS


//JTOSRETURN


//


if  (PARMCHK == 1)  {
//ONLYREQUIREDWITHCHKING


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

}

//


//SOMEERRORROUTINES


//


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


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


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


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


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


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


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


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


if  (PARMOPT != 0) ERREXIT(13, 36, 0); //WRONGNOOFPARAMS


//


//PUTTHESTRINGSONTOTHEFRONTOFCONSTANTAREA


//


  CTABLE = 0x18000001; 
  CTABLE = 4; 
  STCA = 8;   L = ADDR(CTABLE); 
  CONSTPTR = 2; //INCASENOSTRINGS


while  (STRLINK != 0) {
  I = STRLINK;   STRLINK = FROMAR4(I); 
TOAR4(I, STRINGIN(I + 4)
); //CHANGELINKTOSTRINGADDR


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


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

}

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


//*PUTASTRINGINTOTHECONSTANTAREACHECKINGFORDUPLICATES*


//***********************************************************************


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

/*pending name*/recfm  *CELL;
//(LISTF)


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

} /* End of Begin/Rt/Fn/Map depth=3 */;

void ERREXIT(int LAB, int ERRNO, int MODE) {
//***********************************************************************


//*MODE=0FORDUMMY(ZERO)XTRA-MODE=1XTRAINBREG*


//***********************************************************************


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

} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;

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

int TCELL; int NUMMOD; int JJ; int JJJ; int KK; int QQ; int MARKER; int REPORTUI; int XDISP; int MASK; int   BASE; int AREA; int ACCESS; int DISP; int EXTRN; int CURRINST; int VALUE; int STRINGL; int   PTYPE; int I; int J; int OLDI; int USEBITS; int TWSPHEAD; int KKK; int STRFNRES; int   MARKIU; int MARKUI; int MARKC; int MARKE; int MARKR;

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

/*pending name*/recfm  EXPOPND;
//(RD)

//RESULTRECORDFOREXPOP


  CURRINST = 0; 
  TWSPHEAD = 0; 
int SGRUSE[(7)-(0)+1]
;
$define SGRUSE[N0] SGRUSE[(N0)-(0)]
int SGRINF[(7)-(0)+1]
;
$define SGRINF[N0] SGRINF[(N0)-(0)]
/*H imp80-switch.h:2313*/
goto SW[A]; 
SW_23://INCLUDESOMETHING


SW_24://REDUNDANTSEP


SW_2://<CMARK><COMMENTTEXT>


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


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


unless  (A == 2 && A == 2) goto SWITCH; //NOENAMSEORASSNMNT


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


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


CLOOP(0, P + 1, 0); 

} else {

CLOOP(6, P + 6, P + 1); 

}

goto CSSEXIT; 
//


SW_6://REPEAT


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


  J = FROMAR4(P + 2); 
CODEOUT(); 
  DCOMP = J >> 28; goto CSSEXIT; 
//


SW_3://(iu)(COND)then(UI)(ELSE'')


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


  MARKE = 0; 
if  (A == 3)  {

  MARKE = MARKR + 1 + FROMAR2(MARKR + 1); 
  MARKUI = MARKR + 3; 

}

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


goto CSSEXIT; 
SWITCH: 
{ /* %begin block */
//SWITCHLABEL


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

int BITS[(2)-(0)+1]
;
$define BITS[N0] BITS[(N0)-(0)]

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


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


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


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


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


MLINK(HEAD); //KPOINTSTOBITLIST


if  (KKK <= JJ && JJ <= KK) goto INBD; 
FAULT2(50, JJ, FNAME); goto BEND; 
INBD:     Q = JJ - KKK; 
while  (  Q >= 96) {
MLINK(HEAD); 
    Q =   Q - 96; 
}
//


//ASLIST(HEAD)ISTHESTARTOF96BITENTRYINTHEBITLIST


//CHECKBITNOQTOSEEIFLABELALREADYSETANDTHENSETBITQ


//


FROM123(HEAD, BITS[0], BITS[1], BITS[2]); 
  QQ =   Q >> 5; //RIGHTWORD


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


unless  (BITS[QQ] & JJJ == 0) FAULT2(6, JJ, FNAME); 
  BITS[QQ] = BITS[QQ] | JJJ; 
REPLACE123(HEAD, BITS[0], BITS[1], BITS[2]); 
//


//OPTIMISED(ARR=2)SWITCHESBASEPTPOINTSTOTHE


//ZEROETHNOTTHEFIRSTELEMENT


//


if  (ARR == 2)   KKK = 0; //RESETLBIFDESCTOELEMNT0


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


PLUG(2, QQ, CA, 4); //OVERWRITETHEWORDINTABLE


//RELOCATION(BYHDOFCODE)INTACT


BEND: 
} /* End of Begin/Rt/Fn/Map depth=3 */;
goto CSSEXIT; 
SW_7://(wu)(SC)(COND)(RESTOFWU)


unless  (  LEVEL >= 2) FAULT(57, 0); 
    MARKIU = P + 1; //TOWHILE/UNTIL


  MARKC =   MARKIU + 3; //TO(SC)(COND)


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


SW_8://SIMPLEDECLN


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


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


DECLAREARRAYS(QQ, 0); 

} else {

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


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

}


}

goto CSSEXIT; 
//


SW_9://end



{ /* %begin block */
/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
goto S[A]; 
S_1://ENDOFPROGRAM


S_2://ENDOFFILE


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


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


CEND(FLAG[  LEVEL]); 
BEND: 
} /* End of Begin/Rt/Fn/Map depth=3 */;

goto CSSEXIT; 
//


SW_11:

{ /* %begin block */
int MARKER1; int KK; int KKK;

_imp_string XNAME;

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


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


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


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


//1FOREXTERNAL(ETC)SPEC


goto BEND; 

}

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

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


//


if  (  CPRMODE == 2 &&   LEVEL == 1)  {

if  (EXTRN == 3)   EXTRN = 2; 
  XNAME = STRING(DICTBASE + WORD[KK]); 
if  (EXTRN == 1)   XNAME = "S#".XNAME; 
if  (EXTRN == 4)   XNAME = ""; 
  JJ = MIDCELL; //CODEDESCRIPTORRELADDR


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

} else {
//EXTERNALSINPRGMORWRNGLEVEL


unless  (EXTRN == 4) FAULT(55, KK);   EXTRN = 4; 

}

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

  ROUT = 1;   P = P + 4; //FIGUREOUTPTYPEFORFNS&MAPS


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


PACK(KKK); //ANDSTOREPTYPEINKKK



}


}

unless  (OLDI ==   LEVEL && J == 15 &&   PTYPE == KKK)  {

  P =   Q + 3; CRSPEC(0);   P =   Q; goto AGN; 

}

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


//BYexternalroutine



{ /* %begin block */
int PTR; int PTYPEP; int CNT; int PP;

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


  JJ = K;   PLABEL = PLABEL - 1; 
unless  (  COMPILER == 1 ||   CPRMODE == 2 &&   LEVEL == 1)  {

if  (JROUND[  LEVEL + 1] == 0)  {
//NOTJUMPOUTSTANDING


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

}


}

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


  PP = P + 1 + FROMAR2(P + 1); 
  P = P + 3; 
CFPDEL(); 
  PTR = P; 
/* Deferred: until  (A == 2)  */
do {
//CYCLEDOWNNAMELIST


if  (JJ != 0)  {

FROM12(JJ, J, JJJ); //EXTRACTPTYPEXTRAINFO


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

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


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


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


//STANDARDPARAMETERSHAVEBEENDECLARED


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


//ASXTRAPARMJUSTBEFOREDISPLAY


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

} /* End of Begin/Rt/Fn/Map depth=4 */;

BEND: 
} /* End of Begin/Rt/Fn/Map depth=3 */;
goto CSSEXIT; 
//


SW_13://REALS(LN)


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


SW_14://begin



{ /* %begin block */
    PTYPE = 0; 
if  (  LEVEL == 1 && RLEVEL == 0 &&   CPRMODE == 0)  {

CODEDES(JJ); 
DEFINEEP(MAINEP, CA, JJ, 1); 
  RLEVEL = 1;   RBASE = 1; 
  L[1] = 0;   M[1] = 0;   DIAGINF[1] = 0;   AUXSBASE[1] = 0; 
    CPRMODE = 1; 
  N = 24;   NMAX = N; 
FORGET(-1); 
DIAGPOINTER(  LEVEL + 1); 
//


//THECODEPLANTEDISASFOLLOWS:-


//STD(LNB+3)SAVEDESCRIPTOGTOGLA(PLT)


//LXN(LNB+4)TOGLA(PLT)


//STLN(XNB+5)SAVELNBFORSTOPSEQUENCE


//ASF1FORREPORTWORD


//


PSF1(STD, 1, 12); 
PSF1(LXN, 1, 16); 
PF1(STLN, 0, XNB, 20); 
//PSF1(ASF,0,1)


//


//THENEXT8INSTRUCTIONSAREREQUIREDTOSETSF6WORDSINFRONTOFLNB


//ANASF1WORKSASWELLEXCEPTFORK-STANDALONEWHENTHEREMAYBE


//AUSELESSREDUNDANTDESCRIPTORONTHESTACK


//


PF1(STLN, 0, TOS, 0); 
PF1(LSS, 0, TOS, 0); 
PSF1(IAD, 0, 24); 
PF1(STSF, 0, TOS, 0); 
PF1(ISB, 0, TOS, 0); 
PSF1(  ISH, 0, -2); 
PF1(ST, 0, BREG, 0); 
PF1(ASF, 0, BREG, 0); 
//


//


//SETTHEPROGRAMMASKTOMASKOUTUNDERFLOWANDALLOWALLOTHERINTS


//


//MPSRX'40C0'


//


PF1(MPSR, 0, 0, 0x40C0); 
    PTYPE = 1; 

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


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

} /* End of Begin/Rt/Fn/Map depth=3 */;

goto CSSEXIT; 
//


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


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


if  (STACK == 0)  {

SAVEAUXSTACK(); 
  DISP = AUXSBASE[  LEVEL]; 
PSF1(LSS, 2, DISP); //SAVETOPOFAUXSTACK


PSF1(ST, 1, DISP + 12); 

}

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


//


  P = P + 2;   JJ = 0; //SETUPABITMASKINJJ


/* Deferred: until  (A == 2)  */
do {
//UNTILNOMORENLIST


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


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


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

PSF1(LSS, 1, DISP + 12); //RESETAUXSTACKTOP


PSF1(ST, 2, DISP); 

}

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


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


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

{ /* %begin block */
//switch(SWITCHLIST)


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

  Q = P; 
  ARRP = 1; 
if  (PARMOPT == 0)   ARRP = 2; 
/* Deferred: until  (A == 2)  */
do {
//UNTILNO'REST OF SW LIST'


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


  KKK = INTEXP(LB); //EXTRACTLOWERBOUND


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


  RANGE = (KK - LB + 1); 
if  (RANGE <= 0 || KKK != 0)  {

FAULT2(38, 1 - RANGE, FROMAR2(Q + 1)
); 
  LB = 0;   KK = 10;   RANGE = 11; 

}

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


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


  PP = P;   P = Q + 1; 
/* Deferred: until  (A == 2)  */
do {
//DOWNNAMELIST


  K = FROMAR2(P); 
  P = P + 3; 
  OPHEAD = 0;   R = LB; 
//


//SETUPABITLIST(96BITSPERCELL)TOCHECKFORSWITCHLABELS


//SETTWICE


//


do {
PUSH(OPHEAD, 0, 0, 0); 
  R = R + 96; 
} while (! (R > KK) );
//


//FORCHECKINGMODEUSEABOUNDEDWORDDESCRIPTORANDWORDSIZE


//ENTRIESPRESETTO"SW LABEL NOT SET".OPTIMISINGUSEBCIWORD


//ARRAYSWITHBASESETTOZEROETHELEMENT



  D1 = (GLACA + 15) & (-8); //FIRSTTABLEENTRY


  D0 = 0x28000000 | RANGE; //SCALEDWORDDES


if  (ARRP == 2)  {

unless  (LB == 0)   D0 = D0 | 0x01000000; //SETBCIBIT


  D1 = D1 - 4 * LB; 

}

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


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


PUSH(OPHEAD, D1, LB, KK); 
  KFORM = 0;   ACC = 4; 
  J = 1; STORETAG(K, OPHEAD); 
//


//THETABLEWILLCONSISTOFRELATIVEDISPLACEMENTSFROMTHETABLEHEAD


//TOTHELABELPOSN.SETALLTOGOTOPLAB(6)INITIALLY


//


  V = PLABS[6]; 
for (KKK = LB; KKK != KK; KKK += 1) {
RELOCATE(-1, V, 1); //PLABS(6)RELOCATEDBYHDOFCODE


}
} while (! (A == 2) );//FORANYMORENAMESINNAMELIST


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



} /* End of Begin/Rt/Fn/Map depth=3 */;
goto CSSEXIT; 
//


SW_17:  LIST = 1; goto CSSEXIT; 
//


SW_12://'%OWN'(TYPE)(OWNDEC)



{ /* %begin block */
//***********************************************************************


//*INITIALISEDDECLARATIONGOINTOTHEGLAORGLASYMBOLTABLES*


//*EXCEPTFORCONSTARRAYSWHICHGOINTOTHECODESYMBOLTABLES*


//*STRINGSANDARRAYSHAVEAHEADERINTHEGLA.LPUTARRANGES*


//*FORTHELOADERTORELOCATETHEHEADERS.*


//*EXTERNALSAREIDENTICALWITHOWNBUTALSOHAVEADATAEPDEFN*


//*INTHELOADDATASOTHEYCANBEFOUNDATLOADTIME*


//*EXTRINSICSHAVEADATAREFERENCEANDADUMMYHEADERINTHEGLA*


//*THELOADERUSESTHEFORMERTORELOCATETHELATTER.*


//***********************************************************************


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

double RCONST; double LRCONST;

static double ZERO = 0;

_imp_string SCONST; _imp_string NAMTXT;

int *STPTR;

  LPUTP = 5;   STPTR = USTPTR; //NORMALCASEGLASYMBOLTABLES


//FAULT(40,0)ifNMDECS&1#0


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


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


if  (MODE > 1) goto RECORD; //MODE=2FOROWNRECORDS


CLT(); //MODE=3FOROWNRECORDARRAYS


if  (A == 1) CQN(P + 1);  else {   ARR = 1;   NAM = 0;  }
if  (TYPE == 5 && ACC == 0 && 0 == NAM) { FAULT(70, 0);   ACC = 2;  }
  ROUT = 0; PACK(  PTYPE); 
if  (ARR != 0 && NAM == 0) goto NONSCALAR; 
  P = P + 1; 
/* Deferred: until  (A == 2)  */
do {
//UNTIL<RESTOFOWNDEC>NULL


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


while  (A == 1) {
  NNAMES = NNAMES + 1; 
  P = P + 3; 
}
  P = P + 1; //PONCONST''


//


//OBTAINTHEINITIALCONSTANT,ITSTYPE(CTYPE)ANDSIGN(SIGN)


//


  ICONST = 0;   UICONST = 0; 
  RCONST = 0;   LRCONST = 0;   SCONST = ""; 
  SIGN = 3;   CTYPE = TYPE;   CONSTSFOUND = 0;   CPREC = PREC; 
if  (NAM != 0) {   CTYPE = 1;   CPREC = 5;  }
//


if  (A == 1)  {
//CONSTANTGIVEN


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

}

//


do {
//DOWN<NAMELIST>


  J = 0;   K = FROMAR2(PP); 
  NAMTXT = STRING(DICTBASE + WORD[K]); 
if  (NAM != 0)  {
//OWNNAMESANDARRAYNAMES


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


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

} else {

if  (TYPE == 5)  {
//STRING


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


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



} else {

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


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

}

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



} else {
//INTEGER&REAL


if  (  EXTRN == 3)  {
//EXTRINSICS


    PTYPE =   PTYPE | 1 << 10; //EXTRINSICSVIAPTR


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

} else {
//OWN,EXTERNAL&CONST


if  (TYPE == 2)  {

  AD = ADDR(RCONST); 

} else {
//INTEGERVARIABLES


  AD = ADDR(ICONST)
 + 4 - ACC; 

}

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


  TAGDISP = GLACA - ACC; //OFFSETOFVARFORTAGS


    EPDISP = TAGDISP; //ANDFORENTRYDEFN


  EPTYPE = 2; //DATAINADRESSABLEGLA



}


}


}

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


REPLACE2(TAGS[K], INTEGER(AD & (-4))
); //BYTES!


if  (PREC == 6) REPLACE3(TAGS[K], INTEGER(AD + 4)
); 
if  (PREC == 7) REPLACE3(TAGS[K], CONSTP); 

}

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


//***********************************************************************


//*NOINITIALISATIONOFOWNRECORDSALLOWEDSOTHEYAREALL*


//*CLEAREDTOZERO.*


//***********************************************************************


  MARKER1 = P + 1 + FROMAR2(P + 1); //TOFORMATNAME


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


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


/* Deferred: until  (A == 2)  */
do {
  P = P + 1;   K = FROMAR2(P); 
  NAMTXT = STRING(DICTBASE + WORD[K]); 
if  (NAM != 0)  {
//OWNNAMESANDARRAYNAMES


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


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

} else {

if  (  EXTRN == 3)  {
//EXTRINISIC


    PTYPE =   PTYPE | 0x400; //FORCENAM=1(IEVIAPOINTER)


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



} else {

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


PGLA(8, 4, ADDR(AH2)
); //ADDED18MAR76TOFIXBUG


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


  TAGDISP =   EPDISP; //ANDRELOCATERELAPPROPIATEAREA


  EPTYPE = 2; //DATAINGLATABLES


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

}


}

  ACC = BP; //ACCTOSIZEOFRECORD


STAG(TAGDISP, BP); 
  P = P + 2; 
} while (! (A == 2) );
goto BEND; 
NONSCALAR: //OWNANDOWNRECORDARRAYS


//***********************************************************************


//*OWNARRAYSCANBEINITIALISEDBUTONLYONEARRAYCANBE*


//*DECLAREDINASTATEMENT.(THANKHEAVENS!)*


//*OWNRECORDARRAYSARECLEAREDTOZERO*


//***********************************************************************


  P = P + 1; 
  FORMAT = 2 - A; 
RECIN:   PP = P + 1;   P = P + 3;   NNAMES = 1; 
  K = FROMAR2(PP); 
  NAMTXT = STRING(DICTBASE + WORD[K]); 
if  (TYPE >= 3)   BP = ACC;  else   BP = BYTES[PREC]; 
  SACC = ACC;   TYPEP =   PTYPE; 
  AH4 = 12 + DOPEVECTOR(TYPE, BP, 0, K, QQ, LB); 
  SNDISP = AH4 - 12; //DVDISP(+TOPBITFLAG)


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


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


  DIMEN = J; //SAVENOOFDIMENESIONS


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


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


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

}

if  (CONSTSFOUND == 0)  {
//NOCONSTANTSGIVEN


//SOCLEARANAREATOZERO


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

} else {

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

}

if  (  EXTRN == 3)     EPDISP = 0;  else     EPDISP = SPOINT; 
//


//OUTPUTANARRAYHEADINTOTHEGLARELATIVETOTHESTARTOFTHESYMBOL-


//TABLESINWHICHTHEARRAYRESIDES.


//


  J = DIMEN; //RESETDIMENSIONSAFTERINITTING


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


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


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


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



} else {

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



}

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


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


STAG(TAGDISP, QQ); 
goto BEND; 
void INITSPACE(int SIZE, int NELS) {
//***********************************************************************


//*PISTOFIRSTENTRYFORCONSTLIST*


//*MAPSPACEONTOWORKFILEENDTOGIVESANEERRORMESSAGEIF*


//*THEREWASNOTENOUGHSPACE*


//***********************************************************************


int RF; int I; int K; int ELSIZE; int AD; int SPP; int LENGTH; int SAVER; int WSIZE; int WRIT;

char **SP;


if  (SIZE > 4096)   WSIZE = 4096;  else   WSIZE = SIZE; 
/* TO DO: %ARRAYFORMAT DECLARATION */;

  SAVER = R;   R = R + WSIZE + 256; 
if  (R > ARSIZE) FAULT(102, 0); 
  SP = ; 
if  (TYPE == 1)   AD = ADDR(ICONST)
 + 4 - ACC; 
if  (TYPE == 2)   AD = ADDR(RCONST); 
if  (TYPE == 5)   AD = ADDR(SCONST); 
  SPP = 0;   WRIT = 0; 
  ELSIZE = SIZE / NELS; 
/* Deferred: until  (A == 2)  */
do {
XTRACTCONST(TYPE, PREC); 
if  (A == 1)  {
//REPITITIONFACTOR


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

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


if  (INHCODE == 0) LPUT(LPUTP, SPP, STPTR + WRIT, ADDR(SP)
); 
  WRIT = WRIT + SPP; 
  SPP = 0; 

}

}
} while (! (A == 2) );//UNTILP<ROCL>=null


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

} /* End of Begin/Rt/Fn/Map depth=4 */;

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

} /* End of Begin/Rt/Fn/Map depth=4 */;

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

} /* End of Begin/Rt/Fn/Map depth=4 */;

void XTRACTCONST(int CONTYPE, int CONPREC) {
//***********************************************************************


//*PPOINTSTOP<+'> OF <+'><OPERNAD><RESTOFEXPR>ANDISUPDATED*


//*THECONSTISCONVERTEDTOREQUIREDFORMANDIFINTEGER*


//*ISLEFTINICONST,IFREALINRCONSTANDIFSTRINGINSCONST*


//***********************************************************************


int LENGTH; int STYPE; int SPREC; int SACC; int CPREC; int MODE; int I;

  STYPE =   PTYPE;   SACC = ACC; //MAYBECHANGEDIFCONSTISEXPR


if  (CONTYPE == 5)  {

  CTYPE = 5; 
if  (A == 4 && A == 2 && A == 0x35 && A == 2)  {

  SCONST = STRING(ADDR(A)
); 
  LENGTH = A; 
  P = P + A + 9; 

} else {

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

}


} else {

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


  CTYPE = TYPE;   CPREC = PREC; 
if  (CTYPE == 1)  {

  ICONST = INTEGER(CONSTP); 
if  (CONPREC == 6) {   UICONST = ICONST;   ICONST = INTEGER(CONSTP + 4);  }

} else {

  RCONST = LONGREAL(CONSTP); 
if  (CONPREC == 7)  {
//LONGLONGSUNALIGNEDINAR


for (I = 0; I != 15; I += 1) {
  BYTEINTEGER(ADDR(RCONST)
 + I)
 = BYTEINTEGER(CONSTP + I); 
}

}


}


}

    PTYPE = STYPE; UNPACK();   ACC = SACC; 
//


//FAULTANYOBVIOUSERRORSIE:-


//CONSTANTFOREXTRINSICORINCOMPATIBLETYPEORSTRINGTOOLONG


//


if  (  EXTRN == 3 || CTYPE == 5 && LENGTH >= ACC || CONTYPE == 1 && CONPREC == 3 && ICONST > 255 || CONPREC == 4 && ICONST > 0xFFFF) FAULT(44, CONSTSFOUND); 

} /* End of Begin/Rt/Fn/Map depth=4 */;

BEND: 
} /* End of Begin/Rt/Fn/Map depth=3 */;
goto CSSEXIT; 
SW_18:
ABORT(); 
SW_10:

{ /* %begin block */
//record(RDECLN)


//***********************************************************************


//*RECORDSAREALLOCATEDATCOMPILETIMEWHENPOSSIBLE*


//*SEECRFORMATFORACTIONONRECORDFORMATDECLARATIONS*


//***********************************************************************


int MODE; int RECL; int ALLOC; int FNAM; int FINF; int NAME; int OPHEAD;

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


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

}

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


COPYTAG(FNAM); 
  FINF = TCELL; 
if  (TYPE != 4)  {

  FINF = DUMMYFORMAT; 
  ACC = 4; FAULT(62, FNAM); 

}

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


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


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

}

if  (TYPE == 3 && NAM == 1 && FROM3(TCELL)
 & 0xFFFF == 0)  {

REPLACE3(TCELL, FINF | K << 16); 
REPLACE2(TCELL, SNDISP << 16 | RECL); 

} else FAULT(63, 0); 

} else {
//RECORDDECLARATION


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


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

} else {
//ARRAYSOFRECORDS


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


SETLINE(); 
DECLAREARRAYS(  Q, FINF); 

}


}

BEND: 
} /* End of Begin/Rt/Fn/Map depth=3 */;
goto CSSEXIT; 
//


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


unless  (  LEVEL >= 2) FAULT(57, 0); 

{ /* %begin block */
auto void CIND(void);
int FNAME; int ALT; int OPCODE; int FORM; int H; int Q; int MASK; int FILLER;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*//* TO DO: %SWITCH DECLARATION */
/*N imp80-switch.h:2793*//* TO DO: %SWITCH DECLARATION */
/*N imp80-switch.h:2793*//* TO DO: %SWITCH DECLARATION */
/*N imp80-switch.h:2793*/
  ALT = A;   P = P + 2; 
  OPCODE = CALL; 
goto SW[ALT]; 
SW_1:SW_2:
  FNAME = FROMAR2(P); 
COPYTAG(FNAME); 
unless  (ROUT == NAM && NAM == 0 && ARR == 0 && PREC > 4 && I == RBASE && TYPE != 7) FAULT(33, FNAME); 
if  (ALT == 1) PSF1(ST, 1, K);  else GETINACC(ACCR, BYTES[PREC] >> 2, 0, LNB, K); 
goto EXIT; 
SW_3://PUT(HEXHALFWORD)


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


CNOP(A, A); 
goto EXIT; 
SW_4://ASSEMBLER


  FORM = A; //FORM=PRIMARY,SECONDARYOR3RY


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


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


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


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


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


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


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


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


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

  Q = 1; 
  MASK = FROMAR2(P); 
  FILLER = FROMAR2(P + 2); 
  P = P + 4; 
unless  (0 <= MASK | FILLER && MASK | FILLER <= 255) FAULT(32, 0); 

}

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


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


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


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


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


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


//*COMPILEASYMBOLICOPERANDBYSETTINGACCESS,AREA&DISP*


//***********************************************************************


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

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
  AFN = ADDR(FN0); 
  ALT = A;   ACCESS = 0; 
  P = P + 1; goto SW[ALT]; 
SW_1://(=')(PLUS')(ICONST)


  P = P + 1; //PAST(='')


  D = A;   CTYPE = A; 
  CPREC = CTYPE >> 4;   CTYPE = CTYPE & 7; 
if  (CPREC == 4)   FN0 = FROMAR2(P + 2);  else {

for (JJ = 0; JJ != BYTES[CPREC] - 1; JJ += 1) {
  BYTEINTEGER(AFN + JJ)
 = A; 
}

}

  P = P + 2 + BYTES[CPREC]; 
if  (D == 2)  {

if  (CTYPE == 2)   FN0 = FN0 ^ 0x80000000;  else {

if  (CPREC == 6)   LONGINTEGER(AFN)
 = -LONGINTEGER(AFN);  else   FN0 = -FN0; 

}


}

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


  FN0 = FROMAR2(P);   P = P + 2; 
COPYTAG(FN0); 
if  (LITL == 1 && ARR == 0)  {

  CTYPE = TYPE;   CPREC = PREC; 
  ALT = TAGS[FN0]; 
FROM123(ALT, D, FN0, FN1); 
if  (CPREC == 7)   AFN = FN1; 
goto CNST; 

}

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


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


  AREA = 6;   DISP = 0; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

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

} /* End of Begin/Rt/Fn/Map depth=3 */;

goto CSSEXIT; 
SW_20:
//'%TRUSTEDPROGRAM'


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


  KK = FROMAR2(P + 1); 
unless  (  CPRMODE == 0) FAULT(58, 0); 
  MAINEP = STRING(DICTBASE + WORD[KK]); 
goto CSSEXIT; 
void CRFORMAT(int *OPHEAD) {
//***********************************************************************


//*CONVERTSARECORDFORMATSTATEMENTTOALISTHEADEDBYOPHEAD*


//*FORMATOFANENTRY.*


//*S1=SUBNAME<<20!PTYPE<<4!J*


//*S2,S3=416BITDISPLACEMENTSD2,ACC,D1,KFORM*


//*NORMALLYD1=RECORDRELATIVEDISPLACEMENTANDACC=LMAX(STRINGS)*


//*FORARRAYSD2=FIRSTELEMENTDISPLACEMENTANDD1=DISPLACEMENT*


//*OFRECORDRELATIVEARRAYHEADINTHEGLA*


//*KFORMISONLYUSEDFORRECORDSANDPOINTSTOTHEFORMAT*


//*ONEXITACCHASTHERECORDSIZEROUNDEDUPTOTHEBOUNDARY*


//*REQUIREDBYITSLARGESTCOMPONENT*


//***********************************************************************


int D1; int D2; int NLIST; int FORM; int RL; int MRL; int UNSCAL; int SC; int DESC; int FN; int INC; int Q; int R; int A0; int A1; int A2; int   DV; int RFD; int LB; int OB; int TYPEP; int SACC;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
auto void SN(int Q);
auto void ROUND(void);
  NLIST = 0;   OPHEAD = 0;   FORM = 0;   ACC = 0;   OB = 0; 
  MRL = 0;   INC = 0; //INCCOUNTSDOWNRECORD


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


CQN(P);   P = P + 1; 
PACK(  PTYPE);   D2 = 0; 
  RL = 3; 
if  (NAM == 0 && 3 <= PREC && PREC <= 4)   RL = PREC - 3; 
AGN: ROUND();   J = 0; 
/* Deferred: until  (A == 2)  */
do {
  D1 = INC; SN(P); 
  P = P + 3;   INC = INC + ACC; 
} while (! (A == 2) );
  P = P + (RFD >> 2 << 1); //EXTRA2FORRECORDSTOSKIPFORMAT


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


  Q = P;   ARR = 1; PACK(  PTYPE); 
if  (TYPE <= 2) {   UNSCAL = 0;   SC = PREC;  } else {   UNSCAL = 1;   SC = 3;  }
if  (PREC == 4)   DESC = 0x58000002;  else   DESC = SC << 27 | UNSCAL << 25 | (1 - PARMARR) << 24; 
/* Deferred: until  (A == 2)  */
do {
//UNTIL<RESTOFARRAYLIST>NULL


do   P = P + 3; until  (A == 2) 

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


  ACC = SACC;     PTYPE = TYPEP; UNPACK(); 
if  (TYPE == 5 || TYPE == 1 && PREC == 3)   RL = 0;  else   RL = 3; 
ROUND(); 
/* Deferred: until  (A == 2)  */
do {
//HEADINTOGLAFOREACHARRAY


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


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


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


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


RFEL_5://RECORDARRAYSINRECORDS


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


unless  (  PTYPE == 4) FAULT(62, FN); 
  TYPE = 3;   PREC = 3;   FORM = TCELL; 
if  (RFD == 4)  {

    PTYPE = 0x33;   P = P + 3;   D2 = 0; 
  RL = 3; goto AGN; 

}

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


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


unless  (INC <= 0x7FFF) FAULT(98, 0); 
CLEARLIST(NLIST); 
return; 
void SN(int Q) {
//***********************************************************************


//*CHECKTHESUBNAMEHASNOTBEENUSEDBEFOREINTHISFORMAT*


//*ANDENTERITWITHITSDESCRIPTORSINTOTHELIST.*


//***********************************************************************


  FNAME = FROMAR2(Q); 
unless  (FIND(FNAME, NLIST)
 == -1) FAULT2(61, 0, FNAME); 
BINSERT(OPHEAD, OB, FNAME << 20 |   PTYPE << 4 | J, D2 << 16 | ACC, D1 << 16 | FORM); 
PUSH(NLIST, 0, FNAME, 0); 

} /* End of Begin/Rt/Fn/Map depth=4 */;

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

} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINECRFORMAT


int DISPLACEMENT(int LINK) {
//***********************************************************************


//*SEARCHAFORMATLISTFORASUBNAME*


//*A(P)HASENAME--LINKISHEADOFRFORMATLIST.RESULTISDISP*


//*FROMSTARTOFRECORD*


//***********************************************************************


/*pending name*/recfm  *FCELL; /*pending name*/recfm  *PCELL; /*pending name*/recfm  *LCELL;
//(LISTF)


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

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


  FCELL = ASLIST[LINK]; //ONTOFORMATTAGCELL


  LINK = FCELL & 0x7FFF; //LINKTOSIDECHAIN


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


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


  PCELL = LCELL; 
  LCELL = CELL; 
  FCELL = FCELL & 0xFFFF0000 | LINK; 

}
//ARRANGINGLISTWITHTHISSUBNAME


//ATTHETOP


return K; 

}

  PCELL = LCELL; 
  LINK = LCELL; 
}

}

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

} /* End of Begin/Rt/Fn/Map depth=3 */;

int COPYRECORDTAG(int *SUBS) {
//***********************************************************************


//*PRODUCEPTYPEETCFORACOMPOUNDNAMEBYCHAININGDOWNONE*


//*ONEORMORERECORDFORMATLISTS.ONEXITRESULT=0IFNO*


//*SUBNAMEFOUNDORSUBNAMEISOFTYPERECORDWITHNOFURTHER*


//*SUBNAMEATTACHED.RESULT#0IFBONE-FIDESUBNAMELOCATED*


//*ONENTRYKFORMHASPOINTERTOTHE(FIRST)FORMATLISTAND*


//*PPOINTSTOTHEA.R.ENTRYFOR(FIRST)ENAME*


//***********************************************************************


int Q; int FNAME;

  SUBS = 0; 
do {
  FNAME = KFORM; 
  P = P + 2; SKIPAPP(); 
if  (A == 2 || FNAME <= 0) return 0; //NO(FURTHER)ENAME


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



} /* End of Begin/Rt/Fn/Map depth=3 */;

void CRNAME(int Z, int REG, int MODE, int BS, int AR, int DP, int *NAMEP) {
//***********************************************************************


//*DEALWITHRECORDELEMENTNAMES.ZASFORCNAME.CLINK=TAGS(RN)*


//*MODE=ACCESSFORRECORD(NOTTHEELEMENT!)*


//*ONEXITBASE,AREA&DISPPOINTTOREQUIREDELEMENT*


//*RECURSIVECALLISNEEDEDTODEALWITHRECORDSINRECORDS*


//*DEPTHSHEWSRECURSIVELEVELS-NEEDEDTOAVOIDMISSETTING*


//*REGISTERINUSEIFRECORDNAMEINRECORDHASTHESAMENAMEAS*


//*AGENUINERECORDNAME.*


//***********************************************************************


int DEPTH; int FNAME;

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


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


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

} else {

CANAME(ARR, BS, DP); 
CENAME(ACCESS, FNAME,   BASE, AREA, DISP, 0); 

}
return; 
//


void CENAME(int MODE, int FNAME, int BS, int AR, int DP, int XD) {
//***********************************************************************


//*FINDSOUTABOUTSUBNAMEANDACTSACCORDINGLY.MOSTLYACTION*


//*CONSISTSOFUPPINGXDBYOFFSETOFTHESUBNAMEBUTISVERY*


//*HAIRYFORRECORDSINRECORDSETC*


//*MODEISACCESSFORTHERECORD*


//***********************************************************************


auto void FETCHRAD(void);
auto void LOCALISE(int SIZE);
int Q; int QQ; int D; int C; int W;

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


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


if  (Z < 14)  {
//NOTARECORDOPERATION


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


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

}


}

return; 

}

  P = P + 1; //FINDOUTABOUTSUBNAME


  Q = DISPLACEMENT(FNAME); //TCELLPOINTSTOCELLHOLDING


UNPACK(); //INFOABOUTTHESUBNAME


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


  P = P + 2; SKIPAPP();   P = P - 3; 
  ACCESS = 0;     BASE = RBASE;   DISP = 0;   AREA = -1; 
return; 

}

  NAMEP = (A << 8 | A) << 16 | NAMEP; //NAMEP=-1UNALTERED!


if  (ARR == 1) goto AE; //ARRAYSINCLUDINGRECORDARRAYS


if  (A == 2)   P = P + 3;  else NOAPP(); 
if  (TYPE <= 2 || TYPE == 5 || TYPE == 3 && A == 2 && 3 <= Z && Z <= 4 || Z == 6)  {

  ACCESS = MODE + 4 + 4 * NAM;     BASE = BS; 
  AREA = AR;   DISP = DP;   XDISP = XD + Q; 
return; 

}

//


//NOWCODINGBECOMESHAIRY:-STILLLEFTARE


//A)RECORDSINRECORDSQPOINTSTOSECONDARYRECORD


//B)RECORDNAMESINRECORDSQHASOFF-SETOFAPOINTER


//C)RECORDARRAYNAMESINRECORDSQHASOFF-SETAHEADERINRECORD


//D)RECORDARRAYSINRECORDSNOTYETALLOWED


//QWOULDHAVEOFF-SETOFARECORDRELATIVEHEADERINTHEGLA


//


  XD = XD + Q; 
  NAMEP = -1; 
if  (NAM == 1)  {

if  (MODE == 0)  {

  DP = DP + XD;   XD = 0;   MODE = 2; 

} else {

LOCALISE(8); //PICKUPRECNAMEDESCR&STCK


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

}


}

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


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


  P = P + 3; 
if  (NAM == 1)  {

  ACCESS = MODE + 8;     BASE = BS; 
  AREA = AR;   DISP = DP;   XDISP = XD + Q; 
return; 

}

//


//PASSINGANARRAYINARECORDBYNAMEMUSTCONSTRUCTPROPERARRAYHEAD


//FROMTHERECORDRELATIVEONEATQ(GLA)


//


  NAMEP = -1; 
FETCHRAD(); 
  AREA = -1;   DISP = Q; 
    BASE = 0;   ACCESS = 0; 
CREATEAH(1); 

} else {
//ARRAYELEMENTSINRECORDS


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


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


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



} else {
//ARRAYRELATIVEHEADINGLA


if  (MODE == 0 || MODE == 2)  {

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

} else {

FETCHRAD(); //RECORDADDRTOACC


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

}

CANAME(3, 0, Q); //RECORDRELARRAYACCESS


//CANRETURNACCESS=1OR3ONLY


if  (PARMARR == 0 && 0 == PARMCHK && ACCESS == 3 && PREC == 3 || TYPE >= 3)  {

PSORLF1(ADB, 0, AREACODE2(BS)
, W); 
unless  (XD == 0) PSF1(ADB, 0, XD); 
  GRUSE[BREG] = 0; 

} else {

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


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


//ONROUTINECENAME


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

}


}


}

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

}

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


//*SETACCTO32BITADDRESSOFRECORD.*


//***********************************************************************


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

} /* End of Begin/Rt/Fn/Map depth=5 */;

void LOCALISE(int SIZE) {
//***********************************************************************


//*REMOVESADESCRIPTORORARRAYHEADFROMARECORDANDSTORES*


//*ITINATEMPORARYUNDERLNB.*


//***********************************************************************


int HOLE;

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

} /* End of Begin/Rt/Fn/Map depth=5 */;
//OFROUTINELOCALISE



} /* End of Begin/Rt/Fn/Map depth=4 */;
//OFROUTINECENAME



} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINECRNAME


void CSTREXP(int MODE, int REG) {
//***********************************************************************


//*PLANTIN-LINECODEFORCONCATENATION.AWORKAREAUNDER*


//*BASEREGISTERCOVERISUSUALLYREQUIRED.THECURRENTLENGTH*


//*OFSTRINGINTHEWORKAREAISKEPTINAREGISTER(BREG)*


//*WHICHISPROTECTEDTHROUGHTHENORMALINTERMEDIATE-RESULT*


//*MECHANISMS.*


//*ONENTRY:-*


//*MODE=0NORMAL.WKAREANOTUSEDFORONEOPERANDEXPSSNS*


//*MODE=1STRINGMUSTGOTOWORKAREA*


//*(ANDTOCOME)*


//*MODE=3CONCATENATEINTOLHSOF=ASSNMNT(E.G.A=B.C)*


//*MODE=4OPTIMISES=S.TBYNOTCOPYINGS*


//*2**4BITOFMODEISSETIFWK-AREANOTTOBEFREEDONEXIT*


//*ONEXIT:-*


//*BASE,DISP&INDEXDEFINERESULT*


//*VALUE#0ifRESULTINAWORKAREA(CCONDMUSTKNOW)*


//*STRINGLSETIFSTRINGLENGTHKNOWN.STRFNRESDEFINESLENREG*


//***********************************************************************


int PP; int WKAREA; int DOTS; int REXP; int ERR; int CLEN; int KEEPWA; int FNAM;

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


unless  (A == 4 && REXP == 0 && MODE == 0) goto NORMAL; 
if  (A == 2) goto SIMPLE; 
unless  (A == 1) goto NORMAL; 
//COPYTAG(FROMAR2(P+5))


//ifPTYPE=SNPTthenPTYPE=TSNAME(K)


//->NORMALunlessROUT=0

//BEWAREOFMAP=FN


//->NORMALifPARMARR=1and(ARR#0orA(P+7)=1)


SIMPLE:   P = P + 4; 
  ERR = STROP(REG); 
unless  (ERR == 0) goto ERROR; 
  VALUE = WKAREA; 
  P = P + 1;   STRFNRES = 0; 
return; 
ERROR: FAULT2(ERR, 0, FNAM); 
    BASE = RBASE;   DISP = 0; 
  VALUE = 0;   ACCESS = 0; 
  P = PP; SKIPEXP(); 
return; 
NORMAL:   CLEN = 0;   P = P + 3; //LENGTHOFCONSTANTPART


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


  DOTS = 0; //NOOPERATORSYET


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


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


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


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


  ERR = 72; unless  (A == CONCOP) goto ERROR; //CONCATENATE


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


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


if  (KEEPWA == 0) RETURNWSP(WKAREA, 268); 
  STRINGL = 0; 
return; 
int STROP(int REG) {
//***********************************************************************


//*DEALSWITHOPERANDFORCONCATENATION.RETURNRESULT=0FOR*


//*VALIDOPERANDOTHERWISEANERRORNUMBER.*


//***********************************************************************


int CTYPE; int VAL; int MODE;

  MODE = A; //ALTERNATIVEOFOPERAND


if  (MODE > 2) return 75; 
if  (MODE != 1)  {

  CTYPE = A; //GETCONSTTYPE&LOSEAMCKFLAGS


if  (CTYPE == 0x35)  {

  STRINGL = A; 
  DISP = FROMAR4(P + 2); 
  P = P + STRINGL + 7; 

} else return 71; 
PF1(LDRL, 0, PC, STRLINK); 
if  (DISP != 0) PSF1(INCA, 0, DISP); 
if  (STRINGL != 1)  {

if  (STRINGL <= 63) PSF1(LDB, 0, STRINGL);  else PF1(LDB, 2, 7, 0); //((DR))



}

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

} else {

  P = P + 1; //MUSTCHECKFIRST


REDUCETAG(); //SINCECNAMEONLYLOADSSTRINGS


//ANDLONGINTSTODR!


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


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

}


}

return 0; 

} /* End of Begin/Rt/Fn/Map depth=4 */;
//OFINTEGERFNSTROP



} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINECSTREXP


void CRES(int LAB) {
//**********************************************************************


//*COMPILESARESOLUTIONE.GA->B.(C).D.(E).FANDJUMPSTOLAB*


//*ONFAILURE.(LAB=0FORUNCONDITIONALRESOLUTIONTOPERMON*


//*FAILURE).*


//*THEMETHODISTOCALLASUBROUTINEPASSING3PARAMS:-*


//*P1POINTSTOLHS(A)*


//*P2STRINGTOCONTAINFRAGMENT(PASSEDBYNAME)*


//*P3THEEXPRESSIONPASSEDASDESCRIPTOR*


//*SUBROUTINETRIESTOPERFORMTHERESOLUTIONANDSETSTHE*


//*CONDITIONCODE=8IFITSUCCEEDS.*


//**


//*ONENTRYLHSISDEFINEDBYDESCRIPTORREG.*


//*PPOINTSTOP(+') OF RHS DEFINED AS (+')(OPERAND)(RESTOFEXP)*


//**


//$THEROUTINEISCOMPACTBUTDIFFICULTTOFOLLOW(ORALTER)*


//*THETIMEINPERMISLARGESOITISNOTWORTHWHILETOPERSUE*


//*CODEEFFICIENCYTOOINDUSTRIOUSLY.*


//**********************************************************************


int P1; int P2; int SEXPRN; int W; int LAST; int ERR; int FNAM;

/*pending name*/recfm  R;
//(RD)


  LAST = 0;   FNAM = 0; //=1WHENENDOFEXPRNSNFOUND


  SEXPRN = 0; //RESOLUTION(BRKTD)EXPRESSNS


  ERR = 74; //NORMALCRESFAULT


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


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


//BUTTHISCHECKEDBEFORECALL


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


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


unless  (A == 1) goto ERROR; //P(OPERAND)=NAME


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

}

PF1(ST, 0, TOS, 0); //B(ORDUMMY)TOP2


unless  (A == 3) goto ERROR; //P(OPERAND)='('(EXPR)')'


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


//


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


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


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


PF2(MV, 1, 1, 0, 0, UNASSPAT & 255); 
  GRUSE[ACCR] = 0; 
if  (PARMARR == 1)  {

PSF1(USH, 0, 8); 
PSF1(USH, 0, -40); 
PPJ(36, 9); 

}

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

} /* End of Begin/Rt/Fn/Map depth=3 */;

void SAVEAUXSTACK(void) {
//***********************************************************************


//*COPYAUXSTACKDESCRPTR&POINTERINTOCURRENTSTACKFRAME*


//*FIVEWORDSAREUSEDFORTHISPURPOSE:-*


//*1&2HOLDAUXSTACKDESCRIPTOR*


//*3HOLDSVALUEATBLKENTRYFORUSEATEXIT*


//*4HOLDSSTACKTOPVALUEAFTERALLARRAYDECLNS(FORons)*


//*5HOLDSTACKLIMITFORCHECKINGATARRAYDECLARATIONS*


//*THELATTERISOMITTEDINPARM=OPT*


//***********************************************************************


int XYNB; int DR0; int DR1;

if  (AUXST == 0)  {
//FIRSTREFPUTREFINPLT


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

}

if  (AUXSBASE[  LEVEL] == 0)  {

  XYNB = SETXORYNB(-1, -1); 
PF1(LD, 2, XYNB, AUXST); 
if  (PARMOPT != 0)  {

PF1(LSS, 1, 0, 2); //PICKUPSTACKTOP


PSF1(ST, 1, N + 16); 

}

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

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

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


//*IFANYARRAYSHAVEBEENPUTONTHEAUXSTACKTHENUNDECLARE*


//***********************************************************************


if  (AUXSBASE[  LEVEL] != 0)  {

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

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void RTEXIT(void) {
//***********************************************************************


//*THISROUTINECOMPILESCODEFORROUTINEEXIT(IE'%RETURN')*


//***********************************************************************


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

} /* End of Begin/Rt/Fn/Map depth=3 */;

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


//*FILLASFINSTNINRTENTRYSEQUENCETOCLAIMTHESTACKFRAME*


//***********************************************************************


int INSTR; int WK;

  WK = AT >> 18; //BYTESCLAIMEDBYENTRYSEQ


  AT = AT & 0x3FFFF; //ADRROFASFINSTRN


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

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CEND(int KKK) {
//***********************************************************************


//*DEALWITHALLOCCURENCESOF'%END'*


//*KKK=PTYPE(>=X'1000')FORROUTINES,FNSANDMAPS*


//*KKK=0FORENDSOF'%BEGIN'BLOCKS*


//*KKK=1FOR'%ENDOFPROGRAM'*


//*endofprogramISREALLYTWOENDS.THEFIRSTISTHEUSERS*


//*ANDTHESECONDISPERMS.KKK=2FORARECURSIVECALLOFCEND*


//*ONENDOFPROGRAMTODEALWITHTHEendCORRESPONDINGTO*


//*THEbeginCOMPILEDINTHEINITIALISATIONSEQUENCE*


//***********************************************************************


int KP; int JJ; int BIT;

auto void DTABLE(int LEVEL);
unless  (KKK == 2) SETLINE(); 
FORGET(-1); 
  BIT = 1 <<   LEVEL; 
//


//NOWPLANTANERROREXITFORFNSANDMAPS-CONTROLSHOULDBERETURNED


//VIAresult=ANSHOULDNEVVERREACHTHEendINSTRUCTION


//


if  (KKK & 0x3FFF > 0x1000 &&   COMPILER == 0 && LASTINST == 0) PPJ(15, 10); //RUNFAULT11


if  (N > NMAX)   NMAX = N; //WORKSPACEPOINTER


//


//CLEAROUTTHELABELLISTFAULTINGLABELSWITHJUMPSOUTSTANDING


//ASNOTSETANDCOMMENTINGONLABELSNOTUSED


//


while  (LABEL[  LEVEL] != 0) {
POP(LABEL[  LEVEL], I, J, KP); 
  I = I >> 24; 
if  (J & 0xFFFF != 0)  {

  J = J & 0xFFFF; 
if  (0 < KP && KP <= MAXULAB) FAULT2(11, FROM3(J)
, KP); 
CLEARLIST(J); 

} else {

if  (I == 0 && KP < MAXULAB) WARN(3, KP); 

}

}
//


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


}
//


DTABLE(  LEVEL); //OUTPUTDIAGNOSTICTABLES


//


//CLEARDECLARATIONS-POPUPANYGLOBALNAMESTHATWEREREDECLARED


//DESTROYSIDECHAINSFORROUTINES,FORMATSANDSWITCHES


//


//


//NOWCLAIMTHESTACKFRAMEBYFILINGTHEASFINTHEBLOCKENTRYCODING


//


  NMAX = (NMAX + 7) & (-8); 
if  (KKK == 2) return; 
if  (KKK >= 0x1000 || KKK == 1) CLAIMSTFRAME(SET[RLEVEL], NMAX); 
//


//NOWPLANTTHEBLOCKEXITSEQUENCE


//


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


if  (KKK == 0)  {
//BEGINBLOCKEXIT


if  (PARMTRACE == 1)  {
//RESTOREDIAGSPOINTERS


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

}

if  (STACK != 0)  {

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


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

}


} else RESETAUXSTACK(); 

}

//


//RETURNTOPREVIOUSLEVELPROVIDEDTHEREISAVALIDONE!


//


unless  (  LEVEL > 2 ||   LEVEL == 2 &&   CPRMODE == 2)  {

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

}

    LEVEL =   LEVEL - 1; 
if  (KKK >= 0x1000)  {

  RLEVEL = RLEVEL - 1; 
  RBASE = RLEVEL; 

}

//


//RESTOREINFORMATIONABOUTTHE(NEW)CURRENTLEVEL


//


POP(LEVELINF, KP, N, KP); 
if  (KKK >= 0x1000)   NMAX = N >> 16; 
  N = N & 0x7FFF; 
if  (KKK == 2) CEND(KKK); //ROUNDAGAINFOR'ENDOFPROGRAM'


//


//COMPLETETHEJUMPAROUNDALLNON-EXTERNALROUTINESEXCEPTWHEN


//trustedprogramISINOPERATION.


//


if  (ASLWARN != 0) {   ASLWARN = 0; EPILOGUE();  }
if  (KKK >= 0x1000 &&   COMPILER == 0 && RLEVEL > 0 ||   CPRMODE != 2)  {

  JJ = NEXTP + 6; 
unless  (A == 11 && A == 2)  {

  JJ = ENTERLAB(JROUND[  LEVEL + 1], 0); 
  JROUND[  LEVEL + 1] = 0; 

}


}

return; 
//


//LAYOUTOFDIAGNOSICTABLES


//***********************


//


//THEBOUNDFIELDOFPLTDESCRIPTORSTOREDAT(LNB+3&LNB+4)IF


//USEDTOCONTAINADISPLACEMENTRELATIVETOTHESTARTOFSSTOFTHE


//DIAGNOSTICTABLESFORTHEBLOCKORROUTINEBEINGEXECUTED.


//AZEROBOUNDMEANSNODIAGNOSTICREQUESTED.(NBTHISMAYMEANADUMMY


//FIRSTWORDINTHESST).


//THEABSOLUTEADDRESSOFTHESSTFORTHECURRENTCODESEGMENTWILL


//ALWAYSBEFOUNDINTHESTANDARD10WORDSOFTHEGLA/PLT


//


//FORMOFTHETABLES:-


//


//WORD0=LINEOFRTINSOURCEPROG<<16!LINENOPOSN(FROMLNB)


//WORD1=(12LANGDEPENDENTBITS)<<18!ENVIRONMENT


//(TOP2BITSOFLANGDEPENDENTHASLITLFROMPTYPE)


//(BOTTOM4BITSHAVETEXTUALLEVEL)


//WORD2=DISPLAYPOSN(FROMLNB)<<16!RTTYPEINFO


//WORD3=ZEROFORBLKSORSTRING(<=11BYTES)BEINGTHE


//RTNAME.THISWILLTAKEWORDS4AND5IFNEEDED


//WORD6=LANGUAGEDEPENDENTINFO.IMPONCONDITIONSETC


//


//THERESTISMADEUPOFVARIABLEENTRIESANDTHESECTIONISTERMINATEDBY


//AWORDOFX'FFFFFFFF'


//


//EACHVARIABLEENTRYCONSISTSOFTHEVARIABLEWORDFOLLOWEDBY


//THEVARIABLENAMEASASTRING.THEWORDCONSISTSOF


//BITS2**31TO2**20TYPEINFORMATION(MAYBELANGUAGEDEPENDENT


//BIT2**19=0UNDERLNB=1INGLA


//BITS2**18TO2**0DISPLACEMENTFROMLNB(GLA)INBYTES


//


//


//THEENVIRONMENTISAPOINTER(RELATIVETOSST)OFTHENEXTOUTERMOST


//BLOCKORAPOINTERTOGLOBALOWNS,EXTERNALORCOMMONAREAS


//AZEROMEANSNOENCLOSINGBLOCK.WORD1=WORD3=0ISAN


//IMPMAINPROGRAMANDWILLTERMINATETHEDIAGNOSTICS.


//


void DTABLE(int LEVEL) {
//***********************************************************************


//*THISROUTINELOOKSATTHEDECLARATIONSFORTHECURRENTLEVEL&*


//*SETSUPTHESEGMENTOFSHARABLESYMBOLTABLESTODESCRIBETHEM.*


//*FORMAINPROGRAMSOREXTERNALROUTINESTHE'GLOBAL'VARIABLES*


//*(IFANY)AREALSOINCLUDED.*


//***********************************************************************


_imp_string RTNAME;

_imp_string LOCALNAME;

/*pending name*/recfm  *LCELL;
//(LISTF)


const int LARRROUT = 0xF300;

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

int DD[(500)-(0)+1]
;
$define DD[N0] DD[(N0)-(0)]
//BUFFERFORSEGMENTOFSST


//


//FILLALLOUTSTANDINGREFERENCESTOTHISDIAGSBLOCK


//


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


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


  LNUM = BYTEINTEGER(DICTBASE + ML); //LENGTHOFTHENAME


  DPTR = 4;   DEND = 0; 
if  (LNUM == 0)   DD[3] = 0;  else {

  Q = DICTBASE + ML; 
  RTNAME = STRING(Q); //FORRTSMOVEIN1ST32CHARS


  LNUM = BYTEINTEGER(ADDR(RTNAME)
); 
  STRING(ADDR(DD[3])
)
 = RTNAME; //ANDUPDATEPOINTERPAST


  DPTR = DPTR + (LNUM >> 2); //ACTUALNOOFCHARS



}

  DD[DPTR] = ONWORD[LEVEL]; //ONCONDITIONWORD


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


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


//GETONLYTHEMINIMUMOFDETALSNECESSARY


//


  S1 = LCELL;   S2 = LCELL; 
  S3 = LCELL;   S4 = LCELL; 
  LCELL = ASL;   ASL = TAGS[JJ]; 
  TAGS[JJ] = S4 & 0x3FFFF; 
    PTYPE = S1 >> 16;   TYPE =   PTYPE & 15; 
  I = S1 >> 4 & 15; 
  J = S1 & 15; 
  K = S3 >> 16; 
//


//ALLOWOWNS(LITL=0)ANDEXTERNALS(=2)NOTCONSTS(=1)OREXTRINSIC(=3)


//


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

  Q = DICTBASE + WORD[JJ]; //ADDRESSOFNAME


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


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


  LNUM = BYTEINTEGER(ADDR(LOCALNAME)
); 
  STRING(ADDR(DD[DPTR])
 + 4)
 = LOCALNAME; //MOVEINNAME


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

}

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


if  (  PTYPE & 0x3000 != 0 || TYPE == 4 || TYPE == 6) CLEARLIST(K);  else {

if  (I != 0 && K > 511 &&   PTYPE & LARRROUT == 0 && TYPE != 7) WARN(5, JJ); 

}

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


  DPTR = (DPTR << 2) + 4; 
if  (PARMTRACE == 1)  {

LPUT(4, DPTR, SSTL, ADDR(DD[0])
); //ADDTOSHARABLESYMTABS


  SSTL = SSTL + DPTR; 

}


} /* End of Begin/Rt/Fn/Map depth=4 */;
//OFROUTINEDTABLE



} /* End of Begin/Rt/Fn/Map depth=3 */;

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


//*QISTOARENTRYFORHEADOFLINKEDDECLARATIONS*


//***********************************************************************


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

int *THEAD;

/*pending name*/recfm  *CELL;
//(LISTF)


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


  P = QQ + 10; CLT(); 
if  (PREC == 3 || A != 1 || A != 3)  {

if  (A == 1) INSERTATEND(HEAD, 0xFFFF, QQ, 0); 

} else {

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

}

  QQ = FROMAR4(QQ + 6); 
}
//


//NOWMAKETHEORDEREEDDECLARATIONS


//FIRSTGRABTWOTEMPORARIESIFSPACEISLIKELYTOBETIGHT


//


if  (COUNT >= 7)  {

GETWSP(QQ, 2); //ADIUBLEWORD


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

}

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

} /* End of Begin/Rt/Fn/Map depth=3 */;

void DECLARESCALARS(int PERMIT, int XTRA) {
//***********************************************************************


//*THISROUTINEDECLARESALISTOFSCALARSFROMINFORMATION*


//*INTHEGLOBALVARIABLESROUT,NAM,ARR,PREC,TYPE&ACC.ITWORKS*


//*OUTROUNDINGFACTORSFORITSELF.*


//*PPOINTSTOTHENAMELISTONENTRYANDISUPDATED.*


//***********************************************************************


int INC; int Q; int SCHAIN; int DMADE; int NPARMS; int D0; int SCALNAME; int TYPEP;

PACK(  PTYPE);   J = 0; 
  INC = ACC;   DMADE = 0;   SNDISP = 0; 
if  (  PTYPE == 0x33)   INC = (INC + 3) & (-4); 
if  (NAM != 0 && ROUT == 0 && ARR == 0)   INC = 8; 
if  (NAM > 0 && ARR > 0)   INC = 16; 
if  (  PTYPE == 0x35 && ACC == 0) FAULT(70, 0); 
if  (PERMIT != 0 && INC == 8 || INC == 16) ODDALIGN(); 
if  (  PTYPE == 0x33 ||   PTYPE == 0x35 && PERMIT != 0)  {

  D0 = 0x18000000 + ACC; 
STORECONST(Q, 4, ADDR(D0)
); 
PF1(  LDTB, 0, PC, Q); 
  GRUSE[DR] = 0; 

}

if  (  PTYPE == 0x35)  {

  INC = 8; 
if  (PERMIT != 0)  {

PF1(STSF, 0, TOS, 0); 
PF1(LDA, 0, TOS, 0); 

}


}

  N = (N + 3) & (-4); 
if  (  PTYPE == 0x33)  {

PSF1(LDA, 1, PTROFFSET(RBASE)
); 
PSF1(INCA, 0, N + 8); 

}

/* Deferred: until  (A == 2)  */
do {
//DOWNTHENAMELIST


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


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

  TYPEP =   PTYPE; //CHANGEDBYCFPLIST!


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


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


  ACC = N; //DISPLACEMENTTOMIDCELL


    PTYPE = TYPEP; UNPACK(); 

}

  P = P + 3; 
if  (  PTYPE == 0x33)  {

PSF1(STD, 1, N); 
  N = N + 8;   SCHAIN = N; 
if  (A == 1) PSF1(INCA, 0, INC + 8); 

}

if  (  PTYPE == 0x35 && PERMIT != 0)  {

PSF1(STD, 1, N); 
if  (A == 1) PSF1(INCA, 0, (ACC + 3) & (-4));  else {

  Q = ((ACC + 3) >> 2) * DMADE; 
PSF1(ASF + 12 * PARMCHK, 0, Q); 
if  (PARMCHK != 0) PPJ(0, 4); 

}


}

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



} /* End of Begin/Rt/Fn/Map depth=3 */;

int DOPEVECTOR(int TYPEP, int ELSIZE, int MODE, int IDEN, int *ASIZE, int *LB) {
//***********************************************************************


//*CONSTRUCTSTHEDOPE-VECTORFORACONSTANTARRAYINTHE*


//*SHAREABLESYMBOLTABLESANDRETURNSITSDISPLACEMENTASRESULT*


//*EVENTUALLYALLNONDYNAMICDOPEVECTORSSHOULDGOVIAHERE*


//*PISTOALT(MUSTBE1!)OFP<BPAIR>*


//*DOPEVECTORCONSISTSOF:-*


//*DESRIPTOR(SCALEDWORD)POINTINGATFIRSTTRIPLEBND=3*ND*


//*SIZE(INBYTESOFENTIREARRAY)FORSTACKADJUSTMENT*


//*ANDNDTRIPLESEACHCONSISTINGOF:-*


//*LBI-THELOWERBOUNDOFTHEITHDIMENSION*


//*MI-THESTRIDEFORTHEITHDIMENSION*


//*CBITHEUPPERCHECK=(UBI-LBI+1)*MI*


//*WHEREM1=1(SCALEDARRAYS)ORTHEELEMENTSIZEAND*


//*MI=M(I-1)*RANGE(I-1)*


//*MODE=0DVMUSTBECONST,MODE#0CANBEDYNAMIC*


//*PTOALT(ALWAYS=1)OFP(BPAIR)*


//***********************************************************************


int I; int JJ; int K; int ND; int D; int UNSCAL; int M0; int HEAD; int NOPS; int TYPEPP; int PIN; int PTR;

/*pending name*/recfm  *LCELL;
//(LISTF)


int LBH[(12)-(0)+1]
;
$define LBH[N0] LBH[(N0)-(0)]
int LBB[(12)-(0)+1]
;
$define LBB[N0] LBB[(N0)-(0)]
/*H imp80-switch.h:2313*/int UBH[(12)-(0)+1]
;
$define UBH[N0] UBH[(N0)-(0)]
/*H imp80-switch.h:2313*/int UBB[(12)-(0)+1]
;
$define UBB[N0] UBB[(N0)-(0)]
/*H imp80-switch.h:2313*/
int DV[(39)-(0)+1]
;
$define DV[N0] DV[(N0)-(0)]
//ENOUGHFOR12DIMENSIONS


  ND = 0;   NOPS = 0;   TYPEPP = 0;   PIN = P; 
if  (TYPEP > 2 || TYPEP == 1 && PREC == 4) {   UNSCAL = 1;   M0 = ELSIZE;  } else {   UNSCAL = 0;   M0 = 1;  }
/* Deferred: until  (A == 2)  */
do {
  ND = ND + 1;   P = P + 4; 
  LBH[ND] = 0;   LBB[ND] = 0; 
  UBB[ND] = 0;   UBH[ND] = 0; 
TORP(LBH[ND], LBB[ND], NOPS); 
  P = P + 3; 
  TYPEPP = TYPEPP | TYPE; 
TORP(UBH[ND], UBB[ND], NOPS); 
  TYPEPP = TYPEPP | TYPE; 
} while (! (A == 2) );
  P = P + 1; 
unless  (TYPEPP == 1 && NOPS & 0x40040000 == 0) goto NONCONST; 
//


//NOWONECANWORKOUTANDFILLINTHETRIPLES


//


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


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


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


  HEAD = DVHEADS[ND]; 
while  (HEAD != 0) {
  LCELL = ASLIST[HEAD]; 
if  (LCELL == ASIZE && LCELL == DV[5])  {

for (D = 0; D != K; D += 1) {
unless  (DV[D] == CTABLE) goto ON; 
}
return 0x80000000 | 4 * LCELL; 

}

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


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

} /* End of Begin/Rt/Fn/Map depth=3 */;


void DECLAREARRAYS(int FORMAT, int FINF) {
//***********************************************************************


//*FORMAT=1FOR'ARRAYFORMAT'=0OTHERWISE*


//*FINF>0FORRECORDFORMATINFORMATION=0OTHERWISE*


//*PISATP<ADECLN>IN*


//**


//*P<ADECLN>=<NAMELIST><BPAIR><RESTOFDECLN>*


//*P<BPAIR>='('<EXPR>':'<EXRR><RESTOFBP>*')'*


//**


//*ARRAYSWITHCONSTANTBOUNDSHAVETHEIRD-VINTHESST*


//*ALLOTHERARRAYSHAVEADOPEVECTORAMONGTHELOCALSANDGET*


//*THEIRSPACEOFFTHESTACKATRUNTIME*


//*BOTHSORTSOFARRAYSHAVEAFOURWORDHEADANDD-VTOEMAS*


//*SYSTEMSTANDARDS*


//***********************************************************************


auto void CLAIMAS(void);
int DVDISP; int PP; int DVF; int ELSIZE; int TOTSIZE; int D0; int D1; int PTYPEP; int   ARRP; int NN; int ND; int II; int JJ; int QQ; int R; int CDV; int UNSCAL; int DESC; int SC; int   LWB; int PTYPEPP; int JJJ; int JJJJ; int ADJ;

if  (STACK != 0 && FLAG[  LEVEL] == 0 && 0 == NMDECS[  LEVEL] >> 14)  {

PSF1(STSF, 1, N); 
  NMDECS[  LEVEL] = NMDECS[  LEVEL] | (N << 14); 
  N = N + 4; 

}

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


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


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



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


  N = N + 12 * ND + 12; //CLAIMSPACEFORTHED-V


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


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


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

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


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


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


CSEXP(ACCR, 0x51); //LOWERBOUND


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


CSEXP(ACCR, 0x51); //UPPERBOUND


PSF1(ISB, 1, QQ); 
  GRUSE[ACCR] = 0; 
if  (  COMPILER == 0 || PARMARR != 0)  {

PF3(JAF, 6, 0, 3); //JUMPUNLESSNEGATIVE


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



}

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


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


PSF1(ST, 1, QQ + 8); //ANDSTOREDINDV


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


goto DECL; 
CONSTDV: //ONEDIMENSION-CONSTANTBOUNDS


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


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


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


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

} else {

STORECONST(D1, 4, ADDR(DESC)
); 
PF1(LB, 0, PC, D1); 
unless  (PREC == 4) PSF1(ADB, 1, DVDISP + 20); 

}

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


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


PSF1(STD, 1, N + 8 + 16 * JJJ); //DVPOINTER


}
if  (PARMARR == 0 && PARMCHK == 0 && ND == 1 && TYPE <= 3 && PTYPEPP & 0xF00 != 0x200)   ADJ = 1;  else   ADJ = 0; 
for (JJJ = 0; JJJ != NN - 1; JJJ += 1) {
//DOWNNAMELIST


if  (ADJ != 0)  {
//ADJUSTDESC


if  (STACK != 0)  {
//ARRAYONAUTOMATICSTACK


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


if  (DVF != 0) PSF1(SBB, 0,   LWB * ELSIZE);  else {

if  (ELSIZE == 1) PSF1(SBB, 1, DVDISP + 12);  else {

PSF1(SLB, 1, DVDISP + 12); 
PSF1(  MYB, 0, ELSIZE); 
PF1(SLB, 0, TOS, 0); 
PF1(SBB, 0, TOS, 0); 

}


}

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

} else {
//ARRAYONAUXSTACK


if  (DVF != 0)  {
//CONSTDOPEVECTOR


unless  (GRUSE[ACCR] == 11)  {

PSF1(LSS, 2, AUXSBASE[  LEVEL]); 
  GRUSE[ACCR] = 11;   GRINF1[ACCR] = 0; 

}

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

} else {
//DYNAMICARRAYS


if  (GRUSE[ACCR] == 11 && GRINF1[ACCR] == 0 && ELSIZE == 1) PSF1(ISB, 1, DVDISP + 12);  else {

PSF1(LSS, 1, DVDISP + 12); 
unless  (ELSIZE == 1) PSF1(IMY, 0, ELSIZE); 
PSF1(IRSB, 2, AUXSBASE[  LEVEL]); 

}

  GRUSE[ACCR] = 0; 

}

PSF1(ST, 1, N + 4); 

}


} else {
//NOADJUSTMENTOFDESCRPT


if  (STACK != 0) PSF1(STSF, 1, N + 4);  else {

unless  (GRUSE[ACCR] == 11 && GRINF1[ACCR] == 0) PSF1(LSS, 2, AUXSBASE[  LEVEL]); 
PSF1(ST, 1, N + 4); 
  GRUSE[ACCR] = 11;   GRINF1[ACCR] = 0; 

}


}


  ACC = ELSIZE; //RESETACCAFTERDVCMPLD


  KFORM = FINF; //FORMATINFORMATION


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


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


//*CLAIMTHESPACEFORANARRAYFROMSTACKORAUXSTACK*


//***********************************************************************


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

if  (STACK == 1)  {
//FROMAUTOMATICSTACK


if  (CDV == 1)  {
//CONSTANTBOUNDS


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


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

} else {
//DYNAMICBOUNDS


if  (PARMCHK == 0 && PTYPEP & 7 <= 2 && ELSIZE == 4 || ELSIZE == 8)  {

PSF1(ASF, 1, DVDISP + 20); //SIZEINELEMENTSWORD


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

} else {

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


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


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

}


}

CHECKSTOF(); 

} else {

unless  (GRUSE[ACCR] == 11 && GRINF1[ACCR] == 0 || CDV == 1)  {

PSF1(LSS, 2, AUXSBASE[  LEVEL]); 
  GRUSE[ACCR] = 11;   GRINF1[ACCR] = 0; 

}

if  (CDV == 1)  {

  ADJMENT = ((TOTSIZE + 7) & (-8)) + GRINF1[ACCR]; 
if  (ADJMENT < 0x1FFFF) {   B = 0;   D = ADJMENT;  } else {

STORECONST(D, 4, ADDR(ADJMENT)
); 
  B = PC; 

}

if  (ADJ == 1 && JJJ != NN - 1 && PARMOPT == 0)   GRINF1[ACCR] = ADJMENT;  else {

  GRINF1[ACCR] = 0; 
unless  (B == D && D == 0) PSORLF1(IAD, 0, B, D); 

}


} else {

  B = LNB;   D = DVDISP + 8; 
PSF1(IAD, 1, D); 
unless  (ELSIZE & 7 == 0)  {

PSF1(IAD, 0, 7); 
PSF1(AND, 0, -8); 

}

  GRINF1[ACCR] = 0; 

}

if  (JJJ == NN - 1 || ADJ == 1 && CDV == 0) PSF1(ST, 2, AUXSBASE[  LEVEL]); 
if  (PARMOPT != 0)  {

PSF1(ICP, 1, AUXSBASE[  LEVEL] + 16); 
PPJ(2, 8); 

}

if  (PARMCHK != 0)  {

PF1(  LDTB, 0, PC, PARAMDES(3)
); 
PSORLF1(LDB, 0, B, D); 
PSF1(LDA, 1, N + 4); 
PF2(MVL, 1, 1, 0, 0, UNASSPAT & 255); 
  GRUSE[DR] = 0; 

}


}


} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;

//routineTESTNST


//!***********************************************************************


//!*SEEIFNAME'K'HASBEENDECLAREDBEFOREATTHISLEVEL*


//!***********************************************************************


//FNAME=K


//FAULT(7,FNAME)ifFROM1(TAGS(FNAME))>>8&15=LEVEL


//end


void CLT(void) {
//***********************************************************************


//*DEALWITHPHRASETYPEANDSETPREC,TYPE&ACC*


//*ONLYPROBLEMISSTRINGWHICHHASOPTIONALMAXLENGTHALSO*


//*PONPHRASETYPEATENTRY-TONEXTPHRASEATEXIT.*


//***********************************************************************


const char TYPEFLAG[(10)-(1)+1]
;
$define TYPEFLAG[N0] TYPEFLAG[(N0)-(1)]
 = 
  X'51', 
0x52, 
0, 
0x31, 
0x35, 
0x41, 
0, 
0x62, 
0x61, 
0x72;

int ALT;

  ALT = A; 
  TYPE = TYPEFLAG[ALT]; 
if  (TYPE == 0) {   P = P + 1;   TYPE = TYPEFLAG[A + 7];  }
  PREC = TYPE >> 4; 
  TYPE = TYPE & 7; 
if  (TYPE == 2 && ALLLONG != 0 && PREC <= 5)   PREC = 6; //DEALWITH'%REALSLONG'


  ACC = BYTES[PREC]; 
if  (TYPE == 5)  {
//P<TYPE>='%STRING'


if  (A == 1)  {
//MAXLENGTHGIVEN


  P = P + 2; 
  ACC = A + 1; 

} else {   ACC = 0;   P = P + 1;  }

}

  P = P + 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CQN(int P) {
//***********************************************************************


//*SETNAM,ARR&ACCFROMALTERNATIVEOFPHRASE<QNAME'>         *


//*       P<QNAME'>='%ARRAYNAME','%NAME',<null>*


//*PPOINTSTOTHEANALYSISRECORDENTRYASISNOTUPDATED*


//***********************************************************************


int I;

  I = A;   NAM = 0;   ARR = 0; 
if  (I == 1) {   ARR = 1;   ACC = 16;  }//ARRAYNAMES


if  (I <= 2)   NAM = 1; //ARRAYNAMES&NAMES


if  (I == 2)   ACC = 8; //NAMESUSE8-BYTEDESCRIPTOR



} /* End of Begin/Rt/Fn/Map depth=3 */;

void CRSPEC(int M) {
//***********************************************************************


//*MODE=0FORNORMALROUTINESPEC*


//*MODE=1FOREXTERNAL(ETC)ROUTINESPECSXREFNEEDED*


//*PONENTRYTOP(RT)IN(RT)(MARK)(spec'')(NAME)(FPP)*


//***********************************************************************


int KK; int JJ; int TYPEP; int OPHEAD; int NPARMS;

_imp_string XNAME;

  LITL = EXTRN & 3; 
if  (A == 1)  {
//P<RT>=routine


  TYPEP = LITL << 14 | 0x1000; 
  P = P + 2; //IGNORINGALTOFP(SPEC'')



} else {
//P<RT>=<TYPE><FNORMAP>


  ROUT = 1;   ARR = 0;   P = P + 1; 
CLT();   NAM = 0; 
if  (A == 2)   NAM = 2; //2FORMAP0FORFN


PACK(TYPEP); 
  P = P + 2; //AGAINIGNORINGALTOFP(SPEC'')



}

  P = P + 4; //PASTHOLEFORDECLINKS


  KK = FROMAR2(P); 
  JJ = 0; 
  P = P + 2; 
CFPLIST(OPHEAD, NPARMS); 
if  (M == 1)  {

  XNAME = STRING(DICTBASE + WORD[KK]); 
if  (EXTRN == 1)   XNAME = "S#".XNAME; 
CXREF(XNAME, PARMDYNAMIC | (EXTRN / 3), 2, JJ); //ststem&external=STATIC


//dynamic=DYNAMIC



}

if  (M == 0 && RLEVEL == 0) CODEDES(JJ); 
  J = 15 - M;     PTYPE = TYPEP; 
  KFORM = NPARMS; 
  SNDISP = JJ >> 16; 
  ACC = JJ & 0xFFFF; 
STORETAG(KK, OPHEAD); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CFPLIST(int *OPHEAD, int *NPARMS) {
//***********************************************************************


//*COMPILEAFORMALPARAMETERPARTINTOALISTOFPARAMETERTYPES*


//*P(FPP)='('*')',0.*


//**


//*THELISTOFPARAMETERLOOKSLIKE:-*


//*S1=PTYPEFORPARAM<<16!DIMENSION(DIMENDEDUCEDLATER)*


//*S2=ACC<<16!SPARE*


//*S3=0(RESERVEDFORFPPOFRTS)*


//**


//*ONENTRYPISATALTOFFPP(WHICHMAYBENULL)*


//***********************************************************************


int OPBOT; int PP;

  OPHEAD = 0;   OPBOT = 0; 
  NPARMS = 0; //ZEROPARAMETERSASYET


while  (A == 1) {
//WHILESOME(MORE)FPS


  PP = P + 1 + FROMAR2(P + 1); //TONEXTFPDEL


  P = P + 3; //TOALTOFFPDEL


CFPDEL(); //GETTYPE&ACCFORNEXTGROUP


/* Deferred: until  (A == 2)  */
do {
//DOWN<NAMELIST>FOREACHDEL


BINSERT(OPHEAD, OPBOT,   PTYPE << 16, ACC << 16, 0); 
  NPARMS = NPARMS + 1; 
  P = P + 3; 
} while (! (A == 2) );
  P = PP; 
}
  P = P + 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CFPDEL(void) {
//***********************************************************************


//*SETUPPTYPE&ACCFORAFORMALPARAMETERDEFINITION*


//*P<FPDEL>=<TYPE><qname'>,                                        *


//*             'record'<%ARRAY'>'%NAME'.*


//*(RT)(name'')(NAMELIST)(FPP),*


//*'%NAME'.*


//***********************************************************************


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
int FPALT;

  FPALT = A;   P = P + 1; 
  KFORM = 0;   LITL = 0; 
goto FP[FPALT]; 
FP_1://(TYPE)(qname'')


  ROUT = 0; CLT(); 
CQN(P); 
if  (TYPE == 5 && ACC == 0) FAULT(70, 0); 
  P = P + 1; 
goto PK; 
FP_2://RECORD(array'')name


  ARR = 2 - A;   ROUT = 0; 
  ACC = 8 + 8 * ARR;   TYPE = 3;   PREC = 3; 
  NAM = 1;   P = P + 1; goto PK; 
FP_3://(RT)(name'')(NAMELIST)(FPP)


  ROUT = 1;   NAM = 1; 
  ARR = 0; 
if  (A == 1)  {
//RT=rouitne


  TYPE = 0;   PREC = 0; 
  P = P + 2; 

} else {

  P = P + 1; CLT(); //RT=(TYPE)(FM)


  NAM = 1; 
if  (A == 2)   NAM = 3; //1FORFN3FORMAP


  P = P + 2; //PAST(name'')WHICHISIGNORED



}

  ACC = 16; 
goto PK; 
FP_4://name


  ACC = 8;   NAM = 1; 
  ROUT = 0;   TYPE = 0; 
  ARR = 0;   PREC = 0; 
PK: PACK(  PTYPE); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void DIAGPOINTER(int LEVEL) {
if  (PARMTRACE != 0)  {

PUSH(RAL[LEVEL], 1, CA, LDB << 24 | 3 << 23); 
PF1(LDB, 0, 0, 0); 
  GRUSE[DR] = 0; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void RHEAD(int KK) {
//***********************************************************************


//*COMPILESCODEFORBLOCKANDROUTINEENTRY*


//*KKISTHERT/FN/MAPNAME(=-1FORbeginBLOCKS)*


//***********************************************************************


int W1; int W3; int INSRN; int AT;

PUSH(LEVELINF, 0, NMAX << 16 | N, 0); 
    LEVEL =   LEVEL + 1; 
  NMDECS[  LEVEL] = 0;   AUXSBASE[  LEVEL] = 0; 
  NAMES[  LEVEL] = -1; 
  ONINF[  LEVEL] = 0;   ONWORD[  LEVEL] = 0; 
if  (KK >= 0)  {

  RLEVEL = RLEVEL + 1;   RBASE = RLEVEL; 

}

if  (  LEVEL == MAXLEVELS) FAULT(34, 0); 
if  (  LEVEL > MAXLEVELS) FAULT(105, 0); 
if  (KK >= 0 && RLEVEL > 1)  {
//ROUTINEENTRY


COPYTAG(KK);   JJ = K; //LISTOFJUMPS


  J = MIDCELL; 
if  (J == 0 &&   LEVEL > 2)  {
//REPLACE'NOT USED'BIT


REPLACE1(TAGS[KK], FROM1(TAGS[KK])
 & 0xFFFF3FFF); 

}

//


//NOWFILLANYJUMPSTOTHISROUTINEPLANTEDSINCE


//THEROUTINESPECWASCOMPILED.SEEALSO'RT JUMP'


//


while  (J != 0) {
POP(J, INSRN, AT, W1); 
  W3 = CA - AT; 
if  (INSRN >> 25 == CALL >> 1)   W3 = W3 / 2; 
  INSRN = INSRN + W3; 
PLUG(1, AT, INSRN, 4); 
}
REPLACE2(TAGS[KK], CA); //NOTEADDRFORFUTURECALLS



}

if  (KK >= 0 && RLEVEL == 1) { DIAGPOINTER(  LEVEL); PSF1(STD, 1, 12);  }
if  (KK < 0)   W3 = 0;  else   W3 = WORD[KK]; 
  L[  LEVEL] =   LINE;   M[  LEVEL] = W3; 
  FLAG[  LEVEL] =   PTYPE; //CURRENTBLOCKTYPEMARKER



} /* End of Begin/Rt/Fn/Map depth=3 */;

void RDISPLAY(int KK) {
//***********************************************************************


//*SETUPORCOPYTHEDISPLAY(AWORDARRAYCONTAININGCOPIESOF*


//*LNBFORTHEGLOBALLEVELS.THEHIGHESTLEVELENTRYISTOTHE*


//*GLA(PLT)FOROWNSANDISALSOKEPTIN(LNB+4)INCASEWEWISH*


//*TOMOVETOREAD-ONLYPLTS.ONINTERNALCALLSTHELNBFORTHE*


//*NEXTMOSTGLOBALLEVELISSTACKEDASANEXTRAPARAMETER*


//***********************************************************************


int W1; int W2; int STACK; int OP; int INC;

if  (KK >= 0 ||   LEVEL == 2)  {
//DISPLAYNEEDED


  STACK = 0;   DISPLAY[RLEVEL] = N; 
  GRUSE[XNB] = 0; 
  GRUSE[CTB] = 0;   GRUSE[BREG] = 0; 
if  (  LEVEL != 2)  {

//PF1(LXN,0,TOS,0)


  GRUSE[XNB] = 4;   GRINF1[XNB] = RLEVEL - 1;   GRAT[XNB] = CA; 
PF1(LD, 0, XNB, 12); //COPYPLTDESCRIPTOR


DIAGPOINTER(  LEVEL); 
PSF1(STD, 1, 12); 
  W1 = RLEVEL - 1;   W2 = DISPLAY[W1]; 
if  (W1 == 1) { PF1(STXN, 0, TOS, 0);   N = N + 4;  } else {

while  (W1 > 0) {
  OP = LSS;   INC = 1; 
if  (W1 >= 2) {   OP = LSD;   INC = 2;  }
if  (W1 >= 4) {   OP =   LSQ;   INC = 4;  }
PF1(OP + STACK, 0, XNB, W2); 
  STACK = -32;   N = N + 4 * INC; 
  W2 = W2 + 4 * INC;   W1 = W1 - INC; 
}

}


}

if  (STACK != 0) PF1(ST, 0, TOS, 0); //STTOS


PF1(STLN, 0, TOS, 0); 
  N = N + 4; 

}

//


//IFINDIAGNOSTICMODEPLANTCODETOSAVETHELINE&ROUTINENOOF


//THECALLINGROUTINEANDSETUPTHENEWBLOCK/ROUTINEIDENTNO.


//


if  (PARMTRACE != 0)  {

if  (PARMOPT != 0) PF1(LSS, 0, PC, 4 * CONSTBTM | 0x80000000); //M'IDIA'


if  (KK >= 0 ||   LEVEL == 2)  {

if  (PARMOPT != 0)  {

PSF1(SLSS, 0,   LINE); 
  N = N + 4; 

} else PSF1(LSS, 0,   LINE); 
PF1(ST, 0, TOS, 0); 

} else {

if  (PARMOPT != 0)  {

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

}

PSF1(LSS, 0,   LINE); 
PSF1(ST, 1, N); 
PSF1(LD, 1, 12); //UPDATEBNDFIELD


DIAGPOINTER(  LEVEL); 
PSF1(STD, 1, 12); 

}

  DIAGINF[  LEVEL] = N; 
  N = N + 4; 
  GRUSE[ACCR] = 0; //NEEDEDFORbeginBLOCKS



}

if  (PARMOPT != 0 && KK >= 0 &&   LEVEL == 2)  {

PF1(STSF, 0, BREG, 0); 
PF1(STLN, 0, TOS, 0); 
PF1(SBB, 0, TOS, 0); 
PSF1(CPB, 0, N); 
PPJ(7, 13); 

}

//


//CLAIM(THERESTOF)THESTACKFRAME


//


if  (KK >= 0 ||   LEVEL == 2)  {

  SET[RLEVEL] = N << 18 | CA; 
  NMAX = N; 
PF1(ASF + 12 * PARMCHK, 0, 0, 0); //ASFORLB


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

}

//


if  (KK >= 0 && PARMCHK != 0)  {

CHECKSTOF(); //CHECKFORSTACKO''FLOW



}

if  (PARMDBUG != 0) SETLINE(); //TOCALLDBUGPACKAGE



} /* End of Begin/Rt/Fn/Map depth=3 */;

void CHECKSTOF(void) {
//***********************************************************************


//*CHECKTHESTACKFOROVERFLOW(LEAVING4KMARGINFORMDIAG*


//***********************************************************************


if  (PARMOPT != 0)  {

//


//STSFTOSGETSTACKPOINTER


//LSSTOS


//USH+14


//USH-15LOSESEGMENTNO


//ICPX'1F800'CHECKWITHINSEGADDRESS


//SHIFTEDDOWN1PLACE


//JCC2,EXCESSBLKS


//


PF1(STSF, 0, TOS, 0); 
PF1(LSS, 0, TOS, 0); 
PSF1(USH, 0, 14); 
PSF1(USH, 0, -15); 
PF1(ICP, 0, 0, STLIMIT >> 1); 
PPJ(2, 8); 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINERHEAD


void CIOCP(int N, int REG) {
//***********************************************************************


//*COMPILESACALLONIOCPENTRYPOINTNO'N'*


//*2NDPARAMETERISALREADINTHEACCWHICHIS32BITS*


//***********************************************************************


int XYNB; int OP1; int OP2;

if  (IOCPDISP == 0) CXREF(IOCPEP, PARMDYNAMIC, 2, IOCPDISP); 
if  (REGISTER[BREG] != 0) BOOTOUT(BREG); 
if  (REG == ACCR) {   OP1 =   LUH;   OP2 = ST;  } else {   OP1 =   LDTB;   OP2 = STD;  }
PSF1(OP1, 0, N); 
PSF1(PRCL, 0, 4); 
PF1(OP2, 0, TOS, 0); 
  XYNB = SETXORYNB(-1, -1); //TOPLT


PSF1(RALN, 0, 7); 
PF1(CALL, 2, XYNB, IOCPDISP); 
FORGET(-1); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CUI(int CODE) {
//***********************************************************************


//*COMPILEANUNCONDITIONALINSTRNWHEREEVERITOCCURS*


//*CODE=0UNCONDITIOALLY,=1AFTERthen,=2AFTERelse*


//***********************************************************************


int MARKER; int J; int LNAME; int TYPEP; int PRECP; int GWRDD; int LWB; int XYNB; int ARRP; int ALT;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
  REPORTUI = 0; 
  ALT = A; 
goto SW[ALT]; 
SW_1://(NAME)(APP)(ASSMNT?)


  P = P + 1;   MARKER = P + FROMAR2(P); 
if  (A == 1)  {

  J = P + 2;   P = MARKER + 2; 
ASSIGN(A, J); 

} else {

  P = P + 2; 
CNAME(0, 0); 
  P = P + 1; 

}

AUI:   J = A;   P = P + 1; 
if  (J == 1) CUI(CODE); 
return; 
SW_2://->(NAME)(APP)


  NMDECS[  LEVEL] = NMDECS[  LEVEL] | 1; 
if  (CODE == 0)   CURRINST = 1; 
  LNAME = FROMAR2(P + 1); 
  J = A;   P = P + 4; 
if  (J == 2)  {
//SIMPLELABEL


ENTERJUMP(15, LNAME, 0); 
  REPORTUI = 1; 

} else {
//SWITCHLABELS


COPYTAG(LNAME); 
  ARRP = ARR; 
  GWRDD = SNDISP << 2; //BYTEDISPOFDESCRIPTORINPLT


unless  (OLDI ==   LEVEL && TYPE == 6)  {

FAULT(4, LNAME);   P = P - 1; SKIPAPP(); 
return; 

}

  LWB = FROM2(K); //GETLOWERBOUND


CSEXP(BREG, 0x51); 
if  (ARRP == 1) PSF1(SBB, 0, LWB); 
  XYNB = SETXORYNB(-1, -1); //TOPLT


PF1(JUNC, 3, XYNB, GWRDD); //JUMPINDIRECTVIAWORDARRAY


//OF32BITRELOCATEDADDRESSES


  REPORTUI = 1; FORGET(-1); 

}

return; 
SW_3://RETURN


unless  (FLAG[  LEVEL] & 0x3FFF == 0x1000) FAULT(30, 0); 
  P = P + 1; 
RET: RTEXIT(); 
  REPORTUI = 1; 
if  (CODE == 0)   CURRINST = 1; 
return; 
SW_4://result(ASSOP)(EXPR)


    PTYPE = FLAG[  LEVEL] & 0x3FFF; UNPACK(); 
if  (  PTYPE > 0x1000 && A != 3)  {
//ASSOP#'->'


if  (A == 1 && NAM != 0 && A == 4 && A == 1)  {

  P = P + 7;   TYPEP = TYPE;   PRECP = PREC; 
CNAME(4, ACCR); 
unless  (A == 2) FAULT(81, 0);   P = P + 1; 
unless  (TYPEP == TYPE && PRECP == PREC) FAULT(83, 0); 
goto RET; 

}

if  (A == 2)  {
//ASSOP='='


  P = P + 2; 
if  (NAM != 0)   TYPE = 1; //MAPSHAVEINTEGERRESULTS


if  (TYPE == 5)  {

CSTREXP(0, ACCR); 
PSF1(LD, 1, DISPLAY[RBASE] - 8); //RESULTDESCRPT


PF1(IAD, 0, PC, SPECIALCONSTS(2)
); 
PF2(MV, 1, 1, 0, 0, UNASSPAT & 255); 
PSF1(LDB, 2, DISPLAY[RBASE] - 8); 
COPYDR(); 

} else {

if  (PREC < 5)   PREC = 5; 
if  (NAM == 0)   KK = PREC << 4 | TYPE;  else   KK = 0x51; 
CSEXP(ACCR, KK); 

}
goto RET; 

}


}

FAULT(31, 0); 
  P = P + 2; SKIPEXP(); //IGNORESPURIOUSRESULT


return; 
SW_5://monitor(AUI)


PSF1(LSD, 0, 0); //ERR=0&EXTRA=0


PPJ(0, 2); //TOERRORROUTINE


  P = P + 1; goto AUI; 
SW_6://stop


PPJ(0, 21); 
  P = P + 1; 
if  (CODE == 0)   CURRINST = 1; 
  REPORTUI = 1; 
return; 
SW_7://'%SIGNAL'(EVENT'')(N)(OPEXPR)


PSF1(PRCL, 0, 4); 
PSF1(JLK, 0, 1); //STACKDUMMYPC


if  (NMDECS[  LEVEL] & 16 != 0)  {
//INAN'ON'GROUP


if  (FLAG[  LEVEL] <= 2)  {
//INABEGINBLOCK


PSF1(LD, 1, 12); //SORESETDIAGPOINTER


DIAGPOINTER(  LEVEL - 1); //TONEXTOUTERBLOCK


PSF1(STD, 1, 12); 
PF1(STLN, 0, TOS, 0); 

} else {
//''ONINART/FN/MAP


PSF1(LSS, 1, 0); //GETPREVIOUSLNB


PF1(ST, 0, TOS, 0); //ANDSTACKTHAT



}


} else PF1(STLN, 0, TOS, 0); 
  GRUSE[ACCR] = 0; 
  J = A; //EVENTNO


unless  (1 <= J && J <= 15) FAULT2(26, J, 0); 
if  (A == 1)  {
//SUBEVENTSPECIFIED


  P = P + 4; CSEXP(ACCR, 0x51); 
PF1(AND, 0, 0, 255); 
PF1(  OR, 0, 0, 256 * J); 

} else PF1(LSS, 0, 0, 256 * J); 
PSF1(SLSS, 0, 0); 
PF1(ST, 0, TOS, 0); 
  XYNB = SETXORYNB(-1, -1); //TOPLT


PSF1(RALN, 0, 9); 
PF1(CALL, 2, XYNB, 40); 
if  (CODE == 0)   CURRINST = 1; 
  REPORTUI = 1; return; 
SW_8://exit


SW_9://continue


  ALT = ALT & 7; //0FOREXIT1FORCONTINUE


if  (EXITLAB == 0) { FAULT2(54 + ALT, 0, 0); return;  }
  KK = INTEGER(ADDR(EXITLAB)
 + 4 * ALT); 
ENTERJUMP(15, KK, 0b10); 
  REPORTUI = 1; 
if  (CODE == 0)   CURRINST = 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CIFTHEN(int MARKIU, int MARKC, int MARKUI, int MARKE, int MARKR, int SKIP) {
//***********************************************************************


//*THISROUTINECOMPILESCONDITIONALEXPRESSIONS.ITREQUIRESTHE*


//*FOLLOWINGPARAMETERSTOBESETTOTHEIRA.R.ENTRY.*


//*MARKIUTOTHEENTRYFORP(iu)*


//*MARKCTOTHEENTRYFORP(COND)*


//*MARKUITOTHEENTRYFOR(FIRSTOCCURRENCEOF)P(UI)*


//*MARKETOTHEENTRYFORP(ELSE'')-=0FORBACKWARDSCONDITION*


//*MARKRTOENTRYFORP(RESTOFIU)-=0FORBACKWARDSCONDITION*


//***********************************************************************


int ALTUI; int CCRES; int ELRES; int THENLAB; int ELSELAB; int USERLAB; int REPORT; int START; int   ELSEALT; int K;

const int NULLELSE = 4;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
unless  (SKIP == YES) SETLINE(); 
  MARKIU = A; //ALTOFIU1=if,2=unless


  PLABEL = PLABEL - 1; 
  THENLAB = PLABEL; 
  START = 0; //NOSTARTINCONDITIONYET


  ELSELAB = 0; //MEANSNOELSECLAUSE


  P = MARKC; 
if  (MARKR > 0 && A <= 2)   START = 1; //'%START'OR'%THENSTART'


if  (MARKE != 0 &&   LEVEL < 2 && START == 0) FAULT(57, 0); 
  USERLAB = -1; 
if  (START != 0)   ALTUI = 0;  else   ALTUI = A; 
if  (ALTUI == 2 && A == 2)   USERLAB = FROMAR2(MARKUI + 1); //UI=SIMPLELABEL


if  (8 <= ALTUI && ALTUI <= 9 && EXITLAB != 0)  {
//VALIDEXIT


if  (ALTUI == 8)   USERLAB = EXITLAB;  else   USERLAB = CONTLAB; 

}

//


if  (SKIP == YES)  {
//NOCODENEEDED


if  (START != 0)  {

  P = MARKR + 1; 
CSTART(2, 1); //NOCODE


  MARKE = P; 

}

  CCRES = 1; //NOCODEFORELSE


goto ELSE; 

}

//


if  (USERLAB >= 0)  {
//FIRSTUIIS'->'<LABEL>


  NMDECS[  LEVEL] = NMDECS[  LEVEL] | 1; 
  CCRES = CCOND(0, 3 - MARKIU, USERLAB); 
if  (CCRES != 0)   CCRES = CCRES ^ 3; //CONDITIONBACKWARDS!


  THENLAB = 0; //NOTHENLABINTHISCASE


  REPORT = 1; //UITRANSFEREDCONTROL



} else {

  CCRES = CCOND(1, MARKIU, THENLAB); 
if  (START != 0)  {
//thenstart


if  (CCRES == 0)  {
//CONDITIONAL


if  (  LEVEL < 2) FAULT(57, 0); 
  NMDECS[  LEVEL] = NMDECS[  LEVEL] | 1; 

}

  P = MARKR + 1; 
CSTART(CCRES, 1); 
if  (A <= 2) {   PLABEL = PLABEL - 1;   ELSELAB = PLABEL;  }
  MARKE = P; 
  REPORT = LASTINST; 

} else {

if  (CCRES != 2)  {

  P = MARKUI; CUI(1); 
  REPORT = REPORTUI; 

} else {
//FIRSTUINEVEREXECUTED


  REPORT = 1; 

}


}


}

ELSE: //ELSEPART


if  (MARKE == 0)     ELSEALT = NULLELSE;  else     ELSEALT = A; 
if  (  ELSEALT < NULLELSE) {   PLABEL = PLABEL - 1;   ELSELAB = PLABEL;  }
  P = MARKE + 1; 
if  (REPORT == 0 && 0 == CCRES &&   ELSEALT < NULLELSE) {   REPORT = 1; ENTERJUMP(15, ELSELAB, 0b10);  }//LONGJUMPBUTSAVEENV


if  (THENLAB > 0)   ELRES = ENTERLAB(THENLAB, 0b11 | REPORT << 2); 
//CONDITIONAL&MERGEORREPLACE


goto ESW[  ELSEALT]; 
ESW_1://'%ELSESTART'


if  (CCRES == 0)   NMDECS[  LEVEL] = NMDECS[  LEVEL] | 1; 
CSTART(CCRES, 2); 
  REPORT = LASTINST; 
goto ENTERELSELAB; 
ESW_2://'%ELSE'(iu)ETC


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

  MARKE = MARKR + 1 + FROMAR2(MARKR + 1); 
  MARKUI = MARKR + 3; 

}

if  (CCRES == 1 || SKIP == YES)   K = YES;  else   K = NO; 
CIFTHEN(P, P + 3, MARKUI, MARKE, MARKR, K); 
goto ENTERELSELAB; 
ESW_3://'%ELSE'<UI>


if  (CCRES != 1)  {

if  (START != 0) SETLINE(); //FORCORRECTLINEIFFAILSINUI


if  (THENLAB == 0)   K = 0;  else   K = 2; 
CUI(K); 
  REPORT = REPORTUI; 

}

ENTERELSELAB: 
if  (ELSELAB > 0)   ELRES = ENTERLAB(ELSELAB, 0b11 | REPORT << 2); 
//CONDITIONALMERGE


ESW_NULLELSE://NULLELSECLAUSE



} /* End of Begin/Rt/Fn/Map depth=3 */;

void CSTART(int CCRES, int CODE) {
//***********************************************************************


//*COMPILEACOMPLETESTART-FINISHBLOCKBYRECURSION*


//*IFSTARTNEVEREXECUTEDSKIPTOCORRESPONDINGFINISH*


//*CODE=0WASUNCONDITIONALNOWSHOULDBEUNUSED*


//*CODE=1AFTERTHEN*


//*CODE=2AFTERELSE*


//*CODE=3AFTERONEVENT*


//*PONENTRYTOFORWARDPOINTERTOTHERIGHTFINISH*


//*PONEXITTOTHEELSECLAUSEAFTERTHERIGHTFINISH*


//***********************************************************************


int SKIPCODE; int FINISHAR; int OLDNEXTP; int OLDLINE;

  SKIPCODE = NO; 
if  (1 <= CODE && CODE <= 2 && CCRES | CODE == 3)   SKIPCODE = YES; //NEVEREXECUTED


  FINISHAR = FROMAR4(P); //TOSTARTOFARFORFINISH


if  (FINISHAR <= P) ABORT(); //FORTESTING


  OLDLINE =   LINE; //FORERRORMESSAGES


do {
//THROUGHINTERVENINGSTATMNTS


  OLDNEXTP = NEXTP; 
if  (SKIPCODE == NO) COMPILEASTMNT();  else {

    LINE = A << 8 | A; 
  NEXTP = NEXTP + (A << 16) + (A << 8) + A; 

}

} until  (OLDNEXTP >= FINISHAR) ;//HAVINGCOMPILEDFINISH


  P = FINISHAR + 6; //TOELSECLAUSE


//


if  (A <= 2 && CODE != 1) FAULT2(45 + CODE, OLDLINE, 0); 
if  (SKIPCODE == YES)   LASTINST = 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CCYCBODY(int UA, int ELAB, int CLAB) {
//***********************************************************************


//*COMPILESACYCLEREPEATBODYBYRECURSION*


//*ONENTRYPISTOFORWARDPOINTER.ONEXITTOALTOFUNTIL*


//*UA=OIFUNTILNOTALLOWED*


//*ELAB&CLABARELABELSFORELSE&CONTINUE*


//***********************************************************************


int FINISHAR; int OLDLINE; int SAVEE; int SAVEC;

  FINISHAR = FROMAR4(P); 
if  (FINISHAR <= P) ABORT(); 
  OLDLINE =   LINE;   SAVEE = EXITLAB;   SAVEC = CONTLAB; 
  EXITLAB = ELAB;   CONTLAB = CLAB; 
while  (NEXTP <= FINISHAR) {
COMPILEASTMNT(); 
}
  EXITLAB = SAVEE;   CONTLAB = SAVEC; 
  P = FINISHAR + 6; 
if  (A == 1 && UA == 0) FAULT2(12, OLDLINE, 0); 

} /* End of Begin/Rt/Fn/Map depth=3 */;


void CLOOP(int ALT, int MARKC, int MARKUI) {
//***********************************************************************


//*ALT=1FORwhile,=2FORuntil,=3FORfor*


//*MARKCISTOTHECONDITIONORCONTROLCLAUSE*


//*MARKUIISTOTHEUI,SPECIALFORcycle*


//***********************************************************************


int L1; int L2; int L3; int CCRES; int ELRES;

int FORNAME; int INITTYPE; int INITVAL; int STEPTYPE; int STEPVAL; int FINALTYPE; int FINALVAL; int   FACC; int FDISP; int FBASE; int INITP; int REPMASK; int USEDEBJ; int DEBTO;

auto void FOREXP(int *ETYPE, int *EVALUE, int TT, int REG);
auto void VALIDATEFOR(void);
/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
  P = MARKC; 
  SFLABEL = SFLABEL - 2; 
  L1 = SFLABEL;   L2 = L1 + 1; 
//


//SETL3FORALTS0,5&6ONLY


//


  L3 = 0; 
if  (0b1100001 & 1 << ALT != 0) {   L3 = SFLABEL - 1;   SFLABEL = L3;  }
//


//UPDATETHELINENUMBERFORALTS1TO3ONLY


//


if  (1 <= ALT && ALT <= 3) SETLINE(); 
//


//ENTERTHEFIRSTLABEL(L1)FORALLALTSEXCEPT3&6


//


if  (0b0110111 & 1 << ALT != 0)   ELRES = ENTERLAB(L1, 0); 
goto SW[ALT]; 
SW_0://cycle


CCYCBODY(1, L2, L3); 
  ELRES = ENTERLAB(L3, 0b011); 
if  (A == 1)  {
//repeatuntil<COND>


  P = P + 1;   CCRES = CCOND(0, 1, L1); 

} else ENTERJUMP(15, L1, 0); 
  ELRES = ENTERLAB(L2, 0b011); 
WAYOUT: //REMOVELABELSNOTREQUIRED


REMOVELAB(L1); 
REMOVELAB(L2); 
if  (L3 > 0) REMOVELAB(L3); 
return; 
SW_1://UIWHILECOND


  CCRES = CCOND(0, 1, L2); 
  P = MARKUI; 
CUI(1); 
ENTERJUMP(15, L1, 0); //UNCONDITIONALLYBACKTOWHILE


  ELRES = ENTERLAB(L2, 0b111); //CONDITIONAL(?)&REPLACEENV


goto WAYOUT; 
SW_2://UIuntilCOND


  P = MARKUI; 
CUI(1); 
  P = MARKC; 
  CCRES = CCOND(0, 1, L1); 
goto WAYOUT; 
SW_3://UIfor....


SW_6://for...cycle



  FORNAME = FROMAR2(P); 
  INITP = P + 2;   P = INITP; 
COPYTAG(FORNAME); 
  FDISP = K;   FBASE = I;     FACC = 2 * NAM; 
unless  (TYPE == 1 && PREC == 5 && ROUT == 0 && 0 == ARR) FAULT2(91, 0, FORNAME); 
unless  (FBASE == RBASE) WARN(4, FORNAME); 
//


SKIPEXP(); //PTOSTEPEXPRSN


FOREXP(STEPTYPE, STEPVAL, 1, ACCR); //STEPTOACCRANDTEMP


if  (STEPTYPE == 0)  {

if  (STEPVAL == 0) FAULT2(92, 0, 0); //ZEROSTEP



} else {

if  (PARMOPT != 0) PPJ(26, 11); //FAULTCOMPUTEDZEROSTEP



}

//


FOREXP(FINALTYPE, FINALVAL, 1, ACCR); //EVALUATEFINAL


//


  P = INITP; 
FOREXP(INITTYPE, INITVAL, 0, BREG); //INITIALVALUETOB


if  (PARMOPT != 0) VALIDATEFOR(); 
//


  USEDEBJ = 0; //DONTUSEIT


if  (STEPVAL == -1 && FINALTYPE | STEPTYPE == 0 && FINALVAL == 1)  {

  USEDEBJ = 1; //CANUSEBESTBRANCHINSTRN


if  (INITTYPE == 0) PSF1(LB, 0, INITVAL); 
unless  (INITTYPE == 0 && INITVAL >= 1) ENTERJUMP(32 + 13, L2, 0b10); //JAFB>0NOTRAVERSES


  DEBTO = CA; //SAVECAFORDEBJ



} else {

if  (INITTYPE | STEPTYPE == 0)  {

PSF1(LB, 0, INITVAL - STEPVAL); 

} else {

if  (INITTYPE == 0) PSF1(LB, 0, INITVAL); 
PSF1(SBB, STEPTYPE, STEPVAL); 

}

//


//HAVEBSETTOINIT-STEP.FORCOMPUTEDSTEPSNOWMUSTCHECK


//FORNEGATIVETRAVERSES.FORFIXEDSTEPSTHISCANBESET


//INMASKFORREPEATING


//


if  (STEPTYPE == 1)  {

PF1(LSS, 0, BREG, 0); 
PSF1(IRSB, FINALTYPE, FINALVAL); 
PSF1(IDV, 1, STEPVAL); 
  GRUSE[ACCR] = 0; 
ENTERJUMP(37, L2, 0b10); 
  REPMASK = 7; 

} else   REPMASK = 8 | (2 << (STEPVAL >> 31)); //AORC


//


  ELRES = ENTERLAB(L1, 0); //LABELFORREPEATING


//


if  (STEPTYPE == 0 && STEPVAL == 1)  {

PSF1(CPIB, FINALTYPE, FINALVAL); 

} else {

PSF1(CPB, FINALTYPE, FINALVAL); 
PSF1(ADB, STEPTYPE, STEPVAL); 

}

  GRUSE[BREG] = 0; 
ENTERJUMP(REPMASK, L2, 0b10); 

}

    BASE = FBASE;   AREA = -1; 
PSORLF1(STB,   FACC, AREACODE()
, FDISP); 
NOTEASSMENT(BREG, 2, FORNAME); 
//


  P = MARKUI; //TOUIOR'%CYCLE'(HOLE)


if  (ALT == 3)  {
//DEALWITHCONTROLLEDSTMNTS


CUI(0); 

} else {

CCYCBODY(0, L2, L3); 
  ELRES = ENTERLAB(L3, 0b011); //LABELFORCONTINUE



}

    BASE = FBASE;   ACCESS =   FACC; 
  AREA = -1;   DISP = FDISP; 
NAMEOP(2, BREG, 4, FORNAME); //CONTROLTOB


if  (USEDEBJ == 0) ENTERJUMP(15, L1, 0);  else { PSF1(DEBJ, 0, (DEBTO - CA) / 2);   GRUSE[BREG] = 0;  }
  ELRES = ENTERLAB(L2, 0b111 ^ (USEDEBJ << 2)); //REPLACEENVUNLESSDEBJ


//WHENMERGEENV


goto WAYOUT; 
SW_4://whileCONDcycle


  CCRES = CCOND(0, 1, L2); 
CCYCBODY(0, L2, L1); 
ENTERJUMP(15, L1, 0); 
  ELRES = ENTERLAB(L2, 0b111); //CONDITIONAL&REPLACEENV


goto WAYOUT; 
SW_5://until...cycle


//ALSOcycle...repeatuntil


//MARKUITOcycle


  P = MARKUI; 
CCYCBODY(0, L2, L3); 
  P = MARKC;   ELRES = ENTERLAB(L3, 0b011); //CONTINUELABELIFNEEDED


  CCRES = CCOND(0, 1, L1); 
  ELRES = ENTERLAB(L2, 0b011); 
goto WAYOUT; 
void FOREXP(int *ETYPE, int *EVALUE, int TOTEMP, int USEREG) {
//***********************************************************************


//*PINDEXESEXPRESSION.IFCONSTPUTINTOEVALUEOTHERWISE*


//*COMPILETOUSEREGANDSTOREINTEMPIFTOTEMP#0*


//***********************************************************************


int INP; int VAL; int OP;

  INP = P;   P = P + 3; 
if  (INTEXP(VAL)
 == 0 && IMOD(VAL)
 < 0x1FFFF)  {

  EVALUE = VAL;   ETYPE = 0; //EXPRESSIONALITERALCONST


return; 

}

  P = INP; 
CSEXP(USEREG, 0x51); //INTEGERMODETOREG


  ETYPE = 1; //NOTCONST


if  (TOTEMP != 0)  {

GETWSP(VAL, 1); 
if  (USEREG == ACCR)   OP = ST;  else   OP = STB; 
PSF1(OP, 1, VAL); 
  EVALUE = VAL; 

}


} /* End of Begin/Rt/Fn/Map depth=4 */;

void VALIDATEFOR(void) {
//***********************************************************************


//*INITIALVALUEINBREGORACONSTANT*


//***********************************************************************


int I;

if  (INITTYPE | STEPTYPE | FINALTYPE == 0)  {

  J = FINALVAL - INITVAL; //ALLCONSTANTCANCHECKNOW


if  ((J / STEPVAL) * STEPVAL != J) FAULT2(93, 0, 0); 
return; 

}

if  (STEPTYPE == 0 && IMOD(STEPVAL)
 == 1) return; 
//


//CHECKBYPLANTINGCODE


//


if  (INITTYPE == 0) PSF1(LSS, 0, INITVAL);  else PF1(LSS, 0, BREG, 0); 
PSF1(IRSB, FINALTYPE, FINALVAL); 
PSF1(IMDV, STEPTYPE, STEPVAL); 
PF1(LSS, 0, TOS, 0); 
  GRUSE[ACCR] = 0; 
PPJ(36, 11); 

} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;

void ASSIGN(int ASSOP, int P1) {
//***********************************************************************


//*HANDLESARITHMETIC,STRING&ADDRESSASSIGNMENTSTOVARIABLES*


//*FORMALPARAMETERSANDDOPEVECTORS*


//*ASSOP:-*


//*1ISFOR'=='*


//*2ISFOR'='*


//*3ISFOR'<-'(JAMTRANSFER)*


//*4ISFOR'->'(UNCONDITIONALRESOLUTION)*


//*>4ISFORSTOREACCBY'ASSOP&3'INTONAME*


//**


//*PPOINTSTOTHEEXPRESSION.P1TOTHENAMEONLHS*


//***********************************************************************


int Q; int QQ; int KK; int TYPEP; int PRECP; int PTYPEP; int JJJ; int P2; int JJ; int REG; int STCODE; int   RHTYPE; int ACCP; int II; int HEAD1; int NOPS; int TPCELL; int LVL; int BOT1; int LHNAME; int RHNAME;

/*pending name*/recfm  R;
//(RD)


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*///TOSWITCHONASSOP


  P2 = P; 
if  (ASSOP > 4)     RHTYPE = TYPE; 
  LHNAME = A << 8 | A; 
  P = P1; REDUCETAG(); //LOOKATLHSIDE


  PTYPEP =   PTYPE;   JJ = J; 
  KK = K;   II = I;   LVL = OLDI; 
  TPCELL = TCELL;   ACCP = ACC; 
  P = P2;   TYPEP = TYPE;   PRECP = PREC; //SAVEUSEFULINFOFORLATER


goto SW[ASSOP & 3]; 
//


SW_2:SW_3://ARITHMETICASSIGNMENTS


if  (TYPE == 3) goto RECOP; 
unless  (TYPE == 2 || TYPE == 5)   TYPE = 1; //INCASEOFRUBBISHYSUBNAMES


if  (TYPE == 5) goto ST; //LHSISASTRING


BACK:   HEAD1 = 0; //CLEARTEMPORAYRYLISTHEADS


unless  (TYPE == 2)   TYPE = 1; //DEALWITHUNSETNAMES


  TYPEP = TYPE; 
  NOPS = (1 << 18) + 1;   P = P2 + 3; 
PUSH(HEAD1, (ASSOP & 3) + 33, PRECP, 0); //ASSIGNMENTOPERATOR


  BOT1 = HEAD1; 
PUSH(HEAD1, PTYPEP << 16 | 2, P1, 0); //LHS


if  (ASSOP > 4)  {

unless  (TYPE ==   RHTYPE) FAULT(24, 0); 
PUSH(HEAD1,   RHTYPE << 16 | 9, 0, 0); 
  OLINK[ACCR] = HEAD1; 

} else TORP(HEAD1, BOT1, NOPS); //RHSTOREVERSEPOLISH


EXPOP(HEAD1, -1, NOPS, 256 + (PRECP << 4) + TYPEP); //PLANTCODE


//CLEARLIST(HEAD1)


  ASLIST[BOT1] = ASL; 
  ASL = HEAD1; 
return; 
//NA:NOTEASSMENT(-1,ASSOP&3,A(P1))


ST: //STRINGS


//


//PICKOFFNULLSTRINGSANDSUBSTITUTEACRAFTYMVLFORS=""


//


if  (A == 4 && A == 2 && A == 0x35 && A == 0 && A == 2)  {

  Q = P + 12 - (A >> 1); 
  P = P1; CNAME(1, DR); 
PF2(MVL, 0, 1, 0, 0, 0); 
  P = Q; return; 

}

if  (ASSOP <= 3) CSTREXP(0, ACCR); 
  ASSOP = ASSOP & 3; 
  QQ = STRINGL;   Q = P; 
  REGISTER[ACCR] = 1; 
  OLINK[ACCR] = ADDR(R); 
  R = 0x51;   R = 9;   R = 0; 
  R = ACCR; 
  P = P1; CNAME(1, DR); 
if  (R != 9) PF1(LSD, 0, TOS, 0); 
PF1(IAD, 0, PC, SPECIALCONSTS(2)
); 
if  (ASSOP != 3 && ROUT != 0 || NAM != 0 && 0 == ARR && QQ == 0)  {

//LHS=MAP:DRBOUNDNOTVALID


//ALSONAMESMAPPED==STRING(ADDR)


if  (PARMOPT != 0) PPJ(0, 18);  else {

PF1(STUH, 0, BREG, 0); 
PF1(  LUH, 0, BREG, 0); 
PF1(LDB, 0, BREG, 0); 

}

  GRUSE[BREG] = 0; 

}

  GRUSE[ACCR] = 0; 
  REGISTER[ACCR] = 0; 
if  (QQ > 0 && ASSOP != 3) PF2(MV, 0, 0, QQ, 0, 0);  else {

if  (ASSOP == 3) PF1(STD, 0, TOS, 0); 
PF2(MV, 1, 1, 0, 0, UNASSPAT & 255); 
if  (PARMARR != 0 || ASSOP == 3) { PSF1(USH, 0, 8); PSF1(USH, 0, -40);  }
if  (PARMARR != 0 && ASSOP == 2) PPJ(36, 9); 
if  (ASSOP == 3)  {

PF1(IRSB, 2, TOS, 0); 
PF1(ST, 2, 7, 0); //STOREAMENDEDCURRENTLENGTH



}


}

  P = Q; return; 
//


//THISSECTIONDEALSWITHOPERATIONSONCOMPLETERECORDS


//


RECOP: //LHSISRECORDWITHOUTSUBNAME


  REG = ACCR; //INCASEFAULT66


  Q = TSEXP(JJJ); 
if  (Q == 1 && JJJ == 0)  {
//CLEARARECORDTOZERO


  P = P1; CNAME(3, DR); 
if  (ACC <= 128) {   JJ = 0;   KK = ACC - 1;  } else {

  JJ = 1;   KK = 0; 
if  (NAM != 0 || ARR != 0) PSF1(LDB, 0, ACC); 

}

PF2(MVL, JJ, 1, KK, 0, 0); 

} else {

unless  (TYPE == 3 && A == 4 && A == 1) goto BACK; 
  P = P2 + 5; CNAME(3, ACCR); 
  ACCP = ACC; 
unless  (A == 2) { FAULT2(66, 0, LHNAME); goto F00;  }
  R = 0x61;   R = 9; 
  R = ACCR << 5;   R = 0; 
  OLINK[ACCR] = ADDR(R); 
  REGISTER[ACCR] = 1; 
  P = P1; CNAME(3, DR); 
  REGISTER[ACCR] = 0; 
if  (R != 9) PF1(LSD, 0, TOS, 0); 
if  (ASSOP == 2 && ACCP != ACC) { FAULT2(67, LHNAME, FROMAR2(P2 + 5)
); goto F00;  }
if  (ACCP > ACC)   ACCP = ACC; 
do {
if  (ACCP > 128)   KK = 128;  else   KK = ACCP; 
PF2(MV, 0, 0, KK - 1, 0, 0); 
  ACCP = ACCP - KK; 
} while (! (ACCP == 0) );
  GRUSE[ACCR] = 0; 

}

  P = P2; SKIPEXP(); 
  GRUSE[DR] = 0; 
return; 
SW_0://RESOLUTION


  P = P1; CNAME(2, DR); 
  P = P2; 
if  (TYPE == 5) CRES(0);  else {

SKIPEXP(); 
unless  (TYPE == 7) FAULT2(71, 0, FROMAR2(P1)
); 

}

return; 
SW_1://'=='ANDnamePARAMETERS


  REG = ACCR;   STCODE = ST; //NORMALLYUSEACC


unless  (A == 4 && A == 1) goto F81; 
unless  (NAM == 1) { FAULT2(82, 0, LHNAME); goto F00;  }//ONLYPOINTERSONLHSOF==


  P = P2 + 5; 
  RHNAME = A << 8 | A; 
if  (ARR == 1) goto ARRNAME; 
if  (A == 2 && 2 == A)  {
//LHSSCALARPOINTERNAME


COPYTAG(RHNAME); //LOOKATRHS


if  (  PTYPE != SNPT && ARR != 0) {   REG = DR;   STCODE = STD;  }

}

CNAME(3, REG); //DESCRPTRTOACC


  R = 0x61;   R = 9; 
  R = REG; 
  OLINK[REG] = ADDR(R); 
  REGISTER[REG] = 1; 
unless  (A == 2) goto F81; //NORESTOFEXPONRHS


  Q = P + 1;   P = P1; 
unless  (TYPE == TYPEP && PREC == PRECP) goto F83; 
unless  (OLDI <= LVL ||   BASE == 0 || NAM != 0) goto F86; 
//GLOBAL==NONOWNLOCAL


CNAME(6, 0); 
if  (R != 9)  {

if  (REG != ACCR) ABORT(); 
PF1(LSD, 0, TOS, 0); 
  GRUSE[ACCR] = 0; 

}

  REGISTER[REG] = 0; 
COM: PSORLF1(STCODE, ACCESS, AREACODE()
, DISP); 
if  (REG == DR && ACCESS != 0) ABORT(); 
NOTEASSMENT(REG, 1, A << 8 | A); 
  P = Q; return; 
ARRNAME: CNAME(12, ACCR); 
if  (ACCESS >= 8)   ACCESS = ACCESS - 4;  else   ACCESS = 0; 
unless  (TYPE == TYPEP && PREC == PRECP && ARR > 0) goto F83; 
unless  (OLDI <= LVL ||   BASE == 0 || NAM != 0) goto F86; 
//GLOBAL==NONOWNLOCAL


  TYPE = 0; 
NAMEOP(2, ACCR, 16, -1); 
  R = 0x72;   R = 0; 
  R = 9;   R = ACCR; 
  R = -1; 
  REGISTER[ACCR] = 1; 
  OLINK[ACCR] = ADDR(R); 
unless  (A == 2) goto F81; 
  Q = P + 1;   P = P1; 
CNAME(6, 0); 
unless  (R == 9) PF1(  LSQ, 0, TOS, 0); 
  REGISTER[ACCR] = 0; 
goto COM; 
F83: FAULT2(83, LHNAME, RHNAME); goto F00; 
F86: FAULT2(86, LHNAME, RHNAME); goto F00; 
F81: FAULT2(81, 0, LHNAME); 
F00: 
  REGISTER[REG] = 0; 
  P = P2; SKIPEXP(); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CSEXP(int REG, int MODE) {
//***********************************************************************


//*COMPILEASIGNEDEXPRESSIONTOREGISTER'REG'INMODE'MODE'*


//*MODE=1FORinteger,=2REAL,=3LONG,=0INTEGERifPOSSIBLE*


//*MODE=5FORADDRESSEXPRESSNS(IELEAVEANYCONSTANTIN'ADISP')*


//***********************************************************************


int EXPHEAD; int NOPS; int EXPBOT;

  EXPHEAD = 0;   EXPBOT = 0; 
  NOPS = 0; 
  P = P + 3; 
TORP(EXPHEAD, EXPBOT, NOPS); 
//


EXPOP(EXPHEAD, REG, NOPS, MODE); 
//CLEARLIST(EXPHEAD)


  ASLIST[EXPBOT] = ASL; 
  ASL = EXPHEAD; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int CONSTEXP(int PRECTYPE) {
//***********************************************************************


//*COMPILESANEXPRESSIONWHICHSHOULDEVALUATETOACONSTANTOF*


//*TYPE'PRECTYPE'.PASFORFNINTEXP.*


//***********************************************************************


int EXPHEAD; int EXPBOT; int NOPS; int RES;

  EXPHEAD = 0;   EXPBOT = 0;   NOPS = 0;   RES = 0; 
TORP(EXPHEAD, EXPBOT, NOPS); 
unless  (NOPS & 0x00040000 == 0) goto WAYOUT; 
EXPOP(EXPHEAD, ACCR, NOPS, 0x200 + PRECTYPE); 
if  (EXPOPND == 3) {   RES = EXPOPND; goto WAYOUT;  }
unless  (EXPOPND <= 1) goto WAYOUT; 
  RES = ADDR(EXPOPND); 
WAYOUT: 
if  (RES == 0 && DCOMP != 0) assert(_IMP_MONITOR_); 
  ASLIST[EXPBOT] = ASL; 
  ASL = EXPHEAD; 
return RES; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int INTEXP(int *VALUE) {
//***********************************************************************


//*COMPILESANEXPRESSIONWHICHSHOULDEVALUATETOACONSTANT*


//*VALUERETURNEDINVALUE.RESULT#0IFFAILEDTOEVALUATE*


//*PPOINTSTOP(+') IN (+')(OPERNAD)(RESTOFEXPR)*


//***********************************************************************


int EXPHEAD; int EXPBOT; int NOPS; int CODE; int SPTYPE; int SACC;

  EXPHEAD = 0;   EXPBOT = 0;   NOPS = 0;   CODE = 0; 
  SPTYPE =   PTYPE;   SACC = ACC; //CALLEDINDECLARATIONS


TORP(EXPHEAD, EXPBOT, NOPS); 
if  (NOPS & 0x00040000 == 0 && TYPE == 1)  {

EXPOP(EXPHEAD, ACCR, NOPS, 0x251); 
unless  (EXPOPND <= 1 && EXPOPND == 0x51)   CODE = 1; 
  VALUE = EXPOPND; 

} else {   CODE = 1;   VALUE = 1;  }
  ASLIST[EXPBOT] = ASL; 
  ASL = EXPHEAD; 
  ACC = SACC;     PTYPE = SPTYPE; 
UNPACK(); 
return CODE; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void TORP(int *HEAD, int *BOT, int *NOPS) {
//***********************************************************************


//*CONVERTTHESIGNEDEXPRESSIONINDEXEDBYPINTOREVERSE*


//*POLISHNOTATION.THEREVERSEPOLISHLISTISADDEDTO'HEAD'*


//*WHICHMAYCONTAINANOTHEREXPRESSION.THENUMBEROFOPERATORS*


//*ISADDEDTONOPS.*


//*N.B.ANINTEGEREXPRESSIONISASPECIALCASEOFAREALEXPRSN*


//*THETOP20BITSOFNOPSAREUSEDTORETURNDETAILSOFTHEEXPR*


//*THESEBITSSIGNIFYASFOLLOWS:-*


//*1<<17CONTAINSVARIABLEOFMORETHAN32BITS*


//*1<<18NOTCONSTANTEXPRSSNIECONTAINSATLEAST1VARIABLE*


//*1<<19COMPLEXIECONTAINSFNCALLORNEEDSDRTOEVALUATE*


//*1<<20CONTAINSTHEOPERATOR+*


//*1<<21CONTAINSTHE-OPERATOR(INCLUDESUNARYMINUS)*


//*1<<22CONTAINSOPERATOR!!(INCUDESUNARYNOT)*


//*1<<23-7CONTAINSOPERATORS!,*,//,/,&RESPECTIVELY*


//*1<28&9CONTAINS<<OR>>*


//*1<<30CONTAINSEXPONETIATION*


//***********************************************************************


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
const char PRECEDENCE[(15)-(1)+1]
;
$define PRECEDENCE[N0] PRECEDENCE[(N0)-(1)]
 = 
3, 
3, 
4, 
5, 
5, 
4, 
3, 
3, 
4, 
4, 
5, 
5, 
3, 
5, 
5;

const char OPVAL[(15)-(1)+1]
;
$define OPVAL[N0] OPVAL[(N0)-(1)]
 = 
20, 
21, 
27, 
37, 
30, 
24, 
22, 
23, 
25, 
26, 
28, 
29, 
20, 
37, 
30;

int RPHEAD; int PASSHEAD; int SAVEHEAD; int REAL; int REALOP; int COMPLEX; int   OPERATOR; int OPPREC; int OPND; int C; int D; int E; int RPTYPE; int RPINF; int BDISP; int   OPNAME; int OPMASK; int XTRA; int RPBOT; int OPSTK; int OPPSTK; int PASSBOT;

/*pending name*/recfm  *LCELL;
//(LISTF)


//


  PASSHEAD = 0;   RPHEAD = 0;   SAVEHEAD = 0; 
  REAL = 0;   REALOP = 0;   BDISP = 0; 
  RPBOT = 0;   OPSTK = 0;   OPPSTK = 0; 
//


  C = A; 
if  (2 <= C && C <= 3)  {
//INITIAL'-'OR'\'


  NOPS = NOPS + 1; 
//'-'=(11,3)'\'=(10,5)


  OPSTK = 4 - C; 
  OPPSTK = (C << 1) - 1; 
  OPMASK = 1 << (19 + C); //-or!!



} else   OPMASK = 0; 
NEXTOPND:   OPND = A;   P = P + 2; 
  COMPLEX = 0;   XTRA = 0; 
goto OPERAND[OPND]; //SWITCHONOPERAND


OPERAND_1://NAME


    OPNAME = (A << 8) + A; 
  LCELL = ASLIST[TAGS[  OPNAME]]; 
    PTYPE = LCELL >> 16; 
if  (  PTYPE == 0xFFFF)     PTYPE = 7; //NAMENOTSET


  TYPE =   PTYPE & 7;   PREC =   PTYPE >> 4 & 15; 
if  (  PTYPE == SNPT)  {

  D = LCELL >> 16; 
if  (D == 38 && A == 2)  {
//PICKOFFNL


  RPTYPE = 0;   RPINF = 10;     PTYPE = 0x51;   P = P + 2; goto SKNAM; 

}

if  (D == 52 && A == 2)  {
//PICKOFFPI


  RPTYPE = 1;     PTYPE = 0x62;   RPINF = 0x413243F6; 
  XTRA = 0xA8885A31; 
  P = P + 2;   REAL = 1; goto SKNAM; 

}

  COMPLEX = 1; 
    PTYPE = TSNAME[D]; UNPACK(); 

}

if  (  PTYPE & 0xFF00 == 0x4000 && A == 2 && 2 == A && 1 <= TYPE && TYPE <= 2)  {
//CONSTVAR


  LCELL = LCELL | 0x8000; //SETUSEDBIT


  RPINF = LCELL;   XTRA = LCELL; 
  RPTYPE = 1;     PTYPE =   PTYPE & 255; 
if  (TYPE == 1 && PREC <= 5 && 0xFFFE0000 <= RPINF && RPINF <= 0x1FFFF) {   RPTYPE = 0;     PTYPE = 0x51;  }
if  (PREC == 7)   RPTYPE = 3; 
if  (TYPE == 2)   REAL = 1; 
  P = P + 2; goto SKNAM; 

}

  XTRA =   OPNAME; 
if  (  PTYPE & 0x3F00 != 0 || PARMCHK == 1 || PREC < 5) {   COMPLEX = 1;   XTRA = -1;  }
  OPMASK = OPMASK | (COMPLEX << 19); 
if  (A != 2 || A != 2)   XTRA = -1; //XTRA=NAMEFORLOCALSCALRSONLY


if  (TYPE == 3)  {

  D = P;   KFORM = LCELL & 0xFFFF; 
  C = COPYRECORDTAG(E);   P = D; 
unless  (E == 1 && 1 <= TYPE && TYPE <= 2 && NAM == ARR && ARR == 0 && PREC != 3)   COMPLEX = 1; 

}

if  (PREC >= 6)   OPMASK = OPMASK | 1 << 17; //MORETHAN32BITS


  RPTYPE = 2;   RPINF = P; if  (  PTYPE == 7)     PTYPE = 0x51; 
if  (TYPE == 5) { FAULT2(76, 0,   OPNAME);   RPTYPE = 0;     PTYPE = 0x51;  }
if  (TYPE == 2)   REAL = 1; 
  P = P + 2; 
SKNAM: if  (A == 2)   P = P + 1;  else SKIPAPP(); 
if  (A == 1) {   P = P + 3; goto SKNAM;  }
  P = P + 2; 
INS: if  (RPTYPE == 2)   OPMASK = OPMASK | 1 << 18; 
BINSERT(RPHEAD, RPBOT,   PTYPE << 16 | COMPLEX << 8 | RPTYPE, RPINF, XTRA); 
goto OP; 
OPERAND_2://CONSTANT


    PTYPE = A;   D =   PTYPE >> 4; 
  C =   PTYPE & 7; 
if  (D == 4)  {

  RPINF = FROMAR2(P + 1); 
    PTYPE = 0x51; 

} else   RPINF = FROMAR4(P + 1); 
if  (C == 2)   REAL = 1;   RPTYPE = 1; 
if  (D == 6)   XTRA = FROMAR4(P + 5); 
if  (C == 5)  {
//STRINGCONSTANT


FAULT2(77, 0, 0);   RPINF = 1;   RPTYPE = 0; 
  P = P + A + 7;     PTYPE = 0x51; 

} else {

if  (D == 7) {   XTRA = ADDR(A);   RPTYPE = 3;  }
if  (  PTYPE == 0x51 && 0xFFFE0000 <= RPINF && RPINF <= 0x1FFFF)   RPTYPE = 0; 
  P = P + 2 + BYTES[D]; 

}
goto INS; 
OPERAND_3://SUBEXPRESSION


  PASSHEAD = 0;   PASSBOT = 0; 
  P = P + 3; 
TORP(PASSHEAD, PASSBOT, NOPS); 
if  (TYPE == 2)   REAL = 1; 
//CONCAT(RPHEAD,PASSHEAD)


if  (RPBOT == 0)   RPHEAD = PASSHEAD;  else   ASLIST[RPBOT] = PASSHEAD; 
  RPBOT = PASSBOT; 
  P = P + 1; 
OP: //DEALWITHOPERATOR


if  (A == 2) goto EOE; //EXPRFINISHED


    OPERATOR = A; 
//


//THESTRINGOPERATOR'.'CAUSESCHAOSINANARITHMETICEXPRSN


//SOFAULTITANDCHANGEITTOTHEINNOCUOUS'+'


//


if  (  OPERATOR == CONCOP) FAULT2(78, 0, 0); 
  OPPREC = PRECEDENCE[  OPERATOR]; 
    OPERATOR = OPVAL[  OPERATOR]; 
if  (  OPERATOR == 26 ||   OPERATOR == 30)   REAL = 1; 
  NOPS = NOPS + 1; 
//


//UNLOADTHEOPERATORSTACKOFALLOPERATORSWHOSEPRECEDENCEIS


//NOTLOWERTHANTHECURRENTOPERATOR.ANEMPTYSTACKGIVES'-1'


//ASPRECEDENCE.


//


while  (OPPREC <= OPPSTK & 31) {
BINSERT(RPHEAD, RPBOT, (OPSTK & 31) + 9, 0, 0); 
  OPSTK = OPSTK >> 5;   OPPSTK = OPPSTK >> 5; 
}
//


//THECURRENTOPERATORCANNOWBESTORED


//


  OPSTK = OPSTK << 5 | (  OPERATOR - 9); 
  OPPSTK = OPPSTK << 5 | OPPREC; 
if  (  OPERATOR >= 31)     OPERATOR = 30; 
  OPMASK = OPMASK | (1 <<   OPERATOR); 
goto NEXTOPND; 
EOE: //ENDOFEXPRESSION


//EMPTYREMAININGOPERATORS


while  (OPSTK != 0) {
BINSERT(RPHEAD, RPBOT, (OPSTK & 31) + 9, 0, 0); 
  OPSTK = OPSTK >> 5; 
}
    PTYPE = REAL + 1; 
  TYPE =   PTYPE; 
//CONCAT(RPHEAD,HEAD)


if  (HEAD == 0)   BOT = RPBOT;  else   ASLIST[RPBOT] = HEAD; 
  HEAD = RPHEAD; //HEADBACKTOTOPOFLIST


  NOPS = NOPS | OPMASK; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void EXPOP(int INHEAD, int REG, int NOPS, int MODE) {
//***********************************************************************


//*EVALUATEALISTOFOPERANDAND'NOPS'OPERATORSANDLEAVE*


//*THERESULTINREG*


//*INHEADHOLDSTHELISTTHEBOTTOMBYTEOFSTREAM1DEFINESTHE*


//*ENTRYASFOLLOWS:-*


//*0=SHORT(INTEGER)CONSTANT<18BITS--S2=CONSTANT*


//*1=OTHERCONSTANTS2(+S3IFNEEDED)=CONSTANT*


//*2=VARIABLES2POINTTOARENTRYFORNAME&SUBSCRIPTS*


//*(3=DOPEVECTORITEMIFNEEDED)*


//*(4=CONDITONALEXPRESSIONASINALGOL)*


//*7=INTERMEDIATERESULTUNDERLNBS2=DISPLCMNTFROMLNB*


//*8=INTERMEDIATERESULTSTACKED*


//*9=INTERMEDIATERESULTINAREGISTERS2=REG*


//**


//*10-19=UNARYOPERATORS2=OPS3=EXTRA*


//*20UP=BINARYOPERATOR*


//**


//*ARRAYMCINSTHOLDTHEOPCODESCORRESPONDINGTOTHEOPERATORS:-*


//*TOPBYTE=REALFORWARDFORM*


//*2NDBYTE=REALREVERSEFORM*


//*3RDBYTE=INTEGERFORWARDFORM*


//*BTMBYTE=INTEGERREVERSEFORM*


//*MODEHASTYPE&PRECREQD+256BITIFNORESULTREQD*


//***********************************************************************


auto void CTOP(int *A);
auto void VMY(void);
auto void VMY1(void);
auto void CHOOSE(int *I);
auto void PUT(void);
auto void STARSTAR(void);
auto void REXP(void);
auto void LOAD(/*pending name*/recfm  *OP, int REG, int MODE);
auto void FLOAT(/*pending name*/recfm  *OPND, int OTHERPTYPE);
auto void COERCET(/*pending name*/recfm  *OP1, /*pending name*/recfm  *OP2, int MODE);
auto void COERCEP(/*pending name*/recfm  *OP1, /*pending name*/recfm  *OP2);
auto void LENGTHEN(/*pending name*/recfm  *OP);
auto void SHORTEN(/*pending name*/recfm  *OP);
//


int OPERAND[(2)-(1)+1]
;
$define OPERAND[N0] OPERAND[(N0)-(1)]
int STK[(99)-(0)+1]
;
$define STK[N0] STK[(N0)-(0)]

/*pending name*/recfm  *LIST;
//(LISTF)


/*pending name*/recfm  *OPND1; /*pending name*/recfm  *OPND2; /*pending name*/recfm  *OPND;
//(RD)


//


int C; int D; int KK; int JJ; int OPCODE; int COMM; int XTRA; int PP; int PT; int JJJ; int LOADREG; int EVALREG; int   STPTR; int CONSTFORM; int CONDFORM; int SAVEP;

const int MCINST[(37)-(10)+1]
;
$define MCINST[N0] MCINST[(N0)-(10)]
 = 
0x8E8E, 
0xF4F4E4E4, 
0xA8A8, 
0xF4F4E4E4, 
[ LOW ... HIGH ] = 0, 
0xF0F0E0E0, 
0xF2F4E2E4, 
0x8E8E, 
0x8C8C, 
0xFAFAEAEA, 
0xAAAC, 
0xBABC0000, 
0x8A8A, 
[ LOW ... HIGH ] = 0xC800, 
0xFA000000, 
0xF6F6E6E6, 
0x00F600E6, 
0x2C002C00, 
0x02000200, 
[ LOW ... HIGH ] = 0x48004800, 
0xEA00;

const char CORULES[(37)-(20)+1]
;
$define CORULES[N0] CORULES[(N0)-(20)]
 = 
[ LOW ... HIGH ] = 0x1F, 
[ LOW ... HIGH ] = 0x11, 
0x1F, 
0x11, 
0x12, 
0x11, 
1, 
1, 
0, 
[ LOW ... HIGH ] = 0x1F, 
[ LOW ... HIGH ] = 0, 
1;

const char FCOMP[(28)-(1)+1]
;
$define FCOMP[N0] FCOMP[(N0)-(1)]
 = 
  8, 
10, 
2, 
7, 
12, 
4, 
7, 
8, 
12, 
4, 
7, 
10, 
2, 
7, 
16, 
34, 
17, 
32, 
33, 
18, 
32, 
16, 
33, 
18, 
32, 
34, 
17, 
32;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
//


    STPTR = 0;   CONSTFORM = MODE & 512; 
  CONDFORM = MODE & 256; 
  SAVEP = P; 
  EVALREG = ACCR; //EVALUATEINACCUNLESS


if  (REG == BREG && NOPS & 0x7EC20000 == 0)   EVALREG = BREG; 
//ONLY'+'and'*'PRESENT


//NOTHING>32BITS


NEXT:   LIST = ASLIST[INHEAD]; 
  C = LIST;   XTRA = LIST; 
  JJ = C & 255;   D = INHEAD; 
  INHEAD = LIST; 
if  (JJ >= 10) goto OPERATOR; 
//


//ANYOPERANDWHICHMAYNEEDDRORBORACCINTHEIREVALUATION


//EGFUNCTIONS,ARRAYELEMENTSETCAREFETCHEDANDSTACKKEDFIRST


//


  OPERAND[1] = ADDR(ASLIST[D]); 
  OPND1 = ASLIST[D]; 
if  (OPND1 == 2 && OPND1 != 0) LOAD(OPND1, EVALREG, 0); 
  STK[  STPTR] = OPERAND[1]; 
    STPTR =   STPTR + 1; 
if  (  STPTR > 99) ABORT(); 
ANYMORE: 
unless  (INHEAD == 0 || MODE == 100) goto NEXT; 
goto FINISH; 
OPERATOR: 
if  (JJ < 19)   KK = 1;  else   KK = 2; //UNARYORBINARY


for (KK = KK; KK != 1; KK += -1) {
    STPTR =   STPTR - 1; 
  C = STK[  STPTR]; 
  OPERAND[KK] = C; 
}
  OPCODE = MCINST[JJ]; 
  COMM = 1; 
  OPND1 = ; 
  OPND2 = OPND1; 
if  (JJ >= 19)  {

  OPND2 = ; 
  C = CORULES[JJ]; 
if  (C & 15 != 0) COERCET(OPND1, OPND2, C & 15); 
if  (C >> 4 != 0) COERCEP(OPND1, OPND2); 

}

if  (JJ > 19)  {

CHOOSE(COMM); 
  OPND1 = ; 
  OPND2 = ; 

}

    PTYPE = OPND1;   TYPE =   PTYPE & 7; 
if  (TYPE == 1)   OPCODE = OPCODE & 0xFFFF;  else   OPCODE = OPCODE >> 16; //INTEGERORREALFORMS


if  (2 != OPND1 && OPND1 < 4 && 2 != OPND2 && OPND2 < 4) CTOP(JJ); 
if  (JJ == 0) goto STRES; //CTOPCARRIEDOUT


goto SW[JJ]; 
SW_10://\


LOAD(OPND1, EVALREG, 2); 
unless  (TYPE == 1 || TYPE == 7) FAULT(24, 0); 
PSF1(OPCODE & 255, 0, -1); //NEQ-1


  GRUSE[EVALREG] = 0; 
SUSE:   OLINK[EVALREG] = OPERAND[COMM]; 
STRES:   STK[  STPTR] = OPERAND[COMM]; 
    STPTR =   STPTR + 1; 
goto ANYMORE; 
SW_11://NEGATE


LOAD(OPND1, EVALREG, 2); 
if  (EVALREG == BREG) { PSF1(SLB, 0, 0); PF1(SBB, 0, TOS, 0);  } else PSF1(OPCODE & 255, 0, 0); //IRSB0ORRRSB0


  GRUSE[EVALREG] = 0; 
goto SUSE; 
SW_12://FLOAT


ABORT(); 
SW_13://ABS


LOAD(OPND1, EVALREG, 2); //OPERANDTOACC


if  (TYPE == 2)   C = 2;  else   C = 6; 
PF3(JAF, C, 0, 3); //JAF*+3ONACC<0


PSF1(OPCODE & 255, 0, 0); //IRSB0ORRRSB0


  GRUSE[EVALREG] = 0; 
goto SUSE; 
SW_14://STRETCH


ABORT(); 
SW_20://ADD


if  (TYPE == 1 && GRUSE[EVALREG] == 10 && OPND1 == 2 && OPND2 == 0 && REGISTER[EVALREG] == 0)  {

  P = OPND1;   D = GRINF1[EVALREG]; 
if  (FROMAR2(P)
 == D & 0xFFFF && A == 2 && 2 == A)  {

if  (EVALREG == ACCR)   C = IAD;  else   C = ADB; 
PSF1(C, 0, OPND2 - (D >> 16)); 
  GRINF1[EVALREG] = D & 0xFFFF | OPND2 << 16; 
  REGISTER[EVALREG] = 1; 
  OPND1 = 9;   OPND1 = EVALREG << 4; 
  OPND1 = 0; goto SUSE; 

}


}

BINOP: LOAD(OPND1, EVALREG, 2); 
LOAD(OPND2, EVALREG, 1); 
PUT(); goto SUSE; 
SW_21://SUBTRACT


goto BINOP; 
SW_22://EXCLUSIVEOR


SW_23://OR


SW_27://AND


if  (TYPE == 1) goto BINOP; 
F24: unless  (TYPE == 7) FAULT(24, 0); 
  JJ = 20;   OPCODE = MCINST[20]; 
goto BINOP; //CHANGEOPNTO+


SW_28://SRL


if  (OPND2 == 0)   OPND2 = -OPND2;  else {

LOAD(OPND2, EVALREG, 2); //OPNDTOACC


PSF1(IRSB, 0, 0); //ANDNEGATEIT


  GRUSE[EVALREG] = 0; 

}

SW_29://SLL


if  (OPND2 >> 4 == 6) SHORTEN(OPND2); //LONINTTOINT


goto BINOP; 
SW_24://MULT


goto BINOP; 
SW_25://INTEGERDIVISION


unless  (TYPE == 1) goto F24; 
goto BINOP; 
SW_26://NORMALDIVISION


goto BINOP; 
SW_30://EXPINREALEXPRSN


if  (OPND1 & 7 == 1) FLOAT(OPND1, 0); 
if  (OPND2 & 7 == 1) { STARSTAR(); goto SUSE;  }
//REAL**REALBYSUBROUTINE


REXP();   COMM = 2; goto SUSE; 
SW_37://EXPININTEGERCONTEXT


STARSTAR(); goto SUSE; 
SW_31://COMPARISONS


SW_32://DSIDEDCOMPARISONS


    PTYPE = OPND1; 
if  (OPND1 <= 1 && OPND1 == 0 && JJ == 31 && OPND1 == 0 ||   PTYPE >> 4 == 5) goto Z1; //INT0ORLONGINT0


if  (OPND2 <= 1 && OPND2 == 0 && OPND2 == 0 || OPND2 >> 4 == 5) goto Z2; 
LOAD(OPND1, EVALREG, 2); 
LOAD(OPND2, EVALREG, 1); 
PUT(); 
  REGISTER[EVALREG] = 0; 
  BFFLAG = COMM - 1; //NOTEBACKWARDSORFORWARDS


  MASK = FCOMP[XTRA + 7 * BFFLAG]; 
  COMM = 2; goto STRES; //2NDOPERANDMAYBENEEDEDIN


//DOUBLESIDEDANDISTHEREFORE


//TAKENASTHE'RESULT'


Z1:   COMM = 3 - COMM; 
Z2:   OPND = ; 
  C = EVALREG;   D = EVALREG ^ 7; 
if  (OPND == 2 && GRUSE[D] == 9 && GRINF1[D] & 0xFFFF == OPND || GRINF1[D] >> 16 == OPND)   C = D; 
LOAD(OPND, C, 2); 
  REGISTER[C] = 0; 
  MASK = FCOMP[XTRA + 7 * COMM + 7]; 
if  (TYPE == 1)   MASK = MASK + 4; 
if  (C == BREG)   MASK = MASK + 8; 
  COMM = 2; goto STRES; 
SW_33://SPECIALMHFORARRAYACCESS


  C = OPND2 >> 24; //CURRENTDIMENSION


  D = OPND2 >> 16 & 31; //TOTALNOOFDIMENSIONS


if  (D == 1) VMY1();  else VMY(); 
if  (OPND1 > 1)   OLINK[LOADREG] = OPERAND[COMM]; //IFRESULTTHENPROTECTIT


if  (C == 1) goto STRES; 
goto ANYMORE; 
SW_34://->LABMASKSANDLABASOPND2


//OPND1MIDDLEOFD-SIDED


ABORT(); 
SW_35://ASSIGN(=)


SW_36://ASSIGN(<-)


  PT = OPND2;   PP = OPND2; 
if  (PT & 7 == 1 && OPND1 & 7 == 2) FAULT(24, 0); 
if  (PT & 7 == 2 && OPND1 & 7 == 1) FLOAT(OPND1, OPND2); 
LOAD(OPND1, EVALREG, 2); //RHSTOACC


  REGISTER[EVALREG] = 2; 
  C = PT >> 4;   D = OPND1 >> 4; 
if  (C < 5)   C = 5; 
if  (D < 5)   D = 5; 
while  (D < C) { LENGTHEN(OPND1);   D = OPND1 >> 4;  }
while  (C < D && TYPE == 1 && JJ != 36 || C < D - 1) {
SHORTEN(OPND1); 
  D = OPND1 >> 4; 
}
  P = PP; CNAME(1, 0); //STORECALL


  D = DISP;   C = ACCESS;   JJJ = AREA; //SAVEINFOFORSTORE


  KK = PREC; 
LOAD(OPND1, EVALREG, 2); //INCASESTACKED


if  (JJ == 36 && TYPE == 1)  {

if  (3 <= XTRA && XTRA <= 4) { PF1(AND, 0, 0, (-1) >> (8 * (6 - XTRA)));   GRUSE[ACCR] = 0;  }
if  (KK <= 5 && PREC == 6) { PSF1(MPSR, 0, 17);   GRUSE[ACCR] = 0;  }

}

if  (TYPE == 2 && KK < PREC)   KK = STUH;  else   KK = ST; 
if  (EVALREG == BREG)   KK = STB; 
PSORLF1(KK, C, JJJ, D); 
if  (C & 1 == 0 && STNAME > 0 || C == 3 && STNAME >> 16 > 0) NOTEASSMENT(EVALREG, JJ - 33, STNAME); 
if  (C >= 2 && JJJ != 7)  {
//DRWILLBELOADEDSYSTORE


if  (STNAME > 0) {   GRUSE[DR] = 7;   GRINF1[DR] = STNAME & 0xFFFF;  } else   GRUSE[DR] = 0; 

}

if  (KK == STUH)   GRUSE[ACCR] = 0; 
  COMM = 1; goto STRES; 
FINISH:   C = STK[  STPTR - 1]; 
  OPERAND[1] = C; 
  OPND1 = ; 
if  (OPND1 >> 4 & 15 < 5)   OPND1 = OPND1 & 0xF | 0x50; //BITS&BYTES->INTEGERS


if  (CONDFORM == 0)  {
//INCONDSONLYCCMATTERS


//SKIPGETIINGOPNDINRIGHTFORM


//ANDINTHERIGHTREGISTER


  D = MODE >> 4 & 7; if  (D < 5)   D = 5; 
if  (MODE & 7 == 2 && OPND1 & 7 == 1) FLOAT(OPND1, D << 4); 
while  (D < OPND1 >> 4) SHORTEN(OPND1); 
while  (D > OPND1 >> 4) LENGTHEN(OPND1); 
if  (CONSTFORM == 0 || 2 <= OPND1 && OPND1 != 3) LOAD(OPND1, REG, 2); 

}

  EXPOPND = OPND1; //SETRESULTRECORD


    PTYPE = OPND1; 
  TYPE =   PTYPE & 7;   PREC =   PTYPE >> 4; 
if  (TYPE == 2 && MODE & 7 == 1) FAULT(24, 0); 
if  (OPND1 == 9)   REGISTER[OPND1 >> 4] = 0; 
  P = SAVEP; 
return; 
//


void CHOOSE(int *CHOICE) {
/*pending name*/recfm  *OPND1; /*pending name*/recfm  *OPND2;
//(RD)


  OPND1 = ; 
  OPND2 = ; 
  CHOICE = 1; 
if  (JJ == 21 && EVALREG == BREG) return; //NOREVERSESUBTRACTB


if  (OPCODE & 0xFF00FF00 == 0 || OPCODE & 0xFF00FF != 0 && OPND2 == 9 || OPND2 == 2 && GRUSE[EVALREG] == 9 && GRINF1[EVALREG] == OPND2 && OPND2 > 0)   CHOICE = 2; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void LOAD(/*pending name*/recfm  *OPND, int REG, int MODE) {
//***********************************************************************


//*LOADOPERANDOPNDASDIRECTEDBYMODETOREGISTERREG*


//*MODE=0LEAVEINSTOREIFPOSSIBLE*


//*MODE=1LEAVEINSTOREIFSUITABLEFORRXINSTRUCTIONS*


//*MODE=2LOADTOREGISTERREGARDLESS*


//***********************************************************************


int K; int KK;


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
  K = OPND; 
unless  (MODE == 2 || K == 2 || K <= 3 && MODE == 1) return; 
    PTYPE = OPND; 
  TYPE =   PTYPE & 15; 
  PREC =   PTYPE >> 4; 
if  (K < 0 || K > 9) ABORT(); 
goto SW[K]; 
SW_0:LITCONST: //CONSTANT<18BITS


  AREA = 0;   ACCESS = 0; 
if  (PREC <= 5)   DISP = OPND;  else {

  DISP = OPND; 
unless  (DISP >= 0 && OPND == 0 || DISP < 0 && OPND == -1) ABORT(); 

}

if  (MODE == 2)  {
//FETCHTOREG


if  (GRUSE[REG] & 255 == 5 && 5 == PREC && GRINF1[REG] == DISP)  {

if  (REGISTER[REG] != 0) BOOTOUT(REG); 

} else GETINACC(REG, BYTES[PREC] >> 2, ACCESS, AREA, DISP); 
if  (PREC <= 5) {   GRUSE[REG] = 5;   GRINF1[REG] = DISP;  }
goto LDED; 

}

if  (PREC == 3)   OPND = 0x51; //CONSTBYTEINTEGERSAGAIN


  OPND = 7;   OPND = AREA << 4 | ACCESS; 
  OPND = DISP; 
return; 
SW_1://LONGCONSTANT


if  (OPND == 0 && 0 == OPND && PREC <= 6) goto LITCONST; 
SW_3://128BITCONSTANT


if  (PREC == 7)   KK = OPND;  else   KK = ADDR(OPND); 
STORECONST(DISP, BYTES[PREC], KK); 
if  (MODE != 2)  {

  OPND = 7;   OPND = PC << 4; 
  OPND = DISP; return; 

}

if  (GRUSE[REG] & 255 == 6 && GRINF1[REG] == DISP)  {

if  (REGISTER[REG] != 0) BOOTOUT(REG); 

} else GETINACC(REG, BYTES[PREC] >> 2, 0, PC, DISP); 
  GRUSE[REG] = 6;   GRINF1[REG] = DISP; 
goto LDED; 
SW_2://NAME


  P = OPND; 
if  (MODE == 2 || OPND != 0) goto LOAD; //COMPLEXNAMESMUSTBELOADED


CNAME(5, REG); 
if  (NEST >= 0) goto LDED; 
  AREA = -1; 
  AREA = AREACODE(); 
  OPND =   PTYPE; 
  OPND = 7; 
  OPND = AREA << 4 | ACCESS; 
  OPND = DISP; return; 
LOAD: CNAME(2, REG); 
LDED:   REGISTER[REG] = 1; //CLAIMTHEREGISTER


  OLINK[REG] = ADDR(OPND); 
if  (PREC < 5)   OPND = OPND & 15 | 0x50; 
  OPND = 9;   OPND = 0;   OPND = REG << 4; 
if  (REG == BREG && REGISTER[ACCR] & 1 != 0)   REGISTER[BREG] = 2; 
return; 
SW_4://CONDITIONALEXPRESSION


SW_5://UNASSIGNED


SW_6://UNASSIGNED


ABORT(); 
SW_7://I-RINASTACKFRAME


  AREA = OPND >> 4; 
  ACCESS = OPND & 15; 
  DISP = OPND; 
PICKUP: GETINACC(REG, BYTES[PREC] >> 2, ACCESS, AREA, DISP); 
goto LDED; 
SW_8://I-RTHATHASBEENSTACKED


  AREA = TOS;   ACCESS = 0;   DISP = 0; goto PICKUP; 
SW_9://I-RINAREGISTER


if  (OPND >> 4 == REG) goto LDED; 
if  (REG != ACCR)  {

unless  (REGISTER[BREG] == 0) BOOTOUT(BREG); 
PF1(ST, 0, BREG, 0); 

} else GETINACC(ACCR, 1, 0, BREG, 0); 
  REGISTER[OPND >> 4] = 0; 
  OPND = REG << 4;   GRUSE[REG] = 0; 
  REGISTER[REG] = 1;   OLINK[REG] = ADDR(OPND); 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void PUT(void) {
//***********************************************************************


//*THISROUTINEPLANTSCODETOPERFORMTHEBASIC*


//*OPERATIONDEFINEDBYOPND1,OPND2&OPCODE*


//***********************************************************************


int CODE; int OCODE;

  CODE = OPCODE; 
if  (COMM == 1)   CODE = CODE >> 8; 
  CODE = CODE & 255;   OCODE = CODE; 
if  (EVALREG == BREG)   CODE = CODE - 0xC0; 
unless  (OPND1 == 9) ABORT(); 
PSORLF1(CODE, OPND2 & 15, OPND2 >> 4, OPND2); 
if  (OCODE == IAD && GRUSE[EVALREG] == 9 && OPND2 == 0 && OPND2 < 4095 && GRINF1[EVALREG] >> 16 == 0)  {

  GRUSE[EVALREG] = 10; 
  GRINF1[EVALREG] = GRINF1[EVALREG] & 0xFFFF | OPND2 << 16; 

} else {

unless  (31 <= JJ && JJ <= 32)   GRUSE[EVALREG] = 0; 

}

  OLINK[EVALREG] = OPERAND[COMM]; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void FLOAT(/*pending name*/recfm  *OPND, int OTHERPTYPE) {
//***********************************************************************


//*PLANTCODETOCONERTOPERANDFROMFIXEDTOFLOATING*


//***********************************************************************



if  (OPND <= 1)  {

  CVALUE = OPND; 
  OPND = INTEGER(ADDR(CVALUE)
); 
  OPND = INTEGER(ADDR(CVALUE)
 + 4); 
  OPND = 1; 

} else {

LOAD(OPND, ACCR, 2); 
if  (OTHERPTYPE & 0xF0 == 0x70 && OPND & 0xF0 <= 0x50) { PSF1(IMYD, 0, 1);   OPND = OPND & 15 | 0x60;  }
PSF1(FLT, 0, 0); 
  GRUSE[ACCR] = 0; 

}

  OPND = OPND + 0x11; 
  TYPE = 2; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void COERCET(/*pending name*/recfm  *OPND1, /*pending name*/recfm  *OPND2, int MODE) {
//***********************************************************************


//*MODE=1BOTHOPERANDSINTEGERELSEERROR*


//*MODE=2FORCEBOTHOPERANDTOBEOFTYPEREAL*


//*MODE=15BOTHOPERANDSTOBEOFLAGESTTYPE*


//***********************************************************************




int PT1; int PT2;

  PT1 = OPND1 & 7; 
  PT2 = OPND2 & 7; 
if  (MODE == 1 || MODE == 15 && PT1 == 1 && 1 == PT2) return; 
if  (MODE == 1) { FAULT(24, 0); return;  }
if  (PT1 == 1) FLOAT(OPND1, OPND2); 
if  (PT2 == 1) FLOAT(OPND2, OPND1); 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void COERCEP(/*pending name*/recfm  *OPND1, /*pending name*/recfm  *OPND2) {
//***********************************************************************


//*FORCEBOTHOPERANDTOTHESAMEPRECISIONBEFOREOPRNTN*


//***********************************************************************




int PREC1; int PREC2;

  PREC1 = OPND1 >> 4; 
  PREC2 = OPND2 >> 4; 
while  (PREC1 < PREC2) {
LENGTHEN(OPND1); 
  PREC1 = OPND1 >> 4; 
}
//


while  (PREC2 < PREC1) {
LENGTHEN(OPND2); 
  PREC2 = OPND2 >> 4; 
}

} /* End of Begin/Rt/Fn/Map depth=4 */;

void LENGTHEN(/*pending name*/recfm  *OPND) {
//***********************************************************************


//*INCREASEOPNDPRECISIONBYONESIZEATCOMPILETIMEIFPOSS*


//***********************************************************************



int TP; int PR;

  TP = OPND & 7; 
  PR = OPND >> 4; 
if  (OPND <= 1 && PR <= 4 + TP)  {
//LENGTHENCONSTANT


if  (TP == 1 && OPND <= 1)  {
//INTEGERCONSTANT


  OPND = OPND; 
if  (OPND < 0)   OPND = -1;  else   OPND = 0; 

} else {

if  (PR == 6)  {

TOAR8(R, LONGREAL(ADDR(OPND)
)
); 
TOAR8(R + 8, 0); 
  OPND = ADDR(A); 
  OPND = 3; 
  R = R + 16; 

} else   OPND = 0; 

}


} else {
//CODEPLANTINGREQRD


LOAD(OPND, ACCR, 2); 
if  (TP == 1) PSF1(IMYD, 0, 1);  else PF1(RMYD, 0, PC, SPECIALCONSTS(1)
); //REALONE=X'41000000'


  GRUSE[ACCR] = 0; 

}

  OPND = ((PR + 1) << 4) + TP; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void SHORTEN(/*pending name*/recfm  *OPND) {
//***********************************************************************


//*PLANTCODETOREDUCEACCSIZE*


//***********************************************************************



int TY; int PR; int F; int I; int J;

  TY = OPND & 7; 
  PR = OPND >> 4; 
  F = OPND; 
if  (F == 3)  {
//LONGLONGREALCONSTS


for (I = 0; I != 3; I += 1) {
  BYTEINTEGER(ADDR(J)
 + I)
 = BYTEINTEGER(OPND + 4 + I); 
}
  OPND = J; 
  OPND = 1; //CONSTNOWIN_D&_XTRA


goto WAYOUT; 

}

if  (F <= 1)  {

if  (TY == 2) goto WAYOUT; 
if  (OPND == 0 && OPND >= 0 || OPND == -1 && OPND < 0) {   OPND = OPND; goto WAYOUT;  }

}

LOAD(OPND, ACCR, 2); 
if  (PR == 7)  {
//SHORTENQUAD


PF1(RDDV, 0, PC, SPECIALCONSTS(1)
); 

} else {

if  (TYPE == 1 && 1 == PARMARR) PSF1(  ISH, 0, 32); 
if  (PARMARR == 1 || TYPE != 1) PSF1(USH, 0, -32); 
if  (REGISTER[BREG] == 0) { PF1(STUH, 0, BREG, 0);   GRUSE[BREG] = 0;  } else PSF1(MPSR, 0, 17); //ACSTO1WORD



}

  GRUSE[ACCR] = 0; 
WAYOUT: 
  OPND = ((PR - 1) << 4) + TY; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void EXTRACT(/*pending name*/recfm  *OPND, long int *VAL, long double *RVAL) {
//***********************************************************************


//*EXTRACTSACONTANTOPERANDRETURNINGREAL&INTVALUES*


//***********************************************************************



int TYPE; int PREC; int S; int I; int AD;

  TYPE = OPND;   PREC = TYPE >> 4; 
  TYPE = TYPE & 15; 
if  (TYPE == 1)  {

if  (PREC <= 5)   VAL = OPND;  else {

  INTEGER(ADDR(VAL)
)
 = OPND; 
  INTEGER(ADDR(VAL)
 + 4)
 = OPND; 

}

  RVAL = VAL; 

} else {

  RVAL = 0; 
if  (PREC == 7) {   S = 15;   AD = OPND;  } else {   S = 7;   AD = ADDR(OPND);  }
for (I = 0; I != S; I += 1) {
  BYTEINTEGER(ADDR(RVAL)
 + I)
 = BYTEINTEGER(AD + I); 
}

}


} /* End of Begin/Rt/Fn/Map depth=4 */;


void VMY1(void) {
//***********************************************************************


//*DOESVECTORMULTIPLIESFORONEDIMENSIONARRAYS*


//***********************************************************************


int OPNAME; int VUSE; int DVPOS; int DVNAME; int X; int Y; int DTYPE; int DPREC; int DACC; int DPTYPE;

  DPTYPE = XTRA >> 16; 
  DVNAME = XTRA & 0xFFFF; 
  DVPOS = OPND2 & 0xFFFF; 
if  (DVPOS > 0 && OPND1 <= 1)  {
//CONSTITEM&DVFOLDIT


  X = OPND1; 
  X = X - CTABLE; 
  X = X * CTABLE; 
if  (X < 0 || X >= CTABLE) FAULT2(50, X, DVNAME); 
//


//IFARRAYBASEHASBEENSHIFTEDTOZEROELEMENTPUTBACKTHELBCORRN


//NOWTHEBOUNDCHECKHASBEENCOMPUTED


//


if  (PARMARR == 0 && 0 == PARMCHK && DPTYPE & 0xC0F <= 3)   X = X + CTABLE * CTABLE; 
  OPND1 = X; 
return; 

}

  OPNAME = -1; 
if  (OPND1 == 2)   OPNAME = OPND1; 
  VUSE = DVNAME | OPNAME << 16; 
if  (OPNAME >= 0 && GRUSE[BREG] == 14 && GRINF1[BREG] == VUSE) goto DONE; 
if  (PARMARR == 0 && 0 == PARMCHK && DVPOS > 0)  {

LOAD(OPND1, BREG, 2); 
  X = CTABLE; 
if  (X != 1) { PSF1(  MYB, 0, X);   GRUSE[BREG] = 0;  }
  Y = X * CTABLE; 
if  (DPTYPE & 0xC0F <= 3)  {

if  (X != 1) goto DONE; 
goto OUT; 

}

//TESTNAM=0WHENZEROADJSTD


if  (Y != 0) { PSF1(SBB, 0, Y);   GRUSE[BREG] = 0;  }
goto DONE; 

}

if  (PARMARR == 0 && 0 == PARMCHK && DPTYPE & 0x300 == 0x200 || DPTYPE & 0xC0F <= 3 ||   COMPILER != 0)  {
//IEARR=2ORNAM=0


  DTYPE = DPTYPE & 15;   DPREC = DPTYPE >> 4 & 7; 
unless  (OPND1 <= 1) LOAD(OPND1, BREG, 2); 
if  (DTYPE >= 3 || DPREC == 4)  {

  DACC = LIST; //PUTTHEREBYCANAME


if  (OPND1 <= 1) {   OPND1 = OPND1 * DACC; return;  }
unless  (DACC == 1) PSF1(  MYB, 0, DACC); 
  GRUSE[BREG] = 0; 
goto DONE; 

}

if  (OPND1 <= 1) return; 
  LOADREG = BREG; goto OUT; 

}

if  (OPND1 == 9 && OPND1 >> 4 == ACCR)  {

PF1(ST, 0, TOS, 0); //ACCCANNOTBEUSEDINDVM


CHANGERD(ACCR); 
  REGISTER[ACCR] = 0; 

}

//


    BASE = OPND2 >> 18;   AREA = -1; 
GETINACC(DR, 2, 0, AREACODE()
, (OPND2 & 0x1FFFF) + 8); 
//


LOAD(OPND1, EVALREG, 0); 
if  (OPND1 >> 4 >= 6) FAULT(24, 0); 
if  (REGISTER[BREG] >= 1 && OPND1 != 9 || OPND1 >> 4 != BREG)  {

  OPND = ; 
  OPND = 0; 
  REGISTER[BREG] = 2; 
BOOTOUT(BREG); 

}

  AREA = OPND1 >> 4;   ACCESS = OPND1 & 15; 
PSORLF1(OPCODE >> 8, ACCESS, AREA, OPND1); 
  GRUSE[BREG] = 0; 
DONE: 
if  (OPNAME >= 0)  {

  GRUSE[BREG] = 14; 
  GRINF1[BREG] = VUSE; 
  GRINF2[BREG] = 0; 

}

OUT: 
  LOADREG = BREG; 
  REGISTER[LOADREG] = 1; 
  OPND1 = 9;   OPND1 = LOADREG << 4; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void VMY(void) {
//***********************************************************************


//*DOESALLVECTORMULTIPLIESEXCEPTONEDIMENSION*


//***********************************************************************


if  (OPND1 == 9 && OPND1 >> 4 == ACCR)  {

PF1(ST, 0, TOS, 0); //ACCCANNOTBEUSEDINDVM


CHANGERD(ACCR); 
  REGISTER[ACCR] = 0; 

}

//


if  (C == D)  {
//TOPDIMENSIONLOADDVDES


    BASE = OPND2 >> 18;   AREA = -1; 
GETINACC(DR, 2, 0, AREACODE()
, (OPND2 & 0x1FFFF) + 8); 

}

//


LOAD(OPND1, EVALREG, 0); 
if  (OPND1 >> 4 >= 6) FAULT(24, 0); 
if  (C == D && REGISTER[BREG] >= 1 && OPND1 != 9 || OPND1 >> 4 != BREG)  {

  OPND = ; 
  OPND = 0; 
  REGISTER[BREG] = 2; 
BOOTOUT(BREG); 

}

  AREA = OPND1 >> 4;   ACCESS = OPND1 & 15; 
PSORLF1(OPCODE >> 8, ACCESS, AREA, OPND1); 
  GRUSE[BREG] = 0; 
//


  LOADREG = ACCR; 
if  (C == D) GETINACC(ACCR, 1, 0, 7, 0);  else PF1(IAD, 0, BREG, 0); 
if  (C == 1)  {

PF1(ST, 0, BREG, 0); 
  REGISTER[ACCR] = 0; 
  LOADREG = BREG; 

}

  REGISTER[LOADREG] = 1; 
  OPND1 = 9;   OPND1 = LOADREG << 4; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void CTOP(int *FLAG) {
//***********************************************************************


//*ANOPERATIONHASBEENFOUNDWHEREBOTHOPERANDSARECONSTANTS*


//*THISROUTINEATTEMPTSTOINTERPRETTHISOPERATIONIFIT*


//*CANBEDONESAFELY*


//*ONEXITFLAG=0ifOPERATIONCARRIEDOUT*


//***********************************************************************


const int TRUNCMASK = 0x01300800;

int K; int TYPEP; int PRECP; int OP; int TYPEPP; int VAL; int SVAL1; int SVAL2;

long int VAL1; long int VAL2;

long double RVAL1; long double RVAL2;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
Compile(0,7776) called from imp80-switch.h, line 2722
if (_imp_onevent(1, 2)) {
return; 

}

  TYPEP = TYPE;   PRECP =   PTYPE >> 4 & 15;   OP = FLAG; 
EXTRACT(OPND1, VAL1, RVAL1); 
EXTRACT(OPND2, VAL2, RVAL2); 
  SVAL1 = VAL1;   SVAL2 = VAL2; 
if  (TYPEP == 1 && OP == 37) goto ISW37; 
if  (OP > 32) return; 
if  (TYPEP == 2) goto RSW[OP];  else goto ISW[OP]; 
ISW_10://\


  VAL1 = ~VAL1; 
INTEND: 
if  (PRECP == 6)  {

  OPND1 = VAL1 >> 32; 
  OPND1 = VAL1; 
  FLAG = 0; 

} else {

  VAL = VAL1; 
if  (VAL == VAL1 || 1 << OP & TRUNCMASK == 0) {   FLAG = 0;   OPND1 = VAL;  }//NOARITHOFLOWCONDITION



}

if  (FLAG == 0)  {

  OPND1 = PRECP << 4 | 1; 
if  (0xFFFE0000 <= VAL1 && VAL1 <= 0x1FFFF)   OPND1 = 0;  else   OPND1 = 1; 

}

return; 
ISW_11://INTEGERNEGATE


  VAL1 = -VAL1; goto INTEND; 
ISW_13://INTEGERABS


  VAL1 = IMOD(VAL1); goto INTEND; 
ISW_12://INTEGERFLOAT


  RVAL1 = VAL1;   PRECP = 5 + XTRA; 
goto REALEND; 
RSW_14://STRETCHREAL


  PRECP = PRECP + 1; 
REALEND:   OPND1 = 1; 
  OPND1 = INTEGER(ADDR(RVAL1)
); 
  OPND1 = INTEGER(ADDR(RVAL1)
 + 4); 
if  (PRECP == 7)  {

  OPND1 = 3; 
  OPND1 = ADDR(A); 
for (K = 0; K != 15; K += 1) {
  A = BYTEINTEGER(ADDR(RVAL1)
 + K); 
  R = R + 1; 
}

}

  FLAG = 0;   OPND1 = 16 * PRECP + 2; 
return; 
ISW_14://STRETCHINTEGER


RSW_12://FLOATREAL


ABORT(); 
ISW_20://ADD


  VAL1 = VAL1 + VAL2; goto INTEND; 
ISW_21://MINUS


  VAL1 = VAL1 - VAL2; goto INTEND; 
ISW_22://EXCLUSIVEOR


  VAL1 = VAL1 ^ VAL2; goto INTEND; 
ISW_23://OR


  VAL1 = VAL1 | VAL2; goto INTEND; 
ISW_24://MULT


  VAL1 = VAL1 * VAL2; goto INTEND; 
ISW_26:return; ///DIVISION


ISW_25:if  (VAL2 == 0) return; ////DIVISION


  VAL1 = VAL1 / VAL2; goto INTEND; 
ISW_27://AND


  VAL1 = VAL1 & VAL2; goto INTEND; 
ISW_29://SLL


if  (PRECP == 6)   VAL1 = VAL1 << SVAL2;  else   VAL1 = SVAL1 << SVAL2; 
goto INTEND; 
ISW_28://SRL


if  (PRECP == 6)   VAL1 = VAL1 >> SVAL2;  else   VAL1 = SVAL1 >> SVAL2; 
goto INTEND; 

ISW_31:ISW_32://COMPARISONS


RSW_31:RSW_32://REALCOMPARISONS


  BFFLAG = COMM - 1; 
  MASK = FCOMP[XTRA + 7 * BFFLAG]; 
  COMM = 2;   FLAG = 0; 
if  (TYPE == 2) goto RCOMP; 
if  (MASK & 8 != 0 && VAL1 == VAL2 || MASK & 4 != 0 && VAL1 < VAL2 || MASK & 2 != 0 && VAL1 > VAL2)   MASK = 15;  else   MASK = 0; 
return; 
RCOMP: 
if  (MASK & 8 != 0 && RVAL1 == RVAL2 || MASK & 4 != 0 && RVAL1 < RVAL2 || MASK & 2 != 0 && RVAL1 > RVAL2)   MASK = 15;  else   MASK = 0; 
return; 
RSW_11://NEGATE


  RVAL1 = -RVAL1; goto REALEND; 
RSW_13://ABS


  RVAL1 = MOD(RVAL1); goto REALEND; 
RSW_20://ADD


  RVAL1 = RVAL1 + RVAL2; goto REALEND; 
RSW_21://SUBTRACT


  RVAL1 = RVAL1 - RVAL2; goto REALEND; 
RSW_24://MULT


  RVAL1 = RVAL1 * RVAL2; goto REALEND; 
RSW_26://DIVISION


if  (RVAL2 == 0) return; //AVOIDDIVBYZERO


  RVAL1 = RVAL1 / RVAL2; goto REALEND; 
ISW_30://'**'WITH2INTEGEROPERANDS


ISW37: //'****'WITH2INTEGEROPERAND


unless  (0 <= VAL2 && VAL2 <= 63) return; 
  VAL2 = 1; 
while  (SVAL2 > 0) {
  VAL2 = VAL2 * VAL1; 
  SVAL2 = SVAL2 - 1; 
if  (VAL2 != INTEGER(ADDR(VAL2)
 + 4)
) return; 
}
  VAL1 = VAL2; goto INTEND; 
RSW_22:RSW_23:
RSW_25:RSW_27:RSW_28:RSW_29:

} /* End of Begin/Rt/Fn/Map depth=4 */;

void REXP(void) {
//***********************************************************************


//*CALLSAPERMROUTINETOPERFORMREAL**REAL*


//***********************************************************************


int I; int PR;

/*pending name*/recfm  *OPND;
//(RD)


if  (REGISTER[BREG] > 0) BOOTOUT(BREG); 
for (I = 1; I != 2; I += 1) {
  OPND = ; 
unless  (I == 1 && OPND == 8) LOAD(OPND, ACCR, 2); 
  PR = OPND >> 4; 
if  (PR < 6) LENGTHEN(OPND); 
if  (PR > 6) SHORTEN(OPND); 
}
PPJ(0, 17); 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void STARSTAR(void) {
//***********************************************************************


//*PLANTIN-LINECODEFOREXPONENTIATION*


//*IMPALLOWSEXPONENTSININTEGEREXPRESSIONSFROM0-63AND*


//*INREALEXPRESSIONSFROM-255TO+255*


//***********************************************************************


int TYPEP; int PRECP; int WORK; int C; int EXPWORK; int VALUE;

    PTYPE = OPND1; //INSPECTTHEOPERAND


UNPACK(); 
  TYPEP = TYPE;   PRECP = PREC; 
if  (TYPEP == 2)   OPCODE = 0xFA;  else   OPCODE = 0xEA; 
  VALUE = 0; 
if  (OPND2 == 0 && 1 <= OPND2 && OPND2 <= 63 * TYPE)   VALUE = OPND2; //EXPONENTIS#0ANDCONSTANT


LOAD(OPND1, ACCR, 2); //FETCHOPERANDTOACC


if  (TYPEP == 2 && PRECP == 5) { LENGTHEN(OPND1);   PRECP = 6;  }
//


//OPTIMISE**2**3AND**4


//


if  (2 <= VALUE && VALUE <= 4)  {

PF1(ST, 0, TOS, 0); 
if  (VALUE == 3) PF1(ST, 0, TOS, 0); 
PF1(OPCODE, 0, TOS, 0); 
if  (VALUE == 4) PF1(ST, 0, TOS, 0); 
if  (VALUE > 2) PF1(OPCODE, 0, TOS, 0); 
  GRUSE[ACCR] = 0; 
return; 

}

//


//OTHERWISESTOREOPERANDIN'WORK'ANDGETHOLDOFEXPONENT


//


GETWSP(WORK, BYTES[PRECP] >> 2); 
if  (TYPEP == 2) GETWSP(EXPWORK, 1); 
PSF1(ST, 1, WORK); 
  REGISTER[ACCR] = 0; 
  PLABEL = PLABEL - 1; //LABELFORJUMPINGOUT


if  (OPND2 >> 4 == 6) SHORTEN(OPND2); //LONGEXPONENT


LOAD(OPND2, BREG, 2); //EXPONENTTOANYREGISTER


if  (TYPEP == 2) PSF1(STB, 1, EXPWORK); 
//


//GET'1'INTOACCINAPPROPIATEFORM


//


GETINACC(ACCR, BYTES[PRECP + 1 - TYPEP] >> 2, 0, 0, 1); 
if  (TYPEP == 2) PSF1(FLT, 0, 0); 
//


//IFEXPONENTNOTKNOWNATCOMPILETIMETOBE+VECONSTANTMUST


//ALLOWFORZERO:-XX**0=1FORALLXX


//ALSOALLOWFORX**(-N)WHICHIS1/(X**N)FORALLX&N


//


if  (VALUE == 0)  {
//NOT+VECONSTANT


ENTERJUMP(28, PLABEL, 0b11); //J(B=0)ENDOFEXPROUTINE


if  (TYPEP == 2)  {

PF3(  JAT, 13, 0, 4); //J*+4IFB>0


PSF1(SLB, 0, 0); 
PF1(SBB, 0, TOS, 0); 

}

//


//INCHECKINGMODEPLANTCODETOCHECKRANGEOFEXPONENT


//


if  (PARMOPT == 1)  {

if  (TYPEP == 1) PPJ(30, 7); //JUMPB<0


PSF1(CPB, 0, 64 * TYPEP * TYPEP - 1); 
PPJ(2, 7); 

}


}

  C = CA; 
PSF1(OPCODE, 1, WORK); 
PSF1(DEBJ, 0, (C - CA) / 2); 
//


//FORREALEXPONENTSCHECKIFNEGATIVEANDEVALUATEINVERSE


//


if  (VALUE == 0 && TYPEP == 2)  {

PSF1(LB, 1, EXPWORK); //LBONORIGINALEXPONENT


ENTERJUMP(46, PLABEL, 0b11); //BPENDOFEXPROUTINE


if  (PRECP < 7) PF1(RRDV, 0, PC, SPECIALCONSTS(1)
);  else {

PSF1(SLSD, 0, 1); PSF1(FLT, 0, 0); 
PF1(RDV, 0, TOS, 0); 

}


}

//


//ALLOVER.REALRESULTSAREINFRWORK.INTRESULTSINGRWORK+1


//FREEANDFORGETANYOTHERREGISTERS


//


  TYPE = TYPEP;   PREC = PRECP; 
  REGISTER[BREG] = 0; 
  GRUSE[ACCR] = 0; 
  GRUSE[BREG] = 0; 
  REGISTER[ACCR] = 1; 
  OPND1 = 16 * PREC + TYPE; 
  OPND1 = 0;   OPND1 = ACCR; 
  C = ENTERLAB(PLABEL, 0b11); //LABELATENDOFEXPROUTINE



} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINEEXPOP


void REDUCEENV(int *HEAD) {
//***********************************************************************


//*HEADHASANENVIRONMENT-THISROUTINEREMOVESANYTHING*


//*INCOMPATIBLEWITHTHECURRENTREGISTERSTATE*


//***********************************************************************


int NEWHEAD; int I; int J; int K; int REG; int USE;

  NEWHEAD = 0; 
while  (HEAD != 0) {
POP(HEAD, I, J, K); 
  REG = K >> 8;   USE = K & 255; 
if  (USE == GRUSE[REG] & 255 && I == GRINF1[REG]) PUSH(NEWHEAD, I, J, K); 
}
  HEAD = NEWHEAD; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int CCOND(int CTO, int IU, int FARLAB) {
//***********************************************************************


//*COMPILES<IU><SC><RESTOFCOND>then<UI1>else<UI2>*


//*CTO=0JUMPTOFARLABMUSTBEPLANTEDIFCONDUNCONDITIONAL*


//*CTO#0JUMPMAYBEOMITTED*


//*IU=1FORif=2FORUNLESS.FARLABTOGOONUI2*


//*THEROUTINEMAKESFOURPASSESTHROUGHTHECONDITION*


//*PASS1ANALYSESTHESTRUCTUREANDDECIDESTOBRANCHONTRUE*


//*(TF=2)ORONFALSE(TF=1)FOREACHCOMPARISON*


//*PASS2WORKSOUTWHERETHEBRANCHESOFPASS1SHOULDGOTO*


//*PASS3ASSIGNSLABELNUMBERS*


//*PASS4EVALUATESCOMPARISIONSANDPLANTSTHECODE*


//**


//*ONENTRYPPOINTSTO<SC>IN<HOLE><SC><RESTOFCOND>*


//*RESULT=0CONDITIONCOMPILED*


//*RESULT=1UNCONDITIONALLYTO1STALTERNATIVE*


//*RESULT=2UNCONDITIONALLYTO2NDALTERNATIVE(FARLAB)*


//***********************************************************************


auto void WRITECONDLIST(void);
auto void SKIPSC(int REVERSED);
auto void SKIPCOND(int REVERSED);
auto int CCOMP(void);
auto void Jump(int MASK, int LAB, int FLAGS);
auto void LABUNUSED(int LAB);
auto void OMITTO(int LAB);
//


//FCOMPHASBCMASKSFOREACHSTRINGCOMPARATOR.


//THEFIRST7ARETOBRANCHIFTRUEWITHNORMALCOMPARISON


//THESECONDSEVENARETOBRANCHIFTRUEWITHBACKWARDSCOMPARISON


//


const char FCOMP[(21)-(1)+1]
;
$define FCOMP[N0] FCOMP[(N0)-(1)]
 = 
8, 
13, 
5, 
7, 
10, 
2, 
7, 
8, 
10, 
2, 
7, 
13, 
5, 
7, 
27, 
0, 
0, 
43, 
0, 
0, 
43;

//


int PIN; int PP; int II; int L; int CPTR; int CMAX; int LL; int BITMASK; int LA;

/*pending name*/recfm  CLIST[(30)-(1)+1]
;
$define CLIST[N0] CLIST[(N0)-(1)]
//(CF)


/*pending name*/recfm  *C1; /*pending name*/recfm  *C2;
//(CF)


//


//PASS1.ANALYSESTHECONDITION


//


  PIN = P; //SAVEINITIALARPOINTER


  CPTR = 1;   L = 3; //LEVEL=3TOALLOW2LOWER


  C1 = CLIST[CPTR]; //SETUPRECORDFORFIRSTCMPARSN


  C1 = 0; 
SKIPSC(0); //SKIPTHE1STCMPARSN


SKIPCOND(0); //ANDANYand/orCLAUSES


  C1 = 2; //LEVEL=-1FORif/thenENTRY


  C1 = IU; 
  CMAX = CPTR + 1; 
  C1 = CLIST[CMAX];   C1 = 0; 
  C1 = 1; //LEVEL=-2FORELSEENTRY


  C1 = 3 - IU; //C1_REVNEVERSETHERE(PDSHOPES)


  C1 = FARLAB; 
  PP = P; //SAVEFINALARPOINTER


if  (CMAX > 29) FAULT(209, 0); //TOOCOMPLICATED


//


//PASS2WORKSOUTWHERETOJUMPTO


//THEJUMPISFORWARDTOTHESTARTOFTHECLAUSEWITHADIFFERENT


//CONNECTOR(AND/OR)PROVIDEDTHISISATALOWERLEVELTHANTHEBRANCH


//ANDALSOATALOWERLEVELTHANTHELOWESTPOINTREACHEDENROUTE


//


//ALSOCONTAINSPASS3(TRIVIAL)


//ASSIGNLABELSWHERELABUSHOWSTHEYAREREQUIRED


//


for (CPTR = 1; CPTR != CMAX - 1; CPTR += 1) {
  C1 = CLIST[CPTR]; 
  L = C1;   LL = L; //LLFORLOWESTLEVELENROUTE


for (II = CPTR + 1; II != CMAX + 1; II += 1) {
  C2 = CLIST[II]; 
if  (C1 != C2 && C2 < LL) break; 
if  (C2 < LL)   LL = C2; 
}
  C1 = II; //CLAUSETOJUMPTO


  C2 = C2 + 1; 
if  (C1 != 0 || C1 == 8)  {
//D-SIDEDORRESLN


//REQIUIRESALABELONTHE


  C1 = C1 + 1; //THENEXTSIMPLECONDITION



}

if  (C1 != 0 && C1 <= 0) {   PLABEL = PLABEL - 1;   C1 = PLABEL;  }
}
//


//PASS4GENERATETHECODE


//MAINTAINBITMASKTOHELP.2**0JUMPTOFARLABPLANTED


//2**1JUMPTOINTERMEDIATELABPLANTED


//


if  (DCOMP == 1) WRITECONDLIST(); 
  BITMASK = 0; 
  CPTR = 1; 
do {
  C1 = CLIST[CPTR]; 
  LA = CCOMP(); 
if  (LA != 0)  {

OMITTO(LA); 
if  (CPTR >= CMAX)  {

if  (CTO == 0) ENTERJump(15, LA, 0b11); 
return 2; 

}

  C1 = CLIST[CPTR]; 

}

if  (C1 > 0)   II = ENTERLAB(C1, 0b11); 
  CPTR = CPTR + 1; 
if  (CPTR >= CMAX) break; 
} while (1);
//


  P = PP; 
if  (BITMASK & 1 == 0) return 1; 
return 0; 
void LABUNUSED(int LAB) {
//***********************************************************************


//*ALABELISNOTJUMPEDTOASCONDITIONALWAYSFALSE*


//*REMOVEITFROMLIST*


//***********************************************************************


int I;

/*pending name*/recfm  *C1;
//(CF)


for (I = CPTR; I != CMAX - 1; I += 1) {
  C1 = CLIST[I]; 
if  (C1 == LAB)  {

  C1 = C1 - 1; //COUNTDOWNUSECOUNT


if  (C1 == 0)   C1 = 0; 
return; 

}

}

} /* End of Begin/Rt/Fn/Map depth=4 */;

void OMITTO(int LAB) {
//***********************************************************************


//*AJUMPTURNSOUTTOBEUNCONDITIONAL.OMITCODEFORSKIPPEDBIT*


//***********************************************************************


/*pending name*/recfm  *C1;
//(CF)


do {
  C1 = CLIST[CPTR]; 
if  (C1 > 0)  {

if  (C1 == LAB) return; 
Jump(15, LAB, 0b11); 
return; 

}

  CPTR = CPTR + 1; 
if  (CPTR >= CMAX) break; 
} while (1);

} /* End of Begin/Rt/Fn/Map depth=4 */;

void SKIPSC(int REVERSED) {
//***********************************************************************


//*REVERSED=1FORRECURSIVECALLINnot(SC)*


//*SKIPSOVERASIMPLECONDITION.PONALTOF<SC>*


//***********************************************************************


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
int ALT;

  ALT = A;   P = P + 1; 
goto SCALT[ALT]; 
SCALT_1://<EXP><COMP><EXP><SECONDSIDE>


  C1 = P - PIN; 
SKIPEXP(); 
  C1 = A; 
  C1 = 3 * REVERSED; 
  P = P + 1;   C1 = P - PIN; 
SKIPEXP(); 
if  (A == 2)   P = P + 1;  else {

  C1 = A; //DEALWITH2NDHALFOFD-SIDED


  P = P + 2; SKIPEXP(); 

}

return; 
SCALT_2://'('<SC><RESTOFCOND>')'


  L = L + 1; 
SKIPSC(REVERSED); 
SKIPCOND(REVERSED); 
  L = L - 1; 
return; 
SCALT_3://not(SC)


SKIPSC(REVERSED ^ 1); 

} /* End of Begin/Rt/Fn/Map depth=4 */;
//OFROUTINESKIPSC


void SKIPCOND(int REVERSED) {
//***********************************************************************


//*SKIPSOVER<RESTOFCOND>*


//***********************************************************************


int ALT; int ALTP;

  ALT = A; //1=and<ANDC>,2=or<ORC>,3=NULL


  P = P + 1; 
if  (ALT != 3)  {
//NULLALTERNATIVENOTHINGTODO


do {
//UNTILNOMORE<SC>S


  C1 = L;   C1 = ALT; 
  C1 = C1 ^ (3 * REVERSED); 
  CPTR = CPTR + 1; 
  C1 = CLIST[CPTR];   C1 = 0; 
SKIPSC(REVERSED); 
  ALTP = A;   P = P + 1; 
} while (! (ALTP == 2) );

}


} /* End of Begin/Rt/Fn/Map depth=4 */;

void WRITECONDLIST(void) {
const _imp_string CM[(10)-(0)+1]
;
$define CM[N0] CM[(N0)-(0)]
 = 
"     ", 
"    =", 
"   >=", 
"    >", 
"    #", 
"   <=", 
"    <", 
"   \=", 
"   ->", 
"   ==", 
"  \==";

PRINTSTRING("\n NO   TF   C1   C2   LABU   LVL  JMP  REV   LABNO\n"); 
for (CPTR = 1; CPTR != CMAX; CPTR += 1) {
  C1 = CLIST[CPTR]; 
WRITE(CPTR, 2); 
WRITE(C1, 4); 
PRINTSTRING(CM[C1]); 
PRINTSTRING(CM[C1]); 
WRITE(C1, 6); 
WRITE(C1, 5); 
WRITE(C1, 4); 
WRITE(C1, 4); 
WRITE(C1, 7); 
NEWLINE(); 
}

} /* End of Begin/Rt/Fn/Map depth=4 */;

int CCOMP(void) {
//***********************************************************************


//*COMPILESACOMPARISION:THREEDIFFERENTCASES*


//*1)ARITHMETICEXPRESSIONSEXPOPISUSED*


//*2)STRINGEXPRESSIONAD-HOCCODEPLANTEDBYTHISROUTINE*


//*3)RESOLUTIONS-CRESCANBEUSED*


//*4)EQUIVALENCESINTEGERCOMPARISONSONADDRESSES*


//*RESULT=0CODECOMPILED*


//*RESULT#0UNCODITIONALJUMPTOLAB=RESULT*


//***********************************************************************


auto void ACOMP(int TF, int DS);
auto void ADCOMP(int TF);
auto void SCOMP(int DS, int TF, int LAB, int *WA);
int HEAD1; int HEAD2; int NOPS; int TE1; int TE2; int TEX1; int TEX2; int P1; int P2; int FEXIT; int IEXIT; int   CMP; int WA1; int WA2; int WA3; int BOT1; int BOT2;

//


  HEAD1 = 0;   HEAD2 = 0;   NOPS = 0; 
  BOT1 = 0;   BOT2 = 0; 
  FEXIT = CLIST[C1]; //FINALEXIT


  IEXIT = FEXIT; //INTERMEDIATEEXIT(D-SIDEDETC)


if  (C1 ^ C1 == 2 && C1 == 8 || C1 != 0)   IEXIT = C1; 
//


  P = PIN + C1; 
  P2 = P;   P1 = PIN + C1; 
if  (C1 == 8)  {

//CONDITIONALRESOLUTION


//NBCRESBRANCHESONFALSE!!


  P = P1; 
if  (A == 4 && A == 1)  {

  P = P + 5; CNAME(2, DR); //LHSTRINGTODR


if  (A == 2)  {

if  (TYPE != 5) { FAULT2(71, 0, FROMAR2(P1 + 5)
); return 0;  }
  P = P2; 
CRES(IEXIT); //FAILURES->IEXIT


if  (IEXIT == FARLAB)   BITMASK = BITMASK | 1;  else   BITMASK = BITMASK | 2; 
if  (C1 ^ C1 == 2) Jump(15, FEXIT, 0b11); 
return 0; 

}


}

FAULT2(74, 0, 0); 
return 0; 

}

if  (C1 > 8) goto ADRCOMP; 
  MASK = FCOMP[C1]; 
  TE2 = TSEXP(TEX2); 
if  (TYPE == 5) goto STR; 
unless  (TE2 == 1) goto ARITH; 
  P = P1;   TE1 = TSEXP(TEX1); 
if  (TYPE == 5) goto STR; 
ARITH: //ARITHMETICCOMPARISIONS


  P = P1 + 3; 
TORP(HEAD1, BOT1, NOPS); //FIRSTEXPRESSIONTOREVERSEPOL


    CMP = C1; 
  P = P2 + 3; 
if  (C1 != 0)  {
//IFD-SIDEDDEALWITHMIDDLE


ACOMP(1, 1); //BRANCHIEXITifFALSE


if  (MASK == 15) return IEXIT; 
Jump(MASK, IEXIT, 0b11); 
  P = P + 5; //TOTHETHIRDEXPRSN


    CMP = C1; //COMPARATORNO2



}

//


ACOMP(C1 ^ C1, 0); //SECONDORONLYCOMPARISION


if  (MASK == 15) return FEXIT; 
Jump(MASK, FEXIT, 0b11); 
return 0; 
STR: //STRINGCOMPARISIONS


//SOMECAREISNEEDEDINFREEING


//STRINGWK-AREASSETBYCSTREXP


  P = P1; 
  WA1 = 0;   WA2 = 0;   WA3 = 0; 
if  (C1 == 0 && 7 <= FCOMP[C1] && FCOMP[C1] <= 8 && A == 4 && A == 2 && A == 0x35 && A == 0 && A == 2)  {

CSTREXP(0, DR); 
  MASK = FCOMP[C1 + 14]; 
if  (C1 ^ C1 == 1)   MASK = REVERSE(MASK); 
Jump(MASK, FEXIT, 0b11); 
return 0; 

}

CSTREXP(16, ACCR); //DONOTFREEWK-AREA


  WA1 = VALUE; //SAVEADDRESSOFWK-AREA


    CMP = C1; 
  P = P2; 
//


if  (C1 != 0)  {
//D-SIDEDDEALWITHMIDDLE


SCOMP(1, 1, IEXIT, WA2); 
  P = P + 2;     CMP = C1; 
if  (WA1 != 0) { RETURNWSP(WA1, 256);   WA1 = 0;  }

}

//


SCOMP(0, C1 ^ C1, FEXIT, WA3); 
for (  CMP = ADDR(WA1);   CMP != ADDR(WA3);   CMP += 4) {
if  (INTEGER(  CMP)
 != 0) RETURNWSP(INTEGER(  CMP)
, 256); 
}
return 0; 
ADRCOMP: //ADRESSCOMPARISONS


ADCOMP(C1 ^ C1); 
Jump(MASK, FEXIT, 0b11); 
return 0; 
void ADCOMP(int TF) {
//***********************************************************************


//*COMPILESAN==ORADDRESSCOMPARISONWHICHCANNOTBE*


//*DOUBLESIDED.BETTERCODECOULDBEGENERATEDFORTHE*


//*MOSTCOMMONCASEIEPOINTERNAME==VARIABLE*


//************************************************************************


int TYPEP; int PRECP; int LHNAME; int RHNAME; int FNAME;

/*pending name*/recfm  R;
//(RD)


  LHNAME = A << 8 | A; 
  FNAME = RHNAME; 
  RHNAME = A << 8 | A; 
unless  (A == 4 && A == 1) goto FLT; 
  P = P1 + 5; CNAME(4, ACCR); 
unless  (A == 2) goto FLT; //NORESTOFEXPR


  TYPEP = TYPE;   PRECP = PREC; 
  REGISTER[ACCR] = 1; 
  OLINK[ACCR] = ADDR(R); 
  R = 1;   R = ACCR << 4; 
  R = 9; 
//


  FNAME = LHNAME; 
unless  (A == 4 && A == 1) goto FLT; 
  P = P2 + 5; CNAME(4, ACCR); 
unless  (A == 2) goto FLT; //NORESTOFEXPR


unless  (TYPEP == TYPE && PRECP == PREC) FAULT2(83, LHNAME, RHNAME); 
PF1(ICP, 0, TOS, 0); 
if  (C1 == 10)   MASK = 7;  else   MASK = 8; 
if  (TF == 1)   MASK = REVERSE(MASK); 
return; 
FLT:   REGISTER[ACCR] = 0; 
FAULT2(80, 0, FNAME); 
  MASK = 7; 

} /* End of Begin/Rt/Fn/Map depth=5 */;

void ACOMP(int TF, int DS) {
//***********************************************************************


//*TYPE&PRECDEFINETHEEXPRSNINREVERSEPOLISHINHEAD1*


//*THISROUTINECONVERTSTHENEXTEXPRSNTOREVERSEPOLISHAND*


//*ADDSOPERATORSFORTYPECHANGING(IFREQ)CMPRSNANDJUMP*


//***********************************************************************


int PRECP; int TYPEP; int REG;

  PRECP =   PTYPE >> 4 & 15;   TYPEP = TYPE; 
//


//ADDOPERATORATBOTTOM.EITHERCOMPARE(31)ORDSCOMPARE(32)


//


PUSH(HEAD2, 31 + DS,   CMP, 0); 
  BOT2 = HEAD2; 
  NOPS = (NOPS + 1) | 1 << 31; //FLAGCOMPARE


//


//CONVERTNEXTEXPRSNTOREVERSEPOLISHANDTOTHESAMETYPEASTHE


//FIRSTIFPOSSIBLE.MODE=0INTEGERIFPOSSIBLE,=2REAL,=3LONGREAL


//


TORP(HEAD2, BOT2, NOPS); 
if  (TYPEP > TYPE)   TYPE = TYPEP; 
//CONCAT(HEAD1,HEAD2)


  ASLIST[BOT1] = HEAD2; 
  BOT1 = BOT2;   BOT2 = 0;   HEAD2 = 0; 
EXPOP(HEAD1, -1, NOPS, 256 + 16 * PRECP + TYPE); //PLANTTHECODE


//CLEARLIST(HEAD1)


  ASLIST[BOT1] = ASL; 
  ASL = HEAD1; 
  HEAD1 = 0; 
if  (DS != 0)  {

PUSH(HEAD1, INTEGER(ADDR(EXPOPND)
)
, EXPOPND, EXPOPND); 
  BOT1 = HEAD1; 
if  (EXPOPND == 9)  {

  REG = EXPOPND >> 4; 
  REGISTER[REG] = 1; 
  OLINK[REG] = ADDR(ASLIST[HEAD1]); 

}


}

if  (TF == 1)   MASK = REVERSE(MASK); 

} /* End of Begin/Rt/Fn/Map depth=5 */;

void SCOMP(int DS, int TF, int LAB, int *WA) {
//***********************************************************************


//*1STSTRINGISDEFINEDBY(ACCR)*


//*THISROUTINEEVALUATESTHENEXTSTRINGEXPRSANDPERFORMS*


//*THECOMPARISON&BRANCH.*


//*DS=0UNLESSTHISCOMPARISONISTHEFIRSTHALFOFADBLE-SIDED*


//***********************************************************************


int MASK;

/*pending name*/recfm  R;
//(RD)


//


  REGISTER[ACCR] = 1; 
  OLINK[ACCR] = ADDR(R); 
  R = 1;   R = ACCR << 4;   R = 9; 
  MASK = FCOMP[  CMP]; 
if  (TF == 1)   MASK = REVERSE(MASK); //REVERSEMASKTOJMPIFFALS


//


CSTREXP(16, DR); //SAVEWK-AREA


  WA = VALUE; 
  REGISTER[ACCR] = 0; 
if  (R != 9) PF1(LSD, 0, TOS, 0); 
if  (DS != 0) PF1(STD, 0, TOS, 0); 
PSF1(INCA, 0, 1); PSF1(IAD, 0, 1); 
PF2(CPS, 1, 1, 0, 0, 0); 
  GRUSE[ACCR] = 0;   GRUSE[DR] = 0; 
//


//IFCC=8MUSTCHECKTHATACCSTRINGISEXHAUSTEDOTHERWISECHANGECC


//TOGIVERESULTACC>DR.THISISBESTFIDDLEDUSINGISH.


//CANSKIPTHISCHECKIFMASKISSUCHTHAT2**3&2**2BITSSETTHESAME


//


if  (0 != MASK & 0xC && MASK & 0xC != 0xC)  {

PF3(JCC, 7, 0, 4); 
PSF1(USH, 0, -32); 
PSF1(  ISH, 0, -24); 

}

if  (DS != 0) PF1(LSD, 0, TOS, 0); //DOESNOTCHANGECC


Jump(MASK, LAB, 0b11); 

} /* End of Begin/Rt/Fn/Map depth=5 */;


} /* End of Begin/Rt/Fn/Map depth=4 */;

void Jump(int MASK, int LAB, int FLAGS) {
//***********************************************************************


//*CALLSENTERJUMPWHILEMAINTAININGBITMASK*


//***********************************************************************


if  (MASK == 0) { LABUNUSED(LAB); return;  }
ENTERJump(MASK, LAB, FLAGS); 
if  (LAB == FARLAB)   BITMASK = BITMASK | 1;  else   BITMASK = BITMASK | 2; 

} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFCCOND


int REVERSE(int MASK) {
//***********************************************************************


//*REVERSETHEMASKFORAJCC(MASK<=15),JAT(>15)ORJAF(>31)*


//***********************************************************************


if  (MASK > 15)   MASK = MASK ^ 0x30;  else   MASK = MASK ^ 15; 
return MASK; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int ENTERLAB(int LAB, int FLAGS) {
//***********************************************************************


//*ENTERANEWLABELONTHELABELLISTFORTHECURRENTLEVEL*


//*2**0OFFLAGS=1CONDITIONALENTRY*


//*2**1OFFLAGS=1UPDATEENVIRONMENT*


//*2**2OFFLAGS=1REPLACEENV=0MERGEENV*


//*THELABELLIST*


//*S1=USEBITS<<8!LABELADDR*


//*S2=ENVIRONMENTLIST<<16!UNFILLEDJUMPSLIST*


//*S3=LABNO-RESETTOFFFFWHENUSEDFORINTERNALLABELS*


//*RESULT=1LABELENTERED*


//*RESULT=0CONDITIONALLABELNOTREQUIRED*


//***********************************************************************


int CELL; int AT; int ENVHEAD; int JUMPHEAD; int INSTRN; int OLDCELL; int WORK;

/*pending name*/recfm  *LCELL;
//(LISTF)


int *LHEAD;

  CELL = LABEL[  LEVEL];   OLDCELL = 0; 
while  (CELL > 0) {
  LCELL = ASLIST[CELL]; 
if  (LCELL == LAB) break; 
  OLDCELL = CELL;   CELL = LCELL; 
}
//


if  (CELL <= 0)  {
//LABELNOTKNOWN


if  (FLAGS & 1 == 0)  {
//UNCONDITIONALENTRY


PUSH(LABEL[  LEVEL], CA, 0, LAB); 
FORGET(-1); 
return 1; 

}

return 0; 

}

//


//LABELHASBEENREFERENCED-FILLINITSADDRESS


//


if  (LCELL & 0xFFFFFF != 0)  {

FAULT(2, LAB); //LABELSETTWICE



} else {

  LCELL = 0x1000000 | CA; 

}

//


//SORTOUTENVIRONMENTS-ASDIRECTEDBYFLAGS


//


  JUMPHEAD = LCELL; 
  ENVHEAD = JUMPHEAD >> 16; 
  JUMPHEAD = JUMPHEAD & 0xFFFF; 
if  (FLAGS & 2 == 0)  {

FORGET(-1); 
CLEARLIST(ENVHEAD); 

} else {

if  (FLAGS & 4 == 0) REMEMBER(); 
RESTORE(ENVHEAD); 
  ENVHEAD = 0; 
if  (FLAGS & 4 == 0) MERGEINFO(); 

}

//


//NOWFILLJUMPSTOTHISLABEL-JUMPLISTFORMATGIVENIN'ENTER JMP'


//


while  (JUMPHEAD != 0) {
POP(JUMPHEAD, AT, INSTRN, WORK); 
PLUG(1, AT, INSTRN | (CA - AT) / 2, 4); 
}
  LCELL = 0; 
if  (LAB > MAXULAB)  {

if  (OLDCELL == 0)   LHEAD = LABEL[  LEVEL];  else   LHEAD = ASLIST[OLDCELL]; 
POP(LHEAD, AT, AT, AT); 

}

return 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void ENTERJump(int MASK, int LAB, int FLAGS) {
//***********************************************************************


//*IFLABHASBEENENCOUNTEREDTHENPLANTAJCCOTHERWISEENTER*


//*THELABELINTHELABELLISTANDATTACHTHEJUMPTOITSOIT*


//*CANBEPLANTEDWHENTHELABELISFOUND*


//*THELABELLISTISDESCRIBEDUNDER'ENTER LAB'*


//*THEJUMPSUB-LISTHASTHEFORM*


//*S1=ADDROFJUMP*


//*S2=INSTRN*


//*S3=LINENOOFJUMPFORDIAGNOSTICS*


//**


//*FLAGSBITSSIGNIFYASFOLLOWS*


//*2**0=1JUMPISKNOWNTOBESHORT*


//*2**1=1ENVIRONMENTMERGEINGREQUIRED*


//***********************************************************************


int AT; int CELL; int J; int JJ; int LABADDR; int I; int ENVHEAD; int OLDENV; int JCODE; int INSTRN;

/*pending name*/recfm  *LCELL;
//(LISTF)


  ENVHEAD = 0;   AT = CA; 
if  (LAB < MAXULAB)   FLAGS = FLAGS & 0xFD; //NOMERGE


if  (LAB < 21000)   FLAGS = FLAGS & 0xFE; //SFORUSERLAB=LONG


  CELL = LABEL[  LEVEL]; 
while  (CELL > 0) {
  LCELL = ASLIST[CELL]; 
if  (LAB == LCELL) break; 
  CELL = LCELL; 
}
  INSTRN = MASK; 
if  (INSTRN >> 8 == 0)  {

  JCODE = JCC; 
if  (MASK >= 16)   JCODE =   JAT; 
if  (MASK >= 32)   JCODE = JAF; 
  INSTRN = JCODE << 24 | (MASK & 15) << 21; 
if  (MASK == 15)   INSTRN = JUNC << 24 | 3 << 23; 

}

if  (CELL <= 0) goto FIRSTREF; 
  LABADDR = LCELL & 0xFFFFFF; 
if  (LABADDR == 0) goto NOTYETSET; 
  LCELL = LABADDR | 0x1000000; //FLAGLABELASUSED


  I = (LABADDR - CA) / 2; 
if  (MASK == 15) PSF1(JUNC, 0, I);  else PCONST(INSTRN | (I & 0x3FFFF)); 
return; 
FIRSTREF: //FIRSTREFERENCETOANEWLABEL


if  (LAB > MAXULAB && FLAGS & 2 != 0) GETENV(ENVHEAD); 
PUSH(LABEL[  LEVEL], 0x1000000, ENVHEAD << 16, LAB); 
  CELL = LABEL[  LEVEL]; 
  LCELL = ASLIST[CELL]; 
goto CODE; 
NOTYETSET: //LABELREFERENCEDBEFORE


if  (LAB > MAXULAB && FLAGS & 2 != 0)  {

  I = LCELL; 
  OLDENV = I >> 16; 
REDUCEENV(OLDENV); 
  LCELL = OLDENV << 16 | I & 0xFFFF; 

}

CODE: //ACTUALLYPLANTTHEJUMP


  J = LCELL; 
  JJ = J & 0xFFFF; 
PUSH(JJ, CA, INSTRN,   LINE); 
  LCELL = J & 0xFFFF0000 | JJ; 
PCONST(INSTRN); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void REMOVELAB(int LAB) {
//***********************************************************************


//*REMOVESAALBELFROMTHECURRENTLABELLISTWHENKNOWNTO*


//*BEREDUNDANT.MAINLYUSEDFORCYCLELABELS*


//***********************************************************************


/*pending name*/recfm  *LCELL;
//(LISTF)


int *LHEAD;

int CELL; int AT;

  LHEAD = LABEL[  LEVEL];   CELL = LHEAD; 
while  (CELL > 0) {
  LCELL = ASLIST[CELL]; 
if  (LCELL == LAB) break; 
  LHEAD = LCELL; 
  CELL = LHEAD; 
}
if  (CELL > 0) POP(LHEAD, AT, AT, AT); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void MERGEINFO(void) {
//***********************************************************************


//*MERGETHECURRENTSTATUSOFTHEREGISTERSWITHTHEVALUES*


//*ATTHESTARTOFTHECONDITIONALCLAUSE.THISPERMITSTHE*


//*THECOMPILERTOREMEMBERUNCHANGEDREGISTERSBUTNOTTHOSE*


//*WHICHDEPENDONAPARTICULARRUNTIMEROUTEBEINGTAKEN*


//***********************************************************************


int I;

for (I = 0; I != 7; I += 1) {
unless  (SGRUSE[I] == GRUSE[I] & 255 && SGRINF[I] == GRINF1[I])   GRUSE[I] = 0; 
}

} /* End of Begin/Rt/Fn/Map depth=3 */;

void REMEMBER(void) {
int I;

for (I = 0; I != 7; I += 1) {
  SGRUSE[I] = GRUSE[I] & 255; 
  SGRINF[I] = GRINF1[I]; 
}

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CREATEAH(int MODE) {
//***********************************************************************


//*CREATEANARRAYHEADINTEMPORARYSPACEBYMODIFYINGTHEHEAD*


//*THEHEADATAREA,ACCESS&DISPASFOLOWS:-*


//*MODE=0(ARRAYMAPPING)ACCHASADDR(1STELEMENT)*


//*MODE=1(ARRAYSINRECORDS)ACCHASRELOCATIONFACTOR*


//***********************************************************************


int WK;

GETWSP(WK, 4); 
  AREA = AREACODE(); 
if  (MODE == 0)  {

if  (  COMPILER == 1 && 1 == J && TYPE <= 2)  {

PF1(SLSS, 2, AREA, DISP + 8); //LWBTOACC


unless  (PREC == 3) PSF1(IMY, 0, -BYTES[PREC]); 
PF1(IAD, 0, TOS, 0); 
  GRUSE[DR] = 0; 

}

PSORLF1(  LUH, ACCESS, AREA, DISP); 

} else {

PSF1(  LUH, 0, 0); 
PSORLF1(IAD, ACCESS, AREA, DISP); 

}

//


PSF1(ST, 1, WK); //1STPARTOFHEAD=DESCTOARRAY


PSORLF1(LSD, ACCESS, AREA, DISP + 8); 
PSF1(ST, 1, WK + 8); //2NDPART=DESCPTRTODV


  GRUSE[ACCR] = 0; 
  ACCESS = 0;   AREA = LNB;   DISP = WK; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CSNAME(int Z, int REG) {
//***********************************************************************


//*COMPILEASPECIALNAME-PTYPE=10006(=routinelabel)*


//*THEIRTRUEPTYPEISINGLOBALARRAYTSNAME.*


//*SNINFOHASAFOURBYTERECORDFOREACHNAME(biFLAG,PTR,*


//*siXTRA).THETOPBITSOFFLAGCATEGORISEASFOLLOWS:-*


//*2**7SETFORIMPLICITLYSPECIFIEDCONSTRUCTAspec*


//*2**6SETFORIOCPCALL*


//*2**5SETFORBUILTINMAPPINGFUNCTIONS*


//*2**4SETIFAD-HOCCODEPLANTEDBYTHISROUTINE*


//*2**3SETIFFIRSTPARAMETERISOFnameTYPE*


//*2**2-2**0HOLDNUMBEROFPARAMS*


//**


//*THEFULLSPECSAREASFOLLOWS:-*


//*0=routineSELECTINPUT(integerSTREAM)*


//*1=routineSELECTOUTPUT(integerSTREAM)*


//*2=routineNEWLINE*


//*3=routineSPACE*


//*4=routineSKIPSYMBOL*


//*5=routineREADSTRINWG(stringnameS)*


//*6=routineNEWLINES(integerN)*


//*7=routineSPACES(integerN)*


//*8=integerfnNEXTSYMBOL*


//*9=routinePRINTSYMBOL(integerSYMBOL)*


//*10=routineREADSYMBOL(nameSYMBOL)*


//*11=routineREAD(nameNUMBER)*


//*12=routineWRITE(integerVALUE,PLACES)*


//*13=routineNEWPAGE*


//*14=integerfnADDR(nameVARIABLE)*


//*15=longrealfnARCSIN(longrealX)*


//*16=integerfnINT(longrealX)*


//*17=integerfnINTPT(lonrgrealX)*


//*18=longrealfnFRACPT(longrealX)*


//*19=routinePRINT(longrealNUMBER,integerBEFORE,AFTER)*


//*20=routinePRINTFL(longrealNUMBER,integerPLACES)*


//*21=realmapREAL(integerVARADDR)*


//*22=integermapINTEGER(integerVARADDR)*


//*23=longrealfnMOD(longrealX)*


//*24=longrealfnARCCOS(longrealX)*


//*25=longrealfnSQRT(longrealX)*


//*26=longrealfnLOG(longrealX)*


//*27=longrealfnSIN(longrealX)*


//*28=longrealfnCOS(longrealX)*


//*29=longrealfnTAN(longrealX)*


//*30=longrealfnEXP(longrealX)*


//*31=routineCLOSESTREAM(integerSTREAM)*


//*32=byteintegermapBYTEINTEGER(integerVARADDR)*


//*33=integerfnEVENTINF*


//*34=longrealfnRADIUS(longrealX,Y)*


//*35=longrealfnARCTAN(longrealX,Y)*


//*36=byteintegermapLENGTH(stringnameS)*


//*37=routinePRINTSTRING(string(255)MESSAGE)*


//*38=integerfnNL*


//*39=longrealmapLONGREAL(integerVARADDR)*


//*40=routinePRINTCH(integerCHARACTER)*


//*41=routineREADCH(nameCHARACTER)*


//*42=stringmapSTRING(integerVARADDR)*


//*43=routineREADITEM(stringnameITEM)*


//*44=string(1)fnNEXTITEM*


//*45=byteintegermapCHARNO(stringnameSTR,integerCHARREQD)*


//*46=string(1)fnTOSTRING(integerSYMBOL)*


//*47=string(255)fnFROMSTRING(string(255)S,integerBEG,END)*


//*48=recordmapRECORD(integerRECADDR)*


//*49=arraymapARRAY(integerA1ADDR,arraynameFORMAT)*


//*50=routineSETMARGINS(integerINOUT,LHM,RHM)*


//*51=integerfnIMOD(integerVALUE)*


//*52=longrealfnPI*


//*53=integerfnEVENTLINE*


//*54=longintegermapLONGINTEGER(integerADR)*


//*55=longlongrealmapLONGLONGREAL(integerADR)*


//*56=longintgerefnLENGTHENI(integerVAL)*


//*57=longlongrealfnLENGTHENR(longrealVAL)*


//*58=integerfnSHORTENI(longintegerVAL)*


//*59=longrealfnSHORTENR(longlongrealVAL)*


//*60=integerfnNEXTCH*


//*61=halfintegermapHALFINTEGER(integerADDR)*


//*62=routinePPROFILE*


//***********************************************************************


auto int OPTMAP(void);
/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
const int SNINFO[(62)-(0)+1]
;
$define SNINFO[N0] SNINFO[(N0)-(0)]
 = 
  X'41080001', 
0x41090001, 
0x408A0001, 
0x40A00001, 
0x40010001, 
0x800D0000, 
0x11010001, 
0x11010001, 
0x10020024, 
0x41030001, 
0x19030001, 
0x80130001, 
0x801B0014, 
0x408C0001, 
0x19050024, 
0x80010002, 
0x11040024, 
0x11040024, 
0x80010005, 
0x80090006, 
0x80060007, 
0x2100003E, 
0x2100003E, 
0x11060024, 
0x80010008, 
0x80010009, 
0x8001000A, 
0x8001000B, 
0x8001000C, 
0x8001000D, 
0x8001000E, 
0x8015000F, 
0x2100003E, 
0x100D0024, 
0x80030010, 
0x80030011, 
0x1907003E, 
0x41070001, 
0x10080024, 
0x2100003E, 
0x41050001, 
0x19030001, 
0x2100003E, 
0x19030001, 
0x10020024, 
0x1A07003E, 
0x11090024, 
0x800F0012, 
0x110A8018, 
0x120B1000, 
0x80170013, 
0x11060024, 
0x100C0024, 
0x100D0024, 
[ LOW ... HIGH ] = 0x2100003E, 
[ LOW ... HIGH ] = 0x110E0024, 
0x10020024, 
0x2100003E, 
0x100F0001;

const _imp_string SNXREFS[(20)-(0)+1]
;
$define SNXREFS[N0] SNXREFS[(N0)-(0)]
 = 
  "READSTRING", 
"S#READ", 
"S#IARCSIN", 
"S#INT", 
"S#INTPT", 
"S#FRACPT", 
"S#PRINT", 
"S#PRINTFL", 
"S#IARCCOS", 
"S#ISQRT", 
"S#ILOG", 
"S#ISIN", 
"S#ICOS", 
"S#ITAN", 
"S#IEXP", 
"CLOSESTREAM", 
"S#IRADIUS", 
"S#IARCTAN", 
"FROMSTRING", 
"SETMARGINS", 
"S#WRITE";

//


//SNPARAMSHOLDSNUMBERANDPTYPEOFFORMALPARAMETERFORIMPLICITLY


//SPECIFIEDEXTERNALROUTINES.APOINTERINSNINFOMEANSTHATNO


//DUPLICATESNEEDTOBERECORDED.


//


const int SNPARAMS[(29)-(0)+1]
;
$define SNPARAMS[N0] SNPARAMS[(N0)-(0)]
 = 
0, 
1, 
0x62, 
2, 
0x62, 
0x62, 
2, 
0x62, 
0x51, 
3, 
0x62, 
0x51, 
0x51, 
1, 
0x435, 
3, 
0x35, 
0x51, 
0x51, 
1, 
0x400, 
1, 
0x51, 
3, 
0x51, 
0x51, 
0x51, 
2, 
0x51, 
0x51;

//


auto void RTOS(int REG);
/*pending name*/recfm  R;
//(RD)


int ERRNO; int FLAG; int POINTER; int WREG; int PIN; int SNNO; int SNNAME; int NAPS; int SNPTYPE; int JJ; int   XTRA; int IOCPEP; int B; int D; int SNINF; int P0; int OPHEAD;

  SNNAME = FROMAR2(P); 
  SNNO = K; //INDEXINTOSNINFO


TESTAPP(NAPS); //COUNTACTUALPARAMETERS


  PIN = P;   P = P + 2; 
  SNPTYPE = TSNAME[SNNO]; 
  SNINF = SNINFO[SNNO]; 
    XTRA = SNINF & 0xFFFF; 
  POINTER = (SNINF >> 16) & 255; 
  FLAG = SNINF >> 24; 
//


//THEIMPLICITLYSPECIFIEDROUTINEARETHEEASIESTOFALLTODEALWITH.


//JUSTSETUPTHEEXTERNALSPEC&PARAMETERS.THENARECURSIVECALL


//OFCNAMETHENFINDSTHEROUTINEUNDERITSTRUECOLOURSANDCOMPILES


//THECALL.ALLCALLSEXCEPTTHEFIRSTAREDEALTWITHDIRECTLYBYCNAME.


//ALLNONTRIVIALROUTINESSHOULDBEDEALTWITHINTHISMANNER


//XTRAHASINDEXINTOARRAYOFEXTERNALNAMESSOTHATTHESE


//CANEASILYBECHANGED.


//


if  (FLAG & 0x80 != 0)  {

CXREF(SNXREFS[  XTRA], PARMDYNAMIC, 2, JJ); //JJSETWITHREFDISPLACEMENT


if  (SNNO == 26)   LOGEPDISP = JJ; 
if  (SNNO == 31)   EXPEPDISP = JJ; 
  OPHEAD = 0;   P0 = SNPARAMS[POINTER]; 
  K = OPHEAD;   D = 1; 
while  (D <= P0) {
    PTYPE = SNPARAMS[POINTER + D]; 
UNPACK(); 
if  (NAM == 0)   ACC = BYTES[PREC];  else   ACC = 8; 
if  (  PTYPE == 0x35)   ACC = 256; //STRINGBYVALUE


INSERTATEND(OPHEAD,   PTYPE << 16, ACC << 16, 0); 
  D = D + 1; 
}
  I = 1;   J = 14; 
  OLDI = 0;     PTYPE = SNPTYPE; 
  K = OPHEAD;   KFORM = P0; 
REPLACETAG(SNNAME); 
REPLACE2(TAGS[SNNAME], JJ); //DIPLACEMENTINTOS2


  P = PIN; CNAME(Z, REG); //RECURSIVECALL


  NEST = REG; 
  P = P - 1; return; //DUPLICATESCHECKOF<ENAME>



}

//


//ALLROUTINESEXCEPTTHEIMPLICITSREQUIREACHECKTHATTHEUSEOFTHE


//NAMEISLEGALANDTHATTHECORRECTNOOFPARAMETERS(BOTTOM2BITSOF


//FLAG)HASBEENSUPPLIED.THECHECKISTRIVIAL-THEPROBLEM


//ISTOGETTHERIGHTERRORNUMBER.


//XTRAHASABITMASKOFALLOWEDUSES(IEALLOWEDZVALUES)


//


if  (NAPS != FLAG & 3) {   ERRNO = 19; goto ERREXIT;  }
  JJ = 1 << Z; 
if  (JJ &   XTRA == 0)  {
//ILLEGALUSE


  ERRNO = 23; 
if  (Z == 0)   ERRNO = 17; 
if  (Z == 1 || 3 <= Z && Z <= 4)   ERRNO = 29; 
if  (  XTRA & 0xF000 != 0)   ERRNO = 84; 
goto ERREXIT; 

}

//


//ANUMBEROFINPUT-OUTPUTROUTINESAREMAPPEDONTOCALLSOFIOCP.


//THISARRANGEMENTHASTHEADVANTAGEOFREQUIRINGONL1EXTERNALREF


//INTHEGLABUTHASTHEDISADVANTAGETHATTHEI-OROUTINESCANNOT


//BEPASSEDASRT-TYPEPARAMETERSASWELLASREQUIRINGMESSYCODE


//HEREABOUTS.SNINF_PTRHOLDEITHER:-


//1)THEIOCPENTRYPOINTNO


//OR2)THESYMBOLTOBEOUTPUTWITH2**7BITSET


//


//THISSECTIONDEALSWITHSELECTINPUT,SELECTOUTPUT,NEWLINE,NEWPAGE


//SPACE,SKIPSYMBOL,PRINTSYMBOL,PRINTSTRING


//ANDPRINTCH


//


if  (FLAG & 0x40 != 0)  {

  IOCPEP = POINTER;   B = ACCR; 
if  (FLAG & 3 != 0)  {
//RTHASPARAMS


  P = P + 1; 
if  (SNNO == 37) { CSTREXP(0, DR);   B = DR;  } else CSEXP(ACCR, 0x51); 

}

if  (IOCPEP > 127) { PSF1(LSS, 0, IOCPEP & 127);   IOCPEP = 5;  }
if  (SNNO == 4) PSF1(LSS, 0, 0); //SKIPSYMBOLFORCEACS=1


CIOCP(IOCPEP, B); //PLANTCALLOFIOCP


  P = P + 1; 
goto OKEXIT; 

}

//


//THEBUILT-INMAPS(INTEGERETCBUTNOTRECORDORARRAY)


//


if  (FLAG & 0x20 != 0)  {

  SNPTYPE = 0x1C00 + SNPTYPE; //ADDMAPBITS


if  (PARMOPT == 0 && OPTMAP()
 != 0) goto OKEXIT; 
if  (Z == 1)     BIMSTR = 1; //SPECIALFLAGFORSTOREVIAMAP


  P = P + 1; 
CSEXP(BREG, 0x51);   P = P + 1; 
if  (Z == 1)     BIMSTR = 0; 
  JJ = SNPTYPE >> 4 & 15; 
  DISP = MAPDES(JJ); 
  AREA = PC;   ACCESS = 3; 
  OLDI = 0; //FORCHECKIN==ASSGNMNT


goto OKEXIT; 

}

//


//ADHOCCODINGISREQUIREDFORTHEREMAININGROUTINESAPARTFROM


//ACHECKFORNAMETYPEPARAMETERS.THESWITCHNOISKEPTINPOINTER


//


  P = P + 1; 
if  (FLAG & 8 != 0 && A != 4 || A != 1 || A != 2) {   ERRNO = 22; goto ERREXIT;  }
goto ADHOC[POINTER]; 
ADHOC_1://NEWLINES(=6)&SPACES(=7)


CSEXP(ACCR, 0x51); //REPITITIONNOTOACC


if  (SNNO == 6)   JJ = 10;  else   JJ = 32; 
PSF1(USH, 0, 8); //SHIFTUP8PLACES


PSF1(  OR, 0, JJ); //ORSYMBOL


CIOCP(17, ACCR); 
  P = P + 1; 
goto OKEXIT; 
ADHOC_2://NEXTSYMBOL(=8)&NEXTITEM(=44)


//ALSONEXTCH(=60)


GETINACC(ACCR, 1, 0, 0, 0); //PRESERVEANYINTERMEDIATES


if  (SNNO == 60)   JJ = 18;  else   JJ = 2; 
CIOCP(JJ, ACCR); //LEAVESTHESYMBOLINACC


if  (SNNO == 44)  {

RTOS(BREG); 
  SNPTYPE = 0x1435; 
  AREA = PC;   ACCESS = 3; 
  DISP = MAPDES(3); 

}

  NEST = ACCR; //CONVERTR1TOSTRING


goto OKEXIT; 
ADHOC_3://READSYMBOL(=10),CH(=41)&ITEM(=43)


if  (SNNO == 41)   JJ = 4;  else   JJ = 1; 
PSF1(LSS, 0, 0); 
CIOCP(JJ, ACCR); //SYMBOLORCHTOGR1


  P = P + 5; 
if  (SNNO == 43)  {

  TYPE = 5; RTOS(ACCR); 
PF1(  LUH, 0, PC, PARAMDES(3)
); 

} else {

  REGISTER[ACCR] = 1;   TYPE = 1; 

}

  JJ = TYPE; 
ASSIGN(6, P); //BY'='TOPARAMETER


  P = PIN + 6 + FROMAR2(PIN + 4); 
goto OKEXIT; 
ADHOC_4://INT(=16)ANDINTPT(=17)


CSEXP(ACCR, 0x62); 
if  (SNNO == 16) PF1(RAD, 0, PC, SPECIALCONSTS(0)
); //RAD0.5


if  (PARMOPT == 0) { PSF1(  RSC, 0, 55); PSF1(  RSC, 0, -55);  }
if  (REGISTER[BREG] != 0) BOOTOUT(BREG); 
PF1(FIX, 0, BREG, 0); 
PSF1(  MYB, 0, 4); 
PSF1(CPB, 0, -64); 
PF3(JCC, 10, 0, 3); 
PSF1(LB, 0, -64); 
PF1(  ISH, 0, BREG, 0); 
PF1(STUH, 0, BREG, 0); 
  GRUSE[ACCR] = 0;   GRUSE[BREG] = 0; 
  NEST = ACCR; 
  P = P + 1; 
goto OKEXIT; 
ADHOC_5://ADDR(=14)


  P = P + 5; CNAME(4, REG); //FETCHADDRESSMODE


  NEST = REG; 
  P = P + 2; goto OKEXIT; 
ADHOC_6://MOD(=23),IMOD(=51)


if  (SNNO == 51)  {

  JJ = 0x51;   B = 5;   D = IRSB; 
    XTRA = 3;   WREG = ACCR; 
if  (REG == BREG)  {

  B = 13;   D = SLB;     XTRA = 4;   WREG = BREG; 

}


} else {

  JJ = 0x62;   B = 1;   D = RRSB; 
    XTRA = 3;   WREG = ACCR; 

}

CSEXP(WREG, JJ); //INTEGERORLONGREALMODE


PF3(  JAT, B, 0,   XTRA); //JUMPACC>0


PSF1(D, 0, 0); 
if  (WREG == BREG) PF1(SBB, 0, TOS, 0); 
  GRUSE[WREG] = 0; 
  NEST = WREG; 
  P = P + 1; 
goto OKEXIT; 
ADHOC_7://CHARNO(=45)&LENGTH(=36)


  P = P + 5; 
if  (PARMARR != 0 && SNNO == 45) CNAME(Z, DR);  else CNAME(4, BREG); 
  ERRNO = 22; 
unless  (TYPE == 5 && ROUT == 0) goto ERREXIT; 
  P = P + 2; 
if  (SNNO != 36)  {

if  (PARMARR == 0 && 0 == PARMCHK)  {

PF1(STB, 0, TOS, 0); 
CSEXP(BREG, 0x51); 
PF1(ADB, 0, TOS, 0); 

} else {
//FRIGBNDCHECKFORPARM=ARR


GETWSP(JJ, 2); 
if  (Z == 2 || Z == 5)   B = INCA;  else   B = MODD; 
PSF1(B, 0, 1); 
PSF1(STD, 1, JJ); 
CSEXP(BREG, 0x51); 
PSF1(LD, 1, JJ); 
PSF1(SBB, 0, 1); 
PF1(MODD, 0, BREG, 0); 
  GRUSE[DR] = 0; 
PSF1(ADB, 1, JJ + 4); 

}

  P = P + 1; 
  GRUSE[BREG] = 0; 

}

  DISP = MAPDES(3); 
  AREA = PC;   ACCESS = 3; 
if  (Z == 1)   STNAME = -1; //CANTREMEBERNAME


  SNPTYPE = SNPTYPE + 0x1C00; 
goto OKEXIT; 
ADHOC_12://PI(=52)


ADHOC_8://NL(=38).THISFNISPICKEDOFF


  NEST = 0; //INCSEXP.ONLYCOMESHEREIN


  P = P + 1; 
goto OKEXIT; //ERROREGNL=A+B


ADHOC_9://TOSTRING(=46)


CSEXP(ACCR, 0x51); //RETEXPSN


  P = P + 1; 
RTOS(BREG); 
  DISP = MAPDES(3); 
  AREA = PC;   ACCESS = 3; 
  SNPTYPE = SNPTYPE + 0x1C00; 
goto OKEXIT; 
ADHOC_10://RECORD(=48)


if  (RECTB == 0) {   JJ = 0x1800FFFF; STORECONST(RECTB, 4, ADDR(JJ)
);  }
if  (REG == ACCR)  {

CSEXP(ACCR, 0x51); 
PF1(  LUH, 0, PC, RECTB); 

} else {

CSEXP(BREG, 0x51); 
PF1(  LDTB, 0, PC, RECTB); 
PF1(LDA, 0, BREG, 0); 

}

  P = P + 1; 
  GRUSE[REG] = 0; 
  OLDI = 0;   ACC = 0xFFFF; 
  SNPTYPE = SNPTYPE + 0x1C00; //ADDMAPBITS


goto OKEXIT; 
ADHOC_11://ARRAY(=49)


CSEXP(ACCR, 0x51); //ADDR(A(0))TOACCR


  ERRNO = 22; 
unless  (A == 4 && A == 1) goto ERREXIT; 
  REGISTER[ACCR] = 1;   OLINK[ACCR] = ADDR(R); 
  R = 0;   R = 0x51; 
  R = 9;   R = ACCR; 
  P = P + 6; CNAME(12, 0); 
if  (R != 9) PF1(LSS, 0, TOS, 0); 
  REGISTER[ACCR] = 0; 
unless  (A == 2 && ARR > 0) goto ERREXIT; 
  P = P + 2; 
CREATEAH(0); 
return; 
ADHOC_13://EVENTINF(=33)&EVENTLINE


  D = ONINF[  LEVEL]; 
if  (D == 0) FAULT(16, SNNAME); 
if  (SNNO != 33)   D = D + 4; 
GETINACC(ACCR, 1, 0, LNB, D); 
  GRUSE[ACCR] = 0; 
  NEST = ACCR; 
goto OKEXIT; 
ADHOC_14://LENGTHENANDSHORTEN


  D = (SNNO & 3) * 8; 
CSEXP(ACCR, 0x62517261 >> D & 255); 
  P = P + 1;   NEST = ACCR; 
goto OKEXIT; 
ADHOC_15://PPROFILE(IGNOREDUNLESSPARMSET)


unless  (PARMPROF == 0) PPJ(0, 22); 
OKEXIT: //NORMALEXIT


    PTYPE = SNPTYPE; UNPACK(); 
return; 
ERREXIT: //ERROREXIT


FAULT(ERRNO, SNNAME); 
    BASE = 0;   DISP = 0;   ACCESS = 0;   AREA = 0; 
  P = PIN + 2; SKIPAPP(); 
  P = P - 1; return; 
int OPTMAP(void) {
//***********************************************************************


//*LOOKFOREXPRESSIONLIKEINTEGER(ADDR(X))ANDAVOIDUSINGDR*


//***********************************************************************


int VARNAME; int REXP; int PP; int CVAL; int OP; int XYNB;

if  (3 <= Z && Z <= 4 || SNNO == 42 || SNNO == 32 || SNNO == 61) return 0; 
  PP = P + 2;   REXP = FROMAR2(PP)
 + PP; //TORESTOFEXP


  VARNAME = FROMAR2(PP + 4); //SHOULDBEADDR


unless  (A == 4 && A == 1) return 0; 
COPYTAG(VARNAME); //CHECKITWASADDR


if  (  PTYPE == SNPT && K == 14 && A == 1) goto WASADR; 
if  (  PTYPE & 0xFBFF == 0x51 && A == 2 && 2 == A) goto WASLOC; 
return 0; 
WASADR:   PP = PP + 10; 
unless  (A == 4 && A == 1 && A == 2 && 2 == A && A == 2 && 2 == A && A == 2) return 0; 
  VARNAME = FROMAR2(PP + 2); COPYTAG(VARNAME); 
unless  (  PTYPE & 0xFF0C == 0) return 0; 
if  (A == 2)   P = REXP + 2;  else {

  OP = A; 
unless  (1 <= OP && OP <= 2 && A == 2 && A == 0x41 && A == 2) return 0; 
  CVAL = FROMAR2(REXP + 4); 
if  (OP == 1)   K = K + CVAL;  else   K = K - CVAL; 
if  (K < 0) return 0; 
  P = REXP + 8; 

}

    BASE = I; 
  DISP = K;   AREA = -1;   ACCESS = 0; 
  AREA = AREACODE(); 
return 1; 

WASLOC: //FORMINTEGER(NAME+CONST)


  CVAL = 0; 
if  (A == 2) {   PP = REXP + 2; goto FETCH;  }
unless  (A == 1 && A == 2) return 0; 
if  (A == 0x41 && A == 2) {   CVAL = FROMAR2(REXP + 4);   PP = REXP + 8; goto FETCH;  }
if  (A == 0x51 && A == 2) {   CVAL = FROMAR4(REXP + 4);   PP = REXP + 10; goto FETCH;  }
return 0; 
FETCH: unless  (CVAL & 3 == 0 && CVAL >> 20 == 0) return 0; //MAXFORXNB+N


  XYNB = XORYNB(9, VARNAME); 
unless  (GRUSE[XYNB] == 9 && GRINF1[XYNB] == VARNAME)  {

  AREA = -1;     BASE = I; 
PSORLF1(LDCODE[XYNB], 2 * NAM, AREACODE()
, K); 
  GRUSE[XYNB] = 9;   GRINF1[XYNB] = VARNAME; 

}

  P = PP;   AREA = XYNB; 
  ACCESS = 0;   DISP = CVAL; 
return 1; 

} /* End of Begin/Rt/Fn/Map depth=4 */;

void RTOS(int REG) {
//***********************************************************************


//*PLANTSCODETOCONVERTASYMBOLINACCTOAONE*


//*CHARACTERSTRINGINATEMPORARARYVARIABLE.*


//***********************************************************************


int KK;

GETWSP(KK, 1); //GET1WORDWKAREA


  STRINGL = 1;   DISP = KK + 2; 
PF1(  OR, 0, 0, 256); 
PSF1(ST, 1, KK); 
GETINACC(REG, 1, 0, LNB, PTROFFSET(RBASE)
); 
if  (REG == BREG)   KK = ADB;  else   KK = IAD; 
PSF1(KK, 0, DISP); 
  GRUSE[BREG] = 0; 

} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINECSNAME


void CANAME(int ARRP, int BS, int DP) {
//***********************************************************************


//*BS&DPDEFINETHEPOSITIONOFTHEARRAYHEAD*


//*ARRP=1FORARRAYS,2FORVECTORS,3FORARRAYSINRECORDS*


//*BASICDISP=DISPMNTOFA(0)FORVECTORSORARRAYSINRECORDS*


//***********************************************************************


int HEAD1; int HEAD2; int HEAD3; int NOPS; int PTYPEP; int KK; int PP; int JJ; int SOLDI; int   TYPEP; int ARRNAME; int Q; int PRECP; int ELSIZE; int NAMINF; int BOT1; int BOT2; int BOT3; int DVD; int VMYOP;

  PP = P;     TYPEP = TYPE; 
  JJ = J;   PTYPEP =   PTYPE;   PRECP = PREC;   SOLDI = OLDI; 
if  (TYPE <= 2)   ELSIZE = BYTES[PRECP];  else   ELSIZE = ACC; 
  DVD = SNDISP; //LOCATIONOFDVIFCONSTANT


  ARRNAME = FROMAR2(P); //NAMEOFENTITY


  NAMINF = TAGS[ARRNAME]; 
if  (ARR == 3) FAULT(29, ARRNAME); //ARRAYFORMATUSEDASARRAY


if  (ARRP > 2) {   NAMINF = -2;   DVD = 0;  }//ARRAYSINRECORDS


TESTAPP(Q); //COUNTNOOFSUBSCRIPTS


//


//CHECKCORRECTNOOFSUBSCRIPTSPROVIDED.HOWEVERENTITIESDECLARED


//AS<TYPE>ARRAYNAMEHAVENODIMENSION.THISSECTIONSETSTHE


//DIMENSIONFROMTHEFIRSTUSEOFTHENAME.


//


if  (JJ == 0)  {
//0DIMENSIONS=NOTKNOWN


REPLACE1(TCELL, FROM1(TCELL)
 | Q); //DIMSNISBOTTOM4BITSOFTAG


  JJ = Q; 

}

if  (JJ == Q && Q != 0)  {
//INLINECODE


//


//FORIN-LINECODEWESETUPACHAINOFREVERSEPOLISHOPERATIONSTO


//EVALUATETHEVARIOUSSUBSCRIPTS,MULTIPLYBYTHEMULTIPLIERSAND


//ADDTHEMTOGETHER.


//


  NOPS = 0;   HEAD1 = 0;   HEAD2 = 0;   HEAD3 = 0; //CLEARLISTHEADS


  BOT1 = 0;   BOT3 = 0; 
//


//NOWPROCESSTHESUBSCRIPTSCALLINRTORPTOCONVERTTHEEXPRESSIONS


//TOREVERSEPOLISHANDADDINGTHEEXTRAOPERATIONS.


//


  P = PP + 3; 
for (KK = 1; KK != JJ; KK += 1) {
//THROUGHTHESUBSCRIPTS


  P = P + 3;   BOT2 = 0; 
TORP(HEAD2, BOT2, NOPS); //SUBSCRIPTTOREVERSEPOLISH


  P = P + 1; 
//


//MULTIPLIERSAREDOPEVECTORITEMS(OPTYPE=3)


//


//NSUBSCRIPTSWILLREQUIRE(N-1)MULTIPLICATIONSANDADDITIONS


//


  NOPS = (NOPS + 1) | 1 << 24; //DVMAS'*'


PUSH(HEAD3, 33, PTYPEP << 16 | ARRNAME, ELSIZE); //DOPEVECTORMULTIPLY


if  (BOT3 == 0)   BOT3 = HEAD3; 
  VMYOP = KK << 24 | JJ << 16 | DVD; 
PUSH(HEAD3, 1 << 16, VMYOP, BS << 18 | DP); //MULTIPLIER


if  (HEAD1 == 0)   HEAD1 = HEAD2;  else   ASLIST[BOT1] = HEAD2; 
  BOT1 = BOT2;   HEAD2 = 0; 
}
//


//ADDOPERATORSTOTHEBACKOFOPERANDSANDEVALUATE


//


  ASLIST[BOT1] = HEAD3; 
  BOT1 = BOT3; 
EXPOP(HEAD1, BREG, NOPS, 0x251); //EVALUATETHEREVERSEPOLISHLIST


//CONSTANTACCEPTABLEASRESULT


  ASLIST[BOT1] = ASL; 
  ASL = HEAD1; 
    BASE = BS;   DISP = DP;   ACCESS = 3;   AREA = -1; 
if  (EXPOPND <= 1)  {
//EVALUATEDTOCONSTANT


  NUMMOD = EXPOPND; //VALUEOFCONSTANT


if  (NUMMOD < 0) GETINACC(BREG, 1, 0, 0, NUMMOD);  else   ACCESS = 1; //DESCPTRWITHCONSTMODIFIER



}


} else {

if  (JJ > Q) FAULT2(20, JJ - Q, ARRNAME);  else FAULT2(21, Q - JJ, ARRNAME); 
  P = P + 2; SKIPAPP(); 
    BASE = BS;   DISP = 0;   ACCESS = 3;   AREA = -1; 

}

  ACC = ELSIZE; 
    PTYPE = PTYPEP; UNPACK();   J = JJ; 
  OLDI = SOLDI; //FORNAME==A(EL)VALIDATION



} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINECANAME


void CNAME(int Z, int REG) {
//***********************************************************************


//*THISISTHEMAINROUTINEFORPROCESSINGNAMES.CANAME,CSNAME*


//*ANDCRNAMEAREONLYCALLEDFROMHERE,THENAME(ANDANYPARAMS*


//*ORSUBNAMES)AREACCESSEDBYPWHICHISADVANCED.*


//*ZSPECIFIESACTIONASFOLLOWS:-*


//*Z=0COMPILEAROUTINECALL*


//*Z=1SETACCESS,AREAANDDISPFORA'STORE'OPERATION*


//*Z=2FETCHNAMETO'REG'*


//*Z=3SETDESCRIPTORINREGFORPASSINGBYNAME*


//*Z=4SET32BITADDRESSOFNAMEINREG*


//*Z=5DELAYEDFETCHIFNAMESIMPLEELSEASZ=2*


//*Z=6STORE'REG'(CONTAINSPOINTER)INTOPOINTERVARIABLE*


//*Z=7->11NOTNOWUSED*


//*Z=12SETBASEANDDISPTOPOINTTOARRAYHEAD*


//*Z=13SETREGTOPOINTTO4WORDROUTINEDISCRIPTOR*


//*(INTERNALROUTINESFIRSTCREATETHEDISCRIPTOR)*


//*Z=14STORE'REG'INTOARECORDNAMEVARIABLE*


//*Z=15SET'REG'TOPOINTTOARECORD*


//*Z=16SETBASEANDDISPFORRECORD*


//**


//*REG(WHEREAPPROPRIATE)ISSETASFOLLOWS:-*


//*>=0AREGISTER*


//*-1MEANSCHOOSEANYREGISTER*


//*IFAREGISTERISCHOSENTHENNESTISSETWITHCHOICE*


//***********************************************************************


int JJ; int JJJ; int KK; int RR; int LEVELP; int DISPP; int NAMEP; int PP; int SAVESL; int FNAME;

/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*//* TO DO: %SWITCH DECLARATION */
/*N imp80-switch.h:2793*//* TO DO: %SWITCH DECLARATION */
/*N imp80-switch.h:2793*/
  PP = P; 
  FNAME = (A << 8) + A; 
if  (Z == 1 || Z == 6)   STNAME = FNAME; 
COPYTAG(FNAME); 
if  (I == -1)  {

FAULT(16, FNAME); 
  I = RLEVEL;   J = 0;   K = FNAME; 
  KFORM = 0;   SNDISP = 0;   ACC = 4; 
    PTYPE = 7; STORETAG(K, N); 
  K = N;   N = N + 4; COPYTAG(FNAME); //SETUSEBITS!



}

  SAVESL = ACC; 
  JJ = J; if  (JJ == 15)   JJ = 0; 
  NAMEP = FNAME; 
  LEVELP = I;   DISPP = K; 
if  (LITL == 1 && ROUT == 0 && 0 == NAM && Z == 1 || Z == 3 || Z == 4 && TYPE < 5 && ARR == 0) FAULT(29, FNAME); 
if  (TYPE == 7) goto NOTSET; 
if  (Z == 0 && ROUT != 1 || 0 != TYPE && TYPE != 6 || Z == 13 && ROUT == 0) { FAULT2(27, 0, FNAME); goto NOTSET;  }
if  (Z >= 10) goto FUNNY[Z]; 
if  (ROUT == 1) goto RTCALL; 
goto SW[TYPE]; 
SW_6:
SW_4://RECORDFORMATNAME


FAULT2(5, 0, FNAME); 
SW_7:
NOTSET: //NAMENOTSET


  NEST = 0;     BASE = I;   DISP = K;   ACCESS = 0; 
  AREA = LNB;     PTYPE = 1; UNPACK(); 
  P = P + 2; SKIPAPP(); goto CHKEN; 
FUNNY_12://SETBASE&DISPFORARRAYHEAD


if  (TYPE == 3 && ARR == 0 || A == 1) goto SW[3]; 
if  (  PTYPE == SNPT) { CSNAME(12, REG); goto CHKEN;  }
if  (A == 2)   P = P + 3;  else NOAPP(); 
  ACCESS = 0;     BASE = I;   DISP = K;   AREA = -1; 
ADJUSTHEAD: 
if  (ARR == 1 && 1 == J && PARMARR == 0 && 0 == NAM && PARMCHK == 0 && TYPE <= 3)  {
//ADJUSTDESRTO1STELMNT


GETWSP(JJ, 4); 
GETINACC(ACCR, 4, ACCESS, AREACODE()
, DISP); 
PSF1(ST, 1, JJ); 
GETINACC(BREG, 1, 2, LNB, JJ + 8); 
if  (TYPE == 3)   KK = ACC;  else   KK = BYTES[PREC]; 
unless  (KK == 1) PSF1(  MYB, 0, KK); 
PSF1(LD, 1, JJ); 
PF1(INCA, 0, BREG, 0); //ADJUSTDESCRPTR


PSF1(STD, 1, JJ); 
  GRUSE[DR] = 0;   GRUSE[ACCR] = 0; 
  GRUSE[BREG] = 0;   AREA = LNB;   DISP = JJ; 

}

goto CHKEN; 
S_12://ARRAYSINRECORDSBYNAME


NAMEOP(1, ACCR, 16, NAMEP); //Z=STORETOUPDATEBASE&DISP


goto ADJUSTHEAD; 
FUNNY_13://LOADADDRFORRT-TYPE


if  (  PTYPE == SNPT) { CSNAME(Z, REG);   P = P + 1; goto CHKEN;  }
  DISP = MIDCELL;     BASE = I; 
if  (NAM & 1 != 0)  {

  AREA = -1; 
GETINACC(REG, 4, 0, AREACODE()
, DISP); 

} else {

if  (J == 14)  {
//EXTERNALROUTINEPASSED


GETINACC(REG, 2, 0, 0, 0); //ZEROENVIRONMENT


GETINACC(DR, 2, 0, SETXORYNB(-1, -1)
, DISP); 
//PSF1(MODD,0,0)

//PROVOKEESCAPEIFDYNAMIC



} else {

if  (  BASE == 0 &&   CPRMODE == 2)  {
//INFILEOFRTS


PSF1(LD, 1, 12); 
unless  (DISP == 0) PSF1(INCA, 0, DISP); 
GETINACC(ACCR, 2, 0, 0, 0); 

} else {

PSF1(JLK, 0, 1); //GETPCTOTOS


RTJump(LDA, ASLIST[TAGS[FNAME]]); //ADDNTOPOINT@ENTRY


PF1(INCA, 0, TOS, 0); //ANDTODESREG


  JJ = 0xE0000001; 
STORECONST(JJJ, 4, ADDR(JJ)
); 
PF1(  LDTB, 0, PC, JJJ); 
GETINACC(ACCR, 1, 0, LNB, PTROFFSET(  BASE)
); 
  JJ = 'IMP'; 
STORECONST(JJJ, 4, ADDR(JJ)
); 
PF1(  LUH, 0, PC, JJJ); //SPAREFIELDINRTHDDR



}


}

PF1(STD, 0, TOS, 0); //DRTOTOPOFSTACK


PF1(  LUH, 0, TOS, 0); //ANDTOTOP64BITSOFACC


  GRUSE[DR] = 0; 

}

if  (A == 2)   P = P + 3;  else NOAPP(); goto CHKEN; 
SW_3://RECORD


CRNAME(Z, REG, 2 * NAM, I, -1, K, NAMEP); 
if  (Z >= 10) goto S[Z]; 
if  (Z == 1 || Z == 6)   STNAME = NAMEP; 
if  (TYPE == 5 && Z != 6) goto STRINREC; 
if  (TYPE == 7) goto NOTSET; 
NAMEOP(Z, REG, BYTES[PREC], NAMEP); 
goto CHKEN; 
SW_5://TYPE=STRING


//


//ALLSTRINGOPERATIONSAREONTHERELEVANTDESCRIPTOR.Z=2&Z=5


//REQUIREACURRENTLENGTH(IEMODIFIED)DESCRIPTOR.OTHEROPERATIONS


//REQUIRETHEMAXLENGTHDESCRIPTOR(IEUNMODIFIEDHEADER)


//


if  (Z == 6) goto SW[1]; 
if  (ARR >= 1) goto STRARR; 
if  (A == 2)   P = P + 3;  else NOAPP(); 
    BASE = I;   ACCESS = 2;   AREA = -1;   DISP = K; 
SNINREC: if  (Z == 1)   Z = 3; //STRINGNAMESINRECORDS


if  (Z == 3 || Z == 4) { NAMEOP(Z, REG, 8, -1); goto CHKEN;  }
if  (ACCESS == 2 && PARMCHK == 0 && REGISTER[DR] == 0)  {

PSORLF1(LDB, 2, AREACODE()
, DISP); //LOADBND&DRIN1INSTRN


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

}

NAMEOP(3, DR, 8, -1); 
MBND: if  (PARMCHK == 1) TESTASS(DR, 5, 8); 
PF1(LDB, 2, 7, 0); //LBOUNDFIRSTBYTE=CURRENTL


if  (REG == ACCR) COPYDR(); 
goto CHKEN; 
STRARR: //STRINGARRAYS&ARRAYNAMES


CANAME(ARR, I, K); 
  NAMEP = -1; 
if  (Z == 1 || Z == 6)   STNAME = NAMEP; 
SAINREC: //STRINGARRAYSINRECORDS


if  (Z == 1 || Z == 3)  {

if  (NAM == 1)  {

GETINACC(DR, 2, 0, AREACODE()
, DISP + 8); //DVDR


//CANAMEWILLHAVESETJ=DIMEN


//FORALLCASESINCLUDINGRECORDS


PF1(SLB, 1, 0, 1 + 3 * (J - 1)); //STACKMODIFIERAND


//SETBREGTOSTRINGLENGTH



}

if  (AREA != 7) GETINACC(DR, 2, 0, AREACODE()
, DISP); //ALREADYINDR


if  (NAM == 1)  {

PF1(MODD, 0, TOS, 0); 
PF1(LDB, 0, BREG, 0); 

} else {

if  (ACCESS == 1)  {

unless  (NUMMOD == 0) PSF1(MODD, 0, NUMMOD); 

} else {

if  (ACCESS == 3) PF1(MODD, 0, BREG, 0); 

}

PSF1(LDB, 0, ACC); 

}

if  (REG == ACCR) COPYDR(); 
goto CHKEN; 

}

if  (Z == 4) { NAMEOP(Z, REG, 4, -1); goto CHKEN;  }
unless  (AREA == 7) GETINACC(DR, 2, 0, AREACODE()
, DISP); 
if  (ACCESS == 1)  {

unless  (NUMMOD == 0) PSF1(MODD, 0, NUMMOD); 

} else {

if  (ACCESS == 3) PF1(MODD, 0, BREG, 0); 

}

goto MBND; 
STRINREC: //STRINGSINRECORDS


if  (ARR != 0) goto SAINREC; 
if  (NAM != 0 || Z == 4) goto SNINREC; 
//


//STRINGSINRECORDSHAVENOHEADERANDARESPECIAL


//


NAMEOP(4, BREG, 4, -1); 
PF1(  LDTB, 0, PC, PARAMDES(3)
); 
PF1(LDA, 0, BREG, 0); 
unless  (Z == 2 && PARMCHK == 0) PSF1(LDB, 0, ACC); 
  GRUSE[DR] = 0; 
if  (Z == 2) goto MBND; 
if  (REG == ACCR) COPYDR(); 
goto CHKEN; 
//


//SECTIONTODEALWITHALLNAMESINVOLVINGROUTINECALL


//


RTCALL: //FIRSTCHECK


if  (TYPE == 0 && Z != 0) { FAULT(23, FNAME); goto NOTSET;  }
//RTNAMEINEXPRSN


if  (  PTYPE == SNPT)  {

CSNAME(Z, REG); //SPECIALNAME


if  (ROUT == 1 && NAM >= 1 && Z != 0) goto BIM; 
if  (TYPE != 0 && NEST == ACCR) goto MVFNRES; 
goto CHKEN; 

}

CRCALL(FNAME);   P = P + 1; //DEALWITHPARAMS


if  (  PTYPE & 15 == 0) goto CHKEN; 
if  (NAM > 1) goto UDM; //MAPS


unless  (Z == 2 || Z == 5)  {
//FUNCTIONS


FAULT(29, FNAME);     BASE = 0; 
  ACCESS = 0;   DISP = 0; 

}

MVFNRES: if  (TYPE == 5)  {
//STRINGFNS


if  (REG == DR) { PF1(ST, 0, TOS, 0); PF1(LD, 0, TOS, 0);  }

} else {

if  (REG == BREG)  {

if  (REGISTER[BREG] != 0) BOOTOUT(BREG); 
PF1(ST, 0, BREG, 0); 

}


}

  NEST = REG; goto CHKEN; 
UDM: //USERDEFINEDMAPS


PF1(ST, 0, BREG, 0); //RETURN32BITADDRINACC


  DISP = MAPDES(PREC); 
  ACCESS = 3;   AREA = PC; 
  NAMEP = -1;   STNAME = -1; 
BIM: //BUILTINMAPS


unless  (AREA == PC && ACCESS == 3) {   NAMEP = -1;   STNAME = -1;  }
if  (TYPE == 3) goto CHKEN; //MAPRECORDUSEVERYLIMITED


if  (Z == 3 || TYPE == 5 && Z != 4)  {

PF1(  LDTB, 0, PC, DISP); 
if  (TYPE == 5 && PARMCHK != 0 || Z != 2) PSF1(LDB, 0, 255); 
PF1(LDA, 0, BREG, 0); 
  GRUSE[DR] = 0; 

} else {

if  (GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF && 1 <= Z && Z <= 2)   AREA = 7; 
//CHANGETO(dr+b)FORM



}

//NAM=0


  KK = Z; if  (Z == 5)   KK = 2; 
goto MAP[KK & 3]; 
MAP_0://FETCHADDRESS


if  (REG != BREG) GETINACC(ACCR, 1, 0, BREG, 0); 
goto CHKEN; 
MAP_1://STORE


unless  (TYPE == 5) goto CHKEN; goto MAP[3]; 
MAP_2://FETCH


if  (TYPE == 5) goto MBND; 
GETINACC(REG, BYTES[PREC] >> 2, ACCESS, AREA, DISP); 
if  (NAMEP > 0) {   GRUSE[DR] = 7;   GRINF1[DR] = NAMEP;  }
if  (PARMCHK == 1 && PREC >= 5) TESTASS(REG, 1, BYTES[PREC]); 
goto CHKEN; 
MAP_3://SETDESCRIPTOR


if  (TYPE == 5) PF1(LDB, 0, 0, 256); 
unless  (REG == DR) COPYDR(); 
goto CHKEN; 
SW_0://namePARAMETERSNOTYPE


//ALLOWFETCHADDROPERATIONS


//ANDSPECIALFORBUILTINMAPS


unless  (3 <= Z && Z <= 4)  {

FAULT2(90, 0, FNAME);   TYPE = 1; 

}

SW_1://TYPE=INTEGER


SW_2://TYPE=REAL


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

    BASE = I;   ACCESS = 2 * NAM; 
  DISP = K;   AREA = -1; 
if  (A == 2)   P = P + 3;  else NOAPP(); 

} else {

CANAME(ARR, I, K); 
  NAM = 0; 

}

NAMEOP(Z, REG, BYTES[PREC], NAMEP); 
goto CHKEN; 
//


//GENERALFETCHING&STORING


//SECTION


//


CHKEN: while  (A == 1) {
FAULT(69, FNAME); 
  P = P + 3; SKIPAPP(); 
}
  P = P + 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;


void NAMEOP(int Z, int REG, int SIZE, int NAMEP) {
//***********************************************************************


//*FETCHORSTOREREGFROMORTOVARIABLEDEFINEDBYAREAACCESS*


//*BASEANDDISP.*


//***********************************************************************


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
auto int BASEREG(int GRUSEVAL, int GRINFVAL);
int KK; int JJJ; int TOTHER; int XYNB; int JJ; int OP1; int OP2;

  KK = Z; if  (Z == 5)   KK = 2; 
if  (Z == 6)  {

unless  (NAM == 1 && ROUT == 0 && ACCESS >= 8 || ACCESS == 2) FAULT2(82, 0, NAMEP); 
  KK = 1;   SIZE = 8; 
if  (ACCESS >= 8)   ACCESS = ACCESS - 4;  else   ACCESS = 0; 

}

  KK = KK & 3; 
goto MOD[ACCESS << 2 | KK]; 
//



//AREAANDACCESS


//*************


//THESEVARIABLESDEFINEHOWTOACCESSANYIMPVARIABLE.AREAHASTHE


//THREEBITAREACODEFROMTHEPRIMARYFORMATINSTRN.(EG6=TOSETC)


//THESPECIALCASEAREA=-1ISUSEDFORENTITIESINSTACKFRAME'BASE'


//THEFNAREACODECONVERTSTHISCASETOAREA=LNBORAREA=XNBARRANGING


//TOLOADXNBIFNECESSARY.



//ACCESSHASTWOVERSIONSOFTHE2-BITINDIRECTIONCODEFROMPRIMARY


//FORMATINSTRNS:-


//=0VARIABLEDIRECTLYADDRESSEDIN'AREA'BY'DISP'


//=1VARIABLEADDRESSEDBYDESCPTRATAREA&DISPMODDEDBYCONSTNUMMOD


//=2DESCRIPTORTOVARIABLEDIRECTLYADDRESSBY'AREA'&'DISP'


//=3DESCRIPTORASIN=2ISTOBEMODIFIEDBY'B'


//=4VARIABLE'XDISP'INTORECORDDIRECTLYADDRESSEDBY'AREA'&'DISP'


//=5VARIABLE'XDISP'INTORECORDADDRESSEDBYDRMODIFIEDAS=1


//=6VAR'XDISP'INTORECORDADDRESSEDBYDESCRIPTORAT'AREA'&'DISP'


//=7AS=6BUTDESCRIPTORMODIFIEDBYB


//=8-11AS4-7BUTTHEREISADESCRIPTORTOITEMAT'XDISP'INTORECORD



//THESECOVERALLTHECOMMONCASES.ITEMSLIKEARRAYSINRECORDARRAYS


//NEEDANINTERMEDIATEDESCRIPTORTOBECALCULATEDAND(USUALLY)STACKED



//


//NOTETHATACCESS=1ASUSEDONVARIABLESISDIFFERENTFROMACCESS=1


//ASUSEDINACTUALPLANTINGROUTINESPF1ETC.THECODEACCESS=1NEEDS


//THERELEVANTDESCRIPORINDRFIRST!


//


//AREA=7WITHACCESS=2OR3ISUSEDWHENTHEDESCRIPTORISALREADY


//LOADEDINDR.THISISAWKARDESPECIALLYONTHEGET32BITADDR


//CASEANDNEEDSPLANTINGOFIMAGESTOREFORMATINSTRNS


//


MOD_0://ACCESS=0FETCHADDRESS


if  (TYPE == 3) { GETINACC(REG, 1, 0, AREACODE()
, DISP - 4); return;  }
GETINACC(REG, 1, 0, LNB, PTROFFSET(  BASE)
); 
if  (REG == BREG)   JJJ = ADB;  else   JJJ = IAD; 
PSF1(JJJ, 0, DISP); 
if  (  BIMSTR == 1) NOTEASSMENT(REG, 3, NAMEP); 
return; 
MOD_1://ACCESS=0STORE


if  (1 <= SIZE && SIZE <= 2)  {
//BYTES&HALFSREQUIREDESCRIPTOR


unless  (GRUSE[DR] == SIZE + 11) PF1(  LDTB, 0, PC, MAPDES(SIZE + 2)
); 
unless  (12 <= GRUSE[DR] && GRUSE[DR] <= 13 && GRINF1[DR] ==   BASE) PSF1(LDA, 1, PTROFFSET(  BASE)
); 
  GRUSE[DR] = SIZE + 11;   GRINF1[DR] =   BASE; 
  ACCESS = 1;   AREA = 0; 

} else   AREA = AREACODE(); 
return; 
MOD_2://ACCESS=0FETCH


if  (SIZE > 2 && Z == 5 && PARMCHK == 0) {   NEST = -1; return;  }
MOD_10://ACCESS=2FETCH


if  (GRUSE[REG] >= 9 && NAMEP > 0)  {

if  (GRINF1[REG] == NAMEP && GRUSE[REG] & 255 == 9 || GRINF2[REG] == NAMEP && GRUSE[REG] >> 16 == 9)  {

if  (REGISTER[REG] != 0) BOOTOUT(REG); 
  NEST = REG; return; 

}


}

  TOTHER = REG ^ 7; 
if  (GRUSE[TOTHER] >= 9 && NAMEP > 0)  {

  KK = GRINF1[TOTHER]; 
if  (KK == NAMEP && GRUSE[TOTHER] & 255 == 9 || GRINF2[TOTHER] == NAMEP && GRUSE[TOTHER] >> 16 == 9)  {

if  (REG == BREG && REGISTER[BREG] == 0)  {

PF1(ST, 0, BREG, 0); //ACCTOBRGE


  GRUSE[REG] = GRUSE[TOTHER]; 
  GRINF1[REG] = GRINF1[TOTHER]; 
  GRINF2[REG] = GRINF2[TOTHER]; 
  NEST = REG; 
return; 

}

if  (REG == ACCR && Z == 2)  {

  ACCESS = 0;   AREA = 7; 
  SIZE = 4;   DISP = 0; 

}


}


}

if  (1 <= SIZE && SIZE <= 2 && ACCESS == 0)  {
//BYTES


unless  (GRUSE[DR] == SIZE + 11) PF1(  LDTB, 0, PC, MAPDES(SIZE + 2)
); 
unless  (12 <= GRUSE[DR] && GRUSE[DR] <= 13 && GRINF1[DR] ==   BASE) PSF1(LDA, 1, PTROFFSET(  BASE)
); 
  GRUSE[DR] = SIZE + 11;   GRINF1[DR] =   BASE; 
if  (Z == 5 && PARMCHK == 0)  {

  ACCESS = 1;   AREA = 0;   NEST = -1; return; 

}

GETINACC(REG, 1, 1, 0, DISP); 
if  (PARMCHK != 0 && SIZE == 2) TESTASS(REG, TYPE, SIZE); 
  NEST = REG; return; 

}

MOD_14://ACCESS=3FETCH


if  (ACCESS >= 2 && AREA == 7 || GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF) {   AREA = 7;   DISP = 0;  } else   AREA = AREACODE(); 
DRFETCH: 
GETINACC(REG, SIZE >> 2, ACCESS, AREA, DISP); 
if  (PARMCHK == 1 && SIZE != 1) TESTASS(REG, TYPE, SIZE); 
if  (ACCESS == 0 || ACCESS == 2 && NAMEP > 0) {   GRUSE[REG] = 9;   GRINF1[REG] = NAMEP;  }
if  (ACCESS >= 2 && NAMEP > 0) {   GRUSE[DR] = 7;   GRINF1[DR] = NAMEP & 0xFFFF;  }
  NEST = REG; return; 
MOD_3://ACCESS=0SETDESCRIPTOR


unless  (REG == ACCR || REG == DR) ABORT(); 
if  (TYPE == 3)  {

GETINACC(REG, 2, 0, AREACODE()
, DISP - 8); //PTRBEFORESTART


return; 

} else   JJJ = PARAMDES(PREC); 

if  (REG == ACCR)  {

GETINACC(REG, 1, 0, LNB, PTROFFSET(  BASE)
); 
  OP1 = IAD;   OP2 =   LUH; 

} else {

PSF1(LDA, 1, PTROFFSET(  BASE)
); 
  OP1 = INCA;   OP2 =   LDTB; 

}

PSF1(OP1, 0, DISP); 
PF1(OP2, 0, PC, JJJ); 
  GRUSE[REG] = 0; 
return; 
MOD_4://ACCESS=1FETCHADDRESS


  JJ = NUMMOD; 
if  (PREC > 4)   JJ = JJ * BYTES[PREC]; //HALFCOMEWITHBYTEMODIFIER


goto MD20; 
MOD_20://ACCESS=5FETCHADDRESS


  JJ = NUMMOD + XDISP; 
MD20: GETINACC(REG, 1, 0, AREACODE()
, DISP + 4); //BACKHALFOFDESCTR


if  (REG == ACCR)   OP1 = IAD;  else   OP1 = ADB; 
unless  (JJ == 0) PSF1(OP1, 0, JJ); 
return; 
MOD_7://ACCESS=1SETDESCRIPTOR


  JJ = NUMMOD; 
if  (PREC > 4)   JJ = JJ * BYTES[PREC]; //HALFCOMEWITHBYTEMODIFIER


GETINACC(REG, 2, 0, AREACODE()
, DISP); //DESCTR


if  (REG == ACCR)   OP1 = IAD;  else   OP1 = INCA; 
unless  (JJ == 0) PSF1(OP1, 0, JJ); 
return; 
MOD_5://ACCESS=1STORE


MOD_6://ACCESS=1FETCH


if  (NUMMOD == 0) {   ACCESS = 2; goto MOD[KK + 8];  }

unless  (GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF) GETINACC(DR, 2, 0, AREACODE()
, DISP); 
if  (NAMEP > 0) {   GRUSE[DR] = 7;   GRINF1[DR] = NAMEP & 0xFFFF;  }
  AREA = 0;   DISP = NUMMOD; 
if  (Z == 2) goto DRFETCH; 
return; 
MOD_12://ACCESS=3FETCHADDRESS


  JJJ = BYTES[PREC]; 
//


//REMEMBERHALFINTEGERSREADYSCALEDBYVMYORINCANAME


//


unless  (JJJ == 1 || PREC == 4) { PSF1(  MYB, 0, JJJ);   GRUSE[BREG] = 0;  }
MD12: if  (REG == BREG)  {

if  (AREA == 7)  {

PF1(INCA, 0, BREG, 0); 
  GRUSE[DR] = 0; 
PF1(LB, 2, 0, 11); //DRBTMHALFTOBVIAIMAGESTOREINSTRUCTION



} else PF1(ADB, 0, AREACODE()
, DISP + 4); 
  GRUSE[BREG] = 0; 
return; 

}

MOD_8://ACCESS=2FETCHADDRESS


if  (AREA == 7) GETINACC(REG, 1, 2, 0, 11);  else GETINACC(REG, 1, 0, AREACODE()
, DISP + 4); 
if  (ACCESS & 3 == 3) PF1(IAD, 0, BREG, 0); 
return; 
MOD_9://ACCESS=2STORE


MOD_13://ACCESS=3STORE


if  (AREA == 7) {   DISP = 0; return;  }
if  (GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF) {   AREA = 7;   DISP = 0;  } else   AREA = AREACODE(); 
return; 
MOD_11://ACCESS=2SETDESCRIPTOR


if  (AREA == 7)  {

unless  (REG == DR) COPYDR(); 
return; 

}

GETINACC(REG, 2, 0, AREACODE()
, DISP); 
return; 
MOD_15://ACCESS=3SETDESCRIPTOR


unless  (AREA == 7) GETINACC(DR, 2, 0, AREACODE()
, DISP); 
if  (PREC == 4 || TYPE == 3 && PARMARR == 0)   JJ = INCA;  else   JJ = MODD; 
PF1(JJ, 0, BREG, 0); 
if  (REG != DR) COPYDR(); 
  GRUSE[DR] = 0; 
return; 
MOD_17://ACCESS=4STORE


MOD_18://ACCESS=4FETCH


if  (SIZE == 1) {   DISP = DISP - 8; goto MD2526;  }
  DISP = DISP + XDISP; 
  ACCESS = 0; 
goto MOD[KK]; //REDUCESTOACCESS=0


MOD_36://ACCESS=9FETCHADDRESS


MOD_37://ACCESS=9STORE


MOD_38://ACCESS=9FETCH


MOD_39://ACCESS=9SETDESCRIPTOR


  XYNB = BASEREG(8, NAMEP & 0xFFFF); 
  DISP = NUMMOD + XDISP;   AREA = XYNB; 
  ACCESS = 3;   NAMEP = 0; 
goto MOD[KK + 8]; //HASREDUCEDTOACCESS=2


MOD_16://ACCESS=4FETCHADDRESS


  DISP = DISP - 8; 
MOD_24://ACCESS=6FETCHADDRESS


GETINACC(REG, 1, 0, AREACODE()
, DISP + 4); 
if  (REG == BREG)   KK = ADB;  else   KK = IAD; 
unless  (XDISP == 0) PSF1(KK, 0, XDISP); 
return; 
MD2526: 
MOD_25://ACCESS=6STORE


MOD_26://ACCESS=6FETCH


if  (SIZE > 2)  {

  XYNB = BASEREG(8, NAMEP & 0xFFFF); 
  AREA = XYNB;   ACCESS = 0; 
  DISP = XDISP; goto MOD[KK]; 

}

if  (SIZE == 1)  {
//SIZE=1FORBYTES


unless  (GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF) PSORLF1(LD, 0, AREACODE()
, DISP); 

} else {
//SIZE=2FORHALFS


unless  (GRUSE[DR] == 13 || GRUSE[DR] == 15) PF1(  LDTB, 0, PC, MAPDES(4)
); 
unless  (NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF && GRUSE[DR] == 7 || GRUSE[DR] == 15) PSORLF1(LDA, 0, AREACODE()
, DISP + 4); 

}

  GRUSE[DR] = 0; 
if  (NAMEP > 0) {   GRUSE[DR] = 8 * SIZE - 1;   GRINF1[DR] = NAMEP & 0xFFFF;  }
  ACCESS = 1;   AREA = 0; 
  DISP = XDISP; 
if  (DISP == 0 && ACCESS == 1) {   AREA = 7;   ACCESS = 2;  }
if  (Z == 2) goto DRFETCH; 
return; 
MOD_23://ACCESS=5SETDESCRIPTOR


  XDISP = NUMMOD + XDISP; 
goto MD31; 
MOD_19://ACCESS=4SETDESCRIPTOR


  DISP = DISP - 8; 
MOD_27://ACCESS=6SETDESCRIPTOR


MOD_31://ACCESS=7SETDESRCPTOR


MD31: GETINACC(DR, 2, 0, AREACODE()
, DISP); 
unless  (XDISP == 0) PSF1(INCA, 0, XDISP); 
if  (ACCESS == 7) PF1(INCA, 0, BREG, 0); 
if  (TYPE == 3 || TYPE == 5) PSORLF1(LDB, 0, 0, ACC);  else PF1(  LDTB, 0, PC, PARAMDES(PREC)
); 
if  (REG != DR) COPYDR(); 
return; 
MOD_28://ACCESS=7FETCHADDRESS


unless  (XDISP == 0) { PSF1(ADB, 0, XDISP);   GRUSE[BREG] = 0;  }
  ACCESS = 3; goto MD12; 
MOD_29://ACCESS=7STORE


MOD_30://ACCESS=7FETCH


MOD_21://ACCESS=5STORE


MOD_22://ACCESS=5FETCH


if  (1 <= SIZE && SIZE <= 2)  {

if  (SIZE == 1)  {

unless  (GRUSE[DR] == 7 && NAMEP > 0 && GRINF1[DR] == NAMEP & 0xFFFF) PSORLF1(LD, 0, AREACODE()
, DISP); 

} else {
//SIZE=2HALFS


unless  (NAMEP >= 0 && GRINF1[DR] == NAMEP & 0xFFFF && GRUSE[DR] == 7 || GRUSE[DR] == 15) PSORLF1(LDA, 0, AREACODE()
, DISP + 4); 
unless  (GRUSE[DR] == 13 || GRUSE[DR] == 15) PF1(  LDTB, 0, PC, MAPDES(4)
); 

}

  GRUSE[DR] = 0; 
if  (NAMEP > 0) {   GRUSE[DR] = 8 * SIZE - 1;   GRINF1[DR] = NAMEP & 0xFFFF;  }
if  (ACCESS == 7)  {

if  (XDISP != 0) PSF1(ADB, 0, XDISP); 
  ACCESS = 3;   AREA = 7; 
  DISP = 0; 
  GRUSE[BREG] = 0; 

} else {
//ACCESS=5


  DISP = XDISP + NUMMOD; 
  ACCESS = 1;   AREA = 0; 

}

  NAMEP = 0; 
if  (Z == 2) goto DRFETCH; 
return; 

}

if  (ACCESS == 7)  {

PSORLF1(ADB, 0, AREACODE()
, DISP + 4); 
  GRUSE[BREG] = 0; 
  XYNB = XORYNB(0, 0); 
PF1(LDCODE[XYNB], 0, BREG, 0); 
  GRUSE[XYNB] = 0; 
  DISP = XDISP; 

} else {
//ACCESS=5


  XYNB = BASEREG(8, NAMEP & 0xFFFF); 
  DISP = NUMMOD + XDISP; 

}

  AREA = XYNB;   ACCESS = 0; 
  NAMEP = 0; 
goto MOD[KK]; 
MOD_32://ACCESS=8FETCHADDRESS


MOD_33://ACCESS=8STORE


MOD_34://ACCESS=8FETCH


MOD_35://ACCESS=8SETDESCRIPTOR


  DISP = DISP + XDISP; 
  NAMEP = 0; 
  ACCESS = 2; goto MOD[KK + 8]; 
MOD_40://ACCESS=10FETCHADDRESS


MOD_41://ACCESS=10STORE


MOD_42://ACCESS=10FETCH


MOD_43://ACCESS=10SETDESCRIPTOR


  XYNB = BASEREG(8, NAMEP & 0xFFFF); 
  AREA = XYNB;   ACCESS = 2;   DISP = XDISP; 
  NAMEP = 0; 
goto MOD[KK + 8]; 
MOD_44://ACCESS=11FETCHADDRESS


MOD_45://ACCESS=11STORE


MOD_46://ACCESS=11FETCH


MOD_47://ACCESS=11SETDESCRIPTOR


PSORLF1(ADB, 0, AREACODE()
, DISP + 4); 
  GRUSE[BREG] = 0; 
  XYNB = XORYNB(0, 0); 
PF1(LDCODE[XYNB], 0, BREG, 0); 
  GRUSE[XYNB] = 0; 
  NAMEP = 0;   AREA = XYNB; 
  ACCESS = 2;   DISP = XDISP; goto MOD[KK + 8]; 
int BASEREG(int GRUSEVAL, int GRINFVAL) {
//***********************************************************************


//*SETSABASEREGISTERFORRECORDWHOSEPOINTERISATAREA&DISP*


//***********************************************************************


int XYNB;

if  (NAMEP <= 0) {   GRUSEVAL = 0;   GRINFVAL = 0;  }
  XYNB = XORYNB(GRUSEVAL, GRINFVAL); 
unless  (GRUSE[XYNB] == GRUSEVAL && GRUSEVAL > 0 && GRINF1[XYNB] == GRINFVAL) PSORLF1(LDCODE[XYNB], 0, AREACODE()
, DISP + 4); 
  GRUSE[XYNB] = GRUSEVAL; 
  GRINF1[XYNB] = GRINFVAL; 
  GRAT[XYNB] = CA; 
return XYNB; 

} /* End of Begin/Rt/Fn/Map depth=4 */;


} /* End of Begin/Rt/Fn/Map depth=3 */;

void CRCALL(int RTNAME) {
//***********************************************************************


//*COMPILEAROUTINEORFNCALL*


//*THEPROCEDURECONSISTOFTHREEPARTS:-*


//*A)PLANTTHEPARAMETER(IFANY)*


//*B)ENTERTHEROUTINEORFN*


//*C)FORGETANYREGISTERSWHICHHOLDENTITIESTHATCANBE*


//*ALTEREDBYTHECALLEDPROCEDURE.*


//***********************************************************************


/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
int II; int III; int QQQ; int DLINK; int JJ; int JJJ; int NPARMS; int PT; int LP; int PSIZE; int TWSP; int   FPTR; int TYPEP; int PRECP; int NAMP; int TL; int MOVEPTR; int CLINK; int RDISP;

/*pending name*/recfm  *LCELL;
//(LISTF)


  PT =   PTYPE;   JJJ = J;   TL = OLDI; 
  TWSP = 0; 
  LP = I;   CLINK = K; 
  TYPEP = TYPE;   PRECP = PREC;   NAMP = NAM; 
  RDISP = MIDCELL; 
//


//NOWCHECKTHATTHERIGHTNUMBEROFPARAMETERSHAVEBEENPROVIDED


//


TESTAPP(NPARMS); 
  P = P + 2; 
if  (KFORM != NPARMS)  {

FAULT(19, RTNAME); //WRONGNOOFPARAMETERSGIVEN


SKIPAPP();   P = P - 1; 
return; 

}

//


SAVEIRS(); //STACKANYIRSBEFORSASF


PSF1(PRCL, 0, 4); 
    FPTR = 20; 
goto FIRSTPARM; 
//


NEXTPARM:   CLINK = LCELL; 
FIRSTPARM: if  (CLINK == 0) goto ENTRYSEQ; //DEPARTATONCEIFNOPARAMS


  LCELL = ASLIST[CLINK]; 
  PSIZE = LCELL >> 16; 
  P = P + 1; 
    PTYPE = LCELL >> 16; 
UNPACK(); 
  II = TYPE;   III = PREC; 
  JJ = (NAM << 1 | ARR) & 3; 
unless  (JJ == 0 && ROUT == 0 || A == 4 && A == 1 && A == 2)  {

FAULT(22, 0); SKIPEXP(); 
goto NEXTPARM; 

}

//


//RTTYPEPARAMS,PASS4WORDSSETUPASCODEDESC,DUMMY&ENVIRONMENT


//


if  (ROUT == 1)  {

  II =   PTYPE;   P = P + 5; 
CNAME(13, ACCR); //SETUP4WDSINACC


if  (II & 255 !=   PTYPE & 255) FAULT(22, 0); //PREC&TYPESIMILAR


  P = P + 1;   MOVEPTR = 16; 
goto STUFF; 

}

goto FPD[JJ]; 
FPD_0://VALUEPARAMETERS


if  (TYPE == 5)  {

CSTREXP(17, DR); //TOWKAREA&KEEPWKAREA


PSF1(LDB, 0, PSIZE); 
if  (REGISTER[ACCR] == 3) { PF1(ST, 0, TOS, 0);   REGISTER[ACCR] = 0;  }
PF1(STD, 0, TOS, 0); 
PUSH(TWSP, VALUE, 268, 0); //RETURNWKAREAATCALL


    FPTR =   FPTR + 8; goto NEXTPARM; 

} else {

if  (PREC == 6)   JJ = 3;  else   JJ = TYPE; 
CSEXP(ACCR, III << 4 | II); 
  MOVEPTR = ((BYTES[III] + 3) & (-4)); 

}

goto STUFF; 
//


FPD_2://NAMEPARAMETERS


  P = P + 5; 
  FNAME = FROMAR2(P); 
COPYTAG(FNAME); 
if  (II != 0 || TYPE == 0)  {

CNAME(3, ACCR); 
unless  (II == TYPE && III == PREC) FAULT(22, FNAME); 

} else {

CNAME(4, ACCR); 
if  (TYPE <= 2)   JJ = PREC << 27 | TYPE;  else   JJ = (0x1A << 24) + ACC; 
STORECONST(III, 4, ADDR(JJ)
); 
PF1(  LUH, 0, PC, III); 

}

  P = P + 1;   MOVEPTR = 8; 
goto STUFF; 
//


FPD_1:FPD_3://ARRAYNAME(&VALUE)


//


//FORARRAYNAMEPARAMETERSTHENOOFDIMENSIONSOFTHEARRAYIS


//DEDUCEDFROMTHEFIRSTCALLANDSTOREDINSTREAM3OFTHEPARAMETER


//LIST.ONANYSUBSEQUENTCALLONLYARRAYSOFTHESAMEDIMENSIONCAN


//BEPASSED


//


  P = P + 5; 
CNAME(12, ACCR); 
GETINACC(ACCR, 4, 0, AREACODE()
, DISP); 
  P = P + 1;   MOVEPTR = 16; 
unless  (1 <= ARR && ARR <= 2 && II == TYPE && III == PREC) { FAULT(22, 0); goto STUFF;  }
  QQQ = FROM1(TCELL)
 & 15; //DIMENSIONOFACTUAL(IFKNOWN)


  JJ = LCELL & 15; //DIMENSIONOFFORMAL


if  (JJ == 0) {   JJ = QQQ;   LCELL = LCELL | JJ;  }
if  (QQQ == 0) {   QQQ = JJ; REPLACE1(TCELL, FROM1(TCELL)
 | JJ);  }
unless  (JJ == QQQ) FAULT(22, 0); 
STUFF:   REGISTER[ACCR] = 3; 
    FPTR =   FPTR + MOVEPTR; 
goto NEXTPARM; 
ENTRYSEQ: //CODEFORRTENTRY


if  (REGISTER[ACCR] == 3) { PF1(ST, 0, TOS, 0);   REGISTER[ACCR] = 0;  }
  J = JJJ; 
//


//RETURNANYSTRINGWSPACEHERE.CANBEUXEDAGAINFORRESULT


//


while  (TWSP != 0) {
POP(TWSP, QQQ, JJ, III); 
RETURNWSP(QQQ, 268); 
}
//


//STRINGFNSNEEDAWORKAREATORETURNTHEIRRESULTS


//


if  (TYPEP == 5 && NAMP <= 1)  {

GETWSP(QQQ, 268); 
  STRFNRES = QQQ; //FORCSTREXPTOUSE


  III = 0x18000100;   QQQ = QQQ + 8; 
STORECONST(JJ, 8, ADDR(III)
); 
PF1(LD, 0, PC, JJ); 
PSF1(INCA, 1, PTROFFSET(RBASE)
); 
PF1(STD, 0, TOS, 0); 
    FPTR =   FPTR + 8; 

}

//


//ORDINARYROUTINESWILLANDRTPARAMSMAYREQUIREANEXTRAPARAMETER


//BEINGLNBFORTHELEVELOFROUTINEDECLARATIONTOBESTACKED


//


if  (JJJ == 14)  {
//EXTERNAL


  NMDECS[  LEVEL] = NMDECS[  LEVEL] | 2; 
  II = SETXORYNB(-1, -1); 
PSF1(RALN, 0,   FPTR >> 2); 
PF1(CALL, 2, II, RDISP); 

} else {

if  (NAMP & 1 == 0)  {
//INTERNALRTCALLS


if  (LP == 0)  {

PSF1(LD, 1, 12); 
unless  (RDISP == 0) PSF1(INCA, 0, RDISP); 
PSF1(RALN, 0,   FPTR >> 2); 
PF1(CALL, 2, 7, 0); 

} else {
//NORMALINTERNALCALL


  II = SETXORYNB(XNB, LP); 
PSF1(RALN, 0,   FPTR >> 2); 
RTJump(CALL, ASLIST[TAGS[RTNAME]]); 

}


} else {

  AREA = -1;     BASE = LP; 
  AREA = AREACODE(); 
GETINACC(DR, 2, 0, AREA, RDISP); //DESCRTODR


PSORLF1(LXN, 0, AREA, RDISP + 12); //XNBTOENVIRONMENT


PSF1(RALN, 0,   FPTR >> 2); //RAISEFORNORMALPARAMS


PF1(CALL, 2, 7, 0); //ANDENTERVIADESCRPTRINDR



}


}

FORGET(-1); 
  ROUT = 1;   TYPE = TYPEP;   NAM = NAMP; 
  PREC = PRECP;     PTYPE = PT; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void RTJump(int CODE, int *LINK) {
//***********************************************************************


//*PLANTSACALLTOTHEAPPROPIATEENTRYADDRESSINLINK*


//*IFROUTINEHASBEENSPECIFIEDBUTNOTDESCRIBEDTHEJUMPCAN*


//*NOTBEPLANTEDANDISLINKEDINTOALISTHEADEDBYLINK*


//*TOAWAITFILLING(BY' RHEAD ')WHENTHEBODYISGIVEN.*


//*THEFORMATOFANENTRYIS:-*


//*S1(32BITS)=INSTRNTOBEPLANTED*


//*S2(32BITS)=ADDRESSOFJUMPTOBEFILLED*


//*THECODINGASSUMESI,J&OLDIARESETUPFORTHECALLEDROUTINE*


//***********************************************************************


int DP;

if  (J == 15)  {
//RTBODYNOTGIVENYET


PUSH(LINK, CODE << 24 | 3 << 23, CA, 0); 
PF1(CODE, 0, 0, 0); 

} else {
//BODYGIVENANDADDRESSKNOWN


  DP = LINK - CA; 
if  (CODE == CALL)   DP = DP / 2; //CALLWORKSINHALFWORDS!


PSF1(CODE, 0, DP); 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

int TSEXP(int *VALUE) {
/* TO DO: %SWITCH DECLARATION */
/*Q imp80-switch.h:4253*/
int PP; int REXP; int KK; int SIGN; int CT;

  TYPE = 1;   PP = P; 
  REXP = 2 - A; 
  P = P + 3; 
  SIGN = A; 
unless  (SIGN == 4 || A == 2) goto TYPED; 
goto SW[A]; 
SW_1://NAME


  P = P + 2; REDUCETAG(); 
goto TYPED; 
SW_2://CONSTANT


  CT = A;   TYPE = CT & 7; 
unless  (CT == 0x41 && SIGN != 3) goto TYPED; 
  KK = FROMAR2(P + 3); 
if  (REXP != 0 && A == CONCOP) {   TYPE = 5; goto TYPED;  }
unless  (REXP == 0 && 0 <= KK && KK <= 255) goto TYPED; 
  VALUE = KK; 
  P = P + 6; 
if  (SIGN != 2) return 1; 
  VALUE = -VALUE; return -1; 
SW_3://SUBEXPRN


TYPED:   P = PP; return 0; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void SKIPEXP(void) {
//***********************************************************************


//*SKIPSOVERTHEEXPRESSIONPOINTEDATBYP.USEDFORERROR*


//*RECOVERYANDTOEXTRACTINFORMATIONABOUTTHEEXPRESSION.*


//***********************************************************************


int OPTYPE; int PIN; int J;

  PIN = P; 
  P = P + 3; //TOP<+''>


do {
//DOWNTHELISTOFOPERATORS


  OPTYPE = A; //ALTOFP<OPERAND>


  P = P + 2; 
if  (OPTYPE == 0 || OPTYPE > 3) ABORT(); 
if  (OPTYPE == 3) SKIPEXP(); //SUBEXPRESSIONS


//


if  (OPTYPE == 2)  {
//OPERANDISACONSTANT


  J = A & 7; //CONSTANTTYPE


if  (J == 5)   P = P + A + 6;  else   P = P + 1 + BYTES[A >> 4]; 

}

//


if  (OPTYPE == 1)  {
//NAME


  P = P - 1; 
do {   P = P + 3; SKIPAPP();  }until  (A == 2) //TILLNOENAME


  P = P + 1; 

}

//


  P = P + 1; 
if  (A == 2) break; //NOMORERESTOFEXP


} while (1);

} /* End of Begin/Rt/Fn/Map depth=3 */;
//OFROUTINESKIPEXP


void SKIPAPP(void) {
//***********************************************************************


//*SKIPSACTUALPARAMETERPART*


//*PISONALTOFP<APP>ATENTRY*


//***********************************************************************


int PIN;

  PIN = P; 
while  (A == 1) {   P = P + 1; SKIPEXP();  }
  P = P + 1; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void NOAPP(void) {
  P = P + 2; 
if  (A == 1)  {
//<APP>PRESENT


FAULT2(17, 0, FROMAR2(P - 2)
); 
SKIPAPP(); 

} else   P = P + 1; //PNOWPOINTSTOENAME



} /* End of Begin/Rt/Fn/Map depth=3 */;

void TESTAPP(int *NUM) {
//***********************************************************************


//*THISROUTINECOUNTSTHENUMBEROFACTUALPARAMETERS*


//*WHICHITRETURNSINNUM.*


//***********************************************************************


int PP; int Q;

  Q = 0;   PP = P;   P = P + 2; //PONNAMEATENTRY


while  (A == 1) {
//NO(MORE)PARAMETERS


  P = P + 1;   Q = Q + 1; 
SKIPEXP(); 
}
  P = PP;   NUM = Q; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void TESTASS(int REG, int TYPE, int SIZE) {
//***********************************************************************


//*TESTACCORBFORTHEUNASSIGNEDPATTERN*


//***********************************************************************


int OPCODE; int A; int D;

if  (TYPE == 5)  {

unless  (REG == DR) return; 
PF1(STD, 0, TOS, 0); 
PF2(SWEQ, 1, 1, 0, 0, UNASSPAT & 255); 

} else {

if  (REG == BREG)   OPCODE = CPB;  else   OPCODE = UCP; 
if  (SIZE == 16) PF1(STUH, 0, TOS, 0); 
if  (SIZE == 2) {   A = 0;   D = UNASSPAT >> 16;  } else {   A = PC;   D = PLABS[1];  }
PF1(OPCODE, 0, A, D); 
if  (SIZE == 16) PF1(  LUH, 0, TOS, 0); 

}

PPJ(8, 5); //BEERRORROUTINE5


if  (TYPE == 5) PF1(LD, 0, TOS, 0); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void GETWSP(int *PLACE, int SIZE) {
//***********************************************************************


//*FINDORCREATEATEMPORARYVARIABLEOF'SIZE'WORDS*


//***********************************************************************


int J; int K; int L;

if  (SIZE > 4)   SIZE = 0; 
POP(AVLWSP[SIZE][  LEVEL], J, K, L); 
if  (K <= 0)  {
//MUSTCREATETEMPORARY


if  (SIZE > 1) ODDALIGN(); 
  K = N; 
if  (SIZE == 0)   N = N + 268;  else   N = N + (SIZE << 2); 

}

  PLACE = K; 
unless  (SIZE == 0) PUSH(TWSPHEAD, K, SIZE, 0); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void RETURNWSP(int PLACE, int SIZE) {
if  (SIZE > 4)   SIZE = 0; 
if  (PLACE < 511) PUSH(AVLWSP[SIZE][  LEVEL], 0, PLACE, 0);  else INSERTATEND(AVLWSP[SIZE][  LEVEL], 0, PLACE, 0); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void SETLINE(void) {
//***********************************************************************


//*UPDATETHESTATEMENTNO*


//***********************************************************************


int XYNB; int I; int LDI; int STI; int REG;

  LDI = LSS;   STI = ST;   REG = ACCR; 
if  (PARMDBUG | PARMPROF == 0 && GRUSE[ACCR] != 0 && GRUSE[BREG] == 0 || GRUSE[BREG] == 5)  {

  LDI = LB;   STI = STB;   REG = BREG; 

}

if  (PARMLINE | PARMDBUG != 0) PSF1(LDI, 0,   LINE); 
if  (PARMLINE == 1)  {

PSF1(STI, 1, DIAGINF[  LEVEL]); 
  GRUSE[REG] = 5;   GRINF1[REG] =   LINE; 

}

if  (PARMDBUG != 0) PPJ(0, 3); 
if  (PARMPROF != 0)  {

  XYNB = SETXORYNB(-1, 0); //TOPLT


PSF1(LSS, 0, 1); 
  I = PARMPROF + 8 + 4 *   LINE; 
PF1(IAD, 0, XYNB, I); 
PF1(ST, 0, XYNB, I); 
  GRUSE[ACCR] = 0; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void FORGET(int REG) {
int L; int U;

  L = REG;   U = L; 
if  (L < 0) {   L = 0;   U = 7;  }
for (REG = L; REG != U; REG += 1) {
if  (REGISTER[REG] >= 0) {   GRUSE[REG] = 0;   GRINF1[REG] = 0;  }
}

} /* End of Begin/Rt/Fn/Map depth=3 */;

void SAVEIRS(void) {
//***********************************************************************


//*DUMPACCAND-ORBONTOTHESTACK.USEDBEFORECALLINGFNS*


//*INEXPRESSIONS.*


//***********************************************************************


if  (REGISTER[ACCR] == 1 && 1 == REGISTER[BREG]) ABORT(); 
if  (REGISTER[ACCR] >= 1) BOOTOUT(ACCR); 
if  (REGISTER[BREG] >= 1) BOOTOUT(BREG); 
if  (REGISTER[DR] >= 1) BOOTOUT(DR); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void BOOTOUT(int REG) {
//***********************************************************************


//*REMOVETEMPORARIESFROMREGINTOLOCALORONTOSTACK*


//*ITISVITALTHATACCISSTACKEDFIRSTBEFOREBORDR*


//*OTHERWISEMIXUPSOCCURWHENPASSINGMULTI-DIMENSIONARRAY*


//*ELEMENTSWITHFNSASSUBSCRIPTSASVALUESCALARS*


//***********************************************************************


const char BOOTCODE[(7)-(0)+1]
;
$define BOOTCODE[N0] BOOTCODE[(N0)-(0)]
 = 
0x48, 
0x58, 
0x5C, 
[ LOW ... HIGH ] = 0, 
0x5A;

int CODE;

/*pending name*/recfm  *R;
//(RD)


  CODE = BOOTCODE[REG]; 
unless  (1 <= REGISTER[REG] && REGISTER[REG] <= 3 && CODE != 0) ABORT(); 
  R = ; 
if  (REGISTER[REG] == 2)  {

if  (R == 0) GETWSP(R, BYTES[R >> 4] >> 2); 
PSF1(CODE, 1, R); 

} else {

if  (REG != ACCR && REGISTER[ACCR] == 1 || REGISTER[ACCR] == 3) BOOTOUT(ACCR); 
PF1(CODE, 0, TOS, 0); 

}

CHANGERD(REG); 
  REGISTER[REG] = 0; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void COPYDR(void) {
//***********************************************************************


//*COPYTHEDRTOACCSAVINGANYTHINGINACC*


//***********************************************************************


if  (REGISTER[ACCR] != 0) BOOTOUT(ACCR); 
PSF1(CYD, 0, 0); 
  GRUSE[ACCR] = 0; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void CHANGERD(int REG) {
//***********************************************************************


//*CHANGEARESULTDESCRIPTORWHENOPERANDISSTACKED*


//***********************************************************************


/*pending name*/recfm  *OPND;
//(RD)


unless  (1 <= REGISTER[REG] && REGISTER[REG] <= 3) ABORT(); //I-RORPARAM


  OPND = ; 
if  (REGISTER[REG] == 1)  {
//CHANGERESULTDESCRIPTOR


unless  (OPND == 9 && OPND >> 4 == REG) ABORT(); 
  OPND = 8; //CHANGETO'STACKED'


  OPND = TOS << 4; 

}

if  (REGISTER[REG] == 2)  {

  OPND = 7;   OPND = LNB << 4; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void STORETAG(int KK, int SLINK) {
int Q; int QQ; int QQQ; int I; int TCELL;

/*pending name*/recfm  *LCELL;
//(LISTF)


  TCELL = TAGS[KK]; 
  Q =   PTYPE << 16 |   LEVEL << 8 | RBASE << 4 | J; 
//ABORTunless(KFORM!ACC)>>16=0


  QQQ = SLINK << 16 | KFORM; 
  QQ = SNDISP << 16 | ACC; 
if  (FROM1(TCELL)
 >> 8 & 63 ==   LEVEL)  {

FAULT(7, KK); 
  Q = FROM1(TCELL)
 & 0xC000 | Q; //COPYUSEDBITSACCROSS


REPLACE123(TCELL, Q, QQ, QQQ); 

} else {

  I = ASL; if  (I == 0)   I = MORESPACE(); 
  LCELL = ASLIST[I]; 
  ASL = LCELL; 
  LCELL = TAGS[KK] | NAMES[  LEVEL] << 18; 
  LCELL = Q;   LCELL = QQ;   LCELL = QQQ; 
  TAGS[KK] = I; 
  NAMES[  LEVEL] = KK; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void COPYTAG(int KK) {
int QQQ;

/*pending name*/recfm  *LCELL;
//(LISTF)


  TCELL = TAGS[KK]; 
if  (TCELL == 0)  {
//NAMENOTSET


  TYPE = 7;     PTYPE = 0x57;   PREC = 5; 
  ROUT = 0;   NAM = 0;   ARR = 0;   LITL = 0;   ACC = 4; 
  I = -1;   J = -1;   K = -1;   OLDI = -1; 

} else {

  LCELL = ASLIST[TCELL]; 
  KK = LCELL; 
  LCELL = KK | 0x8000; 
  MIDCELL = LCELL; 
  QQQ = LCELL; 
    PTYPE = KK >> 16;   USEBITS = KK >> 14 & 3; 
  OLDI = KK >> 8 & 63;   I = KK >> 4 & 15;   J = KK & 15; 
  SNDISP = (MIDCELL & 0xFFFF0000) / 0x10000; 
  ACC = MIDCELL & 0xFFFF; 
  K = QQQ >> 16; 
  KFORM = QQQ & 0xFFFF; 
  LITL =   PTYPE >> 14; 
  ROUT =   PTYPE >> 12 & 3; 
  NAM =   PTYPE >> 10 & 3; 
  ARR =   PTYPE >> 8 & 3; 
  PREC =   PTYPE >> 4 & 15; 
  TYPE =   PTYPE & 15; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void REDUCETAG(void) {
//***********************************************************************


//*ASCOPYTAGFORNAMEATA(P)EXCEPT:-*


//*1)SPECIALNAMESHAVETHEIRCORRECTPREC&TYPESUBSTITUTED*


//*2)RECORDELEMENTSHAVETHESUBNAMEPARTICULARSRETURNED*


//***********************************************************************


int SUBS; int QQ; int PP;

COPYTAG(FROMAR2(P)
); 
if  (  PTYPE == SNPT)  {

    PTYPE = TSNAME[K]; UNPACK(); 
  ROUT = 1; 

}
//TOAVOIDCHECKINGPARAMS


if  (TYPE == 3)  {

  PP = P;   QQ = COPYRECORDTAG(SUBS);   P = PP; 

}


} /* End of Begin/Rt/Fn/Map depth=3 */;

void REPLACETAG(int KK) {
int P; int Q;

  P = TAGS[KK]; 
  Q =   PTYPE << 16 | USEBITS << 14 | OLDI << 8 | I << 4 | J; 
REPLACE1(P, Q); 
REPLACE3(P, K << 16 | KFORM); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

//LAYOUTOFPTYPE


//*************


//PTYPEREQUIRES16BITSTODEFINEAVARIABLEANDCANBEREGARDEDAS


//ASTWOBYTEINTEGERS:=


//UPPERONE(UPTYPE):=LITL<<6!ROUT<<4!NAM<<2!ARR


//LOWERONE(PTYPE):=PREC<<4!TYPE


//OFTEN(EGINEXPOP)ONLYTHELOWERPARTISREQUIREDASFUNCTIONS


//ETCAREPREFETCHEDANDSTACKED.


//LITL:=1=CONST,2=EXTERNAL,3=EXTRINSIC(ORDYNAMIC),0=NONEOFTHESE


//ROUT:=1FORROUTINEORFNORMAP,=0NONEOFTHESE


//NAM:=2FORMAPSAND'REFREFS',=1FORNAMES,=0DIRECTLYADDRESSED


//ARR:=1FORARRAYS=0SCALARS


//PRECISDESCRIPTORSIZECODEFOREACHPRECISION:-


//:=0BITS,=3BYTES,=5WORDS,=6D-WRDS,=7,QUADWRDS


//TYPE:=THEVARIABLETYPE


//:=0(TYPEGENERAL),=1INTEGER,=2REAL,=3RECORD


//:=4(RECORDFORMAT),=5STRING,=6LABEL/SWITCH.=7NOTSET


//


void UNPACK(void) {
  LITL =   PTYPE >> 14; 
  ROUT =   PTYPE >> 12 & 3; 
  NAM =   PTYPE >> 10 & 3; 
  ARR =   PTYPE >> 8 & 3; 
  PREC =   PTYPE >> 4 & 15; 
  TYPE =   PTYPE & 15; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void PACK(int *PTYPE) {
  PTYPE = ((((LITL << 2 | ROUT) << 2 | NAM) << 2 | ARR) << 4 | PREC) << 4 | TYPE; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void PPJ(int MASK, int N) {
//***********************************************************************


//*PLANTA'JCC MASK,PERMENTRY(N)'*


//*IFMASK=0THENPLANTAJLK*


//*IFMASK=-1THENPLANTACALLTOPERM*


//***********************************************************************


int VAL; int INSTRN; int CODE; int J;

/*pending name*/recfm  *LCELL;
//(LISTF)


if  (MASK == 0)   CODE = JLK;  else   CODE = CALL; 
if  (MASK > 0)   CODE = JCC; 
if  (MASK >= 16)   CODE =   JAT; 
if  (MASK >= 32)   CODE = JAF; 
  VAL = PLABS[N]; 
if  (MASK <= 0)   INSTRN = CODE << 24 | 3 << 23;  else   INSTRN = CODE << 24 | (MASK & 15) << 21; 
if  (VAL > 0)   INSTRN = INSTRN | ((VAL - CA) / 2) & 0x3FFFF;  else {

  LCELL = ASLIST[PLINK[N]]; 
  J = INSTRN | CA; //ONLY18BITSNEEDEDFORCA


if  (LCELL != 0) PUSH(PLINK[N], J, 0, 0);  else {

if  (LCELL == 0)   LCELL = J;  else   LCELL = J; 

}


}

PCONST(INSTRN); 
if  (MASK <= 0) FORGET(-1); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int SETXORYNB(int WHICH, int RLEV) {
//***********************************************************************


//*SETEXTRANAMEBASETOADDRESSROUTINELEVEL'RLEV'*


//*RLEV=0FOROWNS,=-1FORTHEPLTTHESEARETHESAME!BUTCODED*


//*SEPARATELYSOTHATTHEYCANBESEPARATEDIFNECESSARY*


//***********************************************************************


int USE; int INF; int OFFSET;

unless  (-1 <= RLEV && RLEV <= RLEVEL) ABORT(); 
if  (RLEV <= 0) {   USE = 3;   INF = 0;  } else {   USE = 4;   INF = RLEV;  }
if  (WHICH <= 0)   WHICH = XORYNB(USE, INF); 
if  (GRUSE[WHICH] == USE && GRINF1[WHICH] == INF) {   GRAT[WHICH] = CA; return WHICH;  }
  OFFSET = PTROFFSET(RLEV); 
PSF1(LDCODE[WHICH], 1, OFFSET); 
  GRUSE[WHICH] = USE;   GRINF1[WHICH] = INF;   GRAT[WHICH] = CA; 
return WHICH; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int XORYNB(int USE, int INF) {
//***********************************************************************


//*CHECKSIFXNBORYNBSETUP.IFNOTDECIDESWHICHTOOVERWRITE*


//***********************************************************************


if  (GRUSE[XNB] == USE && GRINF1[XNB] == INF) {   GRAT[XNB] = CA; return XNB;  }
if  (GRUSE[CTB] == USE && GRINF1[CTB] == INF) {   GRAT[CTB] = CA; return CTB;  }
if  (GRUSE[XNB] | GRUSE[CTB] == 0)  {
//BOTHREGSAREFREE


if  (USE == 3) return CTB; 
return XNB; 

}

//


//IFONLYONEFREETHENNOPROBLEM


if  (GRUSE[XNB] == 0) return XNB; 
if  (GRUSE[CTB] == 0) return CTB; 
//


//BOTHAREINUSE.THISISWORTHCAREFULCONSIDERATIONANDEXPERIMENT


//AVALUETABLEMAYBEUSEASMAYLOOKAHEAD.CURRENTLYTRYLRU


//


if  (GRAT[XNB] < GRAT[CTB]) return XNB; 
return CTB; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void ODDALIGN(void) {
//***********************************************************************


//*SETSNTOODDWORDBOUNDARY.SINCEPRECALLALSOSETSSFTOODD*


//*WORDBOUNDARYTHISMEANS64BITQUANTITIESARE64BITALIGNED*


//*ANDCANBEREFERNCEDINASINGLCORECYCLE*


//***********************************************************************


if  (N & 7 == 0) { RETURNWSP(N, 1);   N = N + 4;  }

} /* End of Begin/Rt/Fn/Map depth=3 */;

int PTROFFSET(int RLEV) {
//***********************************************************************


//*RETURNSOFFSETFROMLNBOFRELEVANTITEMINTHECURRENTDISPLAY*


//*WHICHENABLESTEXTTUALLEVEL'RLEV'TOBEADDRESSED*


//*AFUNCTIONISUSEDTOALLOWCHANGESINTHEDISPLAYFORMAT*


//***********************************************************************


if  (RLEV <= 0) return 16; 
return DISPLAY[RLEVEL] + ((RLEV - 1) << 2); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int AREACODE(void) {
//***********************************************************************


//*RETURNSTHEAREACODEFORROUTINELEVEL'BASE'LOADING*


//*XNBWHERETHISISNEEDED*


//***********************************************************************


if  (AREA < 0)  {

if  (  BASE == RBASE) {   AREA = LNB; return LNB;  }//LOCALLEVEL


  AREA = SETXORYNB(-1,   BASE); 

}

return AREA; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

int AREACODE2(int BS) {
//***********************************************************************


//*AVERSIONOFAREACODEWITHOUTSIDEEFFECTS!*


//***********************************************************************


if  (BS == RBASE) return LNB; 
return SETXORYNB(-1, BS); 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void GETINACC(int REG, int SIZE, int ACCESS, int AREA, int DISP) {
//***********************************************************************


//*LOADSTHEREGISTERSPECIFIEDARRANGINGFORAUTOMATIC*


//*STACKINGWHENTHISISNEEDED*


//*ITISVITALTHATACCISSTACKEDFIRSTBEFOREBORDR*


//*OTHERWISEMIXUPSOCCURWHENPASSINGMULTI-DIMENSIONARRAY*


//*ELEMENTSWITHFNSASSUBSCRIPTSASVALUESCALARS*


//***********************************************************************


int OPCODE;

if  (SIZE == 0)   SIZE = 1; //BITSABDBYTES!


//ABORTunlessREG=ACCRor(REG=DRandSIZE=2)or  (REG=BREGandSIZE=1)


if  (REG == DR)   OPCODE = LD;  else {

if  (REG == BREG)   OPCODE = LB;  else   OPCODE = LSS + (SIZE & 6); 

}

//


if  (REGISTER[REG] >= 1)  {

if  (REGISTER[REG] == 2 || ACCESS == 2 && AREA == 0) BOOTOUT(REG);  else {
//CANNOTSLSSISNONALLMCS


if  (REG != ACCR && REGISTER[ACCR] == 1 || REGISTER[ACCR] == 3) BOOTOUT(ACCR); 
CHANGERD(REG); 
  REGISTER[REG] = 0; 
if  (REG == ACCR)   OPCODE = OPCODE - 32;  else   OPCODE = OPCODE - 40; 

}


}

PSORLF1(OPCODE, ACCESS, AREA, DISP); 
if  (ACCESS >= 2 && 0 != AREA && AREA != 7)   GRUSE[DR] = 0; 
  GRUSE[REG] = 0; 

} /* End of Begin/Rt/Fn/Map depth=3 */;

void NOTEASSMENT(int REG, int ASSOP, int VAR) {
//***********************************************************************


//*NOTESTHEASSIGNMENTTOSCALAR'VAR'.THISINVOLVESREMOVING*


//*OLDCOPIESFROMREGISTERSTOAVOIDCONFUSINGOLDANDNEWVALUE*


//*ASSOP=1FOR'==',=2FOR'=',=3FOR'<-'*


//***********************************************************************


const int EEMASK = 0b100011110000000;
//MASKOFUSESRELEVANTTO==


const int EMASK = 0b100011000000000;
//MASKOFUSESRELEVANTTO=


const int NREGS = 5;

const int REGS = 16 * 16 * 16 * 16 * CTB + 16 * 16 * 16 * XNB + 16 * 16 * ACCR + 16 * BREG + DR;

int I; int USE1; int USE2; int II;

if  (VAR <= 0) return; 
if  (ASSOP == 1)  {

for (I = 0; I != 7; I += 1) {
  USE1 = GRUSE[I];   USE2 = USE1 >> 16;   USE1 = USE1 & 255; 
if  (EEMASK & 1 << USE2 != 0 && GRINF2[I] & 0xFFFF == VAR || GRINF2[I] >> 16 == VAR) {   GRUSE[I] = USE1;   USE2 = 0;  }
if  (EEMASK & 1 << USE1 != 0 && GRINF1[I] & 0xFFFF == VAR || GRINF1[I] >> 16 == VAR) {   GRUSE[I] = USE2;   GRINF1[I] = GRINF2[I];  }
}
  GRUSE[REG] = 7; 
  GRINF1[REG] = VAR; 

} else {

for (II = 0; II != 4 * (NREGS - 1); II += 4) {
  I = REGS >> II & 15; 
  USE1 = GRUSE[I];   USE2 = USE1 >> 16;   USE1 = USE1 & 255; 
if  (EMASK & 1 << USE2 != 0 && GRINF2[I] & 0xFFFF == VAR || GRINF2[I] >> 16 == VAR || GRINF2[I] == VAR) {   GRUSE[I] = USE1;   USE2 = 0;  }
if  (EMASK & 1 << USE1 != 0 && GRINF1[I] & 0xFFFF == VAR || GRINF1[I] >> 16 == VAR || GRINF1[I] == VAR) {   GRUSE[I] = USE2;   GRINF1[I] = GRINF2[I];  }
//


//ALLTHEFOREGOINGCONDITIONSARENOTASSILLYASTHEYSEEM.MUST


//BEARINMINDTHATBOTHGRINF&VARMAYBERECORDELEMENTSDEFINED


//BYALL32BITSOFINFASWELLASMODIFIEDSCALARSWHENTHENAME


//ONLYTAKES16BITS


//


}
if  (ASSOP == 2 && VAR > 0)  {

  USE1 = GRUSE[REG]; 
if  (5 <= USE1 & 255 && USE1 & 255 <= 6)  {
//ASSIGNCONSTTOVAR


  GRUSE[REG] = USE1 & 255 | (9 << 16); 
  GRINF2[REG] = VAR; 

} else {
//ASSIGNVAROREXPTOVAR


  GRUSE[REG] = USE1 << 16 | 9; 
  GRINF2[REG] = GRINF1[REG]; //PREVIOUSUSEBECOMES2NDRY


  GRINF1[REG] = VAR; 

}


}


}


} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;
//OFROUTINECSS


//*DELSTART


void PRINTUSE(void) {
//***********************************************************************


//*UPTOTWOUSESAREREMEMBEREDINFOINGRINF1&GRINF2*


//*BOTTOMHALFOFGRUSERELATESTOINF1TOPHALFTOINF2*


//*THEMEANSCLEARINGGRUSETOFORGETSTHEREGCOMPLETELY*


//*ARRAYREGISTERKEEPSTHECLAIMSTATUSANDGRATTHELASTUSE*


//***********************************************************************


const _imp_string REGS[(7)-(0)+1]
;
$define REGS[N0] REGS[(N0)-(0)]
 = 
"ACC", 
" DR", 
"LNB", 
"XNB", 
" PC", 
"CTB", 
"TOS", 
"  B";

const _imp_string USES[(15)-(0)+1]
;
$define USES[N0] USES[(N0)-(0)]
 = 
" NOT KNOWN ", 
" I-RESULT  ", 
" TEMPORARY ", 
"  PLTBASE  ", 
" NAMEBASE  ", 
" LIT CONST ", 
" TAB CONST ", 
" DESC FOR  ", 
" RECD BASE ", 
" LOCAL VAR ", 
" NAME+CNST ", 
" AUXSTPTR- ", 
" BYTE DES  ", 
" HALF DES  ", 
"  VMY RES  ", 
" REC HDES  ";

const _imp_string STATE[(3)-(-1)+1]
;
$define STATE[N0] STATE[(N0)-(-1)]
 = 
  "  LOCKED   ", 
"   FREE    ", 
" I-RESULT  ", 
" TEMPORARY ", 
" RT-PARAM  ";

auto void OUT(int USE, int INF);
int I; int USE; int INF;

for (I = 0; I != 7; I += 1) {
if  (REGISTER[I] | GRUSE[I] != 0)  {

  USE = GRUSE[I]; 
PRINTSTRING(REGS[I].STATE[REGISTER[I]]); 
OUT(USE & 255, GRINF1[I]); 
if  (USE >> 16 != 0) { PRINTSTRING(" ALSO "); OUT(USE >> 16, GRINF2[I]);  }
NEWLINE(); 

}

}
return; 
void OUT(int USE, int INF) {
const int LNMASK = 0b1100011110000000;

const int UNMASK = 0b0100001110000000;

PRINTSTRING(" USE = ".USES[USE]); 
if  (LNMASK & 1 << USE != 0) PRINTSTRING(PRINTNAME(INF & 0xFFFF)
);  else WRITE(INF, 1); 
if  (USE == 10) { PRINTSYMBOL('+'); WRITE(INF >> 16, 1);  }
if  (UNMASK & 1 << USE != 0 && INF >> 16 != 0) { PRINTSTRING(" MODBY"); PRINTSTRING(PRINTNAME(INF >> 16)
);  }

} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;

//*DELEND


void ABORT(void) {
PRINTSTRING("\n****************      ABORT********************    ABORT    *******"); 
//*DELSTART


unless  (CA == CABUF) NCODE(ADDR(CODE[0])
, ADDR(CODE[PPCURR])
, CABUF); 
PRINTUSE(); 
//*DELEND


assert(_IMP_MONITOR_); 
exit(0); 

} /* End of Begin/Rt/Fn/Map depth=2 */;

void EPILOGUE(void) {
//***********************************************************************


//*PLANTANYSUBROUINESTHATHAVEBEENREQUIREDDURING*


//*THECODEGENERATIONPHASE*


//***********************************************************************


int D; int J;

auto void FILL(int LAB);
if  (PLINK[15] == 0) goto P16; 
ABORT(); 
P16: 
//


//STRINGRESOLUTIONSUBROUTINE


//THISISENTEREDVIAACALLINSTRNANDHAS3PARAMETERS


//P1(LNB+5)=RESDACURRENTLENGTHDESCRIPTORPOINTINGATTHEFIRSTBYTE


//OFTHESTRINGBEINGRESOLVED


//P2(LNB+7)=STDAMAXLENGTHDESCRIPTORTOTHESTRINGINWHICHANY


//FRAGMENTISTOBESTORED


//P3(LNB+9)-EXPDACURRENTLENGTHDESCRIPTORPOINTINGATTHE


//LENGTHBYTEOFSTRINGTOBESEARCHEDFOR


//


//IFRESOLUTIONISSUCCESSFULLCCISSETTO0ANDANUPDATEDVERSION


//OFRESDISRETURNEDINTHEACCINCASETHEREAREFURTHERRESLNS


//


//CODEISASFOLLOWS:-


//


//LXN(LNB+0)OLDLNB


//LD(XNB+3)PLTDESCRIPTOR


//LDB0ZEROBOUNDFORMDIAG


//STD(LNB+3)STANDARDPLACE


//ASF4GRAB2TEMPORARIES


//LD(LNB+5)RESULTIFNULLROUTETAKEN


//SLD(LNB+9)EXPD


//LB0


//JAT11,LNULLJUMPIFEXPNULL


//INCA1TOFIRSTCHAR


//LB@DRFIRSTCHARINTOB


//STD(LNB+11)TEMP1


//LSS(LNB+5)TYPE&BNDOFRESD


//ANDXIFF


//JAT4,RESFAILRESDISNULL&EXPDNOTNULL


//LD(LNB+5)RESDTODR


//AGNSWNEL=DRSEARCHFORFIRSTCHAR


//JCC8,RESFAILNOTFOUND


//STD(LNB+13)SAVEINTEMP2


//CYD0


//LD(LNB+11)EXPDESCRIPTORFORCOMPARISON


//CPSL=DR,FILLER=FFCHECKRESTOFEXPRSN


//JCC8,L2RESLNHASSUCCEEDED


//LD(LNB+13)RESUMESCANNING


//SWEQL=1ADVANCEBY1AVOIDINGMODD


//JAGN


//


//RESOLUTIONCOMPLETE.ARRANGETOSTOREFRAGMENTWITHOUTANYFILLERCHARS


//SOS->S.(T).ZWORKSOKANDALLOWINGSTDTOBENULL


//


//L2SLSS(LNB+5)STOREUPDATEDDES&GETBND


//ISB(LNB+13)GIVELENGTHOFFRAGMENT


//STB


//LSS(LNB+7)LENGTHOFSTD


//JAF4,*+6!ZEROFORNO1STPARTRESLN


//LSS1


//ANDX1FF


//ICPB


//JCC12,RESFAIL


//LNULLLD(LNB+7)STDTODR


//JAT11,L3STDNULLDONTSETLENGTH


//LSD(LNB+5)ORIGINIALSTRING


//MVLL=1SETLENGTHBYTEFROMB


//LDBBTOSTORECHARS


//MVL=DR,FILLER=X'80'ASSIGN


//L3LDTOSRESULTANDSETCC=0


//CYD0


//EXIT


//RESFAILMPSRX'24'SETCC=1


//EXIT


if  (PLINK[16] == 0) goto P17; 
FILL(16); 
PSF1(LXN, 1, 0); 
PF1(LD, 0, XNB, 12); 
PSF1(LDB, 0, 0); 
PSF1(STD, 1, 12); 
PSF1(ASF, 0, 4); 
PSF1(LD, 1, 20); 
PSF1(SLD, 1, 36); 
PSF1(LB, 0, 0); 
PF3(  JAT, 11, 0, 0x24); 
PSF1(INCA, 0, 1); 
PF1(LB, 2, 7, 0); 
PSF1(STD, 1, 44); 
PSF1(LSS, 1, 20); 
PF1(AND, 0, 0, 0x1FF); 
PF3(  JAT, 4, 0, 0x27); 
PSF1(LD, 1, 23); 
PF2(SWNE, 1, 0, 0, 0, 0); 
PF3(JCC, 8, 0, 0x23); 
PSF1(STD, 1, 52); 
PSF1(CYD, 0, 0); 
PSF1(LD, 1, 44); 
PF2(CPS, 1, 1, 0, 0, 0xFF); 
PF3(JCC, 8, 0, 5); 
PSF1(LD, 1, 52); 
PF2(SWEQ, 0, 0, 0, 0, 0); 
PSF1(JUNC, 0, -12); 
PSF1(SLSS, 1, 20); 
PSF1(ISB, 1, 52); 
PF1(ST, 0, BREG, 0); 
PSF1(LSS, 1, 28); 
PF3(JAF, 4, 0, 3); 
PSF1(LSS, 0, 1); 
PF1(AND, 0, 0, 0x1FF); 
PF1(ICP, 0, BREG, 0); 
PF3(JCC, 12, 0, 13); 
PSF1(LD, 1, 28); 
PF3(  JAT, 11, 0, 7); 
PSF1(LSD, 1, 20); 
PF2(MVL, 0, 0, 0, 0, 0); 
PF1(LDB, 0, BREG, 0); 
PF2(MV, 1, 1, 0, 0, UNASSPAT & 255); 
PF1(LD, 0, TOS, 0); 
PSF1(CYD, 0, 0); 
PSF1(EXIT, 0, -0x40); 
PSF1(MPSR, 0, 0x24); 
PSF1(EXIT, 0, -0x40); 
P17: 
//


//EVALUATEX**Y


//************


//YISINACCXISSTACKEDBELOWTHELINK(UNAVOIDABLE)


//FAULT(21)ISGIVENIFX<0OR(X=0ANDY<=0)


//REPEATEDMULTIPLICATIONISUSEDIFY>0ANDFRACPT(Y)=0


//OTHERWISERESULT=EXP(Y*LOG(Y))


//


//LBTOSSWOPRETURNADDRESS&X


//LDTOSXTODR


//STBTOS


//STDTOS


//SLSDTOSXTOACCYTOTOS


//JAT2,EXPERRERRORIFX<0


//JAF0,TRYMULTJUMPX#0


//SLSDTOSSTACKX&GETY


//JAF1.EXPERRY<=0


//LSDTOSX(=0)=RESULTTOACC


//JTOSRETURN


//TRYMULTXISINACC&YSTACKED


//SLSDTOSYTOACCANDXSTACKED


//STTOSYSTACKED


//JAT2,NONINTYISNEGATAIVE


//RSC55


//RSC-55


//FIXBFIXPINCHEDFROMICLALGOL


//MYB4


//CPB-64


//JCC10,*+3


//LB-64


//ISHB


//STUHBACCTO1WORD


//JCC7,NONINTJUMPIFTRUNCATION


//ASF-2LOSEYOFSTACK


//STBINTEGERVERSIONOFYTOB


//LSS1


//FLT0


//JAF12,MULJUMPIFB#0


//ASF-2LOSEXOFFSTACK


//JTOSX**0=1


//AGNSTDTOSSTACKANOTHERCOPYOFX


//MULRMYTOS


//DEBJAGNREPEATEDMULTIPLICATION


//JTOS


//NONINTYISSTACKEDOVERX


//LSDTOS


//SLSDTOS


//PRCL4


//STTOS


//LXN(LNB+4)


//RALN7


//CALL((XNB+LOGEPDISP)


//RMYTOS


//PRCL4


//STTOS


//LXN(LNB+4)TOPLT


//RALN7


//CALL((XNB+EXPEPDISP))CALLEXP


//JTOS


//EXPERRJERRORRTNO7


//


if  (PLINK[17] == 0) goto P18; 
FILL(17); 
if  (LOGEPDISP == 0) CXREF("S#ILOG", PARMDYNAMIC, 2, LOGEPDISP); 
if  (EXPEPDISP == 0) CXREF("S#IEXP", PARMDYNAMIC, 2, EXPEPDISP); 
PF1(LB, 0, TOS, 0); 
PF1(LD, 0, TOS, 0); 
PF1(STB, 0, TOS, 0); 
PF1(STD, 0, TOS, 0); 
PF1(SLSD, 0, TOS, 0); 
PF3(  JAT, 2, 0, 0x35); 
PF3(JAF, 0, 0, 7); 
PF1(SLSD, 0, TOS, 0); 
PF3(JAF, 1, 0, 0x30); 
PF1(LSD, 0, TOS, 0); 
PF1(JUNC, 0, TOS, 0); 
PF1(SLSD, 0, TOS, 0); 
PF1(ST, 0, TOS, 0); 
PF3(  JAT, 2, 0, 26); 
PSF1(  RSC, 0, 55); 
PSF1(  RSC, 0, -55); 
PF1(FIX, 0, BREG, 0); 
PSF1(  MYB, 0, 4); 
PSF1(CPB, 0, -64); 
PF3(JCC, 10, 0, 3); 
PSF1(LB, 0, -64); 
PF1(  ISH, 0, BREG, 0); 
PF1(STUH, 0, BREG, 0); 
PF3(JCC, 7, 0, 14); 
PSF1(ASF, 0, -2); 
PF1(ST, 0, BREG, 0); 
PSF1(LSS, 0, 1); 
PSF1(FLT, 0, 0); 
PF3(JAF, 12, 0, 5); 
PSF1(ASF, 0, -2); 
PF1(JUNC, 0, TOS, 0); 
PF1(STD, 0, TOS, 0); 
PF1(  RMY, 0, TOS, 0); 
PSF1(DEBJ, 0, -2); 
PF1(JUNC, 0, TOS, 0); 
PF1(LSD, 0, TOS, 0); 
PF1(SLSD, 0, TOS, 0); 
PSF1(PRCL, 0, 4); 
PF1(ST, 0, TOS, 0); 
PSF1(LXN, 1, 16); 
PSF1(RALN, 0, 7); 
PF1(CALL, 2, XNB, LOGEPDISP); 
PF1(  RMY, 0, TOS, 0); 
PSF1(PRCL, 0, 4); 
PF1(ST, 0, TOS, 0); 
PSF1(LXN, 1, 16); 
PSF1(RALN, 0, 7); 
PF1(CALL, 2, XNB, EXPEPDISP); 
PF1(JUNC, 0, TOS, 0); 
PF1(JUNC, 0, 0, (PLABS[7] - CA) / 2); 
P18: 
//


//MAPPEDSTRINGASSIGNMENTCHECK.CHECKINGMODEONLY.MUSTMOVEONLY


//CURRENTLENGTHINTOMAPPEDSTRINGSBUTMUSTNOTOMITTHECAPACITY


//CHECK.ACC&DRSETFORMV


//


//STTOSSAVEACCDESRPTR


//ANDX'1FF00000000'GETCURRENTLENGTH


//STUHBINTOBREG


//LSDTOSRESTOREACC


//STDTOSSAVEDRDESCRPTR


//SBB1


//JAF13,*+3


//MODDBPROVOKEFAILUREIFRELEVANT


//ADB1


//LDTOS


//LDBBBOUND=CURRENTL+1(FORLBYTE)


//JTOS


//


if  (PLINK[18] == 0) goto P19; 
CNOP(0, 8); 
  D = CA; 
PCONST(511); 
PCONST(0); //XFF00000000


FILL(18); 
PF1(ST, 0, TOS, 0); 
PF1(AND, 0, PC, D); 
PF1(STUH, 0, BREG, 0); 
PF1(LSD, 0, TOS, 0); 
PF1(STD, 0, TOS, 0); 
PSF1(SBB, 0, 1); 
PF3(JAF, 13, 0, 3); 
PF1(MODD, 0, BREG, 0); 
PSF1(ADB, 0, 1); 
PF1(LD, 0, TOS, 0); 
PF1(LDB, 0, BREG, 0); 
PF1(JUNC, 0, TOS, 0); 
P19: 
//CONCATENATIONONE


//COPYTHEFIRSTSTRINGINTOTHEWORKAREA


//BHASRELDISPOFTHEWORKAREAFROMLNB


//DRHASCURRENTLENGTHDESCRIPTOROFFIRSTSTRING


//RESULTISACURRENTLENGTHDESCRIPTORTOWORKAREAINDRANDACC


//


//STLNTOS


//ADBTOS


//LXNBXNBTOWORKAREA


//SLB@DRCURRENTLENGTHTOB


//STB(xnb+2)INTOLENGTHBYTEOFWKAREA


//INCA1DRPASTLENGTHBYTE


//CYD0BECOMESSOURCESTRING


//LD=X'180000FF0000000C'


//INCATOSDESCRIPTORTOWKSTRING


//STD(xnb+0)STOREDFORLATER


//LDBBADJUSTEDSONOFILLING


//MVL=DRTHEMOVE


//LD(xnb+0)SETUPDRWITHRESULT


//LDBBCURRENTLENGTHASBOUND


//INCA-1TOPOINTATLENGTHBYTE


//CYD0TOACCASWELL


//JTOSRETURN


if  (PLINK[19] | PLINK[20] == 0) goto P21; 
CNOP(0, 8); //DOUBLEWORDALLIGN


  D = CA; 
PCONST(0x180000FF); PCONST(12); 
FILL(19); 
PF1(STLN, 0, TOS, 0); 
PF1(ADB, 0, TOS, 0); 
PF1(LXN, 0, BREG, 0); 
PF1(SLB, 2, 7, 0); 
PF1(STB, 0, XNB, 8); 
PSF1(INCA, 0, 1); 
PSF1(CYD, 0, 0); 
PF1(LD, 0, PC, D); 
PF1(INCA, 0, TOS, 0); 
PF1(STD, 0, XNB, 0); 
PF1(LDB, 0, BREG, 0); 
PF2(MV, 1, 0, 0, 0, 0); 
PF1(LD, 0, XNB, 0); 
PF1(LDB, 0, BREG, 0); 
PSF1(INCA, 0, -1); 
PSF1(CYD, 0, 0); 
PF1(JUNC, 0, TOS, 0); 
//


//CONCATENATIONTWO


//ADDTHESECONDANDSUBSEQUENTSTRINGSTOTHEFIRST


//PARAMETERSANDRESULTSASCONCATENATIONONE


//


//STLNTOS


//ADBTOS


//LXNBXNBTOWORKAREA


//LB@DRCURRENTLENGTHTOB


//STBTOSKEEPFORTHEMOVE


//ADB(xnb+2)ADDOLDLENGTH


//INCA1PASTLENGTHBYTE


//CYD0BECOMESSOURCESTRING


//LD(xnb+0)GETDESCRIPTORTOWKSTRING


//MODD(xnb+2)MOVEONPASTFIRSTSTRING


//LDBTOSTOMOVERIGHTAMOUNT


//MVL=DR


//STB(xnb+2)UPDATEWKSTRINGLENGTH


//CPB255


//JCC2,CAPACITYEXCEEDED


//LD(xnb+0)SETUPDRWITHRESULT


//LDBBCURRENTLENGTHASBOUND


//INCA-1TOPOINTATLENGTHBYTE


//CYD0TOACCASWELL


//JTOSRETURN


if  (PLINK[20] == 0) goto P21; 
FILL(20); 
PF1(STLN, 0, TOS, 0); 
PF1(ADB, 0, TOS, 0); 
PF1(LXN, 0, BREG, 0); 
PF1(LB, 2, 7, 0); 
PF1(STB, 0, TOS, 0); 
PF1(ADB, 0, XNB, 8); 
PSF1(INCA, 0, 1); 
PSF1(CYD, 0, 0); 
PF1(LD, 0, XNB, 0); 
PF1(MODD, 0, XNB, 8); 
PF1(LDB, 0, TOS, 0); 
PF2(MV, 1, 0, 0, 0, 0); 
PF1(STB, 0, XNB, 8); 
PF1(CPB, 0, 0, 255); 
PF3(JCC, 2, 0, (PLABS[9] - CA) / 2); 
PF1(LD, 0, XNB, 0); 
PF1(LDB, 0, BREG, 0); 
PSF1(INCA, 0, -1); 
PSF1(CYD, 0, 0); 
PF1(JUNC, 0, TOS, 0); 
P21: 
//


//THESTOPSEQUENCE


//CALLsystemroutineSTOP(NOPARAMETERS)


//


//STOP1PRCL4


//LXN(LNB+4)


//RALN5


//CALL((XNB+STOPEPDISP))!**PLEASEDONTCOMEBACK**


//


if  (PLINK[21] == 0) goto P22; 
FILL(21); 
CXREF("S#STOP", PARMDYNAMIC, 2, J); 
PSF1(PRCL, 0, 4); 
PSF1(LXN, 1, 16); 
PSF1(RALN, 0, 5); 
PF1(CALL, 2, XNB, J); 
PF1(0x4E, 0, 0, 0xB00B); //IDLEB00B


P22: 
//


//PRINTPROFILE


//


if  (PLINK[22] == 0) goto P23; 
FILL(22); 
CXREF("S#PPROFILE", PARMDYNAMIC, 2, J); 
PSF1(PRCL, 0, 4); 
PSF1(LXN, 1, 16); 
PF1(LDRL, 0, XNB, PARMPROF); 
PF1(STD, 0, TOS, 0); 
PSF1(RALN, 0, 7); 
PF1(CALL, 2, XNB, J); 
PF1(JUNC, 0, TOS, 0); 
P23: 
return; 
void FILL(int LAB) {
//***********************************************************************


//*FILLJUMPSTOTHISLABWITHJUMPTOCURRENTADDRESS*


//***********************************************************************


int AT; int INSTRN; int I; int J;

int A[(2)-(0)+1]
;
$define A[N0] A[(N0)-(0)]

while  (PLINK[LAB] != 0) {
POP(PLINK[LAB], A[0], A[1], A[2]); 
for (I = 0; I != 2; I += 1) {
  INSTRN = A[I]; 
if  (INSTRN != 0)  {

  AT = INSTRN & 0x3FFFF; 
  INSTRN = INSTRN & 0xFFC00000; 
  INSTRN = INSTRN | (CA - AT) >> 1; 
PLUG(1, AT, INSTRN, 4); 

}

}
}
  PLABS[LAB] = CA; 

} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;

void DUMPCONSTS(void) {
//***********************************************************************


//*OUTPUTTHECONSTANTTABLEANDMAKEANYRELEVANTRELOCATIONS*


//***********************************************************************


auto void DOIT(int VAL);
auto void FILL(int CREFHEAD);
int I; int J; int K; int DISP; int SIZE; int BASE;

  BASE = 0; 
  SIZE = CONSTPTR - BASE; 
if  (SIZE <= 0) return; 
unless  (CA & 7 == 0) CNOP(0, 8); 
CODEOUT(); 
LPUT(1, SIZE * 4, CA, ADDR(CTABLE)
); 
//*DELSTART


if  (DCOMP != 0)  {

PRINTSTRING("\nCONSTANT TABLE"); 
  I = BASE; 
do {
NEWLINE(); 
PRHEX(CA + 4 * (I - BASE), 5); 
for (J = 0; J != 7; J += 1) {
SPACES(2); 
PRHEX(CTABLE, 8); 
}
SPACE(); 
for (J = 0; J != 31; J += 1) {
  K = BYTEINTEGER(ADDR(CTABLE)
 + J); 
if  (K < 31 || K > 95)   K = 32; 
PRINTSYMBOL(K); 
}
  I = I + 8; 
if  (I >= CONSTPTR) break; 
} while (1);

}

//*DELEND


//


FILL(CREFHEAD); 
  SIZE = (SIZE + 1) & (-2); 
  CA = CA + 4 * SIZE; 
  CABUF = CA; 
return; 
void FILL(int CREFHEAD) {
  DISP = (CA - 4 * BASE) / 2; //RELOCATIONFACTOR


while  (CREFHEAD != 0) {
POP(CREFHEAD, I, J, K); 
DOIT(I); 
if  (J != 0) DOIT(J); 
if  (K != 0) DOIT(K); 
}

} /* End of Begin/Rt/Fn/Map depth=3 */;

void DOIT(int VAL) {
//***********************************************************************


//*IFVAL+VETHENVALISCODEADDRESSFORLPUT(18)UPDATE*


//*IFVAL-VEITISGLAWRDADDRR<<16!CTABLEWRDADDR*


//*THEGLAWORDISTORELOCATEDBYHEADOFCODE(ALREADYDONE)*


//*HOWEVERTHEGLAWORDNEEDSUPDATINGFROMRELCTABLETORELCODE*


//***********************************************************************


int I; int J;

if  (VAL > 0) LPUT(18, 0, VAL, DISP);  else {

  I = (VAL >> 16 & 0x7FFF) << 2; //GLABYTEADDRESS


  J = 4 * (VAL & 0xFFFF) + CA; //CTABLEENTRYRELHDOFCODE


PLUG(2, I, J, 4); //UPDATETHEGLAWORD



}


} /* End of Begin/Rt/Fn/Map depth=3 */;


} /* End of Begin/Rt/Fn/Map depth=2 */;


} /* End of Begin/Rt/Fn/Map depth=1 */;
//OFSUBBLOCKCONTAININGPASS2


























_imp_string MESSAGE(int N) {
//***********************************************************************


//*OUTPUTSANERRORMESSAGESTOREDINACOMPRESSEDFORMAT*


//*1repeatISNOTREQUIRED*


//*2LABEL&HASALREADYBEENSETINTHISBLOCK*


//*4SWITCH&HASNOTBEENDECLARED*


//*5SWITCHNAME&INEXPRESSIONORASSIGNMENT*


//*6SWITCHLABEL&(#)SETASECONDTIME*


//*7NAME&HASALREADYBEENDECLARED*


//*8ROUTINEORFN&HASMOREPARAMETERSTHANSPECIFIED*


//*9PARAMETER#OF&DIFFERSINTYPEFROMSPECIFICATION*


//*10ROUTINEORFN&HASFEWERPARAMETERSTHANSPECIFIED*


//*11LABEL&REFERENCEDATLINE#HASNOTBEENSET*


//*12cycleATLINE#HASTWOCONTROLCLAUSES*


//*13repeatFORcycleATLINE#ISMISSING*


//*14TOOMANYENDS*


//*15MISSINGENDS*


//*16NAME&HASNOTBEENDECLARED*


//*17NAME&DOESNOTREQUIREPARAMETERSORSUBSCRIPTS*


//*19WRONGNOOFPARAMETERS*


//*20#TOOFEWSUBSCRIPTSPROVIDEDFORARRAY&*


//*21#TOOMANYSUBSCRIPTSPROVIDEDFORARRAY&*


//*22ACTUALPARAMETERSNOTASSPEC*


//*23ROUTINENAMEINEXPRSSN*


//*24REALININTEGEREXPRSSN*


//*26#ISNOTAVALIDeventNUMBER*


//*27&ISNOTAROUTINENAME*


//*28ROUTINEORFN&HASSPECIFICATIONBUTNOBODY*


//*29LHSNOTDESTNTN*


//*30returnOUTWITHROUTINEBODY*


//*31resultOUTWITHFNORMAPBODY*


//*32INVALIDASSEMBLER*


//*33INVALIDNAMEINASSEMBLER*


//*34TOOMANYLEVELS*


//*37TOOMANYDIMENSIONS*


//*38ARRAY&HASUPPERBOUND#LESSTHANLOWERBOUND*


//*40DECLNMISPLACED*


//*41CONSTANTCANNOTBEEVALUATEDATCOMPILETIME*


//*44ILLEGALCONST*


//*45WRONGNOOFCONST*


//*46&ISDECLAREDASINVALIDTYPEextrinsicname*


//*47elseALREADYGIVENATLINE#*


//*48elseINVALIDAFTERonevent*


//*49ATTEMPTTOINITIALISEextrinsicORformat&*


//*50SUBSCRIPTOF#ISOUTWITHTHEBOUNDSOF&*


//*51finishISNOTREQUIRED*


//*52repeatINSTEADOFfinishFORstartATLINE#*


//*53finishFORstartATLINE#ISMISSING*


//*54exitOUTWITHcyclerepeatBODY*


//*55continueOUTWITHcyclerepeatBODY*


//*56ENDOFFILEOUTOFCONTEXT*


//*57BEGINMISSING*


//*58CONTROLSTMNTMISPLACED*


//*59finishINSTEADOFrepeatFORcycleATLINE#*


//*61NAME&HASALREADYBEENUSEDINTHISformat*


//*62NOTFORMATNAME*


//*63RECORDSPECERROR*


//*64SUBNAMEMISSING*


//*65SUBNAMENOTINFORMAT*


//*66EXPRESSIONASSIGNEDTORECORD&*


//*67RECORDS&&AND&HAVEDIFFERENTFORMATS*


//*69SUBNAMEOUTOFCONTEXT*


//*70ILLEGALSTRINGDECLN*


//*71&ISNOTASTRINGVARAIBLE*


//*72ARITHMETICOPERATORINASTRINGEXPRESSION*


//*73ARITHMETICCONSTANTINASTRINGEXPRESSION*


//*74RESOLUTIONISNOTTHECORRECTFORMAT*


//*75STRINGEXPRESSIONCONTAINSASUBEXPRESSION*


//*76STRINGVARIABLE&INARITHMETICEXPRESSION*


//*77STRINGCONSTANTINARITHMETICEXPRESSION*


//*78STRINGOPERATOR'.'INARITHMETICEXPRESSION*


//*80POINTERVARIABLE&COMPAREDWITHEXPRESSION*


//*81POINTERVARIABLE&EQUIVALENCEDTOEXPRESSION*


//*82&ISNOTAPOINTERNAME*


//*83&&AND&ARENOTEQUIVALENTINTYPE*


//*84RECORDOUTOFCONTEXT*


//*86GLOBALPOINTER&&EQUIVALENCEDTOLOCAL&*


//*90UNTYPEDNAME&USEDASVARIABLE*


//*91forCONTROLVARIABLE&NOTINTEGER*


//*92forCLAUSEHASZEROSTEP*


//*93forCLAUSEHASNONINTEGERNUMBEROFTRAVERSES*


//*101SOURCELINETOOLONG*


//*102WORKFILETOOSMALL*


//*103NAMESTOOLONG*


//*104TOOMANYNAMES*


//*105TOOMANYLEVELS*


//*106STRINGCONSTTOOLONG*


//*107COMPILERTABLESFULL*


//*202NAME&NOTUSED*


//*203LABEL&NOTUSED*


//*204GLOBALforCONTROLVARIABLE&*


//*205NAME&NOTADDRESSABLE*


//*255SEEIMPMANUAL*


//***********************************************************************


const char OUTTT[(63)-(0)+1]
;
$define OUTTT[N0] OUTTT[(N0)-(0)]
 = 
'?', 
'A', 
'B', 
'C', 
'D', 
'E', 
'F', 
'G', 
'H', 
'I', 
'J', 
'K', 
'L', 
'M', 
'N', 
'O', 
'P', 
'Q', 
'R', 
'S', 
'T', 
'U', 
'V', 
'W', 
'X', 
'Y', 
'Z', 
'&', 
'-', 
'/', 
'\'', 
'(', 
')', 
'a', 
'b', 
'c', 
'd', 
'e', 
'f', 
'g', 
'h', 
'i', 
'j', 
'k', 
'l', 
'm', 
'n', 
'o', 
'p', 
'q', 
'r', 
's', 
't', 
'u', 
'v', 
'w', 
'x', 
'y', 
'z', 
'.', 
'%', 
'#', 
[ LOW ... HIGH ] = '?';

const int WORDMAX = 584;
const int DEFAULT = 580; 
const unsigned short int WORD[(WORDMAX)-(0)+1]
;
//$define WORD[N0] WORD[(N0)-(0)]
 = 
0, 
  1, 
32769, 
32771, 
32772, 
32773, 
2, 
32775, 
32776, 
32777, 
32778, 
32780, 
32781, 
32782, 
32783, 
32784, 
4, 
32785, 
32776, 
32777, 
32772, 
32780, 
32787, 
5, 
32785, 
32789, 
32776, 
32782, 
32790, 
32792, 
32793, 
6, 
32785, 
32795, 
32796, 
32781, 
32797, 
32798, 
32800, 
7, 
32801, 
32776, 
32777, 
32778, 
32780, 
32787, 
8, 
32802, 
32792, 
32804, 
32776, 
32777, 
32805, 
32806, 
32808, 
32809, 
9, 
32811, 
32813, 
32814, 
32776, 
32815, 
32782, 
32817, 
32818, 
32819, 
10, 
32802, 
32792, 
32804, 
32776, 
32777, 
32822, 
32806, 
32808, 
32809, 
11, 
32775, 
32776, 
32823, 
32825, 
32826, 
32813, 
32777, 
32772, 
32780, 
32781, 
12, 
32827, 
32825, 
32826, 
32813, 
32777, 
32829, 
32830, 
32832, 
13, 
32769, 
32834, 
32827, 
32825, 
32826, 
32813, 
32771, 
32835, 
14, 
32837, 
32838, 
32839, 
15, 
32840, 
32839, 
16, 
32801, 
32776, 
32777, 
32772, 
32780, 
32787, 
17, 
32801, 
32776, 
32842, 
32772, 
32843, 
32806, 
32792, 
32845, 
19, 
32847, 
32848, 
32849, 
32850, 
20, 
32813, 
32852, 
32853, 
32845, 
32854, 
32834, 
32856, 
32776, 
21, 
32813, 
32852, 
32857, 
32845, 
32854, 
32834, 
32856, 
32776, 
22, 
32858, 
32850, 
32860, 
32861, 
32862, 
23, 
32863, 
32865, 
32866, 
32867, 
24, 
32869, 
32866, 
32870, 
32867, 
26, 
32813, 
32771, 
32772, 
32797, 
32872, 
32873, 
32875, 
27, 
32776, 
32771, 
32772, 
32797, 
32877, 
32789, 
28, 
32802, 
32792, 
32804, 
32776, 
32777, 
32819, 
32879, 
32880, 
32881, 
29, 
32882, 
32860, 
32883, 
30, 
32885, 
32887, 
32877, 
32881, 
31, 
32889, 
32887, 
32804, 
32792, 
32891, 
32881, 
32, 
32892, 
32894, 
33, 
32892, 
32865, 
32866, 
32894, 
34, 
32837, 
32838, 
32896, 
37, 
32837, 
32838, 
32898, 
38, 
32900, 
32776, 
32777, 
32901, 
32902, 
32813, 
32903, 
32808, 
32904, 
32902, 
40, 
32905, 
32906, 
41, 
32908, 
32910, 
32912, 
32913, 
32825, 
32915, 
32800, 
44, 
32917, 
32919, 
45, 
32847, 
32848, 
32849, 
32919, 
46, 
32776, 
32771, 
32787, 
32920, 
32921, 
32817, 
32923, 
32925, 
47, 
32926, 
32778, 
32927, 
32825, 
32826, 
32813, 
48, 
32926, 
32921, 
32928, 
32929, 
32873, 
49, 
32930, 
32932, 
32933, 
32923, 
32792, 
32935, 
32776, 
50, 
32937, 
32814, 
32813, 
32771, 
32887, 
32939, 
32940, 
32814, 
32776, 
51, 
32942, 
32771, 
32772, 
32773, 
52, 
32769, 
32944, 
32814, 
32942, 
32834, 
32946, 
32825, 
32826, 
32813, 
53, 
32942, 
32834, 
32946, 
32825, 
32826, 
32813, 
32771, 
32835, 
54, 
32948, 
32887, 
32827, 
32769, 
32881, 
55, 
32949, 
32887, 
32827, 
32769, 
32881, 
56, 
32951, 
32953, 
32849, 
32954, 
57, 
32956, 
32840, 
58, 
32957, 
32959, 
32906, 
59, 
32942, 
32944, 
32814, 
32769, 
32834, 
32827, 
32825, 
32826, 
32813, 
61, 
32801, 
32776, 
32777, 
32778, 
32780, 
32960, 
32782, 
32783, 
32935, 
62, 
32860, 
32961, 
32865, 
63, 
32963, 
32862, 
32965, 
64, 
32966, 
32840, 
65, 
32966, 
32860, 
32866, 
32961, 
66, 
32968, 
32970, 
32932, 
32972, 
32776, 
67, 
32974, 
32976, 
32977, 
32776, 
32978, 
32979, 
32981, 
69, 
32966, 
32953, 
32849, 
32954, 
70, 
32917, 
32983, 
32905, 
71, 
32776, 
32771, 
32772, 
32797, 
32985, 
32987, 
72, 
32989, 
32991, 
32782, 
32797, 
32985, 
32790, 
73, 
32989, 
32993, 
32782, 
32797, 
32985, 
32790, 
74, 
32995, 
32771, 
32772, 
32939, 
32997, 
32999, 
75, 
32985, 
32790, 
33001, 
32797, 
33003, 
32790, 
76, 
32985, 
33004, 
32776, 
32782, 
33006, 
32790, 
77, 
32985, 
32993, 
32782, 
33006, 
32790, 
78, 
32985, 
32991, 
33008, 
32782, 
33006, 
32790, 
80, 
33009, 
33004, 
32776, 
33011, 
33013, 
32790, 
81, 
33009, 
33004, 
32776, 
33014, 
32932, 
32790, 
82, 
32776, 
32771, 
32772, 
32797, 
33017, 
32789, 
83, 
32976, 
32977, 
32776, 
33019, 
32772, 
33020, 
32782, 
32817, 
84, 
32963, 
32953, 
32849, 
32954, 
86, 
33022, 
33017, 
32976, 
33014, 
32932, 
33024, 
32776, 
91, 
33025, 
32830, 
33004, 
32776, 
32772, 
33026, 
92, 
33025, 
33028, 
32777, 
33030, 
33031, 
93, 
33025, 
33028, 
32777, 
33032, 
32875, 
32814, 
33034, 
90, 
33036, 
32789, 
32776, 
32960, 
32920, 
33004, 
8, 
33038, 
101, 
33041, 
33043, 
32837, 
33044, 
102, 
33045, 
32837, 
33047, 
103, 
33048, 
32837, 
33044, 
104, 
32837, 
32838, 
33048, 
105, 
32837, 
32838, 
32896, 
106, 
32983, 
32919, 
32837, 
33044, 
107, 
33049, 
33051, 
33053, 
202, 
32801, 
32776, 
32772, 
32960, 
203, 
32775, 
32776, 
32772, 
32960, 
204, 
33022, 
33025, 
32830, 
33004, 
32776, 
205, 
32801, 
32776, 
32772, 
33054, 
255, 
33057, 
33058, 
33059, 
0;


const int LETT[(292)-(0)+1]
;
//$define LETT[N0] LETT[(N0)-(0)]
 = 
0, 
  X'7890A80B', 
0x02A00000, 
0x53980000, 
0x5D7E8000, 
0x652E3AD3, 
0x652C8000, 
0x190C52D8, 
0x36000000, 
0x510E6000, 
0x436652C3, 
0x49C80000, 
0x452CB700, 
0x672E8000, 
0x53700000, 
0x69453980, 
0x4565F1D6, 
0x27BD3A47, 
0x50000000, 
0x492C7643, 
0x652C8000, 
0x5D0DB280, 
0x4BC6194B, 
0x679D37DC, 
0x5F900000, 
0x439E74CF, 
0x5D6CB768, 
0x590C52D8, 
0x36FFB000, 
0x42000000, 
0x672C77DD, 
0x48000000, 
0x694DB280, 
0x1D0DB280, 
0x257EBA53, 
0x5D280000, 
0x4D700000, 
0x5B7E5280, 
0x610E50DB, 
0x4BA4B966, 
0x69443700, 
0x6784B1D3, 
0x4D4CB200, 
0x210E50DB, 
0x4BA4B900, 
0x7A000000, 
0x5F300000, 
0x494CD34B, 
0x65980000, 
0x69CE1280, 
0x4D95F680, 
0x6784B1D3, 
0x4D4C70E9, 
0x537DC000, 
0x4D2EF2E4, 
0x652CD2E5, 
0x4B7472C8, 
0x43A00000, 
0x594DD280, 
0x781B2199, 
0x0A000000, 
0x69BDE000, 
0x477DDA65, 
0x5F600000, 
0x47643AE7, 
0x4B980000, 
0x4D7E4000, 
0x5B4E79D3, 
0x5D380000, 
0x2879E000, 
0x1A09CC80, 
0x0A708980, 
0x1A4A6993, 
0x1C380000, 
0x497CB980, 
0x652E3AD3, 
0x65280000, 
0x67AC59C7, 
0x654E1A66, 
0x2E91E70E, 
0x1C780000, 
0x1E300000, 
0x200A409B, 
0x0AA0A926, 
0x697DE000, 
0x4D2EE000, 
0x6195FB53, 
0x492C8000, 
0x439650F2, 
0x5B0DDC80, 
0x021A8A83, 
0x18000000, 
0x1C7A8000, 
0x02980000, 
0x2680A180, 
0x247AAA13, 
0x1C280000, 
0x1C09A280, 
0x12700000, 
0x0AC20927, 
0x26700000, 
0x24282600, 
0x1272828F, 
0x0A900000, 
0x6D0D94C8, 
0x782AC29D, 
0x28000000, 
0x5DADB14B, 
0x64000000, 
0x657EBA53, 
0x5D280000, 
0x45AE8000, 
0x5D780000, 
0x457C9C80, 
0x18426000, 
0x082A6A1D, 
0x28700000, 
0x7890AA2B, 
0x24700000, 
0x5FAE9BD3, 
0x69400000, 
0x7890A9AB, 
0x18A00000, 
0x5B0E0000, 
0x1272C099, 
0x12200000, 
0x029A629B, 
0x0460A900, 
0x182AC299, 
0x26000000, 
0x0849A29D, 
0x2649E726, 
0x039650F2, 
0x6B8612E4, 
0x457EB748, 
0x592E7980, 
0x597EF2E4, 
0x0828661C, 
0x1A4A6819, 
0x0218A200, 
0x077DD9E9, 
0x43768000, 
0x470DD75F, 
0x68000000, 
0x45280000, 
0x4BB4366B, 
0x43A4B200, 
0x477DB853, 
0x59280000, 
0x1261828F, 
0x02600000, 
0x0679C9A8, 
0x43980000, 
0x5376D0D9, 
0x53200000, 
0x782B0A25, 
0x12726486, 
0x7870268A, 
0x7829898A, 
0x4F4ED2DC, 
0x433692E4, 
0x7879C000, 
0x03A692DB, 
0x61A00000, 
0x69780000, 
0x53753A53, 
0x436539CA, 
0x7831E91B, 
0x02A00000, 
0x27AC59C7, 
0x654E1A00, 
0x6944A000, 
0x457EB749, 
0x66000000, 
0x78312713, 
0x26400000, 
0x53767A4B, 
0x43200000, 
0x789A80A5, 
0x28000000, 
0x782B04A8, 
0x7819E729, 
0x1272A280, 
0x0A70878D, 
0x0C498280, 
0x1EAA8000, 
0x0679CA0B, 
0x30A00000, 
0x0428E49C, 
0x0679CA25, 
0x1E600000, 
0x26A1A728, 
0x6B9CB200, 
0x0C7A4683, 
0x28000000, 
0x242867A5, 
0x08000000, 
0x0A9247A4, 
0x26A84703, 
0x1A280000, 
0x0BC6194B, 
0x679D37DC, 
0x439E74CF, 
0x5D2C8000, 
0x652C77E5, 
0x48000000, 
0x252C77E5, 
0x49980000, 
0x36D80000, 
0x43748000, 
0x510ED280, 
0x494CD34B, 
0x652DDA00, 
0x4D7E56C3, 
0x69980000, 
0x26A2449D, 
0x0E000000, 
0x27A654DD, 
0x4E000000, 
0x6D0E50D3, 
0x4564A000, 
0x03953A51, 
0x5B2E94C6, 
0x5F84B943, 
0x697E4000, 
0x477DD9E9, 
0x43768000, 
0x252E77D9, 
0x6BA537DC, 
0x477E594B, 
0x47A00000, 
0x4D7E56C3, 
0x68000000, 
0x477DDA43, 
0x53766000, 
0x67AC4000, 
0x6D0E54C3, 
0x4564A000, 
0x43953A51, 
0x5B2E94C6, 
0x3DDBC000, 
0x217D3769, 
0x4B900000, 
0x477DB843, 
0x652C8000, 
0x6F4E9400, 
0x4B8EB4ED, 
0x4364B747, 
0x4B200000, 
0x617D3769, 
0x4B900000, 
0x4394A000, 
0x4B8EB4ED, 
0x4364B768, 
0x0F65F143, 
0x58000000, 
0x597C70D8, 
0x7831E900, 
0x537692CF, 
0x4B900000, 
0x47643AE7, 
0x4A000000, 
0x752E5780, 
0x67A4B800, 
0x5D7DD4DD, 
0x692CF2E4, 
0x69943B4B, 
0x659CB980, 
0x2B769CE1, 
0x4B200000, 
0x0220890B, 
0x26982113, 
0x184A8C80, 
0x267AA907, 
0x0A000000, 
0x1849C280, 
0x1879C380, 
0x2E7A458D, 
0x1260A000, 
0x26682618, 
0x1C09A2A6, 
0x0679A813, 
0x182A4000, 
0x2808460B, 
0x26000000, 
0x0CA98600, 
0x4324994B, 
0x679C3159, 
0x4A000000, 
0x2628A000, 
0x126A0000, 
0x1A09CA83, 
0x18000000;


int I; int J; int K; int M; int Q; int S;

_imp_string OMESS;

  OMESS = " "; 
for (I = 1; I != WORDMAX - 1; I += 1) {
if  (N == WORD[I]) goto FOUND; 
}
  I = DEFAULT; 
FOUND: 
  J = 1; 
do {
  K = WORD[I + J]; 
if  (K & 0x8000 == 0) break; 
  K = K ^ 0x8000; 
unless  (J == 1)   OMESS = OMESS." "; 
do {
  M = LETT[K];   S = 25; 
do {
  Q = M >> S & 63; 
if  (Q != 0)   OMESS = OMESS.TOSTRING(OUTTT[Q]); 
  S = S - 6; 
} while (! (S < 0) );
  K = K + 1; 
} while (! (M & 1 == 0) );
  J = J + 1; 
} while (1);
return OMESS; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

_imp_string SWRITE(int VALUE, int PLACES) {
_imp_string S;

int D0; int D1; int D2; int D3; int L;

  PLACES = PLACES & 15; 
asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //SETCC=0


asm(/*to do*/)/*5*/; //UNPACK&SPACEFILL


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //FORSIGNINSERTION


asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; //FORCEISOZONECODES


if  (VALUE < 0)   BYTEINTEGER(D1)
 = '-'; 
  L = D3 - D1; 
OUT: if  (PLACES >= L)   L = PLACES + 1; 
  D3 = D3 - L - 1; 
  BYTEINTEGER(D3)
 = L; 
return STRING(D3); 
WASZERO: 
  BYTEINTEGER(D3 - 1)
 = '0'; 
  L = 2; goto OUT; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void FAULT2(int N, int DATA, int IDENT) {
//***********************************************************************


//*SETSUPANERRORMESSAGEANDSHOVESITOUTONTOTHELISTING*


//*ANALSOOPTIONALLYTOTHETERMINAL*


//***********************************************************************


int I; int J; int T;

_imp_string MESS1; _imp_string MESS2; _imp_string WK1; _imp_string WK2;

//*DELSTART


if  (FAULTY <= 1 && SMAP != 0 || DCOMP != 0) assert(_IMP_MONITOR_); 
//*DELEND


  MESS1 = "";   MESS2 = ""; 
  FAULTY = FAULTY + 1; 
if  (N == 100)  {
//SYNTAXFAULTSARESPECIAL


  MESS1 = "\n     "; 
if  (  LINE != OLDLINE)   MESS1 = MESS1.  "Text mode failure - erroneos source line not available\n";  else {

  J = 0;   S = 0;   T = 0; 
do {
  I = J;   J = BYTEINTEGER(DATA +   Q); //DATAHASADDR(CC(0))


if  (J > 128 && I < 128) {   MESS2 = MESS2." %";   T = T + 2;  }
if  (I > 128 && J < 128) {   MESS2 = MESS2." ";   T = T + 1;  }
  MESS2 = MESS2.TOSTRING(J); 
  T = T + 1; 
if  (  Q == QMAX)   S = T; 
    Q =   Q + 1; 
if  (T >= 250) break; 
} while (! (J == ';' &&   Q > QMAX ||   Q == LENGTH) );
if  (  Q == QMAX)   S = T; 

}


} else {

  MESS1 = "\n*".SWRITE(  LINE, 4)
."   "; 
  PARMOPT = 1; 
if  (PARMLET == 0)   INHCODE = 1; //STOPGENERATINGCODE


  MESS1 = MESS1."FAULT".SWRITE(N, 2); 
  MESS2 = MESSAGE(N); 
if  (MESS2 -> /*STRRES*/ WK1.("##").WK2)   MESS2 = WK1.SWRITE(IDENT, 1)
.WK2; 
if  (MESS2 -> /*STRRES*/ WK1.("#").WK2)   MESS2 = WK1.SWRITE(DATA, 1)
.WK2; 
if  (MESS2 -> /*STRRES*/ WK1.("&&").WK2)   MESS2 = WK1.PRINTNAME(DATA)
.WK2; 
if  (MESS2 -> /*STRRES*/ WK1.("&").WK2)   MESS2 = WK1.PRINTNAME(IDENT)
.WK2; 
if  (N > 100)   MESS2 = MESS2." Disaster"; 

}

for (I = 2; I != 1; I += -1) {
if  (I == 1) SELECTOUTPUT(TTOPUT); 
PRINTSTRING(MESS1); 
if  (MESS2 != "") PRINTSTRING(MESS2); 
if  (N == 100 && S < 115)  {

NEWLINE(); SPACES(S + 4); PRINTSYMBOL('!'); 

}

NEWLINE(); 
if  (I == 1) SELECTOUTPUT(82); 
if  (TTOPUT <= 0) break; 
}
if  (N > 100) { assert(_IMP_MONITOR_); exit(0);  }

} /* End of Begin/Rt/Fn/Map depth=1 */;

void FAULT(int N, int FNAME) {
FAULT2(N, FNAME, FNAME); 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void WARN(int N, int V) {
_imp_string T;
_imp_string S;

  S = MESSAGE(N + 200); 
if  (S -> /*STRRES*/ S.("&").T)   S = S.PRINTNAME(V)
.T; 
PRINTSTRING("\n?  Warning :- ".S." at line No".SWRITE(  LINE, 1)
); 
NEWLINE(); 

} /* End of Begin/Rt/Fn/Map depth=1 */;

//THENEXT4ROUTINESCANBE


//MACROISEDUSINGMVC


//


void TOAR2(int PTR, int VALUE) {
if  (USEIMP == YES)  {

  A = VALUE; 
  A = VALUE >> 8; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

void TOAR4(int PTR, int VALUE) {
int I;

if  (USEIMP == YES)  {

for (I = 0; I != 3; I += 1) {
  A = BYTEINTEGER(ADDR(VALUE)
 + I); 
}

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

void TOAR8(int PTR, double VALUE) {
int I;

if  (USEIMP == YES)  {

for (I = 0; I != 7; I += 1) {
  A = BYTEINTEGER(ADDR(VALUE)
 + I); 
}

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

int FROMAR2(int PTR) {
if  (USEIMP == YES) return A << 8 | A;  else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

int FROMAR4(int PTR) {
if  (USEIMP == YES)  {

return A << 24 | A << 16 | A << 8 | A; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

_imp_string PRINTNAME(int N) {
int V; int K;

_imp_string S;

  V = WORD[N]; 
  K = BYTEINTEGER(DICTBASE + V); 
if  (K == 0)   S = "???";  else   S = STRING(DICTBASE + V); 
return S; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

//*DELSTART


void PRHEX(int VALUE, int PLACES) {
const char HEX[(15)-(0)+1]
;
$define HEX[N0] HEX[(N0)-(0)]
 = 
'0', 
'1', 
'2', 
'3', 
'4', 
'5', 
'6', 
'7', 
'8', 
'9', 
'A', 
'B', 
'C', 
'D', 
'E', 
'F';

int I;

for (I = (PLACES << 2) - 4; I != 0; I += -4) {
PRINTSYMBOL(HEX[VALUE >> I & 15]); 
}

} /* End of Begin/Rt/Fn/Map depth=1 */;

void PRINTLIST(int HEAD) {
int I; int J; int K;

PRINTSTRING("\nPRINT OF LIST "); 
WRITE(HEAD, 2); 
NEWLINE(); 
while  (HEAD != 0) {
FROM123(HEAD, I, J, K); 
WRITE(HEAD, 3); 
SPACES(3); 
PRHEX(I, 8); 
SPACES(3); 
PRHEX(J, 8); 
SPACES(3); 
PRHEX(K, 8); 
NEWLINE(); 
MLINK(HEAD); 
  HEAD = HEAD & 0xFFFF; //EXTRALINKINTAGSLIST!!


}

} /* End of Begin/Rt/Fn/Map depth=1 */;

//


void CHECKASL(void) {
//***********************************************************************


//*CHECKASLANDPRINTNOOFFREECELLS.DEBUGGINGSERVICEONLY*


//***********************************************************************


int N; int Q;

  Q = ASL;   N = 0; 
while  (Q != 0) {
  N = N + 1; 
  Q = ASLIST[Q]; 
}
NEWLINE(); 
PRINTSTRING("FREE CELLS AFTER LINE "); 
WRITE(  LINE, 3); 
PRINTSYMBOL('='); 
WRITE(N, 3); 

} /* End of Begin/Rt/Fn/Map depth=1 */;

//*DELEND


int MORESPACE(void) {
//***********************************************************************


//*FORMATSUPSOMEMOREOFTHEASL*


//***********************************************************************


int I; int N; int CL; int AMOUNT;

  N = ASLCURBTM - 1; 
  AMOUNT = (NNAMES + 1) >> 3; //EIGHTTHOFNNAMES


  I = ASLCURBTM - ((CONSTPTR + 8) >> 2); //GAPBETWEENCONSTS&ASL


if  (I >> 1 < AMOUNT) {   AMOUNT = I >> 1;   ASLWARN = 1;  }//HALFTHEGAPMAX


if  (AMOUNT < 20)   AMOUNT = 0; 
  ASLCURBTM = ASLCURBTM - AMOUNT; 
if  (ASLCURBTM <= 1)   ASLCURBTM = 1; 
  CL = 4 * ASLCURBTM - 8; 
if  (ASLCURBTM >= N || CONSTPTR > CL)  {

  ASLCURBTM = N + 1; //ASYOUWERE


for (I = 12; I != 1; I += -1) {
if  (DVHEADS[I] != 0) CLEARLIST(DVHEADS[I]); 
}
if  (ASL != 0) return ASL; 
FAULT(107, 0); 

} else   CONSTLIMIT = CL; //NEWVALUEWITHBIGGERASL


for (I = ASLCURBTM; I != N - 1; I += 1) {
  ASLIST[I + 1] = I; 
}
  ASLIST[ASLCURBTM] = 0; 
  ASL = N; return N; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

//integerfnNEWCELL


//***********************************************************************


//*PROVIDEANEWLISTPROCESSINGCELL.CRAPOUTIFNONEAVAILABLE*


//***********************************************************************


//integerI


//ifASL=0thenASL=MORESPACE


//I=ASL


//ASL=ASLIST(ASL)_LINK


//ASLIST(I)_LINK=0


//result=I


//end


void PUSH(int *CELL, int S1, int S2, int S3) {
//***********************************************************************


//*PUSHACELLCONTAININGTHE3STREAMSOFINFORMATIONGIVEN*


//*ONTOTHETOPOFTHELISTPOINTEDATBYCELL.*


//***********************************************************************


/*pending name*/recfm  *LCELL;
//(LISTF)


int I;

  I = ASL; 
if  (I == 0)   I = MORESPACE(); 
if  (USEIMP == YES)  {

  LCELL = ASLIST[I]; 
  ASL = LCELL; 
  LCELL = CELL; 
  CELL = I; 
  LCELL = S1; 
  LCELL = S2; 
  LCELL = S3; 

} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; 
}


} /* End of Begin/Rt/Fn/Map depth=1 */;

void POP(int *CELL, int *S1, int *S2, int *S3) {
//***********************************************************************


//*COPYTHEINFORMATIONFROMTHETOPCELLOFLIST'CELL'INTO*


//*S1,S2&S3ANDTHENPOPTHELISTUP1CELL.EMPTYLISTGIVE-1S*


//***********************************************************************


/*pending name*/recfm  *LCELL;
//(LISTF)


int I;

if  (USEIMP == YES)  {

  I = CELL; 
  LCELL = ASLIST[I]; 
  S1 = LCELL; 
  S2 = LCELL; 
  S3 = LCELL; 
if  (I != 0)  {

  CELL = LCELL; 
  LCELL = ASL; 
  ASL = I; 

}


} else {

asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; asm(/*to do*/)/*5*/; END: 

}


} /* End of Begin/Rt/Fn/Map depth=1 */;

void REPLACE1(int CELL, int S1) {
  ASLIST[CELL] = S1; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void REPLACE2(int CELL, int S2) {
  ASLIST[CELL] = S2; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void REPLACE3(int CELL, int S3) {
  ASLIST[CELL] = S3; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void BINSERT(int *TOP, int *BOT, int S1, int S2, int S3) {
//***********************************************************************


//*INSERTACELLATTHEBOTTOMOFALIST*


//*UPDATINGTOPANDBOTTOMPOINTERSAPPROPIATELY*


//***********************************************************************


int I; int J;

/*pending name*/recfm  *LCELL;
//(LISTF)


  I = ASL; 
if  (I == 0)   I = MORESPACE(); 
  LCELL = ASLIST[I]; 
  ASL = LCELL; 
  LCELL = S1;   LCELL = S2; 
  LCELL = S3;   LCELL = 0; 
  J = BOT; 
if  (J == 0) {   BOT = I;   TOP = BOT;  } else {

  ASLIST[J] = I; 
  BOT = I; 

}


} /* End of Begin/Rt/Fn/Map depth=1 */;

void INSERTATEND(int *CELL, int S1, int S2, int S3) {
//***********************************************************************


//*ADDACELLTOTHEBOTTOMOFTHELISTHEADEDBY'CELL'*


//***********************************************************************


int I; int J; int N;

/*pending name*/recfm  *LCELL;
//(LISTF)


  I = CELL;   J = I; 
while  (I != 0) {
  J = I; 
  I = ASLIST[J]; 
}
  N = ASL; 
if  (N == 0)   N = MORESPACE(); 
  LCELL = ASLIST[N]; 
  ASL = LCELL; 
if  (J == 0)   CELL = N;  else   ASLIST[J] = N; 
  LCELL = S1; 
  LCELL = S2; 
  LCELL = S3; 
  LCELL = 0; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void REPLACE123(int CELL, int S1, int S2, int S3) {
  ASLIST[CELL] = S1; 
  ASLIST[CELL] = S2; 
  ASLIST[CELL] = S3; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void MLINK(int *CELL) {
  CELL = ASLIST[CELL]; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

int FIND(int LAB, int LIST) {
//***********************************************************************


//*THISFUNCTIONSEARCHESLIST'LIST'FORLABINSTREAM2AND*


//*RETURNSTHECORRESPONDINGCELLNO.ITUSEDFORMORETHAN*


//*SCANNINGLABELLISTS.*


//***********************************************************************


while  (LIST != 0) {
if  (LAB == ASLIST[LIST]) return LIST; 
  LIST = ASLIST[LIST]; 
}
return -1; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void FROM123(int CELL, int *S1, int *S2, int *S3) {
//***********************************************************************


//*ALLTHEFROMSRETURNINFOFROMCELLSOFALISTWITHOUT*


//*AFFECTINGTHELISTINANYWAY.*


//***********************************************************************


/*pending name*/recfm  *LCELL;
//(LISTF)


  LCELL = ASLIST[CELL]; 
  S1 = LCELL; 
  S2 = LCELL; 
  S3 = LCELL; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void FROM12(int CELL, int *S1, int *S2) {
/*pending name*/recfm  *LCELL;
//(LISTF)


  LCELL = ASLIST[CELL]; 
  S1 = LCELL; 
  S2 = LCELL; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

int FROM1(int CELL) {
return ASLIST[CELL]; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

int FROM2(int CELL) {
return ASLIST[CELL]; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

int FROM3(int CELL) {
return ASLIST[CELL]; 

} /* End of Begin/Rt/Fn/Map depth=1 */;

void CLEARLIST(int *OPHEAD) {
//***********************************************************************


//*THROWAWAYACOMPLETELIST(MAYBENULL!)*


//***********************************************************************


int I; int J;

  I = OPHEAD;   J = I; 
while  (I != 0) {
  J = I; 
  I = ASLIST[J]; 
}
if  (J != 0)  {

  ASLIST[J] = ASL; 
  ASL = OPHEAD;   OPHEAD = 0; 

}


} /* End of Begin/Rt/Fn/Map depth=1 */;

//routineCONCAT(integernameLIST1,LIST2)


//!***********************************************************************


//!*ADDSLIST2TOBOTTOMOFLIST1*


//!***********************************************************************


//integerI,J


//I=LIST1


//J=I


//whileI#0thenJ=IandI=ASLIST(J)_LINK


//ifJ=0thenLIST1=LIST2elseASLIST(J)_LINK=LIST2


//LIST2=0


//end

//ANERRORPUTSCELLTWICEONTO


//FREELIST-CATASTROPHIC!



  exit(0);
} /* End of program */
