#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %ownrecord(*)%name NIL == 0

static struct BROTHER *NIL = 0;

//     2
//     3  !-------------------------------!
//     4  !             WORD              !
//     5  !  Copyright 1985   A. R. Deas  !
//     6  !-------------------------------!
//     7
//     8  {---------------------------------------------------------------------------}
//     9  { WORD infile outfile [-a] [-b] [-c] [-d] [-dict fname] [-f] [-h] [-l] [-m] }
//    10  {                     [-n] [-p] [-r] [-s] [-t] [-u] [-w]                    }
//    11  {                                                                           }
//    12  { FUNCTION                                                                  }
//    13  {    Produce word lists: vocabularies, lists of spelling errors,            }
//    14  {    word frequency lists, word counts, list multiple words.                }
//    15  {                                                                           }
//    16  { OPTIONS                                                                   }
//    17  {     default        produce nothing at all                                 }
//    18  {    -a              shorthand for [-c -m -n -u -w]                         }
//    19  {    -b              What is the biggest (longest) word                     }
//    20  {    -c              Check spelling                                         }
//    21  {    -d              include Digits                                         }
//    22  {    -f              produce vocabulary list, sorted by frequency           }
//    23  {    -h              print help info                                        }
//    24  {    -l              produce vocabulary list, sorted Lexically              }
//    25  {    -m              flag error when multiple instances of same word occur  }
//    26  {    -n              for each spelling error, give me help with the spelling}
//    27  {    -p              produce Pure word lists - no frequency info            }
//    28  {    -r              print vocabulary lists in Reverse order                }
//    29  {    -s              disregard `@' instead of seeing it as a special alpha  }
//    30  {    -t              consider `\' to be a char instead disregarding it      }
//    31  {    -w              print Word count and variety of words                  }
//    32  {    -u              check word Usage and help me with my writing style     }
//    33  {    -dict dictname  use dictionary in file dictname instead of minidict    }
//    34  {---------------------------------------------------------------------------}
//    35
//    36  {---------------------------------------------------------------------------}
//    37  { How it works:                                                             }
//    38  {   Interpet command line                                                   }
//    39  {   if  no options then stop                                                }
//    40  {   hash all words in the infile into the WORD TABLE                        }
//    41  {   MARK - remember where heap is                                           }
//    42  {   if help wanted then call help                                           }
//    43  {   if spelling wanted                                                      }
//    44  {      produce a sort tree in lex order                                     }
//    45  {      open dictionary file                                                 }
//    46  {      cut links from tree to hash table where you find a word              }
//    47  {      close dictionary                                                     }
//    48  {      print out sort tree                                                  }
//    49  {      RELEASE                                                              }
//    50  {   fi                                                                      }
//    51  {   if word count wanted then produce word count                            }
//    52  {   if lexical sort of words wanted then sort and print table and RELEASE   }
//    53  {   if frequency sort of words wanted then sort and print table and RELEASE }
//    54  {---------------------------------------------------------------------------}
//    55
//    56
//    57  !%include "UTILS:util.imp"   {for unadulterated STOI and ITOS}
//    58
//    59
//    60  {QUICK STORAGE TABLE}
//    61
//    62  %recordformat word rec(%string (31) word, %integer occurances,

struct WORDREC {
  union {
    struct {
      _imp_string31 WORD;
      int OCCURANCES;
      struct WORDREC *NEXT;
    };
  };
};

//    63+                        %record (word rec) %name next)
//    64  %constantinteger  hash table size = 16_0FFF {4095}
//    65  %ownrecord (word rec) %name %array  word table(0:hash table size)

static struct WORDREC *WORDTABLE[4096];

//    66
//    67
//    68  {SORTING TREE}
//    69
//    70  %recordformat  node(%record (word rec) %name word,

struct NODE {
  union {
    struct {
      struct WORDREC *WORD;
      struct NODE *LSON;
      struct NODE *RSON;
      struct NODE *BROTHER;
    };
  };
};

//    71+                     %record (node) %name lson, rson, brother)
//    72  %ownrecord (node) %name sort tree

static struct NODE *SORTTREE;

//    73
//    74  {Things needed to flag multiple words}
//    75  %ownstring (31) prev word = ""

static _imp_string31 PREVWORD = _imp_str_init("");

//    76  %owninteger     line number = 1

static int LINENUMBER = 1;

//    77  %owninteger     num words in sentences = 0

static int NUMWORDSINSENTENCES = 0;

//    78  %owninteger     sentence count = 0

static int SENTENCECOUNT = 0;

//    79  %owninteger     recursive reference = 0

static int RECURSIVEREFERENCE = 0;

//    80  %owninteger     words from start of sentence = 1

static int WORDSFROMSTARTOFSENTENCE = 1;

//    81  %owninteger     in a sentence = 1

static int INASENTENCE = 1;

//    82  %owninteger     just finished a sentence = 0

static int JUSTFINISHEDASENTENCE = 0;

//    83
//    84  {CLI THINGS}
//    85
//    86  %constantinteger  A option  = 2_100000000000000,
//    87+                   B option  = 2_010000000000000,
//    88+                   C option  = 2_001000000000000,
//    89+                   D option  = 2_000100000000000,
//    90+                   F option  = 2_000010000000000,
//    91+                   H option  = 2_000001000000000,
//    92+                   L option  = 2_000000100000000,
//    93+                   M option  = 2_000000010000000,
//    94+                   N option  = 2_000000001000000,
//    95+                   P option  = 2_000000000100000,
//    96+                   R option  = 2_000000000010000,
//    97+                   S option  = 2_000000000001000,
//    98+                   T option  = 2_000000000000100,
//    99+                   U option  = 2_000000000000010,
//   100+                   W option  = 2_000000000000001
//   101  %owninteger  options = 0

static int OPTIONS = 0;

//   102  %ownstring (31) dictfile = "STYLE:DICT"

static _imp_string31 DICTFILE = _imp_str_init("STYLE:DICT");

//   103  %ownstring (31) inf=""

static _imp_string31 INF = _imp_str_init("");

//   104  %ownstring (31) outf=""

static _imp_string31 OUTF = _imp_str_init("");

//   105
//   106  {INTERPRET COMMAND LINE}
//   107
//   108  %routine  interpret command line

static void INTERPRETCOMMANDLINE(void) {
  //   109
  //   110  !   define param("Source file",inf,pam major+pam infile)
  //   111  !   define param("Destination file",outf,pam major+pam outfile)
  //   112  !   define param("Dictionary file",dictfile,0)
  //   113  !   define boolean params(",,,,,,,,,,,,,,,,,A,B,C,D,F,H,L,M,N,P,R,S,T,U,W",
  //   114  !                         options,0)
  //   115  !   process parameters(cliparam)
  //   116
  //   117  %own %string (255) Prog name = "Style"

  static _imp_string255 PROGNAME = _imp_str_init("Style");

  //   118
  //   119  !!%string(255)%fn cliparam
  //   120  !!%constinteger R0 = 0
  //   121  !!%integer strad,i
  //   122  !!%string(255) s
  //   123  !!  *STMFD_12!,<0,1,2,3>
  //   124  !!  *SWI_16
  //   125  !!  *STR_R0,Strad
  //   126  !!  *LDMFD_12!,<0,1,2,3>
  //   127  !!  s = ""
  //   128  !!  %cycle
  //   129  !!    i = byteinteger(STRAD)
  //   130  !!    %if i <= 13 %start
  //   131  !!      Prog name = s %and s = "" %unless s -> Prog name.(" ").s
  //   132  !!      %result=s
  //   133  !!    %finish
  //   134  !!    s <- s.tostring(i)
  //   135  !!    strad=strad+1
  //   136  !!  %repeat
  //   137  !!%end
  //   138
  //   139  %routine handle(%string(255) s)

  void HANDLE(_imp_string255 S) {
    //   140  %own %integer pos state = 0

    static int POSSTATE = 0;

    //   141  %integer ch

    int CH;

    //   142  %switch which(1:4), option(0:255)

    int WHICH_index;
    int WHICH_line;
    char *WHICH_file;
    static const void *WHICH[4] = {&&case_WHICH_missing, &&case_WHICH_missing, &&case_WHICH_missing,
                                   &&case_WHICH_missing};

    int OPTION_index;
    int OPTION_line;
    char *OPTION_file;
    static const void *OPTION[256] = {
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing,
        &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing, &&case_OPTION_missing};

    //   143    %return %if s=""

    if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0001;

    return;
  L_0001:;

  //   144    %if CHARNO(s, 1) # '-' %start

    if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &S, 1) == 45) goto L_0002;

      //   145      pos state = pos state+1

    POSSTATE = POSSTATE + 1;

    //   146      -> which(pos state)

    WHICH_line = __LINE__;
    WHICH_file = __FILE__;
    WHICH_index = POSSTATE;
    goto case_WHICH_dispatch;

    //   147      which(1): inf = s; %return

  case_WHICH_1:;

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

    return;

    //   148      which(2): outf = s; %return

  case_WHICH_2:;

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

    return;

    //   149      which(3): dictfile = s; %return

  case_WHICH_3:;

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

    return;

    //   150      which(4): pos state = pos state-1

  case_WHICH_4:;
    POSSTATE = POSSTATE - 1;

    //   151                print string("*** Spurious parameter '".s."'".snl)

    _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("*** Spurious parameter '"),
                                                (_imp_string *)/*?*/ &S);
                                            (_imp_string255 *)&tmp;
                                          }),
                                          (_imp_string *)/*?*/ _imp_str_literal_ptr("'"));
                            (_imp_string255 *)&tmp;
                          }),
                          ({
                            __typeof__(_imp_string1) tmp; /*E*/
                            tmp = _imp_SNL();
                            (void *)&tmp;
                          }));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //   152                %return

    return;

    //   153    %else

  L_0002:;

  //   154      %if s = "-help" %or s = "-Help" %or s = "-HELP" %start

    if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("-help")) == 0) goto L_0004;

    if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("-Help")) == 0) goto L_0004;

    if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("-HELP")) != 0) goto L_0005;

  L_0004:;

  //   155        Options = Options ! H Option

    OPTIONS = OPTIONS | 512;

    //   156      %elseif LENGTH(s) # 2

    goto L_0006;
  L_0005:;
    if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &S) == 2) goto L_0007;

      //   157        print string("*** Spurious option '".s."'".snl)

    _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("*** Spurious option '"),
                                                (_imp_string *)/*?*/ &S);
                                            (_imp_string255 *)&tmp;
                                          }),
                                          (_imp_string *)/*?*/ _imp_str_literal_ptr("'"));
                            (_imp_string255 *)&tmp;
                          }),
                          ({
                            __typeof__(_imp_string1) tmp; /*E*/
                            tmp = _imp_SNL();
                            (void *)&tmp;
                          }));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //   158        %return

    return;

    //   159      %else

  L_0007:;

  //   160        ch = CHARNO(s, 2)

    CH = *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &S, 2);

    //   161        -> option(ch)

    OPTION_line = __LINE__;
    OPTION_file = __FILE__;
    OPTION_index = CH;
    goto case_OPTION_dispatch;

    //   162        option('A'): option('a'): Options = Options ! A Option; %return

  case_OPTION_65:;
  case_OPTION_97:;
    OPTIONS = OPTIONS | 16384;
    return;

    //   163        option('B'): option('b'): Options = Options ! B Option; %return

  case_OPTION_66:;
  case_OPTION_98:;
    OPTIONS = OPTIONS | 8192;
    return;

    //   164        option('C'): option('c'): Options = Options ! C Option; %return

  case_OPTION_67:;
  case_OPTION_99:;
    OPTIONS = OPTIONS | 4096;
    return;

    //   165        option('D'): option('d'): Options = Options ! D Option; %return

  case_OPTION_68:;
  case_OPTION_100:;
    OPTIONS = OPTIONS | 2048;
    return;

    //   166        option('F'): option('f'): Options = Options ! F Option; %return

  case_OPTION_70:;
  case_OPTION_102:;
    OPTIONS = OPTIONS | 1024;
    return;

    //   167        option('H'): option('h'): Options = Options ! H Option; %return

  case_OPTION_72:;
  case_OPTION_104:;
    OPTIONS = OPTIONS | 512;
    return;

    //   168        option('L'): option('l'): Options = Options ! L Option; %return

  case_OPTION_76:;
  case_OPTION_108:;
    OPTIONS = OPTIONS | 256;
    return;

    //   169        option('M'): option('m'): Options = Options ! M Option; %return

  case_OPTION_77:;
  case_OPTION_109:;
    OPTIONS = OPTIONS | 128;
    return;

    //   170        option('N'): option('n'): Options = Options ! N Option; %return

  case_OPTION_78:;
  case_OPTION_110:;
    OPTIONS = OPTIONS | 64;
    return;

    //   171        option('P'): option('p'): Options = Options ! P Option; %return

  case_OPTION_80:;
  case_OPTION_112:;
    OPTIONS = OPTIONS | 32;
    return;

    //   172        option('R'): option('r'): Options = Options ! R Option; %return

  case_OPTION_82:;
  case_OPTION_114:;
    OPTIONS = OPTIONS | 16;
    return;

    //   173        option('S'): option('s'): Options = Options ! S Option; %return

  case_OPTION_83:;
  case_OPTION_115:;
    OPTIONS = OPTIONS | 8;
    return;

    //   174        option('T'): option('t'): Options = Options ! T Option; %return

  case_OPTION_84:;
  case_OPTION_116:;
    OPTIONS = OPTIONS | 4;
    return;

    //   175        option('U'): option('u'): Options = Options ! U Option; %return

  case_OPTION_85:;
  case_OPTION_117:;
    OPTIONS = OPTIONS | 2;
    return;

    //   176        option('W'): option('w'): Options = Options ! W Option; %return

  case_OPTION_87:;
  case_OPTION_119:;
    OPTIONS = OPTIONS | 1;
    return;

    //   177        OPTION(*):

  case_OPTION_default:;

  //   178          print string("*** Spurious option '".s."'".snl)

    _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("*** Spurious option '"),
                                                (_imp_string *)/*?*/ &S);
                                            (_imp_string255 *)&tmp;
                                          }),
                                          (_imp_string *)/*?*/ _imp_str_literal_ptr("'"));
                            (_imp_string255 *)&tmp;
                          }),
                          ({
                            __typeof__(_imp_string1) tmp; /*E*/
                            tmp = _imp_SNL();
                            (void *)&tmp;
                          }));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //   179          %return

    return;

    //   180      %finish

  L_0006:;

  //   181    %finish
  //   182  %end

    return;

  case_WHICH_dispatch:
    if (WHICH_index < 1 || WHICH_index > 4)
      _imp_signalf(6, 3, WHICH_index, "->WHICH(%d) out of bounds at %s line %d", WHICH_index, WHICH_file, WHICH_line);
    goto *WHICH[WHICH_index - 1];

  case_WHICH_missing:
    _imp_signalf(8, 2, WHICH_index, "switch jump to undefined label WHICH(%d): at %s line %d", WHICH_index, WHICH_file,
                 WHICH_line);

  case_OPTION_dispatch:
    if (OPTION_index < 0 || OPTION_index > 255)
      _imp_signalf(6, 3, OPTION_index, "->OPTION(%d) out of bounds at %s line %d", OPTION_index, OPTION_file,
                   OPTION_line);
    goto *OPTION[OPTION_index - 0];

  case_OPTION_missing:
    _imp_signalf(8, 2, OPTION_index, "switch jump to undefined label OPTION(%d): at %s line %d", OPTION_index,
                 OPTION_file, OPTION_line);
  } /* end of HANDLE */

  //   183
  //   184  %string(255)%fn first(%string(255)%name s)

  _imp_string255 FIRST(_imp_string255 * S) {
    //   185  %string(255) left

    _imp_string255 LEFT;

    //   186    %if s -> left.(" ").s %then %result = left

    if (!(_imp_resolve(*({
          _imp_string255 tmp = *S;
          (_imp_string255 *)&tmp;
        }),
                       (_imp_string255 *)/*?*/ &LEFT, *({
                         _imp_string tmp = _imp_str_literal(" ");
                         (_imp_string255 *)&tmp;
                       }),
                       (_imp_string255 *)S)))
      goto L_0009;
    return *(_imp_string255 *)/*?*/ &LEFT;
  L_0009:;

  //   187    left = s; s = ""

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

    *S = _imp_str_literal("");

    //   188    %result = left

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

    //   189  %end

  } /* end of FIRST */

  //   190
  //   191  %string(255) s, one, left, right

  _imp_string255 S;
  _imp_string255 ONE;
  _imp_string255 LEFT;
  _imp_string255 RIGHT;

  //   192
  //   193     options = 0

  OPTIONS = 0;

  //   194
  //   195     s = cliparam

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

  //   196     s = left." ".right %while s -> left.("  ").right

