#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 ! compiles OK with imp2021 but lots of work to be done. Look for ARRAY() maps.
// 2 ! and commented machine code sections. (Search for !! in both cases)
// 3 ! Next, fix file parameters and I/O
// 4 ! Then worry about shorts and byte sex assumptions.
// 5
// 6 ! May need to convert to C and compile in big-endian MIPS environment
// 7
// 8 %CONSTSHORTINTEGERARRAY MAIN(1 : 217) = %C
const short int MAIN[217] = {
1, 5, 14, 20, 26, 38, 43, 48, 54, 61, 68, 74, 79, 82, 84, 89, 96, 102, 108, 115, 122, 126,
0, 129, 133, 137, 142, 145, 152, 156, 161, 164, 168, 0, 171, 0, 178, 184, 185, 189, 190, 193, 196, 199,
0, 202, 205, 206, 208, 0, 211, 213, 215, 216, 219, 222, 225, 0, 228, 231, 236, 241, 244, 249, 0, 253,
259, 260, 264, 266, 267, 270, 271, 274, 277, 279, 280, 283, 286, 289, 292, 295, 298, 302, 305, 308, 311, 314,
317, 320, 324, 328, 332, 336, 340, 344, 348, 352, 355, 358, 0, 361, 363, 365, 373, 0, 381, 0, 385, 392,
393, 396, 397, 400, 403, 405, 406, 410, 0, 413, 418, 425, 432, 0, 435, 437, 0, 440, 445, 446, 450, 453,
456, 0, 459, 462, 463, 0, 469, 472, 473, 475, 0, 477, 489, 499, 506, 0, 509, 511, 512, 517, 0, 520,
0, 530, 534, 535, 538, 539, 0, 543, 546, 547, 0, 558, 565, 566, 571, 572, 576, 579, 0, 585, 587, 588,
591, 0, 594, 597, 0, 600, 602, 603, 608, 609, 614, 615, 618, 0, 620, 622, 623, 627, 628, 631, 634, 637,
0, 640, 646, 0, 651, 656, 657, 660, 661, 665, 0, 667, 0, 670, 674, 675, 678, 681, 683};
// 9+ 1, 5, 14, 20, 26, 38, 43, 48, 54, 61, 68, 74,
// 10+ 79, 82, 84, 89, 96, 102, 108, 115, 122, 126, 0, 129,
// 11+ 133, 137, 142, 145, 152, 156, 161, 164, 168, 0, 171, 0,
// 12+ 178, 184, 185, 189, 190, 193, 196, 199, 0, 202, 205, 206,
// 13+ 208, 0, 211, 213, 215, 216, 219, 222, 225, 0, 228, 231,
// 14+ 236, 241, 244, 249, 0, 253, 259, 260, 264, 266, 267, 270,
// 15+ 271, 274, 277, 279, 280, 283, 286, 289, 292, 295, 298, 302,
// 16+ 305, 308, 311, 314, 317, 320, 324, 328, 332, 336, 340, 344,
// 17+ 348, 352, 355, 358, 0, 361, 363, 365, 373, 0, 381, 0,
// 18+ 385, 392, 393, 396, 397, 400, 403, 405, 406, 410, 0, 413,
// 19+ 418, 425, 432, 0, 435, 437, 0, 440, 445, 446, 450, 453,
// 20+ 456, 0, 459, 462, 463, 0, 469, 472, 473, 475, 0, 477,
// 21+ 489, 499, 506, 0, 509, 511, 512, 517, 0, 520, 0, 530,
// 22+ 534, 535, 538, 539, 0, 543, 546, 547, 0, 558, 565, 566,
// 23+ 571, 572, 576, 579, 0, 585, 587, 588, 591, 0, 594, 597,
// 24+ 0, 600, 602, 603, 608, 609, 614, 615, 618, 0, 620, 622,
// 25+ 623, 627, 628, 631, 634, 637, 0, 640, 646, 0, 651, 656,
// 26+ 657, 660, 661, 665, 0, 667, 0, 670, 674, 675, 678, 681,
// 27+ 683
// 28 %CONSTSHORTINTEGERARRAY SUB(2 : 684) = %C
const short int SUB[683] = {
4119, 4288, -8192, 0, 4149, 4168, 4197, 4166, 4286, 4119, 4230, -8192, 0, 1, 8200,
24576, 4230, -8192, 0, 8, 8221, 24576, 16384, -8192, 0, 15, 8204, 20480, 16384, 4202,
21, 8244, 4168, 4197, 4166, -8192, 0, 4154, 4246, -20480, -8192, 0, 4290, 4154, 4295,
-20480, 0, 23, 8223, 4255, -8192, -20480, 0, 4208, 4271, 4212, -4096, 4261, -8192, 0,
30, 8197, -4096, 4261, -8192, -20480, 0, 35, 8196, 20480, -8192, -16384, 0, 41, 8198,
4215, -8192, 0, 4130, 4096, 0, 4225, 0, 45, 8199, -8192, -20480, 0, 4309, 50,
8201, 4239, -8192, -20480, 0, 57, -20480, 8202, 12288, -8192, 0, 65, 8203, 4232, -8192,
-20480, 0, 71, 77, 8193, 8205, -8192, -20480, 0, 85, 93, 8206, 8207, -8192, -20480,
0, 101, 8257, -32768, 0, -12288, -8192, 0, 4202, 4134, 4141, 0, 103, 8246, 4143,
0, 106, 8208, 12288, 4141, 0, 116, 8209, 0, 123, 8210, 4136, 4168, 4197, 4166,
0, 130, 8211, 20480, 0, 15, 8204, 20480, 16384, 0, 136, 8212, 0, 141, 8213,
4146, 0, 149, 8214, 0, 8292, 4220, 154, 8245, 8192, 4132, 0, 8292, 4220, 154,
8245, 8192, 4132, 0, 4136, 4168, 4197, 4166, 0, 156, 8247, 0, 21, 8244, 0,
159, 8248, 0, 103, 8246, 0, 162, 8215, 4119, 0, 12288, 0, -4096, 4204, 0,
12288, 0, 136, 8212, 0, 166, 8216, 0, 169, 8218, 0, 175, 8217, 0, 182,
8219, 0, 188, 8220, 0, 196, 188, 8194, 8220, 0, 71, 188, 8193, 8220, 0,
201, 8222, 0, 206, 201, 8195, 8222, 0, 211, 8224, 4161, 0, 218, 8249, 12288,
220, 8250, 8271, 0, 222, 8225, 8226, 0, 232, 8226, 0, 4172, 4197, 4166, 0,
237, 8251, 0, 239, 8252, 0, 241, 8253, 0, 237, 8251, 0, 103, 8246, 0,
239, 8252, 0, 243, 8254, 0, 245, 8255, 0, 248, 8256, 0, 250, 8257, 8257,
0, 101, 8257, 0, 253, 8258, 0, 256, 8259, 0, 258, 8260, 0, 260, 8261,
0, 263, 8262, 0, 21, 8244, 4168, 0, 266, 8263, 4168, 0, 269, 8264, 4168,
0, 271, 8267, 4168, 0, 273, 8265, 4168, 0, 276, 8266, 4168, 0, 278, 8268,
4168, 0, 281, 8272, 4168, 0, 162, 8215, 0, 283, 8227, 0, 154, 8245, 0,
12288, 0, 4202, 0, 218, 8249, 4168, 4197, 4166, 220, 8250, 0, 248, 8256, 4168,
4197, 4166, 248, 8256, 0, -4096, 4204, 4206, 0, 218, 8249, 4168, 4197, 4166, 220,
8250, 0, 286, 8270, 4202, 0, 288, 8231, 0, 297, 8232, 0, 304, 8233, 0,
30, 8197, -20480, 0, 20480, -16384, 0, 312, 8234, 8199, -20480, 0, 319, 8234, 8207,
28672, 24576, 20480, 0, 329, 8234, 8235, 28672, 24576, 20480, 0, 24576, 28672, 0, 12288,
0, -4096, 4223, 0, 218, 8249, 12288, 220, 8250, 0, 248, -8191, -28672, 0, 336,
-24576, 0, 248, -28672, 0, 339, -28672, 0, 347, 8237, 4119, 0, 12288, 103, 8246,
4236, 4234, 0, 281, 8269, 4232, 0, 12288, 0, -4096, 0, 352, 8238, -4096, 218,
8249, 4283, 4246, 4279, 4281, 220, 8250, 0, 30, 8197, -4096, 4253, 218, 8249, -4096,
220, 8250, 0, 4246, 218, 8249, -4096, 220, 8250, 0, 232, 8226, 0, 352, 8238,
0, 359, 8225, 4244, 4249, 0, 4163, 4305, 0, 4305, 218, 8249, 4168, 4197, 4166,
220, 8250, 4251, 0, 281, 8269, 4249, 4251, 0, 286, 8270, -4096, 0, 4305, 4259,
4257, 0, 281, 8269, 4255, 0, 218, 8249, 4168, 12288, 154, 8245, 4168, 12288, 220,
8250, 0, 218, 8249, 4265, 4305, 4263, 220, 8250, 0, 281, 8269, 4265, 4305, 4263,
0, 4271, 232, 8226, 0, 4154, 4163, 0, 50, 8201, 4269, 232, 8226, 0, 359,
8225, 0, 77, 8205, 0, 4154, 4274, 0, 365, 8239, 0, 368, 8240, 0, 281,
8269, 0, 218, 8249, -4096, 220, 8250, 0, 4277, 4283, 4246, 4279, 4281, 0, 50,
8201, 0, 4154, 0, 372, 8241, 0, 4149, 4168, 4197, 4166, 0, 377, 8228, 0,
381, 8229, 0, 387, 8230, 0, 288, 8231, 0, 359, 8225, -4096, 4259, 4302, 0,
4305, 4300, 4298, -8192, 0, 281, 8269, 4305, 4300, 4298, 0, 21, 8244, 12288, 0,
21, 8244, -32768, 0, -8192, 0, -4096, 4307, 0, 281, 8269, -4096, 4307, 0, 377,
8228, 0, 288, 8231, 0, 387, 8230, 0};
// 29+ 4119, 4288, -8192, 0, 4149, 4168, 4197, 4166, 4286,
// 30+ 4119, 4230, -8192, 0, 1, 8200, 24576, 4230, -8192,
// 31+ 0, 8, 8221, 24576, 16384, -8192, 0, 15, 8204,
// 32+ 20480, 16384, 4202, 21, 8244, 4168, 4197, 4166, -8192,
// 33+ 0, 4154, 4246,-20480, -8192, 0, 4290, 4154, 4295,
// 34+ -20480, 0, 23, 8223, 4255, -8192,-20480, 0, 4208,
// 35+ 4271, 4212, -4096, 4261, -8192, 0, 30, 8197, -4096,
// 36+ 4261, -8192,-20480, 0, 35, 8196, 20480, -8192,-16384,
// 37+ 0, 41, 8198, 4215, -8192, 0, 4130, 4096, 0,
// 38+ 4225, 0, 45, 8199, -8192,-20480, 0, 4309, 50,
// 39+ 8201, 4239, -8192,-20480, 0, 57,-20480, 8202, 12288,
// 40+ -8192, 0, 65, 8203, 4232, -8192,-20480, 0, 71,
// 41+ 77, 8193, 8205, -8192,-20480, 0, 85, 93, 8206,
// 42+ 8207, -8192,-20480, 0, 101, 8257,-32768, 0,-12288,
// 43+ -8192, 0, 4202, 4134, 4141, 0, 103, 8246, 4143,
// 44+ 0, 106, 8208, 12288, 4141, 0, 116, 8209, 0,
// 45+ 123, 8210, 4136, 4168, 4197, 4166, 0, 130, 8211,
// 46+ 20480, 0, 15, 8204, 20480, 16384, 0, 136, 8212,
// 47+ 0, 141, 8213, 4146, 0, 149, 8214, 0, 8292,
// 48+ 4220, 154, 8245, 8192, 4132, 0, 8292, 4220, 154,
// 49+ 8245, 8192, 4132, 0, 4136, 4168, 4197, 4166, 0,
// 50+ 156, 8247, 0, 21, 8244, 0, 159, 8248, 0,
// 51+ 103, 8246, 0, 162, 8215, 4119, 0, 12288, 0,
// 52+ -4096, 4204, 0, 12288, 0, 136, 8212, 0, 166,
// 53+ 8216, 0, 169, 8218, 0, 175, 8217, 0, 182,
// 54+ 8219, 0, 188, 8220, 0, 196, 188, 8194, 8220,
// 55+ 0, 71, 188, 8193, 8220, 0, 201, 8222, 0,
// 56+ 206, 201, 8195, 8222, 0, 211, 8224, 4161, 0,
// 57+ 218, 8249, 12288, 220, 8250, 8271, 0, 222, 8225,
// 58+ 8226, 0, 232, 8226, 0, 4172, 4197, 4166, 0,
// 59+ 237, 8251, 0, 239, 8252, 0, 241, 8253, 0,
// 60+ 237, 8251, 0, 103, 8246, 0, 239, 8252, 0,
// 61+ 243, 8254, 0, 245, 8255, 0, 248, 8256, 0,
// 62+ 250, 8257, 8257, 0, 101, 8257, 0, 253, 8258,
// 63+ 0, 256, 8259, 0, 258, 8260, 0, 260, 8261,
// 64+ 0, 263, 8262, 0, 21, 8244, 4168, 0, 266,
// 65+ 8263, 4168, 0, 269, 8264, 4168, 0, 271, 8267,
// 66+ 4168, 0, 273, 8265, 4168, 0, 276, 8266, 4168,
// 67+ 0, 278, 8268, 4168, 0, 281, 8272, 4168, 0,
// 68+ 162, 8215, 0, 283, 8227, 0, 154, 8245, 0,
// 69+ 12288, 0, 4202, 0, 218, 8249, 4168, 4197, 4166,
// 70+ 220, 8250, 0, 248, 8256, 4168, 4197, 4166, 248,
// 71+ 8256, 0, -4096, 4204, 4206, 0, 218, 8249, 4168,
// 72+ 4197, 4166, 220, 8250, 0, 286, 8270, 4202, 0,
// 73+ 288, 8231, 0, 297, 8232, 0, 304, 8233, 0,
// 74+ 30, 8197,-20480, 0, 20480,-16384, 0, 312, 8234,
// 75+ 8199,-20480, 0, 319, 8234, 8207, 28672, 24576, 20480,
// 76+ 0, 329, 8234, 8235, 28672, 24576, 20480, 0, 24576,
// 77+ 28672, 0, 12288, 0, -4096, 4223, 0, 218, 8249,
// 78+ 12288, 220, 8250, 0, 248, -8191,-28672, 0, 336,
// 79+ -24576, 0, 248,-28672, 0, 339,-28672, 0, 347,
// 80+ 8237, 4119, 0, 12288, 103, 8246, 4236, 4234, 0,
// 81+ 281, 8269, 4232, 0, 12288, 0, -4096, 0, 352,
// 82+ 8238, -4096, 218, 8249, 4283, 4246, 4279, 4281, 220,
// 83+ 8250, 0, 30, 8197, -4096, 4253, 218, 8249, -4096,
// 84+ 220, 8250, 0, 4246, 218, 8249, -4096, 220, 8250,
// 85+ 0, 232, 8226, 0, 352, 8238, 0, 359, 8225,
// 86+ 4244, 4249, 0, 4163, 4305, 0, 4305, 218, 8249,
// 87+ 4168, 4197, 4166, 220, 8250, 4251, 0, 281, 8269,
// 88+ 4249, 4251, 0, 286, 8270, -4096, 0, 4305, 4259,
// 89+ 4257, 0, 281, 8269, 4255, 0, 218, 8249, 4168,
// 90+ 12288, 154, 8245, 4168, 12288, 220, 8250, 0, 218,
// 91+ 8249, 4265, 4305, 4263, 220, 8250, 0, 281, 8269,
// 92+ 4265, 4305, 4263, 0, 4271, 232, 8226, 0, 4154,
// 93+ 4163, 0, 50, 8201, 4269, 232, 8226, 0, 359,
// 94+ 8225, 0, 77, 8205, 0, 4154, 4274, 0, 365,
// 95+ 8239, 0, 368, 8240, 0, 281, 8269, 0, 218,
// 96+ 8249, -4096, 220, 8250, 0, 4277, 4283, 4246, 4279,
// 97+ 4281, 0, 50, 8201, 0, 4154, 0, 372, 8241,
// 98+ 0, 4149, 4168, 4197, 4166, 0, 377, 8228, 0,
// 99+ 381, 8229, 0, 387, 8230, 0, 288, 8231, 0,
// 100+ 359, 8225, -4096, 4259, 4302, 0, 4305, 4300, 4298,
// 101+ -8192, 0, 281, 8269, 4305, 4300, 4298, 0, 21,
// 102+ 8244, 12288, 0, 21, 8244,-32768, 0, -8192, 0,
// 103+ -4096, 4307, 0, 281, 8269, -4096, 4307, 0, 377,
// 104+ 8228, 0, 288, 8231, 0, 387, 8230, 0
// 105 %CONSTBYTEINTEGERARRAY LITERAL(1 : 396) = %C
const unsigned char LITERAL[396] = {
6, 102, 105, 110, 105, 115, 104, 6, 114, 101, 112, 101, 97, 116, 5, 99, 121, 99, 108, 101, 1, 61,
6, 115, 119, 105, 116, 99, 104, 4, 115, 112, 101, 99, 5, 98, 101, 103, 105, 110, 3, 101, 110, 100,
4, 108, 105, 115, 116, 6, 114, 101, 99, 111, 114, 100, 7, 99, 111, 110, 116, 114, 111, 108, 5, 102,
97, 117, 108, 116, 5, 115, 104, 111, 114, 116, 7, 114, 111, 117, 116, 105, 110, 101, 7, 116, 114, 117,
115, 116, 101, 100, 7, 112, 114, 111, 103, 114, 97, 109, 1, 42, 2, 45, 62, 9, 112, 114, 105, 110,
116, 116, 101, 120, 116, 6, 114, 101, 116, 117, 114, 110, 6, 114, 101, 115, 117, 108, 116, 5, 115, 116,
97, 114, 116, 4, 115, 116, 111, 112, 7, 109, 111, 110, 105, 116, 111, 114, 4, 101, 120, 105, 116, 1,
58, 2, 61, 61, 2, 60, 45, 3, 97, 110, 100, 2, 105, 102, 5, 119, 104, 105, 108, 101, 6, 117,
110, 108, 101, 115, 115, 5, 117, 110, 116, 105, 108, 7, 105, 110, 116, 101, 103, 101, 114, 4, 98, 121,
116, 101, 4, 114, 101, 97, 108, 4, 108, 111, 110, 103, 6, 115, 116, 114, 105, 110, 103, 1, 40, 1,
41, 9, 97, 114, 114, 97, 121, 110, 97, 109, 101, 4, 110, 97, 109, 101, 1, 43, 1, 45, 1, 92,
1, 38, 2, 33, 33, 1, 33, 2, 42, 42, 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62,
62, 2, 60, 61, 1, 60, 1, 35, 2, 62, 61, 1, 62, 2, 92, 61, 1, 44, 2, 111, 114, 1,
95, 8, 101, 120, 116, 101, 114, 110, 97, 108, 6, 115, 121, 115, 116, 101, 109, 7, 100, 121, 110, 97,
109, 105, 99, 6, 111, 102, 108, 105, 115, 116, 9, 111, 102, 112, 114, 111, 103, 114, 97, 109, 6, 111,
102, 102, 105, 108, 101, 2, 33, 42, 7, 99, 111, 109, 109, 101, 110, 116, 4, 101, 108, 115, 101, 6,
102, 111, 114, 109, 97, 116, 5, 97, 114, 114, 97, 121, 2, 102, 110, 3, 109, 97, 112, 4, 116, 104,
101, 110, 3, 111, 119, 110, 5, 99, 111, 110, 115, 116, 9, 101, 120, 116, 114, 105, 110, 115, 105, 99};
// 106+ 6, 102, 105, 110, 105, 115, 104, 6, 114, 101, 112, 101,
// 107+ 97, 116, 5, 99, 121, 99, 108, 101, 1, 61, 6, 115,
// 108+ 119, 105, 116, 99, 104, 4, 115, 112, 101, 99, 5, 98,
// 109+ 101, 103, 105, 110, 3, 101, 110, 100, 4, 108, 105, 115,
// 110+ 116, 6, 114, 101, 99, 111, 114, 100, 7, 99, 111, 110,
// 111+ 116, 114, 111, 108, 5, 102, 97, 117, 108, 116, 5, 115,
// 112+ 104, 111, 114, 116, 7, 114, 111, 117, 116, 105, 110, 101,
// 113+ 7, 116, 114, 117, 115, 116, 101, 100, 7, 112, 114, 111,
// 114+ 103, 114, 97, 109, 1, 42, 2, 45, 62, 9, 112, 114,
// 115+ 105, 110, 116, 116, 101, 120, 116, 6, 114, 101, 116, 117,
// 116+ 114, 110, 6, 114, 101, 115, 117, 108, 116, 5, 115, 116,
// 117+ 97, 114, 116, 4, 115, 116, 111, 112, 7, 109, 111, 110,
// 118+ 105, 116, 111, 114, 4, 101, 120, 105, 116, 1, 58, 2,
// 119+ 61, 61, 2, 60, 45, 3, 97, 110, 100, 2, 105, 102,
// 120+ 5, 119, 104, 105, 108, 101, 6, 117, 110, 108, 101, 115,
// 121+ 115, 5, 117, 110, 116, 105, 108, 7, 105, 110, 116, 101,
// 122+ 103, 101, 114, 4, 98, 121, 116, 101, 4, 114, 101, 97,
// 123+ 108, 4, 108, 111, 110, 103, 6, 115, 116, 114, 105, 110,
// 124+ 103, 1, 40, 1, 41, 9, 97, 114, 114, 97, 121, 110,
// 125+ 97, 109, 101, 4, 110, 97, 109, 101, 1, 43, 1, 45,
// 126+ 1, 92, 1, 38, 2, 33, 33, 1, 33, 2, 42, 42,
// 127+ 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62,
// 128+ 62, 2, 60, 61, 1, 60, 1, 35, 2, 62, 61, 1,
// 129+ 62, 2, 92, 61, 1, 44, 2, 111, 114, 1, 95, 8,
// 130+ 101, 120, 116, 101, 114, 110, 97, 108, 6, 115, 121, 115,
// 131+ 116, 101, 109, 7, 100, 121, 110, 97, 109, 105, 99, 6,
// 132+ 111, 102, 108, 105, 115, 116, 9, 111, 102, 112, 114, 111,
// 133+ 103, 114, 97, 109, 6, 111, 102, 102, 105, 108, 101, 2,
// 134+ 33, 42, 7, 99, 111, 109, 109, 101, 110, 116, 4, 101,
// 135+ 108, 115, 101, 6, 102, 111, 114, 109, 97, 116, 5, 97,
// 136+ 114, 114, 97, 121, 2, 102, 110, 3, 109, 97, 112, 4,
// 137+ 116, 104, 101, 110, 3, 111, 119, 110, 5, 99, 111, 110,
// 138+ 115, 116, 9, 101, 120, 116, 114, 105, 110, 115, 105, 99
// 139 %CONSTBYTEINTEGERARRAY SFLAGS(1 : 80) = %C
const unsigned char SFLAGS[80] = {3, 3, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 1,
4, 0, 4, 0, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 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};
// 140+ 3, 3, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1,
// 141+ 1, 1, 1, 4, 0, 4, 0, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
// 142+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 143+ 0, 0, 0, 0, 0, 0, 0, 0
// 144 {%CONST}%OWNBYTEINTEGERARRAY KEYSYMS(1 : 381) = %C
static unsigned char KEYSYMS[381] = {
5, 83, 72, 79, 82, 84, 4, 66, 89, 84, 69, 4, 76, 79, 78, 71, 5, 66, 69, 71, 73, 78, 4, 83, 80, 69, 67, 3,
69, 78, 68, 4, 76, 73, 83, 84, 6, 70, 73, 78, 73, 83, 72, 6, 82, 69, 67, 79, 82, 68, 7, 67, 79, 78, 84, 82,
79, 76, 5, 70, 65, 85, 76, 84, 5, 67, 89, 67, 76, 69, 7, 82, 79, 85, 84, 73, 78, 69, 7, 84, 82, 85, 83, 84,
69, 68, 7, 80, 82, 79, 71, 82, 65, 77, 9, 80, 82, 73, 78, 84, 84, 69, 88, 84, 6, 82, 69, 84, 85, 82, 78, 6,
82, 69, 83, 85, 76, 84, 5, 83, 84, 65, 82, 84, 4, 83, 84, 79, 80, 7, 77, 79, 78, 73, 84, 79, 82, 4, 69, 88,
73, 84, 3, 65, 78, 68, 2, 73, 70, 6, 85, 78, 76, 69, 83, 83, 5, 87, 72, 73, 76, 69, 5, 85, 78, 84, 73, 76,
7, 73, 78, 84, 69, 71, 69, 82, 6, 82, 69, 80, 69, 65, 84, 4, 82, 69, 65, 76, 6, 83, 87, 73, 84, 67, 72, 6,
83, 84, 82, 73, 78, 71, 5, 65, 82, 82, 65, 89, 4, 78, 65, 77, 69, 2, 79, 82, 3, 79, 87, 78, 5, 67, 79, 78,
83, 84, 9, 69, 88, 84, 82, 73, 78, 83, 73, 67, 8, 69, 88, 84, 69, 82, 78, 65, 76, 6, 83, 89, 83, 84, 69, 77,
7, 68, 89, 78, 65, 77, 73, 67, 2, 79, 70, 4, 70, 73, 76, 69, 7, 67, 79, 77, 77, 69, 78, 84, 4, 69, 76, 83,
69, 6, 70, 79, 82, 77, 65, 84, 2, 70, 78, 3, 77, 65, 80, 4, 84, 72, 69, 78, 5, 82, 69, 65, 76, 83, 6, 78,
79, 82, 77, 65, 76, 1, 61, 1, 58, 2, 45, 62, 2, 61, 61, 2, 60, 45, 1, 40, 1, 41, 1, 43, 1, 45, 1, 92,
1, 38, 2, 33, 33, 1, 33, 1, 42, 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62, 62, 2, 60, 61, 1, 60, 2,
62, 61, 1, 62, 1, 35, 2, 92, 61, 1, 44, 1, 95, 1, 32, 1, 44};
// 145+ 5, 83, 72, 79, 82, 84, 4, 66, 89, 84, 69, 4, 76, 79, 78, 71, 5, 66,
// 146+ 69, 71, 73, 78, 4, 83, 80, 69, 67, 3, 69, 78, 68, 4, 76, 73, 83, 84,
// 147+ 6, 70, 73, 78, 73, 83, 72, 6, 82, 69, 67, 79, 82, 68, 7, 67, 79, 78,
// 148+ 84, 82, 79, 76, 5, 70, 65, 85, 76, 84, 5, 67, 89, 67, 76, 69, 7, 82,
// 149+ 79, 85, 84, 73, 78, 69, 7, 84, 82, 85, 83, 84, 69, 68, 7, 80, 82, 79,
// 150+ 71, 82, 65, 77, 9, 80, 82, 73, 78, 84, 84, 69, 88, 84, 6, 82, 69, 84,
// 151+ 85, 82, 78, 6, 82, 69, 83, 85, 76, 84, 5, 83, 84, 65, 82, 84, 4, 83,
// 152+ 84, 79, 80, 7, 77, 79, 78, 73, 84, 79, 82, 4, 69, 88, 73, 84, 3, 65,
// 153+ 78, 68, 2, 73, 70, 6, 85, 78, 76, 69, 83, 83, 5, 87, 72, 73, 76, 69,
// 154+ 5, 85, 78, 84, 73, 76, 7, 73, 78, 84, 69, 71, 69, 82, 6, 82, 69, 80,
// 155+ 69, 65, 84, 4, 82, 69, 65, 76, 6, 83, 87, 73, 84, 67, 72, 6, 83, 84,
// 156+ 82, 73, 78, 71, 5, 65, 82, 82, 65, 89, 4, 78, 65, 77, 69, 2, 79, 82,
// 157+ 3, 79, 87, 78, 5, 67, 79, 78, 83, 84, 9, 69, 88, 84, 82, 73, 78, 83,
// 158+ 73, 67, 8, 69, 88, 84, 69, 82, 78, 65, 76, 6, 83, 89, 83, 84, 69, 77,
// 159+ 7, 68, 89, 78, 65, 77, 73, 67, 2, 79, 70, 4, 70, 73, 76, 69, 7, 67,
// 160+ 79, 77, 77, 69, 78, 84, 4, 69, 76, 83, 69, 6, 70, 79, 82, 77, 65, 84,
// 161+ 2, 70, 78, 3, 77, 65, 80, 4, 84, 72, 69, 78, 5, 82, 69, 65, 76, 83,
// 162+ 6, 78, 79, 82, 77, 65, 76, 1, 61, 1, 58, 2, 45, 62, 2, 61, 61, 2,
// 163+ 60, 45, 1, 40, 1, 41, 1, 43, 1, 45, 1, 92, 1, 38, 2, 33, 33, 1,
// 164+ 33, 1, 42, 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62, 62, 2, 60,
// 165+ 61, 1, 60, 2, 62, 61, 1, 62, 1, 35, 2, 92, 61, 1, 44, 1, 95, 1,
// 166+ 32, 1, 44
// 167 %CONSTSHORTINTEGERARRAY KEYWORD(1 : 80) = %C
const short int KEYWORD[80] = {0, 6, 11, 16, 22, 27, 31, 36, 43, 50, 58, 64, 70, 78, 86, 94,
104, 111, 118, 124, 129, 137, 142, 146, 149, 156, 162, 168, 176, 183, 188, 195,
202, 208, 213, 216, 220, 226, 236, 245, 252, 260, 263, 268, 276, 281, 288, 291,
295, 300, 306, 313, 315, 317, 320, 323, 326, 328, 330, 332, 334, 336, 338, 341,
343, 345, 348, 350, 352, 355, 358, 361, 363, 366, 368, 370, 373, 375, 377, 379};
// 168+ 0, 6, 11, 16, 22, 27, 31, 36, 43, 50, 58, 64, 70, 78,
// 169+ 86, 94, 104, 111, 118, 124, 129, 137, 142, 146, 149, 156, 162, 168,
// 170+ 176, 183, 188, 195, 202, 208, 213, 216, 220, 226, 236, 245, 252, 260,
// 171+ 263, 268, 276, 281, 288, 291, 295, 300, 306, 313, 315, 317, 320, 323,
// 172+ 326, 328, 330, 332, 334, 336, 338, 341, 343, 345, 348, 350, 352, 355,
// 173+ 358, 361, 363, 366, 368, 370, 373, 375, 377, 379
// 174 %CONSTBYTEINTEGERARRAY KFLAGS(1 : 80) = %C
const unsigned char KFLAGS[80] = {144, 144, 144, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 144, 128, 128,
128, 128, 128, 128, 144, 128, 160, 130, 130, 130, 130, 128, 128, 128, 128, 128,
145, 129, 128, 144, 144, 144, 144, 144, 144, 145, 128, 128, 162, 129, 129, 129,
160, 144, 128, 8, 8, 8, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 64, 0, 0, 0};
// 175+ 144, 144, 144, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 144,
// 176+ 128, 128, 128, 128, 128, 128, 144, 128, 160, 130, 130, 130, 130, 128,
// 177+ 128, 128, 128, 128, 145, 129, 128, 144, 144, 144, 144, 144, 144, 145,
// 178+ 128, 128, 162, 129, 129, 129, 160, 144, 128, 8, 8, 8, 8, 8,
// 179+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 180+ 8, 8, 8, 8, 8, 8, 64, 0, 0, 0
// 181 %OWNBYTEINTEGER ISOLATE BRACKETS = 0; ! 'IB'
static unsigned char ISOLATEBRACKETS = 0;
// 182 %OWNBYTEINTEGER LEAVE BLANKS = 0; ! 'LB'
static unsigned char LEAVEBLANKS = 0;
// 183 %OWNBYTEINTEGER SEP BLOCKS = 1; ! 'SB'
static unsigned char SEPBLOCKS = 1;
// 184 %OWNBYTEINTEGER INDENT BLOCKS = 1; ! 'TB'
static unsigned char INDENTBLOCKS = 1;
// 185 %OWNBYTEINTEGER SPLIT KEYWORDS = 0; ! 'SK'
static unsigned char SPLITKEYWORDS = 0;
// 186 %OWNBYTEINTEGER PACK NAMES = 0; ! 'PN'
static unsigned char PACKNAMES = 0;
// 187 %OWNBYTEINTEGER SPLIT STATS = 0; ! 'SS'
static unsigned char SPLITSTATS = 0;
// 188 %OWNBYTEINTEGER COMMENTS NORMAL = 0; ! 'CN'
static unsigned char COMMENTSNORMAL = 0;
// 189 %OWNBYTEINTEGER BREAK COMMENTS = 1; ! 'BC'
static unsigned char BREAKCOMMENTS = 1;
// 190 %OWNBYTEINTEGER LEAVE STARS = 1; ! 'LS'
static unsigned char LEAVESTARS = 1;
// 191 %OWNBYTEINTEGER JUSTIFY ALL = 0; ! 'JA'
static unsigned char JUSTIFYALL = 0;
// 192 %OWNBYTEINTEGER LABELS RELATIVE = 0; ! 'LR'
static unsigned char LABELSRELATIVE = 0;
// 193 %OWNBYTEINTEGER SPLIT CONDS = 1; ! 'SC'
static unsigned char SPLITCONDS = 1;
// 194 %OWNBYTEINTEGER DECS RELATIVE = 1; ! 'DR'
static unsigned char DECSRELATIVE = 1;
// 195 %OWNBYTEINTEGER SPACE LISTS = 1; ! 'SL'
static unsigned char SPACELISTS = 1;
// 196 %OWNBYTEINTEGER SPACE EQUALS = 1; ! 'SE'
static unsigned char SPACEEQUALS = 1;
// 197 %OWNBYTEINTEGER ISOLATE LOOPS = 1; ! 'IL'
static unsigned char ISOLATELOOPS = 1;
// 198 %OWNBYTEINTEGER EXTRA MARGIN = 0; ! 'EM'
static unsigned char EXTRAMARGIN = 0;
// 199 %OWNBYTEINTEGER LEAVE OWNS = 0; ! 'LO'
static unsigned char LEAVEOWNS = 0;
// 200 %OWNBYTEINTEGER COMMENTS RELATIVE = 1; ! 'CR'
static unsigned char COMMENTSRELATIVE = 1;
// 201 %OWNBYTEINTEGER EXTEND COMMENTS = 1; ! 'EC'
static unsigned char EXTENDCOMMENTS = 1;
// 202 %OWNBYTEINTEGER MI = 3; ! MARGIN INCREMENT
static unsigned char MI = 3;
// 203 %OWNBYTEINTEGER LL = 72; ! LINE LENGTH
static unsigned char LL = 72;
// 204 %OWNBYTEINTEGER CT = 40; ! COMMENT TAB
static unsigned char CT = 40;
// 205 %OWNBYTEINTEGER ML = 40; ! MARGIN LIMIT
static unsigned char ML = 40;
// 206 %OWNBYTEINTEGER COMMENT EXTENSION = 5; ! 'CE'
static unsigned char COMMENTEXTENSION = 5;
// 207 %OWNBYTEINTEGER EXT NUM = 2; ! 'XN'
static unsigned char EXTNUM = 2;
// 208 %OWNBYTEINTEGER INITIAL MARGIN = 7; ! 'IM'
static unsigned char INITIALMARGIN = 7;
// 209 %OWNBYTEINTEGER SECONDARY MARGIN = 3; ! 'SM'
static unsigned char SECONDARYMARGIN = 3;
// 210 %OWNBYTEINTEGER COMMENT LIMIT = 20; ! 'CL'
static unsigned char COMMENTLIMIT = 20;
// 211 %OWNBYTEINTEGER COMMENT LINE = 120; ! 'LC'
static unsigned char COMMENTLINE = 120;
// 212 %OWNSHORTINTEGER SAFETY FACTOR = 5
static short int SAFETYFACTOR = 5;
// 213 %OWNINTEGER DELTA MARGIN = 3
static int DELTAMARGIN = 3;
// 214 %OWNINTEGER LINE LENGTH = 70
static int LINELENGTH = 70;
// 215 %OWNINTEGER COMMENT TAB = 40
static int COMMENTTAB = 40;
// 216 %OWNINTEGER LEVEL = 1, MLIMIT = 0, SEC MARGIN = 3
static int LEVEL = 1;
static int MLIMIT = 0;
static int SECMARGIN = 3;
// 217 %OWNBYTEINTEGER COMMENT FLAG
static unsigned char COMMENTFLAG;
// 218 %OWNBYTEINTEGER CMODE, LOOP FLAG
static unsigned char CMODE;
static unsigned char LOOPFLAG;
// 219 %OWNINTEGER LINESIZE, CS, DISP, D, RMARGIN, FIRST DISP
static int LINESIZE;
static int CS;
static int DISP;
static int D;
static int RMARGIN;
static int FIRSTDISP;
// 220 %OWNINTEGER SIZE, CSTART, LINE BASE, FULL LINE
static int SIZE;
static int CSTART;
static int LINEBASE;
static int FULLLINE;
// 221 !%EXTERNALROUTINE PROMPT(%STRING (63) S)
// 222 ! PRINT STRING(S)
// 223 !%END
// 224
// 225 !%EXTERNALROUTINESPEC DEFINE(%STRING (63) S)
// 226 %EXTERNALROUTINESPEC SEND(%STRING (63) S)
extern void SEND(_imp_string63 S);
// 227 %EXTERNALROUTINESPEC LIST(%STRING (63) S)
extern void LIST(_imp_string63 S);
// 228 %EXTERNALROUTINESPEC DESTROY(%STRING (63) S)
extern void DESTROY(_imp_string63 S);
// 229 %EXTERNALROUTINESPEC RENAME(%STRING (63) S)
extern void RENAME(_imp_string63 S);
static int PARSE(int ENTRY);
// 230 %INTEGERFNSPEC PARSE(%INTEGER EP)
// 231 %OWNSTRING (255) INPUT, OUTPUT, OPTION FILE, ST, OPLIST
static _imp_string255 INPUT;
static _imp_string255 OUTPUT;
static _imp_string255 OPTIONFILE;
static _imp_string255 ST;
static _imp_string255 OPLIST;
// 232 %OWNINTEGER SPT, SAD, S
static int SPT;
static int SAD;
static int S;
// 233 %OWNBYTEINTEGER SPACES, MODE
static unsigned char SPACES;
static unsigned char MODE;
// 234 %OWNBYTEINTEGER OK, THIS SEP
static unsigned char OK;
static unsigned char THISSEP;
// 235 %CONSTINTEGER LAST TEXT = 51
// 236 %OWNINTEGER HEADER, SEGS
static int HEADER;
static int SEGS;
// 237 %OWNINTEGERARRAY STRINGS(1 : 100); !(-100 : -1)
static int STRINGS[100];
// 238 %OWNINTEGER COMMENT LENGTH
static int COMMENTLENGTH;
// 239 %OWNSHORTINTEGERARRAY REM(1 : 4)
static short int REM[4];
// 240 %OWNBYTEINTEGERARRAY SYMFILE(0 : 300)
static unsigned char SYMFILE[301];
// 241 %OWNBYTEINTEGERARRAY TLENGTH(1 : 100);!(-100 : -1)
static unsigned char TLENGTH[100];
// 242 %OWNINTEGERARRAY REC(1 : 100)
static int REC[100];
// 243 %OWNBYTEINTEGER STATUS, OPTIONS, LAST SEP, FLAG, PMODE
static unsigned char STATUS;
static unsigned char OPTIONS;
static unsigned char LASTSEP;
static unsigned char FLAG;
static unsigned char PMODE;
// 244 %OWNBYTEINTEGER QUOTES = 0, OWNFLAG = ';'
static unsigned char QUOTES = 0;
static unsigned char OWNFLAG = 59;
// 245 %OWNINTEGER NVAL
static int NVAL;
// 246 !%REGISTER CURRIN(14)
// 247 %OWNINTEGER CURRIN
static int CURRIN;
// 248 %OWNINTEGER CURROUT, SLENGTH, LIMIT, MARGIN, INBASE, STATSIZE
static int CURROUT;
static int SLENGTH;
static int LIMIT;
static int MARGIN;
static int INBASE;
static int STATSIZE;
// 249 %OWNINTEGER STAT, KEYBASE, TEXTBASE, J, SN, RP, RPLIM, RPINC
static int STAT;
static int KEYBASE;
static int TEXTBASE;
static int J;
static int SN;
static int RP;
static int RPLIM;
static int RPINC;
// 250 %OWNINTEGER MAXMARGIN, ENDOFFILE
static int MAXMARGIN;
static int ENDOFFILE;
static void SETUPFILES(_imp_string *S);
static void CLOSEFILES(void);
static void SETOPTIONS(void);
// 251 %CONSTINTEGER CCC = X'2025430A'
// 252 %CONSTINTEGER CONNEKTEP = 1
// 253 %CONSTINTEGER CREATEEP = 162
// 254 %CONSTINTEGER READEP = 7
// 255 %CONSTINTEGER INFOEP = 5
// 256 %CONSTINTEGER CHANGEEP = 6
// 257 %ROUTINESPEC SET UP FILES(%STRING(*)%NAME S)
// 258 %ROUTINESPEC CLOSE FILES
// 259 %ROUTINESPEC SET OPTIONS
// 260
// 261 %DYNAMICROUTINESPEC CHERISH(%STRING(63) S)
extern void CHERISH(_imp_string63 S);
// 262
// 263
// 264 %ROUTINE CONTINUE
static void CONTINUE(void) {
auto void ADJUST(void);
// 265 !%SHORTROUTINE
// 266 %ROUTINESPEC ADJUST
// 267 %INTEGERARRAY HOLD(1 : 4)
int HOLD[4];
// 268 %INTEGER J, K, L, M, N, Z, LIM, XES
int J;
int K;
int L;
int M;
int N;
int Z;
int LIM;
int XES;
// 269 !!%BYTEINTEGERARRAYFORMAT NFM(1 : 4)
// 270 %BYTEINTEGERARRAYNAME NEST
unsigned char *NEST;
// 271 %BYTEINTEGER S, CFLAG
unsigned char S;
unsigned char CFLAG;
// 272 !!NEST == ARRAY(ADDR(NVAL),NFM)
// 273 THIS SEP = NL; LIM = MARGIN+SAFETY FACTOR+SEC MARGIN
THISSEP = 10;
LIM = MARGIN + SAFETYFACTOR + SECMARGIN;
// 274 Z = SLENGTH+CURROUT
Z = SLENGTH + CURROUT;
// 275 %RETURN %IF Z < LIMIT %OR (Z-SAFETY FACTOR-LIMIT < -4 %C
if (Z < LIMIT) goto L_0001;
if (Z - SAFETYFACTOR - LIMIT >= -4) goto L_0002;
if (REC[RP + 1 - 1] != 0) goto L_0002;
L_0001:;
return;
L_0002:;
// 276+ %AND REC(RP+1) = 0)
// 277 ! LEAVE TWO SPACES FOR " %" IF NESC.
// 278 XES = Z-LIMIT; ! EXCESS LINE LENGTH
XES = Z - LIMIT;
// 279
// 280 %CYCLE J = 1,1,4; HOLD(J) = NEST(J)+CURROUT-LINE BASE
// %for J = 1, 1, 4 %cycle
{
J = 0;
L_0003:
if (J == 4) goto L_0004;
J += 1;
HOLD[J - 1] = [/*BUG*/ 0] + CURROUT - LINEBASE;
// 281 %REPEAT
goto L_0003;
}
L_0004:;
// 282
// 283 %IF LAST SEP = ';' %THEN %START
if (LASTSEP != 59) goto L_0006;
// 284 N = CURROUT; QUOTES = 0
N = CURROUT;
QUOTES = 0;
// 285
// 286 %CYCLE
L_0007:;
// 287 N = N-1; S = BYTEINTEGER(N)
N = N - 1;
S = *_imp_BYTEINTEGER(N);
// 288 QUOTES = QUOTES!!1 %IF S = ''''
if (S != 39) goto L_0008;
QUOTES = QUOTES ^ 1;
L_0008:;
// 289 %REPEAT %UNTIL S = ';' %AND QUOTES = 0
if (S != 59) goto L_0009;
if (QUOTES == 0) goto L_000A;
L_0009:;
goto L_0007;
L_000A:;
// 290
// 291 BYTEINTEGER(N) = NL; LIMIT = N+LINELENGTH
*_imp_BYTEINTEGER(N) = 10;
LIMIT = N + LINELENGTH;
// 292 LINE BASE = N
LINEBASE = N;
// 293 K = CURROUT+80; M = K
K = CURROUT + 80;
M = K;
// 294
// 295 %CYCLE L = N+3,1,CURROUT
// %for L = N + 3, 1, CURROUT %cycle
{
int _initial = N + 3, _final = CURROUT;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = N + 3, 1, CURROUT");
L = _initial - (1);
L_000B:
if (L == _final) goto L_000C;
L += 1;
// 296 K = K+1; BYTEINTEGER(K) = BYTEINTEGER(L)
K = K + 1;
*_imp_BYTEINTEGER(K) = *_imp_BYTEINTEGER(L);
// 297 %REPEAT
goto L_000B;
}
L_000C:;
// 298
// 299 %CYCLE L = 1,1,MARGIN
// %for L = 1, 1, MARGIN %cycle
{
int _final = MARGIN;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = 1, 1, MARGIN");
L = 0;
L_000E:
if (L == _final) goto L_000F;
L += 1;
// 300 N = N+1; BYTEINTEGER(N) = ' '
N = N + 1;
*_imp_BYTEINTEGER(N) = 32;
// 301 %REPEAT
goto L_000E;
}
L_000F:;
// 302
// 303 %CYCLE L = M+1,1,K
// %for L = M + 1, 1, K %cycle
{
int _initial = M + 1, _final = K;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = M + 1, 1, K");
L = _initial - (1);
L_0010:
if (L == _final) goto L_0011;
L += 1;
// 304 N = N+1; BYTEINTEGER(N) = BYTEINTEGER(L)
N = N + 1;
*_imp_BYTEINTEGER(N) = *_imp_BYTEINTEGER(L);
// 305 %REPEAT
goto L_0010;
}
L_0011:;
// 306
// 307 CURROUT = N
CURROUT = N;
// 308 LAST SEP = NL
LASTSEP = 10;
// 309 ADJUST
ADJUST();
// 310 %RETURN %IF CURROUT+SLENGTH < LIMIT
if (CURROUT + SLENGTH >= LIMIT) goto L_0012;
return;
L_0012:;
// 311 %FINISH
L_0006:;
// 312 NEST(3) = 0 %IF NEST(4) # 0 %AND REC(REM(4)-1) >= 4
if ([/*BUG*/ 0] == 0) goto L_0013;
if (REC[REM[3] - 1 - 1] < 4) goto L_0013;
[/*BUG*/ 0] = 0;
L_0013:;
// 313 CFLAG = 0
CFLAG = 0;
// 314
// 315 %CYCLE J = 1,1,4
// %for J = 1, 1, 4 %cycle
{
J = 0;
L_0014:
if (J == 4) goto L_0015;
J += 1;
// 316 N = NEST(J)
N = [/*BUG*/ 0];
// 317 %IF N > LIM %START
if (N <= LIM) goto L_0016;
// 318 N = N+LINE BASE
N = N + LINEBASE;
// 319 CFLAG = 1 %AND %EXIT %IF N < CURROUT
if (N >= CURROUT) goto L_0017;
CFLAG = 1;
goto L_0015;
L_0017:;
// 320 %FINISH
L_0016:;
// 321 %REPEAT
goto L_0014;
}
L_0015:;
// 322
// 323 %IF CFLAG # 0 %START
if (CFLAG == 0) goto L_0018;
// 324 %IF NEST(J)-MARGIN-SEC MARGIN-SAFETY FACTOR < XES %START
if ([/*BUG*/ 0] - MARGIN - SECMARGIN - SAFETYFACTOR >= XES) goto L_0019;
// 325 K = J
K = J;
// 326
// 327 %WHILE K < 4 %CYCLE
L_001A:;
if (K >= 4) goto L_001B;
// 328 K = K+1
K = K + 1;
// 329 CFLAG = 0 %AND %EXIT %IF NEST(K) # 0
if ([/*BUG*/ 0] == 0) goto L_001C;
CFLAG = 0;
goto L_001B;
L_001C:;
// 330 %REPEAT
goto L_001A;
L_001B:;
// 331
// 332 %IF CFLAG = 0 %START
if (CFLAG != 0) goto L_001D;
// 333 L = NEST(K)+LINE BASE
L = [/*BUG*/ 0] + LINEBASE;
// 334 J = K %AND N = L %C
if ([/*BUG*/ 0] <= LIM) goto L_001E;
if (L >= CURROUT) goto L_001E;
J = K;
N = L;
L_001E:;
// 335+ %IF NEST(K) > LIM %AND L < CURROUT
// 336 %FINISH
L_001D:;
// 337 %FINISH
L_0019:;
// 338 J = 3 %AND N = NEST(3)+LINE BASE %C
if (J != 4) goto L_001F;
if (REM[2] != REM[3] - 1) goto L_001F;
J = 3;
N = [/*BUG*/ 0] + LINEBASE;
L_001F:;
// 339+ %IF J = 4 %AND REM(3) = REM(4)-1
// 340 LIM = NEST(J)+SAFETY FACTOR+SEC MARGIN
LIM = [/*BUG*/ 0] + SAFETYFACTOR + SECMARGIN;
// 341 K = CURROUT+80; M = K
K = CURROUT + 80;
M = K;
// 342
// 343 %CYCLE L = N+1,1,CURROUT
// %for L = N + 1, 1, CURROUT %cycle
{
int _initial = N + 1, _final = CURROUT;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = N + 1, 1, CURROUT");
L = _initial - (1);
L_0020:
if (L == _final) goto L_0021;
L += 1;
// 344 K = K+1; BYTEINTEGER(K) = BYTEINTEGER(L)
K = K + 1;
*_imp_BYTEINTEGER(K) = *_imp_BYTEINTEGER(L);
// 345 %REPEAT
goto L_0020;
}
L_0021:;
// 346
// 347 !!*L_1,N
// 348 !!*MVC_1(4,1),CCC
// 349 !!*LA_1,4(1)
// 350 !!*ST_1,CURROUT
// 351 !!*ST_1,LINEBASE
// 352
// 353 %CYCLE J = 1,1,MARGIN+SEC MARGIN
// %for J = 1, 1, MARGIN + SECMARGIN %cycle
{
int _final = MARGIN + SECMARGIN;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, MARGIN + SECMARGIN");
J = 0;
L_0022:
if (J == _final) goto L_0023;
J += 1;
// 354 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' '
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 32;
// 355 %REPEAT
goto L_0022;
}
L_0023:;
// 356
// 357 M = M+1 %IF BYTEINTEGER(M+1) = ' '
if (*_imp_BYTEINTEGER(M + 1) != 32) goto L_0024;
M = M + 1;
L_0024:;
// 358 %IF BYTEINTEGER(M+1) # '%' %START
if (*_imp_BYTEINTEGER(M + 1) == 37) goto L_0025;
// 359 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = '%'
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 37;
// 360 %FINISH
L_0025:;
// 361
// 362 %CYCLE L = M+1,1,K
// %for L = M + 1, 1, K %cycle
{
int _initial = M + 1, _final = K;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle L = M + 1, 1, K");
L = _initial - (1);
L_0026:
if (L == _final) goto L_0027;
L += 1;
// 363 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 364 BYTEINTEGER(CURROUT) = BYTEINTEGER(L)
*_imp_BYTEINTEGER(CURROUT) = *_imp_BYTEINTEGER(L);
// 365 %REPEAT
goto L_0026;
}
L_0027:;
// 366
// 367 !?? ADJUST
// 368 %FINISH %ELSE %START
goto L_0028;
L_0018:;
// 369 LIM = CURROUT-LINEBASE+SAFETY FACTOR
LIM = CURROUT - LINEBASE + SAFETYFACTOR;
// 370 !!*L_1,CURROUT
// 371 !!*MVC_1(4,1),CCC
// 372 !!*LA_1,4(1)
// 373 !!*ST_1,CURROUT
// 374 !!*ST_1,LINE BASE
// 375
// 376 %CYCLE J = 1,1,MARGIN+SEC MARGIN
// %for J = 1, 1, MARGIN + SECMARGIN %cycle
{
int _final = MARGIN + SECMARGIN;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, MARGIN + SECMARGIN");
J = 0;
L_0029:
if (J == _final) goto L_002A;
J += 1;
// 377 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' '
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 32;
// 378 %REPEAT
goto L_0029;
}
L_002A:;
// 379
// 380 PMODE = 128; ! NO LONGER IN RANGE OF '%'
PMODE = 128;
// 381 %FINISH
L_0028:;
// 382 LIMIT = LINEBASE+LINE LENGTH
LIMIT = LINEBASE + LINELENGTH;
// 383 STATSIZE = STATSIZE-LINELENGTH+MARGIN
STATSIZE = STATSIZE - LINELENGTH + MARGIN;
// 384 RPLIM = RPLIM+RPINC %IF STATSIZE+MARGIN >= LINE LENGTH
if (STATSIZE + MARGIN < LINELENGTH) goto L_002B;
RPLIM = RPLIM + RPINC;
L_002B:;
// 385 NVAL = 0
NVAL = 0;
// 386
// 387 %ROUTINE ADJUST
void ADJUST(void) {
// 388
// 389 %CYCLE J = 1,1,4
// %for J = 1, 1, 4 %cycle
{
J = 0;
L_002C:
if (J == 4) goto L_002D;
J += 1;
// ?Non-local
// 390 %IF NEST(J) <= LIM %THEN NEST(J) = 0 %C
if ([/*BUG*/ 0] > LIM) goto L_002E;
[/*BUG*/ 0] = 0;
goto L_002F;
L_002E:;
[/*BUG*/ 0] = HOLD[J - 1] - CURROUT + LINEBASE;
L_002F:;
// 391+ %ELSE NEST(J) = HOLD(J)-CURROUT+LINE BASE
// 392 %REPEAT
goto L_002C;
}
L_002D:;
// 393
// 394 %END
return;
} /* end of ADJUST */
// 395 %END
return;
} /* end of CONTINUE */
// 396
// 397 %ROUTINE BREAK
static void BREAK(void) {
// 398 !%SHORTROUTINE
// 399 CURROUT = CURROUT-2 %UNLESS BYTEINTEGER(CURROUT) = ';'
if (*_imp_BYTEINTEGER(CURROUT) == 59) goto L_0030;
CURROUT = CURROUT - 2;
L_0030:;
// 400 BYTEINTEGER(CURROUT) = NL
*_imp_BYTEINTEGER(CURROUT) = 10;
// 401 SIZE = 0; LINE BASE = CURROUT
SIZE = 0;
LINEBASE = CURROUT;
// 402 LIMIT = LINE BASE+LINE SIZE
LIMIT = LINEBASE + LINESIZE;
// 403 NVAL = 0
NVAL = 0;
// 404 %END
return;
} /* end of BREAK */
// 405
// 406 %EXTERNALROUTINE SOAP(%STRING (128) FILES)
void SOAP(_imp_string128 FILES) {
// 407 !%SHORTROUTINE
// 408 %OWNINTEGER MOVEX = X'D2002001', MOVEY = X'10010000'
static int MOVEX = -771743743;
static int MOVEY = 268500992;
auto void PERCENT(void);
auto void SPACE(void);
// 409 %ROUTINESPEC PERCENT
// 410 %ROUTINESPEC SPACE
// 411 %INTEGERNAME MID MARGIN
int *MIDMARGIN;
// 412 %INTEGER N, P, K, M, Z
int N;
int P;
int K;
int M;
int Z;
// 413 !!%BYTEINTEGERARRAYFORMAT NFM(1 : 4)
// 414 %BYTEINTEGERARRAYNAME NEST
unsigned char *NEST;
// 415 PRINT STRING( "SOAP"); {PRINTCH(7);} NEWLINE
_imp_PRINTSTRING(_imp_str_literal("SOAP"));
_imp_NEWLINE();
// 416 !!NEST == ARRAY(ADDR(NVAL),NFM)
// 417 SET UP FILES(FILES); %RETURN %IF OK = 0
SETUPFILES((_imp_string255 *)/*p*/ /*?*/ &FILES);
if (OK != 0) goto L_0031;
return;
L_0031:;
// 418 SET OPTIONS; %RETURN %IF OK = 0
SETOPTIONS();
if (OK != 0) goto L_0032;
return;
L_0032:;
// 419 MID MARGIN == MARGIN
MIDMARGIN = (int *)/*?*/ &MARGIN;
// 420 MID MARGIN == RMARGIN %IF COMMENTS RELATIVE = 0
if (COMMENTSRELATIVE != 0) goto L_0033;
MIDMARGIN = (int *)/*?*/ &RMARGIN;
L_0033:;
// 421 !* 32 16 8 4 2 1
// 422 !* STATUS: SPECIAL COMMENT : COMMENT : OWN : END : DOWN : UP
// 423 TOP: ! HEAD OF MAIN LOOP
U_1000:;
// 424
// 425 %CYCLE
L_0034:;
// 426 NVAL = 0
NVAL = 0;
// 427 LOOP FLAG = 0
LOOPFLAG = 0;
// 428 RP = 0; SPT = 0; MODE = 0; STATUS = 0
RP = 0;
SPT = 0;
MODE = 0;
STATUS = 0;
// 429 SAD = TEXTBASE
SAD = TEXTBASE;
// 430 LIMIT = CURROUT+LINELENGTH %IF LAST SEP # ';'
if (LASTSEP == 59) goto L_0035;
LIMIT = CURROUT + LINELENGTH;
L_0035:;
// 431 INBASE = CURRIN
INBASE = CURRIN;
// 432 %IF PARSE(0) # 0 %THEN %START
if (PARSE(0) == 0) goto L_0036;
// 433 ! SYNTAX ??
// 434 OWNS: J = CURRIN; QUOTES = 0; K = 0
U_1001:;
J = CURRIN;
QUOTES = 0;
K = 0;
// 435
// 436 %CYCLE
L_0037:;
// 437 K = K+1
K = K + 1;
// 438 J = J+1; S = BYTEINTEGER(J)
J = J + 1;
S = *_imp_BYTEINTEGER(J);
// 439 QUOTES = QUOTES!!1 %IF S = ''''
if (S != 39) goto L_0038;
QUOTES = QUOTES ^ 1;
L_0038:;
// 440 %REPEAT %UNTIL (S = NL %OR S = ';') %AND (QUOTES = 0 %OR K > 300)
if (S == 10) goto L_0039;
if (S != 59) goto L_003A;
L_0039:;
if (QUOTES == 0) goto L_003B;
if (K > 300) goto L_003B;
L_003A:;
goto L_0037;
L_003B:;
// 441
// 442 SLENGTH = J-CURRIN
SLENGTH = J - CURRIN;
// 443 %IF CURROUT+SLENGTH > LIMIT %AND LAST SEP = ';' %C
if (CURROUT + SLENGTH <= LIMIT) goto L_003C;
if (LASTSEP != 59) goto L_003C;
// 444+ %THEN %START
// 445 BREAK
BREAK();
// 446 STAT = CURROUT+MARGIN
STAT = CURROUT + MARGIN;
// 447
// 448 %CYCLE J = 1,1,MARGIN
// %for J = 1, 1, MARGIN %cycle
{
int _final = MARGIN;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, MARGIN");
J = 0;
L_003D:
if (J == _final) goto L_003E;
J += 1;
// ?Non-local
// 449 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 450 BYTEINTEGER(CURROUT) = ' '
*_imp_BYTEINTEGER(CURROUT) = 32;
// 451 %REPEAT
goto L_003D;
}
L_003E:;
// 452
// 453 %FINISH
L_003C:;
// 454 %IF OWNFLAG = 0 %THEN %START
if (OWNFLAG != 0) goto L_0040;
// 455 OWNFLAG = ';'
OWNFLAG = 59;
// 456 %IF CURROUT+SLENGTH+SAFETY FACTOR > LIMIT %C
if (CURROUT + SLENGTH + SAFETYFACTOR <= LIMIT) goto L_0041;
// 457+ %THEN %START
// 458 !!*L_1,CURROUT
// 459 !!*MVC_1(4,1),CCC; ! PUSH IN CONTINUATION
// 460 !!*LA_1,4(1)
// 461 !!*ST_1,CURROUT
// 462 !!*ST_1,LINE BASE
// 463 %FINISH
L_0041:;
// 464 %FINISH
L_0040:;
// 465
// 466 %CYCLE J = 1,1,SLENGTH
// %for J = 1, 1, SLENGTH %cycle
{
int _final = SLENGTH;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, SLENGTH");
J = 0;
L_0042:
if (J == _final) goto L_0043;
J += 1;
// ?Non-local
// 467 CURRIN = CURRIN+1; CURROUT = CURROUT+1
CURRIN = CURRIN + 1;
CURROUT = CURROUT + 1;
// 468 BYTEINTEGER(CURROUT) = BYTEINTEGER(CURRIN)
*_imp_BYTEINTEGER(CURROUT) = *_imp_BYTEINTEGER(CURRIN);
// 469 %REPEAT
goto L_0042;
}
L_0043:;
// 470
// 471 LAST SEP = BYTEINTEGER(CURRIN)
LASTSEP = *_imp_BYTEINTEGER(CURRIN);
// 472 %IF LAST SEP = ';' %THEN %START
if (LASTSEP != 59) goto L_0045;
// 473 BYTEINTEGER(CURROUT+1) = ' '
*_imp_BYTEINTEGER(CURROUT + 1) = 32;
// 474 BYTEINTEGER(CURROUT+2) = ' '
*_imp_BYTEINTEGER(CURROUT + 2) = 32;
// 475 CURROUT = CURROUT+2
CURROUT = CURROUT + 2;
// 476 %FINISH %ELSE LINE BASE = CURROUT
goto L_0046;
L_0045:;
LINEBASE = CURROUT;
L_0046:;
// 477 %FINISH %ELSE %START
goto L_0047;
L_0036:;
// 478 PMODE = 128
PMODE = 128;
// 479 STATSIZE = CURRIN-INBASE
STATSIZE = CURRIN - INBASE;
// 480 %IF STATSIZE+MARGIN > LINE LENGTH %START
if (STATSIZE + MARGIN <= LINELENGTH) goto L_0048;
// 481 RPINC = RP//(STATSIZE//(LINE LENGTH-MARGIN))
RPINC = ((long)RP / (long)(((long)STATSIZE / (long)(LINELENGTH - MARGIN))));
// 482 RPLIM = RPINC
RPLIM = RPINC;
// 483 %FINISH %ELSE RPLIM = RP
goto L_0049;
L_0048:;
RPLIM = RP;
L_0049:;
// 484 %IF STATUS&11 # 0 %AND LAST SEP = ';' %THEN %START
if (STATUS & 11 == 0) goto L_004A;
if (LASTSEP != 59) goto L_004A;
// 485 LAST SEP = NL
LASTSEP = 10;
// 486 BREAK
BREAK();
// 487 %FINISH
L_004A:;
// 488 %IF STATUS&136 # 0 %THEN %START
if (STATUS & 136 == 0) goto L_004B;
// 489 ! BLANK LINE OR BLOCK
// 490 %IF (LEAVE BLANKS # 0 %AND THIS SEP # ';') %C
if (LEAVEBLANKS == 0) goto L_004C;
if (THISSEP != 59) goto L_003F;
L_004C:;
if (STATUS & 128 == 0) goto L_004D;
if (SEPBLOCKS == 0) goto L_004D;
L_003F:;
// 491+ %OR (STATUS&128 # 0 %AND SEP BLOCKS # 0) %C
// 492+ %THEN %START
// 493 NULL:
U_1002:;
// 494 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 495 LINE BASE = CURROUT
LINEBASE = CURROUT;
// 496 %FINISH
L_004D:;
// 497 -> TOP %IF STATUS&8 # 0 %AND RP <= 1
if (STATUS & 8 == 0) goto L_004E;
if (RP > 1) goto L_004E;
goto U_1000;
L_004E:;
// 498 ! IN CASE OF LONELY LABELS
// 499 %FINISH
L_004B:;
// 500 RP = 0
RP = 0;
// 501 %IF LOOP FLAG # 0 %AND STATUS&1 # 0 %C
if (LOOPFLAG == 0) goto L_004F;
if (STATUS & 1 == 0) goto L_004F;
if (*_imp_BYTEINTEGER(CURROUT - 1) == 10) goto L_004F;
// 502+ %AND BYTEINTEGER(CURROUT-1) # NL %START
// 503 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 504 LINE BASE = CURROUT
LINEBASE = CURROUT;
// 505 LIMIT = LIMIT+1
LIMIT = LIMIT + 1;
// 506 %FINISH
L_004F:;
// 507 %IF STATUS&2 # 0 %THEN %START
if (STATUS & 2 == 0) goto L_0050;
// 508 ! DOWN
// 509 STATUS = STATUS!64 %C
if (EXTRAMARGIN == 0) goto L_0051;
if (STATUS & 4 == 0) goto L_0051;
STATUS = STATUS | 64;
L_0051:;
// 510+ %IF EXTRA MARGIN # 0 %AND STATUS&4 # 0
// 511 LEVEL = LEVEL>>1
LEVEL = (unsigned int)LEVEL >> 1;
// 512 LEVEL = 1 %IF LEVEL = 0
if (LEVEL != 0) goto L_0052;
LEVEL = 1;
L_0052:;
// 513 MARGIN = MARGIN-DELTA MARGIN %IF MLIMIT&1 = 0
if (MLIMIT & 1 != 0) goto L_0053;
MARGIN = MARGIN - DELTAMARGIN;
L_0053:;
// 514 MLIMIT = MLIMIT>>1
MLIMIT = (unsigned int)MLIMIT >> 1;
// 515 MARGIN = 0 %IF MARGIN < 0
if (MARGIN >= 0) goto L_0054;
MARGIN = 0;
L_0054:;
// 516 %FINISH
L_0050:;
// 517 STAT = CURROUT+MARGIN %IF LAST SEP # ';'
if (LASTSEP == 59) goto L_0055;
STAT = CURROUT + MARGIN;
L_0055:;
// 518
// 519 %WHILE REC(RP+1) = 100 %CYCLE
L_0056:;
if (REC[RP + 1 - 1] != 100) goto L_0057;
// 520 ! DEAL WITH LABELS
// 521 RP = RP+1
RP = RP + 1;
// 522 %IF LAST SEP = ';' %OR LAST SEP = ':' %THEN %START
if (LASTSEP == 59) goto L_0058;
if (LASTSEP != 58) goto L_0059;
L_0058:;
// 523 N = -2; N = 1 %IF LAST SEP = ':'
N = -2;
if (LASTSEP != 58) goto L_005A;
N = 1;
L_005A:;
// 524 CURROUT = CURROUT+N; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + N;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 525 LINE BASE = CURROUT
LINEBASE = CURROUT;
// 526 LIMIT = CURROUT+LINELENGTH
LIMIT = CURROUT + LINELENGTH;
// 527 STAT = CURROUT+MARGIN
STAT = CURROUT + MARGIN;
// 528 LAST SEP = NL
LASTSEP = 10;
// 529 %FINISH
L_0059:;
// 530 %IF LABELS RELATIVE # 0 %AND LAST SEP # ':' %C
if (LABELSRELATIVE == 0) goto L_005B;
if (LASTSEP == 58) goto L_005B;
// 531+ %THEN %START
// 532 N = LEVEL; M = MARGIN
N = LEVEL;
M = MARGIN;
// 533 M = M+FIRST DISP %C
if (EXTRAMARGIN == 0) goto L_005C;
if (LEVEL != 1) goto L_005C;
M = M + FIRSTDISP;
L_005C:;
// 534+ %IF EXTRA MARGIN # 0 %AND LEVEL = 1
// 535
// 536 %CYCLE
L_005D:;
// 537 M = M-DELTA MARGIN
M = M - DELTAMARGIN;
// 538 %EXIT %IF N&1 # 0
if (N & 1 == 0) goto L_005E;
goto L_005F;
L_005E:;
// 539 N = N>>1
N = (unsigned int)N >> 1;
// 540 %REPEAT
goto L_005D;
L_005F:;
// 541
// 542 %WHILE M > 0 %CYCLE
L_0060:;
if (M <= 0) goto L_0061;
// 543 M = M-1
M = M - 1;
// 544 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 545 BYTEINTEGER(CURROUT) = ' '
*_imp_BYTEINTEGER(CURROUT) = 32;
// 546 %REPEAT
goto L_0060;
L_0061:;
// 547
// 548 %FINISH
L_005B:;
// 549
// 550 %CYCLE
L_0062:;
// 551 RP = RP+1; N = REC(RP); %EXIT %IF N = 0
RP = RP + 1;
N = REC[RP - 1];
if (N != 0) goto L_0063;
goto L_0064;
L_0063:;
// 552 %IF N < 0 %THEN SN = STRINGS(-N) %C
if (N >= 0) goto L_0065;
SN = STRINGS[-N - 1];
goto L_0066;
L_0065:;
SN = KEYWORD[N - 1] + KEYBASE;
L_0066:;
// 553+ %ELSE SN = KEYWORD(N)+KEYBASE
// 554
// 555 %CYCLE J = SN+1,1,SN+BYTEINTEGER(SN)
// %for J = SN + 1, 1, SN + *_imp_BYTEINTEGER(SN) %cycle
{
int _initial = SN + 1, _final = SN + *_imp_BYTEINTEGER(SN);
if (invalid_for_loop(_initial, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle J = SN + 1, 1, SN + *_imp_BYTEINTEGER(SN)");
J = _initial - (1);
L_0067:
if (J == _final) goto L_0068;
J += 1;
// ?Non-local
// 556 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 557 BYTEINTEGER(CURROUT) = BYTEINTEGER(J)
*_imp_BYTEINTEGER(CURROUT) = *_imp_BYTEINTEGER(J);
// 558 %REPEAT
goto L_0067;
}
L_0068:;
// 559
// 560 %REPEAT
goto L_0062;
L_0064:;
// 561
// 562 %IF CURROUT > STAT %AND STATUS&16 = 0 %THEN %START
if (CURROUT <= STAT) goto L_006A;
if (STATUS & 16 != 0) goto L_006A;
// 563 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 564 LINE BASE = CURROUT
LINEBASE = CURROUT;
// 565 LIMIT = CURROUT+LINELENGTH
LIMIT = CURROUT + LINELENGTH;
// 566 STAT = CURROUT+MARGIN
STAT = CURROUT + MARGIN;
// 567 %FINISH
L_006A:;
// 568 LAST SEP = ':'
LASTSEP = 58;
// 569 %REPEAT
goto L_0056;
L_0057:;
// 570
// 571 RP = 0 %AND -> NULL %IF STATUS&8 # 0
if (STATUS & 8 == 0) goto L_006B;
RP = 0;
goto U_1002;
L_006B:;
// 572 ! NOW DEAL WITH COMMENTS
// 573 %IF STATUS&16 # 0 %THEN %START
if (STATUS & 16 == 0) goto L_006C;
// 574 RP = RP+1; DISP = REC(RP)
RP = RP + 1;
DISP = REC[RP - 1];
// 575 ! STARTING DISP OF INPUT
// 576 ! COMMENT
// 577 D = 0; CMODE = 0
D = 0;
CMODE = 0;
// 578 J = CURRIN; ! FIND THE END OF THE COMMENT
J = CURRIN;
// 579 J = J+1 %WHILE BYTEINTEGER(J) # NL %C
L_006D:;
if (*_imp_BYTEINTEGER(J) == 10) goto L_006E;
if (*_imp_BYTEINTEGER(J) == 59) goto L_006E;
J = J + 1;
goto L_006D;
L_006E:;
// 580+ %AND BYTEINTEGER(J) # ';'
// 581 CS = J-CURRIN; ! COMMENT SIZE
CS = J - CURRIN;
// 582 %IF COMMENT FLAG = 0 %C
if (COMMENTFLAG != 0) goto L_006F;
CSTART = COMMENTTAB;
goto L_0070;
L_006F:;
// 583+ %THEN CSTART = COMMENT TAB %ELSE %START
// 584 %IF COMMENTS NORMAL # 0 %START
if (COMMENTSNORMAL == 0) goto L_0071;
// 585 CMODE = 1; CSTART = MARGIN
CMODE = 1;
CSTART = MARGIN;
// 586 %FINISH %ELSE %START
goto L_0072;
L_0071:;
// 587 %IF LAST SEP = ';' %C
if (LASTSEP != 59) goto L_0073;
CSTART = COMMENTTAB;
goto L_0074;
L_0073:;
// 588+ %THEN CSTART = COMMENT TAB %ELSE %START
// 589 %IF DISP = 0 %THEN CSTART = 0 %ELSE %START
if (DISP != 0) goto L_0075;
CSTART = 0;
goto L_0076;
L_0075:;
// 590 %IF DISP <= MID MARGIN %C
if (DISP > *MIDMARGIN) goto L_0077;
if (STATUS & 32 != 0) goto L_0077;
CSTART = MARGIN;
goto L_0078;
L_0077:;
CSTART = COMMENTTAB;
L_0078:;
// 591+ %AND STATUS&32 = 0 %C
// 592+ %THEN CSTART = MARGIN %C
// 593+ %ELSE CSTART = COMMENT TAB
// 594 %FINISH
L_0076:;
// 595 %FINISH
L_0074:;
// 596 %FINISH
L_0072:;
// 597 %FINISH
L_0070:;
// 598 CSTART = 0 %IF STATUS&32 # 0 %AND LEAVE STARS # 0
if (STATUS & 32 == 0) goto L_0079;
if (LEAVESTARS == 0) goto L_0079;
CSTART = 0;
L_0079:;
// 599 SIZE = CURROUT-LINE BASE
SIZE = CURROUT - LINEBASE;
// 600 %IF LAST SEP = ';' %START
if (LASTSEP != 59) goto L_007A;
// 601 %IF BYTEINTEGER(CURROUT) = NL %START
if (*_imp_BYTEINTEGER(CURROUT) != 10) goto L_007B;
// 602 ! COMMENT AFTER REPEAT+NL
// 603 LOOP FLAG = 1
LOOPFLAG = 1;
// 604 LINE BASE = LINE BASE-1 %C
L_007C:;
LINEBASE = LINEBASE - 1;
if (*_imp_BYTEINTEGER(LINEBASE) == 10) goto L_007D;
goto L_007C;
L_007D:;
// 605+ %UNTIL BYTEINTEGER(LINE BASE) = NL
// 606 SIZE = CURROUT-LINE BASE
SIZE = CURROUT - LINEBASE;
// 607 %FINISH
L_007B:;
// 608 CURROUT = CURROUT-2; SIZE = SIZE-2
CURROUT = CURROUT - 2;
SIZE = SIZE - 2;
// 609 ! TO REMOVE SPACES AFTER SEMI"S
// 610 %IF EXTEND COMMENTS # 0 %AND CSTART < SIZE %START
if (EXTENDCOMMENTS == 0) goto L_007E;
if (CSTART >= SIZE) goto L_007E;
// 611 P = CSTART; ! REMEMBER IT JUST IN CASE
P = CSTART;
// 612 N = EXT NUM; ! NUMBER OF EXTENSION TRIES
N = EXTNUM;
// 613
// 614 %CYCLE
L_007F:;
// 615 %EXIT %IF N <= 0
if (N > 0) goto L_0080;
goto L_0081;
L_0080:;
// 616 CSTART = CSTART+COMMENT EXTENSION
CSTART = CSTART + COMMENTEXTENSION;
// 617 %EXIT %IF CSTART >= SIZE
if (CSTART < SIZE) goto L_0082;
goto L_0081;
L_0082:;
// 618 N = N-1
N = N - 1;
// 619 %REPEAT
goto L_007F;
L_0081:;
// 620
// 621 CSTART = P %IF N <= 0 %C
if (N <= 0) goto L_0083;
if (CS + CSTART <= COMMENTLINE) goto L_0084;
L_0083:;
CSTART = P;
L_0084:;
// 622+ %OR CS+CSTART > COMMENT LINE
// 623 ! RESTORE IT IF TOO LONG
// 624 %FINISH
L_007E:;
// 625 %IF CSTART < SIZE %START
if (CSTART >= SIZE) goto L_0085;
// 626 %IF CMODE # 0 %THEN CSTART = 0 %ELSE BREAK
if (CMODE == 0) goto L_0086;
CSTART = 0;
goto L_0087;
L_0086:;
BREAK();
L_0087:;
// 627 %FINISH %ELSE %START
goto L_0088;
L_0085:;
// 628 D = COMMENT LINE-CSTART-CS
D = COMMENTLINE - CSTART - CS;
// 629 %IF D < 0 %AND BREAK COMMENTS = 0 %START
if (D >= 0) goto L_0089;
if (BREAKCOMMENTS != 0) goto L_0089;
// 630 CSTART = LINE SIZE-CS
CSTART = LINESIZE - CS;
// 631 BREAK
BREAK();
// 632 D = 0
D = 0;
// 633 %FINISH
L_0089:;
// 634 %FINISH
L_0088:;
// 635 %FINISH %ELSE %START
goto L_008A;
L_007A:;
// 636 D = COMMENT LINE-CSTART-CS
D = COMMENTLINE - CSTART - CS;
// 637 %IF D < 0 %AND BREAKCOMMENTS = 0 %THEN %START
if (D >= 0) goto L_008B;
if (BREAKCOMMENTS != 0) goto L_008B;
// 638 CSTART = COMMENT LINE-CS
CSTART = COMMENTLINE - CS;
// 639 D = 0
D = 0;
// 640 %FINISH
L_008B:;
// 641 %FINISH
L_008A:;
// 642
// 643 %CYCLE
L_008C:;
// 644 N = CSTART-SIZE
N = CSTART - SIZE;
// 645
// 646 %WHILE N > 0 %CYCLE
L_008D:;
if (N <= 0) goto L_008E;
// 647 N = N-1; CURROUT = CURROUT+1
N = N - 1;
CURROUT = CURROUT + 1;
// 648 BYTEINTEGER(CURROUT) = ' '
*_imp_BYTEINTEGER(CURROUT) = 32;
// 649 %REPEAT
goto L_008D;
L_008E:;
// 650
// 651 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 652 BYTEINTEGER(CURROUT) = '!'
*_imp_BYTEINTEGER(CURROUT) = 33;
// 653 CURROUT = CURROUT+1 %C
if (STATUS & 32 == 0) goto L_008F;
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 42;
L_008F:;
// 654+ %AND BYTEINTEGER(CURROUT) = '*' %C
// 655+ %IF STATUS&32 # 0
// 656 P = J
P = J;
// 657 %IF D < 0 %START
if (D >= 0) goto L_0090;
// 658 P = J+D
P = J + D;
// 659 P = P-1 %WHILE BYTEINTEGER(P) # ' ' %C
L_0091:;
if (*_imp_BYTEINTEGER(P) == 32) goto L_0092;
if (*_imp_BYTEINTEGER(P) == 44) goto L_0092;
if (*_imp_BYTEINTEGER(P) == 46) goto L_0092;
if (P <= CURRIN) goto L_0092;
P = P - 1;
goto L_0091;
L_0092:;
// 660+ %AND BYTEINTEGER(P) # ',' %C
// 661+ %AND BYTEINTEGER(P) # '.' %AND P > CURRIN
// 662 P = P-1
P = P - 1;
// 663 P = J+D %IF P = CURRIN
if (P != CURRIN) goto L_0093;
P = J + D;
L_0093:;
// 664 %FINISH
L_0090:;
// 665
// 666 %CYCLE K = CURRIN+1,1,P
// %for K = CURRIN + 1, 1, P %cycle
{
int _initial = CURRIN + 1, _final = P;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = CURRIN + 1, 1, P");
K = _initial - (1);
L_0094:
if (K == _final) goto L_0095;
K += 1;
// 667 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 668 BYTEINTEGER(CURROUT) = BYTEINTEGER(K)
*_imp_BYTEINTEGER(CURROUT) = *_imp_BYTEINTEGER(K);
// 669 %REPEAT
goto L_0094;
}
L_0095:;
// 670
// 671 CURRIN = P
CURRIN = P;
// 672 %EXIT %IF D >= 0
if (D < 0) goto L_0096;
goto L_0097;
L_0096:;
// 673 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 674 BYTEINTEGER(CURROUT) = NL
*_imp_BYTEINTEGER(CURROUT) = 10;
// 675 SIZE = 0; D = LINE LENGTH-MARGIN+D
SIZE = 0;
D = LINELENGTH - MARGIN + D;
// 676 %REPEAT
goto L_008C;
L_0097:;
// 677
// 678 BYTEINTEGER(CURROUT) = NL
*_imp_BYTEINTEGER(CURROUT) = 10;
// 679 %IF LOOP FLAG # 0 %START
if (LOOPFLAG == 0) goto L_0098;
// 680 LOOP FLAG = 0
LOOPFLAG = 0;
// 681 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 682 %FINISH
L_0098:;
// 683 SIZE = 0; LINE BASE = CURROUT; LAST SEP = NL
SIZE = 0;
LINEBASE = CURROUT;
LASTSEP = 10;
// 684 ! END OF COMMENT HANDLING
// 685 %FINISH %ELSE %START
goto L_0099;
L_006C:;
// 686 N = 0
N = 0;
// 687 %IF STATUS&64 # 0 %START
if (STATUS & 64 == 0) goto L_009A;
// 688 N = DELTA MARGIN
N = DELTAMARGIN;
// 689 N = MARGIN %IF EXTRA MARGIN # 0
if (EXTRAMARGIN == 0) goto L_009B;
N = MARGIN;
L_009B:;
// 690 %FINISH
L_009A:;
// 691 STAT = STAT-N
STAT = STAT - N;
// 692 CURROUT = CURROUT+1 %C
L_009C:;
if (CURROUT >= STAT) goto L_009D;
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 32;
goto L_009C;
L_009D:;
// 693+ %AND BYTEINTEGER(CURROUT) = ' ' %C
// 694+ %WHILE CURROUT < STAT
// 695 LIMIT = CURROUT+LINELENGTH-MARGIN+N %C
if (LASTSEP == 59) goto L_009E;
LIMIT = CURROUT + LINELENGTH - MARGIN + N;
L_009E:;
// 696+ %IF LAST SEP # ';'
// 697
// 698 %CYCLE
L_009F:;
// 699 RP = RP+1; N = REC(RP); %EXIT %IF N = 0
RP = RP + 1;
N = REC[RP - 1];
if (N != 0) goto L_00A0;
goto L_00A1;
L_00A0:;
// 700 %IF N > 0 %THEN %START
if (N <= 0) goto L_00A2;
// 701 SN = KEYWORD(N)+KEYBASE
SN = KEYWORD[N - 1] + KEYBASE;
// 702 FLAG = KFLAGS(N)
FLAG = KFLAGS[N - 1];
// 703 Z = SFLAGS(N)
Z = SFLAGS[N - 1];
// 704 SLENGTH = BYTEINTEGER(SN)
SLENGTH = *_imp_BYTEINTEGER(SN);
// 705 %FINISH %ELSE %START
goto L_00A3;
L_00A2:;
// 706 SN = STRINGS(-N)
SN = STRINGS[-N - 1];
// 707 FLAG = 0; Z = 0
FLAG = 0;
Z = 0;
// 708 SLENGTH = TLENGTH(-N)
SLENGTH = TLENGTH[-N - 1];
// 709 %FINISH
L_00A3:;
// 710 %IF RP >= RPLIM %C
if (RP >= RPLIM) goto L_0069;
if (SLENGTH + CURROUT <= LIMIT) goto L_00A4;
if (N > 51) goto L_00A4;
L_0069:;
CONTINUE();
L_00A4:;
// 711+ %OR (SLENGTH+CURROUT > LIMIT %C
// 712+ %AND N <= LAST TEXT) %THEN CONTINUE
// 713 %IF Z # 0 %START
if (Z == 0) goto L_00A5;
// 714 NEST(Z) = CURROUT-LINE BASE
[/*BUG*/ 0] = CURROUT - LINEBASE;
// 715 REM(Z) = RP
REM[Z - 1] = RP;
// 716 %FINISH
L_00A5:;
// 717 SPACE %IF FLAG&OPTIONS&15 # 0 %C
if (FLAG & OPTIONS & 15 != 0) goto L_00A6;
if ((PMODE ^ FLAG) & 128 != 0) goto L_00A7;
L_00A6:;
SPACE();
L_00A7:;
// 718+ %OR (PMODE!!FLAG)&128 = 0
// 719 PERCENT %IF FLAG&PMODE # 0
if (FLAG & PMODE == 0) goto L_00A8;
PERCENT();
L_00A8:;
// 720 %CYCLE J=SN+1, 1, SN+BYTEINTEGER(SN)
// %for J = SN + 1, 1, SN + *_imp_BYTEINTEGER(SN) %cycle
{
int _initial = SN + 1, _final = SN + *_imp_BYTEINTEGER(SN);
if (invalid_for_loop(_initial, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle J = SN + 1, 1, SN + *_imp_BYTEINTEGER(SN)");
J = _initial - (1);
L_00A9:
if (J == _final) goto L_00AA;
J += 1;
// ?Non-local
// 721 CURROUT=CURROUT+1
CURROUT = CURROUT + 1;
// 722 BYTEINTEGER(CURROUT)=BYTEINTEGER(J)
*_imp_BYTEINTEGER(CURROUT) = *_imp_BYTEINTEGER(J);
// 723 %REPEAT
goto L_00A9;
}
L_00AA:;
// 724 SPACE %IF FLAG&OPTIONS&120 # 0
if (FLAG & OPTIONS & 120 == 0) goto L_00AC;
SPACE();
L_00AC:;
// 725 PMODE = 128 %UNLESS 0 < N <= LAST TEXT
{
// Double-sided test on N (Part I)
int tmp;
if (0 >= (tmp = N)) goto L_00AB;
// Double-sided test on N (Part II)
if (tmp <= 51) goto L_00AD;
}
L_00AB:;
PMODE = 128;
L_00AD:;
// 726 %REPEAT
goto L_009F;
L_00A1:;
// 727
// 728 -> OWNS %IF OWNFLAG = 0
if (OWNFLAG != 0) goto L_00AE;
goto U_1001;
L_00AE:;
// 729 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 730 BYTEINTEGER(CURROUT) = THIS SEP
*_imp_BYTEINTEGER(CURROUT) = THISSEP;
// 731 LAST SEP = THIS SEP
LASTSEP = THISSEP;
// 732 %IF LOOP FLAG # 0 %AND STATUS&2 # 0 %START
if (LOOPFLAG == 0) goto L_00AF;
if (STATUS & 2 == 0) goto L_00AF;
// 733 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 10;
// 734 %FINISH
L_00AF:;
// 735 %IF STATUS&1 # 0 %THEN %START
if (STATUS & 1 == 0) goto L_00B0;
// 736 ! UP
// 737 LEVEL = LEVEL<<1
LEVEL = LEVEL << 1;
// 738 LEVEL = LEVEL!1 %IF STATUS&128 # 0
if (STATUS & 128 == 0) goto L_00B1;
LEVEL = LEVEL | 1;
L_00B1:;
// 739 MLIMIT = MLIMIT<<1
MLIMIT = MLIMIT << 1;
// 740 MLIMIT = MLIMIT!1 %C
if (MARGIN >= MAXMARGIN) goto L_00B2;
if (INDENTBLOCKS != 0) goto L_00B3;
if (STATUS & 128 == 0) goto L_00B3;
L_00B2:;
MLIMIT = MLIMIT | 1;
L_00B3:;
// 741+ %IF MARGIN >= MAX MARGIN %OR ( %C
// 742+ INDENT BLOCKS = 0 %AND STATUS&128 # 0)
// 743 %IF MARGIN = 0 %AND EXTRA MARGIN # 0 %C
if (MARGIN != 0) goto L_00B4;
if (EXTRAMARGIN == 0) goto L_00B4;
MARGIN = INITIALMARGIN;
goto L_00B5;
L_00B4:;
// 744+ %THEN MARGIN = INITIAL MARGIN %ELSE %START
// 745 MARGIN = MARGIN+DELTA MARGIN %IF MLIMIT&1 = 0
if (MLIMIT & 1 != 0) goto L_00B6;
MARGIN = MARGIN + DELTAMARGIN;
L_00B6:;
// 746 %FINISH
L_00B5:;
// 747 %FINISH
L_00B0:;
// 748 %IF LAST SEP = ';' %THEN %START
if (LASTSEP != 59) goto L_00B7;
// 749 BYTEINTEGER(CURROUT+1) = ' '
*_imp_BYTEINTEGER(CURROUT + 1) = 32;
// 750 CURROUT = CURROUT+2
CURROUT = CURROUT + 2;
// 751 BYTEINTEGER(CURROUT) = ' '
*_imp_BYTEINTEGER(CURROUT) = 32;
// 752 %FINISH %ELSE LINE BASE = CURROUT
goto L_00B8;
L_00B7:;
LINEBASE = CURROUT;
L_00B8:;
// 753 %EXIT %IF CURRIN >= ENDOFFILE %OR STATUS&7 = 7
if (CURRIN >= ENDOFFILE) goto L_00B9;
if (STATUS & 7 != 7) goto L_00BA;
L_00B9:;
goto L_00BB;
L_00BA:;
// 754 %FINISH
L_0099:;
// 755 %FINISH
L_0047:;
// 756 %REPEAT
goto L_0034;
L_00BB:;
// 757
// 758 CLOSE FILES
CLOSEFILES();
// 759 %RETURN
return;
// 760
// 761 %ROUTINE SPACE
void SPACE(void) {
// 762 %IF ' ' # BYTEINTEGER(CURROUT) # NL %C
{
// Double-sided test on _imp_BYTEINTEGER(CURROUT) (Part I)
unsigned char tmp;
if (32 == (tmp = *_imp_BYTEINTEGER(CURROUT))) goto L_00BC;
// Double-sided test on _imp_BYTEINTEGER(CURROUT) (Part II)
if (tmp == 10) goto L_00BC;
}
if (*_imp_BYTEINTEGER(CURROUT) == 40) goto L_00BC;
// 763+ %AND BYTEINTEGER(CURROUT) # '(' %THEN %START
// 764 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' '
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 32;
// 765 PMODE = 128
PMODE = 128;
// 766 %FINISH
L_00BC:;
// 767 %END
return;
} /* end of SPACE */
// 768
// 769 %ROUTINE PERCENT
void PERCENT(void) {
// 770 %IF PMODE # 0 %THEN %START
if (PMODE == 0) goto L_00BD;
// 771 %IF ' ' # BYTEINTEGER(CURROUT) # NL %C
{
// Double-sided test on _imp_BYTEINTEGER(CURROUT) (Part I)
unsigned char tmp;
if (32 == (tmp = *_imp_BYTEINTEGER(CURROUT))) goto L_00BE;
// Double-sided test on _imp_BYTEINTEGER(CURROUT) (Part II)
if (tmp == 10) goto L_00BE;
}
if (*_imp_BYTEINTEGER(CURROUT) == 40) goto L_00BE;
// 772+ %AND BYTEINTEGER(CURROUT) # '(' %THEN %START
// 773 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' '
CURROUT = CURROUT + 1;
*_imp_BYTEINTEGER(CURROUT) = 32;
// 774 %FINISH
L_00BE:;
// 775 CURROUT = CURROUT+1
CURROUT = CURROUT + 1;
// 776 BYTEINTEGER(CURROUT) = '%'
*_imp_BYTEINTEGER(CURROUT) = 37;
// 777 PMODE = 0
PMODE = 0;
// 778 %FINISH
L_00BD:;
// 779 %END
return;
} /* end of PERCENT */
// 780 %END
return;
} /* end of SOAP */
// ?MOVEY unused
// ?MOVEX unused
// 781
// 782 %ROUTINE CONNEKT(%STRING (17) FILE, %INTEGERNAME MODE, FLAG)
static void CONNEKT(_imp_string17 FILE, int *MODE, int *FLAG) {
// 783 %INTEGER J
int J;
// 784 J = 0
J = 0;
// 785 !FDP(CONNEKTEP,FILE,MODE,ADDR(J),FLAG)
// 786 MODE = J
*MODE = J;
// 787 FLAG = 0 %IF FLAG = 5
if (*FLAG != 5) goto L_00BF;
*FLAG = 0;
L_00BF:;
// 788 %END
return;
} /* end of CONNEKT */
// ?FILE unused
// 789
// 790 %INTEGERFN PARSE(%INTEGER ENTRY)
static int PARSE(int ENTRY) {
// 791 !%SHORTROUTINE
// 792 %INTEGER SS, SP, TRP, TPT, L
int SS;
int SP;
int TRP;
int TPT;
int L;
// 793 %BYTEINTEGER MODES
unsigned char MODES;
// 794
// 795 %INTEGERFN PUT
int PUT(void) {
// 796 SPT = SPT-1
SPT = SPT - 1;
// 797 RP = RP+1
RP = RP + 1;
// 798 REC(RP) = SPT
REC[RP - 1] = SPT;
// 799 TLENGTH(-SPT) = SLENGTH
TLENGTH[-SPT - 1] = SLENGTH;
// 800 STRINGS(-SPT) = SAD
STRINGS[-SPT - 1] = SAD;
// 801 STRING(SAD) = ST
*_imp_STRING(SAD) = ST;
// 802 SAD = SAD+1+BYTEINTEGER(ADDR(ST))
SAD = SAD + 1 + *_imp_BYTEINTEGER(_imp_ADDR(/*?*/ &ST));
// 803 %RESULT = SPT
return SPT;
// 804 %END
} /* end of PUT */
// 805
// 806 %ROUTINE SYM
void SYM(void) {
// 807
// 808 %CYCLE
L_00C0:;
// 809 CURRIN = CURRIN+1; S = BYTEINTEGER(CURRIN)
CURRIN = CURRIN + 1;
S = *_imp_BYTEINTEGER(CURRIN);
// 810 MODE = 0 %UNLESS 'A' <= S <= 'Z'
{
// Double-sided test on S (Part I)
int tmp;
if (65 > (tmp = S)) goto L_000D;
// Double-sided test on S (Part II)
if (tmp <= 90) goto L_00C1;
}
L_000D:;
MODE = 0;
L_00C1:;
// 811 %IF S = '%' %THEN MODE = 32 %ELSE %START
if (S != 37) goto L_00C2;
MODE = 32;
goto L_00C3;
L_00C2:;
// 812 %IF S # ' ' %THEN %START
if (S == 32) goto L_00C4;
// 813 S = S+MODE
S = S + MODE;
// 814 %RETURN %IF S # 'C'+32 %C
if (S != 67 + 32) goto L_00C5;
if (*_imp_BYTEINTEGER(CURRIN + 1) == 10) goto L_00C6;
L_00C5:;
return;
L_00C6:;
// 815+ %OR BYTEINTEGER(CURRIN+1) # NL
// 816 CURRIN = CURRIN+1
CURRIN = CURRIN + 1;
// 817 MODE = 0
MODE = 0;
// 818 %FINISH
L_00C4:;
// 819 SPACES = PACK NAMES
SPACES = PACKNAMES;
// 820 %FINISH
L_00C3:;
// 821 %REPEAT
goto L_00C0;
// 822
// 823 %END
} /* end of SYM */
// 824
// 825 %INTEGERFN CONSTANT
int CONSTANT(void) {
// 826 %INTEGER T, LIM
int T;
int LIM;
// 827 %INTEGER CS
int CS;
// 828 SLENGTH = 0
SLENGTH = 0;
// 829 ST = ""
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 830 SYM
SYM();
// 831 CS = CURRIN %AND ST = ST.TOSTRING(S) %AND SYM %C
L_00C7:;
{
// Double-sided test on S (Part I)
int tmp;
if (48 > (tmp = S)) goto L_00C8;
// Double-sided test on S (Part II)
if (tmp <= 57) goto L_0005;
}
L_00C8:;
if (S == 46) goto L_0005;
if (S != 64) goto L_00C9;
L_0005:;
CS = CURRIN;
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &ST, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(S);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
SYM();
goto L_00C7;
L_00C9:;
// 832+ %WHILE '0' <= S <= '9' %OR S = '.' %OR S = '@'
// 833 CURRIN = CS %AND %RESULT = PUT %IF ST # ""
if (_imp_strcmp((_imp_string *)/*?*/ &ST, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) == 0) goto L_00CA;
CURRIN = CS;
return PUT();
L_00CA:;
// 834 %IF S = 'M' %OR S = 'X' %OR S = 'B' %THEN %START
if (S == 77) goto L_00CB;
if (S == 88) goto L_00CB;
if (S != 66) goto L_00CC;
L_00CB:;
// 835 ST = TOSTRING(S)
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string1) tmp; /*B*/
tmp = _imp_TOSTRING(S);
(void *)&tmp;
}),
/*max:*/ 255);
// 836 T = CURRIN
T = CURRIN;
// 837 SYM
SYM();
// 838 CURRIN = T %AND %RESULT = 0 %IF S # ''''
if (S == 39) goto L_00CD;
CURRIN = T;
return 0;
L_00CD:;
// 839 %FINISH
L_00CC:;
// 840 LIM = CURRIN+255
LIM = CURRIN + 255;
// 841
// 842 %WHILE S = '''' %CYCLE
L_00CE:;
if (S != 39) goto L_00CF;
// 843
// 844 %CYCLE
L_00D0:;
// 845 SLENGTH = BYTEINTEGER(ADDR(ST)) %C
if (S != 10) goto L_00D1;
if (SLENGTH != 0) goto L_00D1;
SLENGTH = *_imp_BYTEINTEGER(_imp_ADDR(/*?*/ &ST));
L_00D1:;
// 846+ %IF S = NL %AND SLENGTH = 0
// 847 ST = ST.TOSTRING(S)
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &ST, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(S);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 848 CURRIN = CURRIN+1
CURRIN = CURRIN + 1;
// 849 S = BYTEINTEGER(CURRIN)
S = *_imp_BYTEINTEGER(CURRIN);
// 850 %REPEAT %UNTIL S = '''' %OR CURRIN > LIM
if (S == 39) goto L_00D2;
if (CURRIN > LIM) goto L_00D2;
goto L_00D0;
L_00D2:;
// 851
// 852 ST = ST."'"
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &ST, (_imp_string *)/*?*/ _imp_str_literal_ptr("'"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 853 CS = CURRIN
CS = CURRIN;
// 854 SYM
SYM();
// 855 %REPEAT
goto L_00CE;
L_00CF:;
// 856
// 857 SLENGTH = BYTEINTEGER(ADDR(ST)) %IF SLENGTH = 0
if (SLENGTH != 0) goto L_00D3;
SLENGTH = *_imp_BYTEINTEGER(_imp_ADDR(/*?*/ &ST));
L_00D3:;
// 858 CURRIN = CS %AND %RESULT = PUT %IF ST # ""
if (_imp_strcmp((_imp_string *)/*?*/ &ST, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) == 0) goto L_00D4;
CURRIN = CS;
return PUT();
L_00D4:;
// 859 %RESULT = 0
return 0;
// 860 %END
} /* end of CONSTANT */
// 861
// 862 %INTEGERFN NAME
int NAME(void) {
// 863 %INTEGER Z
int Z;
// 864 SYM
SYM();
// 865 %RESULT = 0 %UNLESS 'A' <= S <= 'Z'
{
// Double-sided test on S (Part I)
int tmp;
if (65 > (tmp = S)) goto L_00D5;
// Double-sided test on S (Part II)
if (tmp <= 90) goto L_00D6;
}
L_00D5:;
return 0;
L_00D6:;
// 866 ST = ""
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 867
// 868 %CYCLE
L_00D7:;
// 869 SPACES = 1
SPACES = 1;
// 870 ST = ST.TOSTRING(S)
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &ST, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(S);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 871 Z = CURRIN
Z = CURRIN;
// 872 SYM
SYM();
// 873 SLENGTH = BYTEINTEGER(ADDR(ST)) %AND CURRIN = Z %C
{
// Double-sided test on S (Part I)
int tmp;
if (65 > (tmp = S)) goto L_00D8;
// Double-sided test on S (Part II)
if (tmp <= 90) goto L_00D9;
}
L_00D8:;
{
// Double-sided test on S (Part I)
int tmp;
if (48 > (tmp = S)) goto L_00DA;
// Double-sided test on S (Part II)
if (tmp <= 57) goto L_00D9;
}
L_00DA:;
SLENGTH = *_imp_BYTEINTEGER(_imp_ADDR(/*?*/ &ST));
CURRIN = Z;
return PUT();
L_00D9:;
// 874+ %AND %RESULT = PUT %C
// 875+ %UNLESS 'A' <= S <= 'Z' %OR '0' <= S <= '9'
// 876 ST = ST." " %IF SPACES = 0
if (SPACES != 0) goto L_00DB;
_imp_strncpy(/*?*/ &ST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &ST, (_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_00DB:;
// 877 %REPEAT
goto L_00D7;
// 878
// 879 %END
} /* end of NAME */
// 880 %SWITCH BIP(0 : 15)
int BIP_index;
int BIP_line;
char *BIP_file;
static const void *BIP[16] = {&&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing,
&&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing,
&&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing,
&&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing, &&case_BIP_missing};
// 881 !
// 882 TRP = RP
TRP = RP;
// 883 TPT = CURRIN
TPT = CURRIN;
// 884 MODES = MODE
MODES = MODE;
// 885 FAILURE:
U_1001:;
// 886 RP = TRP
RP = TRP;
// 887 CURRIN = TPT
CURRIN = TPT;
// 888 MODE = MODES
MODE = MODES;
// 889 ENTRY = ENTRY+1
ENTRY = ENTRY + 1;
// 890 SP = MAIN(ENTRY)
SP = MAIN[ENTRY - 1];
// 891 %RESULT = 1 %IF SP = 0
if (SP != 0) goto L_00DC;
return 1;
L_00DC:;
// 892 SUCCESS:
U_1002:;
// 893 SP = SP+1
SP = SP + 1;
// 894 SS = SUB(SP)
SS = SUB[SP - 2];
// 895 %RESULT = 0 %IF S S = 0
if (SS != 0) goto L_00DD;
return 0;
L_00DD:;
// 896 -> BIP(SS>>12&15)
BIP_line = __LINE__;
BIP_file = __FILE__;
BIP_index = (unsigned int)SS >> 12 & 15;
goto case_BIP_dispatch;
// 897 BIP(1): ! SUB-PHRASE
case_BIP_1:;
// 898 -> SUCCESS %IF PARSE(SS&X'FFF') = 0
if (PARSE(SS & 4095) != 0) goto L_00DF;
goto U_1002;
L_00DF:;
// 899 -> FAILURE
goto U_1001;
// 900 BIP(0): ! LITERAL
case_BIP_0:;
// 901 SS = SS&X'FFF'
SS = SS & 4095;
// 902 L = LITERAL(SS); ! LENGTH
L = LITERAL[SS - 1];
// 903
// 904 %CYCLE SS = SS+1,1,SS+L
// %for SS = SS + 1, 1, SS + L %cycle
{
int _initial = SS + 1, _final = SS + L;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle SS = SS + 1, 1, SS + L");
SS = _initial - (1);
L_00E0:
if (SS == _final) goto L_00E1;
SS += 1;
// 905 SYM
SYM();
// 906 -> FAILURE %UNLESS S = LITERAL(SS)
if (S == LITERAL[SS - 1]) goto L_00E3;
goto U_1001;
L_00E3:;
// 907 %REPEAT
goto L_00E0;
}
L_00E1:;
// 908
// 909 -> SUCCESS
goto U_1002;
// 910 BIP(15): ! (NAME)
case_BIP_15:;
// 911 -> SUCCESS %IF NAME # 0
if (NAME() == 0) goto L_00E4;
goto U_1002;
L_00E4:;
// 912 -> FAILURE
goto U_1001;
// 913 BIP(3): ! CONSTANT
case_BIP_3:;
// 914 -> SUCCESS %IF CONSTANT # 0
if (CONSTANT() == 0) goto L_00E5;
goto U_1002;
L_00E5:;
// 915 -> FAILURE
goto U_1001;
// 916 BIP(4): ! (*LOOP)
case_BIP_4:;
// 917 LOOP FLAG = 1 %IF ISOLATE LOOPS # 0
if (ISOLATELOOPS == 0) goto L_00E6;
LOOPFLAG = 1;
L_00E6:;
// 918 -> SUCCESS
goto U_1002;
// 919 BIP(5): ! (UP)
case_BIP_5:;
// 920 STATUS = STATUS!1; -> SUCCESS
STATUS = STATUS | 1;
goto U_1002;
// 921 BIP(6): ! (DOWN)
case_BIP_6:;
// 922 STATUS = STATUS!2; -> SUCCESS
STATUS = STATUS | 2;
goto U_1002;
// 923 BIP(7): ! (END)
case_BIP_7:;
// 924 STATUS = STATUS!4; -> SUCCESS
STATUS = STATUS | 4;
goto U_1002;
// 925 BIP(8): ! (OWN)
case_BIP_8:;
// 926 -> FAILURE %IF LEAVE OWNS # 0 %C
if (LEAVEOWNS == 0) goto L_00E7;
if (*_imp_BYTEINTEGER(CURRIN) == 42) goto L_00E7;
goto U_1001;
L_00E7:;
// 927+ %AND BYTEINTEGER(CURRIN) # '*'
// 928 ! MACHINE CODE
// 929 OWN FLAG = 0
OWNFLAG = 0;
// 930 RP = RP+1; REC(RP) = 0
RP = RP + 1;
REC[RP - 1] = 0;
// 931 ! TO FIDDLE THE END OF STAT.
// 932 THIS SEP = NL
THISSEP = 10;
// 933 -> SUCCESS
goto U_1002;
// 934 BIP(10): ! (SPECIAL COMMENT)
case_BIP_10:;
// 935 INBASE = INBASE+1; ! TO SET DISP PROPERLY
INBASE = INBASE + 1;
// 936 STATUS = STATUS!32
STATUS = STATUS | 32;
// 937 BIP(9): ! (COMMENT)
case_BIP_9:;
// 938 STATUS = STATUS!16
STATUS = STATUS | 16;
// 939 RP = RP+1; REC(RP) = CURRIN-INBASE-1
RP = RP + 1;
REC[RP - 1] = CURRIN - INBASE - 1;
// 940 -> SUCCESS
goto U_1002;
// 941 BIP(11): ! (*DEC)
case_BIP_11:;
// 942 STATUS = STATUS!64 %IF DECS RELATIVE # 0; -> SUCCESS
if (DECSRELATIVE == 0) goto L_00E8;
STATUS = STATUS | 64;
L_00E8:;
goto U_1002;
// 943 BIP(12): ! (*BLOCK)
case_BIP_12:;
// 944 STATUS = STATUS!64 %IF EXTRA MARGIN # 0
if (EXTRAMARGIN == 0) goto L_00E9;
STATUS = STATUS | 64;
L_00E9:;
// 945 STATUS = STATUS!128; -> SUCCESS
STATUS = STATUS | 128;
goto U_1002;
// 946 BIP(13): ! (*NULL)
case_BIP_13:;
// 947 STATUS = STATUS!8; -> SUCCESS
STATUS = STATUS | 8;
goto U_1002;
// 948 BIP(14): ! (S)
case_BIP_14:;
// 949 SYM
SYM();
// 950 -> FAILURE %UNLESS S = NL %OR S = ';'
if (S == 10) goto L_00EA;
if (S == 59) goto L_00EA;
goto U_1001;
L_00EA:;
// 951 THIS SEP = S
THISSEP = S;
// 952 THISSEP = NL %IF SPLIT STATS # 0
if (SPLITSTATS == 0) goto L_00EB;
THISSEP = 10;
L_00EB:;
// 953 RP = RP+1
RP = RP + 1;
// 954 REC(RP) = 0
REC[RP - 1] = 0;
// 955 -> SUCCESS
goto U_1002;
// 956 BIP(2): ! <>
case_BIP_2:;
// 957 RP = RP+1
RP = RP + 1;
// 958 REC(RP) = SS&X'FFF'
REC[RP - 1] = SS & 4095;
// 959 -> SUCCESS
goto U_1002;
// 960 %END
case_BIP_dispatch:
if (BIP_index < 0 || BIP_index > 15)
_imp_signalf(6, 3, BIP_index, "->BIP(%d) out of bounds at %s line %d", BIP_index, BIP_file, BIP_line);
goto *BIP[BIP_index - 0];
case_BIP_missing:
_imp_signalf(8, 2, BIP_index, "switch jump to undefined label BIP(%d): at %s line %d", BIP_index, BIP_file, BIP_line);
} /* end of PARSE */
// 961
// 962 %ROUTINE CREATE(%STRING (8) FILE, %INTEGERNAME SIZE, FLAG)
static void CREATE(_imp_string8 FILE, int *SIZE, int *FLAG) {
// 963 !FDP(CREATEEP,FILE,SIZE,0,FLAG)
// 964 SIZE = 3
*SIZE = 3;
// 965 %IF FLAG = 0 %OR FLAG = 3 %THEN CONNEKT(FILE,SIZE,FLAG)
if (*FLAG == 0) goto L_00E2;
if (*FLAG != 3) goto L_00EC;
L_00E2:;
CONNEKT(
*({
__typeof__(_imp_string8) tmp = FILE /*q*/;
(_imp_string17 *)&tmp;
})
,
SIZE, FLAG);
L_00EC:;
// 966 %END
return;
} /* end of CREATE */
// 967
// 968 %ROUTINE COMPRESS(%STRING (8) FILE)
static void COMPRESS(_imp_string8 FILE) {
// 969 %END
return;
} /* end of COMPRESS */
// ?FILE unused
// 970
// 971 %ROUTINE SET UP FILES(%STRING(*)%NAME S)
static void SETUPFILES(_imp_string *S) {
// 972 !%SHORTROUTINE
// 973 %INTEGER FLAG, SIZE
int FLAG;
int SIZE;
// 974 OK = 0
OK = 0;
// 975 INPUT = ""
_imp_strncpy(/*?*/ &INPUT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 976 OUTPUT = ""
_imp_strncpy(/*?*/ &OUTPUT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 977 OPTION FILE = ""
_imp_strncpy(/*?*/ &OPTIONFILE, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 978 INPUT = S %UNLESS S -> INPUT.("/").OUTPUT
if (_imp_resolve(*({
_imp_string tmp = *S;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &INPUT, *({
_imp_string tmp = _imp_str_literal("/");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &OUTPUT))
goto L_00ED;
_imp_strncpy(/*?*/ &INPUT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *S;
(void *)&tmp;
}),
/*max:*/ 255);
L_00ED:;
// 979 OPTION FILE = "" %UNLESS INPUT -> INPUT.(",").OPTION FILE
if (_imp_resolve(*({
_imp_string255 tmp = INPUT;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &INPUT, *({
_imp_string tmp = _imp_str_literal(",");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &OPTIONFILE))
goto L_00EE;
_imp_strncpy(/*?*/ &OPTIONFILE, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
L_00EE:;
// 980 OUTPUT = INPUT %IF OUTPUT = ""
if (_imp_strcmp((_imp_string *)/*?*/ &OUTPUT, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_00EF;
_imp_strncpy(/*?*/ &OUTPUT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = INPUT;
(void *)&tmp;
}),
/*max:*/ 255);
L_00EF:;
// 981 SIZE = 0
SIZE = 0;
// 982 !FDP(7, INPUT, 0, ADDR(SIZE), FLAG)
// 983 CURRIN = SIZE
CURRIN = SIZE;
// 984 %IF FLAG # 0 %THEN %START
if (FLAG == 0) goto L_00F0;
// 985 PRINTSTRING("CANNOT CONNECT ".INPUT); WRITE(FLAG,1)
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("CANNOT CONNECT "), (_imp_string *)/*?*/ &INPUT);
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_WRITE(FLAG, 1);
// 986 NEWLINE
_imp_NEWLINE();
// 987 %RETURN
return;
// 988 %FINISH
L_00F0:;
// 989 %IF INTEGER(CURRIN+12) # 0 %THEN %START
if (*_imp_INTEGER(CURRIN + 12) == 0) goto L_00F1;
// 990 PRINTSTRING(INPUT." IS NOT A SOURCE FILE\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &INPUT,
(_imp_string *)/*?*/ _imp_str_literal_ptr(" IS NOT A SOURCE FILE\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 991 %RETURN
return;
// 992 %FINISH
L_00F1:;
// 993 SIZE = INTEGER(CURRIN)
SIZE = *_imp_INTEGER(CURRIN);
// 994 %IF SIZE < 10 %THEN %START
if (SIZE >= 10) goto L_00F2;
// 995 PRINTSTRING(INPUT." IS A NULL FILE\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &INPUT, (_imp_string *)/*?*/ _imp_str_literal_ptr(" IS A NULL FILE\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 996 %RETURN
return;
// 997 %FINISH
L_00F2:;
// 998 ENDOFFILE = CURRIN+SIZE
ENDOFFILE = CURRIN + SIZE;
// 999 ENDOFFILE = ENDOFFILE-1 %WHILE BYTEINTEGER(ENDOFFILE) # NL
L_00F3:;
if (*_imp_BYTEINTEGER(ENDOFFILE) == 10) goto L_00F4;
ENDOFFILE = ENDOFFILE - 1;
goto L_00F3;
L_00F4:;
// 1000 CURROUT = ((SIZE*6)+4095)>>12;! I HOPE IT"S BIG ENOUGH
CURROUT = (unsigned int)SIZE * 6 + 4095 >> 12;
// 1001 SEGS = (CURROUT+15)>>4
SEGS = (unsigned int)CURROUT + 15 >> 4;
// 1002 CREATE("SP#WORK",CURROUT,FLAG)
CREATE(_imp_str_literal_size(8, "SP#WORK"), /*?*/ &CURROUT, /*?*/ &FLAG);
// 1003 %IF FLAG # 0 %THEN %START
if (FLAG == 0) goto L_00F5;
// 1004 PRINT STRING( "CANNOT CREATE WORK FILE"); WRITE(FLAG,1)
_imp_PRINTSTRING(_imp_str_literal("CANNOT CREATE WORK FILE"));
_imp_WRITE(FLAG, 1);
// 1005 NEWLINE
_imp_NEWLINE();
// 1006 %RETURN
return;
// 1007 %FINISH
L_00F5:;
// 1008 HEADER = CURROUT
HEADER = CURROUT;
// 1009 CURROUT = CURROUT+16
CURROUT = CURROUT + 16;
// 1010 BYTEINTEGER(CURROUT) = NL
*_imp_BYTEINTEGER(CURROUT) = 10;
// 1011 CURRIN = CURRIN+15
CURRIN = CURRIN + 15;
// 1012 INTEGER(HEADER) = 1<<16; ! JUST FOR TESTING
*_imp_INTEGER(HEADER) = 1 << 16;
// 1013 INTEGER(HEADER+4) = 16
*_imp_INTEGER(HEADER + 4) = 16;
// 1014 INTEGER(HEADER+8) = SEGS
*_imp_INTEGER(HEADER + 8) = SEGS;
// 1015 INTEGER(HEADER+12) = 0
*_imp_INTEGER(HEADER + 12) = 0;
// 1016 OK = 1
OK = 1;
// 1017 %END
return;
} /* end of SETUPFILES */
// 1018
// 1019 %ROUTINE CLOSE FILES
static void CLOSEFILES(void) {
// 1020 %ROUTINE NEWGENS
void NEWGENS(void) {
// 1021 %END
return;
} /* end of NEWGENS */
// 1022 %END
return;
} /* end of CLOSEFILES */
// ?NEWGENS unused
// 1023
// 1024 %ROUTINE SET OPTIONS
static void SETOPTIONS(void) {
// 1025 !%SHORTROUTINE
// 1026 %STRING (255) S, T
_imp_string255 S;
_imp_string255 T;
// 1027 %INTEGER J
int J;
// 1028 %BYTEINTEGER OPT FLAG
unsigned char OPTFLAG;
// 1029 !!%BYTEINTEGERARRAYFORMAT FM(1 : 31)
// 1030 %BYTEINTEGERARRAYNAME WORD
unsigned char *WORD;
// 1031
// 1032 %ROUTINE LINE(%STRING(*)%NAME S)
void LINE(_imp_string * S) {
// 1033 %INTEGER J
int J;
// 1034 %RETURN %IF OPT FLAG = 0
if (OPTFLAG != 0) goto L_00F6;
return;
L_00F6:;
// 1035 S = ""
*S = _imp_str_literal("");
// 1036
// 1037 %CYCLE
L_00F7:;
// 1038
// 1039 %CYCLE
L_00F8:;
// 1040 READSYMBOL(J) %UNTIL J # ' '
L_00F9:;
_imp_READSYMBOL(/*?*/ &J);
if (J != 32) goto L_00FA;
goto L_00F9;
L_00FA:;
// 1041 %EXIT %IF J = NL
if (J != 10) goto L_00FB;
goto L_00FC;
L_00FB:;
// 1042 S = S.TOSTRING(J)
*S = *
*({
_imp_string255 tmp = _imp_join(({
__typeof__(_imp_string255) tmp; /*D*/
tmp = *S;
(void *)&tmp;
}),
({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(J);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
})
;
// 1043 %REPEAT
goto L_00F8;
L_00FC:;
// 1044
// 1045 %REPEAT %UNTIL S # ""
if (_imp_strcmp((_imp_string *)S, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_00FD;
goto L_00F7;
L_00FD:;
// 1046
// 1047 %END
return;
} /* end of LINE */
// 1048
// 1049 %ROUTINE SET(%STRING(*)%NAME S)
void SET(_imp_string * S) {
// 1050 %STRING (255) N, OPT
_imp_string255 N;
_imp_string255 OPT;
// 1051 %INTEGER V, K, C, NUM
int V;
int K;
int C;
int NUM;
// 1052 %BYTEINTEGER NOT
unsigned char NOT;
// 1053 %CONSTSTRING (2) %ARRAY PARAM(1 : 31) = %C
const _imp_string2 PARAM[31] = {_imp_str_init("IB"), _imp_str_init("LB"), _imp_str_init("SB"), _imp_str_init("TB"),
_imp_str_init("SK"), _imp_str_init("PN"), _imp_str_init("SS"), _imp_str_init("CN"),
_imp_str_init("BC"), _imp_str_init("LS"), _imp_str_init("JA"), _imp_str_init("LR"),
_imp_str_init("SC"), _imp_str_init("DR"), _imp_str_init("SL"), _imp_str_init("SE"),
_imp_str_init("IL"), _imp_str_init("EM"), _imp_str_init("LO"), _imp_str_init("CR"),
_imp_str_init("EC"), _imp_str_init("MI"), _imp_str_init("LL"), _imp_str_init("CT"),
_imp_str_init("ML"), _imp_str_init("CE"), _imp_str_init("XN"), _imp_str_init("IM"),
_imp_str_init("SM"), _imp_str_init("CL"), _imp_str_init("LC")};
// 1054+ "IB", "LB", "SB", "TB", "SK", "PN", "SS", "CN", "BC",
// 1055+ "LS", "JA", "LR", "SC",
// 1056+ "DR", "SL", "SE", "IL", "EM",
// 1057+ "LO", "CR", "EC",
// 1058+ "MI", "LL", "CT", "ML",
// 1059+ "CE", "XN", "IM", "SM",
// 1060+ "CL", "LC"
// 1061 %OWNINTEGER PARAMS = 31, BOOLS = 21
static int PARAMS = 31;
static int BOOLS = 21;
// 1062 OPT = S
_imp_strncpy(/*?*/ &OPT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *S;
(void *)&tmp;
}),
/*max:*/ 255);
// 1063 NOT = 1; NUM = 0
NOT = 1;
NUM = 0;
// 1064 %IF S -> S.("=").N %THEN %START
if (!(_imp_resolve(*({
_imp_string tmp = *S;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)S, *({
_imp_string tmp = _imp_str_literal("=");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &N)))
goto L_00FE;
// 1065 NUM = -1; V = 0; J = ADDR(N)
NUM = -1;
V = 0;
J = _imp_ADDR(/*?*/ &N);
// 1066
// 1067 %CYCLE J = J+1,1,J+LENGTH(N)
// %for J = J + 1, 1, J + *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&N) %cycle
{
int _initial = J + 1, _final = J + *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &N);
if (invalid_for_loop(_initial, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle J = J + 1, 1, J + *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&N)");
J = _initial - (1);
L_00FF:
if (J == _final) goto L_0100;
J += 1;
// ?Non-local
// 1068 C = BYTEINTEGER(J)-'0'
C = *_imp_BYTEINTEGER(J) - 48;
// 1069 %UNLESS 0 <= C <= 9 %THEN %START
{
// Double-sided test on C (Part I)
int tmp;
if (0 > (tmp = C)) goto L_0044;
// Double-sided test on C (Part II)
if (tmp <= 9) goto L_0102;
}
L_0044:;
// 1070 PRINTSTRING(N." ?\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr(" ?\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1071 %RETURN
return;
// 1072 %FINISH
L_0102:;
// 1073 V = V*10+C
V = V * 10 + C;
// 1074 %REPEAT
goto L_00FF;
}
L_0100:;
// 1075
// 1076 %IF V > 255 %THEN %START
if (V <= 255) goto L_0103;
// 1077 PRINTSTRING(N." ?\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr(" ?\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1078 %RETURN
return;
// 1079 %FINISH
L_0103:;
// 1080 %FINISH
L_00FE:;
// 1081 NOT = 0 %IF NUM = 0 %AND S -> ("\").S
if (NUM != 0) goto L_0104;
if (!(_imp_resolve(*({
_imp_string tmp = *S;
(_imp_string255 *)&tmp;
}),
0 /*NULL*/, *({
_imp_string tmp = _imp_str_literal("\\");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)S)))
goto L_0104;
NOT = 0;
L_0104:;
// 1082
// 1083 %CYCLE J = 1,1,PARAMS
// %for J = 1, 1, PARAMS %cycle
{
int _final = PARAMS;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, PARAMS");
J = 0;
L_0105:
if (J == _final) goto L_0106;
J += 1;
// ?Non-local
// 1084 %IF PARAM(J) = S %THEN %START
if (_imp_strcmp((_imp_string *)/*?*/ &PARAM[J - 1], (_imp_string *)S) != 0) goto L_0108;
// 1085 %IF (BOOLS-J)!!NUM < 0 %THEN %START
if (BOOLS - J ^ NUM >= 0) goto L_0109;
// 1086 PRINTSTRING(S."= ?\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = **({
_imp_string255 tmp = _imp_join(({
__typeof__(_imp_string255) tmp; /*D*/
tmp = *S;
(void *)&tmp;
}),
(_imp_string *)/*?*/ _imp_str_literal_ptr("= ?\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1087 %RETURN
return;
// 1088 %FINISH
L_0109:;
// 1089 K = NOT; K = V %IF NUM < 0
K = NOT;
if (NUM >= 0) goto L_010A;
K = V;
L_010A:;
// 1090 WORD(J) = K
[/*BUG*/ 0] = K;
// 1091 OPLIST = OPLIST." ".OPT
_imp_strncpy(/*?*/ &OPLIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &OPLIST,
(_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ &OPT);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 1092 %RETURN
return;
// 1093 %FINISH
L_0108:;
// 1094 %REPEAT
goto L_0105;
}
L_0106:;
// 1095
// 1096 PRINTSTRING(S." ?\n")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = **({
_imp_string255 tmp = _imp_join(({
__typeof__(_imp_string255) tmp; /*D*/
tmp = *S;
(void *)&tmp;
}),
(_imp_string *)/*?*/ _imp_str_literal_ptr(" ?\\n"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1097 %END
return;
} /* end of SET */
// 1098 OPLIST = "\n!! OPTIONS:"
_imp_strncpy(/*?*/ &OPLIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("\\n!! OPTIONS:");
(void *)&tmp;
}),
/*max:*/ 255);
// 1099 !!WORD == ARRAY(ADDR(ISOLATE BRACKETS),FM)
// 1100 OK = 1
OK = 1;
// 1101 %IF OPTIONFILE # "" %THEN %START
if (_imp_strcmp((_imp_string *)/*?*/ &OPTIONFILE, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) == 0) goto L_010B;
// 1102 OK = 0
OK = 0;
// 1103 OPT FLAG = 0
OPTFLAG = 0;
// 1104 %IF OPTIONFILE -> ("[").S %THEN %START
if (!(_imp_resolve(*({
_imp_string255 tmp = OPTIONFILE;
(_imp_string255 *)&tmp;
}),
0 /*NULL*/, *({
_imp_string tmp = _imp_str_literal("[");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &S)))
goto L_010C;
// 1105 OPT FLAG = 0 %IF S -> S.("]")
if (!(_imp_resolve(*({
_imp_string255 tmp = S;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &S, *({
_imp_string tmp = _imp_str_literal("]");
(_imp_string255 *)&tmp;
}),
0 /*NULL*/)))
goto L_010D;
OPTFLAG = 0;
L_010D:;
// 1106 S = S.",*"
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr(",*"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 1107 %FINISH %ELSE %START
goto L_010E;
L_010C:;
// 1108 OPT FLAG = 1
OPTFLAG = 1;
// 1109 PROMPT("OPTIONS:")
_imp_PROMPT(_imp_str_literal_size(15, "OPTIONS:"));
// 1110 !DEFINE("ST76,".OPTION FILE)
// 1111 SELECTINPUT(76)
_imp_SELECTINPUT(76);
// 1112 %FINISH
L_010E:;
// 1113
// 1114 %CYCLE
L_010F:;
// 1115 LINE(S)
LINE((_imp_string255 *)/*p*/ /*?*/ &S);
// 1116 SET(T) %WHILE S -> T.(",").S
L_0110:;
if (!(_imp_resolve(*({
_imp_string255 tmp = S;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &T, *({
_imp_string tmp = _imp_str_literal(",");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &S)))
goto L_0111;
SET((_imp_string255 *)/*p*/ /*?*/ &T);
goto L_0110;
L_0111:;
// 1117 %EXIT %IF S = "*"
if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("*")) != 0) goto L_0112;
goto L_0113;
L_0112:;
// 1118 SET(S)
SET((_imp_string255 *)/*p*/ /*?*/ &S);
// 1119 %REPEAT
goto L_010F;
L_0113:;
// 1120
// 1121 %IF CHARNO(OUTPUT,1) = '.' %START
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &OUTPUT, 1) != 46) goto L_0114;
// 1122 ! SHOW OPTIONS
// 1123 STRING(CURROUT) = OPLIST."\n\n"
*_imp_STRING(CURROUT) =
*({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &OPLIST, (_imp_string *)/*?*/ _imp_str_literal_ptr("\\n\\n"));
(_imp_string255 *)&tmp;
})
;
// 1124 BYTEINTEGER(CURROUT) = NL
*_imp_BYTEINTEGER(CURROUT) = 10;
// 1125 CURROUT = CURROUT+LENGTH(OPLIST)+2
CURROUT = CURROUT + *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &OPLIST) + 2;
// 1126 %FINISH
L_0114:;
// 1127 %FINISH
L_010B:;
// 1128 DELTA MARGIN = MI
DELTAMARGIN = MI;
// 1129 LINE LENGTH = LL
LINELENGTH = LL;
// 1130 COMMENT TAB = CT
COMMENTTAB = CT;
// 1131 MAXMARGIN = ML
MAXMARGIN = ML;
// 1132 SEC MARGIN = SECONDARY MARGIN
SECMARGIN = SECONDARYMARGIN;
// 1133 %UNLESS 40 < LINELENGTH < 133 %THEN %START
{
// Double-sided test on LINELENGTH (Part I)
int tmp;
if (40 >= (tmp = LINELENGTH)) goto L_0107;
// Double-sided test on LINELENGTH (Part II)
if (tmp < 133) goto L_0115;
}
L_0107:;
// 1134 PRINT STRING( "INVALID LINE LENGTH\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID LINE LENGTH\\n"));
// 1135 %RETURN
return;
// 1136 %FINISH
L_0115:;
// 1137 %UNLESS 0 < COMMENT TAB < LINE LENGTH-20 %THEN %START
{
// Double-sided test on COMMENTTAB (Part I)
int tmp;
if (0 >= (tmp = COMMENTTAB)) goto L_0116;
// Double-sided test on COMMENTTAB (Part II)
if (tmp < LINELENGTH - 20) goto L_0117;
}
L_0116:;
// 1138 PRINT STRING( "INVALID COMMENT MARGIN\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID COMMENT MARGIN\\n"));
// 1139 %RETURN
return;
// 1140 %FINISH
L_0117:;
// 1141 %UNLESS MAX MARGIN < LINE LENGTH-20 %THEN %START
if (MAXMARGIN < LINELENGTH - 20) goto L_0118;
// 1142 PRINT STRING( "INVALID MAX MARGIN\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID MAX MARGIN\\n"));
// 1143 %RETURN
return;
// 1144 %FINISH
L_0118:;
// 1145 %UNLESS DELTA MARGIN <= MAX MARGIN<<1 %START
if (DELTAMARGIN <= MAXMARGIN << 1) goto L_0119;
// 1146 PRINT STRING( "INVALID MARGIN INCREMENT\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID MARGIN INCREMENT\\n"));
// 1147 %RETURN
return;
// 1148 %FINISH
L_0119:;
// 1149 %IF SEC MARGIN > DELTA MARGIN<<1+SAFETY FACTOR %START
if (SECMARGIN <= (DELTAMARGIN << 1) + SAFETYFACTOR) goto L_011A;
// 1150 PRINT STRING( "INVALID SECONDARY MARGIN\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID SECONDARY MARGIN\\n"));
// 1151 %RETURN
return;
// 1152 %FINISH
L_011A:;
// 1153 %IF INITIAL MARGIN > 30 %THEN %START
if (INITIALMARGIN <= 30) goto L_011B;
// 1154 PRINT STRING( "INVALID INITIAL MARGIN\n")
_imp_PRINTSTRING(_imp_str_literal("INVALID INITIAL MARGIN\\n"));
// 1155 %RETURN
return;
// 1156 %FINISH
L_011B:;
// 1157 MARGIN = 1 %IF DELTA MARGIN = 0 %AND SEC MARGIN = 0 %C
if (DELTAMARGIN != 0) goto L_011C;
if (SECMARGIN != 0) goto L_011C;
if (INITIALMARGIN != 0) goto L_011C;
MARGIN = 1;
L_011C:;
// 1158+ %AND INITIAL MARGIN = 0
// 1159 MARGIN = INITIAL MARGIN %IF EXTRA MARGIN # 0
if (EXTRAMARGIN == 0) goto L_011D;
MARGIN = INITIALMARGIN;
L_011D:;
// 1160 SPLIT CONDS = 1 %IF SPLIT KEYWORDS # 0
if (SPLITKEYWORDS == 0) goto L_011E;
SPLITCONDS = 1;
L_011E:;
// 1161 COMMENT LENGTH = LINE LENGTH-COMMENT TAB
COMMENTLENGTH = LINELENGTH - COMMENTTAB;
// 1162 TEXTBASE = ADDR(SYMFILE(0))
TEXTBASE = _imp_ADDR(/*?*/ &SYMFILE[0]);
// 1163 KEYBASE = ADDR(KEYSYMS(1))
KEYBASE = _imp_ADDR(/*?*/ &KEYSYMS[0]);
// 1164 RMARGIN = COMMENT LIMIT
RMARGIN = COMMENTLIMIT;
// 1165 FULL LINE = LINE LENGTH
FULLLINE = LINELENGTH;
// 1166 LINE LENGTH = LINE LENGTH-SAFETY FACTOR
LINELENGTH = LINELENGTH - SAFETYFACTOR;
// 1167 OPTIONS = 17*SPLIT KEYWORDS+34*SPLIT CONDS+SPACE LISTS<<6 %C
OPTIONS =
17 * SPLITKEYWORDS + 34 * SPLITCONDS + (SPACELISTS << 6) + (ISOLATEBRACKETS << 2) + (SPACEEQUALS << 3) + 128;
// 1168+ +ISOLATE BRACKETS<<2+SPACE EQUALS<<3+128
// 1169 LINE BASE = CURROUT; SIZE = 0
LINEBASE = CURROUT;
SIZE = 0;
// 1170 COMMENT FLAG = JUSTIFY ALL<<1!COMMENTSNORMAL
COMMENTFLAG = JUSTIFYALL << 1 | COMMENTSNORMAL;
// 1171 COMMENT FLAG = COMMENT FLAG!!B'010'
COMMENTFLAG = COMMENTFLAG ^ 2;
// 1172 FIRST DISP = DELTA MARGIN-INITIAL MARGIN
FIRSTDISP = DELTAMARGIN - INITIALMARGIN;
// 1173 COMMENT LINE = FULL LINE %IF COMMENT LINE = 0
if (COMMENTLINE != 0) goto L_011F;
COMMENTLINE = FULLLINE;
L_011F:;
// 1174 OK = 1
OK = 1;
// 1175 %END
return;
} /* end of SETOPTIONS */
// 1176
// 1177 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 1178 SOAP("test.imp") ;! need CLIPARAM ...
SOAP(_imp_str_literal_size(128, "test.imp"));
// 1179 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}