/* -*- Mode: Text -*- */ #ifdef unix # define BITFIELDTYPE unsigned short #else # define BITFIELDTYPE unsigned #endif struct dent { struct dent *next; char *word; BITFIELDTYPE used : 1; /* bit fields for all of the flags */ BITFIELDTYPE v_flag : 1; /* "V" flag: ...E --> ...IVE as in CREATE --> CREATIVE if # .ne. E, ...# --> ...#IVE as in PREVENT --> PREVENTIVE */ BITFIELDTYPE n_flag : 1; /* "N" flag: ...E --> ...ION as in CREATE --> CREATION ...Y --> ...ICATION as in MULTIPLY --> MULTIPLICATION if # .ne. E or Y, ...# --> ...#EN as in FALL --> FALLEN */ BITFIELDTYPE x_flag : 1; /* "X" flag: ...E --> ...IONS as in CREATE --> CREATIONS ...Y --> ...ICATIONS as in MULTIPLY --> MULTIPLICATIONS if # .ne. E or Y, ...# --> ...#ENS as in WEAK --> WEAKENS */ BITFIELDTYPE h_flag : 1; /* "H" flag: ...Y --> ...IETH as in TWENTY --> TWENTIETH if # .ne. Y, ...# --> ...#TH as in HUNDRED --> HUNDREDTH */ BITFIELDTYPE y_flag : 1; /* "Y" FLAG: ... --> ...LY as in QUICK --> QUICKLY */ BITFIELDTYPE g_flag : 1; /* "G" FLAG: ...E --> ...ING as in FILE --> FILING if # .ne. E, ...# --> ...#ING as in CROSS --> CROSSING */ BITFIELDTYPE j_flag : 1; /* "J" FLAG" ...E --> ...INGS as in FILE --> FILINGS if # .ne. E, ...# --> ...#INGS as in CROSS --> CROSSINGS */ BITFIELDTYPE d_flag : 1; /* "D" FLAG: ...E --> ...ED as in CREATE --> CREATED if @ .ne. A, E, I, O, or U, ...@Y --> ...@IED as in IMPLY --> IMPLIED if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U) ...@# --> ...@#ED as in CROSS --> CROSSED or CONVEY --> CONVEYED */ BITFIELDTYPE t_flag : 1; /* "T" FLAG: ...E --> ...EST as in LATE --> LATEST if @ .ne. A, E, I, O, or U, ...@Y --> ...@IEST as in DIRTY --> DIRTIEST if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U) ...@# --> ...@#EST as in SMALL --> SMALLEST or GRAY --> GRAYEST */ BITFIELDTYPE r_flag : 1; /* "R" FLAG: ...E --> ...ER as in SKATE --> SKATER if @ .ne. A, E, I, O, or U, ...@Y --> ...@IER as in MULTIPLY --> MULTIPLIER if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U) ...@# --> ...@#ER as in BUILD --> BUILDER or CONVEY --> CONVEYER */ BITFIELDTYPE z_flag : 1; /* "Z FLAG: ...E --> ...ERS as in SKATE --> SKATERS if @ .ne. A, E, I, O, or U, ...@Y --> ...@IERS as in MULTIPLY --> MULTIPLIERS if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U) ...@# --> ...@#ERS as in BUILD --> BUILDERS or SLAY --> SLAYERS */ BITFIELDTYPE s_flag : 1; /* "S" FLAG: if @ .ne. A, E, I, O, or U, ...@Y --> ...@IES as in IMPLY --> IMPLIES if # .eq. S, X, Z, or H, ...# --> ...#ES as in FIX --> FIXES if # .ne. S,X,Z,H, or Y, or (# = Y and @ = A, E, I, O, or U) ...# --> ...#S as in BAT --> BATS or CONVEY --> CONVEYS */ BITFIELDTYPE p_flag : 1; /* "P" FLAG: if @ .ne. A, E, I, O, or U, ...@Y --> ...@INESS as in CLOUDY --> CLOUDINESS if # .ne. Y, or @ = A, E, I, O, or U, ...@# --> ...@#NESS as in LATE --> LATENESS or GRAY --> GRAYNESS */ BITFIELDTYPE m_flag : 1; /* "M" FLAG: ... --> ...'S as in DOG --> DOG'S */ }; #define WORDLEN 30 struct hashheader { int magic; int stringsize; int tblsize; }; #define MAGIC 1 /* * termcap variables */ extern char *tgetstr(); extern char PC; /* padding character */ extern char *BC; /* backspace if not ^H */ extern char *UP; /* Upline (cursor up) */ extern char *cd; /* clear to end of display */ extern char *ce; /* clear to end of line */ extern char *cl; /* clear display */ extern char *cm; /* cursor movement */ extern char *dc; /* delete character */ extern char *dl; /* delete line */ extern char *dm; /* delete mode */ extern char *ed; /* exit delete mode */ extern char *ei; /* exit insert mode */ extern char *ho; /* home */ extern char *ic; /* insert character */ extern char *il; /* insert line */ extern char *im; /* insert mode */ extern char *ip; /* insert padding */ extern char *nd; /* non-destructive space */ extern char *vb; /* visible bell */ extern char *so; /* standout */ extern char *se; /* standout end */ extern int bs; extern int li; /* lines */ extern int co; /* columns */ extern char termcap[]; extern char termstr[]; /* for string values */ extern char *termptr; extern char rootword[]; extern struct dent *lastdent; extern char *hashstrings; extern int aflag; extern int lflag; struct node { struct node *left; struct node *right; char *word; int keep; }; extern int erasechar; extern int killchar; extern char tempfile[]; #ifdef AMIGA # define index strchr # define sleep(a) Delay(a*50) /* Come on Lattice, it's so easy... */ #endif