L_000A:;
  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     (_imp_string255 *)/*?*/ &LEFT, *({
                       _imp_string tmp = _imp_str_literal("  ");
                       (_imp_string255 *)&tmp;
                     }),
                     (_imp_string255 *)/*?*/ &RIGHT)))
    goto L_000B;

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

  goto L_000A;
L_000B:;

//   197     %if s -> left.("-dict ").right            %C

  if (_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                   (_imp_string255 *)/*?*/ &LEFT, *({
                     _imp_string tmp = _imp_str_literal("-dict ");
                     (_imp_string255 *)&tmp;
                   }),
                   (_imp_string255 *)/*?*/ &RIGHT))
    goto L_000C;
  if (_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                   (_imp_string255 *)/*?*/ &LEFT, *({
                     _imp_string tmp = _imp_str_literal("-DICT ");
                     (_imp_string255 *)&tmp;
                   }),
                   (_imp_string255 *)/*?*/ &RIGHT))
    goto L_000C;
  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     (_imp_string255 *)/*?*/ &LEFT, *({
                       _imp_string tmp = _imp_str_literal("-Dict ");
                       (_imp_string255 *)&tmp;
                     }),
                     (_imp_string255 *)/*?*/ &RIGHT)))
    goto L_000D;
L_000C:;

//   198+      %or s -> left.("-DICT ").right          %C
//   199+      %or s -> left.("-Dict ").right %start
//   200       dictfile = first(right); s = left.right

  _imp_strncpy(/*?*/ &DICTFILE, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = FIRST((_imp_string255 *)/*p*/ /*?*/ &RIGHT);
                 (void *)&tmp;
               }),
               /*max:*/ 31);

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

  //   201     %finish

L_000D:;

//   202
//   203     %while s -> one.(" ").s %cycle

L_000E:;
  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     (_imp_string255 *)/*?*/ &ONE, *({
                       _imp_string tmp = _imp_str_literal(" ");
                       (_imp_string255 *)&tmp;
                     }),
                     (_imp_string255 *)/*?*/ &S)))
    goto L_000F;

    //   204       handle(one)

  HANDLE(
      *({
        __typeof__(_imp_string255) tmp = ONE /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   205     %repeat

  goto L_000E;
L_000F:;

//   206     handle(s)

  HANDLE(
      *({
        __typeof__(_imp_string255) tmp = S /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   207
  //   208     options = H Option %if Options=0 %and inf=""

  if (OPTIONS != 0) goto L_0010;

  if (_imp_strcmp((_imp_string *)/*?*/ &INF, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0010;

  OPTIONS = 512;
L_0010:;

//   209     options = A Option %if Options=0

  if (OPTIONS != 0) goto L_0011;
  OPTIONS = 16384;
L_0011:;

//   210     options = options ! M Option ! C Option ! W Option %if (options & A option)#0

  if (OPTIONS & 16384 == 0) goto L_0012;
  OPTIONS = OPTIONS | 128 | 4096 | 1;
L_0012:;

//   211     options = options ! N Option ! U Option %if (options & A Option)#0

  if (OPTIONS & 16384 == 0) goto L_0013;
  OPTIONS = OPTIONS | 64 | 2;
L_0013:;

//   212
//   213     %if inf # "" %start

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

    //   214       Open Input(1, inf)

  _imp_OPENINPUT(1,
                 *({
                   __typeof__(_imp_string31) tmp = INF /*q*/;
                   (_imp_string255 *)&tmp;
                 })
  );

  //   215       Select Input(1)

  _imp_SELECTINPUT(1);

  //   216     %finish

L_0014:;

//   217     %if outf # "" %start

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

    //   218       Open output(1, outf)

  _imp_OPENOUTPUT(1,
                  *({
                    __typeof__(_imp_string31) tmp = OUTF /*q*/;
                    (_imp_string255 *)&tmp;
                  })
  );

  //   219       Select Output(1)

  _imp_SELECTOUTPUT(1);

  //   220     %finish

L_0015:;

//   221  %end  {of interpret command line}

  return;
} /* end of INTERPRETCOMMANDLINE */

// ?PROGNAME unused
//   222
//   223
//   224  {LEXICAL TABLES}
//   225
//   226    %constantbyteinteger  wordchar     = 0,
//   227+                         blankspace   = 1,
//   228+                         illegal char = 2,
//   229+                         noise word   = 3 {ignore words containing one of these},
//   230+                         bad alpha    = 4,
//   231+                         punctuation  = 5,
//   232+                         newline char = 10
//   233     %ownbyteinteger %array  lexical type (0:255) =

static unsigned char LEXICALTYPE[256] = {2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 1, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 2,
                                         2, 2, 1,
                                         5, 5, 1,
                                         1, 1, 5,
                                         5, 5, 5,
                                         1, 1, 5,
                                         1, 5, 3,
                                         3, 3, 3,
                                         3, 3, 3,
                                         3, 3, 3,
                                         3, 5, 5,
                                         1, 1, 1,
                                         5, 0, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 4, 4,
                                         4, 3, 3,
                                         1, 1, 1,
                                         5, 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,
                                         5, 1, 1,
                                         1, 2, [128 ... 255] = 2};

//   234+          illegal char        {NUL}, illegal char        {SOH},
//   235+          illegal char        {STX}, illegal char        {ETX},
//   236+          illegal char        {EOT}, illegal char        {ENQ},
//   237+          illegal char        {ACK}, illegal char        {BEL},
//   238+          illegal char        {BS},  illegal char        {HT},
//   239+          blankspace          {NL},  illegal char        {VT},
//   240+          illegal char        {FF},  illegal char        {CR},
//   241+          illegal char        {SO},  illegal char        {SI},
//   242+          illegal char        {DLE}, illegal char        {DC1},
//   243+          illegal char        {DC2}, illegal char        {DC3},
//   244+          illegal char        {DC4}, illegal char        {NAK},
//   245+          illegal char        {SYN}, illegal char        {ETB},
//   246+          illegal char        {CAN}, illegal char        {EM},
//   247+          illegal char        {SUB}, illegal char        {ESC},
//   248+          illegal char        {FS},  illegal char        {GS},
//   249+          illegal char        {RS},  illegal char        {US},
//   250+          blank space         { },   punctuation         {!},
//   251+          punctuation         {"},   blank space         {#},
//   252+          blank space         {$},   blank space         {%},
//   253+          punctuation         {&},   punctuation         {'},
//   254+          punctuation         {(},   punctuation         {)},
//   255+          blank space         {*},   blank space         {+},
//   256+          punctuation         {,},   blank space         {-},
//   257+          punctuation         {.},   noise word          {/},
//   258+          noise word          {0},   noise word          {1},
//   259+          noise word          {2},   noise word          {3},
//   260+          noise word          {4},   noise word          {5},
//   261+          noise word          {6},   noise word          {7},
//   262+          noise word          {8},   noise word          {9},
//   263+          punctuation         {:},   punctuation         {;},
//   264+          blank space         {<},   blank space         {=},
//   265+          blank space         {>},   punctuation         {?},
//   266+          word char           {@},   bad alpha           {A},
//   267+          bad alpha           {B},   bad alpha           {C},
//   268+          bad alpha           {D},   bad alpha           {E},
//   269+          bad alpha           {F},   bad alpha           {G},
//   270+          bad alpha           {H},   bad alpha           {I},
//   271+          bad alpha           {J},   bad alpha           {K},
//   272+          bad alpha           {L},   bad alpha           {M},
//   273+          bad alpha           {N},   bad alpha           {O},
//   274+          bad alpha           {P},   bad alpha           {Q},
//   275+          bad alpha           {R},   bad alpha           {S},
//   276+          bad alpha           {T},   bad alpha           {U},
//   277+          bad alpha           {V},   bad alpha           {W},
//   278+          bad alpha           {X},   bad alpha           {Y},
//   279+          bad alpha           {Z},   noise word          {[},
//   280+          noise word {for LATEX \},  blank space         {]},
//   281+          blank space         {^},   blank space         {_},
//   282+          punctuation         {`},   word char           {a},
//   283+          word char           {b},   word char           {c},
//   284+          word char           {d},   word char           {e},
//   285+          word char           {f},   word char           {g},
//   286+          word char           {h},   word char           {i},
//   287+          word char           {j},   word char           {k},
//   288+          word char           {l},   word char           {m},
//   289+          word char           {n},   word char           {o},
//   290+          word char           {p},   word char           {q},
//   291+          word char           {r},   word char           {s},
//   292+          word char           {t},   word char           {u},
//   293+          word char           {v},   word char           {w},
//   294+          word char           {x},   word char           {y},
//   295+          word char           {z},   punctuation         {curly bra},
//   296+          blank space         {|},   blank space         {curly ket},
//   297+          blank space         {~},   illegal char        {DEL},
//   298+          illegal char(*)
//   299     %owninteger %array punctuation count(0:255) = 0(*)

static int PUNCTUATIONCOUNT[256] = {[0 ... 255] = 0};

//   300
//   301  {INIT}
//   302
//   303  %routine init

static void INIT(void) {
  //   304     %integer i

  int I;

  //   305     %for i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_0016:
    if (I == 4095) goto L_0017;
    I += 1;

    //   306        word table(i) ==  NIL

    WORDTABLE[I] = (struct WORDREC *)NIL;

    //   307     %repeat

    goto L_0016;
  }

L_0017:;

//   308     sort tree ==  NIL

  SORTTREE = (struct NODE *)NIL;

  //   309
  //   310     {handle latex ctrl char}
  //   311     %if  (options & T option)#0  %start

  if (OPTIONS & 4 == 0) goto L_0019;

    //   312        lexical type('\') =  blank space

  LEXICALTYPE[92] = 1;

  //   313        lexical type('(') =  blank space

  LEXICALTYPE[40] = 1;

  //   314        lexical type('{') =  blank space

  LEXICALTYPE[123] = 1;

  //   315     %finish

L_0019:;

//   316
//   317     {handle scribe ctrl char}
//   318     %if  (options & S option)#0  %start

  if (OPTIONS & 8 == 0) goto L_001A;

    //   319        lexical type('@') =  noise word

  LEXICALTYPE[64] = 3;

  //   320     %finish

L_001A:;

//   321
//   322     {handle digits}
//   323     %if  (options & D option)#0  %start

  if (OPTIONS & 2048 == 0) goto L_001B;

    //   324        %for i='0',1,'9'  %cycle

    // %for I = 48, 1, 57 %cycle
  {
    I = 47;
  L_001C:
    if (I == 57) goto L_001D;
    I += 1;

    //   325           lexical type(i) =  word char

    LEXICALTYPE[I] = 0;

    //   326        %repeat

    goto L_001C;
  }

L_001D:;

//   327     %finish

L_001B:;

//   328  %end  {of init}

  return;
} /* end of INIT */

//   329
//   330
//   331  {HELP}
//   332
//   333  %routine  help

static void HELP(void) {
  //   334     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{---------------------------------------------------------------------------}"));

  //   335+ "{---------------------------------------------------------------------------}")
  //   336     Newline

  _imp_NEWLINE();

  //   337     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{ WORD infile outfile [-a] [-b] [-c] [-d] [-dict fname] [-f] [-h] [-l] [-m] }"));

  //   338+ "{ WORD infile outfile [-a] [-b] [-c] [-d] [-dict fname] [-f] [-h] [-l] [-m] }")
  //   339     Newline

  _imp_NEWLINE();

  //   340     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{                     [-p] [-r] [-s] [-t] [-u] [-w]                         }"));

  //   341+ "{                     [-p] [-r] [-s] [-t] [-u] [-w]                         }")
  //   342     Newline

  _imp_NEWLINE();

  //   343     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{                                                                           }"));

  //   344+ "{                                                                           }")
  //   345     Newline

  _imp_NEWLINE();

  //   346     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{ FUNCTION                                                                  }"));

  //   347+ "{ FUNCTION                                                                  }")
  //   348     Newline

  _imp_NEWLINE();

  //   349     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    Produce word lists: vocabularies, lists of spelling errors,            }"));

  //   350+ "{    Produce word lists: vocabularies, lists of spelling errors,            }")
  //   351     Newline

  _imp_NEWLINE();

  //   352     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    word frequency lists, word counts, list multiple words.                }"));

  //   353+ "{    word frequency lists, word counts, list multiple words.                }")
  //   354     Newline

  _imp_NEWLINE();

  //   355     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    Option -t is in support of TEX and LATEX                               }"));

  //   356+ "{    Option -t is in support of TEX and LATEX                               }")
  //   357     Newline

  _imp_NEWLINE();

  //   358     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{                                                                           }"));

  //   359+ "{                                                                           }")
  //   360     Newline

  _imp_NEWLINE();

  //   361     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{ OPTIONS                                                                   }"));

  //   362+ "{ OPTIONS                                                                   }")
  //   363     Newline

  _imp_NEWLINE();

  //   364     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{     default        same as [-a]                                           }"));

  //   365+ "{     default        same as [-a]                                           }")
  //   366     Newline

  _imp_NEWLINE();

  //   367     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -a              shorthand for [-c -m -n -u -w]                         }"));

  //   368+ "{    -a              shorthand for [-c -m -n -u -w]                         }")
  //   369     Newline

  _imp_NEWLINE();

  //   370     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -b              What is the biggest (longest) word                     }"));

  //   371+ "{    -b              What is the biggest (longest) word                     }")
  //   372     Newline

  _imp_NEWLINE();

  //   373     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -c              Check spelling                                         }"));

  //   374+ "{    -c              Check spelling                                         }")
  //   375     Newline

  _imp_NEWLINE();

  //   376     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -d              include Digits                                         }"));

  //   377+ "{    -d              include Digits                                         }")
  //   378     Newline

  _imp_NEWLINE();

  //   379     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -f              produce vocabulary list, sorted by frequency           }"));

  //   380+ "{    -f              produce vocabulary list, sorted by frequency           }")
  //   381     Newline

  _imp_NEWLINE();

  //   382     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -h              print help info                                        }"));

  //   383+ "{    -h              print help info                                        }")
  //   384     Newline

  _imp_NEWLINE();

  //   385     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -l              produce vocabulary list, sorted Lexically              }"));

  //   386+ "{    -l              produce vocabulary list, sorted Lexically              }")
  //   387     Newline

  _imp_NEWLINE();

  //   388     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -m              flag error when multiple instances of same word occur  }"));

  //   389+ "{    -m              flag error when multiple instances of same word occur  }")
  //   390     Newline

  _imp_NEWLINE();

  //   391     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -n              for each spelling error, give me help with the spelling}"));

  //   392+ "{    -n              for each spelling error, give me help with the spelling}")
  //   393     Newline

  _imp_NEWLINE();

  //   394     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -r              print vocabulary lists in Reverse order                }"));

  //   395+ "{    -r              print vocabulary lists in Reverse order                }")
  //   396     Newline

  _imp_NEWLINE();

  //   397     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -s              disregard `@' instead of seeing it as a special alpha  }"));

  //   398+ "{    -s              disregard `@' instead of seeing it as a special alpha  }")
  //   399     Newline

  _imp_NEWLINE();

  //   400     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -t              consider `\\' to be a char instead disregarding it      }"));

  //   401+ "{    -t              consider `\' to be a char instead disregarding it      }")
  //   402     Newline

  _imp_NEWLINE();

  //   403     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -u              check word Usage and help me with my writing style     }"));

  //   404+ "{    -u              check word Usage and help me with my writing style     }")
  //   405     Newline

  _imp_NEWLINE();

  //   406     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -w              print Word count and variety of words                  }"));

  //   407+ "{    -w              print Word count and variety of words                  }")
  //   408     Newline

  _imp_NEWLINE();

  //   409     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{    -dict dictname  use dictionary in file <dictname> instead of default   }"));

  //   410+ "{    -dict dictname  use dictionary in file <dictname> instead of default   }")
  //   411     Newline

  _imp_NEWLINE();

  //   412     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{                    (Default dict is STYLE:DICT)                           }"));

  //   413+ "{                    (Default dict is STYLE:DICT)                           }")
  //   414     Newline

  _imp_NEWLINE();

  //   415     Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("{---------------------------------------------------------------------------}"));

  //   416+ "{---------------------------------------------------------------------------}")
  //   417     Newline

  _imp_NEWLINE();

  //   418     %if Options = H Option %then %stop

  if (OPTIONS != 512) goto L_001F;
  _imp_stop(0);
L_001F:;

//   419  %end  {of help}

  return;
} /* end of HELP */

//   420
//   421
//   422  {NEXT WORD}
//   423
//   424  %string (31) %function  next word

static _imp_string31 NEXTWORD(void) {
  //   425
  //   426     {GET SYMBOL}
  //   427     %integer %function  get symbol

  int GETSYMBOL(void) {
    //   428        %integer ch

    int CH;

    //   429        Read Symbol(ch)

    _imp_READSYMBOL(/*?*/ &CH);

    //   430        line number =  line number + 1 %if ch = newline char

    if (CH != 10) goto L_0020;
    LINENUMBER = LINENUMBER + 1;
  L_0020:;

  //   431        %if lexical type(ch) = punctuation  %start

    if (LEXICALTYPE[CH] != 5) goto L_0021;

      //   432           punctuation count(ch) = punctuation count(ch) + 1

    PUNCTUATIONCOUNT[CH] = PUNCTUATIONCOUNT[CH] + 1;

    //   433           prev word = "."

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

    //   434        %finish

  L_0021:;

  //   435        %if  'A'  <=  ch  <= 'Z'  %start

    {
// Double-sided test on CH (Part I)
      int tmp;
      if (65 > (tmp = CH)) goto L_0022;
// Double-sided test on CH (Part II)
      if (tmp > 90) goto L_0022;
    }

    //   436           {convert to lower case}
    //   437           %result =  ch - 'A' + 'a'

    return CH - 65 + 97;

    //   438        %else

  L_0022:;

  //   439           %result =  ch

    return CH;

    //   440        %finish
    //   441     %end  {of get symbol}

  } /* end of GETSYMBOL */

  //   442
  //   443     %integer ch

  int CH;

  //   444     %ownbyteinteger ready to start a new sentence = 0

  static unsigned char READYTOSTARTANEWSENTENCE = 0;

  //   445     %string (31) word

  _imp_string31 WORD;

  //   446
  //   447     {MAIN OF NEXT WORD}
  //   448
  //   449     word = ""

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

  //   450     ch =  get symbol

  CH = GETSYMBOL();

  //   451
  //   452     %while lexical type(ch) # word char %and %c

L_0023:;
  if (LEXICALTYPE[CH] == 0) goto L_0024;
  if (LEXICALTYPE[CH] == 3) goto L_0024;

    //   453+           lexical type(ch) # noise word %cycle
    //   454        ch =  get symbol

  CH = GETSYMBOL();

  //   455     %repeat

  goto L_0023;
L_0024:;

//   456
//   457     {check that have no noise words}
//   458     %if  lexical type(ch) = noise word  %start

  if (LEXICALTYPE[CH] != 3) goto L_0025;

    //   459        {skip to end of word}
    //   460        %while  lexical type(ch) # blank space  %cycle

L_0026:;
  if (LEXICALTYPE[CH] == 1) goto L_0027;

    //   461           ch =  get symbol

  CH = GETSYMBOL();

  //   462        %repeat

  goto L_0026;
L_0027:;

//   463        %result  =  next word

  return *(_imp_string31 *)/*?*/ &NEXTWORD();

  //   464     %finish

L_0025:;

//   465
//   466     {read word}
//   467     %while lexical type(ch) = word char %and LENGTH(word) < 31 %cycle

L_0028:;
  if (LEXICALTYPE[CH] != 0) goto L_0029;
  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &WORD) >= 31) goto L_0029;

    //   468        word =  word . Tostring(ch)

  _imp_strncpy(/*?*/ &WORD, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = *({
                   _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &WORD, ({
                                                    __typeof__(_imp_string1) tmp; /*E*/
                                                    tmp = _imp_TOSTRING(CH);
                                                    (void *)&tmp;
                                                  }));
                   (_imp_string255 *)&tmp;
                 });
                 (void *)&tmp;
               }),
               /*max:*/ 31);

  //   469        ch =  get symbol

  CH = GETSYMBOL();

  //   470     %repeat

  goto L_0028;
L_0029:;

//   471
//   472     {watch for startf a new sentence}
//   473     %if  ready to start a new sentence = 1  %start

  if (READYTOSTARTANEWSENTENCE != 1) goto L_002A;

    //   474         words from start of sentence =  1 {the first word in a new sentence}

  WORDSFROMSTARTOFSENTENCE = 1;

  //   475         ready to start a new sentence = 0

  READYTOSTARTANEWSENTENCE = 0;

  //   476         in a sentence =  1

  INASENTENCE = 1;

  //   477     %else

  goto L_002B;
L_002A:;

//   478         words from start of sentence =  words from start of sentence + 1

  WORDSFROMSTARTOFSENTENCE = WORDSFROMSTARTOFSENTENCE + 1;

  //   479     %finish

L_002B:;

//   480
//   481     {Keep score of how many sentences parsed}
//   482     %if  ch = '.'  %or  ch = '!'  %or  ch = '?' %or ch = ':'  %start

  if (CH == 46) goto L_0018;
  if (CH == 33) goto L_0018;
  if (CH == 63) goto L_0018;
  if (CH != 58) goto L_002C;
L_0018:;

//   483        sentence count =  sentence count + 1

  SENTENCECOUNT = SENTENCECOUNT + 1;

  //   484        ready to start a new sentence =  1

  READYTOSTARTANEWSENTENCE = 1;

  //   485     %finish

L_002C:;

//   486
//   487     {watch for end of a sentence}
//   488     %if  ready to start a new sentence = 1  %start

  if (READYTOSTARTANEWSENTENCE != 1) goto L_002D;

    //   489         just finished a sentence =  1

  JUSTFINISHEDASENTENCE = 1;

  //   490         in a sentence =  0

  INASENTENCE = 0;

  //   491     %else

  goto L_002E;
L_002D:;

//   492         just finished a sentence =  0

  JUSTFINISHEDASENTENCE = 0;

  //   493     %finish

L_002E:;

//   494
//   495     {check that have no noise words}
//   496     %if  lexical type(ch) = noise word  %start

  if (LEXICALTYPE[CH] != 3) goto L_002F;

    //   497        {skip to end of word}
    //   498        %while  lexical type(ch) # blank space  %cycle

L_0030:;
  if (LEXICALTYPE[CH] == 1) goto L_0031;

    //   499           ch =  get symbol

  CH = GETSYMBOL();

  //   500        %repeat

  goto L_0030;
L_0031:;

//   501        %result  =  next word

  return *(_imp_string31 *)/*?*/ &NEXTWORD();

  //   502     %else

L_002F:;

//   503        %while  lexical type(ch) = word char  %cycle

L_0032:;
  if (LEXICALTYPE[CH] != 0) goto L_0033;

    //   504           ch =  get symbol

  CH = GETSYMBOL();

  //   505        %repeat

  goto L_0032;
L_0033:;

//   506        %result =  word

  return *(_imp_string31 *)/*?*/ &WORD;

  //   507     %finish
  //   508  %end  {of next word}

} /* end of NEXTWORD */

//   509
//   510
//   511  {HASHING ADDR}
//   512
//   513  %integerfunction hash addr(%string (31) name)

static int HASHADDR(_imp_string31 NAME) {
  //   514     %integer hash index = 0; %integer char

  int HASHINDEX;
  HASHINDEX = 0;
  int CHAR;

  //   515     %for char = 1,1,LENGTH (name) %cycle

  // %for CHAR = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&NAME) %cycle
  {
    int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME);
    if (invalid_for_loop(1, 1, _final))
      _imp_signal(5, 1, 0, "Illegal cycle CHAR = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&NAME)");
    CHAR = 0;
  L_0034:
    if (CHAR == _final) goto L_0035;
    CHAR += 1;

    //   516        hash index =  hash index<<1 !! CHARNO(name,char)

    HASHINDEX = HASHINDEX << 1 ^ *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &NAME, CHAR);

    //   517     %repeat

    goto L_0034;
  }

