#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:;
}