#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 !!! %option stack=30
// 2 !!! 19-Feb-82 !!!! 15/5/78
// 3 {Modified run under new subsystem so that it can support its own supervisor}
// 4
// 5 !!!!!!!!!!!%CONTROL 1; ! ... TEST ONLY SWITCHES
// 6 %CONSTSTRING(5) VERSION = "4.12"
const _imp_string5 VERSION = _imp_str_init("4.12");
// 7
// 8 %CONSTINTEGER GBASE= 426
// 9 %CONSTINTEGER GMAX = 512; !???
// 10
// 11 {Changed from %CONST to %OWN to get 8.1 pass1 to accept source}
// 12 %ownSHORTINTEGERARRAY PHRASE(132:255) = 326, 137, 219, 0,
static short int PHRASE[124] = {
326, 137, 219, 0, 386, 164, 242, 246, 216, 210, 229, 98, 378, 183, 310, 292, 268, 259, 349, 221, 367,
364, 410, 413, 416, 419, 422, 391, 405, 199, 236, 158, 382, 357, 0, 278, 285, 307, 302, 318, 321, 346,
341, 370, 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 40, 49, 96, 0};
// 13+ 386, 164, 242, 246, 216, 210, 229, 98,
// 14+ 378, 183, 310, 292, 268, 259, 349, 221,
// 15+ 367, 364, 410, 413, 416, 419, 422, 391,
// 16+ 405, 199, 236, 158, 382, 357, 0, 278,
// 17+ 285, 307, 302, 318, 321, 346, 341, 370,
// 18+ 425, 426, 0, 0, 0, 0, 0, 0,
// 19+ 0, 0, 0, 0, 0, 0, 0, 0,
// 20+ 0, 0, 0, 0, 0, 0, 0, 0,
// 21+ 0, 0, 0, 0, 0, 0, 0, 0,
// 22+ 0, 0, 0, 0, 0, 0, 0, 0,
// 23+ 0, 0, 0, 0, 0, 0, 0, 0,
// 24+ 0, 0, 0, 0, 0, 0, 0, 0,
// 25+ 0, 0, 0, 0, 0, 0, 0, 0,
// 26+ 0, 0, 0, 0, 0, 0, 0, 0,
// 27+ 0, 0, 1, 7, 40, 49, 96, 0
// 28
// 29 %CONSTBYTEINTEGERARRAY ATOMIC(105:130) =
const unsigned char ATOMIC[26] = {14, 9, 4, 20, 6, 110, 111, 30, 3, 80, 59, 59, 13,
4, 13, 59, 43, 73, 79, 72, 71, 4, 2, 2, 4, 2};
// 30+ 14, 9, 4, 20, 6, 110, 111, 30,
// 31+ 3, 80, 59, 59, 13, 4, 13, 59,
// 32+ 43, 73, 79, 72, 71, 4, 2, 2,
// 33+ 4, 2
// 34
// 35 %OWNSHORTINTEGERARRAY GRAM(0:GMAX) =
static short int GRAM[513] = {
0, -32765, 4, 5, 511, 8198, 4, -32748, -32747, -32741, -32740, -32739, -32738, -32737,
15, -32736, -32750, 511, -32257, 15, 27, 22, -32744, 511, 8217, -32747, 511, 511,
511, 27, 33, 37, 36, 8226, -32750, 511, 16, 8230, -32737, 511, -32726, 511,
43, 44, -32725, -32721, 27, -32725, 44, -32708, -32706, -32698, -32689, -32688, -32687, -32741,
-32675, -32686, -32741, 66, -32706, 511, -32698, -32695, -32257, 27, -24482, -24482, -32673, 511,
71, -32694, -32695, 511, -32695, -32257, 77, -32681, 511, 89, -32257, 4187, -32685, 84,
-32685, -32695, 511, -32695, 27, -32703, 73, -32695, 511, 8219, 8219, 12315, 97, 27,
-32657, -32647, -32655, -32654, -32647, -32660, -32653, -32651, -32646, 122, -32645, -32649, 120, -32644,
121, -32643, 126, -32645, 119, -32641, 128, -24576, 8192, 129, 130, 0, 8192, 8192,
8192, 8192, 131, 132, 133, 134, 114, 115, 135, -32649, 123, -32768, -32622, -32621,
-32620, -32624, -32619, 150, -32623, 8344, 8192, 126, 125, 154, -32613, 0, -32612, 0,
157, 0, 20480, 150, -32607, -32606, 163, 4096, 4608, 2048, -32594, -32768, -32768, -32594,
-32594, -32593, -32593, -32591, -32591, 177, 178, -32589, 0, 180, 181, 0, 182, 0,
175, -32594, -32768, -32768, -32594, -32594, -32594, -32574, -32574, -32573, -32573, 195, 196, 197,
0, 198, 194, -32564, -32564, -32562, -32562, 206, -32561, 0, 208, 0, 209, 204,
-32555, -32768, 0, 214, 12503, 0, 8409, -32552, 0, -24576, 8192, -32542, 223, -32541,
-32540, 174, 0, 215, 0, -32532, -32536, 241, -32529, -24576, -32533, 8192, -32533, -32533,
8192, -24576, 8192, 0, 243, -32526, -32768, 243, -32520, 249, 250, 254, -32516, 0,
-32518, 250, 8447, 256, -32510, 0, 0, -32507, 262, 4608, 2311, 264, 18697, -32501,
0, 10240, -32498, 271, 272, 273, 274, 125, 16659, -32491, 0, 8192, -32768, -32486,
-32485, 0, 215, 8476, 0, -32768, -32768, -32478, -32477, 0, 215, 284, -32468, -32474,
8487, -32474, -32467, -32468, -32468, 0, 8489, 8488, 8495, -32466, -32462, 0, 8496, 8500,
-32461, 0, -32452, 8504, -32457, -32451, -32452, 0, 8506, 8505, 8511, -32450, 0, 8514,
-32447, -32443, 0, 8515, -32434, -32440, 8521, -32440, -32430, -32429, -32429, 0, 8527, -32428,
-32428, 0, 8522, 8523, 8527, 8534, -32427, -32423, 0, 8535, 8539, -32422, 0, 350,
-24223, -24222, 0, 355, 351, -24223, 0, 8550, 359, 8552, 361, 8554, 363, 8192,
365, 4462, 0, 368, -32401, 0, 371, 4468, 373, 12662, -32392, 377, 371, 0,
379, 8572, -32390, 0, 383, 8576, 385, 8407, -32380, 0, -32378, 8448, 388, -32768,
-32768, -32370, -32370, -32369, -32369, 399, 401, -32366, 0, 0, 403, 404, 398, 406,
4503, -32359, 377, 406, 411, 4508, 365, 414, 4511, 411, 417, 4514, 414, 420,
4517, 417, 423, 4520, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0};
// 36+ 0, -32765, 4, 5, 511, 8198, 4, -32748,
// 37+ -32747, -32741, -32740, -32739, -32738, -32737, 15, -32736,
// 38+ -32750, 511, -32257, 15, 27, 22, -32744, 511,
// 39+ 8217, -32747, 511, 511, 511, 27, 33, 37,
// 40+ 36, 8226, -32750, 511, 16, 8230, -32737, 511,
// 41+ -32726, 511, 43, 44, -32725, -32721, 27, -32725,
// 42+ 44, -32708, -32706, -32698, -32689, -32688, -32687, -32741,
// 43+ -32675, -32686, -32741, 66, -32706, 511, -32698, -32695,
// 44+ -32257, 27, -24482, -24482, -32673, 511, 71, -32694,
// 45+ -32695, 511, -32695, -32257, 77, -32681, 511, 89,
// 46+ -32257, 4187, -32685, 84, -32685, -32695, 511, -32695,
// 47+ 27, -32703, 73, -32695, 511, 8219, 8219, 12315,
// 48+ 97, 27, -32657, -32647, -32655, -32654, -32647, -32660,
// 49+ -32653, -32651, -32646, 122, -32645, -32649, 120, -32644,
// 50+ 121, -32643, 126, -32645, 119, -32641, 128, -24576,
// 51+ 8192, 129, 130, 0, 8192, 8192, 8192, 8192,
// 52+ 131, 132, 133, 134, 114, 115, 135, -32649,
// 53+ 123, -32768, -32622, -32621, -32620, -32624, -32619, 150,
// 54+ -32623, 8344, 8192, 126, 125, 154, -32613, 0,
// 55+ -32612, 0, 157, 0, 20480, 150, -32607, -32606,
// 56+ 163, 4096, 4608, 2048, -32594, -32768, -32768, -32594,
// 57+ -32594, -32593, -32593, -32591, -32591, 177, 178, -32589,
// 58+ 0, 180, 181, 0, 182, 0, 175, -32594,
// 59+ -32768, -32768, -32594, -32594, -32594, -32574, -32574, -32573,
// 60+ -32573, 195, 196, 197, 0, 198, 194, -32564,
// 61+ -32564, -32562, -32562, 206, -32561, 0, 208, 0,
// 62+ 209, 204, -32555, -32768, 0, 214, 12503, 0,
// 63+ 8409, -32552, 0, -24576, 8192, -32542, 223, -32541,
// 64+ -32540, 174, 0, 215, 0, -32532, -32536, 241,
// 65+ -32529, -24576, -32533, 8192, -32533, -32533, 8192, -24576,
// 66+ 8192, 0, 243, -32526, -32768, 243, -32520, 249,
// 67+ 250, 254, -32516, 0, -32518, 250, 8447, 256,
// 68+ -32510, 0, 0, -32507, 262, 4608, 2311, 264,
// 69+ 18697, -32501, 0, 10240, -32498, 271, 272, 273,
// 70+ 274, 125, 16659, -32491, 0, 8192, -32768, -32486,
// 71+ -32485, 0, 215, 8476, 0, -32768, -32768, -32478,
// 72+ -32477, 0, 215, 284, -32468, -32474, 8487, -32474,
// 73+ -32467, -32468, -32468, 0, 8489, 8488, 8495, -32466,
// 74+ -32462, 0, 8496, 8500, -32461, 0, -32452, 8504,
// 75+ -32457, -32451, -32452, 0, 8506, 8505, 8511, -32450,
// 76+ 0, 8514, -32447, -32443, 0, 8515, -32434, -32440,
// 77+ 8521, -32440, -32430, -32429, -32429, 0, 8527, -32428,
// 78+ -32428, 0, 8522, 8523, 8527, 8534, -32427, -32423,
// 79+ 0, 8535, 8539, -32422, 0, 350, -24223, -24222,
// 80+ 0, 355, 351, -24223, 0, 8550, 359, 8552,
// 81+ 361, 8554, 363, 8192, 365, 4462, 0, 368,
// 82+ -32401, 0, 371, 4468, 373, 12662, -32392, 377,
// 83+ 371, 0, 379, 8572, -32390, 0, 383, 8576,
// 84+ 385, 8407, -32380, 0, -32378, 8448, 388, -32768,
// 85+ -32768, -32370, -32370, -32369, -32369, 399, 401, -32366,
// 86+ 0, 0, 403, 404, 398, 406, 4503, -32359,
// 87+ 377, 406, 411, 4508, 365, 414, 4511, 411,
// 88+ 417, 4514, 414, 420, 4517, 417, 423, 4520,
// 89+ 420, 0, 0, 0, 0, 0, 0, 0,
// 90+ 0, 0, 0, 0, 0, 0, 0, 0,
// 91+ 0, 0, 0, 0, 0, 0, 0, 0,
// 92+ 0, 0, 0, 0, 0, 0, 0, 0,
// 93+ 0, 0, 0, 0, 0, 0, 0, 0,
// 94+ 0, 0, 0, 0, 0, 0, 0, 0,
// 95+ 0, 0, 0, 0, 0, 0, 0, 0,
// 96+ 0, 0, 0, 0, 0, 0, 0, 0,
// 97+ 0, 0, 0, 0, 0, 0, 0, 0,
// 98+ 0, 0, 0, 0, 0, 0, 0, 0,
// 99+ 0, 0, 0, 0, 0, 0, 0, 0,
// 100+ 0
// 101
// 102 %OWNBYTEINTEGERARRAY GCLASS(0:GMAX) =
static unsigned char GCLASS[513] = {
255, 114, 116, 1, 89, 162, 2, 53, 54, 49, 50, 51, 52, 57, 142, 1, 118, 117, 13, 142, 152, 152, 6,
117, 142, 118, 117, 13, 59, 144, 59, 152, 83, 164, 6, 117, 128, 164, 4, 13, 1, 13, 56, 59, 56, 4,
2, 56, 59, 34, 35, 28, 29, 10, 11, 33, 42, 19, 48, 133, 35, 13, 28, 12, 119, 133, 28, 29, 11,
13, 150, 5, 12, 119, 12, 119, 133, 35, 13, 150, 119, 165, 15, 83, 4, 12, 119, 12, 133, 5, 10, 10,
119, 83, 150, 165, 1, 138, 63, 62, 61, 60, 64, 75, 74, 77, 78, 76, 94, 109, 20, 20, 95, 20, 109,
94, 109, 20, 95, 83, 161, 101, 101, 143, 159, 137, 163, 166, 101, 153, 153, 153, 102, 102, 102, 109, 94, 23,
8, 22, 21, 24, 73, 143, 15, 83, 141, 90, 91, 101, 112, 0, 4, 0, 153, 133, 147, 102, 86, 87, 88,
147, 146, 140, 70, 67, 68, 69, 71, 74, 75, 76, 77, 78, 101, 94, 0, 101, 153, 137, 153, 102, 102, 70,
67, 68, 69, 72, 71, 74, 75, 76, 77, 78, 94, 101, 145, 153, 102, 74, 75, 76, 77, 78, 94, 0, 101,
161, 153, 102, 80, 81, 115, 1, 147, 2, 134, 105, 0, 82, 145, 99, 100, 1, 32, 79, 149, 150, 151, 86,
87, 88, 43, 84, 45, 83, 43, 45, 83, 84, 83, 82, 139, 4, 2, 139, 53, 51, 59, 152, 4, 0, 59,
139, 164, 97, 4, 0, 136, 99, 100, 148, 140, 46, 140, 46, 0, 140, 99, 100, 132, 137, 46, 108, 132, 46,
0, 132, 83, 1, 9, 145, 147, 167, 106, 84, 83, 1, 9, 145, 132, 168, 43, 45, 167, 36, 38, 39, 40,
0, 170, 169, 167, 36, 38, 0, 169, 167, 36, 0, 43, 168, 37, 41, 40, 0, 172, 171, 168, 37, 0, 168,
37, 41, 0, 171, 43, 45, 168, 36, 38, 39, 40, 0, 174, 39, 40, 0, 173, 174, 172, 168, 36, 38, 0,
173, 168, 36, 0, 151, 30, 31, 0, 151, 151, 30, 0, 137, 6, 147, 4, 147, 126, 147, 1, 147, 127, 59,
4, 0, 1, 147, 113, 147, 4, 2, 98, 97, 152, 175, 4, 0, 1, 162, 113, 162, 59, 139, 4, 164, 59,
70, 69, 74, 75, 76, 77, 78, 94, 95, 0, 159, 101, 153, 102, 1, 147, 4, 127, 98, 1, 147, 107, 1,
147, 107, 1, 147, 107, 1, 147, 107, 1, 147, 107, 124, 125, 147, 107, 147, 107, 147, 107, 147, 127, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0};
// 103+ 255, 114, 116, 1, 89, 162, 2, 53,
// 104+ 54, 49, 50, 51, 52, 57, 142, 1,
// 105+ 118, 117, 13, 142, 152, 152, 6, 117,
// 106+ 142, 118, 117, 13, 59, 144, 59, 152,
// 107+ 83, 164, 6, 117, 128, 164, 4, 13,
// 108+ 1, 13, 56, 59, 56, 4, 2, 56,
// 109+ 59, 34, 35, 28, 29, 10, 11, 33,
// 110+ 42, 19, 48, 133, 35, 13, 28, 12,
// 111+ 119, 133, 28, 29, 11, 13, 150, 5,
// 112+ 12, 119, 12, 119, 133, 35, 13, 150,
// 113+ 119, 165, 15, 83, 4, 12, 119, 12,
// 114+ 133, 5, 10, 10, 119, 83, 150, 165,
// 115+ 1, 138, 63, 62, 61, 60, 64, 75,
// 116+ 74, 77, 78, 76, 94, 109, 20, 20,
// 117+ 95, 20, 109, 94, 109, 20, 95, 83,
// 118+ 161, 101, 101, 143, 159, 137, 163, 166,
// 119+ 101, 153, 153, 153, 102, 102, 102, 109,
// 120+ 94, 23, 8, 22, 21, 24, 73, 143,
// 121+ 15, 83, 141, 90, 91, 101, 112, 0,
// 122+ 4, 0, 153, 133, 147, 102, 86, 87,
// 123+ 88, 147, 146, 140, 70, 67, 68, 69,
// 124+ 71, 74, 75, 76, 77, 78, 101, 94,
// 125+ 0, 101, 153, 137, 153, 102, 102, 70,
// 126+ 67, 68, 69, 72, 71, 74, 75, 76,
// 127+ 77, 78, 94, 101, 145, 153, 102, 74,
// 128+ 75, 76, 77, 78, 94, 0, 101, 161,
// 129+ 153, 102, 80, 81, 115, 1, 147, 2,
// 130+ 134, 105, 0, 82, 145, 99, 100, 1,
// 131+ 32, 79, 149, 150, 151, 86, 87, 88,
// 132+ 43, 84, 45, 83, 43, 45, 83, 84,
// 133+ 83, 82, 139, 4, 2, 139, 53, 51,
// 134+ 59, 152, 4, 0, 59, 139, 164, 97,
// 135+ 4, 0, 136, 99, 100, 148, 140, 46,
// 136+ 140, 46, 0, 140, 99, 100, 132, 137,
// 137+ 46, 108, 132, 46, 0, 132, 83, 1,
// 138+ 9, 145, 147, 167, 106, 84, 83, 1,
// 139+ 9, 145, 132, 168, 43, 45, 167, 36,
// 140+ 38, 39, 40, 0, 170, 169, 167, 36,
// 141+ 38, 0, 169, 167, 36, 0, 43, 168,
// 142+ 37, 41, 40, 0, 172, 171, 168, 37,
// 143+ 0, 168, 37, 41, 0, 171, 43, 45,
// 144+ 168, 36, 38, 39, 40, 0, 174, 39,
// 145+ 40, 0, 173, 174, 172, 168, 36, 38,
// 146+ 0, 173, 168, 36, 0, 151, 30, 31,
// 147+ 0, 151, 151, 30, 0, 137, 6, 147,
// 148+ 4, 147, 126, 147, 1, 147, 127, 59,
// 149+ 4, 0, 1, 147, 113, 147, 4, 2,
// 150+ 98, 97, 152, 175, 4, 0, 1, 162,
// 151+ 113, 162, 59, 139, 4, 164, 59, 70,
// 152+ 69, 74, 75, 76, 77, 78, 94, 95,
// 153+ 0, 159, 101, 153, 102, 1, 147, 4,
// 154+ 127, 98, 1, 147, 107, 1, 147, 107,
// 155+ 1, 147, 107, 1, 147, 107, 1, 147,
// 156+ 107, 124, 125, 147, 107, 147, 107, 147,
// 157+ 107, 147, 127, 0, 0, 0, 0, 0,
// 158+ 0, 0, 0, 0, 0, 0, 0, 0,
// 159+ 0, 0, 0, 0, 0, 0, 0, 0,
// 160+ 0, 0, 0, 0, 0, 0, 0, 0,
// 161+ 0, 0, 0, 0, 0, 0, 0, 0,
// 162+ 0, 0, 0, 0, 0, 0, 0, 0,
// 163+ 0, 0, 0, 0, 0, 0, 0, 0,
// 164+ 0, 0, 0, 0, 0, 0, 0, 0,
// 165+ 0, 0, 0, 0, 0, 0, 0, 0,
// 166+ 0, 0, 0, 0, 0, 0, 0, 0,
// 167+ 0
// 168
// 169 %CONSTSHORTINTEGERARRAY KDICT(32: 538) =
const short int KDICT[507] = {
0, 511, 131, 527, 131, 131, 531, 131, 535, 539, 543, 551, 555, 559,
575, 579, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 591, 594,
599, 619, 635, 131, 131, 652, 724, 752, 840, 876, 1020, 128, 128, 1084,
128, 128, 1296, 1320, 1344, 1384, 1408, 128, 1460, 1824, 2056, 2080, 128, 2112,
128, 128, 128, 131, 2127, 131, 131, 2151, 131, 131, 131, 131, 131, 131,
131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
131, 131, 131, 131, 131, 131, 131, 131, 2155, 131, 131, -32351, -16119, 16679,
16743, 18734, 16614, 16385, 16386, -16282, 16489, 17128, 16388, -32322, -15576, 17195, 16392, 21710,
-32465, 19369, 16550, 16387, 16397, -32196, -32451, 18542, 18798, 16804, -32323, -14138, 18670, 19284,
-32195, -32450, 18606, 16868, 18862, -30642, 10578, 11457, -31922, -32429, 16823, 8912, 67, 16951,
9921, 69, -32429, 16887, 8912, 67, 17079, 68, 18910, -32187, 10841, 69, 16896, 9415,
78, 17393, -30070, -32177, 8665, 8908, 16394, -31027, 78, -31533, 84, -32183, 10194, 76,
17386, 10958, 69, 18135, 84, 16512, 8909, 10830, 16391, 16384, -32055, 10073, 9921, 8649,
16704, 9153, 10190, 8915, 17322, -28340, -31026, -31530, 88, -32055, 8916, 10066, 9793, 16768,
84, 18071, 10053, 84, 16399, 68, -32433, 21873, 70, -31034, -31540, 80, -32059, 10194,
10567, 9921, 22001, 9938, 22065, 10697, 84, 17904, 9801, 69, 21937, 8915, 19171, -31039,
-31543, -32306, 10575, 16395, -32429, 17143, 8912, 67, 17207, 9422, 9299, 19106, 10700, 69,
17623, -26042, 10830, 9157, 10565, -28607, -29626, -30643, -31794, -32301, -15243, 17528, 8912, 67,
23416, 9921, 69, -32301, -15179, 17592, 8912, 67, 23480, 10305, -32301, -14734, 18040, 8912,
67, 24306, 78, -32301, -14798, 17976, 8912, 67, 24370, 10578, 11457, -31922, -32429, 18163,
8912, 67, 23539, 9921, 69, -32301, -14539, 18232, 8912, 67, 23608, 18204, -32183, 10063,
71, 17024, 10835, 17840, 10305, -32429, 16631, 8912, 67, 16695, -32319, 10831, 18464, 8909,
-32301, -16201, 16568, 8912, 67, 17015, -32050, -32302, 10071, 16448, 18975, 19219, -31291, 8914,
9412, 8387, 8916, -32301, -15694, 17080, 8912, 67, 24050, 9938, 16832, -31419, 10959, 9428,
8910, -32301, -15886, 16888, 8912, 67, 24114, -29759, -30909, -31408, -32173, 10964, 10066, 17495,
9813, 7892, -32451, 17430, 17045, 8389, 84, 19041, 10575, 68, -32088, 10182, 9938, 10817,
21810, 21521, 76, -27455, -28474, -29491, -30642, -32301, -10123, 22648, -31540, -32178, 8912, 67,
23672, 10575, 8397, 76, 18032, 10063, 71, 17968, 9921, 69, -32301, -10059, 22712, 8912,
67, 23736, 10305, -32301, -9614, 23160, 8912, 67, 24178, 78, -32301, -9678, 23096, 8912,
67, 24242, 10578, 11457, -31922, -32429, 23283, 8912, 67, 23795, 9921, 69, -32301, -9419,
23352, 8912, 67, 23864, -25656, -26167, -26672, -31532, -32041, 10713, 8916, 77, 16640, 10825,
9283, 16825, -28223, -28593, 9426, 9166, -29144, -30015, -31034, -32051, 8398, 8909, -12107, 20664,
10305, -32301, -11662, 21112, 8912, 67, 24498, 78, -32301, -11726, 21048, 8912, 67, 23922,
10578, 11457, 8398, 8909, -11467, 21304, 20496, 80, 17751, 10834, 16396, 8645, -8206, 24567,
10055, 9793, 17688, 10575, 84, 16960, -32184, 10962, 69, 17559, 10053, 16389, 78, -32180,
9428, 76, 18397, 10693, 83, 18268, 9416, 8908, 18333, -32067, -32292, -15771, 17005, 17252,
18734, 16402, 16649};
// 170+ 0, 511, 131, 527, 131, 131, 531, 131,
// 171+ 535, 539, 543, 551, 555, 559, 575, 579,
// 172+ 129, 129, 129, 129, 129, 129, 129, 129,
// 173+ 129, 129, 591, 594, 599, 619, 635, 131,
// 174+ 131, 652, 724, 752, 840, 876, 1020, 128,
// 175+ 128, 1084, 128, 128, 1296, 1320, 1344, 1384,
// 176+ 1408, 128, 1460, 1824, 2056, 2080, 128, 2112,
// 177+ 128, 128, 128, 131, 2127, 131, 131, 2151,
// 178+ 131, 131, 131, 131, 131, 131, 131, 131,
// 179+ 131, 131, 131, 131, 131, 131, 131, 131,
// 180+ 131, 131, 131, 131, 131, 131, 131, 131,
// 181+ 131, 131, 131, 131, 2155, 131, 131, -32351,
// 182+ -16119, 16679, 16743, 18734, 16614, 16385, 16386, -16282,
// 183+ 16489, 17128, 16388, -32322, -15576, 17195, 16392, 21710,
// 184+ -32465, 19369, 16550, 16387, 16397, -32196, -32451, 18542,
// 185+ 18798, 16804, -32323, -14138, 18670, 19284, -32195, -32450,
// 186+ 18606, 16868, 18862, -30642, 10578, 11457, -31922, -32429,
// 187+ 16823, 8912, 67, 16951, 9921, 69, -32429, 16887,
// 188+ 8912, 67, 17079, 68, 18910, -32187, 10841, 69,
// 189+ 16896, 9415, 78, 17393, -30070, -32177, 8665, 8908,
// 190+ 16394, -31027, 78, -31533, 84, -32183, 10194, 76,
// 191+ 17386, 10958, 69, 18135, 84, 16512, 8909, 10830,
// 192+ 16391, 16384, -32055, 10073, 9921, 8649, 16704, 9153,
// 193+ 10190, 8915, 17322, -28340, -31026, -31530, 88, -32055,
// 194+ 8916, 10066, 9793, 16768, 84, 18071, 10053, 84,
// 195+ 16399, 68, -32433, 21873, 70, -31034, -31540, 80,
// 196+ -32059, 10194, 10567, 9921, 22001, 9938, 22065, 10697,
// 197+ 84, 17904, 9801, 69, 21937, 8915, 19171, -31039,
// 198+ -31543, -32306, 10575, 16395, -32429, 17143, 8912, 67,
// 199+ 17207, 9422, 9299, 19106, 10700, 69, 17623, -26042,
// 200+ 10830, 9157, 10565, -28607, -29626, -30643, -31794, -32301,
// 201+ -15243, 17528, 8912, 67, 23416, 9921, 69, -32301,
// 202+ -15179, 17592, 8912, 67, 23480, 10305, -32301, -14734,
// 203+ 18040, 8912, 67, 24306, 78, -32301, -14798, 17976,
// 204+ 8912, 67, 24370, 10578, 11457, -31922, -32429, 18163,
// 205+ 8912, 67, 23539, 9921, 69, -32301, -14539, 18232,
// 206+ 8912, 67, 23608, 18204, -32183, 10063, 71, 17024,
// 207+ 10835, 17840, 10305, -32429, 16631, 8912, 67, 16695,
// 208+ -32319, 10831, 18464, 8909, -32301, -16201, 16568, 8912,
// 209+ 67, 17015, -32050, -32302, 10071, 16448, 18975, 19219,
// 210+ -31291, 8914, 9412, 8387, 8916, -32301, -15694, 17080,
// 211+ 8912, 67, 24050, 9938, 16832, -31419, 10959, 9428,
// 212+ 8910, -32301, -15886, 16888, 8912, 67, 24114, -29759,
// 213+ -30909, -31408, -32173, 10964, 10066, 17495, 9813, 7892,
// 214+ -32451, 17430, 17045, 8389, 84, 19041, 10575, 68,
// 215+ -32088, 10182, 9938, 10817, 21810, 21521, 76, -27455,
// 216+ -28474, -29491, -30642, -32301, -10123, 22648, -31540, -32178,
// 217+ 8912, 67, 23672, 10575, 8397, 76, 18032, 10063,
// 218+ 71, 17968, 9921, 69, -32301, -10059, 22712, 8912,
// 219+ 67, 23736, 10305, -32301, -9614, 23160, 8912, 67,
// 220+ 24178, 78, -32301, -9678, 23096, 8912, 67, 24242,
// 221+ 10578, 11457, -31922, -32429, 23283, 8912, 67, 23795,
// 222+ 9921, 69, -32301, -9419, 23352, 8912, 67, 23864,
// 223+ -25656, -26167, -26672, -31532, -32041, 10713, 8916, 77,
// 224+ 16640, 10825, 9283, 16825, -28223, -28593, 9426, 9166,
// 225+ -29144, -30015, -31034, -32051, 8398, 8909, -12107, 20664,
// 226+ 10305, -32301, -11662, 21112, 8912, 67, 24498, 78,
// 227+ -32301, -11726, 21048, 8912, 67, 23922, 10578, 11457,
// 228+ 8398, 8909, -11467, 21304, 20496, 80, 17751, 10834,
// 229+ 16396, 8645, -8206, 24567, 10055, 9793, 17688, 10575,
// 230+ 84, 16960, -32184, 10962, 69, 17559, 10053, 16389,
// 231+ 78, -32180, 9428, 76, 18397, 10693, 83, 18268,
// 232+ 9416, 8908, 18333, -32067, -32292, -15771, 17005, 17252,
// 233+ 18734, 16402, 16649
// 234
// 235 !*******************************************
// 236 !* *
// 237 !* TRANSPORTABLE IMP COMPILER *
// 238 !* *
// 239 !* COPYRIGHT PETER S. ROBERTSON *
// 240 !* DEPARTMENT OF COMPUTER SCIENCE *
// 241 !* UNIVERSITY OF EDINBURGH *
// 242 !* ALL RIGHTS RESERVED *
// 243 !* *
// 244 !*******************************************
// 245 !
// 246 ! THROUGHOUT THE SOURCE TEXT OF THIS PROGRAM, THE LOWER CASE
// 247 ! ALPHABET IS REPRESENTED BY LETTER+32 E.G. 'A'+32
// 248
// 249 %CONSTINTEGER SS0=250, SS1=251, SS2=252, SS3=253, SS4=254
// 250 %CONSTINTEGER NULL=512; !???
// 251 %CONSTINTEGER TRANSP = 18
// 252 %CONSTINTEGER PHRASES = 132
// 253 %CONSTINTEGER EQUIVS = 105
// 254 %CONSTINTEGER DIRECTIVES = 86
// 255 %CONSTINTEGER ANAPP=160
// 256 %CONSTINTEGER GLOBAL=0
// 257 %CONSTINTEGER ICONST=83, RCONST=84, SCONST=82
// 258 %CONSTINTEGER LB=1, RB=2
// 259 %CONSTINTEGER PRE1=49, PRE2=57
// 260 %CONSTINTEGER OWN1=53, OWN2=51
// 261 %CONSTINTEGER SET1=60, SET2=64
// 262 %CONSTINTEGER CHECK1=66, CHECK2=72
// 263 %CONSTINTEGER DEF1=60, DEF2=79
// 264 %CONSTINTEGER IDENT=59, SWITCH=80, COMMENT=7
// 265 %CONSTINTEGER TERMIN=13
// 266 %CONSTINTEGER APPEP=153
// 267 %CONSTINTEGER PAGE SIZE = 64
// 268 %CONSTINTEGER STX = 2
// 269 %CONSTINTEGER PAGE = 12
// 270 !*********************************************
// 271 !* OTYPE * MOD * SPECD * FORMAT * APP * LINK *
// 272 !*********************************************
// 273 ! 3 2 1 1 1 8
// 274 !
// 275 ! OTYPE : 1 OWN
// 276 ! 2 CONST
// 277 ! 3 EXTRINSIC
// 278 ! 4 SYSTEM
// 279 ! 5 DYNAMIC
// 280 ! 6 EXTERNAL
// 281 ! 7 PERM
// 282 !
// 283 !*******************************
// 284 !* LENGTH * USED * TYPE * FORM *
// 285 !*******************************
// 286 ! 8 1 3 4
// 287 !
// 288 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 289 ! ------I/O STREAM ASSIGNMENTS CHANGED TEMPORARILY------
// 290 %CONSTINTEGER PRIM = 2, PROG = 1; ! INPUT STREAMS
// 291 %CONSTINTEGER REPORT=3,OBJ=2, LISTING=1; ! OUTPUT STREAMS
// 292 %CONSTINTEGER EOP=87; ! ENDOFPROGRAM SUBATOM
// 293 %CONSTINTEGER EOF=86; ! ENDOFFILE SUBATOM
// 294 %CONSTINTEGER TEXT LIMIT=255; ! MAX STRING LENGTH
// 295 %CONSTBYTEINTEGERARRAY CMAP(0 : 15)= 0, 67, 68, 81, 65, 83, 80, 73,
const unsigned char CMAP[16] = {0, 67, 68, 81, 65, 83, 80, 73, 72, 71, 79, 69, 70, 66, 0, 0};
// 296+ 72, 71, 79, 69, 7 0, 66, 0, 0
// 297 %CONSTINTEGER STRING = 16, RECORD=17; ! STRING/RECORD SUBATOMS
// 298 %CONSTINTEGER SPECIAL=55; ! SPECIAL DECLARATOR
// 299 %CONSTINTEGER RFN=65; ! RECORDFORMAT NAME CLASS
// 300 %CONSTINTEGER ULINE=18; ! CLASS FOR '_'
// 301 %CONSTINTEGER NULL STRING=401
// 302 %OWNINTEGER PERMIN = 1; ! PERM/PROG SWITCH
static int PERMIN = 1;
// 303 %OWNINTEGER DIAG = 0, CONTROL = 0
static int DIAG = 0;
static int CONTROL = 0;
// 304 %OWNINTEGER BPT=0; ! CODE BUFFER POINTER
static int BPT = 0;
// 305 %OWNSHORTINTEGERARRAY BUFFER(1 : 401)
static short int BUFFER[401];
auto void FAULT(int N);
// 306 %CONSTINTEGER MCODE = 38
// 307
// 308 ! %DIAGNOSE FLAGS (2\\N)
// 309 !
// 310 ! 0 - GRAMMAR TRACE
// 311 ! 1 - RECORD USE
// 312 ! 2 - APP DEFN.
// 313 ! 3 - RECORD DEFN.
// 314 !
// 315 %ROUTINESPEC FAULT(%INTEGER N)
// 316 !*********************************************
// 317 !* ALMOST THE WHOLE COMPILER ASSUMES A 16 BIT WORD. *
// 318 !*********************************************
// 319 %OWNINTEGER MARK = ' '
static int MARK = 32;
// 320 %OWNINTEGER FILE = 0; ! BEGIN OR EXTERNAL FILE ?
static int FILE = 0;
// 321 %CONSTINTEGER DICT END = 2750
// 322 %INTEGERARRAY DICT(0:DICT END)
int DICT[2751];
// 323 %CONSTINTEGER MAX LAB = 80
// 324 %BYTEINTEGERARRAY LABINF(1 : MAX LAB)
unsigned char LABINF[80];
// 325 %INTEGER LIST, LREALS; ! OPTION FLAGS
int LIST;
int LREALS;
// 326 %INTEGER STATS; ! NUMBER OF STATEMENTS
int STATS;
// 327 %ownINTEGER CODE = 0; ! OBJECT FILE SIZE
static int CODE = 0;
// 328 %INTEGER LINES; ! LINES ON LISTING PAGE
int LINES;
// 329 %INTEGER LINENUM; ! CURRENT LINE NUMBER
int LINENUM;
// 330 %INTEGER LIT; ! LAST LITERAL POS
int LIT;
// 331 %INTEGER LIT POS; ! LITERAL TEXT POINTER
int LITPOS;
// 332 %INTEGER LIMIT; ! DIGIT SEARCH LIMIT
int LIMIT;
// 333 %INTEGER DIGIT; ! CURRECT DIGIT
int DIGIT;
// 334 %INTEGER OLD SYM; ! FIRST SYM OF NAME
int OLDSYM;
// 335 %INTEGER LABEL; ! CURRENT LABEL
int LABEL;
// 336 %INTEGER X; ! CURRENT TAG APP/FORMAT
int X;
// 337 %ownINTEGER SYM = 0; ! CURRENT INPUT SYMBOL
static int SYM = 0;
// 338 %INTEGER ATOM1; ! CURRENT ATOM
int ATOM1;
// 339 %INTEGER ATOM2; ! VARIANT OF ATOM1
int ATOM2;
// 340 %INTEGER SUBATOM; ! EXTRA INFO
int SUBATOM;
// 341 %INTEGER LAST; ! LAST ATOM TYPE
int LAST;
// 342 %INTEGER SS TYPE; ! 0 LABEL, 1 DECLARATION,
int SSTYPE;
// 343 ! 2 FORMAL PARAMS, 3 STATEMENT
// 344 %INTEGER SYMTYPE; ! -2:LETTER, -1: DIGIT
int SYMTYPE;
// 345 ! 0:TERMINATOR, 1: OTHER
// 346 %INTEGER TYPE; ! VARIABLE TYPE WANTED
int TYPE;
// 347 %INTEGER VAR TYPE; ! VARIABLE TYPE FOUND
int VARTYPE;
// 348 %ownINTEGER POS = 0; ! CURRENT INPUT POSITION
static int POS = 0;
// 349 %INTEGER ATOM POS; ! CURRENT ATOM START POSN.
int ATOMPOS;
// 350 %INTEGER DUP; ! DUPLICATE FLAG
int DUP;
// 351 %INTEGER OUT; ! CURRENT OUTPUT STREAM
int OUT;
// 352 %INTEGER PREFIX, SPREFIX; ! OWN, BYTE, EXTERNAL ETC.
int PREFIX;
int SPREFIX;
// 353 %INTEGER CONST INT
int CONSTINT;
// 354 %INTEGER O TYPE
int OTYPE;
// 355 %INTEGER DEC TYPE; ! CURRENT DECLARATOR
int DECTYPE;
// 356 %OWNINTEGERARRAY CNEST(0 :10); ! STACK FOR CONDITIONS
static int CNEST[11];
// 357 %OWNBYTEINTEGERARRAY LINE(1 : 73); ! INPUT LINE BUFFER
static unsigned char LINE[73];
// 358 %CONSTINTEGER RECLEN = -300; ! -(MAX LENGTH OF ANALYSIS RECORD)
// 359 %INTEGERARRAY REF, CO, SUB, LOC(RECLEN : -1)
int REF[300];
int CO[300];
int SUB[300];
int LOC[300];
// 360 %INTEGER SS; ! SOURCE STATEMENT ENTRY
int SS;
// 361 %INTEGER A; ! ATOM POINTER
int A;
// 362 %INTEGER P; ! PHRASE POINTER
int P;
// 363 %INTEGER FAULTY; ! FAULT INDICATOR
int FAULTY;
// 364 %INTEGER F TYPE; ! TYPE OF FAULT
int FTYPE;
// 365 %INTEGER G LIMIT; ! END OF GRAM POINTER
int GLIMIT;
// 366 %INTEGER T LIMIT; ! MAX EXTENT OF DICTIONARY
int TLIMIT;
// 367 %INTEGER TMAX; ! CURRENT MAX TAG (FREE)
int TMAX;
// 368 %INTEGER T BASE; ! FIRST NAME AT CURRENT LEVEL
int TBASE;
// 369 %INTEGER DP; ! END OF CURRENT NAME
int DP;
// 370 %INTEGER RELOCATE; ! RELOCATION FOR FORMATS
int RELOCATE;
// 371 %INTEGER APP
int APP;
// 372 %SHORTINTEGERNAME PAPP; ! ==PHRASE(APPEP)
short int *PAPP;
// 373 %INTEGER EILAB; ! %ELSEIF LABEL
int EILAB;
// 374 %ownINTEGER MARGIN = 0
static int MARGIN = 0;
// 375 %INTEGER INHIBIT; ! FLAG FOR DECLARATIONS MISPLA
int INHIBIT;
// 376
// 377 %ROUTINE SEND
void SEND(void) {
// 378 %INTEGER J
int J;
// 379 %RETURN %IF BPT <= 0
if (BPT > 0) goto L_0001;
return;
L_0001:;
// 380 FAULT(22) %IF BPT >= LITPOS
if (BPT < LITPOS) goto L_0002;
FAULT(22);
L_0002:;
// 381 %IF FAULTY = 0 %START
if (FAULTY != 0) goto L_0003;
// 382 SELECTOUTPUT(OBJ)
_imp_SELECTOUTPUT(2);
// 383 PRINTSYMBOL(BUFFER(J)) %FOR J = 1,1,BPT
// %for J = 1, 1, BPT %cycle
{
int _final = BPT;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, BPT");
J = 0;
L_0004:
if (J == _final) goto L_0005;
J += 1;
_imp_PRINTSYMBOL(BUFFER[J - 1]);
goto L_0004;
}
L_0005:;
// 384 SELECTOUTPUT(LISTING)
_imp_SELECTOUTPUT(1);
// 385 %FINISH
L_0003:;
// 386 BPT=0
BPT = 0;
// 387 %END
return;
} /* end of SEND */
// 388 %ROUTINE PUT(%INTEGER N)
void PUT(int N) {
// 389 CODE = CODE+1
CODE = CODE + 1;
// 390 SEND %IF BPT > 71
if (BPT <= 71) goto L_0007;
SEND();
L_0007:;
// 391 BPT=BPT+1; BUFFER(BPT)=N
BPT = BPT + 1;
BUFFER[BPT - 1] = N;
// 392 %END
return;
} /* end of PUT */
// 393 %ROUTINE ADDR(%INTEGER N)
void ADDR(int N) {
// 394 %INTEGER V
int V;
// 395 V=N//10
V = ((long)N / (long)10);
// 396 ADDR(V) %UNLESS V=0
if (V == 0) goto L_0008;
ADDR(V);
L_0008:;
// 397 PUT(N-V*10+'0')
PUT(N - V * 10 + 48);
// 398 %END
return;
} /* end of ADDR */
// 399 %ROUTINE OP(%INTEGER C, A)
void OP(int C, int A) {
// 400 PUT(C); ADDR(A)
PUT(C);
ADDR(A);
// 401 %END
return;
} /* end of OP */
// 402 %ROUTINE PRINT NAME(%INTEGER N)
void PRINTNAME(int N) {
// 403 %INTEGER D, FLAG
int D;
int FLAG;
// 404 ! ----- 'UNPACK' USES AT LEAST A 30-BIT WORD ----
// 405 %ROUTINE UNPACK(%INTEGER V)
void UNPACK(int V) {
// 406 %INTEGER J, N, C
int J;
int N;
int C;
// 407 %CYCLE J = 24,-6,0
// %for J = 24, -6, 0 %cycle
{
J = 30;
L_0009:
if (J == 0) goto L_000A;
J -= 6;
// 408 C = (V>>J)&63
C = (unsigned int)V >> J & 63;
// 409 %IF C # 0 %START
if (C == 0) goto L_000C;
// 410 C = C+32; ! ADD IN 32 REMOVED WHEN PACKING
C = C + 32;
// 411 %IF FLAG # 0 %START
if (FLAG == 0) goto L_000D;
// 412 %IF FLAG < 0 %THEN PUT(C) %ELSE PRINT SYMBOL(C)
if (FLAG >= 0) goto L_000E;
PUT(C);
goto L_000F;
L_000E:;
_imp_PRINTSYMBOL(C);
L_000F:;
// 413 FLAG = FLAG+1
FLAG = FLAG + 1;
// 414 %FINISH
L_000D:;
// 415 %FINISH
L_000C:;
// 416 %REPEAT
goto L_0009;
}
L_000A:;
// 417 %END
return;
} /* end of UNPACK */
// ?N unused
// 418 %IF N < 0 %THEN N = -N %AND FLAG = -13 %ELSE FLAG = 1
if (N >= 0) goto L_0010;
N = -N;
FLAG = -13;
goto L_0011;
L_0010:;
FLAG = 1;
L_0011:;
// 419 D=DICT(N)
D = DICT[N];
// 420 UNPACK(DICT(D-2)) %FOR D = N-D&255, 1, N-D>>11&3
// %for D = N - (D & 255), 1, N - ((unsigned int)D >> 11 & 3) %cycle
{
int _initial = N - (D & 255), _final = N - ((unsigned int)D >> 11 & 3);
if (invalid_for_loop(_initial, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle D = N - (D & 255), 1, N - ((unsigned int)D >> 11 & 3)");
D = _initial - (1);
L_0012:
if (D == _final) goto L_0013;
D += 1;
UNPACK(DICT[D - 2]);
goto L_0012;
}
L_0013:;
// 421 %END
return;
} /* end of PRINTNAME */
// 422
// 423 %ROUTINE FAULT(%INTEGER N)
void FAULT(int N) {
// 424 %INTEGER ERROR POS, STREAM, SPACING, pos2
int ERRORPOS;
int STREAM;
int SPACING;
int POS2;
// 425 %SWITCH FM(-1 : 24)
int FM_index;
int FM_line;
char *FM_file;
static const void *FM[26] = {&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing, &&case_FM_missing, &&case_FM_missing,
&&case_FM_missing, &&case_FM_missing};
// 426 STREAM = REPORT; SELECTOUTPUT(REPORT)
STREAM = 3;
_imp_SELECTOUTPUT(3);
// 427 ATOM POS = DUP %IF DUP # 0
if (DUP == 0) goto L_0014;
ATOMPOS = DUP;
L_0014:;
// 428 ERROR POS = ATOM POS
ERRORPOS = ATOMPOS;
// 429 ERROR POS = 0 %IF ERROR POS = POS %AND N > 1
if (ERRORPOS != POS) goto L_0015;
if (N <= 1) goto L_0015;
ERRORPOS = 0;
L_0015:;
// 430 FAULTY=FAULTY+1
FAULTY = FAULTY + 1;
// 431 SPACING = MARGIN+ERROR POS+8 -2
SPACING = MARGIN + ERRORPOS + 8 - 2;
// 432 %CYCLE
L_0016:;
// 433 %IF POS > 0 %AND (LIST # 0 %OR STREAM = REPORT) %START
if (POS <= 0) goto L_0017;
if (LIST != 0) goto L_0006;
if (STREAM != 3) goto L_0017;
L_0006:;
// 434 WRITE(LINE NUM, 4) %AND SPACE %IF STREAM # REPORT
if (STREAM == 3) goto L_0018;
_imp_WRITE(LINENUM, 4);
_imp_SPACE();
L_0018:;
// 435 pos2 = POS
POS2 = POS;
// 436 %CYCLE POS = 1,1,pos2
// %for POS = 1, 1, POS2 %cycle
{
int _final = POS2;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle POS = 1, 1, POS2");
POS = 0;
L_0019:
if (POS == _final) goto L_001A;
POS += 1;
// ?Non-local
// 437 PRINTSYMBOL('|') %IF POS = ERROR POS %AND STREAM=REPORT
if (POS != ERRORPOS) goto L_001C;
if (STREAM != 3) goto L_001C;
_imp_PRINTSYMBOL(124);
L_001C:;
// 438 PRINTSYMBOL(LINE(POS))
_imp_PRINTSYMBOL(LINE[POS - 1]);
// 439 %REPEAT
goto L_0019;
}
L_001A:;
// 440 SYM=LINE(POS)
SYM = LINE[POS - 1];
// 441 %FINISH
L_0017:;
// 442 NEWLINE %IF SYM # NL
if (SYM == 10) goto L_001D;
_imp_NEWLINE();
L_001D:;
// 443 PRINTSYMBOL('*')
_imp_PRINTSYMBOL(42);
// 444 %IF STREAM = REPORT %START
if (STREAM != 3) goto L_001E;
// 445 WRITE(LINE NUM, 4); SPACE
_imp_WRITE(LINENUM, 4);
_imp_SPACE();
// 446 %ELSE
goto L_001F;
L_001E:;
// 447 SPACE
_imp_SPACE();
// 448 %IF ERROR POS # 0 %START
if (ERRORPOS == 0) goto L_0020;
// 449 SPACES(SPACING-1); PRINTSTRING("! ")
_imp_SPACES(SPACING - 1);
_imp_PRINTSTRING(_imp_str_literal("! "));
// 450 %FINISH
L_0020:;
// 451 %FINISH
L_001F:;
// 452 ->FM(N)
FM_line = __LINE__;
FM_file = __FILE__;
FM_index = N;
goto case_FM_dispatch;
// 453 FM(24): PRINTSTRING("COMPILER ERROR!"); ->F
case_FM_24:;
_imp_PRINTSTRING(_imp_str_literal("COMPILER ERROR!"));
goto U_1000;
// 454 FM(20): PRINTSTRING("TEXT TOO LONG"); ->F
case_FM_20:;
_imp_PRINTSTRING(_imp_str_literal("TEXT TOO LONG"));
goto U_1000;
// 455 FM(21): PRINTSTRING("TOO MANY NAMES"); ->F
case_FM_21:;
_imp_PRINTSTRING(_imp_str_literal("TOO MANY NAMES"));
goto U_1000;
// 456 FM(22): PRINTSTRING("TOO MANY LONG NAMES"); ->F
case_FM_22:;
_imp_PRINTSTRING(_imp_str_literal("TOO MANY LONG NAMES"));
goto U_1000;
// 457 FM(23): PRINTSTRING("PROGRAM TOO COMPLEX"); ->F
case_FM_23:;
_imp_PRINTSTRING(_imp_str_literal("PROGRAM TOO COMPLEX"));
goto U_1000;
// 458 FM(18): PRINTSTRING("ACCESS")
case_FM_18:;
_imp_PRINTSTRING(_imp_str_literal("ACCESS"));
// 459 FAULTY = FAULTY-1 %IF STREAM = REPORT
if (STREAM != 3) goto L_0022;
FAULTY = FAULTY - 1;
L_0022:;
// 460 ->F
goto U_1000;
// 461 FM(0): PRINTSTRING("FORM"); ->F
case_FM_0:;
_imp_PRINTSTRING(_imp_str_literal("FORM"));
goto U_1000;
// 462 FM(1): PRINTSTRING("ATOM"); ->F
case_FM_1:;
_imp_PRINTSTRING(_imp_str_literal("ATOM"));
goto U_1000;
// 463 FM(2): PRINTSTRING("TYPE"); ->F
case_FM_2:;
_imp_PRINTSTRING(_imp_str_literal("TYPE"));
goto U_1000;
// 464 FM(3): PRINTSTRING("NAME"); ->F
case_FM_3:;
_imp_PRINTSTRING(_imp_str_literal("NAME"));
goto U_1000;
// 465 FM(4): PRINTSTRING("SIZE"); ->F
case_FM_4:;
_imp_PRINTSTRING(_imp_str_literal("SIZE"));
goto U_1000;
// 466 FM(5): PRINTSTRING("CONTEXT"); ->F
case_FM_5:;
_imp_PRINTSTRING(_imp_str_literal("CONTEXT"));
goto U_1000;
// 467 FM(6): PRINTSTRING("MATCH"); ->F
case_FM_6:;
_imp_PRINTSTRING(_imp_str_literal("MATCH"));
goto U_1000;
// 468 FM(7): PRINTSTRING("COPY"); ->F
case_FM_7:;
_imp_PRINTSTRING(_imp_str_literal("COPY"));
goto U_1000;
// 469 FM(8): PRINTSTRING("SPEC"); ->F
case_FM_8:;
_imp_PRINTSTRING(_imp_str_literal("SPEC"));
goto U_1000;
// 470 FM(9): PRINTSTRING("%END"); ->MISS
case_FM_9:;
_imp_PRINTSTRING(_imp_str_literal("%END"));
goto U_1001;
// 471 FM(10): PRINTSTRING("%CYCLE"); ->MISS
case_FM_10:;
_imp_PRINTSTRING(_imp_str_literal("%CYCLE"));
goto U_1001;
// 472 FM(11): PRINTSTRING("%REPEAT"); ->MISS
case_FM_11:;
_imp_PRINTSTRING(_imp_str_literal("%REPEAT"));
goto U_1001;
// 473 FM(12): PRINTSYMBOL('"'); PRINT NAME(X); PRINTSYMBOL('"'); ->MISS
case_FM_12:;
_imp_PRINTSYMBOL(34);
PRINTNAME(X);
_imp_PRINTSYMBOL(34);
goto U_1001;
// 474 FM(13): PRINTSTRING("%START"); ->MISS
case_FM_13:;
_imp_PRINTSTRING(_imp_str_literal("%START"));
goto U_1001;
// 475 FM(14): PRINTSTRING("%FINISH"); ->MISS
case_FM_14:;
_imp_PRINTSTRING(_imp_str_literal("%FINISH"));
goto U_1001;
// 476 FM(15): PRINTSTRING("ORDER"); ->F
case_FM_15:;
_imp_PRINTSTRING(_imp_str_literal("ORDER"));
goto U_1000;
// 477 FM(16): PRINTSTRING("BOUNDS"); ->F
case_FM_16:;
_imp_PRINTSTRING(_imp_str_literal("BOUNDS"));
goto U_1000;
// 478 FM(17): PRINTSTRING("RESULT")
case_FM_17:;
_imp_PRINTSTRING(_imp_str_literal("RESULT"));
// 479 MISS: PRINTSTRING(" MISSING")
U_1001:;
_imp_PRINTSTRING(_imp_str_literal(" MISSING"));
// 480 F: NEWLINE
U_1000:;
_imp_NEWLINE();
// 481 %EXIT %IF STREAM = LISTING
if (STREAM != 1) goto L_0023;
goto L_0024;
L_0023:;
// 482 STREAM = LISTING; SELECTOUTPUT(LISTING)
STREAM = 1;
_imp_SELECTOUTPUT(1);
// 483 %REPEAT
goto L_0016;
L_0024:;
// 484 MARGIN = MARGIN+POS %AND SPACES(MARGIN+8) %IF SYM # NL
if (SYM == 10) goto L_0025;
MARGIN = MARGIN + POS;
_imp_SPACES(MARGIN + 8);
L_0025:;
// 485 POS = 0; OUT = 0
POS = 0;
OUT = 0;
// 486 %SIGNAL 0,10 %IF N >= 20
if (N < 20) goto L_0026;
_imp_signal(0, 10, 0, "");
L_0026:;
// 487 %END
return;
case_FM_dispatch:
if (FM_index < -1 || FM_index > 24)
_imp_signalf(6, 3, FM_index, "->FM(%d) out of bounds at %s line %d", FM_index, FM_file, FM_line);
goto *FM[FM_index - -1];
case_FM_missing:
_imp_signalf(8, 2, FM_index, "switch jump to undefined label FM(%d): at %s line %d", FM_index, FM_file, FM_line);
} /* end of FAULT */
// 488
// 489 ! ---- 'C GEN' DEPENDS ON A 32-BIT WORD ----
// 490 %ROUTINE C GEN(%INTEGER N)
void CGEN(int N) {
// 491 %INTEGER J, M, L
int J;
int M;
int L;
// 492 M = N; N = |M|
M = N;
N = _imp_IMOD(M);
// 493 %IF N>>16 = 0 %THEN L = 4 %ELSE L = 8
if ((unsigned int)N >> 16 != 0) goto L_0027;
L = 4;
goto L_0028;
L_0027:;
L = 8;
L_0028:;
// 494 PUT('N'); PUT(L+1+'0'); PUT(','); PUT('Y')
PUT(78);
PUT(L + 1 + 48);
PUT(44);
PUT(89);
// 495 PUT( (N>>J)&15+'A' ) %FOR J = (L-1)*4, -4, 0
// %for J = (L - 1) * 4, -4, 0 %cycle
{
int _initial = (L - 1) * 4;
if (invalid_for_loop(_initial, -4, 0)) _imp_signal(5, 1, 0, "Illegal cycle J = (L - 1) * 4, -4, 0");
J = _initial - (-4);
L_0029:
if (J == 0) goto L_002A;
J -= 4;
PUT(((unsigned int)N >> J & 15) + 65);
goto L_0029;
}
L_002A:;
// 496 PUT('U') %IF M < 0
if (M >= 0) goto L_002B;
PUT(85);
L_002B:;
// 497 LIT = CODE
LIT = CODE;
// 498 %END
return;
} /* end of CGEN */
// 499 %INTEGERFN EVAL(%INTEGER P)
int EVAL(int P) {
// 500 %CONSTBYTEINTEGERARRAY BASIS('V' : 'Z')=3,1,8,4,0
const unsigned char BASIS[5] = {3, 1, 8, 4, 0};
// 501 %INTEGER N, J, B, S, L, MOD
int N;
int J;
int B;
int S;
int L;
int MOD;
// 502 N=0
N = 0;
// 503 %RESULT = DICT(-P) %IF P < 0
if (P >= 0) goto L_002C;
return DICT[-P];
L_002C:;
// 504 L=BUFFER(P); %RESULT=0 %IF L=0 %OR L=1
L = BUFFER[P - 1];
if (L == 0) goto L_000B;
if (L != 1) goto L_002D;
L_000B:;
return 0;
L_002D:;
// 505 B=BUFFER(P-1); %RESULT=B %IF L < 0
B = BUFFER[P - 1 - 1];
if (L >= 0) goto L_002E;
return B;
L_002E:;
// 506 B=BASIS(B)
B = BASIS[B - 86];
// 507 MOD='A'; MOD=0 %IF B=8
MOD = 65;
if (B != 8) goto L_002F;
MOD = 0;
L_002F:;
// 508 %CYCLE J=P-2,-1,P-L
// %for J = P - 2, -1, P - L %cycle
{
int _initial = P - 2, _final = P - L;
if (invalid_for_loop(_initial, -1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = P - 2, -1, P - L");
J = _initial - (-1);
L_0030:
if (J == _final) goto L_0031;
J -= 1;
// 509 S=BUFFER(J)-MOD
S = BUFFER[J - 1] - MOD;
// 510 %IF B=0 %THEN N=N*10 %ELSE N=N<<B
if (B != 0) goto L_0033;
N = N * 10;
goto L_0034;
L_0033:;
N = N << B;
L_0034:;
// 511 N=N+S
N = N + S;
// 512 %REPEAT
goto L_0030;
}
L_0031:;
// 513 %RESULT=N
return N;
// 514 %END
} /* end of EVAL */
// 515
// 516 %ROUTINE COMPILE BLOCK(%INTEGER LEVEL, BLOCK TYPE, %C
void COMPILEBLOCK(int LEVEL, int BLOCKTYPE, int *FPP) {
// 517+ %INTEGERNAME FPP)
// 518 %INTEGER J, K, XX, COUNT, ACCESS = 0
int J;
int K;
int XX;
int COUNT;
int ACCESS;
ACCESS = 0;
// 519 %INTEGER FP; ! START OF FORMAT
int FP;
// 520 %INTEGER FORMAT; ! CURRENT FORMAT POINTER
int FORMAT;
// 521 %INTEGER A CHAIN; ! ARRAY CHAIN
int ACHAIN;
// 522 %INTEGER OLD LABEL
int OLDLABEL;
// 523 %INTEGER APARM, OLD T BASE, OLD T LIMIT
int APARM;
int OLDTBASE;
int OLDTLIMIT;
// 524 %OWNINTEGER SPEC=1
static int SPEC = 1;
// 525 OLD T BASE=T BASE
OLDTBASE = TBASE;
// 526 T BASE=T MAX
TBASE = TMAX;
// 527 OLD T LIMIT=T LIMIT; OLD LABEL = LABEL
OLDTLIMIT = TLIMIT;
OLDLABEL = LABEL;
// 528 INHIBIT = INHIBIT<<1
INHIBIT = INHIBIT << 1;
// 529
// 530 %ROUTINE DEF LAB(%INTEGER L)
void DEFLAB(int L) {
// 531 INHIBIT = INHIBIT!1
INHIBIT = INHIBIT | 1;
// 532 PUT(':'); ADDR(L)
PUT(58);
ADDR(L);
// 533 ACCESS = 1
ACCESS = 1;
// 534 %END
return;
} /* end of DEFLAB */
// 535 %ROUTINE ANALYSE SS(%INTEGER CONT)
void ANALYSESS(int CONT) {
// 536 %INTEGER CLASS; ! CLASS OF ATOM WANTED
int CLASS;
// 537 %INTEGER LIM; ! LOOKUP LIMIT
int LIM;
// 538 %OWNINTEGER TAG=0; ! CURRENT VAR TAG
static int TAG = 0;
// 539 %OWNINTEGER DELIM = '"'
static int DELIM = 34;
// 540 %OWNINTEGER QUOTE=0; ! TEXT MODE FLAG
static int QUOTE = 0;
// 541 %OWNINTEGER KEY=0; ! SYMBOL DICT KEY
static int KEY = 0;
// 542
// 543 %ROUTINE DECLARE IDEN
void DECLAREIDEN(void) {
// 544 %INTEGER EXTRA, FF
int EXTRA;
int FF;
// 545 %INTEGERNAME FLAG
int *FLAG;
// 546 %IF SUBATOM#0 %START; ! ALREADY EXISTS
if (SUBATOM == 0) goto L_0035;
// 547 FLAG == DICT(SUBATOM)
FLAG = (int *)/*?*/ &DICT[SUBATOM];
// 548 TAG=DICT(SUBATOM-1)
TAG = DICT[SUBATOM - 1];
// 549 %IF FLAG&1024#0 %START; ! SPEC GIVEN
if (*FLAG & 1024 == 0) goto L_0036;
// 550 %IF TAG&15=3 %START; ! LABEL REF
if (TAG & 15 != 3) goto L_0037;
// 551 FLAG=FLAG!!1024 %IF DECTYPE=3
if (DECTYPE != 3) goto L_0038;
*FLAG = *FLAG ^ 1024;
L_0038:;
// 552 %RETURN
return;
// 553 %FINISH
L_0037:;
// 554 %IF DECTYPE = TAG&(\128) %OR DECTYPE=1 %START;! SAME TYPE
if (DECTYPE == TAG & (~128)) goto L_001B;
if (DECTYPE != 1) goto L_0039;
L_001B:;
// 555 %IF (7 <= TAG&15 <= 10 %AND SPEC > 0) %C
{
// Double-sided test on TAG & 15 (Part I)
int tmp;
if (7 > (tmp = TAG & 15)) goto L_003A;
// Double-sided test on TAG & 15 (Part II)
if (tmp > 10) goto L_003A;
}
if (SPEC > 0) goto L_003B;
L_003A:;
if (TAG & 15 == 4) goto L_003B;
if (DECTYPE != 1) goto L_003C;
L_003B:;
// 556+ %OR TAG&15 = 4 %OR DECTYPE=1 %START; ! VALID REDEFINITION
// 557 FLAG = FLAG!!1024; ! REMOVE SPEC BIT
*FLAG = *FLAG ^ 1024;
// 558 DECTYPE = TAG&(\128)
DECTYPE = TAG & (~128);
// 559 %RETURN
return;
// 560 %FINISH
L_003C:;
// 561 %FINISH
L_0039:;
// 562 %FINISH
L_0036:;
// 563 DUP=ATOM POS %IF DUP=0
if (DUP != 0) goto L_003D;
DUP = ATOMPOS;
L_003D:;
// 564 %RETURN %IF DECTYPE=0; ! LABEL
if (DECTYPE != 0) goto L_003E;
return;
L_003E:;
// 565 %FINISH
L_0035:;
// 566 EXTRA=DP; ! APP + FORMAT
EXTRA = DP;
// 567 TAG=DECTYPE
TAG = DECTYPE;
// 568 FF=0
FF = 0;
// 569 %IF DECTYPE = 0 %START
if (DECTYPE != 0) goto L_003F;
// 570 TAG = 3; FF = 1024
TAG = 3;
FF = 1024;
// 571 %ELSE
goto L_0040;
L_003F:;
// 572 FF = FF!SPREFIX<<13
FF = FF | SPREFIX << 13;
// 573 %FINISH
L_0040:;
// 574 %IF TAG&15 >= 7 %START; ! APP NEEDED
if (TAG & 15 < 7) goto L_0041;
// 575 FF = FF!1024 %IF SSTYPE = 2 %AND TAG&15 <= 10
if (SSTYPE != 2) goto L_0042;
if (TAG & 15 > 10) goto L_0042;
FF = FF | 1024;
L_0042:;
// 576 CONST INT = 0
CONSTINT = 0;
// 577 %UNLESS 11#TAG&15#13 %START
{
// Double-sided test on TAG & 15 (Part I)
int tmp;
if (11 == (tmp = TAG & 15)) goto L_0043;
// Double-sided test on TAG & 15 (Part II)
if (tmp != 13) goto L_0044;
}
L_0043:;
// 578 %IF SPREFIX=1 %OR SPREFIX=2 %C
if (SPREFIX == 1) goto L_0045;
if (SPREFIX != 2) goto L_0046;
L_0045:;
DICT[DP] = APP;
goto L_0047;
L_0046:;
// 579+ %THEN DICT(DP)=APP %ELSE %START
// 580 APARM=1; DICT(DP)=A CHAIN
APARM = 1;
DICT[DP] = ACHAIN;
// 581 A CHAIN=DP
ACHAIN = DP;
// 582 %FINISH
L_0047:;
// 583 %FINISH %ELSE DICT(DP)=0
goto L_0048;
L_0044:;
DICT[DP] = 0;
L_0048:;
// 584 DP=DP+1; FF=FF!256; ! SET APP BIT
DP = DP + 1;
FF = FF | 256;
// 585 FF=FF!1024 %IF SPEC < 0 %AND SPREFIX < 3
if (SPEC >= 0) goto L_0049;
if (SPREFIX >= 3) goto L_0049;
FF = FF | 1024;
L_0049:;
// 586 %FINISH
L_0041:;
// 587 %IF TAG&X'70'=X'50' %START; ! RECORD
if (TAG & 112 != 80) goto L_004A;
// 588 DICT(DP)=FORMAT; DP=DP+1
DICT[DP] = FORMAT;
DP = DP + 1;
// 589 FF=FF!512; ! SET FORMAT BIT
FF = FF | 512;
// 590 %FINISH
L_004A:;
// 591 %IF TAG&15=6 %START; ! SWITCH
if (TAG & 15 != 6) goto L_004B;
// 592 DICT(DP)=0
DICT[DP] = 0;
// 593 DP=DP+1
DP = DP + 1;
// 594 %FINISH
L_004B:;
// 595 TAG = TAG!128 %IF SPREFIX > 3 %OR PERMIN# 0
if (SPREFIX > 3) goto L_0032;
if (PERMIN == 0) goto L_004C;
L_0032:;
TAG = TAG | 128;
L_004C:;
// 596 %IF CONST INT # 0 %START
if (CONSTINT == 0) goto L_004D;
// 597 DICT(DP) = 0; DP = DP+1
DICT[DP] = 0;
DP = DP + 1;
// 598 TAG = TAG&X'FFF0'+5
TAG = (TAG & 65520) + 5;
// 599 %FINISH
L_004D:;
// 600 EXTRA=DP-EXTRA; ! 1=APP, 2=APP+FORMAT, 0=NEITH
EXTRA = DP - EXTRA;
// 601 DICT(DP) = TAG; TYPE=TAG>>4&7
DICT[DP] = TAG;
TYPE = (unsigned int)TAG >> 4 & 7;
// 602 DP=DP+1
DP = DP + 1;
// 603 DICT(DP) = FF!(DP-T MAX-2)!EXTRA<<11
DICT[DP] = FF | DP - TMAX - 2 | EXTRA << 11;
// 604 SUBATOM=DP; TMAX=DP+1
SUBATOM = DP;
TMAX = DP + 1;
// 605 X=DP
X = DP;
// 606 %END
return;
} /* end of DECLAREIDEN */
// 607
// 608 %ROUTINE READ SYM
void READSYM(void) {
// 609 %IF SYM<32 %START
if (SYM >= 32) goto L_004E;
// 610 LINE NUM = LINE NUM+1
LINENUM = LINENUM + 1;
// 611 ATOM POS = 0; POS = 0; MARGIN = 0
ATOMPOS = 0;
POS = 0;
MARGIN = 0;
// 612 %IF LIST = 0 %START
if (LIST != 0) goto L_004F;
// 613 WRITE(LINE NUM, 5)
_imp_WRITE(LINENUM, 5);
// 614 %IF QUOTE # 0 %THEN PRINT SYMBOL('"') %ELSE %START
if (QUOTE == 0) goto L_0050;
_imp_PRINTSYMBOL(34);
goto L_0051;
L_0050:;
// 615 PRINT SYMBOL(MARK); MARK = ' '
_imp_PRINTSYMBOL(MARK);
MARK = 32;
// 616 %FINISH
L_0051:;
// 617 SPACE
_imp_SPACE();
// 618 %FINISH
L_004F:;
// 619 SYM TYPE=1
SYMTYPE = 1;
// 620 %FINISH
L_004E:;
// 621 %CYCLE
L_0052:;
// 622 %CYCLE
L_0053:;
// 623 READSYMBOL(SYM)
_imp_READSYMBOL(/*?*/ &SYM);
// 624 %IF SYM = PAGE %START
if (SYM != 12) goto L_0054;
// 625 LINES = 0 %AND %CONTINUE %IF QUOTE = 0
if (QUOTE != 0) goto L_0055;
LINES = 0;
goto L_0056;
L_0055:;
// 626 LINES = PAGE SIZE
LINES = 64;
// 627 %FINISH
L_0054:;
// 628 PRINTSYMBOL(SYM) %IF LIST = 0
if (LIST != 0) goto L_0057;
_imp_PRINTSYMBOL(SYM);
L_0057:;
// 629 POS=POS+1 %AND LINE(POS)=SYM %UNLESS POS >= 73
if (POS >= 73) goto L_0058;
POS = POS + 1;
LINE[POS - 1] = SYM;
L_0058:;
// 630 %RETURN %IF QUOTE#0
if (QUOTE == 0) goto L_0059;
return;
L_0059:;
// 631 %EXIT %IF SYM#' '
if (SYM == 32) goto L_005A;
goto L_005B;
L_005A:;
// 632 SYM TYPE=1
SYMTYPE = 1;
// 633 %REPEAT
L_0056:;
goto L_0053;
L_005B:;
// 634 %EXIT %UNLESS SYM='%'
if (SYM == 37) goto L_005C;
goto L_005D;
L_005C:;
// 635 SYM TYPE=2
SYMTYPE = 2;
// 636 %REPEAT
goto L_0052;
L_005D:;
// 637 %IF SYM<32 %THEN SYMTYPE=0 %AND MARK='+' %ELSE %START
if (SYM >= 32) goto L_005E;
SYMTYPE = 0;
MARK = 43;
goto L_005F;
L_005E:;
// 638 SYM=SYM-32 %IF 'A'+32 <= SYM <= 'Z'+32; ! ...CONVERT LOWER CASE
{
// Double-sided test on SYM (Part I)
int tmp;
if (65 + 32 > (tmp = SYM)) goto L_0060;
// Double-sided test on SYM (Part II)
if (tmp > 90 + 32) goto L_0060;
}
SYM = SYM - 32;
L_0060:;
// 639 KEY=KDICT(SYM)
KEY = KDICT[SYM - 32];
// 640 SYM TYPE=KEY&3-2 %UNLESS KEY&3=0 %AND SYMTYPE=2
if (KEY & 3 != 0) goto L_0061;
if (SYMTYPE == 2) goto L_0062;
L_0061:;
SYMTYPE = (KEY & 3) - 2;
L_0062:;
// 641 %FINISH
L_005F:;
// 642 %END
return;
} /* end of READSYM */
// 643
// 644 %ROUTINE LOOKUP(%INTEGER P)
void LOOKUP(int P) {
// 645 %INTEGER OLD, NEW, L, DISP, D, SIZE, FIRST
int OLD;
int NEW;
int L;
int DISP;
int D;
int SIZE;
int FIRST;
// 646 COUNT=0; SIZE = DP-TMAX+1; FIRST = DICT(T MAX)
COUNT = 0;
SIZE = DP - TMAX + 1;
FIRST = DICT[TMAX];
// 647 %WHILE P > LIM %CYCLE
L_0063:;
if (P <= LIM) goto L_0064;
// 648 COUNT = COUNT-1
COUNT = COUNT - 1;
// 649 P=P-1
P = P - 1;
// 650 D=DICT(P)
D = DICT[P];
// 651 DISP=D&255+2
DISP = (D & 255) + 2;
// 652 L=D>>11&3; OLD=P-DISP; X=P; P=OLD
L = (unsigned int)D >> 11 & 3;
OLD = P - DISP;
X = P;
P = OLD;
// 653 %IF SIZE+L-DISP=0 %AND DICT(OLD) = FIRST %START
if (SIZE + L - DISP != 0) goto L_0065;
if (DICT[OLD] != FIRST) goto L_0065;
// 654 NEW=T MAX
NEW = TMAX;
// 655 %CYCLE
L_0066:;
// 656 NEW = NEW+1; OLD = OLD+1
NEW = NEW + 1;
OLD = OLD + 1;
// 657 %IF NEW=DP %START; ! FOUND IT
if (NEW != DP) goto L_0067;
// 658 O TYPE = D>>13
OTYPE = (unsigned int)D >> 13;
// 659 TAG = DICT(X-1)
TAG = DICT[X - 1];
// 660 ATOM2=CMAP(TAG&15); ! FORM -> CLASS
ATOM2 = CMAP[TAG & 15];
// 661 SUB ATOM=X; VAR TYPE=TAG>>4&7
SUBATOM = X;
VARTYPE = (unsigned int)TAG >> 4 & 7;
// 662 ATOM2 = 66 %IF VARTYPE = 0 %AND ATOM2 = 68
if (VARTYPE != 0) goto L_0068;
if (ATOM2 != 68) goto L_0068;
ATOM2 = 66;
L_0068:;
// 663 ATOM1 = ATOM2 %AND SUBATOM = -OLD %IF ATOM2 = ICONST
if (ATOM2 != 83) goto L_0069;
ATOM1 = ATOM2;
SUBATOM = -OLD;
L_0069:;
// 664 %IF D&256#0 %START; ! SET APP
if (D & 256 == 0) goto L_006A;
// 665 PAPP=|DICT(OLD)|
*PAPP = _imp_IMOD(DICT[OLD]);
// 666 %IF PAPP=0 %START
if (*PAPP != 0) goto L_006B;
// 667 %IF 11 <= TAG&15 <= 12 %START
{
// Double-sided test on TAG & 15 (Part I)
int tmp;
if (11 > (tmp = TAG & 15)) goto L_006C;
// Double-sided test on TAG & 15 (Part II)
if (tmp > 12) goto L_006C;
}
// 668 PAPP=PHRASE(ANAPP)
*PAPP = PHRASE[28];
// 669 APARM=OLD<<3+1; ! 1 DIMEN
APARM = (OLD << 3) + 1;
// 670 %ELSE
goto L_006D;
L_006C:;
// 671 F TYPE=8
FTYPE = 8;
// 672 %RETURN %IF SPEC < 0
if (SPEC >= 0) goto L_006E;
return;
L_006E:;
// 673 ATOM1=0; ATOM2=0
ATOM1 = 0;
ATOM2 = 0;
// 674 %FINISH
L_006D:;
// 675 %FINISH
L_006B:;
// 676 OLD=OLD+1
OLD = OLD + 1;
// 677 %FINISH %ELSE PAPP=APP; ! DEFAULT APP
goto L_006F;
L_006A:;
*PAPP = APP;
L_006F:;
// 678 FORMAT=0
FORMAT = 0;
// 679 %IF D&512#0 %START
if (D & 512 == 0) goto L_0070;
// 680 %IF ATOM2=RFN %THEN FORMAT=SUBATOM %ELSE %START
if (ATOM2 != 65) goto L_0071;
FORMAT = SUBATOM;
goto L_0072;
L_0071:;
// 681 FORMAT=DICT(DICT(OLD)-2)
FORMAT = DICT[DICT[OLD] - 2];
// 682 ATOM2=ATOM2+7
ATOM2 = ATOM2 + 7;
// 683 %FINISH
L_0072:;
// 684 %FINISH
L_0070:;
// 685 DICT(X-1)=DICT(X-1)!128 %UNLESS SPEC < 0
if (SPEC < 0) goto L_0073;
DICT[X - 1] = DICT[X - 1] | 128;
L_0073:;
// 686 SUBATOM=COUNT %IF LIM > T MAX
if (LIM <= TMAX) goto L_0074;
SUBATOM = COUNT;
L_0074:;
// 687 %RETURN
return;
// 688 %FINISH
L_0067:;
// 689 %EXIT %IF DICT(NEW) # DICT(OLD)
if (DICT[NEW] == DICT[OLD]) goto L_0075;
goto L_0076;
L_0075:;
// 690 %REPEAT
goto L_0066;
L_0076:;
// 691 %FINISH
L_0065:;
// 692 %REPEAT
goto L_0063;
L_0064:;
// 693 %END
return;
} /* end of LOOKUP */
// 694
// 695 %ROUTINE CODE DIGIT
void CODEDIGIT(void) {
// 696 %IF LIMIT=0 %START; ! MULTI CHAR
if (LIMIT != 0) goto L_0077;
// 697 DIGIT = SYM
DIGIT = SYM;
// 698 %IF DIGIT = '''' %START
if (DIGIT != 39) goto L_0078;
// 699 QUOTE = 0
QUOTE = 0;
// 700 READSYM
READSYM();
// 701 DIGIT = -1 %AND %RETURN %UNLESS SYM = ''''
if (SYM == 39) goto L_0079;
DIGIT = -1;
return;
L_0079:;
// 702 QUOTE = 1
QUOTE = 1;
// 703 %FINISH
L_0078:;
// 704 READSYM
READSYM();
// 705 %ELSE
goto L_007A;
L_0077:;
// 706 %IF '0' <= SYM <= '9' %OR 'A' <= SYM <= 'F' %START
{
// Double-sided test on SYM (Part I)
int tmp;
if (48 > (tmp = SYM)) goto L_007B;
// Double-sided test on SYM (Part II)
if (tmp <= 57) goto L_007C;
}
L_007B:;
{
// Double-sided test on SYM (Part I)
int tmp;
if (65 > (tmp = SYM)) goto L_007D;
// Double-sided test on SYM (Part II)
if (tmp > 70) goto L_007D;
}
L_007C:;
// 707 %IF SYM <= '9' %THEN DIGIT = SYM-'0' %C
if (SYM > 57) goto L_007E;
DIGIT = SYM - 48;
goto L_007F;
L_007E:;
DIGIT = SYM - 65 + 10;
L_007F:;
// 708+ %ELSE DIGIT = SYM-'A'+10
// 709 %IF DIGIT <= LIMIT %START
if (DIGIT > LIMIT) goto L_0080;
// 710 DIGIT = DIGIT+'A'
DIGIT = DIGIT + 65;
// 711 READ SYM
READSYM();
// 712 %RETURN
return;
// 713 %FINISH
L_0080:;
// 714 %FINISH
L_007D:;
// 715 DIGIT=0; QUOTE=0
DIGIT = 0;
QUOTE = 0;
// 716 %IF SYM='''' %START
if (SYM != 39) goto L_0081;
// 717 %IF LIMIT # 9 %START
if (LIMIT == 9) goto L_0082;
// 718 DIGIT = -1; READSYM
DIGIT = -1;
READSYM();
// 719 %FINISH
L_0082:;
// 720 %FINISH
L_0081:;
// 721 %FINISH
L_007A:;
// 722 %END
return;
} /* end of CODEDIGIT */
// 723
// 724 %ROUTINE CODE ATOM
void CODEATOM(void) {
// 725 %INTEGER TP
int TP;
// 726 %ROUTINE TPUT(%INTEGER S)
void TPUT(int S) {
// 727 POS = 0 %IF S < 32
if (S >= 32) goto L_0083;
POS = 0;
L_0083:;
// 728 FAULT(20) %IF TP = TEXT LIMIT
if (TP != 255) goto L_0084;
FAULT(20);
L_0084:;
// 729 TP = TP+1; BUFFER(LITPOS-TP) = S
TP = TP + 1;
BUFFER[LITPOS - TP - 1] = S;
// 730 %END
return;
} /* end of TPUT */
// 731 %INTEGERNAME SS
int *SS;
// 732 %INTEGER DTYPE, XTYPE, SRMOD, SLEN, PREFIX
int DTYPE;
int XTYPE;
int SRMOD;
int SLEN;
int PREFIX;
// 733 %INTEGER J, K, L, S, LP
int J;
int K;
int L;
int S;
int LP;
// 734 %CONSTBYTEINTEGERARRAY BASE SYM(1 : 4)= 'X', 'M', 'B', 'K'
const unsigned char BASESYM[4] = {88, 77, 66, 75};
// 735 %CONSTSHORTINTEGERARRAY BASE INF(1:4)=
const short int BASEINF[4] = {22799, 22528, 22273, 22023};
// 736+ X'590F',X'5800',X'5701',X'5607'
// 737 %CONSTSHORTINTEGER SPS=117; ! START OF SPEC SUB
// 738 %CONSTBYTEINTEGERARRAY SPEC SUB(SPS : 127)=%C
const unsigned char SPECSUB[11] = {8, 9, 10, 7, 105, 104, 25, 24, 72, 73, 1};
// 739+ 8,9,10,7,105,104,25,24,72,73,1
// 740 %CONSTSHORTINTEGERARRAY P VALUE(0 : 10)=%C
const short int PVALUE[11] = {0, [1 ... 2] = 6183, 4199, [4 ... 5] = 295, 4263, 167, 9240, 17432, 8728};
// 741+ 0,
// 742+ X'1827'(2), X'1067', X'0127'(2),X'10A7',
// 743+ X'00A7',X'2418',X'4418',
// 744+ X'2218'
// 745 %CONSTSHORTINTEGERARRAY SATOMS(1 : 12) =
const short int SATOMS[12] = {53, 14389, 12856, 50, 14389, 51, 14389, 51, 14389, 14389, 12856, 50};
// 746+ ! SPEC, NAME, MAP, MAPSPEC, <NULL>,
// 747+ X'0035', X'3835', X'3238', X'0032', X'3835',
// 748+ ! ARRAY ARRAYNAME ARRAYSPEC NAMESPEC ARRAYNAMESPEC,
// 749+ X'0033', X'3835', X'0033', X'3835', X'3835',
// 750+ ! FN, FNSPEC
// 751+ X'3238', X'0032'
// 752
// 753 %CONSTBYTEINTEGERARRAY SCLASS(1 : 12) =
const unsigned char SCLASS[12] = {109, 2, 9, 118, 1, 11, 12, 111, 110, 112, 8, 117};
// 754+ ! SPEC, NAME, MAP, MAPSPEC, <NULL>,
// 755+ 109, 2, 9, 118, 1,
// 756+ ! ARRAY, ARRAYNAME,ARRAYSPEC,NAMESPEC, ARRAYNAMESPEC,
// 757+ 11, 12, 111, 110, 112,
// 758+ ! FN, FNSPEC
// 759+ 8, 117
// 760 %CONSTINTEGER XSPS = 109
// 761 %CONSTINTEGERARRAY XMOD(XSPS : 116) = 17,18,27,28,97,98,107,108
const int XMOD[8] = {17, 18, 27, 28, 97, 98, 107, 108};
// 762 LP=LIT POS
LP = LITPOS;
// 763 ATOM POS=POS; LAST=ATOM1
ATOMPOS = POS;
LAST = ATOM1;
// 764 %IF QUOTE#0 %START; ! CONTINUATION OF STRING CONST
if (QUOTE == 0) goto L_0085;
// 765 TP=0
TP = 0;
// 766 TPUT(QUOTE>>8); TPUT(QUOTE&255)
TPUT((unsigned int)QUOTE >> 8);
TPUT(QUOTE & 255);
// 767 %CYCLE
L_0086:;
// 768 READSYM
READSYM();
// 769 %IF SYM= DELIM %START
if (SYM != DELIM) goto L_0087;
// 770 QUOTE=0
QUOTE = 0;
// 771 READSYM; %EXIT %IF SYM# DELIM
READSYM();
if (SYM == DELIM) goto L_0088;
goto L_0089;
L_0088:;
// 772 QUOTE=1
QUOTE = 1;
// 773 %FINISH
L_0087:;
// 774 TPUT(SYM)
TPUT(SYM);
// 775 %REPEAT
goto L_0086;
L_0089:;
// 776 BUFFER(LIT POS)=TP
BUFFER[LITPOS - 1] = TP;
// 777 LITPOS=LITPOS-TP-1
LITPOS = LITPOS - TP - 1;
// 778 %FINISH
L_0085:;
// 779 SLEN=0; XTYPE=0; SRMOD=0; PREFIX=0
SLEN = 0;
XTYPE = 0;
SRMOD = 0;
PREFIX = 0;
// 780 %CYCLE
L_008A:;
// 781 ATOM1=0; ATOM2=0; SUB ATOM=0; TAG=0
ATOM1 = 0;
ATOM2 = 0;
SUBATOM = 0;
TAG = 0;
// 782 ATOM1=TERMIN %AND %RETURN %IF SYMTYPE=0
if (SYMTYPE != 0) goto L_008B;
ATOM1 = 13;
return;
L_008B:;
// 783 %IF SYMTYPE=-1 %START; ! DIGIT
if (SYMTYPE != -1) goto L_008C;
// 784 %UNLESS (LAST=0 %AND OUT=0) %OR LAST=8%START
if (LAST != 0) goto L_008D;
if (OUT == 0) goto L_008E;
L_008D:;
if (LAST == 8) goto L_008E;
// 785 LIMIT=9; DIGIT='Z'
LIMIT = 9;
DIGIT = 90;
// 786 NEW BASE: ATOM1=ICONST; ATOM2 = ICONST
U_1002:;
ATOM1 = 83;
ATOM2 = 83;
// 787 %CYCLE
L_008F:;
// 788 LIT POS=LIT POS-1
LITPOS = LITPOS - 1;
// 789 BUFFER(LIT POS)=DIGIT
BUFFER[LITPOS - 1] = DIGIT;
// 790 CODE DIGIT
CODEDIGIT();
// 791 %IF DIGIT <= 0 %START
if (DIGIT > 0) goto L_0090;
// 792 %IF LIMIT = 9 %AND SYM = '.' %AND ATOM1 = ICONST %START
if (LIMIT != 9) goto L_0091;
if (SYM != 46) goto L_0091;
if (ATOM1 != 83) goto L_0091;
// 793 DIGIT = '.'
DIGIT = 46;
// 794 ATOM1 = RCONST; ATOM2 = RCONST
ATOM1 = 84;
ATOM2 = 84;
// 795 LP = LP-1
LP = LP - 1;
// 796 READ SYM
READSYM();
// 797 %ELSE
goto L_0092;
L_0091:;
// 798 ATOM1=0 %IF LIMIT#9 %AND DIGIT=0
if (LIMIT == 9) goto L_0093;
if (DIGIT != 0) goto L_0093;
ATOM1 = 0;
L_0093:;
// 799 BUFFER(LP)=LP-LITPOS
BUFFER[LP - 1] = LP - LITPOS;
// 800 LIT POS=LIT POS-1
LITPOS = LITPOS - 1;
// 801 SUBATOM=LP
SUBATOM = LP;
// 802 FAULT(23) %IF LITPOS <= 0
if (LITPOS > 0) goto L_0094;
FAULT(23);
L_0094:;
// 803 %RETURN
return;
// 804 %FINISH
L_0092:;
// 805 %FINISH
L_0090:;
// 806 %REPEAT
goto L_008F;
// 807 %FINISH
L_008E:;
// 808 %FINISH
L_008C:;
// 809 %IF SYM TYPE < 0 %START; ! LETTER
if (SYMTYPE >= 0) goto L_0095;
// 810 DP=T MAX
DP = TMAX;
// 811 OLD SYM=SYM
OLDSYM = SYM;
// 812 ! ---- THE FOLLOWING PACKING ROUTINE IS WORD-LENGTH DEPENDENT BUT CAN
// 813 ! BE MODIFIED WITH NO OTHER SIDE-EFFECTS PROVIDED COMPLEMENTARY
// 814 ! ALTERATIONS ARE MADE TO 'UNPACK' IN ROUTINE 'PRINT NAME' ----
// 815 %CYCLE
L_0096:;
// 816 SS == DICT(DP)
SS = (int *)/*?*/ &DICT[DP];
// 817 SS = SYM-32
*SS = SYM - 32;
// 818 READ SYM; %EXIT %IF SYM TYPE >= 0
READSYM();
if (SYMTYPE < 0) goto L_0097;
goto L_0098;
L_0097:;
// 819 OLD SYM=0
OLDSYM = 0;
// 820 SS = (SS<<6) + (SYM-32)
*SS = (*SS << 6) + (SYM - 32);
// 821 READ SYM; %EXIT %IF SYM TYPE >= 0
READSYM();
if (SYMTYPE < 0) goto L_0099;
goto L_0098;
L_0099:;
// 822 SS = (SS<<6) + (SYM-32)
*SS = (*SS << 6) + (SYM - 32);
// 823 READ SYM; %EXIT %IF SYM TYPE >= 0
READSYM();
if (SYMTYPE < 0) goto L_009A;
goto L_0098;
L_009A:;
// 824 SS = (SS<<6) + (SYM-32)
*SS = (*SS << 6) + (SYM - 32);
// 825 READ SYM; %EXIT %IF SYM TYPE >= 0
READSYM();
if (SYMTYPE < 0) goto L_009B;
goto L_0098;
L_009B:;
// 826 SS = (SS<<6) + (SYM-32)
*SS = (*SS << 6) + (SYM - 32);
// 827 READ SYM; %EXIT %IF SYM TYPE >= 0
READSYM();
if (SYMTYPE < 0) goto L_009C;
goto L_0098;
L_009C:;
// 828 DP=DP+1
DP = DP + 1;
// 829 %REPEAT
goto L_0096;
L_0098:;
// 830 %IF SYM='''' %AND OLD SYM # 0 %START
if (SYM != 39) goto L_009D;
if (OLDSYM == 0) goto L_009D;
// 831 DELIM = ''''
DELIM = 39;
// 832 %CYCLE J=1,1,4
// %for J = 1, 1, 4 %cycle
{
J = 0;
L_009E:
if (J == 4) goto L_009F;
J += 1;
// 833 %IF OLD SYM=BASE SYM(J) %START
if (OLDSYM != BASESYM[J - 1]) goto L_00A1;
// 834 QUOTE = 1
QUOTE = 1;
// 835 K=BASE INF(J)
K = BASEINF[J - 1];
// 836 DIGIT=K>>8; LIMIT=K&255
DIGIT = (unsigned int)K >> 8;
LIMIT = K & 255;
// 837 READSYM
READSYM();
// 838 -> NEW BASE
goto U_1002;
// 839 %FINISH
L_00A1:;
// 840 %REPEAT
goto L_009E;
}
L_009F:;
// 841 %FINISH
L_009D:;
// 842 DP=DP+1
DP = DP + 1;
// 843 FAULT(21) %IF DP >= T LIMIT
if (DP < TLIMIT) goto L_00A2;
FAULT(21);
L_00A2:;
// 844 ATOM1=IDENT; ATOM2=IDENT
ATOM1 = 59;
ATOM2 = 59;
// 845 LIM=T BASE; LOOKUP(T MAX)
LIM = TBASE;
LOOKUP(TMAX);
// 846 %RETURN
return;
// 847 %FINISH
L_0095:;
// 848 %IF SYM='''' %OR SYM = '"' %START
if (SYM == 39) goto L_00A3;
if (SYM != 34) goto L_00A4;
L_00A3:;
// 849 DELIM = SYM
DELIM = SYM;
// 850 QUOTE=1; ! INTO TEXT MODE
QUOTE = 1;
// 851 ATOM1=SCONST; ! SYMBOL, OR
ATOM1 = 82;
// 852 ATOM2=ICONST; ! STRING
ATOM2 = 83;
// 853 READSYM; SUB ATOM=SYM; ! FIRST CHAR
READSYM();
SUBATOM = SYM;
// 854 QUOTE=0 %IF SUBATOM=DELIM
if (SUBATOM != DELIM) goto L_00A5;
QUOTE = 0;
L_00A5:;
// 855 READSYM
READSYM();
// 856 %IF SUBATOM=DELIM %START; ! ' ' FOUND
if (SUBATOM != DELIM) goto L_00A6;
// 857 %IF SYM#DELIM %START; ! NULL SYMBOL OR STRING
if (SYM == DELIM) goto L_00A7;
// 858 SUB ATOM=NULL STRING; %RETURN
SUBATOM = 401;
return;
// 859 %FINISH
L_00A7:;
// 860 ! ' ' ' FOUND
// 861 QUOTE=1
QUOTE = 1;
// 862 READSYM; ! '' -> '
READSYM();
// 863 %FINISH
L_00A6:;
// 864 %IF SYM=DELIM %START; ! FOUND DELIM %OR '?'
if (SYM != DELIM) goto L_00A8;
// 865 QUOTE=0
QUOTE = 0;
// 866 READ SYM; ! SKIP QUOTE
READSYM();
// 867 %IF SYM#DELIM %START
if (SYM == DELIM) goto L_00A9;
// 868 LITPOS=LITPOS-2
LITPOS = LITPOS - 2;
// 869 BUFFER(LITPOS+2)=-1
BUFFER[LITPOS + 2 - 1] = -1;
// 870 BUFFER(LITPOS+1)=SUBATOM
BUFFER[LITPOS + 1 - 1] = SUBATOM;
// 871 SUBATOM=LITPOS+2
SUBATOM = LITPOS + 2;
// 872 %RETURN
return;
// 873 %FINISH
L_00A9:;
// 874 %FINISH
L_00A8:;
// 875 QUOTE=SUBATOM<<8+SYM; ! PRESERVE SYMBOLS
QUOTE = (SUBATOM << 8) + SYM;
// 876 ATOM2=SCONST; ! IT MUST BE A STRING
ATOM2 = 82;
// 877 SUBATOM=LITPOS
SUBATOM = LITPOS;
// 878 %RETURN
return;
// 879 %FINISH
L_00A4:;
// 880 DP=KEY>>2; ! INDEX INTO DICT
DP = (unsigned int)KEY >> 2;
// 881 READ SYM; ! GET NEXT SYMBOL
READSYM();
// 882 %CYCLE
L_00AA:;
// 883 S=KDICT(DP)
S = KDICT[DP - 32];
// 884 %EXIT %IF S&X'4000'#0; ! END OF LIST MARKER
if (S & 16384 == 0) goto L_00AB;
goto L_00AC;
L_00AB:;
// 885 %IF S&127#SYM %OR SYMTYPE < 0 %START
if (S & 127 != SYM) goto L_00AD;
if (SYMTYPE >= 0) goto L_00AE;
L_00AD:;
// 886 ATOM POS=POS %AND %RETURN %IF S >= 0
if (S < 0) goto L_00AF;
ATOMPOS = POS;
return;
L_00AF:;
// 887 DP=DP+1; ! ONTO ALTERNATIVE
DP = DP + 1;
// 888 %ELSE
goto L_00B0;
L_00AE:;
// 889 K = S>>7&127; READ SYM
K = (unsigned int)S >> 7 & 127;
READSYM();
// 890 %IF S > 0 %START
if (S <= 0) goto L_00B1;
// 891 %IF K # 0 %START
if (K == 0) goto L_00B2;
// 892 ATOM POS = POS %AND %RETURN %IF K#SYM %OR SYMTYPE<0
if (K != SYM) goto L_00B3;
if (SYMTYPE >= 0) goto L_00B4;
L_00B3:;
ATOMPOS = POS;
return;
L_00B4:;
// 893 READ SYM
READSYM();
// 894 %FINISH
L_00B2:;
// 895 K = 1
K = 1;
// 896 %FINISH
L_00B1:;
// 897 DP = DP+K
DP = DP + K;
// 898 %FINISH
L_00B0:;
// 899 %REPEAT
goto L_00AA;
L_00AC:;
// 900 ATOM1=S&63; ! PICK OFF CLASS
ATOM1 = S & 63;
// 901 SUB ATOM=S>>6&255
SUBATOM = (unsigned int)S >> 6 & 255;
// 902 %EXIT %IF ATOM1#0
if (ATOM1 == 0) goto L_00B5;
goto L_00B6;
L_00B5:;
// 903 L=P VALUE(SUBATOM)
L = PVALUE[SUBATOM];
// 904 %IF L#0 %START
if (L == 0) goto L_00B7;
// 905 %RETURN %IF PREFIX&L&63 # 0 %OR (LAST # 0 %AND L&1 # 0)
if (PREFIX & L & 63 != 0) goto L_00B8;
if (LAST == 0) goto L_00B9;
if (L & 1 == 0) goto L_00B9;
L_00B8:;
return;
L_00B9:;
// 906 PREFIX=PREFIX!L>>6
PREFIX = PREFIX | (unsigned int)L >> 6;
// 907 XTYPE=SUBATOM %IF SUBATOM <= 7
if (SUBATOM > 7) goto L_00BA;
XTYPE = SUBATOM;
L_00BA:;
// 908 %FINISH
L_00B7:;
// 909 ATOM POS=POS
ATOMPOS = POS;
// 910 %REPEAT; ! ROUND FOR ANOTHER
goto L_008A;
L_00B6:;
// 911 ATOM2=KDICT(DP+1)&63 %IF S < 0; ! VARIANT
if (S >= 0) goto L_00BB;
ATOM2 = KDICT[DP + 1 - 32] & 63;
L_00BB:;
// 912 %IF ATOM1=STRING %OR ATOM1=RECORD %START
if (ATOM1 == 16) goto L_00BC;
if (ATOM1 != 17) goto L_00BD;
L_00BC:;
// 913 DTYPE=ATOM1
DTYPE = ATOM1;
// 914 CODE ATOM
CODEATOM();
// 915 %IF DTYPE=STRING %START
if (DTYPE != 16) goto L_00BE;
// 916 ATOM1=0 %AND %RETURN %UNLESS ATOM1=ICONST
if (ATOM1 == 83) goto L_00BF;
ATOM1 = 0;
return;
L_00BF:;
// 917 SLEN=EVAL(SUBATOM); ! STRING LENGTH
SLEN = EVAL(SUBATOM);
// 918 %UNLESS 0 < SLEN <= TEXT LIMIT %START
{
// Double-sided test on SLEN (Part I)
int tmp;
if (0 >= (tmp = SLEN)) goto L_00C0;
// Double-sided test on SLEN (Part II)
if (tmp <= 255) goto L_00C1;
}
L_00C0:;
// 919 ATOM1=0; F TYPE=4
ATOM1 = 0;
FTYPE = 4;
// 920 %RETURN
return;
// 921 %FINISH
L_00C1:;
// 922 SRMOD=X'40'; ! TYPE FOR STRING
SRMOD = 64;
// 923 %ELSE
goto L_00C2;
L_00BE:;
// 924 %IF ATOM2=IDENT %START
if (ATOM2 != 59) goto L_00C3;
// 925 LIM=GLOBAL; LOOKUP(T BASE)
LIM = 0;
LOOKUP(TBASE);
// 926 %FINISH
L_00C3:;
// 927 %UNLESS ATOM2 = RFN %START
if (ATOM2 == 65) goto L_00C4;
// 928 F TYPE = 3
FTYPE = 3;
// 929 ATOM1 = 0; ATOM2 = 0
ATOM1 = 0;
ATOM2 = 0;
// 930 %RETURN
return;
// 931 %FINISH
L_00C4:;
// 932 SRMOD=X'50'; ! TYPE FOR RECORD
SRMOD = 80;
// 933 %FINISH
L_00C2:;
// 934 CODE ATOM
CODEATOM();
// 935 ATOM1=0 %AND %RETURN %IF ATOM1#RB
if (ATOM1 == 2) goto L_00C5;
ATOM1 = 0;
return;
L_00C5:;
// 936 %IF SYM TYPE=2 %START; ! KEYWORD FOLLOWS
if (SYMTYPE != 2) goto L_00C6;
// 937 CODE ATOM
CODEATOM();
// 938 %IF ATOM1 # SPECIAL %AND ATOM2 # SPECIAL %START
if (ATOM1 == 55) goto L_00C7;
if (ATOM2 == 55) goto L_00C7;
// 939 ATOM1 = 0; ATOM2 = 0; %RETURN
ATOM1 = 0;
ATOM2 = 0;
return;
// 940 %FINISH
L_00C7:;
// 941 SUBATOM = 1 %IF SUBATOM = 127;! SPEC
if (SUBATOM != 127) goto L_00C8;
SUBATOM = 1;
L_00C8:;
// 942 %FINISH %ELSE SUBATOM=5; ! NULL SPECIAL
goto L_00C9;
L_00C6:;
SUBATOM = 5;
L_00C9:;
// 943 ATOM1=0 %AND %RETURN %C
if (DTYPE != 17) goto L_00CA;
if (SUBATOM < 11) goto L_00CA;
ATOM1 = 0;
return;
L_00CA:;
// 944+ %IF DTYPE=RECORD %AND SUBATOM >= 11
// 945 K=SATOMS(SUBATOM)
K = SATOMS[SUBATOM - 1];
// 946 ATOM1=K&255; ATOM2=K>>8&255
ATOM1 = K & 255;
ATOM2 = (unsigned int)K >> 8 & 255;
// 947 SUBATOM=SCLASS(SUBATOM)
SUBATOM = SCLASS[SUBATOM - 1];
// 948 %ELSE
goto L_00CB;
L_00BD:;
// 949 %UNLESS PRE1 <= ATOM1 <= PRE2 %START
{
// Double-sided test on ATOM1 (Part I)
int tmp;
if (49 > (tmp = ATOM1)) goto L_00CC;
// Double-sided test on ATOM1 (Part II)
if (tmp <= 57) goto L_00CD;
}
L_00CC:;
// 950 ATOM1=0 %IF PREFIX#0
if (PREFIX == 0) goto L_00CE;
ATOM1 = 0;
L_00CE:;
// 951 %RETURN
return;
// 952 %FINISH
L_00CD:;
// 953 %FINISH
L_00CB:;
// 954 %IF SUBATOM >= SPS %START
if (SUBATOM < 117) goto L_00CF;
// 955 SPEC = -1; SUBATOM = SPEC SUB(SUBATOM)
SPEC = -1;
SUBATOM = SPECSUB[SUBATOM - 117];
// 956 %ELSE %IF SUBATOM >= XSPS
goto L_00D0;
L_00CF:;
if (SUBATOM < 109) goto L_00D1;
// 957 %IF XTYPE # 6 %START
if (XTYPE == 6) goto L_00D2;
// 958 ATOM1 = 0; ATOM2 = 0; %RETURN
ATOM1 = 0;
ATOM2 = 0;
return;
// 959 %FINISH
L_00D2:;
// 960 XTYPE = 3; ! EXTRINSIC!!
XTYPE = 3;
// 961 SUBATOM = XMOD(SUBATOM)
SUBATOM = XMOD[SUBATOM - 109];
// 962 SRMOD = SRMOD-X'10' %IF SRMOD # 0
if (SRMOD == 0) goto L_00D3;
SRMOD = SRMOD - 16;
L_00D3:;
// 963 %FINISH
L_00D1:;
L_00D0:;
// 964 %IF PREFIX&64#0 %START; ! OWN DATA
if (PREFIX & 64 == 0) goto L_00D4;
// 965 %UNLESS ATOM1 = OWN1 %OR ATOM1 = OWN2 %START;! NON-DATA
if (ATOM1 == 53) goto L_00D5;
if (ATOM1 == 51) goto L_00D5;
// 966 %IF XTYPE <= 3 %START; ! CONSTROUTINE ?
if (XTYPE > 3) goto L_00D6;
// 967 ATOM1 = 0; %RETURN
ATOM1 = 0;
return;
// 968 %FINISH
L_00D6:;
// 969 %ELSE
goto L_00D7;
L_00D5:;
// 970 ATOM1=ATOM1+1; ! ONTO '%OWN' VARIANT
ATOM1 = ATOM1 + 1;
// 971 OUT=(SUB ATOM+SRMOD)>>4
OUT = (unsigned int)SUBATOM + SRMOD >> 4;
// 972 %IF SUBATOM&1 = 0 %START; ! CONSTNAME ?
if (SUBATOM & 1 != 0) goto L_00D8;
// 973 OUT = 1; ! ADDRESSES ARE INTEGERS
OUT = 1;
// 974 %ELSE
goto L_00D9;
L_00D8:;
// 975 CONST INT = 1 %IF XTYPE = 2 %C
if (XTYPE != 2) goto L_00DA;
if (SUBATOM + SRMOD & 112 > 48) goto L_00DA;
CONSTINT = 1;
L_00DA:;
// 976+ %AND (SUBATOM+SRMOD)&X'70' <= X'30'
// 977 %FINISH
L_00D9:;
// 978 OUT = 15 %IF XTYPE = 3; ! DON'T INITIALIZE EXTRINSICS
if (XTYPE != 3) goto L_00DB;
OUT = 15;
L_00DB:;
// 979 %FINISH
L_00D7:;
// 980 %FINISH
L_00D4:;
// 981 SUBATOM=SUBATOM+LREALS %IF SUBATOM&X'70'=X'60'
if (SUBATOM & 112 != 96) goto L_00DC;
SUBATOM = SUBATOM + LREALS;
L_00DC:;
// 982 SUBATOM=SUBATOM+SLEN<<8+SRMOD+(PREFIX>>3&X'70')
SUBATOM = SUBATOM + (SLEN << 8) + SRMOD + ((unsigned int)PREFIX >> 3 & 112);
// 983 DEC TYPE=SUBATOM
DECTYPE = SUBATOM;
// 984 SPREFIX=XTYPE
SPREFIX = XTYPE;
// 985 PREFIX=0
PREFIX = 0;
// 986 %END
return;
} /* end of CODEATOM */
// 987 !*************************************************************
// 988 !* DEC TYPE: <EXT><EXTR><CONST><OWN><DYN><SYS><FLAG1><FLAG2> *
// 989 !*************************************************************
// 990 %INTEGERFN GAPP
int GAPP(void) {
// 991 %CONSTINTEGER PSEP = 129, PCALL = 130
// 992 %INTEGER L, P, TYPE, NEXT, C
int L;
int P;
int TYPE;
int NEXT;
int C;
// 993 %INTEGERFN CLASS(%INTEGER T)
int CLASS(int T) {
// 994 %CONSTBYTEINTEGERARRAY EXPS(0 : 7)=0,147(3),140,0,146(2)
const unsigned char EXPS[8] = {0, [1 ... 3] = 147, 140, 0, [6 ... 7] = 146};
// 995 %CONSTBYTEINTEGERARRAY PARM MAP(0 : 15)=0,0,137,0,0,0,0,122,
const unsigned char PARMMAP[16] = {0, 0, 137, 0, 0, 0, 0, 122, 176, 177, 123, 0, 159, 0, 0, 0};
// 996+ 176,177,123,0,159,0,0,0
// 997 %CONSTBYTEINTEGERARRAY TMOD(0:7) = 0,8(3),4,0,9,9
const unsigned char TMOD[8] = {0, [1 ... 3] = 8, 4, 0, 9, 9};
// 998 TYPE = T>>4
TYPE = (unsigned int)T >> 4;
// 999 TYPE = TMOD(TYPE) %AND %RESULT = EXPS(T>>4) %IF T&15 = 1;! EXPRN
if (T & 15 != 1) goto L_00DD;
TYPE = TMOD[TYPE];
return EXPS[(unsigned int)T >> 4];
L_00DD:;
// 1000 TYPE = 10 %IF TYPE = 0
if (TYPE != 0) goto L_00DE;
TYPE = 10;
L_00DE:;
// 1001 %RESULT=PARM MAP(T&15); ! CORRECT CLASS FOR NAMES
return PARMMAP[T & 15];
// 1002 %END
} /* end of CLASS */
// 1003 %ROUTINE SET GCELL(%INTEGER C, GC, LEN)
void SETGCELL(int C, int GC, int LEN) {
// 1004 C = C<<9; C = C+L %UNLESS GC = PCALL
C = C << 9;
if (GC == 130) goto L_00DF;
C = C + L;
L_00DF:;
// 1005 %WHILE L#GLIMIT %CYCLE
L_00E0:;
if (L == GLIMIT) goto L_00E1;
// 1006 L=L+1
L = L + 1;
// 1007 %RETURN %IF GRAM(L)=C %AND GCLASS(L) = GC %C
if (GRAM[L] != C) goto L_00E2;
if (GCLASS[L] != GC) goto L_00E2;
if (TAG & 112 != 64) goto L_00E3;
if (GRAM[L - 1] != LEN) goto L_00E2;
L_00E3:;
return;
L_00E2:;
// 1008+ %AND (TAG&X'70'#X'40' %OR GRAM(L-1)=LEN)
// 1009 %REPEAT
goto L_00E0;
L_00E1:;
// 1010 %IF TAG&X'70'=X'40' %START
if (TAG & 112 != 64) goto L_00E4;
// 1011 GLIMIT=GLIMIT+1; GRAM(GLIMIT)=LEN; ! SET STRING LE
GLIMIT = GLIMIT + 1;
GRAM[GLIMIT] = LEN;
// 1012 %FINISH
L_00E4:;
// 1013 GLIMIT=GLIMIT+1; GRAM(GLIMIT)=C; GCLASS(GLIMIT) = GC
GLIMIT = GLIMIT + 1;
GRAM[GLIMIT] = C;
GCLASS[GLIMIT] = GC;
// 1014 L=GLIMIT
L = GLIMIT;
// 1015 %IF DIAG&4 # 0 %START
if (DIAG & 4 == 0) goto L_00E5;
// 1016 PRINTSTRING("SET"); WRITE(L, 3)
_imp_PRINTSTRING(_imp_str_literal("SET"));
_imp_WRITE(L, 3);
// 1017 WRITE(C, 3); WRITE(GC, 3); WRITE(LEN, 3)
_imp_WRITE(C, 3);
_imp_WRITE(GC, 3);
_imp_WRITE(LEN, 3);
// 1018 NEWLINE
_imp_NEWLINE();
// 1019 %FINISH
L_00E5:;
// 1020 %END
return;
} /* end of SETGCELL */
// 1021
// 1022 %RESULT = NULL %IF TBASE=TMAX
if (TBASE != TMAX) goto L_00E6;
return 512;
L_00E6:;
// 1023 L = GBASE; P = TMAX
L = 426;
P = TMAX;
// 1024 SET GCELL(0, PCALL, 0)
SETGCELL(0, 130, 0);
// 1025 %CYCLE
L_00E7:;
// 1026 P = P-1
P = P - 1;
// 1027 NEXT = P-DICT(P)&255-2
NEXT = P - (DICT[P] & 255) - 2;
// 1028 TAG = DICT(P-1)
TAG = DICT[P - 1];
// 1029 C = CLASS(TAG&127)
C = CLASS(TAG & 127);
// 1030 SET GCELL(TYPE, C, TAG>>8&255)
SETGCELL(TYPE, C, (unsigned int)TAG >> 8 & 255);
// 1031 %EXIT %IF NEXT <= TBASE
if (NEXT > TBASE) goto L_00E8;
goto L_00E9;
L_00E8:;
// 1032 P = NEXT
P = NEXT;
// 1033 SET GCELL(0, PSEP, 0)
SETGCELL(0, 129, 0);
// 1034 %REPEAT
goto L_00E7;
L_00E9:;
// 1035 SET GCELL(0, LB, 0)
SETGCELL(0, 1, 0);
// 1036 FAULT(23) %IF GLIMIT >= GMAX
if (GLIMIT < 512) goto L_00EA;
FAULT(23);
L_00EA:;
// 1037 %RESULT=L
return L;
// 1038 %END
} /* end of GAPP */
// 1039
// 1040 %ROUTINE HEX(%INTEGER N)
void HEX(int N) {
// 1041 %INTEGER J,K
int J;
int K;
// 1042 %CYCLE J = 1, 1, 4
// %for J = 1, 1, 4 %cycle
{
J = 0;
L_00EB:
if (J == 4) goto L_00EC;
J += 1;
// 1043 K = N>>12; N = N<<4
K = (unsigned int)N >> 12;
N = N << 4;
// 1044 %IF K > 9 %THEN K = K-10+'A' %ELSE K = K+'0'
if (K <= 9) goto L_00EE;
K = K - 10 + 65;
goto L_00EF;
L_00EE:;
K = K + 48;
L_00EF:;
// 1045 PRINTSYMBOL(K)
_imp_PRINTSYMBOL(K);
// 1046 %REPEAT
goto L_00EB;
}
L_00EC:;
// 1047 %END
return;
} /* end of HEX */
// 1048 %ROUTINE ANALYSE(%INTEGER G)
void ANALYSE(int G) {
// 1049 %SWITCH DIR(86:102)
int DIR_index;
int DIR_line;
char *DIR_file;
static const void *DIR[17] = {&&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing,
&&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing,
&&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing,
&&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing, &&case_DIR_missing,
&&case_DIR_missing};
// 1050 %INTEGER EXTEND, AMBIG, SUB LOCK, DOWN LOCK
int EXTEND;
int AMBIG;
int SUBLOCK;
int DOWNLOCK;
// 1051 %INTEGER J, K, L, N, A1, NODE, NEW TYPE, T
int J;
int K;
int L;
int N;
int A1;
int NODE;
int NEWTYPE;
int T;
// 1052
// 1053 %ROUTINE REORDER
void REORDER(void) {
// 1054 %INTEGERNAME X, Y
int *X;
int *Y;
// 1055 %INTEGER R
int R;
// 1056 K=0
K = 0;
// 1057 %WHILE N < 0 %CYCLE
L_00F0:;
if (N >= 0) goto L_00F1;
// 1058 R=REF(N); J=CO(N)
R = REF[N + 300];
J = CO[N + 300];
// 1059 %IF LOC(N)&X'FF' > TRANSP %START;! DROP TRANSPARENT
if (LOC[N + 300] & 255 <= 18) goto L_00F2;
// 1060 X == K; R=R&X'6000'; ! PICK OFF ORDER
X = (int *)/*?*/ &K;
R = R & 24576;
// 1061 %WHILE X#0 %CYCLE
L_00F3:;
if (*X == 0) goto L_00F4;
// 1062 Y == REF(X)
Y = (int *)/*?*/ &REF[*X + 300];
// 1063 %EXIT %IF Y&X'6000' <= R
if (*Y & 24576 > R) goto L_00F5;
goto L_00F4;
L_00F5:;
// 1064 Y=Y-X'2000'; ! DECREMENT ORDERING CODE
*Y = *Y - 8192;
// 1065 X == CO(X); ! ON DOWN THE CHAIN
X = (int *)/*?*/ &CO[*X + 300];
// 1066 %REPEAT
goto L_00F3;
L_00F4:;
// 1067 CO(N)=X; X=N
CO[N + 300] = *X;
*X = N;
// 1068 %FINISH
L_00F2:;
// 1069 N=J
N = J;
// 1070 %REPEAT
goto L_00F0;
L_00F1:;
// 1071 %IF DIAG&8 # 0 %START
if (DIAG & 8 == 0) goto L_00F6;
// 1072 PRINTSTRING("REORDER N ="); WRITE(N, 3); NEWLINE
_imp_PRINTSTRING(_imp_str_literal("REORDER N ="));
_imp_WRITE(N, 3);
_imp_NEWLINE();
// 1073 %FINISH
L_00F6:;
// 1074 %END
return;
} /* end of REORDER */
// 1075 %ROUTINE SHOW(%INTEGER Z)
void SHOW(int Z) {
// 1076 WRITE(Z, 3)
_imp_WRITE(Z, 3);
// 1077 PRINTSTRING(" [")
_imp_PRINTSTRING(_imp_str_literal(" ["));
// 1078 HEX(REF(Z))
HEX(REF[Z + 300]);
// 1079 SPACE; HEX(CO(Z))
_imp_SPACE();
HEX(CO[Z + 300]);
// 1080 SPACE; HEX(SUB(Z))
_imp_SPACE();
HEX(SUB[Z + 300]);
// 1081 SPACE; HEX(LOC(Z))
_imp_SPACE();
HEX(LOC[Z + 300]);
// 1082 PRINTSYMBOL(']'); NEWLINE
_imp_PRINTSYMBOL(93);
_imp_NEWLINE();
// 1083 %END
return;
} /* end of SHOW */
// 1084 EXTEND=0; SUB LOCK = 0; DOWN LOCK = 0
EXTEND = 0;
SUBLOCK = 0;
DOWNLOCK = 0;
// 1085 A=0; A1=0; N=0; NODE=0
A = 0;
A1 = 0;
N = 0;
NODE = 0;
// 1086 AMBIG=0
AMBIG = 0;
// 1087 P = RECLEN
P = -300;
// 1088 L1: J=GRAM(G); K = GCLASS(G); ->EOP %IF K = 0
U_1003:;
J = GRAM[G];
K = GCLASS[G];
if (K != 0) goto L_00F7;
goto U_1002;
L_00F7:;
// 1089 NEW TYPE = J>>9&15
NEWTYPE = (unsigned int)J >> 9 & 15;
// 1090 NEW TYPE = TYPE %IF NEW TYPE = 0
if (NEWTYPE != 0) goto L_00F8;
NEWTYPE = TYPE;
L_00F8:;
// 1091 %IF DIAG&1 # 0 %START
if (DIAG & 1 == 0) goto L_00F9;
// 1092 WRITE(G, 4); WRITE(K, 3)
_imp_WRITE(G, 4);
_imp_WRITE(K, 3);
// 1093 WRITE(ATOM1, 3); WRITE(ATOM2, 3); WRITE(SUBATOM, 3)
_imp_WRITE(ATOM1, 3);
_imp_WRITE(ATOM2, 3);
_imp_WRITE(SUBATOM, 3);
// 1094 WRITE(TYPE, 2); WRITE(FORMAT, 3)
_imp_WRITE(TYPE, 2);
_imp_WRITE(FORMAT, 3);
// 1095 NEWLINE
_imp_NEWLINE();
// 1096 %FINISH
L_00F9:;
// 1097 %IF K >= PHRASES %START; ! PHRASE
if (K < 132) goto L_00FA;
// 1098 P=P+1; F TYPE=4 %AND -> ERROR %IF P=A
P = P + 1;
if (P != A) goto L_00FB;
FTYPE = 4;
goto U_1004;
L_00FB:;
// 1099 REF(P)=J; CO(P)=N
REF[P + 300] = J;
CO[P + 300] = N;
// 1100 LOC(P)=TYPE<<8+K
LOC[P + 300] = (TYPE << 8) + K;
// 1101 TYPE=NEW TYPE
TYPE = NEWTYPE;
// 1102 SHOW(P) %IF DIAG&8 # 0
if (DIAG & 8 == 0) goto L_00FC;
SHOW(P);
L_00FC:;
// 1103 N=-P
N = -P;
// 1104 G=PHRASE(K)
G = PHRASE[K - 132];
// 1105 -> L1
goto U_1003;
// 1106 %FINISH
L_00FA:;
// 1107 CLASS=K
CLASS = K;
// 1108 CLASS=ATOMIC(CLASS) %IF CLASS >= EQUIVS
if (CLASS < 105) goto L_00FD;
CLASS = ATOMIC[CLASS - 105];
L_00FD:;
// 1109 ->DIR(CLASS) %IF CLASS >= DIRECTIVES
if (CLASS < 86) goto L_00FE;
DIR_line = __LINE__;
DIR_file = __FILE__;
DIR_index = CLASS;
goto case_DIR_dispatch;
L_00FE:;
// 1110 %IF ATOM2=IDENT %AND (DEF1 <= CLASS <= DEF2 %OR CLASS = ICONST)%START
if (ATOM2 != 59) goto L_0100;
{
// Double-sided test on CLASS (Part I)
int tmp;
if (60 > (tmp = CLASS)) goto L_0101;
// Double-sided test on CLASS (Part II)
if (tmp <= 79) goto L_00ED;
}
L_0101:;
if (CLASS != 83) goto L_0100;
L_00ED:;
// 1111 LIM=GLOBAL; LOOKUP(T BASE)
LIM = 0;
LOOKUP(TBASE);
// 1112 %FINISH
L_0100:;
// 1113 %IF SET1 <= CLASS <= SET2 %AND %C
{
// Double-sided test on CLASS (Part I)
int tmp;
if (60 > (tmp = CLASS)) goto L_0102;
// Double-sided test on CLASS (Part II)
if (tmp > 64) goto L_0102;
}
if (OTYPE != 2) goto L_0103;
if (ATOM2 == 68) goto L_0103;
if (ATOM2 != 70) goto L_0102;
L_0103:;
// 1114+ (OTYPE#2 %OR ATOM2=68 %OR ATOM2=70) %START
// 1115 CLASS = CLASS+7; TYPE = TAG>>4&7
CLASS = CLASS + 7;
TYPE = (unsigned int)TAG >> 4 & 7;
// 1116 %FINISH
L_0102:;
// 1117 NEW TYPE=TYPE
NEWTYPE = TYPE;
// 1118 %IF CLASS=ATOM1 %OR CLASS=ATOM2 %START
if (CLASS == ATOM1) goto L_0104;
if (CLASS != ATOM2) goto L_0105;
L_0104:;
// 1119 %IF CLASS = IDENT %START
if (CLASS != 59) goto L_0106;
// 1120 DECLARE IDEN
DECLAREIDEN();
// 1121 TYPE = 15 %IF NEWTYPE = 15
if (NEWTYPE != 15) goto L_0107;
TYPE = 15;
L_0107:;
// 1122 %FINISH
L_0106:;
// 1123 %IF CHECK1 <= CLASS <= CHECK2 %START
{
// Double-sided test on CLASS (Part I)
int tmp;
if (66 > (tmp = CLASS)) goto L_0108;
// Double-sided test on CLASS (Part II)
if (tmp > 72) goto L_0108;
}
// 1124 %IF VAR TYPE#TYPE %START
if (VARTYPE == TYPE) goto L_0109;
// 1125 %UNLESS VARTYPE <= 3 %AND (TYPE=8 %OR TYPE=9) %START
if (VARTYPE > 3) goto L_00A0;
if (TYPE == 8) goto L_010A;
if (TYPE == 9) goto L_010A;
L_00A0:;
// 1126 %UNLESS VARTYPE >= 6 %AND TYPE=9 %START
if (VARTYPE < 6) goto L_010B;
if (TYPE == 9) goto L_010C;
L_010B:;
// 1127 %UNLESS TYPE = 10 %START
if (TYPE == 10) goto L_010D;
// 1128 F TYPE = 2; ->ALT
FTYPE = 2;
goto U_1005;
// 1129 %FINISH
L_010D:;
// 1130 %FINISH
L_010C:;
// 1131 %FINISH
L_010A:;
// 1132 %FINISH
L_0109:;
// 1133 F TYPE=0
FTYPE = 0;
// 1134 %FINISH
L_0108:;
// 1135 ENTRY: A=A-1; F TYPE=4 %AND -> ERROR %IF A=P
U_1006:;
A = A - 1;
if (A != P) goto L_010E;
FTYPE = 4;
goto U_1004;
L_010E:;
// 1136 REF(A)=J; CO(A)=N
REF[A + 300] = J;
CO[A + 300] = N;
// 1137 LOC(A)=TYPE<<8+K
LOC[A + 300] = (TYPE << 8) + K;
// 1138 TYPE=NEW TYPE
TYPE = NEWTYPE;
// 1139 SUB(A)=SUBATOM
SUB[A + 300] = SUBATOM;
// 1140 SHOW(A) %IF DIAG&8 # 0
if (DIAG & 8 == 0) goto L_010F;
SHOW(A);
L_010F:;
// 1141 ->DONE %IF J&511 = 511; ! END OF SS
if (J & 511 != 511) goto L_0110;
goto U_1007;
L_0110:;
// 1142 -> NEXT %IF AMBIG=0; ! NOT AMBIGUOUS
if (AMBIG != 0) goto L_0111;
goto U_1008;
L_0111:;
// 1143 G=AMBIG; AMBIG=0; -> L1
G = AMBIG;
AMBIG = 0;
goto U_1003;
// 1144 %FINISH
L_0105:;
// 1145 ALT: G=G+1; -> L1 %IF J < 0; ! TRY ALTERNATIVE
U_1005:;
G = G + 1;
if (J >= 0) goto L_0112;
goto U_1003;
L_0112:;
// 1146 NEXT: %IF NODE=A1 %START; ! LAST NODE FOR THIS ATOM
U_1008:;
if (NODE != A1) goto L_0113;
// 1147 EXTEND=0; SUB LOCK=0; DOWN LOCK = 0
EXTEND = 0;
SUBLOCK = 0;
DOWNLOCK = 0;
// 1148 -> ERROR %IF NODE=A; ! NO NEW NODES
if (NODE != A) goto L_0114;
goto U_1004;
L_0114:;
// 1149 A1=A
A1 = A;
// 1150 CODE ATOM %IF CLASS < DIRECTIVES; ! GET NEXT ATOM
if (CLASS >= 86) goto L_0115;
CODEATOM();
L_0115:;
// 1151 %FINISH
L_0113:;
// 1152 NODE=NODE-1; N=NODE
NODE = NODE - 1;
N = NODE;
// 1153 %IF EXTEND#0 %START
if (EXTEND == 0) goto L_0116;
// 1154 K = LOC(N)&255
K = LOC[N + 300] & 255;
// 1155 %IF K # 0 %START
if (K == 0) goto L_0117;
// 1156 J=REF(N)
J = REF[N + 300];
// 1157 TYPE = LOC(N)>>8
TYPE = (unsigned int)LOC[N + 300] >> 8;
// 1158 N=CO(N); ! WELL ?
N = CO[N + 300];
// 1159 -> ENTRY
goto U_1006;
// 1160 %FINISH
L_0117:;
// 1161 %FINISH
L_0116:;
// 1162 -> SKIP
goto U_1009;
// 1163 EOP: REORDER
U_1002:;
REORDER();
// 1164 N=-N; SUB(N)=K
N = -N;
SUB[N + 300] = K;
// 1165 SKIP: ! ON DOWN CHAIN
U_1009:;
// 1166 G=REF(N)&511; -> EOP %IF G=0
G = REF[N + 300] & 511;
if (G != 0) goto L_0118;
goto U_1002;
L_0118:;
// 1167 TYPE=LOC(N)>>8
TYPE = (unsigned int)LOC[N + 300] >> 8;
// 1168 -> L1
goto U_1003;
// 1169 DIR(89): ! %COLON
case_DIR_89:;
// 1170 -> ERROR %UNLESS ATOM1=3; ! LOOK FOR COLON
if (ATOM1 == 3) goto L_0119;
goto U_1004;
L_0119:;
// 1171 DONE: N=A; REORDER; SS=K
U_1007:;
N = A;
REORDER();
SS = K;
// 1172 %RETURN %IF DUP=0
if (DUP != 0) goto L_011A;
return;
L_011A:;
// 1173 F TYPE=7
FTYPE = 7;
// 1174 ERROR:
U_1004:;
// 1175 QUOTE=0 %AND READSYM %WHILE NL#SYM#';'
L_011B:;
{
// Double-sided test on SYM (Part I)
int tmp;
if (10 == (tmp = SYM)) goto L_011C;
// Double-sided test on SYM (Part II)
if (tmp == 59) goto L_011C;
}
QUOTE = 0;
READSYM();
goto L_011B;
L_011C:;
// 1176 %IF F TYPE=0 %START
if (FTYPE != 0) goto L_011D;
// 1177 %IF ATOM1=IDENT %AND LIM=GLOBAL %START
if (ATOM1 != 59) goto L_011E;
if (LIM != 0) goto L_011E;
// 1178 F TYPE=3
FTYPE = 3;
// 1179 %ELSE %IF ATOM1 = 0
goto L_011F;
L_011E:;
if (ATOM1 != 0) goto L_0120;
// 1180 FTYPE = 1
FTYPE = 1;
// 1181 %ELSE %IF SCONST <= ATOM1 <= RCONST
goto L_011F;
L_0120:;
{
// Double-sided test on ATOM1 (Part I)
int tmp;
if (82 > (tmp = ATOM1)) goto L_0121;
// Double-sided test on ATOM1 (Part II)
if (tmp > 84) goto L_0121;
}
// 1182 FTYPE = 2
FTYPE = 2;
// 1183 FTYPE = 5 %IF TYPE = 15
if (TYPE != 15) goto L_0122;
FTYPE = 5;
L_0122:;
// 1184 %FINISH
L_0121:;
L_011F:;
// 1185 %FINISH
L_011D:;
// 1186 FAULT(F TYPE)
FAULT(FTYPE);
// 1187 QUOTE=0; SYMTYPE=0; DEC TYPE=0
QUOTE = 0;
SYMTYPE = 0;
DECTYPE = 0;
// 1188 PREFIX=0; SPREFIX=0; CONST INT = 0
PREFIX = 0;
SPREFIX = 0;
CONSTINT = 0;
// 1189 %RETURN
return;
// 1190 DIR(86): ! %INT
case_DIR_86:;
// 1191 -> ALT %IF TYPE > 3 %AND TYPE#8; ! NOT INTEGER
if (TYPE <= 3) goto L_0123;
if (TYPE == 8) goto L_0123;
goto U_1005;
L_0123:;
// 1192 DCONT:
U_100A:;
// 1193 G = J&511
G = J & 511;
// 1194 -> EOP %IF G=0; ! END OF PHRASE
if (G != 0) goto L_0124;
goto U_1002;
L_0124:;
// 1195 -> L1
goto U_1003;
// 1196 DIR(87): ! %REAL
case_DIR_87:;
// 1197 -> ALT %IF TYPE < 6 %OR TYPE=8 %OR TYPE = 15;! NOT REAL
if (TYPE < 6) goto L_0125;
if (TYPE == 8) goto L_0125;
if (TYPE != 15) goto L_0126;
L_0125:;
goto U_1005;
L_0126:;
// 1198 -> DCONT
goto U_100A;
// 1199 DIR(88): ! %STR
case_DIR_88:;
// 1200 -> ALT %IF TYPE#4; ! NOT STRING
if (TYPE == 4) goto L_0127;
goto U_1005;
L_0127:;
// 1201 -> DCONT
goto U_100A;
// 1202 DIR(90): ! %FN
case_DIR_90:;
// 1203 %IF BLOCK TYPE&15 # 8 %START; ! NOT A FUNCTION
if (BLOCKTYPE & 15 == 8) goto L_0128;
// 1204 ->DALT %IF DIAG >= 0 %OR BLOCKTYPE&15 # 9; ! OR A FUNNY MAP
if (DIAG >= 0) goto L_0129;
if (BLOCKTYPE & 15 == 9) goto L_012A;
L_0129:;
goto U_100B;
L_012A:;
// 1205 %FINISH
L_0128:;
// 1206 TYPE=BLOCK TYPE>>4&7
TYPE = (unsigned int)BLOCKTYPE >> 4 & 7;
// 1207 %IF TYPE <= 3 %THEN TYPE=8 %ELSE %START
if (TYPE > 3) goto L_012B;
TYPE = 8;
goto L_012C;
L_012B:;
// 1208 TYPE=9 %IF TYPE >= 6
if (TYPE < 6) goto L_012D;
TYPE = 9;
L_012D:;
// 1209 %FINISH
L_012C:;
// 1210 -> DCONT
goto U_100A;
// 1211 DIR(91): ! %M
case_DIR_91:;
// 1212 -> DALT %IF BLOCK TYPE&15#9; ! NOT A MAP
if (BLOCKTYPE & 15 == 9) goto L_012E;
goto U_100B;
L_012E:;
// 1213 TYPE=BLOCK TYPE>>4&7
TYPE = (unsigned int)BLOCKTYPE >> 4 & 7;
// 1214 -> DCONT
goto U_100A;
// 1215 DIR(94): ! %SUB
case_DIR_94:;
// 1216 -> DCONT %IF SUB LOCK#0
if (SUBLOCK == 0) goto L_012F;
goto U_100A;
L_012F:;
// 1217 -> ALT %UNLESS ATOM1=U LINE
if (ATOM1 == 18) goto L_0130;
goto U_1005;
L_0130:;
// 1218 -> ERROR %IF SYMTYPE # -2
if (SYMTYPE == -2) goto L_0131;
goto U_1004;
L_0131:;
// 1219 L=FORMAT
L = FORMAT;
// 1220 CODE ATOM
CODEATOM();
// 1221 ATOM2=0
ATOM2 = 0;
// 1222 F TYPE=8 %AND -> ERROR %IF L <= 0
if (L > 0) goto L_0132;
FTYPE = 8;
goto U_1004;
L_0132:;
// 1223 LIM=DICT(L); ! ONTO THE END
LIM = DICT[L];
// 1224 LOOKUP(L); ! LOOK FOR SUBNAME
LOOKUP(L);
// 1225 F TYPE=3 %AND -> ERROR %IF ATOM2=0
if (ATOM2 != 0) goto L_0133;
FTYPE = 3;
goto U_1004;
L_0133:;
// 1226 ! NOT FOUND
// 1227 SUB LOCK=1
SUBLOCK = 1;
// 1228 -> DCONT
goto U_100A;
// 1229 DIR(95): ! %APP
case_DIR_95:;
// 1230 -> ALT %UNLESS ATOM1=LB
if (ATOM1 == 1) goto L_0134;
goto U_1005;
L_0134:;
// 1231 -> DCONT
goto U_100A;
// 1232 DIR(97): ! %SETPLUS
case_DIR_97:;
// 1233 PAPP = APP
*PAPP = APP;
// 1234 L = PHRASE(152+APARM&7)
L = PHRASE[152 + (APARM & 7) - 132];
// 1235 DICT(APARM>>3)=L %IF APARM&X'FFF8'#0
if (APARM & 65528 == 0) goto L_0135;
DICT[(unsigned int)APARM >> 3] = L;
L_0135:;
// 1236 %WHILE A CHAIN#0 %CYCLE
L_0136:;
if (ACHAIN == 0) goto L_0137;
// 1237 T=A CHAIN; A CHAIN=DICT(T); DICT(T)=L
T = ACHAIN;
ACHAIN = DICT[T];
DICT[T] = L;
// 1238 %REPEAT
goto L_0136;
L_0137:;
// 1239 ! SET APP FOR ARRAY
// 1240 -> DCONT
goto U_100A;
// 1241 DIR(98): ! %PLUS
case_DIR_98:;
// 1242 F TYPE=4 %AND -> ERROR %IF APARM&7=6
if (APARM & 7 != 6) goto L_0138;
FTYPE = 4;
goto U_1004;
L_0138:;
// 1243 APARM=APARM+1
APARM = APARM + 1;
// 1244 -> DCONT
goto U_100A;
// 1245 DIR(99): ! %AMBIG
case_DIR_99:;
// 1246 AMBIG=J&511
AMBIG = J & 511;
// 1247 -> ALT
goto U_1005;
// 1248 DIR(100): ! %DUMMY
case_DIR_100:;
// 1249 EXTEND = 1 %IF A1 # A
if (A1 == A) goto L_0139;
EXTEND = 1;
L_0139:;
// 1250 A1 = A1-1; K = 0
A1 = A1 - 1;
K = 0;
// 1251 ->ENTRY
goto U_1006;
// 1252 DIR(101): ! %LUP
case_DIR_101:;
// 1253 DICT(T LIMIT-2)=APARM
DICT[TLIMIT - 2] = APARM;
// 1254 DICT(T LIMIT-1)=FORMAT
DICT[TLIMIT - 1] = FORMAT;
// 1255 ->DCONT %UNLESS NODE = A1
if (NODE == A1) goto L_013A;
goto U_100A;
L_013A:;
// 1256 TLIMIT = TLIMIT-2; FAULT(23) %IF T LIMIT <= T MAX
TLIMIT = TLIMIT - 2;
if (TLIMIT > TMAX) goto L_013B;
FAULT(23);
L_013B:;
// 1257 -> DCONT
goto U_100A;
// 1258 DIR(102): ! %LDOWN
case_DIR_102:;
// 1259 ->DCONT %IF DOWN LOCK # 0
if (DOWNLOCK == 0) goto L_013C;
goto U_100A;
L_013C:;
// 1260 DOWN LOCK = 1
DOWNLOCK = 1;
// 1261 APARM=DICT(T LIMIT )
APARM = DICT[TLIMIT];
// 1262 FORMAT=DICT(T LIMIT+1)
FORMAT = DICT[TLIMIT + 1];
// 1263 T LIMIT = T LIMIT+2 %IF NODE = A1
if (NODE != A1) goto L_013D;
TLIMIT = TLIMIT + 2;
L_013D:;
// 1264 -> D CONT
goto U_100A;
// 1265 DALT: F TYPE=5; ! CONTEXT
U_100B:;
FTYPE = 5;
// 1266 -> ALT
goto U_1005;
// 1267 %END; ! OF ANALYSE
case_DIR_dispatch:
if (DIR_index < 86 || DIR_index > 102)
_imp_signalf(6, 3, DIR_index, "->DIR(%d) out of bounds at %s line %d", DIR_index, DIR_file, DIR_line);
goto *DIR[DIR_index - 86];
case_DIR_missing:
_imp_signalf(8, 2, DIR_index, "switch jump to undefined label DIR(%d): at %s line %d", DIR_index, DIR_file,
DIR_line);
} /* end of ANALYSE */
// 1268 FORMAT=0; APARM=0; RELOCATE=0
FORMAT = 0;
APARM = 0;
RELOCATE = 0;
// 1269 LITPOS=400
LITPOS = 400;
// 1270 SS=0; DEC TYPE=0; DUP=0; CONST INT = 0
SS = 0;
DECTYPE = 0;
DUP = 0;
CONSTINT = 0;
// 1271 PREFIX=0; SPREFIX=0
PREFIX = 0;
SPREFIX = 0;
// 1272 A CHAIN=0; F TYPE=0; MARK = ' '
ACHAIN = 0;
FTYPE = 0;
MARK = 32;
// 1273 %IF CONT=0 %START
if (CONT != 0) goto L_013E;
// 1274 MARGIN = MARGIN+POS
MARGIN = MARGIN + POS;
// 1275 %IF SYM TYPE=0 %START
if (SYMTYPE != 0) goto L_013F;
// 1276 POS=0; READ SYM
POS = 0;
READSYM();
// 1277 %FINISH
L_013F:;
// 1278 ATOM1=0
ATOM1 = 0;
// 1279 %IF SYMTYPE=0 %OR SYM='!' %START
if (SYMTYPE == 0) goto L_0140;
if (SYM != 33) goto L_0141;
L_0140:;
// 1280 SKIP: READSYM %WHILE SYMTYPE#0
U_100C:;
L_0142:;
if (SYMTYPE == 0) goto L_0143;
READSYM();
goto L_0142;
L_0143:;
// 1281 %RETURN
return;
// 1282 %FINISH
L_0141:;
// 1283 CODE ATOM; -> SKIP %IF ATOM1=COMMENT
CODEATOM();
if (ATOM1 != 7) goto L_0144;
goto U_100C;
L_0144:;
// 1284 STATS=STATS+1
STATS = STATS + 1;
// 1285 OP('O',LINE NUM) %IF PERMIN = 0; ! DUMP LINE NUMBER
if (PERMIN != 0) goto L_0145;
OP(79, LINENUM);
L_0145:;
// 1286 %IF ATOM1 = MCODE %AND SUBATOM = 1 %START
if (ATOM1 != 38) goto L_0146;
if (SUBATOM != 1) goto L_0146;
// 1287 CODE ATOM
CODEATOM();
// 1288 %IF ATOM2 = IDENT %START
if (ATOM2 != 59) goto L_0147;
// 1289 LIM = GLOBAL; LOOKUP(T BASE)
LIM = 0;
LOOKUP(TBASE);
// 1290 %FINISH
L_0147:;
// 1291 FAULT(0) %IF ATOM2 # ICONST
if (ATOM2 == 83) goto L_0148;
FAULT(0);
L_0148:;
// 1292 CGEN(EVAL(SUBATOM)); PUT('P')
CGEN(EVAL(SUBATOM));
PUT(80);
// 1293 %RETURN
return;
// 1294 %FINISH
L_0146:;
// 1295 TYPE=0
TYPE = 0;
// 1296 %IF ATOM1=IDENT %AND (SYM=':' %OR ATOM2=SWITCH) %START
if (ATOM1 != 59) goto L_0149;
if (SYM == 58) goto L_014A;
if (ATOM2 != 80) goto L_0149;
L_014A:;
// 1297 DEC TYPE=3
DECTYPE = 3;
// 1298 SS TYPE=0; ANALYSE(PHRASE(SS0));! LABEL
SSTYPE = 0;
ANALYSE(PHRASE[118]);
// 1299 %ELSE
goto L_014B;
L_0149:;
// 1300 %IF DEC TYPE#0 %OR OUT#0 %START
if (DECTYPE != 0) goto L_014C;
if (OUT == 0) goto L_014D;
L_014C:;
// 1301 TYPE=OUT
TYPE = OUT;
// 1302 SS TYPE=1; ANALYSE(PHRASE(SS1));! DECLARATION
SSTYPE = 1;
ANALYSE(PHRASE[119]);
// 1303 %ELSE
goto L_014E;
L_014D:;
// 1304 SS TYPE=3; ANALYSE(PHRASE(SS3));! STATEMENT
SSTYPE = 3;
ANALYSE(PHRASE[121]);
// 1305 %FINISH
L_014E:;
// 1306 %FINISH
L_014B:;
// 1307 %RETURN
return;
// 1308 %FINISH
L_013E:;
// 1309 CODE ATOM
CODEATOM();
// 1310 %IF CONT > 0 %START; ! APP
if (CONT <= 0) goto L_014F;
// 1311 SS TYPE=2; ANALYSE(PHRASE(SS2)); ! FORMAL PARAMETER
SSTYPE = 2;
ANALYSE(PHRASE[120]);
// 1312 J=GAPP
J = GAPP();
// 1313 FAULT(6) %IF 0#|FPP|#J
{
// Double-sided test on _imp_IMOD(*FPP) (Part I)
int tmp;
if (0 == (tmp = _imp_IMOD(*FPP))) goto L_0150;
// Double-sided test on _imp_IMOD(*FPP) (Part II)
if (tmp == J) goto L_0150;
}
FAULT(6);
L_0150:;
// 1314 FPP=J*SPEC
*FPP = J * SPEC;
// 1315 %ELSE; ! RECORDFORMAT
goto L_0151;
L_014F:;
// 1316 FP=TMAX; ! REMEMBER START OF NAMES
FP = TMAX;
// 1317 SS TYPE=4; ANALYSE(PHRASE(SS4))
SSTYPE = 4;
ANALYSE(PHRASE[122]);
// 1318 %IF SS#0 %AND TMAX > FP %START
if (SS == 0) goto L_0152;
if (TMAX <= FP) goto L_0152;
// 1319 J=T LIMIT+TBASE-TMAX-1
J = TLIMIT + TBASE - TMAX - 1;
// 1320 FAULT(21) %IF J <= TMAX
if (J > TMAX) goto L_0153;
FAULT(21);
L_0153:;
// 1321 FPP=T LIMIT-1; ! FILL IN FORMAT REFERENCE
*FPP = TLIMIT - 1;
// 1322 DICT(FPP)=J; ! END OF FORMAT
DICT[*FPP] = J;
// 1323 RELOCATE=J-FP
RELOCATE = J - FP;
// 1324 %CYCLE K=J,1,FPP-1
// %for K = J, 1, *FPP - 1 %cycle
{
int _initial = J, _final = *FPP - 1;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = J, 1, *FPP - 1");
K = _initial - (1);
L_0154:
if (K == _final) goto L_0155;
K += 1;
// ?Non-local
// 1325 DICT(K)=DICT(FP)
DICT[K] = DICT[FP];
// 1326 FP=FP+1
FP = FP + 1;
// 1327 %REPEAT
goto L_0154;
}
L_0155:;
// 1328 T LIMIT=J
TLIMIT = J;
// 1329 %FINISH
L_0152:;
// 1330 %FINISH
L_0151:;
// 1331 %END; ! ANALYSE SS
return;
} /* end of ANALYSESS */
// 1332 %ROUTINE COMPILE SS
void COMPILESS(void) {
// 1333 %CONSTBYTEINTEGERARRAY RCOMP(33:40)=34,33,35,36,38,37,39,40
const unsigned char RCOMP[8] = {34, 33, 35, 36, 38, 37, 39, 40};
// 1334 %CONSTBYTEINTEGERARRAY COMP(33:40)='>','<','=','#',')','(',116,107
const unsigned char COMP[8] = {62, 60, 61, 35, 41, 40, 116, 107};
// 1335 ! 116 = LOWER CASE 'T', 107 = LOWER CASE 'K'
// 1336 %CONSTBYTEINTEGERARRAY CON OP(82 : 84)='''', 'N', 'D'
const unsigned char CONOP[3] = {39, 78, 68};
// 1337 %CONSTBYTEINTEGERARRAY OPCODE(1:10)='*','/','&','!',
const unsigned char OPCODE[10] = {42, 47, 38, 33, 37, 91, 93, 46, 92, 120};
// 1338+ '%','[',']','.','\',120
// 1339 ! 120 = LOWER CASE 'X'
// 1340 %SWITCH C(1 : 130), D(50 : 57)
int C_index;
int C_line;
char *C_file;
static const void *C[130] = {
&&case_C_1, &&case_C_2, &&case_C_3, &&case_C_4, &&case_C_5, &&case_C_6,
&&case_C_7, &&case_C_8, &&case_C_9, &&case_C_10, &&case_C_11, &&case_C_12,
&&case_C_13, &&case_C_14, &&case_C_15, &&case_C_16, &&case_C_17, &&case_C_18,
&&case_C_19, &&case_C_20, &&case_C_21, &&case_C_22, &&case_C_23, &&case_C_24,
&&case_C_25, &&case_C_26, &&case_C_27, &&case_C_28, &&case_C_29, &&case_C_30,
&&case_C_31, &&case_C_32, &&case_C_33, &&case_C_34, &&case_C_35, &&case_C_36,
&&case_C_37, &&case_C_38, &&case_C_39, &&case_C_40, &&case_C_41, &&case_C_42,
&&case_C_43, &&case_C_44, &&case_C_45, &&case_C_46, &&case_C_missing, &&case_C_missing,
&&case_C_49, &&case_C_50, &&case_C_51, &&case_C_52, &&case_C_53, &&case_C_54,
&&case_C_missing, &&case_C_56, &&case_C_57, &&case_C_missing, &&case_C_missing, &&case_C_60,
&&case_C_61, &&case_C_62, &&case_C_63, &&case_C_64, &&case_C_65, &&case_C_66,
&&case_C_67, &&case_C_68, &&case_C_69, &&case_C_70, &&case_C_71, &&case_C_72,
&&case_C_73, &&case_C_74, &&case_C_75, &&case_C_76, &&case_C_77, &&case_C_78,
&&case_C_79, &&case_C_80, &&case_C_81, &&case_C_82, &&case_C_83, &&case_C_84,
&&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing,
&&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing,
&&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing, &&case_C_missing,
&&case_C_missing, &&case_C_missing, &&case_C_105, &&case_C_106, &&case_C_107, &&case_C_108,
&&case_C_109, &&case_C_110, &&case_C_111, &&case_C_112, &&case_C_113, &&case_C_114,
&&case_C_115, &&case_C_116, &&case_C_117, &&case_C_118, &&case_C_119, &&case_C_missing,
&&case_C_missing, &&case_C_122, &&case_C_123, &&case_C_124, &&case_C_125, &&case_C_126,
&&case_C_127, &&case_C_128, &&case_C_129, &&case_C_130};
int D_index;
int D_line;
char *D_file;
static const void *D[8] = {&&case_D_50, &&case_D_51, &&case_D_52, &&case_D_53,
&&case_D_54, &&case_D_missing, &&case_D_56, &&case_D_57};
// 1341 %BYTEINTEGERNAME MM
unsigned char *MM;
// 1342 %INTEGERNAME M
int *M;
// 1343 %INTEGER L, DIM, K
int L;
int DIM;
int K;
// 1344 %OWNINTEGER OWN DEF=0
static int OWNDEF = 0;
// 1345 %OWNINTEGER BP SIZE=0
static int BPSIZE = 0;
// 1346 %INTEGER CALL PENDING, PRED PENDING, PRED OP
int CALLPENDING;
int PREDPENDING;
int PREDOP;
// 1347 %INTEGER GLOBAL NOT, LOCAL NOT
int GLOBALNOT;
int LOCALNOT;
// 1348 %INTEGER CLAST, CMOD, OPS, BIT, CLEVEL, DOUBLE
int CLAST;
int CMOD;
int OPS;
int BIT;
int CLEVEL;
int DOUBLE;
// 1349 %INTEGER PLAB, LOOP LAB, ULAB, CONDS, ELSE
int PLAB;
int LOOPLAB;
int ULAB;
int CONDS;
int ELSE;
// 1350 %INTEGER LIT1, LIT2, STARTT
int LIT1;
int LIT2;
int STARTT;
// 1351 %INTEGER NEXT, CLASS, DCLASS, LINK
int NEXT;
int CLASS;
int DCLASS;
int LINK;
// 1352
// 1353 %ROUTINE AOP(%INTEGER C, A)
void AOP(int C, int A) {
// 1354 PUT(C)
PUT(C);
// 1355 %IF A < 0 %START
if (A >= 0) goto L_0157;
// 1356 A = -A; PUT('-')
A = -A;
PUT(45);
// 1357 %ELSE
goto L_0158;
L_0157:;
// 1358 A = A//2
A = ((long)A / (long)2);
// 1359 %FINISH
L_0158:;
// 1360 ADDR(A)
ADDR(A);
// 1361 %END
return;
} /* end of AOP */
// 1362
// 1363 %ROUTINE EXTRA(%INTEGER N)
void EXTRA(int N) {
// 1364 PUT(','); ADDR(N)
PUT(44);
ADDR(N);
// 1365 %END
return;
} /* end of EXTRA */
// 1366
// 1367 %ROUTINE DEF(%INTEGER N)
void DEF(int N) {
// 1368 %INTEGER K
int K;
// 1369 N=N+RELOCATE
N = N + RELOCATE;
// 1370 AOP('$',N); PRINT NAME(-N)
AOP(36, N);
PRINTNAME(-N);
// 1371 K=DICT(N-1)
K = DICT[N - 1];
// 1372 EXTRA(K&127); ! TYPE!FORM
EXTRA(K & 127);
// 1373 EXTRA(K>>8&255); ! MAX STRING LENGTH
EXTRA((unsigned int)K >> 8 & 255);
// 1374 EXTRA(DICT(N)>>13&7); ! OTYPE
EXTRA((unsigned int)DICT[N] >> 13 & 7);
// 1375 ! RECORD
// 1376 AOP(',',DICT(N-2)) %IF K&X'70'=X'50' %AND K&127#84
if (K & 112 != 80) goto L_0159;
if (K & 127 == 84) goto L_0159;
AOP(44, DICT[N - 2]);
L_0159:;
// 1377 %END
return;
} /* end of DEF */
// 1378
// 1379 %ROUTINE CALL
void CALL(void) {
// 1380 %INTEGER P
int P;
// 1381 CALL PENDING = 1
CALLPENDING = 1;
// 1382 AOP('@',X)
AOP(64, X);
// 1383 P = X
P = X;
// 1384 P = P-1 %IF DICT(X)&512 # 0
if (DICT[X] & 512 == 0) goto L_015A;
P = P - 1;
L_015A:;
// 1385 %IF |DICT(P-2)| = NULL %START
if (_imp_IMOD(DICT[P - 2]) != 512) goto L_015B;
// 1386 PUT('E'); CALL PENDING = 0
PUT(69);
CALLPENDING = 0;
// 1387 %ELSE
goto L_015C;
L_015B:;
// 1388 PRED PENDING = PRED PENDING<<1
PREDPENDING = PREDPENDING << 1;
// 1389 %FINISH
L_015C:;
// 1390 %END
return;
} /* end of CALL */
// 1391 %ROUTINE SET SIZE
void SETSIZE(void) {
// 1392 BP SIZE=LIT1-LIT2+1
BPSIZE = LIT1 - LIT2 + 1;
// 1393 %IF BPSIZE <= 0 %START
if (BPSIZE > 0) goto L_015D;
// 1394 ATOM POS=0; FAULT(4)
ATOMPOS = 0;
FAULT(4);
// 1395 BP SIZE=1
BPSIZE = 1;
// 1396 %FINISH
L_015D:;
// 1397 PUT('B'+32); ADDR(BP SIZE)
PUT(66 + 32);
ADDR(BPSIZE);
// 1398 %END
return;
} /* end of SETSIZE */
// 1399
// 1400 %ROUTINE POP LAB(%INTEGER MODE)
void POPLAB(int MODE) {
// 1401 %INTEGER L
int L;
// 1402 %IF LABEL > OLD LABEL %START
if (LABEL <= OLDLABEL) goto L_015E;
// 1403 L = LAB INF(LABEL>>2)
L = LABINF[((unsigned int)LABEL >> 2) - 1];
// 1404 %IF (L!!MODE)&1 # 0 %START
if ((L ^ MODE) & 1 == 0) goto L_015F;
// 1405 LABEL = LABEL-4; P LAB = LABEL
LABEL = LABEL - 4;
PLAB = LABEL;
// 1406 EILAB = PLAB+1 %IF L&4 # 0
if (L & 4 == 0) goto L_0160;
EILAB = PLAB + 1;
L_0160:;
// 1407 P LAB = P LAB+1 %IF L&3 = 3
if (L & 3 != 3) goto L_0161;
PLAB = PLAB + 1;
L_0161:;
// 1408 PLAB = 0 %IF L&8 = 0; ! NO EXIT CONDITION
if (L & 8 != 0) goto L_0162;
PLAB = 0;
L_0162:;
// 1409 %RETURN
return;
// 1410 %FINISH
L_015F:;
// 1411 %FINISH
L_015E:;
// 1412 %IF MODE = 0 %THEN MODE = 13 %ELSE MODE = 10
if (MODE != 0) goto L_0163;
MODE = 13;
goto L_0164;
L_0163:;
MODE = 10;
L_0164:;
// 1413 FAULT(MODE); ACCESS = 1
FAULT(MODE);
ACCESS = 1;
// 1414 %END
return;
} /* end of POPLAB */
// 1415
// 1416 %ROUTINE C END
void CEND(void) {
// 1417 %INTEGER L, T,LIM, FLAG
int L;
int T;
int LIM;
int FLAG;
// 1418 %IF X=88 %START; ! ENDOFPERM
if (X != 88) goto L_0165;
// 1419 STATS=0; LINE NUM=0
STATS = 0;
LINENUM = 0;
// 1420 LIST=LIST&1; DEC TYPE=0
LIST = LIST & 1;
DECTYPE = 0;
// 1421 SELECTINPUT(PROG); ! ONTO SOURCE PROGRAM
_imp_SELECTINPUT(1);
// 1422 PERMIN = 0; ! SHOW NOT IN PERM
PERMIN = 0;
// 1423 %RETURN
return;
// 1424 %FINISH
L_0165:;
// 1425 ATOM POS = 0; FLAG = SYM
ATOMPOS = 0;
FLAG = SYM;
// 1426 %IF LEVEL = 1 %AND X # EOP %AND FILE = 2 %START
if (LEVEL != 1) goto L_0166;
if (X == 87) goto L_0166;
if (FILE != 2) goto L_0166;
// 1427 DEC TYPE = EOP; FAULT(5)
DECTYPE = 87;
FAULT(5);
// 1428 %FINISH
L_0166:;
// 1429 LIM = T BASE
LIM = TBASE;
// 1430 %IF X=EOP %OR X=EOF %START; ! EOP
if (X == 87) goto L_0167;
if (X != 86) goto L_0168;
L_0167:;
// 1431 X = X-EOF; ! EOF -> 0, EOP -> L1
X = X - 86;
// 1432 FAULT(5) %UNLESS X = LEVEL
if (X == LEVEL) goto L_0169;
FAULT(5);
L_0169:;
// 1433 PUT(';')
PUT(59);
// 1434 %WHILE LEVEL > 1 %CYCLE
L_016A:;
if (LEVEL <= 1) goto L_016B;
// 1435 FAULT(9)
FAULT(9);
// 1436 LEVEL=LEVEL-1
LEVEL = LEVEL - 1;
// 1437 %REPEAT
goto L_016A;
L_016B:;
// 1438 LIM = GLOBAL; ! GIVE UNUSED FOR GLOBALS
LIM = 0;
// 1439 %ELSE
goto L_016C;
L_0168:;
// 1440 FAULT(5) %IF LEVEL <= 1 %AND FILE = 2
if (LEVEL > 1) goto L_016D;
if (FILE != 2) goto L_016D;
FAULT(5);
L_016D:;
// 1441 PUT(';')
PUT(59);
// 1442 %FINISH
L_016C:;
// 1443 %WHILE LABEL > OLD LABEL %CYCLE
L_016E:;
if (LABEL <= OLDLABEL) goto L_016F;
// 1444 L=LABINF(LABEL>>2)
L = LABINF[((unsigned int)LABEL >> 2) - 1];
// 1445 %IF L&7=2 %THEN L=11 %ELSE L=14
if (L & 7 != 2) goto L_0170;
L = 11;
goto L_0171;
L_0170:;
L = 14;
L_0171:;
// 1446 LABEL=LABEL-4
LABEL = LABEL - 4;
// 1447 FAULT(L)
FAULT(L);
// 1448 %REPEAT
goto L_016E;
L_016F:;
// 1449 FAULT(17) %IF ACCESS # 0 %AND 8 <= BLOCKTYPE&15 <= 10
if (ACCESS == 0) goto L_0172;
{
// Double-sided test on BLOCKTYPE & 15 (Part I)
int tmp;
if (8 > (tmp = BLOCKTYPE & 15)) goto L_0172;
// Double-sided test on BLOCKTYPE & 15 (Part II)
if (tmp > 10) goto L_0172;
}
FAULT(17);
L_0172:;
// 1450 X=T MAX-1
X = TMAX - 1;
// 1451 %WHILE X > LIM %CYCLE
L_0173:;
if (X <= LIM) goto L_0174;
// 1452 T=DICT(X)
T = DICT[X];
// 1453 %IF DICT(X-1)&128=0=LIST %AND T&X'400' = 0 %START
{
// Double-sided test on 0 (Part I)
int tmp;
if (DICT[X - 1] & 128 != (tmp = 0)) goto L_0175;
// Double-sided test on 0 (Part II)
if (tmp != LIST) goto L_0175;
}
if (T & 1024 != 0) goto L_0175;
// 1454 %IF CONTROL&X'1000' = 0 %START
if (CONTROL & 4096 != 0) goto L_0176;
// 1455 %IF FLAG # NL %START
if (FLAG == 10) goto L_0177;
// 1456 MARGIN = MARGIN+POS
MARGIN = MARGIN + POS;
// 1457 NEWLINE
_imp_NEWLINE();
// 1458 FLAG = 0
FLAG = 0;
// 1459 %FINISH
L_0177:;
// 1460 PRINTSTRING("? ")
_imp_PRINTSTRING(_imp_str_literal("? "));
// 1461 PRINT NAME(X)
PRINTNAME(X);
// 1462 PRINTSTRING(" UNUSED
_imp_PRINTSTRING(_imp_str_literal(" UNUSED\n"));
// 1463+ ")
// 1464 %FINISH
L_0176:;
// 1465 %FINISH
L_0175:;
// 1466 FAULT(12) %IF T&X'400'#0
if (T & 1024 == 0) goto L_0178;
FAULT(12);
L_0178:;
// 1467 X=X-T&255-3
X = X - (T & 255) - 3;
// 1468 %REPEAT
goto L_0173;
L_0174:;
// 1469 printsymbol(11)
_imp_PRINTSYMBOL(11);
// 1470 SPACES(MARGIN+8) %IF FLAG = 0
if (FLAG != 0) goto L_0179;
_imp_SPACES(MARGIN + 8);
L_0179:;
// 1471 %END
return;
} /* end of CEND */
// 1472 FAULT(24) %IF LABEL < 4 %OR LABEL > MAX LAB<<2
if (LABEL < 4) goto L_017A;
if (LABEL <= 80 << 2) goto L_017B;
L_017A:;
FAULT(24);
L_017B:;
// 1473 %IF ACCESS = 0 %AND SSTYPE = 3 %AND 33 # LOC(-1)&255 # 34 %START
if (ACCESS != 0) goto L_017C;
if (SSTYPE != 3) goto L_017C;
{
// Double-sided test on LOC[299] & 255 (Part I)
int tmp;
if (33 == (tmp = LOC[299] & 255)) goto L_017C;
// Double-sided test on LOC[299] & 255 (Part II)
if (tmp == 34) goto L_017C;
}
// 1474 FAULT(18) %IF CONTROL&X'1000' = 0; ACCESS = 1
if (CONTROL & 4096 != 0) goto L_017D;
FAULT(18);
L_017D:;
ACCESS = 1;
// 1475 %FINISH
L_017C:;
// 1476 CONDS=0; DIM=0; PRED PENDING = 0; PRED OP = 0
CONDS = 0;
DIM = 0;
PREDPENDING = 0;
PREDOP = 0;
// 1477 STARTT=0; ! DEFAULT TO CYCLE
STARTT = 0;
// 1478 PLAB=0; ULAB=0; LOOP LAB=0; ELSE = 0; EILAB = 0
PLAB = 0;
ULAB = 0;
LOOPLAB = 0;
ELSE = 0;
EILAB = 0;
// 1479 LIT1=0; LIT2=0
LIT1 = 0;
LIT2 = 0;
// 1480 NEXT=SS; LINK=0
NEXT = SS;
LINK = 0;
// 1481 LIT=0
LIT = 0;
// 1482 DCLASS = 0
DCLASS = 0;
// 1483 TOP: %CYCLE
U_100D:;
L_017E:;
// 1484 X=SUB(NEXT)
X = SUB[NEXT + 300];
// 1485 %EXIT %UNLESS X < 0 %AND NEXT <= P
if (X >= 0) goto L_017F;
if (NEXT <= P) goto L_0180;
L_017F:;
goto L_0181;
L_0180:;
// 1486 %IF CO(NEXT)#0 %START
if (CO[NEXT + 300] == 0) goto L_0182;
// 1487 SUB(NEXT)=LINK; LINK=NEXT
SUB[NEXT + 300] = LINK;
LINK = NEXT;
// 1488 %FINISH
L_0182:;
// 1489 NEXT=X
NEXT = X;
// 1490 %REPEAT
goto L_017E;
L_0181:;
// 1491 CLASS=LOC(NEXT)&255
CLASS = LOC[NEXT + 300] & 255;
// 1492 %IF DIAG&2 # 0 %START
if (DIAG & 2 == 0) goto L_0183;
// 1493 PRINTSTRING("C ="); WRITE(CLASS, 3)
_imp_PRINTSTRING(_imp_str_literal("C ="));
_imp_WRITE(CLASS, 3);
// 1494 PRINTSTRING(" X ="); WRITE(X, 3)
_imp_PRINTSTRING(_imp_str_literal(" X ="));
_imp_WRITE(X, 3);
// 1495 PRINTSTRING(" NEXT ="); WRITE(NEXT, 3)
_imp_PRINTSTRING(_imp_str_literal(" NEXT ="));
_imp_WRITE(NEXT, 3);
// 1496 NEWLINE
_imp_NEWLINE();
// 1497 %FINISH
L_0183:;
// 1498 NEXT=CO(NEXT)
NEXT = CO[NEXT + 300];
// 1499 -> C(X) %IF CLASS < PRE1
if (CLASS >= 49) goto L_0184;
C_line = __LINE__;
C_file = __FILE__;
C_index = X;
goto case_C_dispatch;
L_0184:;
// 1500 -> CONT %IF CLASS=APPEP
if (CLASS != 153) goto L_0186;
goto U_100E;
L_0186:;
// 1501 -> C(CLASS) %UNLESS CLASS=IDENT
if (CLASS == 59) goto L_0187;
C_line = __LINE__;
C_file = __FILE__;
C_index = CLASS;
goto case_C_dispatch;
L_0187:;
// 1502 -> D(DCLASS)
D_line = __LINE__;
D_file = __FILE__;
D_index = DCLASS;
goto case_D_dispatch;
// 1503 ACONT: ACCESS = 0
U_100F:;
ACCESS = 0;
// 1504 C(112): ! %AND (UI)
case_C_112:;
// 1505 CONT: %CYCLE
U_100E:;
L_0189:;
// 1506 ->TOP %IF NEXT#0
if (NEXT == 0) goto L_018A;
goto U_100D;
L_018A:;
// 1507 ->RETURN %IF LINK=0
if (LINK != 0) goto L_018B;
goto U_1010;
L_018B:;
// 1508 NEXT=CO(LINK); LINK=SUB(LINK)
NEXT = CO[LINK + 300];
LINK = SUB[LINK + 300];
// 1509 %REPEAT
goto L_0189;
// 1510 C(9): ! '\'
case_C_9:;
// 1511 %IF CLASS = 45 %START;! LOGICAL NOT
if (CLASS != 45) goto L_018C;
// 1512 LIT1=\LIT1 %AND LIT = LIT+1 %IF LIT=CODE
if (LIT != CODE) goto L_018D;
LIT1 = (~LIT1);
LIT = LIT + 1;
L_018D:;
// 1513 %ELSE
goto L_018E;
L_018C:;
// 1514 X = 10
X = 10;
// 1515 %FINISH
L_018E:;
// 1516 C(1): ! '*'
case_C_1:;
// 1517 C(2): ! '/'
case_C_2:;
// 1518 C(3): ! '&'
case_C_3:;
// 1519 C(4): ! '!'
case_C_4:;
// 1520 C(5): ! '!!'
case_C_5:;
// 1521 C(6): ! '<<'
case_C_6:;
// 1522 C(7): ! '>>'
case_C_7:;
// 1523 C(8): ! '.'
case_C_8:;
// 1524 PUT(OPCODE(X)); -> CONT
PUT(OPCODE[X - 1]);
goto U_100E;
// 1525 C(46):PUT('Q'); ->CONT;! REAL DIVIDE
case_C_46:;
PUT(81);
goto U_100E;
// 1526 C(10): PUT('M'); -> ACONT; ! %RESULT==
case_C_10:;
PUT(77);
goto U_100F;
// 1527 C(11): PUT('+') %UNLESS CLASS=44; ! UNARY PLUS
case_C_11:;
if (CLASS == 44) goto L_018F;
PUT(43);
L_018F:;
// 1528 -> CONT
goto U_100E;
// 1529 C(12): %IF CLASS#43 %THEN PUT('-') %ELSE %START
case_C_12:;
if (CLASS == 43) goto L_0190;
PUT(45);
goto L_0191;
L_0190:;
// 1530 LIT1=-LIT1 %AND LIT = LIT+1 %IF LIT=CODE
if (LIT != CODE) goto L_0192;
LIT1 = -LIT1;
LIT = LIT + 1;
L_0192:;
// 1531 PUT('U')
PUT(85);
// 1532 %FINISH
L_0191:;
// 1533 -> CONT
goto U_100E;
// 1534 C(13): PUT('X'); ->CONT; ! \\
case_C_13:;
PUT(88);
goto U_100E;
// 1535 C(14): PUT('Y'+32); DIAG = LIT1; -> CONT; ! DIAG
case_C_14:;
PUT(89 + 32);
DIAG = LIT1;
goto U_100E;
// 1536 C(15): PUT('Z'+32); CONTROL = LIT1; -> CONT; ! CONTROL
case_C_15:;
PUT(90 + 32);
CONTROL = LIT1;
goto U_100E;
// 1537 C(16): PUT('V'); -> ACONT; ! %RESULT=
case_C_16:;
PUT(86);
goto U_100F;
// 1538 C(17): %IF BLOCKTYPE # 7 %START
case_C_17:;
if (BLOCKTYPE == 7) goto L_0193;
// 1539 FAULT(5) %UNLESS DIAG < 0 %AND BLOCKTYPE&15 = 8
if (DIAG >= 0) goto L_0194;
if (BLOCKTYPE & 15 == 8) goto L_0195;
L_0194:;
FAULT(5);
L_0195:;
// 1540 %FINISH
L_0193:;
// 1541 PUT('R'); -> ACONT; ! RETURN
PUT(82);
goto U_100F;
// 1542 C(18): PUT('T'); -> PREDT; ! TRUE
case_C_18:;
PUT(84);
goto U_1011;
// 1543 C(19): PUT('K'); ! FALSE
case_C_19:;
PUT(75);
// 1544 PREDT: FAULT(5) %UNLESS BLOCKTYPE = 10
U_1011:;
if (BLOCKTYPE == 10) goto L_0196;
FAULT(5);
L_0196:;
// 1545 ->ACONT
goto U_100F;
// 1546 C(20): PUT(101); -> ACONT; ! %SIGNAL
case_C_20:;
PUT(101);
goto U_100F;
// 1547 C(44):LIT2 = 0; ! %ON %EVENT
case_C_44:;
LIT2 = 0;
// 1548 FAULT(15) %IF INHIBIT&1 # 0
if (INHIBIT & 1 == 0) goto L_0197;
FAULT(15);
L_0197:;
// 1549 INHIBIT = INHIBIT!1
INHIBIT = INHIBIT | 1;
// 1550 %CYCLE
L_0198:;
// 1551 %EXIT %IF NEXT = 0
if (NEXT != 0) goto L_0199;
goto L_019A;
L_0199:;
// 1552 X = SUB(NEXT)
X = SUB[NEXT + 300];
// 1553 %EXIT %IF (X < 0 %AND NEXT <= P) %OR LOC(NEXT)&255 # ICONST
if (X >= 0) goto L_019B;
if (NEXT <= P) goto L_019C;
L_019B:;
if (LOC[NEXT + 300] & 255 == 83) goto L_019D;
L_019C:;
goto L_019A;
L_019D:;
// 1554 NEXT = CO(NEXT)
NEXT = CO[NEXT + 300];
// 1555 LIT1 = EVAL(X)
LIT1 = EVAL(X);
// 1556 FAULT(16) %AND LIT1 = 0 %UNLESS 0 <= LIT1 <= 15
{
// Double-sided test on LIT1 (Part I)
int tmp;
if (0 > (tmp = LIT1)) goto L_019E;
// Double-sided test on LIT1 (Part II)
if (tmp <= 15) goto L_019F;
}
L_019E:;
FAULT(16);
LIT1 = 0;
L_019F:;
// 1557 LIT2 = LIT2!(1<<LIT1)
LIT2 = LIT2 | 1 << LIT1;
// 1558 %REPEAT
goto L_0198;
L_019A:;
// 1559 FAULT(16) %IF LIT2 = 0
if (LIT2 != 0) goto L_01A0;
FAULT(16);
L_01A0:;
// 1560 STARTT = 1+8
STARTT = 1 + 8;
// 1561 OP(111, LIT2); OP(',', LABEL)
OP(111, LIT2);
OP(44, LABEL);
// 1562 ->CONT
goto U_100E;
// 1563 C(21): PUT('S'+32); -> ACONT; ! %STOP
case_C_21:;
PUT(83 + 32);
goto U_100F;
// 1564 C(22): LIST=LIST&2; -> CONT; ! %LIST
case_C_22:;
LIST = LIST & 2;
goto U_100E;
// 1565 C(23): LIST=LIST!1; -> CONT; ! %ENDOFLIST
case_C_23:;
LIST = LIST | 1;
goto U_100E;
// 1566 C(24): LREALS=16; -> CONT; ! %REALSLONG
case_C_24:;
LREALS = 16;
goto U_100E;
// 1567 C(25): LREALS=0; -> CONT; ! %REALSNORMAL
case_C_25:;
LREALS = 0;
goto U_100E;
// 1568 C(109):PUT('S'); -> CONT; ! 'EQ'
case_C_109:;
PUT(83);
goto U_100E;
// 1569 C(45): PUT('Z'); -> CONT; ! EQEQ
case_C_45:;
PUT(90);
goto U_100E;
// 1570 C(26): ! EXIT
case_C_26:;
// 1571 C(27): ! CONTINUE
case_C_27:;
// 1572 L=LABEL
L = LABEL;
// 1573 %WHILE L > OLD LABEL %CYCLE
L_01A1:;
if (L <= OLDLABEL) goto L_01A2;
// 1574 %IF LABINF(L>>2)&7=2 %START;! CYCLE FOUND
if (LABINF[((unsigned int)L >> 2) - 1] & 7 != 2) goto L_01A3;
// 1575 %IF X = 26 %START
if (X != 26) goto L_01A4;
// 1576 MM == LABINF(L>>2)
MM = (unsigned char *)/*?*/ &LABINF[((unsigned int)L >> 2) - 1];
// 1577 MM = MM!8
*MM = *MM | 8;
// 1578 L = L-2; X = 'F'
L = L - 2;
X = 70;
// 1579 %ELSE
goto L_01A5;
L_01A4:;
// 1580 X = 113
X = 113;
// 1581 %FINISH
L_01A5:;
// 1582 OP(X,L-2)
OP(X, L - 2);
// 1583 -> ACONT
goto U_100F;
// 1584 %FINISH
L_01A3:;
// 1585 L=L-4
L = L - 4;
// 1586 %REPEAT
goto L_01A1;
L_01A2:;
// 1587 FAULT(10); ->CONT
FAULT(10);
goto U_100E;
// 1588 C(31): ULAB=LABEL+3; OP(117,ULAB); ! UNTIL
case_C_31:;
ULAB = LABEL + 3;
OP(117, ULAB);
// 1589 C(30): LOOP LAB=LABEL+2; DEF LAB(LOOP LAB);! WHILE
case_C_30:;
LOOPLAB = LABEL + 2;
DEFLAB(LOOPLAB);
// 1590 C(28): ! IF
case_C_28:;
// 1591 C(29): ! UNLESS
case_C_29:;
// 1592 EILAB = PLAB %IF ELSE # 0
if (ELSE == 0) goto L_01A6;
EILAB = PLAB;
L_01A6:;
// 1593 INHIBIT = INHIBIT!1
INHIBIT = INHIBIT | 1;
// 1594 CONDS=1; DOUBLE=0
CONDS = 1;
DOUBLE = 0;
// 1595 STARTT=(X-26)>>1+8
STARTT = ((unsigned int)X - 26 >> 1) + 8;
// 1596 GLOBAL NOT=0; C LAST=1
GLOBALNOT = 0;
CLAST = 1;
// 1597 CMOD=0; CLEVEL=1; OPS=1
CMOD = 0;
CLEVEL = 1;
OPS = 1;
// 1598 LOCAL NOT=X&1; P LAB=LABEL
LOCALNOT = X & 1;
PLAB = LABEL;
// 1599 CNEST(0)=P LAB; CNEST(1)=P LAB
CNEST[0] = PLAB;
CNEST[1] = PLAB;
// 1600 -> CONT
goto U_100E;
// 1601 C(32): LOCAL NOT=LOCAL NOT!!1; -> CONT; ! %NOT
case_C_32:;
LOCALNOT = LOCALNOT ^ 1;
goto U_100E;
// 1602 C(79):
case_C_79:;
// 1603 CALL; ! P
CALL();
// 1604 PRED OP = 4
PREDOP = 4;
// 1605 ->PAC %IF CALL PENDING = 0
if (CALLPENDING != 0) goto L_01A7;
goto U_1012;
L_01A7:;
// 1606 PRED PENDING = PRED PENDING!2
PREDPENDING = PREDPENDING | 2;
// 1607 ->CONT
goto U_100E;
// 1608 C(108): PUT('C'); ! ACOMP
case_C_108:;
PUT(67);
// 1609 PAC: X=35; ! '='
U_1012:;
X = 35;
// 1610 CONDS = CONDS-1
CONDS = CONDS - 1;
// 1611 -> COP
goto U_1013;
// 1612 C(33): ! <
case_C_33:;
// 1613 C(34): ! >
case_C_34:;
// 1614 C(35): ! =
case_C_35:;
// 1615 C(36): ! #
case_C_36:;
// 1616 C(37): ! <=
case_C_37:;
// 1617 C(38): ! >=
case_C_38:;
// 1618 CONDS=CONDS-1
CONDS = CONDS - 1;
// 1619 %IF NEXT#0 %START; ! DOUBLE SIDED
if (NEXT == 0) goto L_01A8;
// 1620 PUT(126); ! SHOW DOUBLE SIDED
PUT(126);
// 1621 DOUBLE=1; BIT=1; ! PSEUDO %AND
DOUBLE = 1;
BIT = 1;
// 1622 -> ANDOP
goto U_1014;
// 1623 %FINISH
L_01A8:;
// 1624 %IF DOUBLE # 0 %START
if (DOUBLE == 0) goto L_01A9;
// 1625 DOUBLE = 0; X = RCOMP(X)
DOUBLE = 0;
X = RCOMP[X - 33];
// 1626 %FINISH
L_01A9:;
// 1627 PUT('?')
PUT(63);
// 1628 COP: LOCAL NOT=(LOCAL NOT!!GLOBAL NOT)&1
U_1013:;
LOCALNOT = (LOCALNOT ^ GLOBALNOT) & 1;
// 1629 X=X!!7 %IF LOCAL NOT#0
if (LOCALNOT == 0) goto L_01AA;
X = X ^ 7;
L_01AA:;
// 1630 %IF CLAST#0 %START
if (CLAST == 0) goto L_01AB;
// 1631 X=X!!7 %IF OPS&1#0
if (OPS & 1 == 0) goto L_01AC;
X = X ^ 7;
L_01AC:;
// 1632 OP(COMP(X+PRED OP),CNEST(CLEVEL))
OP(COMP[X + PREDOP - 33], CNEST[CLEVEL]);
// 1633 %ELSE
goto L_01AD;
L_01AB:;
// 1634 %WHILE CMOD&1#0 %CYCLE
L_01AE:;
if (CMOD & 1 == 0) goto L_01AF;
// 1635 CMOD=CMOD>>1; OPS=OPS>>1
CMOD = (unsigned int)CMOD >> 1;
OPS = (unsigned int)OPS >> 1;
// 1636 CLEVEL=CLEVEL-1
CLEVEL = CLEVEL - 1;
// 1637 GLOBAL NOT=GLOBAL NOT>>1
GLOBALNOT = (unsigned int)GLOBALNOT >> 1;
// 1638 %REPEAT
goto L_01AE;
L_01AF:;
// 1639 CMOD=CMOD>>1; OPS=OPS>>1; CLEVEL=CLEVEL-1
CMOD = (unsigned int)CMOD >> 1;
OPS = (unsigned int)OPS >> 1;
CLEVEL = CLEVEL - 1;
// 1640 GLOBAL NOT=GLOBAL NOT>>1
GLOBALNOT = (unsigned int)GLOBALNOT >> 1;
// 1641 X=X!!7 %IF OPS&1#0
if (OPS & 1 == 0) goto L_01B0;
X = X ^ 7;
L_01B0:;
// 1642 OP(COMP(X+PRED OP),CNEST(CLEVEL))
OP(COMP[X + PREDOP - 33], CNEST[CLEVEL]);
// 1643 DEF LAB(LABEL) %UNLESS LABEL=CNEST(CLEVEL)
if (LABEL == CNEST[CLEVEL]) goto L_01B1;
DEFLAB(LABEL);
L_01B1:;
// 1644 LABEL=CNEST(CLEVEL)
LABEL = CNEST[CLEVEL];
// 1645 %FINISH
L_01AD:;
// 1646 CLAST=0; LOCAL NOT=0; PRED OP = 0
CLAST = 0;
LOCALNOT = 0;
PREDOP = 0;
// 1647 DEF LAB(ULAB) %IF CONDS <= 0 %AND ULAB#0
if (CONDS > 0) goto L_01B2;
if (ULAB == 0) goto L_01B2;
DEFLAB(ULAB);
L_01B2:;
// 1648 PUT('"') %IF DOUBLE # 0
if (DOUBLE == 0) goto L_01B3;
PUT(34);
L_01B3:;
// 1649 -> CONT
goto U_100E;
// 1650 C(39): ! AND
case_C_39:;
// 1651 C(40): ! OR
case_C_40:;
// 1652 BIT=X&1; ! 1=AND, 0=OR
BIT = X & 1;
// 1653 ANDOP: CONDS=CONDS+1
U_1014:;
CONDS = CONDS + 1;
// 1654 LOCAL NOT=(LOCAL NOT!!GLOBAL NOT)&1
LOCALNOT = (LOCALNOT ^ GLOBALNOT) & 1;
// 1655 BIT=BIT!!LOCAL NOT
BIT = BIT ^ LOCALNOT;
// 1656 %IF BIT=OPS&1 %START
if (BIT != OPS & 1) goto L_01B4;
// 1657 %IF CLAST#0 %START
if (CLAST == 0) goto L_01B5;
// 1658 CMOD=CMOD<<1
CMOD = CMOD << 1;
// 1659 CNEST(CLEVEL+1)=CNEST(CLEVEL)
CNEST[CLEVEL + 1] = CNEST[CLEVEL];
// 1660 CLEVEL=CLEVEL+1
CLEVEL = CLEVEL + 1;
// 1661 OPS=OPS<<1!BIT
OPS = OPS << 1 | BIT;
// 1662 GLOBAL NOT=GLOBAL NOT<<1!LOCAL NOT
GLOBALNOT = GLOBALNOT << 1 | LOCALNOT;
// 1663 %FINISH
L_01B5:;
// 1664 %ELSE
goto L_01B6;
L_01B4:;
// 1665 CMOD=CMOD<<1
CMOD = CMOD << 1;
// 1666 %IF CLAST#0 %START
if (CLAST == 0) goto L_01B7;
// 1667 LABEL=LABEL+4
LABEL = LABEL + 4;
// 1668 CLEVEL=CLEVEL+1; CNEST(CLEVEL)=LABEL
CLEVEL = CLEVEL + 1;
CNEST[CLEVEL] = LABEL;
// 1669 %ELSE
goto L_01B8;
L_01B7:;
// 1670 CMOD=CMOD!1
CMOD = CMOD | 1;
// 1671 %IF OPS>>1&1 = BIT %START
if ((unsigned int)OPS >> 1 & 1 != BIT) goto L_01B9;
// 1672 L = CNEST(CLEVEL-1)
L = CNEST[CLEVEL - 1];
// 1673 %ELSE
goto L_01BA;
L_01B9:;
// 1674 LABEL=LABEL+4; L=LABEL
LABEL = LABEL + 4;
L = LABEL;
// 1675 %FINISH
L_01BA:;
// 1676 CLEVEL=CLEVEL+1; CNEST(CLEVEL)=L
CLEVEL = CLEVEL + 1;
CNEST[CLEVEL] = L;
// 1677 %FINISH
L_01B8:;
// 1678 OPS=OPS<<1!BIT
OPS = OPS << 1 | BIT;
// 1679 GLOBAL NOT=GLOBAL NOT<<1!LOCAL NOT
GLOBALNOT = GLOBALNOT << 1 | LOCALNOT;
// 1680 %FINISH
L_01B6:;
// 1681 CLAST=1; LOCAL NOT=0
CLAST = 1;
LOCALNOT = 0;
// 1682 -> CONT %IF DOUBLE=0
if (DOUBLE != 0) goto L_01BB;
goto U_100E;
L_01BB:;
// 1683 -> COP; ! REJOIN CONDITIONS
goto U_1013;
// 1684 C(119): ! STARTT
case_C_119:;
// 1685 STARTT = 2 %AND DEF LAB(LABEL+2) %IF STARTT = 0
if (STARTT != 0) goto L_01BC;
STARTT = 2;
DEFLAB(LABEL + 2);
L_01BC:;
// 1686 LABEL = LABEL+4
LABEL = LABEL + 4;
// 1687 FAULT(23) %IF LABEL>>2 > MAX LAB
if ((unsigned int)LABEL >> 2 <= 80) goto L_01BD;
FAULT(23);
L_01BD:;
// 1688 LABINF(LABEL>>2) = STARTT+ELSE
LABINF[((unsigned int)LABEL >> 2) - 1] = STARTT + ELSE;
// 1689 LOOP LAB = 0; P LAB = 0; ! LABEL NO LONGER PENDING
LOOPLAB = 0;
PLAB = 0;
// 1690 ELSE = 0; EILAB = 0
ELSE = 0;
EILAB = 0;
// 1691 ->CONT
goto U_100E;
// 1692 C(41): OP('B',LABEL-2); ! REPEAT
case_C_41:;
OP(66, LABEL - 2);
// 1693 ACCESS = 0
ACCESS = 0;
// 1694 C(42): POP LAB(X&1); ->CONT; ! FINISH
case_C_42:;
POPLAB(X & 1);
goto U_100E;
// 1695 C(43): ! ELSE
case_C_43:;
// 1696 POP LAB(0) %IF P LAB = 0; ! (FINISH) ELSE ...
if (PLAB != 0) goto L_01BE;
POPLAB(0);
L_01BE:;
// 1697 FAULT(5) %AND -> RETURN %IF PLAB&1#0
if (PLAB & 1 == 0) goto L_01BF;
FAULT(5);
goto U_1010;
L_01BF:;
// 1698 OP('F',PLAB+1) %UNLESS ACCESS = 0
if (ACCESS == 0) goto L_01C0;
OP(70, PLAB + 1);
L_01C0:;
// 1699 DEF LAB(PLAB)
DEFLAB(PLAB);
// 1700 PLAB=PLAB+1
PLAB = PLAB + 1;
// 1701 STARTT=3+8; ! SHOW ELSE
STARTT = 3 + 8;
// 1702 ELSE = 4
ELSE = 4;
// 1703 -> CONT
goto U_100E;
// 1704 C(54): OWN DEF=0; OUT=0; ! OWNVTYPE
case_C_54:;
OWNDEF = 0;
OUT = 0;
// 1705 C(51): ! ATYPE
case_C_51:;
// 1706 C(52): ! OWN ATYPE
case_C_52:;
// 1707 C(53): ! VTYPE
case_C_53:;
// 1708 C(56): ! TYPE
case_C_56:;
// 1709 FAULT(15) %IF INHIBIT&1 # 0 %AND SPEC > 0
if (INHIBIT & 1 == 0) goto L_01C1;
if (SPEC <= 0) goto L_01C1;
FAULT(15);
L_01C1:;
// 1710 C(50): ! RTYPE
case_C_50:;
// 1711 C(57): ! SWITCH
case_C_57:;
// 1712 DCLASS=CLASS; -> CONT
DCLASS = CLASS;
goto U_100E;
// 1713 C(60): ! VSET
case_C_60:;
// 1714 C(61): ! NSET
case_C_61:;
// 1715 C(67): ! V
case_C_67:;
// 1716 C(68): ! N
case_C_68:;
// 1717 C(74): ! RECV
case_C_74:;
// 1718 C(75): ! RECN
case_C_75:;
// 1719 C(122): ! RTP
case_C_122:;
// 1720 C(123): ! PP
case_C_123:;
// 1721 C(124): ! FNP
case_C_124:;
// 1722 C(125): ! MP
case_C_125:;
// 1723 C(77): ! RECAN
case_C_77:;
// 1724 C(63): ! ANSET
case_C_63:;
// 1725 C(70): ! AN
case_C_70:;
// 1726 C(62): ! ASET
case_C_62:;
// 1727 C(69): ! A
case_C_69:;
// 1728 C(76): ! RECA
case_C_76:;
// 1729 AOP('@', X); ->CONT
AOP(64, X);
goto U_100E;
// 1730 C(65): ! RFN
case_C_65:;
// 1731 C(66): ! AFN
case_C_66:;
// 1732 -> CONT
goto U_100E;
// 1733 C(71): ! M
case_C_71:;
// 1734 C(72): ! F
case_C_72:;
// 1735 C(73): ! RT
case_C_73:;
// 1736 C(78): ! RECORDMAP
case_C_78:;
// 1737 C(64): ! MSET
case_C_64:;
// 1738 CALL; -> CONT
CALL();
goto U_100E;
// 1739 C(83): LIT2=LIT1; LIT1=EVAL(X); ! 'ICONST'
case_C_83:;
LIT2 = LIT1;
LIT1 = EVAL(X);
// 1740 CGEN(LIT1) %AND ->CONT %IF X < 0
if (X >= 0) goto L_01C2;
CGEN(LIT1);
goto U_100E;
L_01C2:;
// 1741 C(82): ! SCONST
case_C_82:;
// 1742 C(84): ! 'RCONST'
case_C_84:;
// 1743 L=BUFFER(X)
L = BUFFER[X - 1];
// 1744 %IF L <= 0 %AND CLASS=ICONST %START; ! SYMBOL
if (L > 0) goto L_01C3;
if (CLASS != 83) goto L_01C3;
// 1745 OP('N',3); L=BUFFER(X-1)
OP(78, 3);
L = BUFFER[X - 1 - 1];
// 1746 PUT(','); PUT('Z')
PUT(44);
PUT(90);
// 1747 X=L//10
X = ((long)L / (long)10);
// 1748 PUT(X+'A')
PUT(X + 65);
// 1749 PUT(L-X*10+'A')
PUT(L - X * 10 + 65);
// 1750 %ELSE
goto L_01C4;
L_01C3:;
// 1751 L=|L|
L = _imp_IMOD(L);
// 1752 OP(CONOP(CLASS),L)
OP(CONOP[CLASS - 82], L);
// 1753 %IF L > 0 %START
if (L <= 0) goto L_01C5;
// 1754 %integer x2
int X2;
// 1755 PUT(',')
PUT(44);
// 1756 x2 = X
X2 = X;
// 1757 %CYCLE X=x2-1,-1,x2-L
// %for X = X2 - 1, -1, X2 - L %cycle
{
int _initial = X2 - 1, _final = X2 - L;
if (invalid_for_loop(_initial, -1, _final)) _imp_signal(5, 1, 0, "Illegal cycle X = X2 - 1, -1, X2 - L");
X = _initial - (-1);
L_01C6:
if (X == _final) goto L_01C7;
X -= 1;
// ?Non-local
// 1758 PUT(BUFFER(X))
PUT(BUFFER[X - 1]);
// 1759 %REPEAT
goto L_01C6;
}
L_01C7:;
// 1760 %FINISH
L_01C5:;
// 1761 %FINISH
L_01C4:;
// 1762 LIT=CODE
LIT = CODE;
// 1763 -> CONT
goto U_100E;
// 1764 C(105):PUT('.'); -> CONT; ! '.'
case_C_105:;
PUT(46);
goto U_100E;
// 1765 C(106):PUT('V'+32); -> CONT
case_C_106:;
PUT(86 + 32);
goto U_100E;
// 1766 C(126):PUT('F'+32); ! COM
case_C_126:;
PUT(70 + 32);
// 1767 STARTT=2+8; ! PSEUDO %CYCLE
STARTT = 2 + 8;
// 1768 P LAB=LABEL; LOOP LAB=P LAB+2
PLAB = LABEL;
LOOPLAB = PLAB + 2;
// 1769 DEF LAB(LOOP LAB)
DEFLAB(LOOPLAB);
// 1770 -> CONT
goto U_100E;
// 1771 C(113): ! BSEP
case_C_113:;
// 1772 %IF SPREFIX=0 %THEN DIM=DIM+1 %ELSE SET SIZE
if (SPREFIX != 0) goto L_01C8;
DIM = DIM + 1;
goto L_01C9;
L_01C8:;
SETSIZE();
L_01C9:;
// 1773 -> CONT
goto U_100E;
// 1774 C(116): AOP('L',X)
case_C_116:;
AOP(76, X);
// 1775 ACCESS = 1
ACCESS = 1;
// 1776 INHIBIT = INHIBIT!1; -> CONT
INHIBIT = INHIBIT | 1;
goto U_100E;
// 1777 C(80): INHIBIT = INHIBIT!1; ! SWITCH
case_C_80:;
INHIBIT = INHIBIT | 1;
// 1778 AOP('W',X); ->ACONT
AOP(87, X);
goto U_100F;
// 1779 C(114):INHIBIT = INHIBIT!1; ! SLAB
case_C_114:;
INHIBIT = INHIBIT | 1;
// 1780 ACCESS = 1
ACCESS = 1;
// 1781 AOP('_',X)
AOP(95, X);
// 1782 L=DICT(X-2); ! POINTER TO TABLE
L = DICT[X - 2];
// 1783 K=DICT(L); ! LOWER BOUND
K = DICT[L];
// 1784 FAULT(16) %AND ->CONT %UNLESS K <= LIT1 <= DICT(L-1)
{
// Double-sided test on LIT1 (Part I)
int tmp;
if (K > (tmp = LIT1)) goto L_01CA;
// Double-sided test on LIT1 (Part II)
if (tmp <= DICT[L - 1]) goto L_01CB;
}
L_01CA:;
FAULT(16);
goto U_100E;
L_01CB:;
// 1785 K=LIT1-K
K = LIT1 - K;
// 1786 L=L-K>>4; ! ENTRY POINT
L = L - ((unsigned int)K >> 4);
// 1787 K=1<<(K&15); ! REQUISITE BIT
K = 1 << (K & 15);
// 1788 M == DICT(L-2)
M = (int *)/*?*/ &DICT[L - 2];
// 1789 FAULT(7) %IF M&K#0
if (*M & K == 0) goto L_01CC;
FAULT(7);
L_01CC:;
// 1790 M = M!K
*M = *M | K;
// 1791 -> CONT
goto U_100E;
// 1792 C(81): INHIBIT = INHIBIT!1; ! 'BL'
case_C_81:;
INHIBIT = INHIBIT | 1;
// 1793 C(115): AOP('J',X); -> ACONT; ! 'FL'
case_C_115:;
AOP(74, X);
goto U_100F;
// 1794 C(128):LIT1 = BPSIZE %IF LIT1 = 0
case_C_128:;
if (LIT1 != 0) goto L_01CD;
LIT1 = BPSIZE;
L_01CD:;
// 1795 BPSIZE=BP SIZE-LIT1+1; ! ORB
BPSIZE = BPSIZE - LIT1 + 1;
// 1796 -> OF %IF LIT1 <= 0
if (LIT1 > 0) goto L_01CE;
goto U_1015;
L_01CE:;
// 1797 -> CONT
goto U_100E;
// 1798 C(129):PUT('P'+32); ->CONT; ! PSEP
case_C_129:;
PUT(80 + 32);
goto U_100E;
// 1799 C(130):PUT('P'+32); PUT('E')
case_C_130:;
PUT(80 + 32);
PUT(69);
// 1800 PRED PENDING = PRED PENDING>>1
PREDPENDING = (unsigned int)PREDPENDING >> 1;
// 1801 PRED PENDING = PRED PENDING-1 %AND ->PAC %IF PRED PENDING&1 # 0
if (PREDPENDING & 1 == 0) goto L_01CF;
PREDPENDING = PREDPENDING - 1;
goto U_1012;
L_01CF:;
// 1802 ->CONT
goto U_100E;
// 1803 C(107): PUT('I'+32); ->CONT; ! ASSEP
case_C_107:;
PUT(73 + 32);
goto U_100E;
// 1804 C(118): %IF DCLASS#54 %START; ! OSEP
case_C_118:;
if (DCLASS == 54) goto L_01D0;
// 1805 BP SIZE=BP SIZE-1
BPSIZE = BPSIZE - 1;
// 1806 %IF BP SIZE <= 0 %START
if (BPSIZE > 0) goto L_01D1;
// 1807 OF: ATOM POS=0; FAULT(16)
U_1015:;
ATOMPOS = 0;
FAULT(16);
// 1808 OUT=0
OUT = 0;
// 1809 -> RETURN
goto U_1010;
// 1810 %FINISH
L_01D1:;
// 1811 %FINISH
L_01D0:;
// 1812 OSEP: PUT('A')
U_1016:;
PUT(65);
// 1813 EXTRA(OWN DEF) %IF OWN DEF > 1
if (OWNDEF <= 1) goto L_01D2;
EXTRA(OWNDEF);
L_01D2:;
// 1814 OWN DEF=0; LIT1 = 0
OWNDEF = 0;
LIT1 = 0;
// 1815 -> CONT
goto U_100E;
// 1816 C(117): BP SIZE=BP SIZE-1 %IF OUT#0; ! OWNT
case_C_117:;
if (OUT == 0) goto L_01D3;
BPSIZE = BPSIZE - 1;
L_01D3:;
// 1817 OUT=0
OUT = 0;
// 1818 -> OSEP %IF BP SIZE=0
if (BPSIZE != 0) goto L_01D4;
goto U_1016;
L_01D4:;
// 1819 BP SIZE=0
BPSIZE = 0;
// 1820 -> OF %IF BUFFER(BPT)='A' %OR LIT = CODE
if (BUFFER[BPT - 1] == 65) goto L_01D5;
if (LIT != CODE) goto L_01D6;
L_01D5:;
goto U_1015;
L_01D6:;
// 1821 PUT('I'); ! INDICATE CLEAR
PUT(73);
// 1822 -> CONT
goto U_100E;
// 1823 C(110): ! LRB
case_C_110:;
// 1824 C(111): ! RRB
case_C_111:;
// 1825 -> CONT
goto U_100E;
// 1826 C(127):PUT('A'+32); -> CONT
case_C_127:;
PUT(65 + 32);
goto U_100E;
// 1827 D(54): OWN DEF=OWN DEF+1; ! OWNVTYPE
case_D_54:;
OWNDEF = OWNDEF + 1;
// 1828 DICT(X-2) = LIT1 %IF CONST INT # 0
if (CONSTINT == 0) goto L_01D7;
DICT[X - 2] = LIT1;
L_01D7:;
// 1829 -> DDD
goto U_1017;
// 1830 D(57): ! SWITCH
case_D_57:;
// 1831 %IF LIT=CODE %THEN %START; ! SWITCH DEF
if (LIT != CODE) goto L_01D8;
// 1832 PUT('W'+32)
PUT(87 + 32);
// 1833 DICT(X-2)=T LIMIT-1
DICT[X - 2] = TLIMIT - 1;
// 1834 DICT(TLIMIT-1)=LIT2; ! LOWER BOUND
DICT[TLIMIT - 1] = LIT2;
// 1835 DICT(TLIMIT-2)=LIT1; ! UPPER BOUND
DICT[TLIMIT - 2] = LIT1;
// 1836 %IF LIT1 < LIT2 %START; ! BOUNDS INSIDE-OUT
if (LIT1 >= LIT2) goto L_01D9;
// 1837 ATOM POS=0; FAULT(4)
ATOMPOS = 0;
FAULT(4);
// 1838 LIT1=LIT2
LIT1 = LIT2;
// 1839 %FINISH
L_01D9:;
// 1840 K=LIT1-LIT2+1
K = LIT1 - LIT2 + 1;
// 1841 K=(K+15)>>4; ! ENTRIES NEEDED
K = (unsigned int)K + 15 >> 4;
// 1842 TLIMIT=TLIMIT-K-3
TLIMIT = TLIMIT - K - 3;
// 1843 FAULT(23) %IF T LIMIT <= TMAX
if (TLIMIT > TMAX) goto L_01DA;
FAULT(23);
L_01DA:;
// 1844 DICT(L)=0 %FOR L = TLIMIT,1,TLIMIT+K
// %for L = TLIMIT, 1, TLIMIT + K %cycle
{
int _initial = TLIMIT, _final = TLIMIT + K;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = TLIMIT, 1, TLIMIT + K");
L = _initial - (1);
L_01DB:
if (L == _final) goto L_01DC;
L += 1;
DICT[L] = 0;
goto L_01DB;
}
L_01DC:;
// 1845 %FINISH
L_01D8:;
// 1846 D(50): ! RTYPE
case_D_50:;
// 1847 OP('F',0) %IF DCLASS=50 %AND DEC TYPE#84 %AND SPEC >= 0 %C
if (DCLASS != 50) goto L_01DE;
if (DECTYPE == 84) goto L_01DE;
if (SPEC < 0) goto L_01DE;
if (LEVEL == 0) goto L_01DE;
OP(70, 0);
L_01DE:;
// 1848+ %AND LEVEL # 0
// 1849 ! JUMP ROUND ROUTINE
// 1850 D(56): ! TYPE
case_D_56:;
// 1851 D(53): ! VTYPE
case_D_53:;
// 1852 DDD: DEF(X)
U_1017:;
DEF(X);
// 1853 -> CONT
goto U_100E;
// 1854 D(51): ! ARRAY DEC
case_D_51:;
// 1855 %IF DIM#0 %START; ! SET UP DOPE VECTOR
if (DIM == 0) goto L_01DF;
// 1856 OP('D'+32, DIM); DIM = 0
OP(68 + 32, DIM);
DIM = 0;
// 1857 %FINISH
L_01DF:;
// 1858 DEF(X); PUT('H'+32)
DEF(X);
PUT(72 + 32);
// 1859 PUT('C'+32) %IF DICT(X-1)&15#13; ! NO SPACE FOR FORMATS
if (DICT[X - 1] & 15 == 13) goto L_01E0;
PUT(67 + 32);
L_01E0:;
// 1860 -> CONT
goto U_100E;
// 1861 D(52): DEF(X); OUT=TYPE; ! OWNARRAY
case_D_52:;
DEF(X);
OUT = TYPE;
// 1862 BPSIZE = 1 %IF TYPE = 15; ! EXTRINSICS
if (TYPE != 15) goto L_01E1;
BPSIZE = 1;
L_01E1:;
// 1863 ->CONT
goto U_100E;
// 1864 C(49): ! BEGEND
case_C_49:;
// 1865 %IF X=15 %THEN PUT('H') %AND XX=NULL STRING %ELSE C END
if (X != 15) goto L_01E2;
PUT(72);
XX = 401;
goto L_01E3;
L_01E2:;
CEND();
L_01E3:;
// 1866 RETURN:
U_1010:;
// 1867 !
// 1868 ! DEAL WITH LABELS
// 1869 !
// 1870 OP('B',LOOP LAB) %IF LOOP LAB#0
if (LOOPLAB == 0) goto L_01E4;
OP(66, LOOPLAB);
L_01E4:;
// 1871 DEF LAB(EILAB) %IF EILAB # 0 %AND EILAB # PLAB
if (EILAB == 0) goto L_01E5;
if (EILAB == PLAB) goto L_01E5;
DEFLAB(EILAB);
L_01E5:;
// 1872 DEF LAB(P LAB) %IF P LAB#0
if (PLAB == 0) goto L_01E6;
DEFLAB(PLAB);
L_01E6:;
// 1873 %END; ! OF COMPILE SS
return;
case_C_dispatch:
if (C_index < 1 || C_index > 130)
_imp_signalf(6, 3, C_index, "->C(%d) out of bounds at %s line %d", C_index, C_file, C_line);
goto *C[C_index - 1];
case_C_missing:
_imp_signalf(8, 2, C_index, "switch jump to undefined label C(%d): at %s line %d", C_index, C_file, C_line);
case_D_dispatch:
if (D_index < 50 || D_index > 57)
_imp_signalf(6, 3, D_index, "->D(%d) out of bounds at %s line %d", D_index, D_file, D_line);
goto *D[D_index - 50];
case_D_missing:
_imp_signalf(8, 2, D_index, "switch jump to undefined label D(%d): at %s line %d", D_index, D_file, D_line);
} /* end of COMPILESS */
// 1874 %IF BLOCK TYPE=0 %START; ! RECORD FORMAT
if (BLOCKTYPE != 0) goto L_01E7;
// 1875 ANALYSE SS(-1)
ANALYSESS(-1);
// 1876 XX=X-2
XX = X - 2;
// 1877 OP('G', 2)
OP(71, 2);
// 1878 COMPILE SS %IF SS#0
if (SS == 0) goto L_01E8;
COMPILESS();
L_01E8:;
// 1879 OP('G',2); ! FORMAT END
OP(71, 2);
// 1880 -> L9
goto U_1018;
// 1881 %FINISH
L_01E7:;
// 1882 %IF BLOCKTYPE&15#15 %START; ! NOT BEGIN
if (BLOCKTYPE & 15 == 15) goto L_01E9;
// 1883 ANALYSE SS(1); ! FORMAL PARAMETERS
ANALYSESS(1);
// 1884 %IF SPEC < 0 %THEN K = 0 %ELSE K = 1
if (SPEC >= 0) goto L_01EA;
K = 0;
goto L_01EB;
L_01EA:;
K = 1;
L_01EB:;
// 1885 OP('G', K)
OP(71, K);
// 1886 COMPILE SS %IF SS # 0
if (SS == 0) goto L_01EC;
COMPILESS();
L_01EC:;
// 1887 OP('G', K)
OP(71, K);
// 1888 -> L9 %IF K = 0
if (K != 0) goto L_01ED;
goto U_1018;
L_01ED:;
// 1889 %FINISH
L_01E9:;
// 1890 ACCESS = 1
ACCESS = 1;
// 1891 %CYCLE
L_01EE:;
// 1892 ANALYSE SS(0)
ANALYSESS(0);
// 1893 XX=X-2
XX = X - 2;
// 1894 COMPILE SS %IF SS#0
if (SS == 0) goto L_01EF;
COMPILESS();
L_01EF:;
// 1895 COMPILE BLOCK(0,0,DICT(XX)) %IF DEC TYPE=84
if (DECTYPE != 84) goto L_01F0;
COMPILEBLOCK(0, 0, /*?*/ &DICT[XX]);
L_01F0:;
// 1896 %EXIT %IF DECTYPE=85 %OR DEC TYPE=EOP %C
if (DECTYPE == 85) goto L_01DD;
if (DECTYPE == 87) goto L_01DD;
if (DECTYPE != 86) goto L_01F1;
L_01DD:;
goto L_01F2;
L_01F1:;
// 1897+ %OR DEC TYPE=EOF
// 1898 %IF 7 <= DECTYPE&15 <= 10 %OR DECTYPE=15 %START
{
// Double-sided test on DECTYPE & 15 (Part I)
int tmp;
if (7 > (tmp = DECTYPE & 15)) goto L_01F3;
// Double-sided test on DECTYPE & 15 (Part II)
if (tmp <= 10) goto L_01F4;
}
L_01F3:;
if (DECTYPE != 15) goto L_01F5;
L_01F4:;
// 1899 XX=XX-1 %IF DECTYPE&X'70'=X'50'; ! RECORDMAPS
if (DECTYPE & 112 != 80) goto L_01F6;
XX = XX - 1;
L_01F6:;
// 1900 %IF LEVEL = 0 %AND DECTYPE = 15 %START
if (LEVEL != 0) goto L_01F7;
if (DECTYPE != 15) goto L_01F7;
// 1901 %IF FILE = 0 %THEN FILE = 2 %ELSE FAULT(5)
if (FILE != 0) goto L_01F8;
FILE = 2;
goto L_01F9;
L_01F8:;
FAULT(5);
L_01F9:;
// 1902 %FINISH
L_01F7:;
// 1903 %IF SPEC > 0 %AND SPREFIX > 3 %AND SPREFIX # 7 %START
if (SPEC <= 0) goto L_01FA;
if (SPREFIX <= 3) goto L_01FA;
if (SPREFIX == 7) goto L_01FA;
// 1904 %IF LEVEL # 0 %THEN FAULT(15) %ELSE FILE = 1
if (LEVEL == 0) goto L_01FB;
FAULT(15);
goto L_01FC;
L_01FB:;
FILE = 1;
L_01FC:;
// 1905 %FINISH
L_01FA:;
// 1906 COMPILE BLOCK(LEVEL+1,DECTYPE,DICT(XX))
COMPILEBLOCK(LEVEL + 1, DECTYPE, /*?*/ &DICT[XX]);
// 1907 POS=0 %AND %EXIT %C
if (DECTYPE == 87) goto L_0156;
if (DECTYPE != 86) goto L_01FD;
L_0156:;
POS = 0;
goto L_01F2;
L_01FD:;
// 1908+ %IF DEC TYPE=EOP %OR DEC TYPE=EOF;! PREMATURE END
// 1909 %FINISH
L_01F5:;
// 1910 %REPEAT
goto L_01EE;
L_01F2:;
// 1911 ! POINT TO JUMP ROUND ROUTINE
// 1912 DEF LAB(0) %UNLESS BLOCK TYPE=15 %OR LEVEL = 0
if (BLOCKTYPE == 15) goto L_01FE;
if (LEVEL == 0) goto L_01FE;
DEFLAB(0);
L_01FE:;
// 1913 L9: SPEC=1; TMAX=T BASE; T BASE=OLD T BASE
U_1018:;
SPEC = 1;
TMAX = TBASE;
TBASE = OLDTBASE;
// 1914 LABEL = OLD LABEL
LABEL = OLDLABEL;
// 1915 T LIMIT=OLD T LIMIT %IF BLOCK TYPE#0
if (BLOCKTYPE == 0) goto L_01FF;
TLIMIT = OLDTLIMIT;
L_01FF:;
// 1916 INHIBIT = INHIBIT>>1
INHIBIT = (unsigned int)INHIBIT >> 1;
// 1917 %END; ! COMPILE BLOCK
return;
} /* end of COMPILEBLOCK */
// 1918
// 1919 %ROUTINE SUMMARISE(%INTEGER STREAM)
void SUMMARISE(int STREAM) {
// 1920 SELECT OUTPUT(STREAM)
_imp_SELECTOUTPUT(STREAM);
// 1921 %IF FAULTY = 0 %START
if (FAULTY != 0) goto L_0200;
// 1922 WRITE(STATS,5); PRINT STRING(" STATEMENTS COMPILED
_imp_WRITE(STATS, 5);
_imp_PRINTSTRING(_imp_str_literal(" STATEMENTS COMPILED\n"));
// 1923+ ")
// 1924 %ELSE
goto L_0201;
L_0200:;
// 1925 PRINT STRING("PROGRAM CONTAINS"); WRITE(FAULTY,1)
_imp_PRINTSTRING(_imp_str_literal("PROGRAM CONTAINS"));
_imp_WRITE(FAULTY, 1);
// 1926 PRINT STRING(" FAULT"); PRINT SYMBOL('S') %IF FAULTY # 1
_imp_PRINTSTRING(_imp_str_literal(" FAULT"));
if (FAULTY == 1) goto L_0202;
_imp_PRINTSYMBOL(83);
L_0202:;
// 1927 NEWLINE
_imp_NEWLINE();
// 1928 %FINISH
L_0201:;
// 1929 CLOSE OUTPUT; ! TO ENSURE BUFFER FLUSHING
_imp_CLOSEOUTPUT();
// 1930 %END
return;
} /* end of SUMMARISE */
// 1931
// 1932 open input(PRIM, "interdata/prims.imp")
_imp_OPENINPUT(2, _imp_str_literal("interdata/prims.imp"));
// 1933 open input(PROG, "interdata/test.imp")
_imp_OPENINPUT(1, _imp_str_literal("interdata/test.imp"));
// 1934 open output(REPORT, "interdata/test.rpt")
_imp_OPENOUTPUT(3, _imp_str_literal("interdata/test.rpt"));
// 1935 open output(OBJ, "interdata/test.icd")
_imp_OPENOUTPUT(2, _imp_str_literal("interdata/test.icd"));
// 1936 open output(LISTING, "interdata/test.lis")
_imp_OPENOUTPUT(1, _imp_str_literal("interdata/test.lis"));
// 1937
// 1938 !!!! COMREG(0) = -1; !IN CASE IT BOMBS OUT
// 1939 SELECTOUTPUT(LISTING); SELECT INPUT(PRIM)
_imp_SELECTOUTPUT(1);
_imp_SELECTINPUT(2);
// 1940
// 1941 NEWLINE; SPACES(5)
_imp_NEWLINE();
_imp_SPACES(5);
// 1942 PRINT STRING("EDINBURGH C.S. IMP COMPILER VERSION ")
_imp_PRINTSTRING(_imp_str_literal("EDINBURGH C.S. IMP COMPILER VERSION "));
// 1943 PRINT STRING(VERSION)
_imp_PRINTSTRING(
*({
__typeof__(_imp_string5) tmp = VERSION /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1944 NEWLINES(2)
_imp_NEWLINES(2);
// 1945
// 1946 control = 0; ! **** optimise only: for supervisor maintenance
CONTROL = 0;
// 1947 {CONTROL = COMREG(14)}; CGEN(CONTROL); PUT('Z'+32)
CGEN(CONTROL);
PUT(90 + 32);
// 1948 LIST = 2
LIST = 2;
// 1949 CODE=0
CODE = 0;
// 1950 LREALS=0; ! REALSNORMAL
LREALS = 0;
// 1951 FAULTY=0
FAULTY = 0;
// 1952 OUT = 0
OUT = 0;
// 1953 SYMTYPE=0; PAPP == PHRASE(APPEP); APP = PAPP
SYMTYPE = 0;
PAPP = (short int *)/*?*/ &PHRASE[21];
APP = *PAPP;
// 1954 STATS=0; LINE NUM=0
STATS = 0;
LINENUM = 0;
// 1955 BUFFER(NULL STRING)=0
BUFFER[400] = 0;
// 1956 T LIMIT=DICT END-1; G LIMIT=GBASE; LABEL=4
TLIMIT = 2750 - 1;
GLIMIT = 426;
LABEL = 4;
// 1957 T MAX=GLOBAL; T BASE=GLOBAL
TMAX = 0;
TBASE = 0;
// 1958 X=0; ATOM1=0; LAST=0; INHIBIT = 0
X = 0;
ATOM1 = 0;
LAST = 0;
INHIBIT = 0;
// 1959 COMPILE BLOCK(0,15,DICT(TLIMIT)); ! COMPILE A BEGIN TO START
COMPILEBLOCK(0, 15, /*?*/ &DICT[TLIMIT]);
// 1960 PUT(';')
PUT(59);
// 1961 PUT(4); ! TO TERMINATE
PUT(4);
// 1962 SEND; ! CLEAR THE BUFFER
SEND();
// 1963 SUMMARISE(LISTING)
SUMMARISE(1);
// 1964 !!!! COMREG(0) = -FAULTY
// 1965 !!!! COMREG(0) = STATS %IF COMREG(0) = 0
// 1966 %signal 15,1 %if faulty # 0
if (FAULTY == 0) goto L_0203;
_imp_signal(15, 1, 0, "");
L_0203:;
// 1967 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}