L_0035:;

//   518     %result =  hash index & hash table size

  return HASHINDEX & 4095;

  //   519  %end  {of  hash code generated from string}

} /* end of HASHADDR */

//   520
//   521
//   522  {ENDS WITH S}
//   523  %predicate ends with s(%string (31) s)

static int ENDSWITHS(_imp_string31 S) {
  //   524     {plurality test}
  //   525     %true  %if  CHARNO(s,LENGTH(s)) = 's'

  if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &S, *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &S)) != 115)
    goto L_0037;
  return 1 /*TRUE*/;
L_0037:;

//   526     %false

  return 0 /*FALSE*/;

  //   527  %end {of ends with s}

} /* end of ENDSWITHS */

//   528
//   529  {HAVE ARTICLE}
//   530  %predicate  have article(%string (31) s)

static int HAVEARTICLE(_imp_string31 S) {
  //   531     %true  %if  s = "a"         %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("a")) == 0) goto L_0036;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("the")) != 0) goto L_0038;

L_0036:;
  return 1 /*TRUE*/;
L_0038:;

//   532+                s = "the"
//   533     %false

  return 0 /*FALSE*/;

  //   534  %end  {of have article}

} /* end of HAVEARTICLE */

//   535
//   536  {HAVE CONJUGATION}
//   537  %predicate  have conjugation(%string (31) s)

static int HAVECONJUGATION(_imp_string31 S) {
  //   538     %true  %if  s = "and"    %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("and")) == 0) goto L_0039;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("but")) == 0) goto L_0039;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("yet")) == 0) goto L_0039;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("while")) == 0) goto L_0039;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("though")) != 0) goto L_003A;

L_0039:;
  return 1 /*TRUE*/;
L_003A:;

//   539+                s = "but"    %or %c
//   540+                s = "yet"    %or %c
//   541+                s = "while"  %or %c
//   542+                s = "though"
//   543     %false

  return 0 /*FALSE*/;

  //   544  %end  {of have conjugation}

} /* end of HAVECONJUGATION */

//   545
//   546  {HAVE PREPOSITION}
//   547  %predicate  have preposition(%string (31) s)

static int HAVEPREPOSITION(_imp_string31 S) {
  //   548     %true  %if  s = "from"  %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("from")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("to")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("on")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("by")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("at")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("in")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("over")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("along")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("after")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("before")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("with")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("without")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("near")) == 0) goto L_003B;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("next")) != 0) goto L_003C;

L_003B:;
  return 1 /*TRUE*/;
L_003C:;

//   549+                s = "to"    %or %c
//   550+                s = "on"    %or %c
//   551+                s = "by"     %or %c
//   552+                s = "at"     %or %c
//   553+                s = "in"     %or %c
//   554+                s = "over"    %or %c
//   555+                s = "along"    %or %c
//   556+                s = "after"    %or %c
//   557+                s = "before"    %or %c
//   558+                s = "with"  %or %c
//   559+                s = "without"  %or %c
//   560+                s = "near"   %or %c
//   561+                s = "next"
//   562     %false

  return 0 /*FALSE*/;

  //   563  %end  {of have preposition}

} /* end of HAVEPREPOSITION */

//   564
//   565  {HAVE PRONOUN}
//   566  %predicate  have pronoun(%string (31) s)

static int HAVEPRONOUN(_imp_string31 S) {
  //   567     %true  %if  s = "i"        %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("i")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("you")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("she")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("he")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("we")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("they")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("who")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("whom")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("them")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("which")) == 0) goto L_003D;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("near")) != 0) goto L_003E;

L_003D:;
  return 1 /*TRUE*/;
L_003E:;

//   568+                s = "you"      %or %c
//   569+                s = "she"      %or %c
//   570+                s = "he"       %or %c
//   571+                s = "we"       %or %c
//   572+                s = "they"     %or %c
//   573+                s = "who"      %or %c
//   574+                s = "whom"     %or %c
//   575+                s = "them"     %or %c
//   576+                s = "which"    %or %c
//   577+                s = "near"
//   578     %false

  return 0 /*FALSE*/;

  //   579  %end  {of have pronoun}

} /* end of HAVEPRONOUN */

//   580
//   581  {HAVE REFERENCE}
//   582  %predicate  have reference(%string (31) s)

static int HAVEREFERENCE(_imp_string31 S) {
  //   583     %true  %if s = "that"      %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("that")) == 0) goto L_003F;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("these")) == 0) goto L_003F;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("this")) == 0) goto L_003F;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("those")) == 0) goto L_003F;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("it")) != 0) goto L_0040;

L_003F:;
  return 1 /*TRUE*/;
L_0040:;

//   584+               s = "these"     %or %c
//   585+               s = "this"      %or %c
//   586+               s = "those"     %or %c
//   587+               s = "it"
//   588     %false

  return 0 /*FALSE*/;

  //   589  %end  {of have reference}

} /* end of HAVEREFERENCE */

//   590
//   591  {HAVE ADVERB}
//   592  %predicate  have adverb(%string (31) s)

static int HAVEADVERB(_imp_string31 S) {
  //   593     %true  %if s = "is"       %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("is")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("are")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("can")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("may")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("were")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("was")) == 0) goto L_0041;

  if (_imp_strcmp((_imp_string *)/*?*/ &S, (_imp_string *)/*?*/ _imp_str_literal_ptr("should")) != 0) goto L_0042;

L_0041:;
  return 1 /*TRUE*/;
L_0042:;

//   594+               s = "are"      %or %c
//   595+               s = "can"      %or %c
//   596+               s = "may"      %or %c
//   597+               s = "were"     %or %c
//   598+               s = "was"      %or %c
//   599+               s = "should"
//   600     %false

  return 0 /*FALSE*/;

  //   601  %end  {of have reference}

} /* end of HAVEADVERB */

//   602
//   603
//   604  {CREATE VOCABULARY}
//   605
//   606  %routine  create vocabulary

static void CREATEVOCABULARY(void) {
  //   607     %record (word rec) %name word holder

  struct WORDREC *WORDHOLDER;

  //   608     %integer hash posn

  int HASHPOSN;

  //   609     %string (31) word

  _imp_string31 WORD;

  //   610     %cycle

L_0043:;

//   611        word =  next word

  _imp_strncpy(/*?*/ &WORD, ({
                 __typeof__(_imp_string31) tmp; /*B*/
                 tmp = NEXTWORD();
                 (void *)&tmp;
               }),
               /*max:*/ 31);

  //   612        %if  in a sentence = 1  %start

  if (INASENTENCE != 1) goto L_0044;

    //   613           num words in sentences =  num words in sentences + 1

  NUMWORDSINSENTENCES = NUMWORDSINSENTENCES + 1;

  //   614        %finish

L_0044:;

//   615        %if  (options & M option)#0  %and %c

  if (OPTIONS & 128 == 0) goto L_0045;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ &PREVWORD) != 0) goto L_0045;

  if (WORDSFROMSTARTOFSENTENCE <= 1) goto L_0045;
  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &WORD) > 1) goto L_001E;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("a")) != 0) goto L_0045;

L_001E:;

