#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %BEGIN

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2  %STRING(255)%FN PRINTNAME(%INTEGER N)

  _imp_string255 PRINTNAME(int N) {
    //     3  %INTEGER V, K

    int V;
    int K;

    //     4  %owninteger count=0

    static int COUNT = 0;

    //     5        count=count+1

    COUNT = COUNT + 1;

    //     6         %if count=1 %then %result="JAMES"

    if (COUNT != 1) goto L_0001;
    return *(_imp_string255 *)/*?*/ _imp_str_literal_ptr("JAMES");
  L_0001:;

  //     7        %if count=2 %then %result="JIM"

    if (COUNT != 2) goto L_0002;
    return *(_imp_string255 *)/*?*/ _imp_str_literal_ptr("JIM");
  L_0002:;

  //     8        %result="???"

    return *(_imp_string255 *)/*?*/ _imp_str_literal_ptr("???");

    //     9  %END

  } /* end of PRINTNAME */

  // ?K unused
  // ?V unused
  // ?N unused
  //    10
  //    11  %STRING(255)%FN MESSAGE(%INTEGER N)

  _imp_string255 MESSAGE(int N) {
    //    12  !***********************************************************************
    //    13  !*       OUTPUTS AN ERROR MESSAGE STORED IN A COMPRESSED FORMAT        *
    //    14  !*       1  %REPEAT is not required                                    *
    //    15  !*       2  Label & has already been set in this block                 *
    //    16  !*       4  & is not a Switch name at current textual level            *
    //    17  !*       5  Switch name & in expression or assignment                  *
    //    18  !*       6  Switch label &(#) set a second time                        *
    //    19  !*       7  Name & has already been declared                           *
    //    20  !*       8  Routine or fn & has more parameters than specified         *
    //    21  !*       9  Parameter # of & differs in type from specification        *
    //    22  !*      10  Routine or fn & has fewer parameters than specified        *
    //    23  !*      11  Label & referenced at line # has not been set              *
    //    24  !*      12  %CYCLE at line # has two control clauses                   *
    //    25  !*      13  %REPEAT for %CYCLE at line # is missing                    *
    //    26  !*      14  %END is not required                                       *
    //    27  !*      15  # %ENDs are missing                                        *
    //    28  !*      16  Name & has not been declared                               *
    //    29  !*      17  Name & does not require parameters or subscripts           *
    //    30  !*      18  # too few parameters provided for &                        *
    //    31  !*      19  # too many parameters provided for &                       *
    //    32  !*      20  # too few subscripts provided for array &                  *
    //    33  !*      21  # too many subscripts provided for array &                 *
    //    34  !*      22  Actual parameter # of & conflicts with specification       *
    //    35  !*      23  Routine name & in an expression                            *
    //    36  !*      24  Integer operator has Real operands                         *
    //    37  !*      25  Real expression in integer context                         *
    //    38  !*      26  # is not a valid %EVENT number                             *
    //    39  !*      27  & is not a routine name                                    *
    //    40  !*      28  Routine or fn & has specification but no body              *
    //    41  !*      29  %FUNCTION name & not in expression                         *
    //    42  !*      30  %RETURN outwith routine body                               *
    //    43  !*      31  %RESULT outwith fn or map body                             *
    //    44  !*      34  Too many textual levels                                    *
    //    45  !*      37  Array & has too many dimensions                            *
    //    46  !*      38  Array & has upper bound # less than lower bound            *
    //    47  !*      39  Size of Array & is more than X'FFFFFF' bytes               *
    //    48  !*      40  Declaration is not at head of block                        *
    //    49  !*      41  Constant cannot be evaluated at compile time               *
    //    50  !*      42  # is an invalid repetition factor                          *
    //    51  !*      43  %CONSTANT name & not in expression                         *
    //    52  !*      44  Invalid constant initialising & after # items              *
    //    53  !*      45  Array initialising items expected ## items given #         *
    //    54  !*      46  Invalid %EXTERNAL %EXTRINSIC or variable %SPEC             *
    //    55  !*      47  %ELSE already given at line #                              *
    //    56  !*      48  %ELSE invalid after %ON %EVENT                             *
    //    57  !*      49  Attempt to initialise %EXTRINSIC or %FORMAT &              *
    //    58  !*      50  Subscript of # is outwith the bounds of &                  *
    //    59  !*      51  %FINISH is not required                                    *
    //    60  !*      52  %REPEAT instead of %FINISH for %START at line #            *
    //    61  !*      53  %FINISH for %START at line # is missing                    *
    //    62  !*      54  %EXIT outwith %CYCLE %REPEAT body                          *
    //    63  !*      55  %CONTINUE outwith %CYCLE %REPEAT body                      *
    //    64  !*      56  %EXTERNALROUTINE & at wrong textual level                  *
    //    65  !*      57  Executable statement found at textual level zero           *
    //    66  !*      58  Program among external routines                            *
    //    67  !*      59  %FINISH instead of %REPEAT for %CYCLE at line #            *
    //    68  !*      61  Name & has already been used in this %FORMAT               *
    //    69  !*      62  & is not a %RECORD or %RECORD %FORMAT name                 *
    //    70  !*      63  %RECORD length is greater than # bytes                     *
    //    71  !*      64  Name & requires a subname in this context                  *
    //    72  !*      65  Subname & is not in the %RECORD %FORMAT                    *
    //    73  !*      66  Expression assigned to record &                            *
    //    74  !*      67  Records && and & have different formats                    *
    //    75  !*      69  Subname && is attached to & which is not of type %RECORD   *
    //    76  !*      70  String declaration has invalid max length of #             *
    //    77  !*      71  & is not a String variable                                 *
    //    78  !*      72  Arithmetic operator in a String expression                 *
    //    79  !*      73  Arithmetic constant in a String expression                 *
    //    80  !*      74  Resolution is not the correct format                       *
    //    81  !*      75  String expression contains a sub expression                *
    //    82  !*      76  String variable & in arithmetic expression                 *
    //    83  !*      77  String constant in arithmetic expression                   *
    //    84  !*      78  String operator '.' in arithmetic expression               *
    //    85  !*      80  Pointer variable & compared with expression                *
    //    86  !*      81  Pointer variable & equivalenced to expression              *
    //    87  !*      82  & is not a pointer name                                    *
    //    88  !*      83  && and & are not equivalent in type                        *
    //    89  !*      86  Global pointer && equivalenced to local &                  *
    //    90  !*      87  %FORMAT name & use in expression                           *
    //    91  !*      90  Untyped name & used in expression                          *
    //    92  !*      91  %FOR control variable & not integer                        *
    //    93  !*      92  %FOR clause has zero step                                  *
    //    94  !*      93  %FOR clause has noninteger number of traverses             *
    //    95  !*      95  Name & not valid in assembler                              *
    //    96  !*      96  Operand # not valid in assembler                           *
    //    97  !*      97  Assembler construction not valid                           *
    //    98  !*      98  Addressability                                             *
    //    99  !*      99  Facility not supported by target hardware                  *
    //   100  !*     101  Source line has too many continuations                     *
    //   101  !*     102  Workfile of # Kbytes is too small                          *
    //   102  !*     103  Dictionary completely full                                 *
    //   103  !*     104  Dictionary completely full                                 *
    //   104  !*     105  Too many textual levels                                    *
    //   105  !*     106  String constant too long                                   *
    //   106  !*     107  Compiler tables are completely full                        *
    //   107  !*     108  Condition too complicated                                  *
    //   108  !*     109  Compiler inconsistent                                      *
    //   109  !*     110  Input ended                                                *
    //   110  !*     201  Long integers are inefficient as subscripts                *
    //   111  !*     202  Name & not used                                            *
    //   112  !*     203  Label & not used                                           *
    //   113  !*     204  Global %FOR control variable &                             *
    //   114  !*     205  Name & not addressable                                     *
    //   115  !*     206  Semicolon in comment text                                  *
    //   116  !*     207  %CONSTANT variable & not initialised                       *
    //   117  !*     208  Unsupported precision used - nearest available substituted *
    //   118  !*     209  Target machine is word addressed?                          *
    //   119  !*     210  Redundant %ALIAS provided                                  *
    //   120  !*     255  SEE IMP MANUAL                                             *
    //   121  !***********************************************************************
    //   122  %CONSTBYTEINTEGERARRAY OUTTT(0:63)='?','A','B','C','D','E','F','G',

    const unsigned char OUTTT[64] = {63,  65,  66,  67,  68,  69,  70,  71,  72,
                                     73,  74,  75,  76,  77,  78,  79,  80,  81,
                                     82,  83,  84,  85,  86,  87,  88,  89,  90,
                                     38,  45,  47,  39,  40,  41,  97,  98,  99,
                                     100, 101, 102, 103, 104, 105, 106, 107, 108,
                                     109, 110, 111, 112, 113, 114, 115, 116, 117,
                                     118, 119, 120, 121, 122, 46,  37,  35,  [62 ... 63] = 63};

    //   123+                                         'H','I','J','K','L','M','N',
    //   124+                                         'O','P','Q','R','S','T','U',
    //   125+                                         'V','W','X','Y','Z','&','-',
    //   126+                                         '/','''','(',')',
    //   127+                                         'a','b','c','d','e','f','g',
    //   128+                                         'h','i','j','k','l','m','n',
    //   129+                                         'o','p','q','r','s','t','u',
    //   130+                                         'v','w','x','y','z','.','%',
    //   131+                                         '#','?'(2)
    //   132  %CONSTINTEGER WORDMAX= 780,DEFAULT= 776
    //   133  %CONSTshortINTEGERARRAY WORD(0:WORDMAX)=0,%C

    const short int WORD[781] = {
        0,     1,     32769, 32771, 32772, 32773, 2,     32775, 32776, 32777, 32778, 32780, 32781, 32782, 32783, 32784,
        4,     32776, 32771, 32772, 32785, 32786, 32788, 32789, 32790, 32792, 32794, 5,     32786, 32788, 32776, 32782,
        32795, 32797, 32798, 6,     32786, 32800, 32801, 32781, 32785, 32802, 32804, 7,     32805, 32776, 32777, 32778,
        32780, 32806, 8,     32808, 32797, 32810, 32776, 32777, 32811, 32812, 32814, 32815, 9,     32817, 32819, 32820,
        32776, 32821, 32782, 32823, 32824, 32825, 10,    32808, 32797, 32810, 32776, 32777, 32828, 32812, 32814, 32815,
        11,    32775, 32776, 32829, 32789, 32831, 32819, 32777, 32772, 32780, 32781, 12,    32832, 32789, 32831, 32819,
        32777, 32834, 32835, 32837, 13,    32769, 32839, 32832, 32789, 32831, 32819, 32771, 32840, 14,    32842, 32771,
        32772, 32773, 15,    32819, 32843, 32844, 32840, 16,    32805, 32776, 32777, 32772, 32780, 32806, 17,    32805,
        32776, 32845, 32772, 32846, 32812, 32797, 32848, 18,    32819, 32850, 32851, 32812, 32852, 32839, 32776, 19,
        32819, 32850, 32854, 32812, 32852, 32839, 32776, 20,    32819, 32850, 32851, 32848, 32852, 32839, 32855, 32776,
        21,    32819, 32850, 32854, 32848, 32852, 32839, 32855, 32776, 22,    32856, 32858, 32819, 32820, 32776, 32860,
        32862, 32825, 23,    32808, 32788, 32776, 32782, 32863, 32795, 24,    32864, 32866, 32777, 32868, 32869, 25,
        32868, 32795, 32782, 32871, 32873, 26,    32819, 32771, 32772, 32785, 32875, 32876, 32878, 27,    32776, 32771,
        32772, 32785, 32880, 32788, 28,    32808, 32797, 32810, 32776, 32777, 32825, 32882, 32883, 32884, 29,    32885,
        32788, 32776, 32772, 32782, 32795, 30,    32887, 32889, 32880, 32884, 31,    32891, 32889, 32810, 32797, 32893,
        32884, 34,    32894, 32854, 32792, 32895, 37,    32897, 32776, 32777, 32850, 32854, 32898, 38,    32897, 32776,
        32777, 32900, 32901, 32819, 32902, 32814, 32903, 32901, 39,    32904, 32820, 32897, 32776, 32771, 32811, 32814,
        32905, 32907, 40,    32908, 32771, 32772, 32789, 32911, 32820, 32784, 41,    32912, 32914, 32916, 32917, 32789,
        32919, 32804, 42,    32819, 32771, 32863, 32921, 32923, 32925, 43,    32927, 32788, 32776, 32772, 32782, 32795,
        44,    32929, 32931, 32933, 32776, 32936, 32819, 32937, 45,    32897, 32933, 32937, 32938, 32940, 32937, 32941,
        32819, 46,    32929, 32942, 32944, 32797, 32946, 32948, 47,    32949, 32778, 32941, 32789, 32831, 32819, 48,
        32949, 32921, 32936, 32950, 32876, 49,    32951, 32953, 32954, 32944, 32797, 32956, 32776, 50,    32958, 32820,
        32819, 32771, 32889, 32960, 32961, 32820, 32776, 51,    32963, 32771, 32772, 32773, 52,    32769, 32965, 32820,
        32963, 32839, 32967, 32789, 32831, 32819, 53,    32963, 32839, 32967, 32789, 32831, 32819, 32771, 32840, 54,
        32969, 32889, 32832, 32769, 32884, 55,    32970, 32889, 32832, 32769, 32884, 56,    32972, 32776, 32789, 32976,
        32792, 32794, 57,    32977, 32979, 32981, 32789, 32792, 32794, 32982, 58,    32983, 32985, 32986, 32988, 59,
        32963, 32965, 32820, 32769, 32839, 32832, 32789, 32831, 32819, 61,    32805, 32776, 32777, 32778, 32780, 32990,
        32782, 32783, 32956, 62,    32776, 32771, 32772, 32785, 32991, 32797, 32991, 32956, 32788, 63,    32991, 32993,
        32771, 32995, 32814, 32819, 32907, 64,    32805, 32776, 32997, 32785, 32999, 32782, 32783, 32873, 65,    33001,
        32776, 32771, 32772, 32782, 32960, 32991, 32956, 66,    33003, 33005, 32953, 33007, 32776, 67,    33009, 33011,
        33012, 32776, 33013, 33014, 33016, 69,    33001, 33011, 32771, 33018, 32953, 32776, 33020, 32771, 32772, 32820,
        32823, 32991, 70,    33021, 33023, 32777, 32921, 33026, 32993, 32820, 32819, 71,    32776, 32771, 32772, 32785,
        33021, 32946, 72,    33027, 32866, 32782, 32785, 33021, 32795, 73,    33027, 32931, 32782, 32785, 33021, 32795,
        74,    33029, 32771, 32772, 32960, 33031, 33033, 75,    33021, 32795, 33035, 32785, 33037, 32795, 76,    33021,
        32946, 32776, 32782, 33038, 32795, 77,    33021, 32931, 32782, 33038, 32795, 78,    33021, 32866, 33040, 32782,
        33038, 32795, 80,    33041, 32946, 32776, 33043, 32862, 32795, 81,    33041, 32946, 32776, 33045, 32953, 32795,
        82,    32776, 32771, 32772, 32785, 33048, 32788, 83,    33011, 33012, 32776, 32844, 32772, 33050, 32782, 32823,
        86,    33052, 33048, 33011, 33045, 32953, 33054, 32776, 87,    32956, 32788, 32776, 33055, 32782, 32795, 90,
        33056, 32788, 32776, 32990, 32782, 32795, 91,    33058, 32835, 32946, 32776, 32772, 32871, 92,    33058, 33059,
        32777, 32982, 33061, 93,    33058, 33059, 32777, 33062, 32878, 32820, 33064, 90,    33056, 32788, 32776, 32990,
        33066, 32946, 95,    32805, 32776, 32772, 32875, 32782, 33067, 96,    33069, 32819, 32772, 32875, 32782, 33067,
        97,    33071, 33073, 32772, 32875, 98,    33076, 99,    33079, 32772, 33081, 33083, 33084, 33086, 101,   33088,
        32831, 32777, 32850, 32854, 33090, 102,   33093, 32820, 32819, 33095, 32771, 32850, 33097, 103,   33098, 33100,
        33102, 104,   33098, 33100, 33102, 105,   32894, 32854, 32792, 32895, 106,   33021, 32931, 32850, 33103, 107,
        33104, 33106, 32844, 33100, 33102, 108,   33108, 32850, 33110, 109,   33104, 33113, 110,   33116, 33117, 201,
        33118, 33119, 32844, 33121, 33066, 32848, 202,   32805, 32776, 32772, 32990, 203,   32775, 32776, 32772, 32990,
        204,   33052, 33058, 32835, 32946, 32776, 205,   32805, 32776, 32772, 33124, 206,   33127, 32782, 33129, 33131,
        207,   32927, 32946, 32776, 32772, 33132, 208,   33135, 33138, 32990, 33140, 33141, 33143, 33145, 209,   33148,
        33150, 32771, 33152, 33153, 210,   33155, 33157, 32852, 255,   33159, 33160, 33161, 0};

    //   134+               1, 32769, 32771, 32772, 32773,     2, 32775, 32776,
    //   135+           32777, 32778, 32780, 32781, 32782, 32783, 32784,     4,
    //   136+           32776, 32771, 32772, 32785, 32786, 32788, 32789, 32790,
    //   137+           32792, 32794,     5, 32786, 32788, 32776, 32782, 32795,
    //   138+           32797, 32798,     6, 32786, 32800, 32801, 32781, 32785,
    //   139+           32802, 32804,     7, 32805, 32776, 32777, 32778, 32780,
    //   140+           32806,     8, 32808, 32797, 32810, 32776, 32777, 32811,
    //   141+           32812, 32814, 32815,     9, 32817, 32819, 32820, 32776,
    //   142+           32821, 32782, 32823, 32824, 32825,    10, 32808, 32797,
    //   143+           32810, 32776, 32777, 32828, 32812, 32814, 32815,    11,
    //   144+           32775, 32776, 32829, 32789, 32831, 32819, 32777, 32772,
    //   145+           32780, 32781,    12, 32832, 32789, 32831, 32819, 32777,
    //   146+           32834, 32835, 32837,    13, 32769, 32839, 32832, 32789,
    //   147+           32831, 32819, 32771, 32840,    14, 32842, 32771, 32772,
    //   148+           32773,    15, 32819, 32843, 32844, 32840,    16, 32805,
    //   149+           32776, 32777, 32772, 32780, 32806,    17, 32805, 32776,
    //   150+           32845, 32772, 32846, 32812, 32797, 32848,    18, 32819,
    //   151+           32850, 32851, 32812, 32852, 32839, 32776,    19, 32819,
    //   152+           32850, 32854, 32812, 32852, 32839, 32776,    20, 32819,
    //   153+           32850, 32851, 32848, 32852, 32839, 32855, 32776,    21,
    //   154+           32819, 32850, 32854, 32848, 32852, 32839, 32855, 32776,
    //   155+              22, 32856, 32858, 32819, 32820, 32776, 32860, 32862,
    //   156+           32825,    23, 32808, 32788, 32776, 32782, 32863, 32795,
    //   157+              24, 32864, 32866, 32777, 32868, 32869,    25, 32868,
    //   158+           32795, 32782, 32871, 32873,    26, 32819, 32771, 32772,
    //   159+           32785, 32875, 32876, 32878,    27, 32776, 32771, 32772,
    //   160+           32785, 32880, 32788,    28, 32808, 32797, 32810, 32776,
    //   161+           32777, 32825, 32882, 32883, 32884,    29, 32885, 32788,
    //   162+           32776, 32772, 32782, 32795,    30, 32887, 32889, 32880,
    //   163+           32884,    31, 32891, 32889, 32810, 32797, 32893, 32884,
    //   164+              34, 32894, 32854, 32792, 32895,    37, 32897, 32776,
    //   165+           32777, 32850, 32854, 32898,    38, 32897, 32776, 32777,
    //   166+           32900, 32901, 32819, 32902, 32814, 32903, 32901,    39,
    //   167+           32904, 32820, 32897, 32776, 32771, 32811, 32814, 32905,
    //   168+           32907,    40, 32908, 32771, 32772, 32789, 32911, 32820,
    //   169+           32784,    41, 32912, 32914, 32916, 32917, 32789, 32919,
    //   170+           32804,    42, 32819, 32771, 32863, 32921, 32923, 32925,
    //   171+              43, 32927, 32788, 32776, 32772, 32782, 32795,    44,
    //   172+           32929, 32931, 32933, 32776, 32936, 32819, 32937,    45,
    //   173+           32897, 32933, 32937, 32938, 32940, 32937, 32941, 32819,
    //   174+              46, 32929, 32942, 32944, 32797, 32946, 32948,    47,
    //   175+           32949, 32778, 32941, 32789, 32831, 32819,    48, 32949,
    //   176+           32921, 32936, 32950, 32876,    49, 32951, 32953, 32954,
    //   177+           32944, 32797, 32956, 32776,    50, 32958, 32820, 32819,
    //   178+           32771, 32889, 32960, 32961, 32820, 32776,    51, 32963,
    //   179+           32771, 32772, 32773,    52, 32769, 32965, 32820, 32963,
    //   180+           32839, 32967, 32789, 32831, 32819,    53, 32963, 32839,
    //   181+           32967, 32789, 32831, 32819, 32771, 32840,    54, 32969,
    //   182+           32889, 32832, 32769, 32884,    55, 32970, 32889, 32832,
    //   183+           32769, 32884,    56, 32972, 32776, 32789, 32976, 32792,
    //   184+           32794,    57, 32977, 32979, 32981, 32789, 32792, 32794,
    //   185+           32982,    58, 32983, 32985, 32986, 32988,    59, 32963,
    //   186+           32965, 32820, 32769, 32839, 32832, 32789, 32831, 32819,
    //   187+              61, 32805, 32776, 32777, 32778, 32780, 32990, 32782,
    //   188+           32783, 32956,    62, 32776, 32771, 32772, 32785, 32991,
    //   189+           32797, 32991, 32956, 32788,    63, 32991, 32993, 32771,
    //   190+           32995, 32814, 32819, 32907,    64, 32805, 32776, 32997,
    //   191+           32785, 32999, 32782, 32783, 32873,    65, 33001, 32776,
    //   192+           32771, 32772, 32782, 32960, 32991, 32956,    66, 33003,
    //   193+           33005, 32953, 33007, 32776,    67, 33009, 33011, 33012,
    //   194+           32776, 33013, 33014, 33016,    69, 33001, 33011, 32771,
    //   195+           33018, 32953, 32776, 33020, 32771, 32772, 32820, 32823,
    //   196+           32991,    70, 33021, 33023, 32777, 32921, 33026, 32993,
    //   197+           32820, 32819,    71, 32776, 32771, 32772, 32785, 33021,
    //   198+           32946,    72, 33027, 32866, 32782, 32785, 33021, 32795,
    //   199+              73, 33027, 32931, 32782, 32785, 33021, 32795,    74,
    //   200+           33029, 32771, 32772, 32960, 33031, 33033,    75, 33021,
    //   201+           32795, 33035, 32785, 33037, 32795,    76, 33021, 32946,
    //   202+           32776, 32782, 33038, 32795,    77, 33021, 32931, 32782,
    //   203+           33038, 32795,    78, 33021, 32866, 33040, 32782, 33038,
    //   204+           32795,    80, 33041, 32946, 32776, 33043, 32862, 32795,
    //   205+              81, 33041, 32946, 32776, 33045, 32953, 32795,    82,
    //   206+           32776, 32771, 32772, 32785, 33048, 32788,    83, 33011,
    //   207+           33012, 32776, 32844, 32772, 33050, 32782, 32823,    86,
    //   208+           33052, 33048, 33011, 33045, 32953, 33054, 32776,    87,
    //   209+           32956, 32788, 32776, 33055, 32782, 32795,    90, 33056,
    //   210+           32788, 32776, 32990, 32782, 32795,    91, 33058, 32835,
    //   211+           32946, 32776, 32772, 32871,    92, 33058, 33059, 32777,
    //   212+           32982, 33061,    93, 33058, 33059, 32777, 33062, 32878,
    //   213+           32820, 33064,    90, 33056, 32788, 32776, 32990, 33066,
    //   214+           32946,    95, 32805, 32776, 32772, 32875, 32782, 33067,
    //   215+              96, 33069, 32819, 32772, 32875, 32782, 33067,    97,
    //   216+           33071, 33073, 32772, 32875,    98, 33076,    99, 33079,
    //   217+           32772, 33081, 33083, 33084, 33086,   101, 33088, 32831,
    //   218+           32777, 32850, 32854, 33090,   102, 33093, 32820, 32819,
    //   219+           33095, 32771, 32850, 33097,   103, 33098, 33100, 33102,
    //   220+             104, 33098, 33100, 33102,   105, 32894, 32854, 32792,
    //   221+           32895,   106, 33021, 32931, 32850, 33103,   107, 33104,
    //   222+           33106, 32844, 33100, 33102,   108, 33108, 32850, 33110,
    //   223+             109, 33104, 33113,   110, 33116, 33117,   201, 33118,
    //   224+           33119, 32844, 33121, 33066, 32848,   202, 32805, 32776,
    //   225+           32772, 32990,   203, 32775, 32776, 32772, 32990,   204,
    //   226+           33052, 33058, 32835, 32946, 32776,   205, 32805, 32776,
    //   227+           32772, 33124,   206, 33127, 32782, 33129, 33131,   207,
    //   228+           32927, 32946, 32776, 32772, 33132,   208, 33135, 33138,
    //   229+           32990, 33140, 33141, 33143, 33145,   209, 33148, 33150,
    //   230+           32771, 33152, 33153,   210, 33155, 33157, 32852,   255,
    //   231+           33159, 33160, 33161,     0
    //   232  %CONSTINTEGERARRAY LETT(0: 394)=0,%C

    const int LETT[395] = {
        0,          2022746123, 44040192,   1402470400, 1568571392, 1697528531, 1697415168, 420238040,  905969664,
        1359896576, 1130779331, 1237843968, 1160558336, 1731100672, 1399848960, 1766144384, 1164308950, 1107296256,
        666712647,  1342177280, 1561178752, 1134559232, 1202608459, 1570766848, 1764694635, 1130364928, 1496240856,
        1271273803, 1738356700, 1603272704, 1134458063, 1567405928, 1493979864, 922726400,  1730967517, 1207959552,
        1766699648, 487436928,  1227650627, 1697415168, 629062227,  1562902528, 1299185664, 1535005312, 1628328155,
        1269086566, 1766078208, 1736749523, 1296871936, 554586331,  1269086464, 2046820352, 1596981248, 1229771595,
        1704460288, 1775112832, 1301673600, 1736749523, 1296855273, 1400750080, 1294922468, 1697436389, 1265922760,
        1498272384, 2015043993, 167772160,  1774051328, 1199430245, 1600126976, 1197751015, 1268252672, 1300119552,
        1531869651, 1563951104, 2016002560, 2016002662, 1133813760, 1232910720, 1697528531, 1697120256, 1739348423,
        1699617382, 1769857024, 1294917632, 1637219155, 1227653120, 1527635072, 1133924594, 52337347,   1476395008,
        1628328155, 1269086464, 1199428441, 1394514304, 1867420672, 1131413504, 326537935,  1267728384, 1602533699,
        1769881600, 623654400,  1602533699, 1562796032, 1400279759, 1267728384, 1199430219, 1906311168, 1829606600,
        2016068253, 671088640,  1571664203, 1677721600, 1702804051, 1562902528, 1169063936, 1568145408, 1165794432,
        2016585479, 675931904,  2022746667, 611319808,  1605278675, 1765801984, 2022746539, 413138944,  1527644160,
        696115200,  1496240857, 1711276032, 60182770,   1229828829, 1733162854, 1803948772, 1165932360, 1496217984,
        1501491940, 659509888,  821084941,  204525312,  1171165926, 153908803,  1695454431, 1543503872, 1361850880,
        125688297,  1131839488, 1192089439, 1744830464, 1160249344, 1270101611, 1134866944, 1199421523, 1495793664,
        1400295641, 1394606080, 1697518313, 1403336668, 1292663391, 1677721600, 2014963495, 671730176,  326553817,
        1394606080, 1199430121, 1131839488, 1400191571, 1130707411, 1563951104, 1127650020, 1403303654, 1271272135,
        1764524032, 2078801920, 1330565852, 2016086539, 611329536,  2016086565, 309486726,  1829655747, 1164222464,
        2023359110, 2015988106, 2021244928, 61248219,   1637875712, 1769472000, 1400191571, 1130707402, 2016536859,
        44040192,   665606599,  1699617280, 1766105088, 1165932361, 1711276032, 2016487187, 641728512,  1400273483,
        1126170624, 2023391397, 671088640,  2016085160, 2014963497, 309502592,  2016086539, 611329573,  514491549,
        167772160,  1872099150, 197439979,  1762416202, 1738816075, 1529731584, 1300150088, 1965971328, 563475429,
        1130889216, 1131280206, 1271304933, 1561165824, 1702804051, 1563320320, 1805431296, 2022744479, 606076928,
        1496175593, 1342177280, 1335144681, 1267728384, 1697528531, 1697538048, 1739347779, 1529348096, 665605955,
        1529348096, 197531979,  1738356700, 1134458063, 1563197440, 1697413093, 1207959552, 623671269,  1234698240,
        920125440,  1131708416, 1359925888, 1229771595, 1697503744, 1300125379, 1771569152, 1134989511, 1361870848,
        1866805712, 665212125,  1308622848, 1227650627, 1695454431, 1543503872, 1527709696, 60111441,   1529779398,
        623802329,  1805989852, 1199462731, 1201668096, 1300125379, 1744830464, 1199430211, 1400266752, 1739341824,
        1133853265, 1529779398, 1037811712, 561854313,  1267728384, 1199421507, 1697415168, 1267643629, 1130673991,
        1260388352, 1635596137, 1267728384, 1267643629, 1130674024, 258339139,  1476395008, 1501327576, 1805426688,
        729193697,  1260388352, 2016536832, 1197751015, 1241513984, 1738848256, 1568527581, 1764553444, 1771322187,
        1704769920, 1134034944, 1134457563, 1164228864, 528791875,  1562378240, 60715739,   1164228864, 1199430121,
        1705802323, 1601175552, 52730187,   1738289491, 1498324096, 218920153,  1403461632, 1739462751, 1705292288,
        1170735104, 1762546635, 1744830464, 1359893103, 1133813760, 662616391,  1241513984, 1199430227, 1571568211,
        1601593344, 796808653,  1399103488, 387398219,  1711276032, 1735145048, 156006995,  1601452402, 1199421529,
        1269085810, 1303221760, 1501418368, 125679699,  1496203264, 1762416203, 1711276032, 125686355,  1766717184,
        1199421529, 1394358859, 1207959552, 1400141789, 1733196363, 1570766848, 326507240,  1265930952, 427676544,
        1400279759, 1268146176, 1400157005, 1394422493, 1744830464, 1126472011, 1738289497, 1241513984, 657306823,
        1600517888, 1199421131, 1570766848, 1764694528, 1400191571, 1130707403, 1207959552, 729184993,  1635670603,
        1207959552, 1637134803, 1733162752, 939524096,  1563179339, 1738539008, 1135883481, 1125487232, 1739348457,
        1403435595, 1207959552, 688804811,  1744830464, 1527542867, 1562902528, 1870549504, 1126472011, 1738322558,
        623680221,  1225644544, 2013889667, 637534208,  640196608,  308936704,  436849283,  402653184};

    //   233+         X'7890A80B',X'02A00000',X'53980000',X'5D7E8000',
    //   234+         X'652E3AD3',X'652C8000',X'190C52D8',X'36000000',
    //   235+         X'510E6000',X'436652C3',X'49C80000',X'452CB700',
    //   236+         X'672E8000',X'53700000',X'69453980',X'4565F1D6',
    //   237+         X'42000000',X'27BD3A47',X'50000000',X'5D0DB280',
    //   238+         X'43A00000',X'47AE594B',X'5DA00000',X'692F1A6B',
    //   239+         X'43600000',X'592ED2D8',X'4BC6194B',X'679D37DC',
    //   240+         X'5F900000',X'439E74CF',X'5D6CB768',X'590C52D8',
    //   241+         X'36FFB000',X'672C77DD',X'48000000',X'694DB280',
    //   242+         X'1D0DB280',X'492C7643',X'652C8000',X'257EBA53',
    //   243+         X'5D280000',X'4D700000',X'5B7E5280',X'610E50DB',
    //   244+         X'4BA4B966',X'69443700',X'6784B1D3',X'4D4CB200',
    //   245+         X'210E50DB',X'4BA4B900',X'7A000000',X'5F300000',
    //   246+         X'494CD34B',X'65980000',X'69CE1280',X'4D95F680',
    //   247+         X'6784B1D3',X'4D4C70E9',X'537DC000',X'4D2EF2E4',
    //   248+         X'652CD2E5',X'4B7472C8',X'594DD280',X'781B2199',
    //   249+         X'0A000000',X'69BDE000',X'477DDA65',X'5F600000',
    //   250+         X'47643AE7',X'4B980000',X'4D7E4000',X'5B4E79D3',
    //   251+         X'5D380000',X'7829C200',X'7829C266',X'4394A000',
    //   252+         X'497CB980',X'652E3AD3',X'65280000',X'67AC59C7',
    //   253+         X'654E1A66',X'697DE000',X'4D2EE000',X'6195FB53',
    //   254+         X'492C8000',X'5B0DDC80',X'439650F2',X'031E9AC3',
    //   255+         X'58000000',X'610E50DB',X'4BA4B900',X'477DD359',
    //   256+         X'531E9980',X'6F4E9400',X'43700000',X'137692CF',
    //   257+         X'4B900000',X'5F84B943',X'697E4000',X'252C3600',
    //   258+         X'5F84B943',X'5D266000',X'537692CF',X'4B900000',
    //   259+         X'477DDA4B',X'71A00000',X'6D0D94C8',X'782AC29D',
    //   260+         X'28000000',X'5DADB14B',X'64000000',X'657EBA53',
    //   261+         X'5D280000',X'45AE8000',X'5D780000',X'457C9C80',
    //   262+         X'7832A707',X'2849E700',X'7890AA2B',X'24700000',
    //   263+         X'5FAE9BD3',X'69400000',X'7890A9AB',X'18A00000',
    //   264+         X'5B0E0000',X'297DE000',X'592ED2D9',X'66000000',
    //   265+         X'039650F2',X'494DB2DD',X'674DF766',X'6B8612E4',
    //   266+         X'457EB748',X'592E7980',X'597EF2E4',X'274F5280',
    //   267+         X'30F0C30D',X'0C30CF00',X'45CE92E6',X'092C7643',
    //   268+         X'650E94DF',X'5C000000',X'512C3200',X'077DD9E9',
    //   269+         X'43768000',X'470DD75F',X'68000000',X'45280000',
    //   270+         X'4BB4366B',X'43A4B200',X'477DB853',X'59280000',
    //   271+         X'5376D0D9',X'53200000',X'652E12E9',X'53A537DC',
    //   272+         X'4D0C7A5F',X'64000000',X'7819E727',X'2809CA00',
    //   273+         X'1376D0D9',X'53200000',X'477DD9E9',X'43768000',
    //   274+         X'53753A53',X'436539D3',X'5D380000',X'433692E4',
    //   275+         X'53A4B6E6',X'4BC612C7',X'692C8000',X'7BE80000',
    //   276+         X'4F4ED2DC',X'782B0A0B',X'24702600',X'782B0A25',
    //   277+         X'12726486',X'6D0E54C3',X'4564A000',X'789A0286',
    //   278+         X'7829898A',X'7879C000',X'03A692DB',X'61A00000',
    //   279+         X'69780000',X'53753A53',X'436539CA',X'7831E91B',
    //   280+         X'02A00000',X'27AC59C7',X'654E1A00',X'6944A000',
    //   281+         X'457EB749',X'66000000',X'78312713',X'26400000',
    //   282+         X'53767A4B',X'43200000',X'789A80A5',X'28000000',
    //   283+         X'782B04A8',X'7819E729',X'1272A280',X'782B0A0B',
    //   284+         X'24702625',X'1EAA849D',X'0A000000',X'6F95F74E',
    //   285+         X'0BC4B1EB',X'690C564A',X'67A43A4B',X'5B2DDA00',
    //   286+         X'4D7EB748',X'752E5780',X'2195F3E5',X'43680000',
    //   287+         X'436DF74E',X'4BC692E5',X'5D0D8000',X'657EBA53',
    //   288+         X'5D2E6000',X'6B9CB200',X'7890A19F',X'24200000',
    //   289+         X'592DD3E9',X'50000000',X'4F94B0E9',X'4B900000',
    //   290+         X'652E3AD3',X'652E6000',X'67AC5743',X'5B280000',
    //   291+         X'27AC5743',X'5B280000',X'0BC6194B',X'679D37DC',
    //   292+         X'439E74CF',X'5D2C8000',X'652C77E5',X'48000000',
    //   293+         X'252C77E5',X'49980000',X'36D80000',X'43748000',
    //   294+         X'510ED280',X'494CD34B',X'652DDA00',X'4D7E56C3',
    //   295+         X'69980000',X'43A690C7',X'512C8000',X'6F4531D0',
    //   296+         X'27A654DD',X'4E000000',X'492C7643',X'650E94DF',
    //   297+         X'5C000000',X'5B0F0000',X'03953A51',X'5B2E94C6',
    //   298+         X'252E77D9',X'6BA537DC',X'477E594B',X'47A00000',
    //   299+         X'4D7E56C3',X'68000000',X'477DDA43',X'53766000',
    //   300+         X'67AC4000',X'43953A51',X'5B2E94C6',X'3DDBC000',
    //   301+         X'217D3769',X'4B900000',X'477DB843',X'652C8000',
    //   302+         X'4B8EB4ED',X'4364B747',X'4B200000',X'617D3769',
    //   303+         X'4B900000',X'4B8EB4ED',X'4364B768',X'0F65F143',
    //   304+         X'58000000',X'597C70D8',X'6B9CA000',X'2B769CE1',
    //   305+         X'4B200000',X'7831E900',X'47643AE7',X'4A000000',
    //   306+         X'67A4B800',X'5D7DD4DD',X'692CF2E4',X'69943B4B',
    //   307+         X'659CB980',X'43980000',X'439E72DB',X'4564B900',
    //   308+         X'1F84B943',X'5D200000',X'039E72DB',X'4564B900',
    //   309+         X'477DD9E9',X'65AC7A53',X'5F700000',X'0324994B',
    //   310+         X'679C3153',X'594E9C80',X'0D0C74D9',X'53A72000',
    //   311+         X'67AE185F',X'65A4B200',X'45C80000',X'690E53CB',
    //   312+         X'68000000',X'510E526F',X'4394A000',X'277EB947',
    //   313+         X'4A000000',X'477DDA53',X'5DAC3A53',X'5F766000',
    //   314+         X'2F7E55CD',X'5364A000',X'17173A4B',X'66000000',
    //   315+         X'676C3658',X'094C7A53',X'5F743972',X'477DB859',
    //   316+         X'4BA4B672',X'4DAD9600',X'597DD380',X'077DB853',
    //   317+         X'592E4000',X'690C564B',X'66000000',X'077DD253',
    //   318+         X'694DF700',X'477DB859',X'531C3A4B',X'48000000',
    //   319+         X'537477DD',X'674E7A4B',X'5DA00000',X'13761AE8',
    //   320+         X'4B7492C8',X'197DD380',X'537692CF',X'4B966000',
    //   321+         X'5374B34D',X'531D32DD',X'68000000',X'4324994B',
    //   322+         X'679C3159',X'4A000000',X'272DB4C7',X'5F65F700',
    //   323+         X'477DB6CB',X'5DA00000',X'692F1A00',X'53753A53',
    //   324+         X'436539CB',X'48000000',X'2B767AE1',X'617E5A4B',
    //   325+         X'48000000',X'6194B1D3',X'674DF700',X'38000000',
    //   326+         X'5D2C394B',X'67A00000',X'43B434D9',X'43159280',
    //   327+         X'67AC59E9',X'53A6BA4B',X'48000000',X'290E53CB',
    //   328+         X'68000000',X'5B0C7453',X'5D280000',X'6F7E5200',
    //   329+         X'4324994B',X'679CB27E',X'252C9ADD',X'490DDA00',
    //   330+         X'78098483',X'26000000',X'2628A000',X'126A0000',
    //   331+         X'1A09CA83',X'18000000'
    //   332  %INTEGER I,J,K,M,Q,S

    int I;
    int J;
    int K;
    int M;
    int Q;
    int S;

    //   333  %STRING(70)OMESS

    _imp_string70 OMESS;

    //   334        OMESS=" "

    _imp_strncpy(/*?*/ &OMESS, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal(" ");
                   (void *)&tmp;
                 }),
                 /*max:*/ 70);

    //   335        %CYCLE I=1,1,WORDMAX-1

    // %for I = 1, 1, 780 - 1 %cycle
    {
      int _final = 780 - 1;
      if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, 780 - 1");
      I = 0;
    L_0003:
      if (I == _final) goto L_0004;
      I += 1;

      //   336           ->FOUND %IF N=WORD(I)

      if (N != WORD[I]) goto L_0006;
      goto U_1000;
    L_0006:;

    //   337        %REPEAT

      goto L_0003;
    }

  L_0004:;

  //   338        I=DEFAULT

    I = 776;

    //   339  FOUND:

  U_1000:;

  //   340        J=1

    J = 1;

    //   341        %CYCLE

  L_0007:;

  //   342           K=WORD(I+J)

    K = WORD[I + J];

    //   343           %IF K&X'8000'=0 %THEN %EXIT

    if (K & 32768 != 0) goto L_0008;
    goto L_0009;
  L_0008:;

  //   344           K=K&X'7FFF'

    K = K & 32767;

    //   345           OMESS=OMESS." " %UNLESS J=1

    if (J == 1) goto L_000A;

    _imp_strncpy(/*?*/ &OMESS, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp =
                         _imp_join((_imp_string *)/*?*/ &OMESS, (_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 70);

  L_000A:;

  //   346           {%UNTIL M&1=0} %CYCLE

  L_000B:;

  //   347              M=LETT(K); S=25

    M = LETT[K];
    S = 25;

    //   348              {%UNTIL S<0} %CYCLE

  L_000C:;

  //   349                 Q=M>>S&63;

    Q = (unsigned int)M >> S & 63;

    //   350                 %IF Q\=0 %THEN OMESS=OMESS.TOSTRING(OUTTT(Q))

    if (Q == 0) goto L_000D;

    _imp_strncpy(/*?*/ &OMESS, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &OMESS, ({
                                                      __typeof__(_imp_string1) tmp; /*E*/
                                                      tmp = _imp_TOSTRING(OUTTT[Q]);
                                                      (void *)&tmp;
                                                    }));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 70);

  L_000D:;

  //   351                 S=S-6

    S = S - 6;

    //   352              %REPEAT %UNTIL S<0

    if (S < 0) goto L_000E;
    goto L_000C;
  L_000E:;

  //   353              K=K+1

    K = K + 1;

    //   354           %REPEAT %UNTIL M&1=0

    if (M & 1 == 0) goto L_000F;
    goto L_000B;
  L_000F:;

  //   355           J=J+1

    J = J + 1;

    //   356        %REPEAT

    goto L_0007;
  L_0009:;

  //   357        %RESULT=OMESS

    return *(_imp_string255 *)/*?*/ &OMESS;

    //   358  %END

  } /* end of MESSAGE */

  //   359  %STRING(16)%FN SWRITE(%INTEGER VALUE, PLACES)

  _imp_string16 SWRITE(int VALUE, int PLACES) {
    //   360  %STRING (16) S

    _imp_string16 S;

    //   361  %STRING(1)SIGN

    _imp_string1 SIGN;

    //   362  %INTEGER D0, D1, D2

    int D0;
    int D1;
    int D2;

    //   363        PLACES=PLACES&15

    PLACES = PLACES & 15;

    //   364        SIGN=" "

    _imp_strncpy(/*?*/ &SIGN, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal(" ");
                   (void *)&tmp;
                 }),
                 /*max:*/ 1);

    //   365        S=""

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("");
                   (void *)&tmp;
                 }),
                 /*max:*/ 16);

    //   366        %IF VALUE<0 %THEN SIGN="-" %AND VALUE=-VALUE

    if (VALUE >= 0) goto L_0010;

    _imp_strncpy(/*?*/ &SIGN, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("-");
                   (void *)&tmp;
                 }),
                 /*max:*/ 1);

    VALUE = -VALUE;
  L_0010:;

  //   367        D0=VALUE

    D0 = VALUE;

    //   368        %CYCLE

  L_0011:;

  //   369           D1=D0//10

    D1 = ((long)D0 / (long)10);

    //   370           D2=D0-10*D1

    D2 = D0 - 10 * D1;

    //   371           S=TOSTRING(D2+'0').S

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join(({
                                                      __typeof__(_imp_string1) tmp; /*D*/
                                                      tmp = _imp_TOSTRING(D2 + 48);
                                                      (void *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &S);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 16);

    //   372           D0=D1

    D0 = D1;

    //   373        %REPEAT %UNTIL D0=0

    if (D0 == 0) goto L_0012;
    goto L_0011;
  L_0012:;

  //   374        S=SIGN.S

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &SIGN, (_imp_string *)/*?*/ &S);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 16);

    //   375        S=" ".S %WHILE LENGTH(S)<=PLACES

  L_0013:;
    if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &S) > PLACES) goto L_0014;

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp =
                         _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr(" "), (_imp_string *)/*?*/ &S);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 16);

    goto L_0013;
  L_0014:;

  //   376        %RESULT=S

    return *(_imp_string16 *)/*?*/ &S;

    //   377  %END

  } /* end of SWRITE */

  //   378  %ROUTINE FAULT(%INTEGER N, DATA, IDENT)

  void FAULT(int N, int DATA, int IDENT) {
    //   379  !***********************************************************************
    //   380  !*    SETS UP AN ERROR MESSAGE AND SHOVES IT OUT ONTO THE LISTING      *
    //   381  !*    AN ALSO OPTIONALLY TO THE TERMINAL                               *
    //   382  !***********************************************************************
    //   383  %INTEGER I, J, S, T, Q, QMAX, LENGTH

    int I;
    int J;
    int S;
    int T;
    int Q;
    int QMAX;
    int LENGTH;

    //   384  %STRING(255)MESS1,MESS2,WK1,WK2

    _imp_string255 MESS1;
    _imp_string255 MESS2;
    _imp_string255 WK1;
    _imp_string255 WK2;

    //   385        MESS1=""; MESS2=""

    _imp_strncpy(/*?*/ &MESS1, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("");
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = _imp_str_literal("");
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //   386        %IF N=100 %THEN %START;           ! SYNTAX FAULTS ARE SPECIAL

    if (N != 100) goto L_0015;

      //   387           MESS1="

    _imp_strncpy(/*?*/ &MESS1, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp =
                         _imp_join((_imp_string *)/*?*/ &*({
                                     _imp_string255 tmp = _imp_join(
                                         (_imp_string *)/*?*/ _imp_str_literal_ptr("\n*    Failed to analyse line "), ({
                                           __typeof__(_imp_string16) tmp; /*E*/
                                           tmp = SWRITE(99, 2);
                                           (void *)&tmp;
                                         }));
                                     (_imp_string255 *)&tmp;
                                   }),
                                   (_imp_string *)/*?*/ _imp_str_literal_ptr("\n     "));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //   388+ *    Failed to analyse line ".SWRITE(99,2)."
    //   389+      "
    //   390           J=0;  S=0;  T=0;  Q=DATA;  QMAX=IDENT>>16

    J = 0;
    S = 0;
    T = 0;
    Q = DATA;
    QMAX = (unsigned int)IDENT >> 16;

    //   391           LENGTH=IDENT&X'FFFF'

    LENGTH = IDENT & 65535;

    //   392           %IF Q=QMAX %THEN S=T

    if (Q != QMAX) goto L_0016;
    S = T;
  L_0016:;

  //   393        %FINISH %ELSE %START

    goto L_0017;
  L_0015:;

  //   394           MESS1="

    _imp_strncpy(/*?*/ &MESS1, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("\n*"), ({
                                                                      __typeof__(_imp_string16) tmp; /*E*/
                                                                      tmp = SWRITE(99, 4);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ _imp_str_literal_ptr("   "));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //   395+ *".SWRITE(99, 4)."   "
    //   396           MESS1=MESS1."FAULT".SWRITE(N,2)

    _imp_strncpy(/*?*/ &MESS1, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &MESS1,
                                                                    (_imp_string *)/*?*/ _imp_str_literal_ptr("FAULT"));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    ({
                                                      __typeof__(_imp_string16) tmp; /*E*/
                                                      tmp = SWRITE(N, 2);
                                                      (void *)&tmp;
                                                    }));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //   397           MESS2=MESSAGE(N)

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = MESSAGE(N);
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

    //   398           %IF MESS2->WK1.("##").WK2 %THEN %C

    if (!(_imp_resolve(*({
          _imp_string255 tmp = MESS2;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &WK1, *({
                         _imp_string tmp = _imp_str_literal("##");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)/*?*/ &WK2)))
      goto L_0018;

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &WK1, ({
                                                                      __typeof__(_imp_string16) tmp; /*E*/
                                                                      tmp = SWRITE(IDENT, 1);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &WK2);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

  L_0018:;

  //   399+             MESS2=WK1.SWRITE(IDENT,1).WK2
  //   400           %IF MESS2->WK1.("#").WK2 %THEN %C

    if (!(_imp_resolve(*({
          _imp_string255 tmp = MESS2;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &WK1, *({
                         _imp_string tmp = _imp_str_literal("#");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)/*?*/ &WK2)))
      goto L_0019;

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &WK1, ({
                                                                      __typeof__(_imp_string16) tmp; /*E*/
                                                                      tmp = SWRITE(DATA, 1);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &WK2);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

  L_0019:;

  //   401+             MESS2=WK1.SWRITE(DATA,1).WK2
  //   402           %IF MESS2->WK1.("&&").WK2 %THEN %C

    if (!(_imp_resolve(*({
          _imp_string255 tmp = MESS2;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &WK1, *({
                         _imp_string tmp = _imp_str_literal("&&");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)/*?*/ &WK2)))
      goto L_001A;

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &WK1, ({
                                                                      __typeof__(_imp_string255) tmp; /*E*/
                                                                      tmp = PRINTNAME(DATA);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &WK2);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

  L_001A:;

  //   403+             MESS2=WK1.PRINTNAME(DATA).WK2
  //   404           %IF MESS2->WK1.("&").WK2 %THEN %C

    if (!(_imp_resolve(*({
          _imp_string255 tmp = MESS2;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &WK1, *({
                         _imp_string tmp = _imp_str_literal("&");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)/*?*/ &WK2)))
      goto L_001B;

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &WK1, ({
                                                                      __typeof__(_imp_string255) tmp; /*E*/
                                                                      tmp = PRINTNAME(IDENT);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &WK2);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

  L_001B:;

  //   405+                MESS2=WK1.PRINTNAME(IDENT).WK2
  //   406           %IF N>100 %THEN MESS2=MESS2." Disaster"

    if (N <= 100) goto L_001C;

    _imp_strncpy(/*?*/ &MESS2, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp =
                         _imp_join((_imp_string *)/*?*/ &MESS2, (_imp_string *)/*?*/ _imp_str_literal_ptr(" Disaster"));
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 255);

  L_001C:;

  //   407        %FINISH

  L_0017:;

  //   408           PRINTSTRING(MESS1)

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string255) tmp = MESS1 /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //   409           PRINTSTRING(MESS2) %IF MESS2#""

    if (_imp_strcmp((_imp_string *)/*?*/ &MESS2, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) == 0) goto L_001D;

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string255) tmp = MESS2 /*q*/;
          (_imp_string255 *)&tmp;
        })
    );
  L_001D:;

  //   410           NEWLINE

    _imp_NEWLINE();

    //   411        %IF N=109 %THEN %MONITOR

    if (N != 109) goto L_001E;
      /*_imp_monitor(__LINE__, __FILE__, PRETTY_FUNCTION);*/
  L_001E:;

  //   412  !      %IF N=109 %THEN PARM_DCOMP=1 %AND CODEOUT
  //   413        %IF N>100 %THEN %STOP

    if (N <= 100) goto L_001F;
    _imp_stop(0);
  L_001F:;

  //   414  %END

    return;
  } /* end of FAULT */

  // ?I unused
  //   415  %ROUTINE WARN(%INTEGER N,V)

  void WARN(int N, int V) {
    //   416  %STRING(30) T; %STRING(120) S

    _imp_string30 T;
    _imp_string120 S;

    //   417        S=MESSAGE(N+200)

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = MESSAGE(N + 200);
                   (void *)&tmp;
                 }),
                 /*max:*/ 120);

    //   418        %IF S->S.("&").T %THEN S=S.PRINTNAME(V).T

    if (!(_imp_resolve(*({
          _imp_string120 tmp = S;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &S, *({
                         _imp_string tmp = _imp_str_literal("&");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)/*?*/ &T)))
      goto L_0020;

    _imp_strncpy(/*?*/ &S, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = *({
                     _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                                      _imp_string255 tmp =
                                                          _imp_join((_imp_string *)/*?*/ &S, ({
                                                                      __typeof__(_imp_string255) tmp; /*E*/
                                                                      tmp = PRINTNAME(V);
                                                                      (void *)&tmp;
                                                                    }));
                                                      (_imp_string255 *)&tmp;
                                                    }),
                                                    (_imp_string *)/*?*/ &T);
                     (_imp_string255 *)&tmp;
                   });
                   (void *)&tmp;
                 }),
                 /*max:*/ 120);

  L_0020:;

  //   419        PRINTSTRING("

    _imp_PRINTSTRING(
        *({
          __typeof__(_imp_string255) tmp = *({
            _imp_string255 tmp =
                _imp_join((_imp_string *)/*?*/ &*({
                            _imp_string255 tmp =
                                _imp_join((_imp_string *)/*?*/ &*({
                                            _imp_string255 tmp =
                                                _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("\n?  Warning :- "),
                                                          (_imp_string *)/*?*/ &S);
                                            (_imp_string255 *)&tmp;
                                          }),
                                          (_imp_string *)/*?*/ _imp_str_literal_ptr(" at line No"));
                            (_imp_string255 *)&tmp;
                          }),
                          ({
                            __typeof__(_imp_string16) tmp; /*E*/
                            tmp = SWRITE(101, 1);
                            (void *)&tmp;
                          }));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //   420+ ?  Warning :- ".S." at line No".SWRITE(101,1))
    //   421        NEWLINE

    _imp_NEWLINE();

    //   422  %END

    return;
  } /* end of WARN */

  //   423      FAULT(16,0,0)

  FAULT(16, 0, 0);

  //   424        WARN(2,76)

  WARN(2, 76);

  //   425  %ENDOFPROGRAM

  _imp_stop(0);
  return 0;
end_0:;
}