//   616+          word = prev word  %and words from start of sentence > 1 %and %c
//   617+          (Length(word) > 1 %or word = "a") %start
//   618           Print String("Line ".ITOS(line number,0).": Duplicate of """.%c

  _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_string255 tmp = _imp_join(
                                                              (_imp_string *)/*?*/ _imp_str_literal_ptr("Line "), ({
                                                                __typeof__(_imp_string255) tmp; /*E*/
                                                                tmp = _imp_ITOS(LINENUMBER, 0);
                                                                (void *)&tmp;
                                                              }));
                                                          (_imp_string255 *)&tmp;
                                                        }),
                                                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": Duplicate of \""));
                                          (_imp_string255 *)&tmp;
                                        }),
                                        (_imp_string *)/*?*/ &WORD);
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr("\""));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   619+             word."""")
  //   620           Newline

  _imp_NEWLINE();

  //   621        %finish

L_0045:;

//   622        %if  (options & U option)#0  %start

  if (OPTIONS & 2 == 0) goto L_0046;

    //   623           %if  words from start of sentence = 2  %and %c

  if (WORDSFROMSTARTOFSENTENCE != 2) goto L_0047;
  if (!(HAVEREFERENCE(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_0047;
  if (!(HAVEADVERB(
          *({
            __typeof__(_imp_string31) tmp = WORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_0047;

    //   624+               have reference(prev word) %and         %c
    //   625+               have adverb(word)  %start
    //   626              recursive reference =  recursive reference + 1

  RECURSIVEREFERENCE = RECURSIVEREFERENCE + 1;

  //   627           %finish

L_0047:;

//   628           %if words from start of sentence = 1 %and word = "such" %start

  if (WORDSFROMSTARTOFSENTENCE != 1) goto L_0048;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("such")) != 0) goto L_0048;

    //   629              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": Use of recursive SUCH is legal jargon."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   630+             ": Use of recursive SUCH is legal jargon.")
  //   631              Newline

  _imp_NEWLINE();

  //   632              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("          Recursive SUCH is a nasty construct. It makes your writing awkward."));

  //   633+ "          Recursive SUCH is a nasty construct. It makes your writing awkward.")
  //   634              Newline

  _imp_NEWLINE();

  //   635           %finish

L_0048:;

//   636           %if  (word = "inevitably" %or word = "necessarily")  %and %c

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("inevitably")) == 0)
    goto L_0049;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("necessarily")) != 0)
    goto L_004A;

L_0049:;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("must")) != 0) goto L_004A;

    //   637+             prev word = "must"  %start
    //   638              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join(
              (_imp_string *)/*?*/ &*({
                _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                 __typeof__(_imp_string255) tmp; /*E*/
                                                 tmp = _imp_ITOS(LINENUMBER, 0);
                                                 (void *)&tmp;
                                               }));
                (_imp_string255 *)&tmp;
              }),
              (_imp_string *)/*?*/ _imp_str_literal_ptr(": Redundant MUST.  Using MUST here is very sloppy."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   639+             ": Redundant MUST.  Using MUST here is very sloppy.")
  //   640              Newline

  _imp_NEWLINE();

  //   641              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 56 of Gower's \"Plain Words\" (1973 ed)"));

  //   642+  "         See  page 56 of Gower's ""Plain Words"" (1973 ed)");
  //   643              Newline

  _imp_NEWLINE();

  //   644           %finish

L_004A:;

//   645           %if  words from start of sentence > 1 %and %c

  if (WORDSFROMSTARTOFSENTENCE <= 1) goto L_004B;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("incidentally")) != 0)
    goto L_004B;

    //   646+               word = "incidentally"  %start
    //   647              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                           _imp_string255 tmp =
                                               _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                                           (_imp_string255 *)&tmp;
                                         }),
                                         (_imp_string *)/*?*/ _imp_str_literal_ptr(
                                             ": Intrusive INCIDENTALLY.  It intrudes too much into the sentence"));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   648+             ": Intrusive INCIDENTALLY.  It intrudes too much into the sentence")
  //   649              Newline

  _imp_NEWLINE();

  //   650              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 56 of Gower's \"Plain Words\" (1973 ed)"));

  //   651+  "         See  page 56 of Gower's ""Plain Words"" (1973 ed)");
  //   652              Newline

  _imp_NEWLINE();

  //   653           %finish

L_004B:;

//   654           %if  (word = "incidentally"  %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("incidentally")) == 0)
    goto L_004C;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("definitely")) == 0)
    goto L_004C;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("actually")) == 0) goto L_004C;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("specific")) == 0) goto L_004C;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("particularly")) != 0)
    goto L_004D;

L_004C:;
  if (!(HAVEREFERENCE(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_004D;

    //   655+                word = "definitely"    %or %c
    //   656+                word = "actually"      %or %c
    //   657+                word = "specific"      %or %c
    //   658+                word = "particularly") %and %c
    //   659+                have reference(prev word)  %start
    //   660              Print String("--- Line ".ITOS(line number,0).%c

  _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_string255 tmp = _imp_join(
                                                              (_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                                __typeof__(_imp_string255) tmp; /*E*/
                                                                tmp = _imp_ITOS(LINENUMBER, 0);
                                                                (void *)&tmp;
                                                              }));
                                                          (_imp_string255 *)&tmp;
                                                        }),
                                                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": Using \""));
                                          (_imp_string255 *)&tmp;
                                        }),
                                        (_imp_string *)/*?*/ &WORD);
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr("\" here intrudes into your sentence. Remove it."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   661+             ": Using """.word.""" here intrudes into your sentence. Remove it.")
  //   662              Newline

  _imp_NEWLINE();

  //   663              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 56 of Gower's \"Plain Words\" (1973 ed)"));

  //   664+  "         See  page 56 of Gower's ""Plain Words"" (1973 ed)");
  //   665              Newline

  _imp_NEWLINE();

  //   666           %finish

L_004D:;

//   667  !         %if  (word = "case") %and have article(prev word)  %start
//   668  !            Print String("--- Line ".ITOS(line number,0).%c
//   669  !            ": Using CASE here is almost certainly wrong.")
//   670  !            Newline
//   671  !            Print String(%c
//   672  ! "         See  page 58 of Gower's ""Plain Words"" (1973 ed)");
//   673  !            Newline
//   674  !         %finish
//   675           %if  (word = "instance") %and prev word = "first" %start

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("instance")) != 0) goto L_004E;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("first")) != 0) goto L_004E;

    //   676              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join(
              (_imp_string *)/*?*/ &*({
                _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                 __typeof__(_imp_string255) tmp; /*E*/
                                                 tmp = _imp_ITOS(LINENUMBER, 0);
                                                 (void *)&tmp;
                                               }));
                (_imp_string255 *)&tmp;
              }),
              (_imp_string *)/*?*/ _imp_str_literal_ptr(": Bad cliche.  Remove the word INSTANCE and restructure."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   677+             ": Bad cliche.  Remove the word INSTANCE and restructure.")
  //   678              Newline

  _imp_NEWLINE();

  //   679              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 59 of Gower's \"Plain Words\" (1973 ed)"));

  //   680+  "         See  page 59 of Gower's ""Plain Words"" (1973 ed)");
  //   681              Newline

  _imp_NEWLINE();

  //   682           %finish

L_004E:;

//   683           %if  (word = "concerned") %and have adverb(prev word) %start

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("concerned")) != 0) goto L_004F;

  if (!(HAVEADVERB(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_004F;

    //   684              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                           _imp_string255 tmp =
                                               _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                                           (_imp_string255 *)&tmp;
                                         }),
                                         (_imp_string *)/*?*/ _imp_str_literal_ptr(
                                             ": Bad cliche.  Variant of AS FAR AS or SOMETHING .. IS CONCERNED."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   685+             ": Bad cliche.  Variant of AS FAR AS or SOMETHING .. IS CONCERNED.")
  //   686              Newline

  _imp_NEWLINE();

  //   687              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 59 of Gower's \"Plain Words\" (1973 ed)"));

  //   688+  "         See  page 59 of Gower's ""Plain Words"" (1973 ed)");
  //   689              Newline

  _imp_NEWLINE();

  //   690           %finish

L_004F:;

//   691           %if  (word = "time") %and prev word = "such" %start

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("time")) != 0) goto L_0050;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("such")) != 0) goto L_0050;

    //   692              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join(
              (_imp_string *)/*?*/ &*({
                _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                 __typeof__(_imp_string255) tmp; /*E*/
                                                 tmp = _imp_ITOS(LINENUMBER, 0);
                                                 (void *)&tmp;
                                               }));
                (_imp_string255 *)&tmp;
              }),
              (_imp_string *)/*?*/ _imp_str_literal_ptr(": Bad cliche.  Variant of UNTIL SUCH TIME.  You mean WHEN."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   693+             ": Bad cliche.  Variant of UNTIL SUCH TIME.  You mean WHEN.")
  //   694              Newline

  _imp_NEWLINE();

  //   695              Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 60 of Gower's \"Plain Words\" (1973 ed)"));

  //   696+  "         See  page 60 of Gower's ""Plain Words"" (1973 ed)");
  //   697              Newline

  _imp_NEWLINE();

  //   698           %finish

L_0050:;

//   699           %if prev word = "signal" %and word = "out" %start

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("signal")) != 0)
    goto L_0051;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("out")) != 0) goto L_0051;

    //   700              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": Misprint.  SIGNAL OUT instead of SINGLE OUT"));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   701+             ": Misprint.  SIGNAL OUT instead of SINGLE OUT")
  //   702              Newline

  _imp_NEWLINE();

  //   703           %finish

L_0051:;

//   704           %if prev word = "farther" %and words from start of sentence = 1 %start

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("farther")) != 0)
    goto L_0052;

  if (WORDSFROMSTARTOFSENTENCE != 1) goto L_0052;

    //   705                 Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": You use FARTHER when you mean FURTHER."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   706+                ": You use FARTHER when you mean FURTHER.")
  //   707                 Newline

  _imp_NEWLINE();

  //   708                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 189 of Fowler's \"Modern English Usage\" (1983 ed)"));

  //   709+  "         See  page 189 of Fowler's ""Modern English Usage"" (1983 ed)");
  //   710                 Newline

  _imp_NEWLINE();

  //   711           %finish

L_0052:;

//   712  !         %if prev word = "if" %and word = "and"  %start
//   713  !               {could be IF AND only if}
//   714  !               Print String("--- Line ".ITOS(line number,0).%c
//   715  !               ": Parrot.  Parrot.  (IF AND is a parrot's expression)")
//   716  !               Newline
//   717  !               Print String(%c
//   718  ! "         See  page 264 of Fowler's ""Modern English Usage"" (1983 ed)");
//   719  !               Newline
//   720  !         %finish
//   721           %if prev word = "and" %and word = "but"  %start

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("and")) != 0) goto L_0053;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("but")) != 0) goto L_0053;

    //   722              Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": AND BUT is an especially bad conjugation."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   723+             ": AND BUT is an especially bad conjugation.")
  //   724              Newline

  _imp_NEWLINE();

  //   725           %elseif  have conjugation(prev word) %and have conjugation(word)

  goto L_0054;
L_0053:;
  if (!(HAVECONJUGATION(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_0055;
  if (!(HAVECONJUGATION(
          *({
            __typeof__(_imp_string31) tmp = WORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_0055;

    //   726              Print String("--- Line ".ITOS(line number,0).%c

  _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_string255 tmp = _imp_join(
                                (_imp_string *)/*?*/ &*({
                                  _imp_string255 tmp = _imp_join(
                                      (_imp_string *)/*?*/ &*({
                                        _imp_string255 tmp =
                                            _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                        __typeof__(_imp_string255) tmp; /*E*/
                                                        tmp = _imp_ITOS(LINENUMBER, 0);
                                                        (void *)&tmp;
                                                      }));
                                        (_imp_string255 *)&tmp;
                                      }),
                                      (_imp_string *)/*?*/ _imp_str_literal_ptr(": Redundant conjugation.  \""));
                                  (_imp_string255 *)&tmp;
                                }),
                                (_imp_string *)/*?*/ &PREVWORD);
                            (_imp_string255 *)&tmp;
                          }),
                          (_imp_string *)/*?*/ _imp_str_literal_ptr("\" followed by \""));
                      (_imp_string255 *)&tmp;
                    }),
                    (_imp_string *)/*?*/ &WORD);
                (_imp_string255 *)&tmp;
              }),
              (_imp_string *)/*?*/ _imp_str_literal_ptr("\""));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   727+             ": Redundant conjugation.  """.prev word.""" followed by """.%c
  //   728+                word."""")
  //   729              Newline

  _imp_NEWLINE();

  //   730           %finish

L_0055:;
L_0054:;

//   731           %if prev word = "form" %and have article(word)  %start

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("form")) != 0) goto L_0056;

  if (!(HAVEARTICLE(
          *({
            __typeof__(_imp_string31) tmp = WORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_0056;

    //   732                 Print String("--- Line ".ITOS(line number,0).%c

  _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_string255 tmp = _imp_join(
                                                              (_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                                __typeof__(_imp_string255) tmp; /*E*/
                                                                tmp = _imp_ITOS(LINENUMBER, 0);
                                                                (void *)&tmp;
                                                              }));
                                                          (_imp_string255 *)&tmp;
                                                        }),
                                                        (_imp_string *)/*?*/ _imp_str_literal_ptr(
                                                            ": Hickup in parse caused by verb FORM followed by "));
                                          (_imp_string255 *)&tmp;
                                        }),
                                        (_imp_string *)/*?*/ &WORD);
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr("\""));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   733+                ": Hickup in parse caused by verb FORM followed by ".%c
  //   734+                   "the article """.word."""")
  //   735                 Newline

  _imp_NEWLINE();

  //   736                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Please check that you mean FORM and not FROM."));

  //   737+  "         Please check that you mean FORM and not FROM.");
  //   738                 Newline

  _imp_NEWLINE();

  //   739           %finish

L_0056:;

//   740           %if  Length(prev word) >= 7 %and %c

  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PREVWORD) < 7) goto L_0057;

  if (_imp_strcmp((_imp_string *)/*?*/ &_imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PREVWORD, 1, 7),
                  (_imp_string *)/*?*/ _imp_str_literal_ptr("infring")) != 0)
    goto L_0057;

  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &WORD) < 2) goto L_0057;

  if (_imp_strcmp((_imp_string *)/*?*/ &_imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &WORD, 1, 2),
                  (_imp_string *)/*?*/ _imp_str_literal_ptr("up")) != 0)
    goto L_0057;

    //   741+               Substring(prev word,1,7) = "infring" %and %c
    //   742+               Length(word) >= 2 %and Substring(word,1,2) = "up"  %start
    //   743                 Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join(
              (_imp_string *)/*?*/ &*({
                _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                 __typeof__(_imp_string255) tmp; /*E*/
                                                 tmp = _imp_ITOS(LINENUMBER, 0);
                                                 (void *)&tmp;
                                               }));
                (_imp_string255 *)&tmp;
              }),
              (_imp_string *)/*?*/ _imp_str_literal_ptr(": You have infringed the meaning of the word INFRINGE."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   744+                ": You have infringed the meaning of the word INFRINGE.")
  //   745                 Newline

  _imp_NEWLINE();

  //   746                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         You probably mean ENCROACH or TRESPASS instead"));

  //   747+  "         You probably mean ENCROACH or TRESPASS instead");
  //   748                 Newline

  _imp_NEWLINE();

  //   749                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 283 of Fowler's \"Modern English Usage\" (1983 ed)"));

  //   750+  "         See  page 283 of Fowler's ""Modern English Usage"" (1983 ed)");
  //   751                 Newline

  _imp_NEWLINE();

  //   752           %finish

L_0057:;

//   753           %if  Length(word) >= 5 %and Substring(word,1,5) = "infer" %and %c

  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &WORD) < 5) goto L_0058;

  if (_imp_strcmp((_imp_string *)/*?*/ &_imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &WORD, 1, 5),
                  (_imp_string *)/*?*/ _imp_str_literal_ptr("infer")) != 0)
    goto L_0058;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("inference")) == 0) goto L_0058;

    //   754+               word # "inference" %start
    //   755              %if  have preposition(prev word) %or have pronoun(prev word)  %start

  if (HAVEPREPOSITION(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              ))
    goto L_0059;
  if (!(HAVEPRONOUN(
          *({
            __typeof__(_imp_string31) tmp = PREVWORD /*q*/;
            (_imp_string31 *)&tmp;
          })
              )))
    goto L_005A;
L_0059:;

//   756                 Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": You use INFER when you mean IMPLY."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   757+                ": You use INFER when you mean IMPLY.")
  //   758                 Newline

  _imp_NEWLINE();

  //   759                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 282 of Fowler's \"Modern English Usage\" (1983 ed)"));

  //   760+  "         See  page 282 of Fowler's ""Modern English Usage"" (1983 ed)");
  //   761                 Newline

  _imp_NEWLINE();

  //   762              %finish

L_005A:;

//   763           %finish

L_0058:;

//   764           %if (Length(word)>=5 %and Substring(word,1,5) = "impli") %or %c

  if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &WORD) < 5) goto L_005B;

  if (_imp_strcmp((_imp_string *)/*?*/ &_imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &WORD, 1, 5),
                  (_imp_string *)/*?*/ _imp_str_literal_ptr("impli")) == 0)
    goto L_005C;

L_005B:;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("imply")) != 0) goto L_005D;

L_005C:;

//   765+             word = "imply" %start
//   766              %if  prev word = "can" %or %c

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("can")) == 0) goto L_005E;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("he")) == 0) goto L_005E;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("article")) == 0)
    goto L_005E;

  if (_imp_strcmp((_imp_string *)/*?*/ &PREVWORD, (_imp_string *)/*?*/ _imp_str_literal_ptr("may")) != 0) goto L_005F;

L_005E:;

//   767+                  prev word = "he" %or %c
//   768+                  prev word = "article" %or %c
//   769+                  prev word = "may" %start
//   770                 Print String("--- Line ".ITOS(line number,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- Line "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(LINENUMBER, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(": You use IMPLY when you mean INFER."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   771+                ": You use IMPLY when you mean INFER.")
  //   772                 Newline

  _imp_NEWLINE();

  //   773                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See  page 282 of Fowler's \"Modern English Usage\" (1983 ed)"));

  //   774+  "         See  page 282 of Fowler's ""Modern English Usage"" (1983 ed)");
  //   775                 Newline

  _imp_NEWLINE();

  //   776              %finish

L_005F:;

//   777           %finish

L_005D:;

//   778        %finish

L_0046:;

//   779        hash posn =  hash addr(word)

  HASHPOSN = HASHADDR(
      *({
        __typeof__(_imp_string31) tmp = WORD /*q*/;
        (_imp_string31 *)&tmp;
      })
  );

  //   780        word holder ==  word table(hash posn)

  WORDHOLDER = (struct WORDREC *)WORDTABLE[HASHPOSN];

  //   781        %if  word holder == NIL  %start

  if (_imp_ADDR((void *)(WORDHOLDER)) != _imp_ADDR((void *)(NIL))) goto L_0060;

    //   782           word holder ==  New(word holder)

  WORDHOLDER = (struct WORDREC *)_imp_NEW(WORDHOLDER);

  //   783           word holder_word =  word

  _imp_strncpy(/*?*/ &WORDHOLDER->WORD, ({
                 __typeof__(_imp_string31) tmp; /*B*/
                 tmp = WORD;
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   784           word holder_occurances =  1

  WORDHOLDER->OCCURANCES = 1;

  //   785           word holder_next ==  NIL

  WORDHOLDER->NEXT = (struct WORDREC *)NIL;

  //   786           word table(hash posn) ==  word holder

  WORDTABLE[HASHPOSN] = (struct WORDREC *)WORDHOLDER;

  //   787        %elseif  word holder_word # word

  goto L_0061;
L_0060:;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORDHOLDER->WORD, (_imp_string *)/*?*/ &WORD) == 0) goto L_0062;

    //   788           %while  word holder ## NIL  %and  word holder_word # word %cycle

L_0063:;

  if (_imp_ADDR((void *)(WORDHOLDER)) == _imp_ADDR((void *)(NIL))) goto L_0064;

  if (_imp_strcmp((_imp_string *)/*?*/ &WORDHOLDER->WORD, (_imp_string *)/*?*/ &WORD) == 0) goto L_0064;

    //   789              word holder ==  word holder_next

  WORDHOLDER = (struct WORDREC *)WORDHOLDER->NEXT;

  //   790           %repeat

  goto L_0063;
L_0064:;

//   791           %if  word holder == NIL  %start

  if (_imp_ADDR((void *)(WORDHOLDER)) != _imp_ADDR((void *)(NIL))) goto L_0065;

    //   792              word holder ==  New(word holder)

  WORDHOLDER = (struct WORDREC *)_imp_NEW(WORDHOLDER);

  //   793              word holder_word =  word

  _imp_strncpy(/*?*/ &WORDHOLDER->WORD, ({
                 __typeof__(_imp_string31) tmp; /*B*/
                 tmp = WORD;
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //   794              word holder_occurances =  1

  WORDHOLDER->OCCURANCES = 1;

  //   795              word holder_next ==  word table(hash posn)

  WORDHOLDER->NEXT = (struct WORDREC *)WORDTABLE[HASHPOSN];

  //   796              word table(hash posn) ==  word holder

  WORDTABLE[HASHPOSN] = (struct WORDREC *)WORDHOLDER;

  //   797           %else

  goto L_0066;
L_0065:;

//   798              word holder_occurances =  word holder_occurances + 1

  WORDHOLDER->OCCURANCES = WORDHOLDER->OCCURANCES + 1;

  //   799           %finish

L_0066:;

//   800        %else

  goto L_0061;
L_0062:;

//   801           word holder_occurances =  word holder_occurances + 1

  WORDHOLDER->OCCURANCES = WORDHOLDER->OCCURANCES + 1;

  //   802        %finish

L_0061:;

//   803        prev word =  word

  _imp_strncpy(/*?*/ &PREVWORD, ({
                 __typeof__(_imp_string31) tmp; /*B*/
                 tmp = WORD;
                 (void *)&tmp;
               }),
               /*max:*/ 31);

  //   804     %repeat

  goto L_0043;

  //   805  %end  {of create vocabulary}

} /* end of CREATEVOCABULARY */

//   806
//   807
//   808
//   809  {SORT WORD TABLE LEXICALLY}
//   810
//   811  %routine sort word table lexically

static void SORTWORDTABLELEXICALLY(void) {
  //   812     { Transfer hash table to a binary tree }
  //   813
  //   814     %routine  add to tree(%record (node) %name nd,%record (word rec) %name wd)

  void ADDTOTREE(struct NODE * ND, struct WORDREC * WD) {
    //   815        %record (node) %name nn == NIL

    struct NODE *NN;
    NN = (struct NODE *)NIL;

    //   816        %if wd_word > nd_word_word  %start

    if (_imp_strcmp((_imp_string *)/*?*/ &WD->WORD, (_imp_string *)/*?*/ &ND->WORD->WORD) <= 0) goto L_0067;

      //   817           %if  nd_rson == NIL  %start

    if (_imp_ADDR((void *)(ND->RSON)) != _imp_ADDR((void *)(NIL))) goto L_0068;

      //   818              nn ==  New(nn)

    NN = (struct NODE *)_imp_NEW(NN);

    //   819              nn =  0; nn_rson == NIL; nn_lson == NIL; nn_brother == NIL

    *NN = (struct NODE){0};
    NN->RSON = (struct NODE *)NIL;
    NN->LSON = (struct NODE *)NIL;
    NN->BROTHER = (struct NODE *)NIL;

    //   820              nn_word ==  wd

    NN->WORD = (struct NODE *)WD;

    //   821              nd_rson ==  nn

    ND->RSON = (struct NODE *)NN;

    //   822           %else

    goto L_0069;
  L_0068:;

  //   823              add to tree(nd_rson,wd)

    ADDTOTREE(ND->RSON, WD);

    //   824           %finish

  L_0069:;

  //   825        %finish

  L_0067:;

  //   826        %if wd_word < nd_word_word  %start

    if (_imp_strcmp((_imp_string *)/*?*/ &WD->WORD, (_imp_string *)/*?*/ &ND->WORD->WORD) >= 0) goto L_006A;

      //   827           %if  nd_lson == NIL  %start

    if (_imp_ADDR((void *)(ND->LSON)) != _imp_ADDR((void *)(NIL))) goto L_006B;

      //   828              nn ==  New(nn)

    NN = (struct NODE *)_imp_NEW(NN);

    //   829              nn =  0; nn_rson == NIL; nn_lson == NIL; nn_brother == NIL

    *NN = (struct NODE){0};
    NN->RSON = (struct NODE *)NIL;
    NN->LSON = (struct NODE *)NIL;
    NN->BROTHER = (struct NODE *)NIL;

    //   830              nn_word ==  wd

    NN->WORD = (struct NODE *)WD;

    //   831              nd_lson ==  nn

    ND->LSON = (struct NODE *)NN;

    //   832           %else

    goto L_006C;
  L_006B:;

  //   833              add to tree(nd_lson,wd)

    ADDTOTREE(ND->LSON, WD);

    //   834           %finish

  L_006C:;

  //   835        %finish

  L_006A:;

  //   836     %end {of add to tree}

    return;
  } /* end of ADDTOTREE */

  //   837
  //   838     %record (word rec) %name  mw

  struct WORDREC *MW;

  //   839     %string (31) word

  _imp_string31 WORD;

  //   840     %integer i

  int I;

  //   841
  //   842     %for  i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_006D:
    if (I == 4095) goto L_006E;
    I += 1;

    //   843         mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //   844         %while  mw ## NIL  %cycle

  L_0070:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_0071;

      //   845            word =  mw_word

    _imp_strncpy(/*?*/ &WORD, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = MW->WORD;
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //   846            %if  sort tree == NIL  %start

    if (_imp_ADDR((void *)(SORTTREE)) != _imp_ADDR((void *)(NIL))) goto L_0072;

      //   847               sort tree ==  New(sort tree)

    SORTTREE = (struct NODE *)_imp_NEW(SORTTREE);

    //   848               sort tree =  0

    *SORTTREE = (struct NODE){0};

    //   849               sort tree_rson == NIL; sort tree_lson == NIL

    SORTTREE->RSON = (struct NODE *)NIL;
    SORTTREE->LSON = (struct NODE *)NIL;

    //   850               sort tree_brother == NIL

    SORTTREE->BROTHER = (struct NODE *)NIL;

    //   851               sort tree_word ==  mw

    SORTTREE->WORD = (struct NODE *)MW;

    //   852            %else

    goto L_0073;
  L_0072:;

  //   853               add to tree(sort tree, mw)

    ADDTOTREE(SORTTREE, MW);

    //   854            %finish

  L_0073:;

  //   855            mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //   856         %repeat

    goto L_0070;
  L_0071:;

  //   857     %repeat

    goto L_006D;
  }

L_006E:;

//   858  %end  {of sort word table lexically}

  return;
} /* end of SORTWORDTABLELEXICALLY */

//   859
//   860
//   861  {SORT WORD TABLE BY FREQUENCY}
//   862
//   863  %routine sort word table by frequency

static void SORTWORDTABLEBYFREQUENCY(void) {
  //   864     { Transfer hash table to a binary tree }
  //   865
  //   866     %routine  add to tree(%record (node) %name nd,%record (word rec) %name wd)

  void ADDTOTREE(struct NODE * ND, struct WORDREC * WD) {
    //   867        %record (node) %name nn

    struct NODE *NN;

    //   868        %if wd_occurances > nd_word_occurances  %start

    if (WD->OCCURANCES <= ND->WORD->OCCURANCES) goto L_0074;

      //   869           %if  nd_rson == NIL  %start

    if (_imp_ADDR((void *)(ND->RSON)) != _imp_ADDR((void *)(NIL))) goto L_0075;

      //   870              nn ==  New(nn)

    NN = (struct NODE *)_imp_NEW(NN);

    //   871              nn =  0; nn_rson == NIL; nn_lson == NIL; nn_brother == NIL

    *NN = (struct NODE){0};
    NN->RSON = (struct NODE *)NIL;
    NN->LSON = (struct NODE *)NIL;
    NN->BROTHER = (struct NODE *)NIL;

    //   872              nn_word ==  wd

    NN->WORD = (struct NODE *)WD;

    //   873              nd_rson ==  nn

    ND->RSON = (struct NODE *)NN;

    //   874           %else

    goto L_0076;
  L_0075:;

  //   875              add to tree(nd_rson,wd)

    ADDTOTREE(ND->RSON, WD);

    //   876           %finish

  L_0076:;

  //   877        %finish

  L_0074:;

  //   878        %if  wd_occurances = nd_word_occurances  %start

    if (WD->OCCURANCES != ND->WORD->OCCURANCES) goto L_0077;

      //   879           nn ==  New(nn)

    NN = (struct NODE *)_imp_NEW(NN);

    //   880           nn =  0; nn_rson == NIL; nn_lson == NIL; nn_brother == NIL

    *NN = (struct NODE){0};
    NN->RSON = (struct NODE *)NIL;
    NN->LSON = (struct NODE *)NIL;
    NN->BROTHER = (struct NODE *)NIL;

    //   881           nn_word ==  wd

    NN->WORD = (struct NODE *)WD;

    //   882           nn_brother ==  nd_brother

    NN->BROTHER = (struct NODE *)ND->BROTHER;

    //   883           nd_brother ==  nn

    ND->BROTHER = (struct NODE *)NN;

    //   884        %finish

  L_0077:;

  //   885        %if wd_occurances < nd_word_occurances  %start

    if (WD->OCCURANCES >= ND->WORD->OCCURANCES) goto L_0078;

      //   886           %if  nd_lson == NIL  %start

    if (_imp_ADDR((void *)(ND->LSON)) != _imp_ADDR((void *)(NIL))) goto L_0079;

      //   887              nn ==  New(nn)

    NN = (struct NODE *)_imp_NEW(NN);

    //   888              nn =  0; nn_rson == NIL; nn_lson == NIL; nn_brother == NIL

    *NN = (struct NODE){0};
    NN->RSON = (struct NODE *)NIL;
    NN->LSON = (struct NODE *)NIL;
    NN->BROTHER = (struct NODE *)NIL;

    //   889              nn_word ==  wd

    NN->WORD = (struct NODE *)WD;

    //   890              nd_lson ==  nn

    ND->LSON = (struct NODE *)NN;

    //   891           %else

    goto L_007A;
  L_0079:;

  //   892              add to tree(nd_lson,wd)

    ADDTOTREE(ND->LSON, WD);

    //   893           %finish

  L_007A:;

  //   894        %finish

  L_0078:;

  //   895     %end {of add to tree}

    return;
  } /* end of ADDTOTREE */

  //   896
  //   897     %record (node) %name  nd

  struct NODE *ND;

  //   898     %record (word rec) %name  mw

  struct WORDREC *MW;

  //   899     %string (31) word

  _imp_string31 WORD;

  //   900     %integer i

  int I;

  //   901
  //   902     %for  i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_007B:
    if (I == 4095) goto L_007C;
    I += 1;

    //   903         mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //   904         %while  mw ## NIL  %cycle

  L_007D:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_007E;

      //   905            word =  mw_word

    _imp_strncpy(/*?*/ &WORD, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = MW->WORD;
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //   906            %if  sort tree == NIL  %start

    if (_imp_ADDR((void *)(SORTTREE)) != _imp_ADDR((void *)(NIL))) goto L_007F;

      //   907               sort tree ==  New(sort tree)

    SORTTREE = (struct NODE *)_imp_NEW(SORTTREE);

    //   908               sort tree =  0

    *SORTTREE = (struct NODE){0};

    //   909               sort tree_rson == NIL; sort tree_lson == NIL

    SORTTREE->RSON = (struct NODE *)NIL;
    SORTTREE->LSON = (struct NODE *)NIL;

    //   910               sort tree_brother == NIL

    SORTTREE->BROTHER = (struct NODE *)NIL;

    //   911               sort tree_word ==  mw

    SORTTREE->WORD = (struct NODE *)MW;

    //   912            %else

    goto L_0080;
  L_007F:;

  //   913               add to tree(sort tree,mw)

    ADDTOTREE(SORTTREE, MW);

    //   914            %finish

  L_0080:;

  //   915            mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //   916         %repeat

    goto L_007D;
  L_007E:;

  //   917     %repeat

    goto L_007B;
  }

L_007C:;

//   918  %end  {of sort word table lexically}

  return;
} /* end of SORTWORDTABLEBYFREQUENCY */

// ?ND unused
//   919
//   920
//   921  {PRINT OUT SORT TREE}
//   922
//   923  %routine  print node(%record (node) %name nd)

static void PRINTNODE(struct NODE *ND) {
  //   924     %record (word rec) %name mw

  struct WORDREC *MW;

  //   925     %integer i

  int I;

  //   926     %return %if nd == NIL

  if (_imp_ADDR((void *)(ND)) != _imp_ADDR((void *)(NIL))) goto L_0081;

  return;
L_0081:;

//   927     print node(nd_lson)

  PRINTNODE(ND->LSON);

  //   928     mw ==  nd_word

  MW = (struct WORDREC *)ND->WORD;

  //   929     print string(mw_word)

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = MW->WORD /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   930     %if  (options & P option)=0  %start

  if (OPTIONS & 32 != 0) goto L_0082;

    //   931        %for i=LENGTH(mw_word),1,40  %cycle

    // %for I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MW->WORD), 1, 40 %cycle
  {
    int _initial = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MW->WORD);
    if (invalid_for_loop(_initial, 1, 40))
      _imp_signal(5, 1, 0, "Illegal cycle I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MW->WORD), 1, 40");
    I = _initial - (1);
  L_0083:
    if (I == 40) goto L_0084;
    I += 1;

    //   932           Print String(" ")

    _imp_PRINTSTRING(_imp_str_literal(" "));

    //   933        %repeat

    goto L_0083;
  }

L_0084:;

//   934        print String(ITOS(mw_occurances,7))

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = _imp_ITOS(MW->OCCURANCES, 7) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   935     %finish

L_0082:;

//   936     Newline

  _imp_NEWLINE();

  //   937     print node(nd_brother)

  PRINTNODE(ND->BROTHER);

  //   938     print node(nd_rson)

  PRINTNODE(ND->RSON);

  //   939  %end  {of print node}

  return;
} /* end of PRINTNODE */

//   940
//   941
//   942  {PRINT OUT SORT TREE IN REVERSE}
//   943
//   944  %routine  print node in reverse(%record (node) %name nd)

static void PRINTNODEINREVERSE(struct NODE *ND) {
  //   945     %record (word rec) %name mw

  struct WORDREC *MW;

  //   946     %integer i

  int I;

  //   947     %return %if nd == NIL

  if (_imp_ADDR((void *)(ND)) != _imp_ADDR((void *)(NIL))) goto L_0086;

  return;
L_0086:;

//   948     print node in reverse(nd_rson)

  PRINTNODEINREVERSE(ND->RSON);

  //   949     print node in reverse(nd_brother)

  PRINTNODEINREVERSE(ND->BROTHER);

  //   950     mw ==  nd_word

  MW = (struct WORDREC *)ND->WORD;

  //   951     Print string(mw_word)

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = MW->WORD /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   952     %if  (options & P option)=0  %start

  if (OPTIONS & 32 != 0) goto L_0087;

    //   953        %for i=LENGTH(mw_word),1,40  %cycle

    // %for I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MW->WORD), 1, 40 %cycle
  {
    int _initial = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MW->WORD);
    if (invalid_for_loop(_initial, 1, 40))
      _imp_signal(5, 1, 0, "Illegal cycle I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MW->WORD), 1, 40");
    I = _initial - (1);
  L_0088:
    if (I == 40) goto L_0089;
    I += 1;

    //   954           Print String(" ")

    _imp_PRINTSTRING(_imp_str_literal(" "));

    //   955        %repeat

    goto L_0088;
  }

L_0089:;

//   956        Print String(ITOS(mw_occurances,7))

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = _imp_ITOS(MW->OCCURANCES, 7) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //   957     %finish

L_0087:;

//   958     Newline

  _imp_NEWLINE();

  //   959     print node in reverse(nd_lson)

  PRINTNODEINREVERSE(ND->LSON);

  //   960  %end  {of print node in reverse}

  return;
} /* end of PRINTNODEINREVERSE */

//   961
//   962
//   963  {NUMBER OF WORDS}
//   964
//   965  %integerfunction  number of words

static int NUMBEROFWORDS(void) {
  //   966     %record (word rec) %name  mw

  struct WORDREC *MW;

  //   967     %integer i,num words

  int I;
  int NUMWORDS;

  //   968
  //   969     num words = 0

  NUMWORDS = 0;

  //   970     %for i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_008A:
    if (I == 4095) goto L_008B;
    I += 1;

    //   971        %if  word table(i) ## NIL  %start

    if (_imp_ADDR((void *)(WORDTABLE[I])) == _imp_ADDR((void *)(NIL))) goto L_008C;

      //   972           mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //   973           %while  mw ## NIL  %cycle

  L_008D:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_008E;

      //   974              num words =  num words + mw_occurances

    NUMWORDS = NUMWORDS + MW->OCCURANCES;

    //   975              mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //   976           %repeat

    goto L_008D;
  L_008E:;

  //   977        %finish

  L_008C:;

  //   978     %repeat

    goto L_008A;
  }

L_008B:;

//   979     %result =  num words

  return NUMWORDS;

  //   980  %end  {of number of words}

} /* end of NUMBEROFWORDS */

//   981
//   982
//   983  {AVERAGE WORD LENGTH}
//   984
//   985  %realfunction  average word length

static float AVERAGEWORDLENGTH(void) {
  //   986     %record (word rec) %name  mw

  struct WORDREC *MW;

  //   987     %integer i,num words,num chars

  int I;
  int NUMWORDS;
  int NUMCHARS;

  //   988
  //   989     num words = 0; num chars = 0

  NUMWORDS = 0;
  NUMCHARS = 0;

  //   990     %for i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_008F:
    if (I == 4095) goto L_0090;
    I += 1;

    //   991        %if  word table(i) ## NIL  %start

    if (_imp_ADDR((void *)(WORDTABLE[I])) == _imp_ADDR((void *)(NIL))) goto L_0091;

      //   992           mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //   993           %while  mw ## NIL  %cycle

  L_0092:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_0093;

      //   994              num words =  num words + mw_occurances

    NUMWORDS = NUMWORDS + MW->OCCURANCES;

    //   995              num chars =  num chars + (LENGTH(mw_word)*mw_occurances)

    NUMCHARS = NUMCHARS + *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MW->WORD) * MW->OCCURANCES;

    //   996              mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //   997           %repeat

    goto L_0092;
  L_0093:;

  //   998        %finish

  L_0091:;

  //   999     %repeat

    goto L_008F;
  }

L_0090:;

//  1000     %result =  num chars / num words

  return (double)(NUMCHARS / NUMWORDS);

  //  1001  %end  {of number of words}

} /* end of AVERAGEWORDLENGTH */

//  1002
//  1003
//  1004  {WORD COUNT}
//  1005
//  1006  %routine  WORD COUNT

static void WORDCOUNT(void) {
  //  1007     %record (word rec) %name  mw

  struct WORDREC *MW;

  //  1008     %integer i,num words, variety

  int I;
  int NUMWORDS;
  int VARIETY;

  //  1009
  //  1010     num words = 0; variety = 0

  NUMWORDS = 0;
  VARIETY = 0;

  //  1011     %for i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_0094:
    if (I == 4095) goto L_0095;
    I += 1;

    //  1012        %if  word table(i) ## NIL  %start

    if (_imp_ADDR((void *)(WORDTABLE[I])) == _imp_ADDR((void *)(NIL))) goto L_0096;

      //  1013           mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //  1014           %while  mw ## NIL  %cycle

  L_0097:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_0098;

      //  1015              num words =  num words + mw_occurances

    NUMWORDS = NUMWORDS + MW->OCCURANCES;

    //  1016              variety =  variety + 1

    VARIETY = VARIETY + 1;

    //  1017              mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //  1018           %repeat

    goto L_0097;
  L_0098:;

  //  1019        %finish

  L_0096:;

  //  1020     %repeat

    goto L_0094;
  }

L_0095:;

//  1021     Print String("Word count = ".ITOS(num words,0))

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("Word count = "), ({
                                           __typeof__(_imp_string255) tmp; /*E*/
                                           tmp = _imp_ITOS(NUMWORDS, 0);
                                           (void *)&tmp;
                                         }));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1022     Newline

  _imp_NEWLINE();

  //  1023     Print String("Number of different words = ".ITOS(variety,0))

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("Number of different words = "), ({
                                           __typeof__(_imp_string255) tmp; /*E*/
                                           tmp = _imp_ITOS(VARIETY, 0);
                                           (void *)&tmp;
                                         }));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1024     Newline

  _imp_NEWLINE();

  //  1025  %end  {of word count}

  return;
} /* end of WORDCOUNT */

//  1026
//  1027
//  1028  {DO SPELLING CHECK}
//  1029
//  1030  %routine  do spelling check {from sort tree}

static void DOSPELLINGCHECK(void) {
  //  1031
  //  1032     %string (31) my word

  _imp_string31 MYWORD;

  //  1033     %owninteger  printed heading = 0

  static int PRINTEDHEADING = 0;

  //  1034
  //  1035     {go down to}
  //  1036     %routine  go down to(%record (node) %name nd)

  void GODOWNTO(struct NODE * ND) {
    //  1037        %ownstring (31) dictionary word =  ""

    static _imp_string31 DICTIONARYWORD = _imp_str_init("");

    //  1038        %integer i

    int I;

    //  1039        %return  %if  nd == NIL

    if (_imp_ADDR((void *)(ND)) != _imp_ADDR((void *)(NIL))) goto L_0099;

    return;
  L_0099:;

  //  1040        go down to(nd_lson)

    GODOWNTO(ND->LSON);

    //  1041        my word =  nd_word_word

    _imp_strncpy(/*?*/ &MYWORD, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = ND->WORD->WORD;
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //  1042        %while  dictionary word < my word  %cycle

  L_009A:;

    if (_imp_strcmp((_imp_string *)/*?*/ &DICTIONARYWORD, (_imp_string *)/*?*/ &MYWORD) >= 0) goto L_009B;

      //  1043           prev word = dictionary word

    _imp_strncpy(/*?*/ &PREVWORD, ({
                   __typeof__(_imp_string31) tmp; /*B*/
                   tmp = DICTIONARYWORD;
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //  1044           dictionary word =  next word

    _imp_strncpy(/*?*/ &DICTIONARYWORD, ({
                   __typeof__(_imp_string31) tmp; /*B*/
                   tmp = NEXTWORD();
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //  1045        %repeat

    goto L_009A;
  L_009B:;

  //  1046        %if  dictionary word # my word %start

    if (_imp_strcmp((_imp_string *)/*?*/ &DICTIONARYWORD, (_imp_string *)/*?*/ &MYWORD) == 0) goto L_009C;

      //  1047           {Have spelling error}
      //  1048           %if  printed heading = 0 %and (options & P option)=0  %start

    if (PRINTEDHEADING != 0) goto L_009D;
    if (OPTIONS & 32 != 0) goto L_009D;

      //  1049              Print String("MISSPELT WORDS:")

    _imp_PRINTSTRING(_imp_str_literal("MISSPELT WORDS:"));

    //  1050              Newline

    _imp_NEWLINE();

    //  1051              printed heading =  1

    PRINTEDHEADING = 1;

    //  1052           %finish

  L_009D:;

  //  1053           Print string(my word)

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

    //  1054           %if  (options & N option)# 0  %start

    if (OPTIONS & 64 == 0) goto L_009E;

      //  1055              %for i=LENGTH(my word),1,34  %cycle

      // %for I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MYWORD), 1, 34 %cycle
    {
      int _initial = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MYWORD);
      if (invalid_for_loop(_initial, 1, 34))
        _imp_signal(5, 1, 0, "Illegal cycle I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MYWORD), 1, 34");
      I = _initial - (1);
    L_009F:
      if (I == 34) goto L_00A0;
      I += 1;

      //  1056                 Print String(" ")

      _imp_PRINTSTRING(_imp_str_literal(" "));

      //  1057              %repeat

      goto L_009F;
    }

  L_00A0:;

  //  1058              Print String("(".prev word.", ".dictionary word.")")

    _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_string255 tmp = _imp_join(
                                                                       (_imp_string *)/*?*/ _imp_str_literal_ptr("("),
                                                                       (_imp_string *)/*?*/ &PREVWORD);
                                                                   (_imp_string255 *)&tmp;
                                                                 }),
                                                                 (_imp_string *)/*?*/ _imp_str_literal_ptr(", "));
                                                             (_imp_string255 *)&tmp;
                                                           }),
                                                           (_imp_string *)/*?*/ &DICTIONARYWORD);
                                             (_imp_string255 *)&tmp;
                                           }),
                                           (_imp_string *)/*?*/ _imp_str_literal_ptr(")"));
            (_imp_string255 *)&tmp;
          }) /*q*/;
          (_imp_string255 *)&tmp;
        })
    );

    //  1059           %finish

  L_009E:;

  //  1060           Newline

    _imp_NEWLINE();

    //  1061        %finish

  L_009C:;

  //  1062
  //  1063        go down to(nd_rson)

    GODOWNTO(ND->RSON);

    //  1064     %end  {of go down to}

    return;
  } /* end of GODOWNTO */

  //  1065
  //  1066     %integer i

  int I;

  //  1067
  //  1068     %onevent 3,9 %start

  if (!_imp_on_event(3, 9)) goto L_00A2;

    //  1069        %if event_event = 3  %start

  if (_imp_EVENT().EVENT != 3) goto L_00A3;

    //  1070           Select Output(0)

  _imp_SELECTOUTPUT(0);

  //  1071           Print String("Ether or file system error:")

  _imp_PRINTSTRING(_imp_str_literal("Ether or file system error:"));

  //  1072           Print String(itos(event_info {extra},0)."_".%c

  _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_string255 tmp =
                                                              _imp_join(({
                                                                          __typeof__(_imp_string255) tmp; /*D*/
                                                                          tmp = _imp_ITOS(_imp_EVENT().INFO, 0);
                                                                          (void *)&tmp;
                                                                        }),
                                                                        (_imp_string *)/*?*/ _imp_str_literal_ptr("_"));
                                                          (_imp_string255 *)&tmp;
                                                        }),
                                                        ({
                                                          __typeof__(_imp_string255) tmp; /*E*/
                                                          tmp = _imp_ITOS(_imp_EVENT().SUB, 0);
                                                          (void *)&tmp;
                                                        }));
                                          (_imp_string255 *)&tmp;
                                        }),
                                        (_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ &_imp_EVENT().MESSAGE);
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1073+                       itos(event_sub {event},0)." ".event_message)
  //  1074           Newline

  _imp_NEWLINE();

  //  1075           %stop

  _imp_stop(0);

  //  1076        %else

L_00A3:;

//  1077           Print string(my word)

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

  //  1078           %if  (options & N option)# 0  %start

  if (OPTIONS & 64 == 0) goto L_00A4;

    //  1079              %for i=LENGTH(my word),1,34  %cycle

    // %for I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MYWORD), 1, 34 %cycle
  {
    int _initial = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MYWORD);
    if (invalid_for_loop(_initial, 1, 34))
      _imp_signal(5, 1, 0, "Illegal cycle I = *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&MYWORD), 1, 34");
    I = _initial - (1);
  L_00A5:
    if (I == 34) goto L_00A6;
    I += 1;

    //  1080                 Print String(" ")

    _imp_PRINTSTRING(_imp_str_literal(" "));

    //  1081              %repeat

    goto L_00A5;
  }

L_00A6:;

//  1082              Print String("(".prev word.")")

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp =
                              _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("("), (_imp_string *)/*?*/ &PREVWORD);
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(")"));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1083           %finish

L_00A4:;

//  1084           Newline

  _imp_NEWLINE();

  //  1085           %return

  return;

  //  1086        %finish
  //  1087     %finish

L_00A2:;

//  1088
//  1089     prev word = "-"

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

  //  1090     go down to(sort tree)

  GODOWNTO(SORTTREE);

  //  1091     %if  printed heading = 0  %start

  if (PRINTEDHEADING != 0) goto L_00A8;

    //  1092        Print String("No spelling errors found."); Newline

  _imp_PRINTSTRING(_imp_str_literal("No spelling errors found."));
  _imp_NEWLINE();

  //  1093     %finish

L_00A8:;

//  1094  %end  {do spelling check}

  return;
} /* end of DOSPELLINGCHECK */

//  1095
//  1096
//  1097  {NUMBER OF}
//  1098
//  1099  %integerfunction  number of(%string (31) s)

static int NUMBEROF(_imp_string31 S) {
  //  1100     %integer hash posn

  int HASHPOSN;

  //  1101     %record (word rec) %name  mw

  struct WORDREC *MW;

  //  1102     hash posn =  hash addr(s)

  HASHPOSN = HASHADDR(
      *({
        __typeof__(_imp_string31) tmp = S /*q*/;
        (_imp_string31 *)&tmp;
      })
  );

  //  1103     mw ==  word table(hash posn)

  MW = (struct WORDREC *)WORDTABLE[HASHPOSN];

  //  1104     %while  mw ## NIL  %and  mw_word # s  %cycle

L_00A9:;

  if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_00AA;

  if (_imp_strcmp((_imp_string *)/*?*/ &MW->WORD, (_imp_string *)/*?*/ &S) == 0) goto L_00AA;

    //  1105        mw ==  mw_next

  MW = (struct WORDREC *)MW->NEXT;

  //  1106     %repeat

  goto L_00A9;
L_00AA:;

//  1107     %result =  mw_occurances %if mw ## NIL

  if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_00AB;

  return MW->OCCURANCES;
L_00AB:;

//  1108     %result =  0 {otherwise}

  return 0;

  //  1109  %end  {of  number of}

} /* end of NUMBEROF */

//  1110
//  1111
//  1112  {MAIN PROGRAM}
//  1113  %predicate Open DictFile

static int OPENDICTFILE(void) {
  //  1114    %on %event 3,9 %start

  if (!_imp_on_event(3, 9)) goto L_00AC;

    //  1115      %false

  return 0 /*FALSE*/;

  //  1116    %finish

L_00AC:;

//  1117    Open Input(1,dictfile)

  _imp_OPENINPUT(1,
                 *({
                   __typeof__(_imp_string31) tmp = DICTFILE /*q*/;
                   (_imp_string255 *)&tmp;
                 })
  );

  //  1118    %true

  return 1 /*TRUE*/;

  //  1119  %end

} /* end of OPENDICTFILE */

//  1120
//  1121  %begin

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

  //  1122
  //  1123     %record (word rec) %name mw

  struct WORDREC *MW;

  //  1124     %string (31) longest word

  _imp_string31 LONGESTWORD;

  //  1125     %integer i, longest, num words

  int I;
  int LONGEST;
  int NUMWORDS;

  //  1126     %real average number of words per sentence

  float AVERAGENUMBEROFWORDSPERSENTENCE;

  //  1127
  //  1128     %onevent 3,9 %start

  if (!_imp_on_event(3, 9)) goto L_00AD;

    //  1129        %if event_event = 3  %start

  if (_imp_EVENT().EVENT != 3) goto L_00AE;

    //  1130           Select Output(0)

  _imp_SELECTOUTPUT(0);

  //  1131           Print String("Ether or file system error:")

  _imp_PRINTSTRING(_imp_str_literal("Ether or file system error:"));

  //  1132           Print String(itos(event_info {extra},0)."_".%c

  _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_string255 tmp =
                                                              _imp_join(({
                                                                          __typeof__(_imp_string255) tmp; /*D*/
                                                                          tmp = _imp_ITOS(_imp_EVENT().INFO, 0);
                                                                          (void *)&tmp;
                                                                        }),
                                                                        (_imp_string *)/*?*/ _imp_str_literal_ptr("_"));
                                                          (_imp_string255 *)&tmp;
                                                        }),
                                                        ({
                                                          __typeof__(_imp_string255) tmp; /*E*/
                                                          tmp = _imp_ITOS(_imp_EVENT().SUB, 0);
                                                          (void *)&tmp;
                                                        }));
                                          (_imp_string255 *)&tmp;
                                        }),
                                        (_imp_string *)/*?*/ _imp_str_literal_ptr(" "));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ &_imp_EVENT().MESSAGE);
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1133+                       itos(event_sub {event},0)." ".event_message)
  //  1134           Newline

  _imp_NEWLINE();

  //  1135           %stop

  _imp_stop(0);

  //  1136        %else

L_00AE:;

//  1137           Close Input

  _imp_CLOSEINPUT();

  //  1138           in a sentence = 0

  INASENTENCE = 0;

  //  1139           words from start of sentence = 0

  WORDSFROMSTARTOFSENTENCE = 0;

  //  1140           just finished a sentence = 0

  JUSTFINISHEDASENTENCE = 0;

  //  1141           %if  (options & U option)#0  %start

  if (OPTIONS & 2 == 0) goto L_00AF;

    //  1142              %if  (options & P option)=0  %start

  if (OPTIONS & 32 != 0) goto L_00B0;

    //  1143                 Print String("WORD USAGE AND STYLISTIC ANALYSIS")

  _imp_PRINTSTRING(_imp_str_literal("WORD USAGE AND STYLISTIC ANALYSIS"));

  //  1144                 Newline

  _imp_NEWLINE();

  //  1145              %finish

L_00B0:;

//  1146              %if  sentence count < 10  %start

  if (SENTENCECOUNT >= 10) goto L_00B1;

    //  1147                 Print String("Not enough sentences to give usage statistics")

  _imp_PRINTSTRING(_imp_str_literal("Not enough sentences to give usage statistics"));

  //  1148                 Newline

  _imp_NEWLINE();

  //  1149              %else

  goto L_00B2;
L_00B1:;

//  1150                 {Reading age}
//  1151                 num words =  number of words

  NUMWORDS = NUMBEROFWORDS();

  //  1152                 average number of words per sentence =  %c

  AVERAGENUMBEROFWORDSPERSENTENCE = (double)(NUMWORDSINSENTENCES / SENTENCECOUNT);

  //  1153+                    num words in sentences / sentence count
  //  1154                 Print String("--- ".%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
                                           _imp_string255 tmp =
                                               _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(SENTENCECOUNT, 0);
                                                           (void *)&tmp;
                                                         }));
                                           (_imp_string255 *)&tmp;
                                         }),
                                         (_imp_string *)/*?*/ _imp_str_literal_ptr(" sentences parsed,"));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1155+                   ITOS(sentence count,0)." sentences parsed,".%c
  //  1156+                   " with an average of ")
  //  1157                 Print(average number of words per sentence,0,2)

  _imp_PRINT(AVERAGENUMBEROFWORDSPERSENTENCE, 0, 2);

  //  1158                 Print String(" words per sentence")

  _imp_PRINTSTRING(_imp_str_literal(" words per sentence"));

  //  1159                 Newline

  _imp_NEWLINE();

  //  1160                 %if  average number of words per sentence > 35  %start

  if (AVERAGENUMBEROFWORDSPERSENTENCE <= 35) goto L_00B3;

    //  1161                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Your sentences are too long.  Try to make some of them shorter."));

  //  1162+ "         Your sentences are too long.  Try to make some of them shorter.")
  //  1163                    Newline

  _imp_NEWLINE();

  //  1164                 %finish

L_00B3:;

//  1165                 %if  average word length > 6  %start

  if (AVERAGEWORDLENGTH() <= 6) goto L_00B4;

    //  1166                    Print String("--- You use far too many long words.")

  _imp_PRINTSTRING(_imp_str_literal("--- You use far too many long words."));

  //  1167                    Newline

  _imp_NEWLINE();

  //  1168                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Your average word length is "));

  //  1169+ "         Your average word length is ")
  //  1170                    Print(average word length,0,2)

  _imp_PRINT(AVERAGEWORDLENGTH(), 0, 2);

  //  1171                    Print String(" - try to get it nearer 5")

  _imp_PRINTSTRING(_imp_str_literal(" - try to get it nearer 5"));

  //  1172                    Newline

  _imp_NEWLINE();

  //  1173                 %elseif  average word length > 5.5

  goto L_00B5;
L_00B4:;
  if (AVERAGEWORDLENGTH() <= 5.5) goto L_00B6;

    //  1174                    Print String("--- You use quite a lot of long words.")

  _imp_PRINTSTRING(_imp_str_literal("--- You use quite a lot of long words."));

  //  1175                    Newline

  _imp_NEWLINE();

  //  1176                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Your average word length is "));

  //  1177+ "         Your average word length is ")
  //  1178                    Print(average word length,0,2)

  _imp_PRINT(AVERAGEWORDLENGTH(), 0, 2);

  //  1179                    Print String(" - try to get it nearer 4.9")

  _imp_PRINTSTRING(_imp_str_literal(" - try to get it nearer 4.9"));

  //  1180                    Newline

  _imp_NEWLINE();

  //  1181                 %else

  goto L_00B5;
L_00B6:;

//  1182                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use a good mix of word length, with an average of "));

  //  1183+ "--- You use a good mix of word length, with an average of ")
  //  1184                    Print(average word length,0,2)

  _imp_PRINT(AVERAGEWORDLENGTH(), 0, 2);

  //  1185                    Print String(" letters per word.")

  _imp_PRINTSTRING(_imp_str_literal(" letters per word."));

  //  1186                    Newline

  _imp_NEWLINE();

  //  1187                 %finish

L_00B5:;

//  1188                 %if  number of ("such") > 1 %and %c

  if (NUMBEROF(_imp_str_literal_size(31, "such")) <= 1) goto L_00B7;
  if (NUMBEROF(_imp_str_literal_size(31, "such")) <= (double)((SENTENCECOUNT * 7) / 100)) goto L_00B7;

    //  1189+                     number of("such") > sentence count*7/100 %start
    //  1190                    Print String("--- ")

  _imp_PRINTSTRING(_imp_str_literal("--- "));

  //  1191                    Print(number of("such")*100/sentence count,0,2)

  _imp_PRINT((double)((NUMBEROF(_imp_str_literal_size(31, "such")) * 100) / SENTENCECOUNT), 0, 2);

  //  1192                    Print String("% of your sentences use SUCH.")

  _imp_PRINTSTRING(_imp_str_literal("% of your sentences use SUCH."));

  //  1193                    Newline

  _imp_NEWLINE();

  //  1194                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Only legal documents should have this many SUCHs."));

  //  1195+ "         Only legal documents should have this many SUCHs.")
  //  1196                    Newline

  _imp_NEWLINE();

  //  1197                 %finish

L_00B7:;

//  1198                 %if  (FLOAT(number of("that"))/FLOAT(sentence count)) > 0.40  %start

  if ((double)(_imp_FLOAT(NUMBEROF(_imp_str_literal_size(31, "that"))) / _imp_FLOAT(SENTENCECOUNT)) <= 0.40)
    goto L_00B8;

    //  1199                    Print String("--- ")

  _imp_PRINTSTRING(_imp_str_literal("--- "));

  //  1200                    Print(number of("that")*100/sentence count,0,2)

  _imp_PRINT((double)((NUMBEROF(_imp_str_literal_size(31, "that")) * 100) / SENTENCECOUNT), 0, 2);

  //  1201                    Print String("% of your sentences use THAT.")

  _imp_PRINTSTRING(_imp_str_literal("% of your sentences use THAT."));

  //  1202                    Newline

  _imp_NEWLINE();

  //  1203                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         You railroad your readers.  Try to reduce frequency of THATs to 25%"));

  //  1204+ "         You railroad your readers.  Try to reduce frequency of THATs to 25%")
  //  1205                    Newline

  _imp_NEWLINE();

  //  1206                 %finish

L_00B8:;

//  1207                 %if  number of("basically") > 1  %start

  if (NUMBEROF(_imp_str_literal_size(31, "basically")) <= 1) goto L_00B9;

    //  1208                    Print String("--- You use BASICALLY too often.".%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use BASICALLY too often."));

  //  1209+                      "  It is redundant each time.")
  //  1210                    Newline

  _imp_NEWLINE();

  //  1211                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         You should use this word only rarely."));

  //  1212+ "         You should use this word only rarely.")
  //  1213                    Newline

  _imp_NEWLINE();

  //  1214                 %finish

L_00B9:;

//  1215                 %if  number of("we") = 0 %and number of("i") = 0 %and %c

  if (NUMBEROF(_imp_str_literal_size(31, "we")) != 0) goto L_00BA;
  if (NUMBEROF(_imp_str_literal_size(31, "i")) != 0) goto L_00BA;
  if (NUMBEROF(_imp_str_literal_size(31, "you")) != 0) goto L_00BA;

    //  1216+                     number of("you") = 0  %start
    //  1217                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- Your written work is dying from abstractitis"));

  //  1218+                   "--- Your written work is dying from abstractitis");  Newline

  _imp_NEWLINE();

  //  1219                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See page 5 of Fowler's \"Modern English Usage\" (1973 ed)"));

  //  1220+ "         See page 5 of Fowler's ""Modern English Usage"" (1973 ed)")
  //  1221                    Newline

  _imp_NEWLINE();

  //  1222                 %finish

L_00BA:;

//  1223                 %if  number of("which") >= number of("that")  %and %c

  if (NUMBEROF(_imp_str_literal_size(31, "which")) < NUMBEROF(_imp_str_literal_size(31, "that"))) goto L_00BB;
  if (NUMBEROF(_imp_str_literal_size(31, "which")) <= 1) goto L_00BB;

    //  1224+                     number of("which") > 1                   %start
    //  1225                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You sometimes use WHICH instead THAT -  they are not interchangeable.25%"));

  //  1226+                   "--- You sometimes use WHICH instead THAT - ".%c
  //  1227+                      " they are not interchangeable.");  Newline

  _imp_NEWLINE();

  //  1228                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See page 142-145 of Gower's \"The Complete Plain Words\" (1973 ed)"));

  //  1229+ "         See page 142-145 of Gower's ""The Complete Plain Words"" (1973 ed)")
  //  1230                    Newline

  _imp_NEWLINE();

  //  1231                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         Also page 696-706 of Fowler's \"Modern English Usage\" (1983 ed)"));

  //  1232+ "         Also page 696-706 of Fowler's ""Modern English Usage"" (1983 ed)")
  //  1233                    Newline

  _imp_NEWLINE();

  //  1234                 %finish

L_00BB:;

//  1235                 %if  number of("ingeminate") > 0 %start

  if (NUMBEROF(_imp_str_literal_size(31, "ingeminate")) <= 0) goto L_00BC;

    //  1236                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use the word INGEMINATE.  I bet you don't know what it means."));

  //  1237+ "--- You use the word INGEMINATE.  I bet you don't know what it means.")
  //  1238                    Newline

  _imp_NEWLINE();

  //  1239                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See page 284 of Fowler's \"Modern English Usage\" (1973 ed)"));

  //  1240+ "         See page 284 of Fowler's ""Modern English Usage"" (1973 ed)")
  //  1241                    Newline

  _imp_NEWLINE();

  //  1242                 %finish

L_00BC:;

//  1243                 %if  number of("gender") > 0 %start

  if (NUMBEROF(_imp_str_literal_size(31, "gender")) <= 0) goto L_00BD;

    //  1244                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- Use of GENDER is probably a blunder."));

  //  1245+                       "--- Use of GENDER is probably a blunder.")
  //  1246                    Newline

  _imp_NEWLINE();

  //  1247                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See page 220 of Fowler's \"Modern English Usage\" (1973 ed)"));

  //  1248+ "         See page 220 of Fowler's ""Modern English Usage"" (1973 ed)")
  //  1249                    Newline

  _imp_NEWLINE();

  //  1250                 %finish

L_00BD:;

//  1251                 %if  number of("feasible") > 0 %start

  if (NUMBEROF(_imp_str_literal_size(31, "feasible")) <= 0) goto L_00BE;

    //  1252                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- Use POSSIBLE instead of FEASIBLE.  FEASIBLE is pretentious."));

  //  1253+ "--- Use POSSIBLE instead of FEASIBLE.  FEASIBLE is pretentious.")
  //  1254                    Newline

  _imp_NEWLINE();

  //  1255                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         See page 191 of Fowler's \"Modern English Usage\" (1973 ed)"));

  //  1256+ "         See page 191 of Fowler's ""Modern English Usage"" (1973 ed)")
  //  1257                    Newline

  _imp_NEWLINE();

  //  1258                 %finish

L_00BE:;

//  1259                 %if  number of("firstly") > 0 %and %c

  if (NUMBEROF(_imp_str_literal_size(31, "firstly")) <= 0) goto L_00BF;
  if (NUMBEROF(_imp_str_literal_size(31, "secondly")) != 0) goto L_00BF;

    //  1260+                   number of("secondly") = 0 %start
    //  1261                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use FIRSTLY without using SECONDLY.  Clumsy."));

  //  1262+ "--- You use FIRSTLY without using SECONDLY.  Clumsy.")
  //  1263                    Newline

  _imp_NEWLINE();

  //  1264                 %finish

L_00BF:;

//  1265                 %if  recursive reference > sentence count/20  %and %c

  if (RECURSIVEREFERENCE <= (double)(SENTENCECOUNT / 20)) goto L_00C0;
  if (RECURSIVEREFERENCE <= 2) goto L_00C0;

    //  1266+                     recursive reference > 2                  %start
    //  1267                    Print String("--- You use ".ITOS(recursive reference,0).%c

  _imp_PRINTSTRING(
      *({
        __typeof__(_imp_string255) tmp = *({
          _imp_string255 tmp =
              _imp_join((_imp_string *)/*?*/ &*({
                          _imp_string255 tmp = _imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("--- You use "), ({
                                                           __typeof__(_imp_string255) tmp; /*E*/
                                                           tmp = _imp_ITOS(RECURSIVEREFERENCE, 0);
                                                           (void *)&tmp;
                                                         }));
                          (_imp_string255 *)&tmp;
                        }),
                        (_imp_string *)/*?*/ _imp_str_literal_ptr(" recursive references (THIS, THAT, THESE etc)."));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1268+                      " recursive references (THIS, THAT, THESE etc).")
  //  1269                    Newline

  _imp_NEWLINE();

  //  1270                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         This means that "));

  //  1271+ "         This means that ")
  //  1272                    Print(recursive reference*100/sentence count,0,2)

  _imp_PRINT((double)((RECURSIVEREFERENCE * 100) / SENTENCECOUNT), 0, 2);

  //  1273                    Print String("% of your sentences start with a ")

  _imp_PRINTSTRING(_imp_str_literal("% of your sentences start with a "));

  //  1274                    Newline

  _imp_NEWLINE();

  //  1275                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         reference to a previous sentence, making your writing hard to"));

  //  1276+ "         reference to a previous sentence, making your writing hard to")
  //  1277                    Newline

  _imp_NEWLINE();

  //  1278                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         follow.  Your readers must work too hard unravelling sentences."));

  //  1279+ "         follow.  Your readers must work too hard unravelling sentences.")
  //  1280                    Newline

  _imp_NEWLINE();

  //  1281                 %finish

L_00C0:;

//  1282                 %if  number of("utilize") > 0 %or %c

  if (NUMBEROF(_imp_str_literal_size(31, "utilize")) > 0) goto L_00C1;
  if (NUMBEROF(_imp_str_literal_size(31, "utilized")) > 0) goto L_00C1;
  if (NUMBEROF(_imp_str_literal_size(31, "utilizes")) <= 0) goto L_00C2;
L_00C1:;

//  1283+                     number of("utilized") > 0 %or %c
//  1284+                     number of("utilizes") > 0 %start
//  1285                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use UTILIZE.  It is a pretentious word.  What's wrong with USE ?"));

  //  1286+ "--- You use UTILIZE.  It is a pretentious word.  What's wrong with USE ?")
  //  1287                    Newline

  _imp_NEWLINE();

  //  1288                 %finish

L_00C2:;

//  1289                 %if  number of("obligate") > 0 %or %c

  if (NUMBEROF(_imp_str_literal_size(31, "obligate")) > 0) goto L_00C3;
  if (NUMBEROF(_imp_str_literal_size(31, "obligated")) <= 0) goto L_00C4;
L_00C3:;

//  1290+                     number of("obligated") > 0 %start
//  1291                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use OBLIGATE.  It is a clumsy word.  What's wrong with OBLIGE ?"));

  //  1292+ "--- You use OBLIGATE.  It is a clumsy word.  What's wrong with OBLIGE ?")
  //  1293                    Newline

  _imp_NEWLINE();

  //  1294                 %finish

L_00C4:;

//  1295                 %if  number of("averse") > 0  %start

  if (NUMBEROF(_imp_str_literal_size(31, "averse")) <= 0) goto L_00C5;

    //  1296                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use AVERSE.  Check that it is not a misprint of ADVERSE"));

  //  1297+ "--- You use AVERSE.  Check that it is not a misprint of ADVERSE")
  //  1298                    Newline

  _imp_NEWLINE();

  //  1299                 %finish

L_00C5:;

//  1300                 %if  number of("casual") > 0  %start

  if (NUMBEROF(_imp_str_literal_size(31, "casual")) <= 0) goto L_00C6;

    //  1301                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use CASUAL.  Check that it is not a misprint of CAUSAL"));

  //  1302+ "--- You use CASUAL.  Check that it is not a misprint of CAUSAL")
  //  1303                    Newline

  _imp_NEWLINE();

  //  1304                 %finish

L_00C6:;

//  1305                 %if  (number of("dependant") > 0 %or %c

  if (NUMBEROF(_imp_str_literal_size(31, "dependant")) > 0) goto L_00C7;
  if (NUMBEROF(_imp_str_literal_size(31, "dependants")) <= 0) goto L_00C8;
L_00C7:;
  if (NUMBEROF(_imp_str_literal_size(31, "social")) != 0) goto L_00C8;
  if (NUMBEROF(_imp_str_literal_size(31, "family")) != 0) goto L_00C8;
  if (NUMBEROF(_imp_str_literal_size(31, "mother")) != 0) goto L_00C8;
  if (NUMBEROF(_imp_str_literal_size(31, "father")) != 0) goto L_00C8;
  if (NUMBEROF(_imp_str_literal_size(31, "parents")) != 0) goto L_00C8;

    //  1306+                      number of("dependants") > 0 ) %and %c
    //  1307+                      number of("social") = 0 %and %c
    //  1308+                      number of("family") = 0 %and %c
    //  1309+                      number of("mother") = 0 %and %c
    //  1310+                      number of("father") = 0 %and %c
    //  1311+                      number of("parents") = 0 %start
    //  1312                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use DEPENDANT when you almost certainly mean DEPENDENT."));

  //  1313+ "--- You use DEPENDANT when you almost certainly mean DEPENDENT.")
  //  1314                    Newline

  _imp_NEWLINE();

  //  1315                 %finish

L_00C8:;

//  1316                 %if  number of("deprecate") > 0  %start

  if (NUMBEROF(_imp_str_literal_size(31, "deprecate")) <= 0) goto L_00C9;

    //  1317                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use DEPRECATE.  Check that it is not a misprint of DEPRECIATE"));

  //  1318+ "--- You use DEPRECATE.  Check that it is not a misprint of DEPRECIATE")
  //  1319                    Newline

  _imp_NEWLINE();

  //  1320                 %finish

L_00C9:;

//  1321                 %if  number of("methodology") > 0  %or %c

  if (NUMBEROF(_imp_str_literal_size(31, "methodology")) > 0) goto L_00CA;
  if (NUMBEROF(_imp_str_literal_size(31, "methodologies")) <= 0) goto L_00CB;
L_00CA:;

//  1322+                     number of ("methodologies") > 0 %start
//  1323                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use METHODOLOGY.  What is wrong with METHOD, STYLE or TECHNIQUE ?"));

  //  1324+ "--- You use METHODOLOGY.  What is wrong with METHOD, STYLE or TECHNIQUE ?")
  //  1325                    Newline

  _imp_NEWLINE();

  //  1326                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         These plain alternatives have done well for hundreds of years"));

  //  1327+ "         These plain alternatives have done well for hundreds of years")
  //  1328                    Newline

  _imp_NEWLINE();

  //  1329                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         so why should you want to use this vulgar import?  Are not plain"));

  //  1330+ "         so why should you want to use this vulgar import?  Are not plain")
  //  1331                    Newline

  _imp_NEWLINE();

  //  1332                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("         words good enough for you?"));

  //  1333+ "         words good enough for you?")
  //  1334                    Newline

  _imp_NEWLINE();

  //  1335                 %finish

L_00CB:;

//  1336                 %if  number of("realty") > 0  %start

  if (NUMBEROF(_imp_str_literal_size(31, "realty")) <= 0) goto L_00CC;

    //  1337                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use REALTY.  Check that it is not a misprint of REALITY"));

  //  1338+ "--- You use REALTY.  Check that it is not a misprint of REALITY")
  //  1339                    Newline

  _imp_NEWLINE();

  //  1340                 %finish

L_00CC:;

//  1341                 %if  number of("uniformed") > 0  %start

  if (NUMBEROF(_imp_str_literal_size(31, "uniformed")) <= 0) goto L_00CD;

    //  1342                    Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("--- You use UNIFORMED.  Check that it is not a misprint of UN-INFORMED"));

  //  1343+ "--- You use UNIFORMED.  Check that it is not a misprint of UN-INFORMED")
  //  1344                    Newline

  _imp_NEWLINE();

  //  1345                 %finish

L_00CD:;

//  1346              %finish

L_00B2:;

//  1347           %finish

L_00AF:;

//  1348           %if  (options & L option)#0  %start

  if (OPTIONS & 256 == 0) goto L_00CE;

    //  1349  !           Mark
    //  1350              Sort word table lexically

  SORTWORDTABLELEXICALLY();

  //  1351              %if  (options & P option)=0  %start

  if (OPTIONS & 32 != 0) goto L_00CF;

    //  1352                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("LEXICALLY ORDERED VOCABULARY"));

  //  1353+                   "LEXICALLY ORDERED VOCABULARY")
  //  1354                 Newline

  _imp_NEWLINE();

  //  1355
  //  1356                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("Word                                    Occurances"));

  //  1357+                   "Word                                    Occurances")
  //  1358                 Newline

  _imp_NEWLINE();

  //  1359              %finish

L_00CF:;

//  1360              %if  (options & R option)#0  %start

  if (OPTIONS & 16 == 0) goto L_00D0;

    //  1361                 Print node in reverse(sort tree)

  PRINTNODEINREVERSE(SORTTREE);

  //  1362              %else

  goto L_00D1;
L_00D0:;

//  1363                 Print node(sort tree)

  PRINTNODE(SORTTREE);

  //  1364              %finish

L_00D1:;

//  1365  !           Release
//  1366              sort tree ==  NIL

  SORTTREE = (struct NODE *)NIL;

  //  1367           %finish

L_00CE:;

//  1368           %if  (options & F option)#0  %start

  if (OPTIONS & 1024 == 0) goto L_00D2;

    //  1369  !           Mark
    //  1370              Sort word table by frequency

  SORTWORDTABLEBYFREQUENCY();

  //  1371              %if  (options & P option)=0  %start

  if (OPTIONS & 32 != 0) goto L_00D3;

    //  1372                 Print String("VOCABULARY ORDERED BY FREQUENCY")

  _imp_PRINTSTRING(_imp_str_literal("VOCABULARY ORDERED BY FREQUENCY"));

  //  1373                 Newline

  _imp_NEWLINE();

  //  1374                 Print String(%c

  _imp_PRINTSTRING(_imp_str_literal("Word                                    Occurances"));

  //  1375+                   "Word                                    Occurances")
  //  1376                 Newline

  _imp_NEWLINE();

  //  1377              %finish

L_00D3:;

//  1378              %if  (options & R option)#0  %start

  if (OPTIONS & 16 == 0) goto L_00D4;

    //  1379                 Print node in reverse(sort tree)

  PRINTNODEINREVERSE(SORTTREE);

  //  1380              %else

  goto L_00D5;
L_00D4:;

//  1381                 Print node(sort tree)

  PRINTNODE(SORTTREE);

  //  1382              %finish

L_00D5:;

//  1383  !           Release
//  1384              sort tree ==  NIL

  SORTTREE = (struct NODE *)NIL;

  //  1385           %finish

L_00D2:;

//  1386           %if  (options & B option)#0  %start

  if (OPTIONS & 8192 == 0) goto L_00D6;

    //  1387              longest word =  ""

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

  //  1388              longest      =  0

  LONGEST = 0;

  //  1389              %for i=0,1,hash table size  %cycle

  // %for I = 0, 1, 4095 %cycle
  {
    I = -1;
  L_00D7:
    if (I == 4095) goto L_00D8;
    I += 1;

    //  1390                 %if  word table(i) ## NIL  %start

    if (_imp_ADDR((void *)(WORDTABLE[I])) == _imp_ADDR((void *)(NIL))) goto L_00D9;

      //  1391                    mw ==  word table(i)

    MW = (struct WORDREC *)WORDTABLE[I];

    //  1392                    %while  mw ## NIL  %cycle

  L_00DA:;

    if (_imp_ADDR((void *)(MW)) == _imp_ADDR((void *)(NIL))) goto L_00DB;

      //  1393                       %if longest < LENGTH(mw_word)  %start

    if (LONGEST >= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &MW->WORD)) goto L_00DC;

      //  1394                          longest word =  mw_word

    _imp_strncpy(/*?*/ &LONGESTWORD, ({
                   __typeof__(_imp_string255) tmp; /*B*/
                   tmp = MW->WORD;
                   (void *)&tmp;
                 }),
                 /*max:*/ 31);

    //  1395                          longest =  LENGTH(longest word)

    LONGEST = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &LONGESTWORD);

    //  1396                       %finish

  L_00DC:;

  //  1397                       mw ==  mw_next

    MW = (struct WORDREC *)MW->NEXT;

    //  1398                    %repeat

    goto L_00DA;
  L_00DB:;

  //  1399                 %finish

  L_00D9:;

  //  1400              %repeat

    goto L_00D7;
  }

L_00D8:;

//  1401              Print String("Longest word = ".longest word.%c

  _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_string255 tmp = _imp_join(
                                                           (_imp_string *)/*?*/ _imp_str_literal_ptr("Longest word = "),
                                                           (_imp_string *)/*?*/ &LONGESTWORD);
                                                       (_imp_string255 *)&tmp;
                                                     }),
                                                     (_imp_string *)/*?*/ _imp_str_literal_ptr(" ("));
                                                 (_imp_string255 *)&tmp;
                                               }),
                                               ({
                                                 __typeof__(_imp_string255) tmp; /*E*/
                                                 tmp = _imp_ITOS(LONGEST, 0);
                                                 (void *)&tmp;
                                               }));
                                           (_imp_string255 *)&tmp;
                                         }),
                                         (_imp_string *)/*?*/ _imp_str_literal_ptr(")"));
          (_imp_string255 *)&tmp;
        }) /*q*/;
        (_imp_string255 *)&tmp;
      })
  );

  //  1402+                " (".ITOS(longest,0).")")
  //  1403              Newline

  _imp_NEWLINE();

  //  1404           %finish

L_00D6:;

//  1405           %if  (options & W option)#0  %start

  if (OPTIONS & 1 == 0) goto L_00DD;

    //  1406              word count

  WORDCOUNT();

  //  1407           %finish

L_00DD:;

//  1408           %if  (options & C option)#0  %start

  if (OPTIONS & 4096 == 0) goto L_00DE;

    //  1409              Sort word table lexically

  SORTWORDTABLELEXICALLY();

  //  1410              Close Input

  _imp_CLOSEINPUT();

  //  1411              %if Open Dictfile %then Select Input(1) %and Do spelling check

  if (!(OPENDICTFILE())) goto L_00DF;
  _imp_SELECTINPUT(1);
  DOSPELLINGCHECK();
L_00DF:;

//  1412           %finish

L_00DE:;

//  1413           Close Output

  _imp_CLOSEOUTPUT();

  //  1414           %stop

  _imp_stop(0);

  //  1415        %finish
  //  1416     %finish

L_00AD:;

//  1417
//  1418     interpret command line

  INTERPRETCOMMANDLINE();

  //  1419     %stop %if  options = 0

  if (OPTIONS != 0) goto L_00E0;
  _imp_stop(0);
L_00E0:;

//  1420     help  %if  (options & H option) # 0

  if (OPTIONS & 512 == 0) goto L_00E1;
  HELP();
L_00E1:;

//  1421     init

  INIT();

  //  1422     create vocabulary

  CREATEVOCABULARY();

  //  1423
  //  1424  %endofprogram

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