./PaxHeaders.19408/ispell-3.4.000000644000000000000000000000013212466065110012711 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.794383173 30 ctime=1423469128.801383206 ispell-3.4.00/0000755003214100001440000000000012466065110013700 5ustar00geofffaculty00000000000000ispell-3.4.00/PaxHeaders.19408/buildhash.c0000644000000000000000000000013212465617761014756 xustar0030 mtime=1423384561.131701942 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/buildhash.c0000444003214100001440000004444212465617761016033 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: buildhash.c,v 1.75 2008-02-21 01:55:36-08 geoff Exp $"; #endif #define MAIN /* * buildhash.c - make a hash table for ispell * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: buildhash.c,v $ * Revision 1.75 2008-02-21 01:55:36-08 geoff * When the hash teable overflows, null out the "next" pointer so that if * the table is used, ispell won't follow a garbage pointer and crash. * * Revision 1.74 2005/04/28 00:26:06 geoff * Re-count the dictionary file every time, rather than depending on a * file to hold the correct count. This is necessary because the changes * for MS-DOS support caused us to generate non-unique count-file names, * which in turn could cause buildhash to fail. There really isn't a * need for count files any more; they were only a performance * improvement and modern computers are fast enough that it doesn't * matter. * * Revision 1.73 2005/04/14 21:25:52 geoff * Declare ints-that-hold-pointers as unsigned, just for safety. * * Revision 1.72 2005/04/14 14:38:23 geoff * Update license and copyright. Fix a count-file-naming bug introduced * in a recent delta. Regenerate the count file if it has the same mtime * as the dictionary (otherwise you can have bugs on fast machines). Fix * some small type bugs. * * Revision 1.71 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.70 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.69 2001/07/23 20:24:02 geoff * Update the copyright and the license. * * Revision 1.68 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bcopy to avoid compilation problems on * smarter compilers. * * Revision 1.67 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.66 1999/01/07 01:22:32 geoff * Update the copyright. * * Revision 1.65 1997/12/02 06:24:33 geoff * Get rid of an obsolete reference to "okspell". Get rid of some * compile options that really shouldn't be optional. * * Revision 1.64 1995/01/08 23:23:26 geoff * Make the various file suffixes configurable for DOS purposes. * * Revision 1.63 1994/10/26 05:12:25 geoff * Get rid of some duplicate declarations. * * Revision 1.62 1994/07/28 05:11:33 geoff * Log message for previous revision: distinguish a zero count from a bad * count file. * * Revision 1.61 1994/07/28 04:53:30 geoff * * Revision 1.60 1994/01/25 07:11:18 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include "version.h" #include #include int main P ((int argc, char * argv[])); static void output P ((void)); static void filltable P ((void)); VOID * mymalloc P ((unsigned int size)); VOID * myrealloc P ((VOID * ptr, unsigned int size, unsigned int oldsize)); void myfree P ((VOID * ptr)); static void readdict P ((void)); static unsigned int newcount P ((void)); #define NSTAT 100 /* Size probe-statistics table */ char * Dfile; /* Name of dictionary file */ char * Hfile; /* Name of hash (output) file */ char * Lfile; /* Name of language file */ char Sfile[MAXPATHLEN]; /* Name of statistics file */ static int silent = 0; /* NZ to suppress count reports */ int main (argc, argv) int argc; char * argv[]; { int avg; char * lastdot; FILE * statf; int stats[NSTAT]; unsigned int i; int j; while (argc > 1 && *argv[1] == '-') { argc--; argv++; switch (argv[0][1]) { case 's': silent = 1; break; } } if (argc == 4) { Dfile = argv[1]; Lfile = argv[2]; Hfile = argv[3]; } else { (void) fprintf (stderr, BHASH_C_USAGE); return 1; } if (yyopen (Lfile)) /* Open the language file */ return 1; yyinit (); /* Set up for the parse */ if (yyparse ()) /* Parse the language tables */ exit (1); strcpy (Sfile, Dfile); lastdot = rindex (Sfile, '.'); if (lastdot != NULL) *lastdot = '\0'; strcat (Sfile, STATSUFFIX); #ifdef MSDOS /* ** MS-DOS doesn't allow more than one dot in the filename part. ** If we have more than that, convert all the dots but the last into ** underscores. The OS will truncate excess characters beyond 8+3. */ lastdot = rindex (Sfile, '.'); if (lastdot != NULL && lastdot > Sfile) { while (--lastdot >= Sfile) { if (*lastdot == '.') *lastdot = '_'; } } #endif /* MSDOS */ hashsize = newcount (); if (hashsize == 0) { (void) fprintf (stderr, BHASH_C_ZERO_COUNT); exit (1); } readdict (); if ((statf = fopen (Sfile, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, Sfile, MAYBE_CR (stderr)); exit (1); } for (i = 0; i < NSTAT; i++) stats[i] = 0; for (i = 0; i < hashsize; i++) { struct dent * dp; dp = &hashtbl[i]; if ((dp->flagfield & USED) != 0) { for (j = 0; dp != NULL; j++, dp = dp->next) { if (j >= NSTAT) j = NSTAT - 1; stats[j]++; } } } for (i = 0, j = 0, avg = 0; i < NSTAT; i++) { j += stats[i]; avg += stats[i] * (i + 1); if (j == 0) (void) fprintf (statf, "%d:\t%d\t0\t0.0\n", i + 1, stats[i]); else (void) fprintf (statf, "%d:\t%d\t%d\t%f\n", i + 1, stats[i], j, (double) avg / j); } (void) fclose (statf); filltable (); output (); return 0; } static void output () { register FILE * houtfile; register struct dent * dp; unsigned long strptr; int n; unsigned int i; int maxplen; int maxslen; struct flagent * fentry; if ((houtfile = fopen (Hfile, "wb")) == NULL) { (void) fprintf (stderr, CANT_CREATE, Hfile, MAYBE_CR (stderr)); return; } hashheader.stringsize = 0; hashheader.lstringsize = 0; hashheader.tblsize = hashsize; (void) fwrite ((char *) &hashheader, sizeof hashheader, 1, houtfile); strptr = 0; /* ** Put out the strings from the flags table. This code assumes that ** the size of the hash header is a multiple of the size of ichar_t, ** and that any long can be converted to an (ichar_t *) and back ** without damage (or, more accurately, without damaging those ** low-order bits necessary to represent the largest offset in the ** string table). */ maxslen = 0; for (i = 0, fentry = sflaglist; i < numsflags; i++, fentry++) { if (fentry->stripl) { (void) fwrite ((char *) fentry->strip, fentry->stripl + 1, sizeof (ichar_t), houtfile); fentry->strip = (ichar_t *) strptr; strptr += (fentry->stripl + 1) * sizeof (ichar_t); } if (fentry->affl) { (void) fwrite ((char *) fentry->affix, fentry->affl + 1, sizeof (ichar_t), houtfile); fentry->affix = (ichar_t *) strptr; strptr += (fentry->affl + 1) * sizeof (ichar_t); } n = fentry->affl - fentry->stripl; if (n < 0) n = -n; if (n > maxslen) maxslen = n; } maxplen = 0; for (i = 0, fentry = pflaglist; i < numpflags; i++, fentry++) { if (fentry->stripl) { (void) fwrite ((char *) fentry->strip, fentry->stripl + 1, sizeof (ichar_t), houtfile); fentry->strip = (ichar_t *) strptr; strptr += (fentry->stripl + 1) * sizeof (ichar_t); } if (fentry->affl) { (void) fwrite ((char *) fentry->affix, fentry->affl + 1, sizeof (ichar_t), houtfile); fentry->affix = (ichar_t *) strptr; strptr += (fentry->affl + 1) * sizeof (ichar_t); } n = fentry->affl - fentry->stripl; if (n < 0) n = -n; if (n > maxplen) maxplen = n; } /* ** Write out the string character type tables. */ hashheader.strtypestart = strptr; for (i = 0; i < hashheader.nstrchartype; i++) { n = strlen ((char *) chartypes[i].name) + 1; (void) fwrite ((char *) chartypes[i].name, n, 1, houtfile); strptr += n; n = strlen (chartypes[i].deformatter) + 1; (void) fwrite (chartypes[i].deformatter, n, 1, houtfile); strptr += n; for (n = 0; chartypes[i].suffixes[n] != '\0'; n += strlen (&chartypes[i].suffixes[n]) + 1) ; n++; (void) fwrite (chartypes[i].suffixes, n, 1, houtfile); strptr += n; } hashheader.lstringsize = strptr; /* We allow one extra byte because missingletter() may add one byte */ maxslen += maxplen + 1; if (maxslen > MAXAFFIXLEN) { (void) fprintf (stderr, BHASH_C_BAFF_1 (MAXAFFIXLEN, maxslen - MAXAFFIXLEN)); (void) fprintf (stderr, BHASH_C_BAFF_2); } /* Put out the dictionary strings */ for (i = 0, dp = hashtbl; i < hashsize; i++, dp++) { if (dp->word == NULL) dp->word = (unsigned char *) -1; else { n = strlen ((char *) dp->word) + 1; (void) fwrite (dp->word, n, 1, houtfile); dp->word = (unsigned char *) strptr; strptr += n; } } /* Pad file to a struct dent boundary for efficiency. */ n = (strptr + sizeof hashheader) % sizeof (struct dent); if (n != 0) { n = sizeof (struct dent) - n; strptr += n; while (--n >= 0) (void) putc ('\0', houtfile); } /* Put out the hash table itself */ for (i = 0, dp = hashtbl; i < hashsize; i++, dp++) { if (dp->next != 0) { unsigned long x; x = dp->next - hashtbl; dp->next = (struct dent *)x; } else { dp->next = (struct dent *)-1; } #ifdef PIECEMEAL_HASH_WRITES (void) fwrite ((char *) dp, sizeof (struct dent), 1, houtfile); #endif /* PIECEMEAL_HASH_WRITES */ } #ifndef PIECEMEAL_HASH_WRITES (void) fwrite ((char *) hashtbl, sizeof (struct dent), hashsize, houtfile); #endif /* PIECEMEAL_HASH_WRITES */ /* Put out the language tables */ (void) fwrite ((char *) sflaglist, sizeof (struct flagent), numsflags, houtfile); hashheader.stblsize = numsflags; (void) fwrite ((char *) pflaglist, sizeof (struct flagent), numpflags, houtfile); hashheader.ptblsize = numpflags; /* Finish filling in the hash header. */ hashheader.stringsize = strptr; rewind (houtfile); (void) fwrite ((char *) &hashheader, sizeof hashheader, 1, houtfile); (void) fclose (houtfile); } static void filltable () { struct dent *freepointer, *nextword, *dp; struct dent *hashend; int i; int overflows; hashend = hashtbl + hashsize; for (freepointer = hashtbl; (freepointer->flagfield & USED) && freepointer < hashend; freepointer++) ; overflows = 0; for (nextword = hashtbl, i = hashsize; i != 0; nextword++, i--) { if ((nextword->flagfield & USED) == 0) continue; if (nextword->next >= hashtbl && nextword->next < hashend) continue; dp = nextword; while (dp->next) { if (freepointer >= hashend) { overflows++; dp->next = NULL; break; } else { *freepointer = *(dp->next); dp->next = freepointer; dp = freepointer; while ((freepointer->flagfield & USED) && freepointer < hashend) freepointer++; } } } if (overflows) (void) fprintf (stderr, BHASH_C_OVERFLOW, overflows); } #if MALLOC_INCREMENT == 0 VOID * mymalloc (size) unsigned int size; { return malloc (size); } /* ARGSUSED */ VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { return realloc (ptr, size); } void myfree (ptr) VOID * ptr; { free (ptr); } #else VOID * mymalloc (size) /* Fast, unfree-able variant of malloc */ unsigned int size; { VOID * retval; static unsigned int bytesleft = 0; static VOID * nextspace; if (size < 4) size = 4; size = (size + 7) & ~7; /* Assume doubleword boundaries are enough */ if (bytesleft < size) { bytesleft = (size < MALLOC_INCREMENT) ? MALLOC_INCREMENT : size; nextspace = malloc ((unsigned) bytesleft); if (nextspace == NULL) { bytesleft = 0; return NULL; } } retval = nextspace; nextspace = (VOID *) ((char *) nextspace + size); bytesleft -= size; return retval; } VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { VOID *nptr; nptr = mymalloc (size); if (nptr == NULL) return NULL; (void) BCOPY (ptr, nptr, oldsize); return nptr; } /* ARGSUSED */ void myfree (ptr) VOID * ptr; { } #endif static void readdict () { struct dent d; register struct dent * dp; struct dent * lastdp; unsigned char lbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; unsigned char ucbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; FILE * dictf; int i; int h; if ((dictf = fopen (Dfile, "r")) == NULL) { (void) fprintf (stderr, BHASH_C_CANT_OPEN_DICT); exit (1); } hashtbl = (struct dent *) calloc ((unsigned) hashsize, sizeof (struct dent)); if (hashtbl == NULL) { (void) fprintf (stderr, BHASH_C_NO_SPACE); exit (1); } i = 0; while (fgets ((char *) lbuf, sizeof lbuf, dictf) != NULL) { if (!silent && (i % 1000) == 0) { (void) fprintf (stderr, "%d ", i); (void) fflush (stdout); } i++; if (makedent (lbuf, sizeof lbuf, &d) < 0) continue; h = hash (strtosichar (d.word, 1), hashsize); dp = &hashtbl[h]; if ((dp->flagfield & USED) == 0) { *dp = d; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } else { /* ** Collision. Skip to the end of the collision ** chain, or to a pre-existing entry for this ** word. Note that d.word always exists at ** this point. */ (void) strcpy ((char *) ucbuf, (char *) d.word); chupcase (ucbuf); while (dp != NULL) { if (strcmp ((char *) dp->word, (char *) ucbuf) == 0) break; while (dp->flagfield & MOREVARIANTS) dp = dp->next; dp = dp->next; } if (dp != NULL) { /* ** A different capitalization is already in ** the dictionary. Combine capitalizations. */ if (combinecaps (dp, &d) < 0) exit (1); } else { /* Insert a new word into the dictionary */ for (dp = &hashtbl[h]; dp->next != NULL; ) dp = dp->next; lastdp = dp; dp = (struct dent *) mymalloc (sizeof (struct dent)); if (dp == NULL) { (void) fprintf (stderr, BHASH_C_COLLISION_SPACE); exit (1); } *dp = d; lastdp->next = dp; dp->next = NULL; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } } } if (!silent) (void) fprintf (stderr, "\n"); (void) fclose (dictf); } static unsigned int newcount () { unsigned char buf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; register unsigned int count; ichar_t ibuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; register FILE * d; ichar_t lastibuf[sizeof ibuf / sizeof (ichar_t)]; int headercounted; int followcase; register char * cp; if (!silent) (void) fprintf (stderr, BHASH_C_COUNTING); if ((d = fopen (Dfile, "r")) == NULL) { (void) fprintf (stderr, BHASH_C_CANT_OPEN_DICT); exit (1); } headercounted = 0; lastibuf[0] = 0; for (count = 0; fgets ((char *) buf, sizeof buf, d); ) { if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } cp = index ((char *) buf, hashheader.flagmarker); if (cp != NULL) *cp = '\0'; if (strtoichar (ibuf, buf, INPUTWORDLEN * sizeof (ichar_t), 1)) (void) fprintf (stderr, WORD_TOO_LONG (buf)); followcase = (whatcap (ibuf) == FOLLOWCASE); upcase (ibuf); if (icharcmp (ibuf, lastibuf) != 0) headercounted = 0; else if (!headercounted) { /* First duplicate will take two entries */ if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } headercounted = 1; } if (!headercounted && followcase) { /* It's followcase and the first entry -- count again */ if ((++count % 1000) == 0 && !silent) { (void) fprintf (stderr, "%d ", count); (void) fflush (stdout); } headercounted = 1; } (void) icharcpy (lastibuf, ibuf); } (void) fclose (d); if (!silent) (void) fprintf (stderr, BHASH_C_WORD_COUNT, count); return count; } ispell-3.4.00/PaxHeaders.19408/tree.c0000644000000000000000000000007410332503153013733 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/tree.c0000444003214100001440000005336310332503153015005 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: tree.c,v 1.66 2005/04/14 14:43:46 geoff Exp $"; #endif /* * tree.c - a hash style dictionary for user's personal words * * Pace Willisson, 1983 * Hash support added by Geoff Kuenning, 1987 * * Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: tree.c,v $ * Revision 1.66 2005/04/14 14:43:46 geoff * Update copyright * * Revision 1.65 2005/04/14 14:38:23 geoff * Update license. Don't segfault if HOME is unset in the environment * and PDICTHOME isn't set in config.X * * Revision 1.64 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.63 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.62 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.61 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.60 2000/06/26 20:43:50 geoff * Fix a minor lint bug. If HOME is unset, still attempt to find the * personal dictionary using all ways that don't depend on HOME (in * particular, the -p switch). * * Revision 1.59 1999/01/18 03:28:45 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.58 1999/01/07 01:57:46 geoff * Update the copyright. * * Revision 1.57 1997/12/02 06:25:11 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.56 1995/01/08 23:23:49 geoff * Support PDICTHOME for DOS purposes. * * Revision 1.55 1994/10/25 05:46:27 geoff * Fix a comment that looked to some compilers like it might be nested. * * Revision 1.54 1994/01/25 07:12:15 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" void treeinit P ((char * p, char * LibDict)); static FILE * trydict P ((char * dictname, char * home, char * prefix, char * suffix)); static void treeload P ((FILE * dictf)); void treeinsert P ((unsigned char * word, int wordlen, int keep)); static struct dent * tinsert P ((struct dent * proto)); struct dent * treelookup P ((ichar_t * word)); #if SORTPERSONAL != 0 static int pdictcmp P ((struct dent ** enta, struct dent **entb)); #endif /* SORTPERSONAL != 0 */ void treeoutput P ((void)); VOID * mymalloc P ((unsigned int size)); void myfree P ((VOID * ptr)); #ifdef REGEX_LOOKUP char * do_regex_lookup P ((char * expr, int whence)); #endif /* REGEX_LOOKUP */ static int cantexpand = 0; /* NZ if an expansion fails */ static struct dent * pershtab; /* Aux hash table for personal dict */ static int pershsize = 0; /* Space available in aux hash table */ static int hcount = 0; /* Number of items in hash table */ /* * Hash table sizes. Prime is probably a good idea, though in truth I * whipped the algorithm up on the spot rather than looking it up, so * who knows what's really best? If we overflow the table, we just * use a double-and-add-1 algorithm. */ static int goodsizes[] = { 53, 223, 907, 3631 }; static char personaldict[MAXPATHLEN]; static FILE * dictf; static int newwords = 0; void treeinit (p, LibDict) char * p; /* Value specified in -p switch */ char * LibDict; /* Root of default dict name */ { int abspath; /* NZ if p is abs path name */ char * h; /* Home directory name */ char seconddict[MAXPATHLEN]; /* Name of secondary dict */ FILE * secondf; /* Access to second dict file */ /* ** If -p was not specified, try to get a default name from the ** environment. After this point, if p is null, the the value in ** personaldict is the only possible name for the personal dictionary. ** If p is non-null, then there is a possibility that we should ** prepend HOME to get the correct dictionary name. */ if (p == NULL) p = getenv (PDICTVAR); /* ** Figure out the user's home. If HOME is unset (which can happen ** if ispell is invoked unusually, such as from a daemon), we ** won't look for any HOME personal dictionaries. Exception: If ** PDICTHOME is set, we use it as a default for HOME. */ if ((h = getenv (HOME)) == NULL) { #ifdef PDICTHOME h = PDICTHOME; #endif /* PDICTHOME */ } if (p == NULL) { /* * No -p and no PDICTVAR. We will use LibDict and DEFPAFF to * figure out the name of the personal dictionary and where it * is. The rules are as follows: * * (1) If there is a local dictionary and a HOME dictionary, * both are loaded, but changes are saved in the local one. * The dictionary to save changes in is named "personaldict". * (2) Dictionaries named after the affix file take precedence * over dictionaries with the default suffix (DEFPAFF). * (3) Dictionaries named with the new default names * (DEFPDICT/DEFPAFF) take precedence over the old ones * (OLDPDICT/OLDPAFF). * (4) Dictionaries aren't combined unless they follow the same * naming scheme. * (5) If no dictionary can be found, a new one is created in * the home directory, named after DEFPDICT and the affix * file. */ dictf = trydict (personaldict, (char *) NULL, DEFPDICT, LibDict); if (h == NULL) secondf = NULL; else secondf = trydict (seconddict, h, DEFPDICT, LibDict); if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, DEFPDICT, DEFPAFF); if (h != NULL) secondf = trydict (seconddict, h, DEFPDICT, DEFPAFF); } if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, OLDPDICT, LibDict); if (h != NULL) secondf = trydict (seconddict, h, OLDPDICT, LibDict); } if (dictf == NULL && secondf == NULL) { dictf = trydict (personaldict, (char *) NULL, OLDPDICT, OLDPAFF); if (h != NULL) secondf = trydict (seconddict, h, OLDPDICT, OLDPAFF); } if (personaldict[0] == '\0') { if (seconddict[0] != '\0') (void) strcpy (personaldict, seconddict); else (void) sprintf (personaldict, "%s/%s%s", h == NULL ? "" : h, DEFPDICT, LibDict); } if (dictf != NULL) { treeload (dictf); (void) fclose (dictf); } if (secondf != NULL) { treeload (secondf); (void) fclose (secondf); } } else { /* ** Figure out if p is an absolute path name. Note that beginning ** with "./" and "../" is considered an absolute path, since this ** still means we can't prepend HOME. */ abspath = IS_SLASH (*p) || strncmp (p, "./", 2) == 0 || strncmp (p, "../", 3) == 0; #ifdef MSDOS /* ** DTRT with drive-letter braindamage and with backslashes. */ abspath |= strncmp (p, ".\\", 2) == 0 || strncmp (p, "..\\", 3) == 0 || (p[0] != '\0' && p[1] == ':'); #endif if (abspath) { (void) strcpy (personaldict, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } } else { /* ** The user gave us a relative pathname. We will try it ** locally, and if that doesn't work, we'll try the home ** directory. If neither exists, it will be created in ** the home directory if words are added, unless HOME was ** unset, in which case the relative pathname will be used ** as a creation point. */ (void) strcpy (personaldict, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } else if (!abspath && h != NULL) { /* Try the home */ (void) sprintf (personaldict, "%s/%s", h, p); if ((dictf = fopen (personaldict, "r")) != NULL) { treeload (dictf); (void) fclose (dictf); } } /* * If dictf is null, we couldn't open the dictionary * specified in the -p switch. Complain. */ if (dictf == NULL) { (void) fprintf (stderr, CANT_OPEN, p, MAYBE_CR (stderr)); perror (""); return; } } } if (!lflag && !aflag && access (personaldict, W_OK) < 0 && errno != ENOENT) { (void) fprintf (stderr, TREE_C_CANT_UPDATE, personaldict, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); } } /* * Try to open a dictionary. As a side effect, leaves the dictionary * name in "filename" if one is found, and leaves a null string there * otherwise. */ static FILE * trydict (filename, home, prefix, suffix) char * filename; /* Where to store the file name */ char * home; /* Home directory */ char * prefix; /* Prefix for dictionary */ char * suffix; /* Suffix for dictionary */ { FILE * dictf; /* Access to dictionary file */ if (home == NULL) (void) sprintf (filename, "%s%s", prefix, suffix); else (void) sprintf (filename, "%s/%s%s", home, prefix, suffix); dictf = fopen (filename, "r"); if (dictf == NULL) filename[0] = '\0'; return dictf; } static void treeload (loadfile) register FILE * loadfile; /* File to load words from */ { char buf[BUFSIZ]; /* Buffer for reading pers dict */ while (fgets (buf, sizeof buf, loadfile) != NULL) treeinsert ((unsigned char *) buf, sizeof buf, 1); newwords = 0; } void treeinsert (word, wordlen, keep) unsigned char * word; /* Word to insert - must be canonical */ int wordlen; /* Length of the word buffer */ int keep; { register unsigned int i; struct dent wordent; register struct dent * dp; struct dent * olddp; struct dent * newdp; struct dent * oldhtab; unsigned int oldhsize; ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN]; int isvariant; /* * Expand hash table when it is MAXPCT % full. */ if (!cantexpand && (hcount * 100) / MAXPCT >= pershsize) { oldhsize = pershsize; oldhtab = pershtab; for (i = 0; i < sizeof goodsizes / sizeof (goodsizes[0]); i++) { if (goodsizes[i] > pershsize) break; } if (i >= sizeof goodsizes / sizeof goodsizes[0]) pershsize += pershsize + 1; else pershsize = goodsizes[i]; pershtab = (struct dent *) calloc ((unsigned) pershsize, sizeof (struct dent)); if (pershtab == NULL) { (void) fprintf (stderr, TREE_C_NO_SPACE, MAYBE_CR (stderr)); /* * Try to continue anyway, since our overflow * algorithm can handle an overfull (100%+) table, * and the malloc very likely failed because we * already have such a huge table, so small mallocs * for overflow entries will still work. */ if (oldhtab == NULL) exit (1); /* No old table, can't go on */ (void) fprintf (stderr, TREE_C_TRY_ANYWAY, MAYBE_CR (stderr)); cantexpand = 1; /* Suppress further messages */ pershsize = oldhsize; /* Put things back */ pershtab = oldhtab; /* ... */ newwords = 1; /* And pretend it worked */ } else { /* * Re-insert old entries into new table */ for (i = 0; i < oldhsize; i++) { dp = &oldhtab[i]; if (dp->flagfield & USED) { newdp = tinsert (dp); isvariant = (dp->flagfield & MOREVARIANTS); dp = dp->next; while (dp != NULL) { if (isvariant) { isvariant = dp->flagfield & MOREVARIANTS; olddp = newdp->next; newdp->next = dp; newdp = dp; dp = dp->next; newdp->next = olddp; } else { isvariant = dp->flagfield & MOREVARIANTS; newdp = tinsert (dp); olddp = dp; dp = dp->next; free ((char *) olddp); } } } } if (oldhtab != NULL) free ((char *) oldhtab); } } /* ** We're ready to do the insertion. Start by creating a sample ** entry for the word. */ if (makedent (word, wordlen, &wordent) < 0) return; /* Word must be too big or something */ if (keep) wordent.flagfield |= KEEP; /* ** Now see if word or a variant is already in the table. We use the ** capitalized version so we'll find the header, if any. **/ (void) strtoichar (nword, word, sizeof nword, 1); upcase (nword); if ((dp = lookup (nword, 1)) != NULL) { /* It exists. Combine caps and set the keep flag. */ if (combinecaps (dp, &wordent) < 0) { free (wordent.word); return; } } else { /* It's new. Insert the word. */ dp = tinsert (&wordent); if (captype (dp->flagfield) == FOLLOWCASE) (void) addvheader (dp); } newwords |= keep; } static struct dent * tinsert (proto) struct dent * proto; /* Prototype entry to copy */ { ichar_t iword[INPUTWORDLEN + MAXAFFIXLEN]; register int hcode; register struct dent * hp; /* Next trial entry in hash table */ register struct dent * php; /* Prev. value of hp, for chaining */ if (strtoichar (iword, proto->word, sizeof iword, 1)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) proto->word)); hcode = hash (iword, pershsize); php = NULL; hp = &pershtab[hcode]; if (hp->flagfield & USED) { while (hp != NULL) { php = hp; hp = hp->next; } hp = (struct dent *) calloc (1, sizeof (struct dent)); if (hp == NULL) { (void) fprintf (stderr, TREE_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } } *hp = *proto; if (php != NULL) php->next = hp; hp->next = NULL; return hp; } struct dent * treelookup (word) register ichar_t * word; { register int hcode; register struct dent * hp; char chword[INPUTWORDLEN + MAXAFFIXLEN]; if (pershsize <= 0) return NULL; (void) ichartostr ((unsigned char *) chword, word, sizeof chword, 1); hcode = hash (word, pershsize); hp = &pershtab[hcode]; while (hp != NULL && (hp->flagfield & USED)) { if (strcmp (chword, (char *) hp->word) == 0) break; while (hp->flagfield & MOREVARIANTS) hp = hp->next; hp = hp->next; } if (hp != NULL && (hp->flagfield & USED)) return hp; else return NULL; } #if SORTPERSONAL != 0 /* Comparison routine for sorting the personal dictionary with qsort */ static int pdictcmp (enta, entb) struct dent ** enta; struct dent ** entb; { /* The parentheses around *enta and *entb below are NECESSARY! ** Otherwise the compiler reads it as *(enta->word), or ** enta->word[0], which is illegal (but pcc takes it and ** produces wrong code). **/ return casecmp ((*enta)->word, (*entb)->word, 1); } #endif void treeoutput () { register struct dent * cent; /* Current entry */ register struct dent * lent; /* Linked entry */ #if SORTPERSONAL != 0 int pdictsize; /* Number of entries to write */ struct dent ** sortlist; /* List of entries to be sorted */ register struct dent ** sortptr; /* Handy pointer into sortlist */ #endif register struct dent * ehtab; /* End of pershtab, for fast looping */ if (newwords == 0) return; if ((dictf = fopen (personaldict, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, personaldict, MAYBE_CR (stderr)); return; } #if SORTPERSONAL != 0 /* ** If we are going to sort the personal dictionary, we must know ** how many items are going to be sorted. */ pdictsize = 0; if (hcount >= SORTPERSONAL) sortlist = NULL; else { for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) pdictsize++; while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { /* ** We only want to count variant headers ** and standalone entries. These happen ** to share the characteristics in the ** test below. This test will appear ** several more times in this routine. */ if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) pdictsize++; } } sortlist = (struct dent **) malloc (pdictsize * sizeof (struct dent)); } if (sortlist == NULL) { #endif for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) { toutent (dictf, lent, 1); while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) toutent (dictf, cent, 1); } } #if SORTPERSONAL != 0 return; } /* ** Produce dictionary in sorted order. We used to do this ** destructively, but that turns out to fail because in some modes ** the dictionary is written more than once. So we build an ** auxiliary pointer table (in sortlist) and sort that. This ** is faster anyway, though it uses more memory. */ sortptr = sortlist; for (cent = pershtab, ehtab = pershtab + pershsize; cent < ehtab; cent++) { for (lent = cent; lent != NULL; lent = lent->next) { if ((lent->flagfield & (USED | KEEP)) == (USED | KEEP)) { *sortptr++ = lent; while (lent->flagfield & MOREVARIANTS) lent = lent->next; } } } for (cent = hashtbl, ehtab = hashtbl + hashsize; cent < ehtab; cent++) { if ((cent->flagfield & (USED | KEEP)) == (USED | KEEP)) { if (captype (cent->flagfield) != FOLLOWCASE && cent->word != NULL) *sortptr++ = cent; } } /* Sort the list */ qsort ((char *) sortlist, (unsigned) pdictsize, sizeof (sortlist[0]), (int (*) P ((const void *, const void *))) pdictcmp); /* Write it out */ for (sortptr = sortlist; --pdictsize >= 0; ) toutent (dictf, *sortptr++, 1); free ((char *) sortlist); #endif newwords = 0; (void) fclose (dictf); } VOID * mymalloc (size) unsigned int size; { return malloc ((unsigned) size); } void myfree (ptr) VOID * ptr; { if (hashstrings != NULL && (unsigned char *) ptr >= hashstrings && (unsigned char *) ptr <= hashstrings + hashheader.stringsize) return; /* Can't free stuff in hashstrings */ free (ptr); } #ifdef REGEX_LOOKUP /* check the hashed dictionary for words matching the regex. return the */ /* a matching string if found else return NULL */ char * do_regex_lookup (expr, whence) char * expr; /* regular expression to use in the match */ int whence; /* 0 = start at the beg with new regx, else */ /* continue from cur point w/ old regex */ { static struct dent * curent; static int curindex; static struct dent * curpersent; static int curpersindex; static REGCTYPE cmp_expr = (REGCTYPE) NULL; char dummy[INPUTWORDLEN + MAXAFFIXLEN]; ichar_t * is; if (whence == 0) { is = strtosichar (expr, 0); upcase (is); expr = ichartosstr (is, 1); REGFREE (cmp_expr); /* free previous compiled pattern, if any */ cmp_expr = REGCMP (cmp_expr, expr); curent = hashtbl; curindex = 0; curpersent = pershtab; curpersindex = 0; } /* search the dictionary until the word is found or the words run out */ for ( ; curindex < hashsize; curent++, curindex++) { if (curent->word != NULL && REGEX (cmp_expr, (char *) curent->word, dummy) != NULL) { curindex++; /* Everybody's gotta write a wierd expression once in a while! */ return (char *) curent++->word; } } /* Try the personal dictionary too */ for ( ; curpersindex < pershsize; curpersent++, curpersindex++) { if ((curpersent->flagfield & USED) != 0 && curpersent->word != NULL && REGEX (cmp_expr, (char *) curpersent->word, dummy) != NULL) { curpersindex++; /* Everybody's gotta write a wierd expression once in a while! */ return curpersent++->word; } } return NULL; } #endif /* REGEX_LOOKUP */ ispell-3.4.00/PaxHeaders.19408/parse.y0000644000000000000000000000007410231561320014132 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/parse.y0000444003214100001440000014735310231561320015207 0ustar00geofffaculty00000000000000%{ #ifndef lint static char Rcs_Id[] = "$Id: parse.y,v 1.65 2005/04/20 23:16:32 geoff Exp $"; #endif /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: parse.y,v $ * Revision 1.65 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. Add (disabled) * code to detect cases where not all alternate string characters are * defined. Add (disabled) code to detect duplicate alternate string * character definitions. Rewrite the code that assigns group numbers to * string chracters, making it faster and more robust. * * Revision 1.64 2005/04/14 14:38:23 geoff * Update license. Get rid of a stray semicolon that's been there for * over a decade. For 64 mask bits, allow the non-alphabetic flag * characters that fall between 'Z' and 'a'. * * Revision 1.63 2002/06/20 23:46:16 geoff * Fix a bug in flag checking when using 64 mask bits. * * Revision 1.62 2001/09/06 00:30:29 geoff * Changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.61 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.60 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.59 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.58 2000/02/07 22:16:53 geoff * Fix a minor typo in a synonym * * Revision 1.57 1999/01/18 03:28:40 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.56 1999/01/07 01:23:11 geoff * Update the copyright. * * Revision 1.55 1999/01/03 01:46:41 geoff * Add support for the "plain" deformatters. * * Revision 1.54 1997/12/02 06:25:04 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.53 1995/11/08 05:09:22 geoff * Allow html/sgml as a deformatter type. * * Revision 1.52 1994/11/21 07:03:03 geoff * Get rid of the last vestiges of the "+" flag option. * * Revision 1.51 1994/11/02 06:56:13 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.50 1994/10/25 05:46:22 geoff * Add support for the "+" (any word) flag modifier. * * Revision 1.49 1994/09/16 04:48:30 geoff * Allow more than 128 string characters, by using different types in the * appropriate places. * * Revision 1.48 1994/05/24 05:31:25 geoff * Remember to convert the flag bit from a character to a bit number * before putting it in the hash file. * * Revision 1.47 1994/05/24 04:54:33 geoff * Improve the error checking for affix flag names, detecting bad flags * and duplicates. * * Revision 1.46 1994/05/22 01:38:02 geoff * Don't force flags to uppercase if lowercase flags are legal * * Revision 1.45 1994/05/17 06:44:17 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.44 1994/02/07 05:51:03 geoff * Fix a place where atoi got the wrong argument type (lint error only) * * Revision 1.43 1994/01/25 07:12:01 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" %} %union { int simple; /* Simple char or lval from yylex */ struct { unsigned char * set; /* Character set */ int complement; /* NZ if it is a complement set */ } charset; unsigned char * string; /* String */ ichar_t * istr; /* Internal string */ struct flagent * entry; /* Flag entry */ } %{ static int yylex P ((void)); /* Trivial lexical analyzer */ static int kwanalyze P ((int backslashed, unsigned char * str)); /* Analyze a possible keyword */ static void getqstring P ((void)); /* Get (double-)quoted string */ static void getrange P ((void)); /* Get a lexical character range */ static int backch P ((void)); /* Process a backslashed character */ static void yyerror P ((char * msg)); /* Print out an error message */ int yyopen P ((char * file)); /* Open a table file */ void yyinit P ((void)); /* Initialize for parsing */ static int grabchar P ((void)); /* Get a character and track line number */ static void ungrabchar P ((int ch)); /* Unget a character, tracking line numbers */ static int sufcmp P ((struct flagent * flag1, struct flagent * flag2)); /* Compare suffix flags for qsort */ static int precmp P ((struct flagent * flag1, struct flagent * flag2)); /* Compare prefix flags for qsort */ static int addstringchar P ((unsigned char * str, int lower, int upper)); /* Add a string character to the table */ static int stringcharcmp P ((unsigned char * a, unsigned char * b)); /* Strcmp() done right, for Sun 4's */ #ifdef TBLDEBUG static void tbldump P ((struct flagent * flagp, int numflags)); /* Dump a flag table */ static void entdump P ((struct flagent * flagp)); /* Dump one flag entry */ static void setdump P ((unsigned char * setp, int mask)); /* Dump a set specification */ static void subsetdump P ((unsigned char * setp, int mask, int dumpval)); /* Dump part of a set spec */ #endif struct kwtab { char * kw; /* Syntactic keyword */ int val; /* Lexical value */ }; #define TBLINC 10 /* Size to allocate table by */ static FILE * aff_file = NULL; /* Input file pointer */ static int centnum; /* Number of entries in curents */ static int centsize = 0; /* Size of alloc'ed space in curents */ static int ctypechars; /* Size of string in current strtype */ static int ctypenum = 0; /* Number of entries in chartypes */ static int ctypesize = 0; /* Size of alloc'ed spc in chartypes */ static struct flagent * curents; /* Current flag entry collection */ static char * fname = "(stdin)"; /* Current file name */ static char lexungrab[MAXSTRINGCHARLEN * 2]; /* Spc for ungrabch */ static int lineno = 1; /* Current line number in file */ static int nbasestrings = 0; /* Number of base stringchars */ static struct flagent * table; /* Current table being built */ static int tblnum; /* Numer of entries in table */ static int tblsize = 0; /* Size of the flag table */ static int ungrablen; /* Size of ungrab area */ %} %token '-' %token '>' %token ',' %token ':' %token '.' %token '*' %token '~' %token ALLAFFIXES %token ALTSTRINGCHAR %token ALTSTRINGTYPE %token BOUNDARYCHARS %token COMPOUNDMIN %token COMPOUNDWORDS %token CONTROLLED %token DEFSTRINGTYPE %token FLAG %token FLAGMARKER %token NROFFCHARS %token OFF %token ON %token PREFIXES %token RANGE %token SUFFIXES %token STRING %token STRINGCHAR %token TEXCHARS %token WORDCHARS %type file %type headers %type option_group %type charset_group %type altchar_group %type charset_stmt %type option_stmt %type altchar_stmt %type altchar_spec_group %type altchar_spec %type deftype_stmt %type stringtype_info %type filesuf_list %type filesuf %type char_set %type tables %type prefix_table %type suffix_table %type table %type flagdef %type flagoptions %type flagoption %type error %type on_or_off %type rules %type affix_rule %type cond_or_null %type conditions %type ichar_string %% file : headers tables | tables ; headers : option_group charset_group | option_group charset_group altchar_group | charset_group | charset_group altchar_group ; option_group : option_stmt | option_group option_stmt ; charset_group : deftype_stmt charset_stmt { nbasestrings = hashheader.nstrchars; } | charset_stmt { nbasestrings = hashheader.nstrchars; } | charset_group charset_stmt { nbasestrings = hashheader.nstrchars; } ; deftype_stmt : DEFSTRINGTYPE stringtype_info ; altchar_group : altchar_stmt /* * The following error message is disabled (if 0) * because (a) the test doesn't work right with * PARSE_Y_MULTIPLE_STRINGS disabled, and (b) I'm * not convinced that it's always a mistake to * leave some alternates undefined. */ { #if 0 if (hashheader.nstrchars != ctypenum * nbasestrings) yyerror (PARSE_Y_WRONG_STRING_COUNT); #endif /* 0 */ } | altchar_group altchar_stmt /* * The following error message is disabled (if 0) * because (a) the test doesn't work right with * PARSE_Y_MULTIPLE_STRINGS disabled, and (b) I'm * not convinced that it's always a mistake to * leave some alternates undefined. */ { #if 0 if (hashheader.nstrchars != ctypenum * nbasestrings) yyerror (PARSE_Y_WRONG_STRING_COUNT); #endif /* 0 */ } ; charset_stmt : WORDCHARS char_set char_set { int nextlower; int nextupper; for (nextlower = SET_SIZE + hashheader.nstrchars; --nextlower > SET_SIZE; ) { if ($2.set[nextlower] != 0 || $3.set[nextlower] != 0) { yyerror (PARSE_Y_NO_WORD_STRINGS); break; } } for (nextlower = 0; nextlower < SET_SIZE; nextlower++) { hashheader.wordchars[nextlower] |= $2.set[nextlower] | $3.set[nextlower]; hashheader.lowerchars[nextlower] |= $2.set[nextlower]; hashheader.upperchars[nextlower] |= $3.set[nextlower]; } for (nextlower = nextupper = 0; nextlower < SET_SIZE; nextlower++) { if ($2.set[nextlower]) { for ( ; nextupper < SET_SIZE && !$3.set[nextupper]; nextupper++) ; if (nextupper == SET_SIZE) yyerror (PARSE_Y_UNMATCHED); else { hashheader.lowerconv[nextupper] = (ichar_t) nextlower; hashheader.upperconv[nextlower] = (ichar_t) nextupper; hashheader.sortorder[nextupper] = hashheader.sortval++; hashheader.sortorder[nextlower] = hashheader.sortval++; nextupper++; } } } for ( ; nextupper < SET_SIZE; nextupper++) { if ($3.set[nextupper]) yyerror (PARSE_Y_UNMATCHED); } free ($2.set); free ($3.set); } | WORDCHARS char_set { int i; for (i = SET_SIZE + hashheader.nstrchars; --i > SET_SIZE; ) { if ($2.set[i] != 0) { yyerror (PARSE_Y_NO_WORD_STRINGS); break; } } for (i = 0; i < SET_SIZE; i++) { if ($2.set[i]) { hashheader.wordchars[i] = 1; hashheader.sortorder[i] = hashheader.sortval++; } } free ($2.set); } | BOUNDARYCHARS char_set char_set { int nextlower; int nextupper; for (nextlower = SET_SIZE + hashheader.nstrchars; --nextlower > SET_SIZE; ) { if ($2.set[nextlower] != 0 || $3.set[nextlower] != 0) { yyerror (PARSE_Y_NO_BOUNDARY_STRINGS); break; } } for (nextlower = 0; nextlower < SET_SIZE; nextlower++) { hashheader.boundarychars[nextlower] |= $2.set[nextlower] | $3.set[nextlower]; hashheader.lowerchars[nextlower] |= $2.set[nextlower]; hashheader.upperchars[nextlower] |= $3.set[nextlower]; } for (nextlower = nextupper = 0; nextlower < SET_SIZE; nextlower++) { if ($2.set[nextlower]) { for ( ; nextupper < SET_SIZE && !$3.set[nextupper]; nextupper++) ; if (nextupper == SET_SIZE) yyerror (PARSE_Y_UNMATCHED); else { hashheader.lowerconv[nextupper] = (ichar_t) nextlower; hashheader.upperconv[nextlower] = (ichar_t) nextupper; hashheader.sortorder[nextupper] = hashheader.sortval++; hashheader.sortorder[nextlower] = hashheader.sortval++; nextupper++; } } } for ( ; nextupper < SET_SIZE; nextupper++) { if ($3.set[nextupper]) yyerror (PARSE_Y_UNMATCHED); } free ($2.set); free ($3.set); } | BOUNDARYCHARS char_set { int i; for (i = SET_SIZE + hashheader.nstrchars; --i > SET_SIZE; ) { if ($2.set[i] != 0) { yyerror (PARSE_Y_NO_BOUNDARY_STRINGS); break; } } for (i = 0; i < SET_SIZE; i++) { if ($2.set[i]) { hashheader.boundarychars[i] = 1; hashheader.sortorder[i] = hashheader.sortval++; } } free ($2.set); } | STRINGCHAR STRING { int len; len = strlen ((char *) $2); if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); else (void) addstringchar ($2, 0, 0); free ((char *) $2); } | STRINGCHAR STRING STRING { int lcslot; unsigned int len; int ucslot; len = strlen ((char *) $2); if (strlen ((char *) $3) != len) yyerror (PARSE_Y_LENGTH_MISMATCH); else if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); else { /* * Add the uppercase character first, so that * it will sort first. */ lcslot = ucslot = addstringchar ($3, 0, 1); if (ucslot >= 0) lcslot = addstringchar ($2, 1, 0); if (ucslot >= 0 && lcslot >= 0) { if (ucslot >= lcslot) ucslot++; hashheader.lowerconv[ucslot] = (ichar_t) lcslot; hashheader.upperconv[lcslot] = (ichar_t) ucslot; } } free ((char *) $2); free ((char *) $3); } ; altchar_stmt : ALTSTRINGTYPE stringtype_info | ALTSTRINGTYPE stringtype_info altchar_spec_group ; stringtype_info : STRING STRING filesuf_list { chartypes[ctypenum].name = (unsigned char *) $1; chartypes[ctypenum].deformatter = (char *) $2; /* * Implement a few common synonyms. This should * be generalized. */ if (strcmp ((char *) $2, "none") == 0) (void) strcpy ((char *) $2, "plain"); else if (strcmp ((char *) $2, "TeX") == 0) (void) strcpy ((char *) $2, "tex"); else if (strcmp ((char *) $2, "troff") == 0) (void) strcpy ((char *) $2, "nroff"); else if (strcmp ((char *) $2, "HTML") == 0 || strcmp ((char *) $2, "html") == 0 || strcmp ((char *) $2, "SGML") == 0) (void) strcpy ((char *) $2, "sgml"); /* * Someday, we'll accept generalized deformatters. * Then we can get rid of this test. */ if (strcmp ((char *) $2, "plain") != 0 && strcmp ((char *) $2, "nroff") != 0 && strcmp ((char *) $2, "tex") != 0 && strcmp ((char *) $2, "sgml") != 0) yyerror (PARSE_Y_BAD_DEFORMATTER); ctypenum++; hashheader.nstrchartype = ctypenum; } ; filesuf_list : filesuf { if (ctypenum >= ctypesize) { if (ctypesize == 0) chartypes = (struct strchartype *) malloc (TBLINC * sizeof (struct strchartype)); else chartypes = (struct strchartype *) realloc ((char *) chartypes, (ctypesize + TBLINC) * sizeof (struct strchartype)); if (chartypes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ctypesize += TBLINC; } ctypechars = TBLINC * (strlen ((char *) $1) + 1) + 1; chartypes[ctypenum].suffixes = malloc ((unsigned int) ctypechars); if (chartypes[ctypenum].suffixes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy (chartypes[ctypenum].suffixes, (char *) $1); chartypes[ctypenum].suffixes [strlen ((char *) $1) + 1] = '\0'; free ((char *) $1); } | filesuf_list filesuf { char * nexttype; int offset; for (nexttype = chartypes[ctypenum].suffixes; *nexttype != '\0'; nexttype += strlen (nexttype) + 1) ; offset = nexttype - chartypes[ctypenum].suffixes; if ((int) (offset + strlen ((char *) $2) + 1) >= ctypechars) { ctypechars += TBLINC * (strlen ((char *) $2) + 1); chartypes[ctypenum].suffixes = realloc (chartypes[ctypenum].suffixes, (unsigned int) ctypechars); if (chartypes[ctypenum].suffixes == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } nexttype = chartypes[ctypenum].suffixes + offset; } (void) strcpy (nexttype, (char *) $2); nexttype[strlen ((char *) $2) + 1] = '\0'; free ((char *) $2); } ; filesuf : STRING ; altchar_spec_group : altchar_spec | altchar_spec_group altchar_spec ; altchar_spec : ALTSTRINGCHAR STRING STRING { unsigned int len; int slot; defstringgroup = ctypenum - 1; len = strlen ((char *) $2); if (len > MAXSTRINGCHARLEN) yyerror (PARSE_Y_LONG_STRING); else if (len == 0) yyerror (PARSE_Y_NULL_STRING); else if (hashheader.nstrchars >= MAXSTRINGCHARS) yyerror (PARSE_Y_MANY_STRINGS); #if 0 /* * The following error message is disabled (if 0) * because it turns out some languages (e.g., * German) actually need to have multiple * alternate stringchars mapping to the same base * stringchar. */ else if (isstringch ($2, 0)) yyerror (PARSE_Y_MULTIPLE_STRINGS); #endif /* 0 */ else if (!isstringch ($3, 1)) yyerror (PARSE_Y_NO_SUCH_STRING); else { slot = addstringchar ($2, 0, 0) - SET_SIZE; if (laststringch >= (unsigned int) slot) laststringch++; hashheader.stringdups[slot] = laststringch; } free ((char *) $2); free ((char *) $3); } ; option_stmt : NROFFCHARS STRING { if (strlen ((char *) $2) == sizeof (hashheader.nrchars)) (void) bcopy ((char *) $2, hashheader.nrchars, sizeof (hashheader.nrchars)); else yyerror (PARSE_Y_WRONG_NROFF); free ((char *) $2); } | TEXCHARS STRING { if (strlen ((char *) $2) == sizeof (hashheader.texchars)) (void) bcopy ((char *) $2, hashheader.texchars, sizeof (hashheader.texchars)); else yyerror (PARSE_Y_WRONG_TEX); free ((char *) $2); } | COMPOUNDMIN STRING { unsigned char * digitp; /* Pointer to next digit */ for (digitp = $2; *digitp != '\0'; digitp++) { if (*digitp <= '0' || *digitp >= '9') { yyerror (PARSE_Y_BAD_NUMBER); break; } } hashheader.compoundmin = atoi ((char *) $2); } | COMPOUNDWORDS on_or_off { hashheader.compoundflag = $2; } | COMPOUNDWORDS CONTROLLED STRING { if (strlen ((char *) $3) != 1) yyerror (PARSE_Y_LONG_FLAG); else if (hashheader.compoundbit >= 0) yyerror (PARSE_Y_DOUBLE_COMPOUND); else { hashheader.compoundbit = (unsigned char) $3[0]; #if MASKBITS <= 128 hashheader.compoundbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (hashheader.compoundbit)) hashheader.compoundbit = toupper (hashheader.compoundbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (hashheader.compoundbit < 'A' || hashheader.compoundbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ hashheader.compoundbit = CHARTOBIT (hashheader.compoundbit); } hashheader.compoundflag = COMPOUND_CONTROLLED; } | ALLAFFIXES on_or_off { hashheader.defhardflag = $2; } | FLAGMARKER STRING { if (strlen ((char *) $2) != 1) yyerror (PARSE_Y_LONG_FLAG); else hashheader.flagmarker = $2[0]; free ((char *) $2); } ; char_set : '.' { int i; unsigned char * set; set = (unsigned char *) malloc (SET_SIZE + MAXSTRINGCHARS); if (set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } $$.set = set; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) *set++ = 1; $$.complement = 0; } | STRING { unsigned int setlen; $$.set = (unsigned char *) malloc (SET_SIZE + MAXSTRINGCHARS); if ($$.set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) bzero ($$.set, SET_SIZE + MAXSTRINGCHARS); if (l1_isstringch ($1, setlen, 1)) { if (setlen != strlen ((char *) $1)) yyerror (PARSE_Y_NEED_BLANK); $$.set[SET_SIZE + laststringch] = 1; } else { if (strlen ((char *) $1) != 1) yyerror (PARSE_Y_NEED_BLANK); $$.set[*$1] = 1; } free ((char *) $1); $$.complement = 0; } | RANGE ; on_or_off : ON { $$ = 1; } | OFF { $$ = 0; } ; tables : prefix_table suffix_table | suffix_table prefix_table | prefix_table | suffix_table ; prefix_table : PREFIXES table { pflaglist = table; numpflags = tblnum; /* * Sort the flag table. This is critical so * that ispell can build a correct index * table. The idea is to put similar affixes * together. */ qsort ((char *) table, (unsigned) tblnum, sizeof (*table), (int (*) P ((const void *, const void *))) precmp); #ifdef TBLDEBUG (void) fprintf (stderr, "prefixes\n"); tbldump (table, tblnum); #endif tblsize = 0; } ; suffix_table : SUFFIXES table { sflaglist = table; numsflags = tblnum; /* * See comments on the prefix sort. */ qsort ((char *) table, (unsigned) tblnum, sizeof (*table), (int (*) P ((const void *, const void *))) sufcmp); #ifdef TBLDEBUG (void) fprintf (stderr, "suffixes\n"); tbldump (table, tblnum); #endif tblsize = 0; } ; table : flagdef { if (tblsize == 0) { tblsize = centnum + TBLINC; tblnum = 0; table = (struct flagent *) malloc (tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } else if (tblnum + centnum >= tblsize) { tblsize = tblnum + centnum + TBLINC; table = (struct flagent *) realloc ((char *) table, tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } for (tblnum = 0; tblnum < centnum; tblnum++) table[tblnum] = curents[tblnum]; centnum = 0; } | table flagdef { int i; if (tblnum + centnum >= tblsize) { tblsize = tblnum + centnum + TBLINC; table = (struct flagent *) realloc ((char *) table, tblsize * (sizeof (struct flagent))); if (table == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } for (i = 0; i < centnum; i++) table[tblnum + i] = curents[i]; tblnum += centnum; centnum = 0; } ; flagdef : FLAG STRING ':' rules { int flagbit; int i; if (strlen ((char *) $2) != 1) yyerror (PARSE_Y_LONG_FLAG); flagbit = (unsigned char) $2[0]; #if MASKBITS <= 128 flagbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (flagbit)) flagbit = toupper (flagbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (flagbit < 'A' || flagbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ flagbit = CHARTOBIT (flagbit); for (i = 0; i < tblnum; i++) { if (table[i].flagbit == flagbit) yyerror (PARSE_Y_DUP_FLAG); } for (i = 0; i < centnum; i++) { curents[i].flagbit = flagbit; curents[i].flagflags = 0; } free ((char *) $2); } | FLAG flagoptions STRING ':' rules { int flagbit; int i; if (strlen ((char *) $3) != 1) yyerror (PARSE_Y_LONG_FLAG); flagbit = (unsigned char) $3[0]; #if MASKBITS <= 128 flagbit &= 0x7f; #endif /* MASKBITS */ #if MASKBITS <= 32 if (islower (flagbit)) flagbit = toupper (flagbit); #endif /* MASKBITS */ #if MASKBITS <= 64 if (flagbit < 'A' || flagbit > 'z') yyerror (PARSE_Y_BAD_FLAG); #endif /* MASKBITS */ flagbit = CHARTOBIT (flagbit); for (i = 0; i < tblnum; i++) { if (table[i].flagbit == flagbit) yyerror (PARSE_Y_DUP_FLAG); } for (i = 0; i < centnum; i++) { curents[i].flagbit = flagbit; curents[i].flagflags = $2; } free ((char *) $3); } | error { $$ = 0; } ; flagoptions : flagoption | flagoptions flagoption { $$ = $1 | $2; } ; flagoption : '*' { $$ = FF_CROSSPRODUCT; } | '~' { $$ = FF_COMPOUNDONLY; } ; rules : affix_rule { if (centsize == 0) { curents = (struct flagent *) malloc (TBLINC * (sizeof (struct flagent))); if (curents == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } centsize = TBLINC; } curents[0] = *$1; centnum = 1; free ((char *) $1); $$ = 0; } | rules affix_rule { if (centnum >= centsize) { centsize += TBLINC; curents = (struct flagent *) realloc ((char *) curents, centsize * (sizeof (struct flagent))); if (curents == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } } curents[centnum] = *$2; centnum++; free ((char *) $2); } ; affix_rule : cond_or_null '>' ichar_string { int i; $1->stripl = 0; $1->strip = NULL; $1->affl = icharlen ($3); $1->affix = $3; upcase ($3); /* * As a special optimization (and a * concession to those who prefer the syntax * that way), convert any single condition * that accepts all characters into no * condition at all. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ichar_string ',' ichar_string { int i; $1->stripl = icharlen ($4); $1->strip = $4; upcase ($4); $1->affl = icharlen ($6); $1->affix = $6; upcase ($6); /* * Convert the syntax ". > -xxx,yyy" into * " > -xxx,yyy", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ichar_string ',' '-' { int i; $1->stripl = icharlen ($4); $1->strip = $4; upcase ($4); $1->affl = 0; $1->affix = NULL; /* * Convert the syntax ". > -xxx," into * " > -xxx,", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } | cond_or_null '>' '-' ',' '-' { int i; $1->stripl = 0; $1->strip = NULL; $1->affl = 0; $1->affix = NULL; /* * Convert the syntax ". > -,-" into * " > -,-", as in the code just above. */ if ($1->numconds == 1) { for (i = SET_SIZE + hashheader.nstrchars; --i >= 0; ) { if (($1->conds[i] & 1) == 0) break; } if (i < 0) $1->numconds = 0; } $$ = $1; } ; cond_or_null : /* Empty */ { struct flagent * ent; ent = (struct flagent *) malloc (sizeof (struct flagent)); if (ent == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ent->numconds = 0; (void) bzero (ent->conds, SET_SIZE + MAXSTRINGCHARS); $$ = ent; } | conditions ; conditions : char_set { struct flagent * ent; int i; ent = (struct flagent *) malloc (sizeof (struct flagent)); if (ent == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } ent->numconds = 1; (void) bzero (ent->conds, SET_SIZE + MAXSTRINGCHARS); /* * Copy conditions to the new entry, making * sure that uppercase versions are generated * for lowercase input. */ for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($1.set[i]) { ent->conds[i] = 1; if (!$1.complement) ent->conds[mytoupper ((ichar_t) i)] = 1; } } if ($1.complement) { for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($1.set[i] == 0) ent->conds[mytoupper ((ichar_t) i)] = 0; } } free ($1.set); $$ = ent; } | conditions char_set { int i; int mask; if ($1->numconds >= 8) { yyerror (PARSE_Y_MANY_CONDS); $1->numconds = 7; } mask = 1 << $1->numconds; $1->numconds++; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($2.set[i]) { $1->conds[i] |= mask; if (!$2.complement) $1->conds[mytoupper ((ichar_t) i)] |= mask; } } if ($2.complement) { mask = ~mask; for (i = SET_SIZE + MAXSTRINGCHARS; --i >= 0; ) { if ($2.set[i] == 0) $1->conds[mytoupper ((ichar_t) i)] &= mask; } } free ($2.set); } ; ichar_string : STRING { ichar_t *tichar; tichar = strtosichar ($1, 1); $$ = (ichar_t *) malloc (sizeof (ichar_t) * (icharlen (tichar) + 1)); if ($$ == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) icharcpy ($$, tichar); free ((char *) $1); } ; %% static struct kwtab /* Table of built-in keywords */ keywords[] = { {"allaffixes", ALLAFFIXES}, {"altstringchar", ALTSTRINGCHAR}, {"altstringtype", ALTSTRINGTYPE}, {"boundarychars", BOUNDARYCHARS}, {"compoundmin", COMPOUNDMIN}, {"compoundwords", COMPOUNDWORDS}, {"controlled", CONTROLLED}, {"defstringtype", DEFSTRINGTYPE}, {"flag", FLAG}, {"flagmarker", FLAGMARKER}, {"nroffchars", NROFFCHARS}, {"troffchars", NROFFCHARS}, {"on", ON}, {"off", OFF}, {"prefixes", PREFIXES}, {"stringchar", STRINGCHAR}, {"suffixes", SUFFIXES}, {"TeXchars", TEXCHARS}, {"texchars", TEXCHARS}, {"wordchars", WORDCHARS}, {NULL, 0} }; /* * Trivial lexical analyzer. */ static int yylex () { int backslashed; /* NZ if backslash appeared */ register int ch; /* Next character seen */ register unsigned char * lexp; /* Pointer into lexstring */ unsigned char lexstring[256]; /* Space for collecting strings */ while ((ch = grabchar ()) != EOF && (isspace (ch) || ch == '#')) { /* Skip whitespace and comments */ if (ch == '#') { while ((ch = grabchar ()) != EOF && ch != '\n') ; } } switch (ch) { case EOF: return EOF; case '"': getqstring (); return STRING; case '-': case '>': case ',': case ':': case '.': case '*': case '~': yylval.simple = ch; return ch; case '[': /* Beginning of a range set ] */ getrange (); /* Get the range */ return RANGE; } /* * We get here if the character is an ordinary one; note that * this includes backslashes. */ backslashed = 0; lexp = lexstring; for ( ; ; ) { switch (ch) { case EOF: *lexp = '\0'; return kwanalyze (backslashed, lexstring); case '\\': backslashed = 1; ch = backch (); *lexp++ = (unsigned char) ch; break; case ' ': case '\t': case '\n': case '\f': case '\r': *lexp = '\0'; return kwanalyze (backslashed, lexstring); case '#': case '>': case ':': case '-': case ',': case '[': /* ] */ ungrabchar (ch); *lexp = '\0'; return kwanalyze (backslashed, lexstring); default: *lexp++ = (unsigned char) ch; break; } ch = grabchar (); } } static int kwanalyze (backslashed, str) int backslashed; /* NZ if string had a backslash */ register unsigned char * str; /* String to analyze */ { register struct kwtab * kwptr; /* Pointer into keyword table */ yylval.simple = 0; if (!backslashed) /* Backslash means not keyword */ { for (kwptr = keywords; kwptr->kw != NULL; kwptr++) { if (strcmp (kwptr->kw, (char *) str) == 0) return (yylval.simple = kwptr->val); } } yylval.string = (unsigned char *) malloc ((unsigned) strlen ((char *) str) + 1); if (yylval.string == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy ((char *) yylval.string, (char *) str); return STRING; } /* * Analyze a string in double quotes. The leading quote has already * been processed. */ static void getqstring () { register int ch; /* Next character read */ char lexstring[256]; /* Room to collect the string */ register char * lexp; /* Pointer into lexstring */ for (lexp = lexstring; (ch = grabchar ()) != EOF && ch != '"' && lexp < &lexstring[sizeof lexstring - 1]; ) { if (ch == '\\') ch = backch (); *lexp++ = (unsigned char) ch; } *lexp++ = '\0'; if (ch == EOF) yyerror (PARSE_Y_EOF); else if (ch != '"') { yyerror (PARSE_Y_LONG_QUOTE); while ((ch = grabchar ()) != EOF && ch != '"') { if (ch == '\\') ch = backch (); } } yylval.string = (unsigned char *) malloc ((unsigned) (lexp - lexstring)); if (yylval.string == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } (void) strcpy ((char *) yylval.string, (char *) lexstring); } /* * Analyze a range (e.g., [A-Za-z]). The left square bracket * has already been processed. */ static void getrange () /* Parse a range set */ { register int ch; /* Next character read */ register int lastch; /* Previous char, for ranges */ unsigned char stringch[MAXSTRINGCHARLEN]; int stringchlen; yylval.charset.set = malloc (SET_SIZE + MAXSTRINGCHARS); if (yylval.charset.set == NULL) { yyerror (PARSE_Y_NO_SPACE); exit (1); } /* Start with a null set */ (void) bzero (yylval.charset.set, SET_SIZE + MAXSTRINGCHARS); yylval.charset.complement = 0; lastch = -1; ch = grabchar (); if (ch == '^') { yylval.charset.complement = 1; ch = grabchar (); } /* [ */ if (ch == ']') { /* [[ */ lastch = ']'; yylval.charset.set[']'] = 1; } else ungrabchar (ch); /* [ */ while ((ch = grabchar ()) != EOF && ch != ']') { if (isstringstart (ch)) /* Handle a possible string character */ { stringch[0] = (unsigned char) ch; for (stringchlen = 1; stringchlen < MAXSTRINGCHARLEN; stringchlen++) { stringch[stringchlen] = '\0'; if (isstringch (stringch, 1)) { yylval.charset.set[SET_SIZE + laststringch] = 1; stringchlen = 0; break; } ch = grabchar (); if (ch == EOF) break; else stringch[stringchlen] = (unsigned char) ch; } if (stringchlen == 0) { lastch = -1; /* String characters can't be ranges */ continue; /* We found a string character */ } /* * Not a string character - put it back */ while (--stringchlen > 0) ungrabchar (stringch[stringchlen] & 0xFF); ch = stringch[0] & 0xFF; } if (ch == '\\') { lastch = ch = backch (); yylval.charset.set[ch] = 1; continue; } if (ch == '-') /* Handle a range */ { if (lastch == -1) { lastch = ch = '-'; /* Not really a range */ yylval.charset.set['-'] = 1; } else { ch = grabchar (); /* [ */ if (ch == EOF || ch == ']') { lastch = ch = '-'; /* Not really range */ yylval.charset.set['-'] = 1; if (ch != EOF) ungrabchar (ch); } else { if (ch == '\\') ch = backch (); while (lastch <= ch) yylval.charset.set[lastch++] = 1; lastch = -1; } } } else { lastch = ch; yylval.charset.set[ch] = 1; } } if (yylval.charset.complement) { for (ch = 0; ch < SET_SIZE + MAXSTRINGCHARS; ch++) yylval.charset.set[ch] = !yylval.charset.set[ch]; } } static int backch () /* Process post-backslash characters */ { register int ch; /* Next character read */ register int octval; /* Budding octal value */ ch = grabchar (); if (ch == EOF) return '\\'; else if (ch >= '0' && ch <= '7') { octval = ch - '0'; ch = grabchar (); if (ch >= '0' && ch <= '7') { octval = (octval << 3) + ch - '0'; ch = grabchar (); if (ch >= '0' && ch <= '7') octval = (octval << 3) + ch - '0'; else ungrabchar (ch); } else if (ch != EOF) ungrabchar (ch); ch = octval; } else if (ch == 'x') { ch = grabchar (); octval = 0; if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) { if (ch >= '0' && ch <= '9') octval = ch - '0'; else if (ch >= 'a' && ch <= 'f') octval = ch - 'a' + 0xA; else if (ch >= 'A' && ch <= 'F') octval = ch - 'A' + 0xA; ch = grabchar (); octval <<= 4; if (ch >= '0' && ch <= '9') octval |= ch -'0'; else if (ch >= 'a' && ch <= 'f') octval |= ch - 'a' + 0xA; else if (ch >= 'A' && ch <= 'F') octval |= ch - 'A' + 0xA; else if (ch != EOF) { octval >>= 4; ungrabchar (ch); } } else if (ch != EOF) ungrabchar (ch); ch = octval; } else { switch (ch) { case 'n': ch = '\n'; break; case 'f': ch = '\f'; break; case 'r': ch = '\r'; break; case 'b': ch = '\b'; break; case 't': ch = '\t'; break; case 'v': ch = '\v'; break; } } return ch; } static void yyerror (str) char * str; /* Error string */ { (void) fflush (stdout); (void) fprintf (stderr, PARSE_Y_ERROR_FORMAT(fname, lineno, str)); (void) fflush (stderr); } int yyopen (file) register char * file; /* File name to be opened */ { fname = malloc ((unsigned) strlen (file) + 1); if (fname == NULL) { (void) fprintf (stderr, PARSE_Y_MALLOC_TROUBLE); exit (1); } (void) strcpy (fname, file); aff_file = fopen (file, "r"); if (aff_file == NULL) { (void) fprintf (stderr, CANT_OPEN, file, MAYBE_CR (stderr)); perror (""); return 1; } lineno = 1; return 0; } void yyinit () { register unsigned int i; /* Loop counter */ if (aff_file == NULL) aff_file = stdin; /* Must be dynamically initialized on Amigas */ for (i = 0; i < SET_SIZE + MAXSTRINGCHARS; i++) { hashheader.lowerconv[i] = (ichar_t) i; hashheader.upperconv[i] = (ichar_t) i; hashheader.wordchars[i] = 0; hashheader.lowerchars[i] = 0; hashheader.upperchars[i] = 0; hashheader.boundarychars[i] = 0; /* * The default sort order is a big value so that there is room * to insert "underneath" it. In this way, special characters * will sort last, but in ASCII order. */ hashheader.sortorder[i] = i + 1 + 2 * SET_SIZE; } for (i = 0; i < SET_SIZE; i++) hashheader.stringstarts[i] = 0; for (i = 0; i < MAXSTRINGCHARS; i++) { hashheader.stringdups[i] = i; hashheader.groupnos[i] = 0; } hashheader.sortval = 1; /* This is so 0 can mean uninitialized */ (void) bcopy (NRSPECIAL, hashheader.nrchars, sizeof hashheader.nrchars); (void) bcopy (TEXSPECIAL, hashheader.texchars, sizeof hashheader.texchars); hashheader.compoundflag = COMPOUND_NEVER; /* Dflt is report missing blks */ hashheader.defhardflag = 0; /* Default is to try hard only if failures */ hashheader.nstrchars = 0; /* No string characters to start with */ hashheader.flagmarker = '/'; /* Default flag marker is slash */ hashheader.compoundmin = 3; /* Dflt is at least 3 chars in cmpnd parts */ hashheader.compoundbit = -1; /* Dflt is no compound bit */ /* Set up magic numbers and compile options */ hashheader.magic = hashheader.magic2 = MAGIC; hashheader.compileoptions = COMPILEOPTIONS; hashheader.maxstringchars = MAXSTRINGCHARS; hashheader.maxstringcharlen = MAXSTRINGCHARLEN; } static int grabchar () /* Get a character and count lines */ { int ch; /* Next input character */ if (ungrablen > 0) ch = lexungrab[--ungrablen] & 0xFF; else ch = getc (aff_file); if (ch == '\n') lineno++; return ch; } static void ungrabchar (ch) /* Unget a character, tracking line numbers */ int ch; /* Character to put back */ { if (ch == '\n') lineno--; if (ch != EOF) { if (ungrablen == sizeof (lexungrab)) yyerror (PARSE_Y_UNGRAB_PROBLEM); else lexungrab[ungrablen++] = (char) ch; } } static int sufcmp (flag1, flag2) /* Compare suffix flags for qsort */ register struct flagent * flag1; /* Flags to be compared */ register struct flagent * flag2; /* ... */ { register ichar_t * cp1; /* Pointer into flag1's suffix */ register ichar_t * cp2; /* Pointer into flag2's suffix */ if (flag1->affl == 0 || flag2->affl == 0) return flag1->affl - flag2->affl; cp1 = flag1->affix + flag1->affl; cp2 = flag2->affix + flag2->affl; while (*--cp1 == *--cp2 && cp1 > flag1->affix && cp2 > flag2->affix) ; if (*cp1 == *cp2) { if (cp1 == flag1->affix) { if (cp2 == flag2->affix) return 0; else return -1; } else return 1; } return *cp1 - *cp2; } static int precmp (flag1, flag2) /* Compare prefix flags for qsort */ register struct flagent * flag1; /* Flags to be compared */ register struct flagent * flag2; /* ... */ { if (flag1->affl == 0 || flag2->affl == 0) return flag1->affl - flag2->affl; else return icharcmp (flag1->affix, flag2->affix); } /* * Add a string character to the table, inserting it in order and * updating the table of duplicate string characters. */ static int addstringchar (str, lower, upper) register unsigned char * str; /* String character to be added */ int lower; /* NZ if a lower string */ int upper; /* NZ if an upper string */ { int len; /* Length of the string */ register unsigned int mslot; /* Slot being moved or modified */ register unsigned int slot; /* Where to put it */ len = strlen ((char *) str); if (len > MAXSTRINGCHARLEN) { yyerror (PARSE_Y_LONG_STRING); } else if (len == 0) { yyerror (PARSE_Y_NULL_STRING); return -1; } else if (hashheader.nstrchars >= MAXSTRINGCHARS) { yyerror (PARSE_Y_MANY_STRINGS); return -1; } /* * Find where to put the new character */ for (slot = 0; slot < hashheader.nstrchars; slot++) { if (stringcharcmp (&hashheader.stringchars[slot][0], str) > 0) break; } /* * Fix all duplicate numbers to reflect the new slot. */ for (mslot = 0; mslot < hashheader.nstrchars; mslot++) { if (hashheader.stringdups[mslot] >= slot) hashheader.stringdups[mslot]++; } /* * Fix all characters before it so that their case conversion reflects * the new locations of the characters that will follow the new one. */ slot += SET_SIZE; for (mslot = SET_SIZE; mslot < slot; mslot++) { if (hashheader.lowerconv[mslot] >= (ichar_t) slot) hashheader.lowerconv[mslot]++; if (hashheader.upperconv[mslot] >= (ichar_t) slot) hashheader.upperconv[mslot]++; } /* * Slide up all the other characters to make room for the new one, also * making the appropriate changes in the case-conversion tables. */ for (mslot = hashheader.nstrchars + SET_SIZE; --mslot >= slot; ) { (void) strcpy ( (char *) &hashheader.stringchars[mslot + 1 - SET_SIZE][0], (char *) &hashheader.stringchars[mslot - SET_SIZE][0]); hashheader.lowerchars[mslot + 1] = hashheader.lowerchars[mslot]; hashheader.upperchars[mslot + 1] = hashheader.upperchars[mslot]; hashheader.wordchars[mslot + 1] = hashheader.wordchars[mslot]; hashheader.boundarychars[mslot + 1] = hashheader.boundarychars[mslot]; if (hashheader.lowerconv[mslot] >= (ichar_t) slot) hashheader.lowerconv[mslot]++; if (hashheader.upperconv[mslot] >= (ichar_t) slot) hashheader.upperconv[mslot]++; hashheader.lowerconv[mslot + 1] = hashheader.lowerconv[mslot]; hashheader.upperconv[mslot + 1] = hashheader.upperconv[mslot]; hashheader.sortorder[mslot + 1] = hashheader.sortorder[mslot]; hashheader.stringdups[mslot + 1 - SET_SIZE] = hashheader.stringdups[mslot - SET_SIZE]; hashheader.groupnos[mslot + 1 - SET_SIZE] = hashheader.groupnos[mslot - SET_SIZE]; } /* * Insert the new string character into the slot we made. The * caller may choose to change the case-conversion field. */ (void) strcpy ((char *) &hashheader.stringchars[slot - SET_SIZE][0], (char *) str); hashheader.lowerchars[slot] = (unsigned char) lower; hashheader.upperchars[slot] = (unsigned char) upper; hashheader.wordchars[slot] = 1; hashheader.boundarychars[slot] = 0; hashheader.sortorder[slot] = hashheader.sortval++; hashheader.lowerconv[slot] = (ichar_t) slot; hashheader.upperconv[slot] = (ichar_t) slot; hashheader.stringdups[slot - SET_SIZE] = slot - SET_SIZE; hashheader.groupnos[slot - SET_SIZE] = ctypenum - 1; /* * Add the first character of the string to the string-starts table, and * bump the count. */ hashheader.stringstarts[str[0]] = 1; hashheader.nstrchars++; return slot; } /* * This routine is a reimplemention of strcmp(), needed because we use * unsigned characters internally. (Actually, the idiots at Sun thought * that this would be a good idea for the default strcmp, which is really, * really stupid. But I can't count on using their broken implementation, * so I have to do it myself in any case.) */ static int stringcharcmp (a, b) register unsigned char * a; register unsigned char * b; { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } #ifdef TBLDEBUG static void tbldump (flagp, numflags) /* Dump a flag table */ register struct flagent * flagp; /* First flag entry to dump */ register int numflags; /* Number of flags to dump */ { while (--numflags >= 0) entdump (flagp++); } static void entdump (flagp) /* Dump one flag entry */ register struct flagent * flagp; /* Flag entry to dump */ { register int cond; /* Condition number */ (void) fprintf (stderr, "flag %s%c:\t", (flagp->flagflags & FF_CROSSPRODUCT) ? "*" : "", BITTOCHAR (flagp->flagbit)); for (cond = 0; cond < flagp->numconds; cond++) { setdump (flagp->conds, 1 << cond); if (cond < flagp->numconds - 1) (void) putc (' ', stderr); } if (cond == 0) /* No conditions at all? */ (void) putc ('.', stderr); (void) fprintf (stderr, "\t> "); (void) putc ('\t', stderr); if (flagp->stripl) (void) fprintf (stderr, "-%s,", ichartosstr (flagp->strip, 1)); (void) fprintf (stderr, "%s\n", flagp->affl ? ichartosstr (flagp->affix, 1) : "-"); } static void setdump (setp, mask) /* Dump a set specification */ register unsigned char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ { register int cnum; /* Next character's number */ register int firstnz; /* Number of first NZ character */ register int numnz; /* Number of NZ characters */ numnz = 0; for (cnum = SET_SIZE + hashheader.nstrchars; --cnum >= 0; ) { if (setp[cnum] & mask) { numnz++; firstnz = cnum; } } if (numnz == 1) { if (cnum < SET_SIZE) (void) putc (firstnz, stderr); else (void) fputs ((char *) hashheader.stringchars[cnum - SET_SIZE], stderr); } else if (numnz == SET_SIZE) (void) putc ('.', stderr); else if (numnz > SET_SIZE / 2) { (void) fprintf (stderr, "[^"); subsetdump (setp, mask, 0); (void) putc (']', stderr); } else { (void) putc ('[', stderr); subsetdump (setp, mask, mask); (void) putc (']', stderr); } } static void subsetdump (setp, mask, dumpval) /* Dump part of a set spec */ register unsigned char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ register int dumpval; /* Value to be printed */ { register int cnum; /* Next character's number */ register int rangestart; /* Value starting a range */ for (cnum = 0; cnum < SET_SIZE; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) { for (rangestart = cnum; cnum < SET_SIZE; setp++, cnum++) { if ((*setp ^ dumpval) & mask) break; } if (cnum == rangestart + 1) (void) putc (rangestart, stderr); else if (cnum <= rangestart + 3) { while (rangestart < cnum) { (void) putc (rangestart, stderr); rangestart++; } } else (void) fprintf (stderr, "%c-%c", rangestart, cnum - 1); } } for ( ; cnum < SET_SIZE + hashheader.nstrchars; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) (void) fputs ((char *) hashheader.stringchars[cnum - SET_SIZE], stderr); } } #endif ispell-3.4.00/PaxHeaders.19408/fields.c0000644000000000000000000000007410227500137014244 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/fields.c0000444003214100001440000002631010227500137015306 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: fields.c,v 1.11 2005/04/14 14:38:23 geoff Exp $"; #endif /* * $Log: fields.c,v $ * Revision 1.11 2005/04/14 14:38:23 geoff * Make maxf unsigned. * * Revision 1.10 1999/01/06 20:57:19 geoff * Include ispell.h so proto.h will work * * Revision 1.9 1999/01/05 20:46:38 geoff * Get declarations from proto.h * * Revision 1.8 1998/07/06 04:56:19 geoff * Make strlen return an unsigned int * * Revision 1.7 1994/01/06 05:26:37 geoff * Get rid of all references to System V string routines, for portability * (sigh). * * Revision 1.6 1994/01/05 20:13:43 geoff * Add the maxf parameter * * Revision 1.5 1994/01/04 02:40:21 geoff * Make the increments settable (field_line_inc and field_field_inc). * Add support for the FLD_NOSHRINK flag. * * Revision 1.4 1993/09/27 17:48:02 geoff * Fix some lint complaints and some parenthesization errors. * * Revision 1.3 1993/09/09 01:11:11 geoff * Add a return value to fieldwrite. Add support for backquotes and for * unstripped backslashes. * * Revision 1.2 1993/08/26 00:02:50 geoff * Fix a stupid null-pointer bug * * Revision 1.1 1993/08/25 21:32:05 geoff * Initial revision * */ #include #include "config.h" #include "fields.h" #include "ispell.h" #include "proto.h" field_t * fieldread P ((FILE * file, char * delims, int flags, unsigned int maxf)); /* Read a line with fields from a file */ field_t * fieldmake P ((char * line, int allocated, char * delims, int flags, unsigned int maxf)); /* Make a field structure from a line */ static field_t * fieldparse P ((field_t * fieldp, char * line, char * delims, int flags, unsigned int maxf)); /* Parse the fields in a line */ static int fieldbackch P ((char * str, char ** out, int strip)); /* Process backslash sequences */ int fieldwrite P ((FILE * file, field_t * fieldp, int delim)); /* Write a line with fields to a file */ void fieldfree P ((field_t * fieldp)); /* Free a field returned by fieldread */ unsigned int field_field_inc = 20; /* Increment to increase # fields by */ unsigned int field_line_inc = 512; /* Incr to increase line length by */ #ifndef USG #define strchr index #endif /* USG */ /* * Read one line of the given file into a buffer, break it up into * fields, and return them to the caller. The field_t structure * returned must eventually be freed with fieldfree. */ field_t * fieldread (file, delims, flags, maxf) FILE * file; /* File to read lines from */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { register char * linebuf; /* Buffer to hold the line read in */ int linemax; /* Maximum line buffer size */ int linesize; /* Current line buffer size */ linebuf = (char *) malloc (field_line_inc); if (linebuf == NULL) return NULL; linemax = field_line_inc; linesize = 0; /* * Read in the line. */ while (fgets (&linebuf[linesize], linemax - linesize, file) != NULL) { linesize += strlen (&linebuf[linesize]); if (linebuf[linesize - 1] == '\n') break; else { linemax += field_line_inc; linebuf = (char *) realloc (linebuf, linemax); if (linebuf == NULL) return NULL; } } if (linesize == 0) { free (linebuf); return NULL; } return fieldmake (linebuf, 1, delims, flags, maxf); } field_t * fieldmake (line, allocated, delims, flags, maxf) char * line; /* Line to make into a field structure */ int allocated; /* NZ if line allocated with malloc */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { register field_t * fieldp; /* Structure describing the fields */ int linesize; /* Current line buffer size */ fieldp = (field_t *) malloc (sizeof (field_t)); if (fieldp == NULL) return NULL; fieldp->nfields = 0; fieldp->linebuf = allocated ? line : NULL; fieldp->fields = NULL; fieldp->hadnl = 0; linesize = strlen (line); if (line[linesize - 1] == '\n') { line[--linesize] = '\0'; fieldp->hadnl = 1; } /* * Shrink the line buffer if necessary. */ if (allocated && (flags & FLD_NOSHRINK) == 0) { line = fieldp->linebuf = (char *) realloc (fieldp->linebuf, linesize + 1); if (fieldp->linebuf == NULL) { fieldfree (fieldp); return NULL; } } return fieldparse (fieldp, line, delims, flags, maxf); } static field_t * fieldparse (fieldp, line, delims, flags, maxf) register field_t * fieldp; /* Field structure to parse into */ register char * line; /* Line to be parsed */ char * delims; /* Characters to use for field delimiters */ int flags; /* Option flags; see fields.h */ unsigned int maxf; /* Maximum number of fields to parse */ { unsigned int fieldmax; /* Max size of fields array */ char * lineout; /* Where to store xlated char in line */ char quote; /* Quote character in use */ fieldp->nfields = 0; fieldmax = (maxf != 0 && maxf < field_field_inc) ? maxf + 2 : field_field_inc; fieldp->fields = (char **) malloc (fieldmax * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } if ((flags & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES)) == FLD_SHQUOTES) flags |= FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES; while (1) { if (flags & FLD_RUNS) { while (*line != '\0' && strchr (delims, *line) != NULL) line++; /* Skip runs of delimiters */ if (*line == '\0') break; } fieldp->fields[fieldp->nfields] = lineout = line; /* * Skip to the next delimiter. At the end of skipping, "line" will * point to either a delimiter or a null byte. */ if (flags & (FLD_SHQUOTES | FLD_SNGLQUOTES | FLD_BACKQUOTES | FLD_DBLQUOTES | FLD_BACKSLASH)) { while (*line != '\0') { if (strchr (delims, *line) != NULL) break; else if (((flags & FLD_SNGLQUOTES) && *line == '\'') || ((flags & FLD_BACKQUOTES) && *line == '`') || ((flags & FLD_DBLQUOTES) && *line == '"')) { if ((flags & FLD_SHQUOTES) == 0 && line != fieldp->fields[fieldp->nfields]) quote = '\0'; else quote = *line; } else quote = '\0'; if (quote == '\0') { if (*line == '\\' && (flags & FLD_BACKSLASH)) { line++; if (*line == '\0') break; line += fieldbackch (line, &lineout, flags & FLD_STRIPQUOTES); } else *lineout++ = *line++; } else { /* Process quoted string */ if ((flags & FLD_STRIPQUOTES) == 0) *lineout++ = quote; ++line; while (*line != '\0') { if (*line == quote) { if ((flags & FLD_STRIPQUOTES) == 0) *lineout++ = quote; line++; /* Go on past quote */ if ((flags & FLD_SHQUOTES) == 0) { while (*line != '\0' && strchr (delims, *line) == NULL) line++; /* Skip to delimiter */ } break; } else if (*line == '\\') { if (flags & FLD_BACKSLASH) { line++; if (*line == '\0') break; else line += fieldbackch (line, &lineout, flags & FLD_STRIPQUOTES); } else { *lineout++ = '\\'; if (*++line == '\0') break; *lineout++ = *line; } } else *lineout++ = *line++; } } } } else { while (*line != '\0' && strchr (delims, *line) == NULL) line++; /* Skip to delimiter */ lineout = line; } fieldp->nfields++; if (*line++ == '\0') break; if (maxf != 0 && fieldp->nfields > maxf) break; *lineout = '\0'; if (fieldp->nfields >= fieldmax) { fieldmax += field_field_inc; fieldp->fields = (char **) realloc (fieldp->fields, fieldmax * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } } } /* * Shrink the field pointers and return the field structure. */ if ((flags & FLD_NOSHRINK) == 0 && fieldp->nfields >= fieldmax) { fieldp->fields = (char **) realloc (fieldp->fields, (fieldp->nfields + 1) * sizeof (char *)); if (fieldp->fields == NULL) { fieldfree (fieldp); return NULL; } } fieldp->fields[fieldp->nfields] = NULL; return fieldp; } static int fieldbackch (str, out, strip) register char * str; /* First char of backslash sequence */ register char ** out; /* Where to store result */ int strip; /* NZ to convert the sequence */ { register int ch; /* Character being developed */ char * origstr; /* Original value of str */ if (!strip) { *(*out)++ = '\\'; if (*str != 'x' && *str != 'X' && (*str < '0' || *str > '7')) { *(*out)++ = *str; return *str != '\0'; } } switch (*str) { case '\0': *(*out)++ = '\0'; return 0; case 'a': *(*out)++ = '\007'; return 1; case 'b': *(*out)++ = '\b'; return 1; case 'f': *(*out)++ = '\f'; return 1; case 'n': *(*out)++ = '\n'; return 1; case 'r': *(*out)++ = '\r'; return 1; case 'v': *(*out)++ = '\v'; return 1; case 'X': case 'x': /* Hexadecimal sequence */ origstr = str++; ch = 0; if (*str >= '0' && *str <= '9') ch = *str++ - '0'; else if (*str >= 'a' && *str <= 'f') ch = *str++ - 'a' + 0xa; else if (*str >= 'A' && *str <= 'F') ch = *str++ - 'A' + 0xa; if (*str >= '0' && *str <= '9') ch = (ch << 4) | (*str++ - '0'); else if (*str >= 'a' && *str <= 'f') ch = (ch << 4) | (*str++ - 'a' + 0xa); else if (*str >= 'A' && *str <= 'F') ch = (ch << 4) | (*str++ - 'A' + 0xa); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': /* Octal sequence */ origstr = str; ch = *str++ - '0'; if (*str >= '0' && *str <= '7') ch = (ch << 3) | (*str++ - '0'); if (*str >= '0' && *str <= '7') ch = (ch << 3) | (*str++ - '0'); break; default: *(*out)++ = *str; return 1; } if (strip) { *(*out)++ = ch; return str - origstr; } else { for (ch = 0; origstr < str; ch++) *(*out)++ = *origstr++; return ch; } } int fieldwrite (file, fieldp, delim) FILE * file; /* File to write to */ register field_t * fieldp; /* Field structure to write */ int delim; /* Delimiter to place between fields */ { int error; /* NZ if an error occurs */ register unsigned int fieldno; /* Number of field being written */ error = 0; for (fieldno = 0; fieldno < fieldp->nfields; fieldno++) { if (fieldno != 0) error |= putc (delim, file) == EOF; error |= fputs (fieldp->fields[fieldno], file) == EOF; } if (fieldp->hadnl) error |= putc ('\n', file) == EOF; return error; } void fieldfree (fieldp) register field_t * fieldp; /* Field structure to free */ { if (fieldp == NULL) return; if (fieldp->linebuf != NULL) free ((char *) fieldp->linebuf); if (fieldp->fields != NULL) free ((char *) fieldp->fields); free ((char *) fieldp); } ispell-3.4.00/PaxHeaders.19408/local.h.bsd0000644000000000000000000000007410233555061014647 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/local.h.bsd0000444003214100001440000000673510233555061015722 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.bsd,v 1.1 2005/04/27 00:17:46 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define GENERATE_LIBRARY_PROTOS #define EGREPCMD "egrep -i" #define HAS_RENAME /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" #define MAN45EXT ".5" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/ispell.c0000644000000000000000000000007410245104041014260 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/ispell.c0000444003214100001440000012503210245104041015323 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: ispell.c,v 1.161 2005/05/25 14:13:53 geoff Exp $"; #endif #define MAIN /* * ispell.c - An interactive spelling corrector. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: ispell.c,v $ * Revision 1.161 2005/05/25 14:13:53 geoff * Report the value of EXEEXT in "ispell -vv". * * Revision 1.160 2005/04/28 14:46:51 geoff * Open a correction log file in command mode. * * Revision 1.159 2005/04/28 00:26:06 geoff * Don't print the count-file suffix, since it's no longer used. * * Revision 1.158 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.157 2005/04/14 23:11:36 geoff * Move initckch to makedent.c. * * Revision 1.156 2005/04/14 21:25:52 geoff * Make DICTIONARYVAR configurable, add CHARSETVAR, and add both to ispell -vv. * * Revision 1.155 2005/04/14 15:19:37 geoff * Make sure all current config.X variables are represented in ispell -vv * (with the exception of a couple that are function macros), and clean * up the sorting of the printout. * * Revision 1.154 2005/04/14 14:38:23 geoff * Update license. Incorporate Ed Avis's changes. Add new config.X * variables to -vv output. For backwards compatibility, always put * !NO8BIT in config.X output. Add the -o switch. Add -e5. Be * intelligent about inferring the output file mode if there is an * external deformatter. * * Revision 1.153 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.152 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.151 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.150 2001/07/19 07:01:46 geoff * Fix a bug that effectively disabled the -w switch. * * Revision 1.149 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bzero to avoid compilation problems on * smarter compilers. * * Revision 1.148 2001/05/30 21:14:47 geoff * Invert the fcntl/mkstemp options so they will default to being used. * * Revision 1.147 2001/05/30 21:04:25 geoff * Add fcntl.h support (needed for the previous change), security * commentary, and mkstemp support. * * Revision 1.146 2001/05/30 09:38:26 geoff * Werner Fink's patch to get rid of a temp-file race condition. * * Revision 1.145 2001/05/07 04:47:18 geoff * Flush stdout after expansion, for use in pipes (Ed Avis) * * Revision 1.144 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.143 1999/01/13 01:34:21 geoff * Get rid of some obsolete variables in the -vv switch. * * Revision 1.142 1999/01/08 05:45:03 geoff * Allow shtml files to force HTML mode. * * Revision 1.141 1999/01/07 01:22:47 geoff * Update the copyright. * * Revision 1.140 1999/01/03 01:46:35 geoff * Add support for external deformatters. * * Revision 1.139 1998/07/12 20:42:18 geoff * Change the -i switch to -k, and make it take the name of a keyword * table. * * Revision 1.138 1998/07/06 06:55:16 geoff * Use the new general-keyword-lookup support to initialize HTML and TEX * tags from environment variables or defaults. * * Revision 1.137 1997/12/02 06:24:48 geoff * Get rid of some compile options that really shouldn't be optional. * Add HTML support ('i' switch). * * Revision 1.136 1995/11/08 05:09:14 geoff * Set "aflag" and "askverbose" (new interactive mode) if invoked without * filenames or mode arguments. * * Revision 1.135 1995/11/08 04:27:59 geoff * Improve the HTML support to interoperate better with nroff/troff, clean * it up, and use '-H' for the switch. * * Revision 1.134 1995/10/25 04:05:23 geoff * Modifications made by Gerry Tierney to allow * checking of html code. Adds -h switch and checking for html files by * .html or .htm extension. 14th of October 1995. * * Revision 1.133 1995/10/11 04:30:29 geoff * Get rid of an unused variable. * * Revision 1.132 1995/08/05 23:19:36 geoff * If the DICTIONARY environment variable is set, derive the default * personal-dictionary name from it. * * Revision 1.131 1995/01/08 23:23:39 geoff * Support variable hashfile suffixes for DOS purposes. Report all the * new configuration variables in the -vv switch. Do some better error * checking for mktemp failures. Support the rename system call. All of * this is to help make DOS porting easier. * * Revision 1.130 1995/01/03 19:24:08 geoff * When constructing a personal-dictioary name from the hash file name, * don't stupidly include path directory components. * * Revision 1.129 1995/01/03 02:23:19 geoff * Disable the setbuf call on BSDI systems, sigh. * * Revision 1.128 1994/10/26 05:12:28 geoff * Include boundary characters in the list of characters to be tried in * corrections. * * Revision 1.127 1994/10/25 05:46:07 geoff * Allow the default dictionary to be specified by an environment * variable (DICTIONARY) as well as a switch. * * Revision 1.126 1994/09/16 03:32:34 geoff * Issue an error message for bad affix flags * * Revision 1.125 1994/07/28 05:11:36 geoff * Log message for previous revision: fix backup-file checks to correctly * test for exceeding MAXNAMLEN. * * Revision 1.124 1994/07/28 04:53:39 geoff * * Revision 1.123 1994/05/17 06:44:12 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.122 1994/04/27 01:50:37 geoff * Print MAX_CAPS in -vv mode. * * Revision 1.121 1994/03/16 03:49:10 geoff * Fix -vv to display the value of NO_STDLIB_H. * * Revision 1.120 1994/03/15 06:24:28 geoff * Allow the -t, -n, and -T switches to override each other, as follows: * if no switches are given, the deformatter and string characters are * chosen based on the file suffix. If only -t/-n are given, the * deformatter is forced but string characters come from the file suffix. * If only -T is given, the deformatter is chosen based on the value * given in the -T switch. Finally, if both -T and -t/-n are given, * string characters are controlled by -T and the deformatter by -t/-n. * * Revision 1.119 1994/03/15 05:58:07 geoff * Get rid of a gcc warning * * Revision 1.118 1994/03/15 05:30:37 geoff * Get rid of an unused-variable complaint by proper ifdeffing * * Revision 1.117 1994/03/12 21:26:48 geoff * Correctly limit maximum name lengths for files that have directory paths * included. Also don't use a wired-in 256 for the size of the backup file * name. * * Revision 1.116 1994/02/07 08:10:44 geoff * Print GENERATE_LIBRARY_PROTOS in the -vv switch. * * Revision 1.115 1994/01/26 07:44:47 geoff * Make yacc configurable through local.h. * * Revision 1.114 1994/01/25 07:11:44 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "fields.h" #include "proto.h" #include "msgs.h" #include "version.h" #include #ifndef NO_FCNTL_H #include #endif /* NO_FCNTL_H */ #include static void usage P ((void)); int main P ((int argc, char * argv[])); static void dofile P ((char * filename)); static FILE * setupdefmt P ((char * filename, struct stat * statbuf)); static void update_file P ((char * filename, struct stat * statbuf)); static void expandmode P ((int printorig)); char * last_slash P ((char * file)); static char * Cmd; static char * LibDict = NULL; /* Pointer to name of $(LIBDIR)/dict */ static void usage () { (void) fprintf (stderr, ISPELL_C_USAGE1, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE2, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE3, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE4, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE5, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE6, Cmd); (void) fprintf (stderr, ISPELL_C_USAGE7, Cmd); givehelp (0); exit (1); } int main (argc, argv) int argc; char * argv[]; { char * p; char libdir[MAXPATHLEN]; char * cpd; field_t * extra_args; /* Extra arguments from OPTIONVAR */ char ** versionp; char * wchars = NULL; char * preftype = NULL; static char libdictname[sizeof DEFHASH]; char logfilename[MAXPATHLEN]; static char outbuf[BUFSIZ]; int argno; int arglen; Cmd = *argv; Trynum = 0; p = getenv (LIBRARYVAR); if (p == NULL) (void) strcpy (libdir, LIBDIR); else { (void) strncpy (libdir, p, sizeof libdir); libdir[sizeof libdir - 1] = '\0'; } p = getenv (DICTIONARYVAR); if (p != NULL) { if (last_slash (p) != NULL) (void) strcpy (hashname, p); else (void) sprintf (hashname, "%s/%s", libdir, p); (void) strcpy (libdictname, p); p = rindex (p, '.'); if (p == NULL || strcmp (p, HASHSUFFIX) != 0) (void) strcat (hashname, HASHSUFFIX); LibDict = last_slash (libdictname); if (LibDict != NULL) LibDict++; else LibDict = libdictname; p = rindex (LibDict, '.'); if (p != NULL) *p = '\0'; } else (void) sprintf (hashname, "%s/%s", libdir, DEFHASH); cpd = NULL; /* ** If any options were given in OPTIONVAR, prepend them to the ** command-line arguments. We prepend so that the command-line ** arguments can override those from the environment. */ p = getenv (OPTIONVAR); if (p != NULL) { char ** newargv; extra_args = fieldmake (p, 0, " \t", FLD_RUNS | FLD_SNGLQUOTES | FLD_DBLQUOTES | FLD_SHQUOTES | FLD_STRIPQUOTES | FLD_BACKSLASH, 0); if (extra_args == NULL) { (void) fprintf (stderr, ISPELL_C_NO_OPTIONS_SPACE); return 1; } else { newargv = (char **) calloc (argc + extra_args->nfields, sizeof (char *)); if (newargv == NULL) { (void) fprintf (stderr, ISPELL_C_NO_OPTIONS_SPACE); return 1; } /* Copy arguments over */ newargv[0] = argv[0]; for (argno = 0; argno < (int) extra_args->nfields; argno++) newargv[argno + 1] = extra_args->fields[argno]; for (argc += extra_args->nfields, argno++; argno < argc; argno++) newargv[argno] = argv[argno - extra_args->nfields]; } argv = newargv; } argv++; argc--; while (argc && **argv == '-') { /* * Trying to add a new flag? Can't remember what's been used? * Here's a handy guide: * * Used: * * ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 * ^^^^ ^ ^ ^^^ ^ ^^ ^^ * abcdefghijklmnopqrstuvwxyz * ^^^^^^ ^ ^^^ ^ ^^^ ^^^ */ arglen = strlen (*argv); switch ((*argv)[1]) { case 'v': if (arglen > 3) usage (); for (versionp = Version_ID; *versionp; ) { p = *versionp++; if (strncmp (p, "(#) ", 5) == 0) p += 5; (void) printf ("%s\n", p); } if ((*argv)[2] == 'v') { (void) printf (ISPELL_C_OPTIONS_ARE); /* * We print USG first because it's mis-set so often. * All others are in alphabetical order. */ #ifdef USG (void) printf ("\tUSG\n"); #else /* USG */ (void) printf ("\t!USG (BSD)\n"); #endif /* USG */ (void) printf ("\tBAKEXT = \"%s\"\n", BAKEXT); (void) printf ("\tBINDIR = \"%s\"\n", BINDIR); #ifdef BOTTOMCONTEXT (void) printf ("\tBOTTOMCONTEXT\n"); #else /* BOTTOMCONTEXT */ (void) printf ("\t!BOTTOMCONTEXT\n"); #endif /* BOTTOMCONTEXT */ (void) printf ("\tCC = \"%s\"\n", CC); (void) printf ("\tCFLAGS = \"%s\"\n", CFLAGS); (void) printf ("\tCHARSETVAR = \"%s\"\n", CHARSETVAR); #ifdef COMMANDFORSPACE (void) printf ("\tCOMMANDFORSPACE\n"); #else /* COMMANDFORSPACE */ (void) printf ("\t!COMMANDFORSPACE\n"); #endif /* COMMANDFORSPACE */ (void) printf ("\tCONTEXTPCT = %d\n", CONTEXTPCT); #ifdef CONTEXTROUNDUP (void) printf ("\tCONTEXTROUNDUP\n"); #else /* CONTEXTROUNDUP */ (void) printf ("\t!CONTEXTROUNDUP\n"); #endif /* CONTEXTROUNDUP */ (void) printf ("\tDEFAULT_FILE_MODE = 0%3.3o\n", DEFAULT_FILE_MODE); (void) printf ("\tDEFHASH = \"%s\"\n", DEFHASH); (void) printf ("\tDEFINCSTR = \"%s\"\n", DEFINCSTR); (void) printf ("\tDEFLANG = \"%s\"\n", DEFLANG); (void) printf ("\tDEFNOBACKUPFLAG = %d\n", DEFNOBACKUPFLAG); (void) printf ("\tDEFPAFF = \"%s\"\n", DEFPAFF); (void) printf ("\tDEFPDICT = \"%s\"\n", DEFPDICT); (void) printf ("\tDEFTEXFLAG = %d\n", DEFTEXFLAG); (void) printf ("\tDICTIONARYVAR = \"%s\"\n", DICTIONARYVAR); (void) printf ("\tEGREPCMD = \"%s\"\n", EGREPCMD); #ifdef EQUAL_COLUMNS (void) printf ("\tEQUAL_COLUMNS\n"); #else /* EQUAL_COLUMNS */ (void) printf ("\t!EQUAL_COLUMNS\n"); #endif /* EQUAL_COLUMNS */ (void) printf ("\tEXEEXT = \"%s\"\n", EXEEXT); #ifdef GENERATE_LIBRARY_PROTOS (void) printf ("\tGENERATE_LIBRARY_PROTOS\n"); #else /* GENERATE_LIBRARY_PROTOS */ (void) printf ("\t!GENERATE_LIBRARY_PROTOS\n"); #endif /* GENERATE_LIBRARY_PROTOS */ (void) printf ("\tHASHSUFFIX = \"%s\"\n", HASHSUFFIX); #ifdef HAS_RENAME (void) printf ("\tHAS_RENAME\n"); #else /* HAS_RENAME */ (void) printf ("\t!HAS_RENAME\n"); #endif /* HAS_RENAME */ (void) printf ("\tHOME = \"%s\"\n", HOME); (void) printf ("\tHTMLCHECK = \"%s\"\n", HTMLCHECK); (void) printf ("\tHTMLCHECKVAR = \"%s\"\n", HTMLCHECKVAR); (void) printf ("\tHTMLIGNORE = \"%s\"\n", HTMLIGNORE); (void) printf ("\tHTMLIGNOREVAR = \"%s\"\n", HTMLIGNOREVAR); #ifdef IGNOREBIB (void) printf ("\tIGNOREBIB\n"); #else /* IGNOREBIB */ (void) printf ("\t!IGNOREBIB\n"); #endif /* IGNOREBIB */ (void) printf ("\tINCSTRVAR = \"%s\"\n", INCSTRVAR); (void) printf ("\tINPUTWORDLEN = %d\n", INPUTWORDLEN); (void) printf ("\tINSTALL = \"%s\"\n", INSTALL); (void) printf ("\tLANGUAGES = \"%s\"\n", LANGUAGES); (void) printf ("\tLIBDIR = \"%s\"\n", LIBDIR); (void) printf ("\tLIBES = \"%s\"\n", LIBES); (void) printf ("\tLIBRARYVAR = \"%s\"\n", LIBRARYVAR); (void) printf ("\tLINK = \"%s\"\n", LINK); (void) printf ("\tLINT = \"%s\"\n", LINT); (void) printf ("\tLINTFLAGS = \"%s\"\n", LINTFLAGS); #ifndef REGEX_LOOKUP (void) printf ("\tLOOK = \"%s\"\n", LOOK); #endif /* REGEX_LOOKUP */ (void) printf ("\tLOOK_XREF = \"%s\"\n", LOOK_XREF); (void) printf ("\tMAKE_SORTTMP = \"%s\"\n", MAKE_SORTTMP); (void) printf ("\tMALLOC_INCREMENT = %d\n", MALLOC_INCREMENT); (void) printf ("\tMAN1DIR = \"%s\"\n", MAN1DIR); (void) printf ("\tMAN1EXT = \"%s\"\n", MAN1EXT); (void) printf ("\tMAN45DIR = \"%s\"\n", MAN45DIR); (void) printf ("\tMAN45EXT = \"%s\"\n", MAN45EXT); (void) printf ("\tMAN45SECT = \"%s\"\n", MAN45SECT); (void) printf ("\tMASKBITS = %d\n", MASKBITS); (void) printf ("\tMASKTYPE = \"%s\"\n", MASKTYPE_STRING); (void) printf ("\tMASKTYPE_WIDTH = %d\n", MASKTYPE_WIDTH); (void) printf ("\tMASTERHASH = \"%s\"\n", MASTERHASH); (void) printf ("\tMAXAFFIXLEN = %d\n", MAXAFFIXLEN); #ifdef MAXBASENAMELEN (void) printf ("\tMAXBASENAMELEN = %d\n", MAXBASENAMELEN); #endif (void) printf ("\tMAXCONTEXT = %d\n", MAXCONTEXT); #ifdef MAXEXTLEN (void) printf ("\tMAXEXTLEN = %d\n", MAXEXTLEN); #endif (void) printf ("\tMAXINCLUDEFILES = %d\n", MAXINCLUDEFILES); (void) printf ("\tMAXNAMLEN = %d\n", MAXNAMLEN); (void) printf ("\tMAXPATHLEN = %d\n", MAXPATHLEN); (void) printf ("\tMAXPCT = %d\n", MAXPCT); (void) printf ("\tMAXSEARCH = %d\n", MAXSEARCH); (void) printf ("\tMAXSTRINGCHARLEN = %d\n", MAXSTRINGCHARLEN); (void) printf ("\tMAXSTRINGCHARS = %d\n", MAXSTRINGCHARS); (void) printf ("\tMAX_CAPS = %d\n", MAX_CAPS); (void) printf ("\tMAX_HITS = %d\n", MAX_HITS); (void) printf ("\tMAX_SCREEN_SIZE = %d\n", MAX_SCREEN_SIZE); (void) printf ("\tMINCONTEXT = %d\n", MINCONTEXT); #ifdef MINIMENU (void) printf ("\tMINIMENU\n"); #else /* MINIMENU */ (void) printf ("\t!MINIMENU\n"); #endif /* MINIMENU */ (void) printf ("\tMINWORD = %d\n", MINWORD); #ifdef MSDOS (void) printf ("\tMSDOS\n"); #else /* MSDOS */ (void) printf ("\t!MSDOS\n"); #endif /* MSDSO */ (void) printf ("\tMSDOS_BINARY_OPEN = 0x%x\n", (unsigned int) MSDOS_BINARY_OPEN); (void) printf ("\tMSGLANG = \"%s\"\n", MSGLANG); /* * NO8BIT is an obsolete option, but some people depend * on it being in the ispell -vv output. */ (void) printf ("\t!NO8BIT (8BIT)\n"); #ifdef NO_FCNTL_H (void) printf ("\tNO_FCNTL_H\n"); #else /* NO_FCNTL_H */ (void) printf ("\t!NO_FCNTL_H (FCNTL_H)\n"); #endif /* NO_FCNTL_H */ #ifdef NO_MKSTEMP (void) printf ("\tNO_MKSTEMP\n"); #else /* NO_MKSTEMP */ (void) printf ("\t!NO_MKSTEMP (MKSTEMP)\n"); #endif /* NO_STDLIB_H */ #ifdef NO_STDLIB_H (void) printf ("\tNO_STDLIB_H\n"); #else /* NO_STDLIB_H */ (void) printf ("\t!NO_STDLIB_H (STDLIB_H)\n"); #endif /* NO_STDLIB_H */ (void) printf ("\tNRSPECIAL = \"%s\"\n", NRSPECIAL); (void) printf ("\tOLDPAFF = \"%s\"\n", OLDPAFF); (void) printf ("\tOLDPDICT = \"%s\"\n", OLDPDICT); (void) printf ("\tOPTIONVAR = \"%s\"\n", OPTIONVAR); #ifdef PDICTHOME (void) printf ("\tPDICTHOME = \"%s\"\n", PDICTHOME); #else /* PDICTHOME */ (void) printf ("\tPDICTHOME = (undefined)\n"); #endif /* PDICTHOME */ (void) printf ("\tPDICTVAR = \"%s\"\n", PDICTVAR); #ifdef PIECEMEAL_HASH_WRITES (void) printf ("\tPIECEMEAL_HASH_WRITES\n"); #else /* PIECEMEAL_HASH_WRITES */ (void) printf ("\t!PIECEMEAL_HASH_WRITES\n"); #endif /* PIECEMEAL_HASH_WRITES */ (void) printf ("\tPOUNDBANG = \"%s\"\n", POUNDBANG); #ifdef REGEX_LOOKUP (void) printf ("\tREGEX_LOOKUP\n"); #else /* REGEX_LOOKUP */ (void) printf ("\t!REGEX_LOOKUP\n"); #endif /* REGEX_LOOKUP */ (void) printf ("\tREGLIB = \"%s\"\n", REGLIB); (void) printf ("\tR_OK = %d\n", R_OK); (void) printf ("\tSIGNAL_TYPE = \"%s\"\n", SIGNAL_TYPE_STRING); (void) printf ("\tSORTPERSONAL = %d\n", SORTPERSONAL); (void) printf ("\tSORTTMP = \"%s\"\n", SORTTMP); (void) printf ("\tSPELL_XREF = \"%s\"\n", SPELL_XREF); (void) printf ("\tSTATSUFFIX = \"%s\"\n", STATSUFFIX); (void) printf ("\tTEMPNAME = \"%s\"\n", TEMPNAME); (void) printf ("\tTERMLIB = \"%s\"\n", TERMLIB); #if TERM_MODE == CBREAK (void) printf ("\tTERM_MODE = CBREAK\n"); #else /* TERM_MODE */ (void) printf ("\tTERM_MODE = RAW\n"); #endif /* TERM_MODE */ (void) printf ("\tTEXSKIP1 = \"%s\"\n", TEXSKIP1); (void) printf ("\tTEXSKIP1VAR = \"%s\"\n", TEXSKIP1VAR); (void) printf ("\tTEXSKIP2 = \"%s\"\n", TEXSKIP2); (void) printf ("\tTEXSKIP2VAR = \"%s\"\n", TEXSKIP2VAR); (void) printf ("\tTEXSPECIAL = \"%s\"\n", TEXSPECIAL); (void) printf ("\tTIB_XREF = \"%s\"\n", TIB_XREF); #ifdef TRUNCATEBAK (void) printf ("\tTRUNCATEBAK\n"); #else /* TRUNCATEBAK */ (void) printf ("\t!TRUNCATEBAK\n"); #endif /* TRUNCATEBAK */ #ifdef USESH (void) printf ("\tUSESH\n"); #else /* USESH */ (void) printf ("\t!USESH\n"); #endif /* USESH */ (void) printf ("\tWORDS = \"%s\"\n", WORDS); (void) printf ("\tW_OK = %d\n", W_OK); (void) printf ("\tYACC = \"%s\"\n", YACC); } exit (0); break; case 'n': if (arglen > 2) usage (); tflag = DEFORMAT_NROFF; /* nroff/troff mode */ deftflag = DEFORMAT_NROFF; if (preftype == NULL) preftype = "nroff"; break; case 't': /* TeX mode */ if (arglen > 2) usage (); tflag = DEFORMAT_TEX; deftflag = DEFORMAT_TEX; if (preftype == NULL) preftype = "tex"; break; case 'H': /* HTML mode */ if (arglen > 2) usage (); tflag = DEFORMAT_SGML; /* non-TeX mode */ deftflag = DEFORMAT_SGML; if (preftype == NULL) preftype = "sgml"; break; case 'o': /* Ordinary text mode */ if (arglen > 2) usage (); tflag = DEFORMAT_NONE; deftflag = DEFORMAT_NONE; if (preftype == NULL) preftype = "plain"; break; case 'k': /* Set keyword tables */ p = (*argv) + 2; argv++; argc--; if (argc == 0) usage (); if (strcmp (p, "texskip1") == 0) { if (init_keyword_table (*argv, TEXSKIP1VAR, TEXSKIP1, 0, &texskip1list)) usage (); } else if (strcmp (p, "texskip2") == 0) { if (init_keyword_table (*argv, TEXSKIP2VAR, TEXSKIP2, 0, &texskip2list)) usage (); } else if (strcmp (p, "htmlignore") == 0) { if (init_keyword_table (*argv, HTMLIGNOREVAR, HTMLIGNORE, 1, &htmlignorelist)) usage (); } else if (strcmp (p, "htmlcheck") == 0) { if (init_keyword_table (*argv, HTMLCHECKVAR, HTMLCHECK, 1, &htmlchecklist)) usage (); } break; case 'T': /* Set preferred file type */ p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } preftype = p; break; case 'F': /* Set external deformatting program */ p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } defmtpgm = p; tflag = DEFORMAT_NONE; deftflag = DEFORMAT_NONE; if (preftype == NULL) preftype = "plain"; break; case 'A': if (arglen > 2) usage (); incfileflag = 1; aflag = 1; break; case 'a': if (arglen > 2) usage (); aflag++; break; case 'D': if (arglen > 2) usage (); dumpflag++; nodictflag++; break; case 'e': if (arglen > 3) usage (); eflag = 1; if ((*argv)[2] == 'e') eflag = 2; else if ((*argv)[2] >= '1' && (*argv)[2] <= '5') eflag = (*argv)[2] - '0'; else if ((*argv)[2] != '\0') usage (); nodictflag++; break; case 'c': if (arglen > 2) usage (); cflag++; lflag++; nodictflag++; break; case 'b': if (arglen > 2) usage (); xflag = 0; /* Keep a backup file */ break; case 'x': if (arglen > 2) usage (); xflag = 1; /* Don't keep a backup file */ break; case 'f': fflag++; p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } askfilename = p; if (*askfilename == '\0') askfilename = NULL; break; case 'L': p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } contextsize = atoi (p); break; case 'l': if (arglen > 2) usage (); lflag++; break; #ifndef USG case 's': if (arglen > 2) usage (); sflag++; break; #endif case 'S': if (arglen > 2) usage (); sortit = 0; break; case 'B': /* -B: report missing blanks */ if (arglen > 2) usage (); compoundflag = COMPOUND_NEVER; break; case 'C': /* -C: compound words are acceptable */ if (arglen > 2) usage (); compoundflag = COMPOUND_ANYTIME; break; case 'P': /* -P: don't gen non-dict poss's */ if (arglen > 2) usage (); tryhardflag = 0; break; case 'm': /* -m: make all poss affix combos */ if (arglen > 2) usage (); tryhardflag = 1; break; case 'N': /* -N: suppress minimenu */ if (arglen > 2) usage (); minimenusize = 0; break; case 'M': /* -M: force minimenu */ if (arglen > 2) usage (); minimenusize = 2; break; case 'p': cpd = (*argv) + 2; if (*cpd == '\0') { argv++; argc--; if (argc == 0) usage (); cpd = *argv; if (*cpd == '\0') cpd = NULL; } LibDict = NULL; break; case 'd': p = (*argv) + 2; if (*p == '\0') { argv++; argc--; if (argc == 0) usage (); p = *argv; } if (last_slash (p) != NULL) (void) strcpy (hashname, p); else (void) sprintf (hashname, "%s/%s", libdir, p); if (cpd == NULL && *p != '\0') LibDict = p; p = rindex (p, '.'); if (p != NULL && strcmp (p, HASHSUFFIX) == 0) *p = '\0'; /* Don't want ext. in LibDict */ else (void) strcat (hashname, HASHSUFFIX); if (LibDict != NULL) { p = last_slash (LibDict); if (p != NULL) LibDict = p + 1; } break; case 'V': /* Display 8-bit characters as M-xxx */ if (arglen > 2) usage (); vflag = 1; break; case 'w': wchars = (*argv) + 2; if (*wchars == '\0') { argv++; argc--; if (argc == 0) usage (); wchars = *argv; } break; case 'W': if ((*argv)[2] == '\0') { argv++; argc--; if (argc == 0) usage (); minword = atoi (*argv); } else minword = atoi (*argv + 2); break; default: usage (); } argv++; argc--; } if (!argc && !lflag && !aflag && !eflag && !dumpflag) { if (argc != 0) usage (); else { aflag = 1; askverbose = 1; } } /* * Because of the high cost of reading the dictionary, we stat * the files specified first to see if they exist. If at least * one exists, we continue. */ for (argno = 0; argno < argc; argno++) { if (access (argv[argno], R_OK) >= 0) break; } if (argno >= argc && !lflag && !aflag && !eflag && !dumpflag) { (void) fprintf (stderr, argc == 1 ? ISPELL_C_NO_FILE : ISPELL_C_NO_FILES); exit (1); } if (linit () < 0) exit (1); if (preftype == NULL) preftype = getenv (CHARSETVAR); if (preftype != NULL) { prefstringchar = findfiletype (preftype, 1, deftflag < 0 ? &deftflag : (int *) NULL); if (prefstringchar < 0 && strcmp (preftype, "plain") != 0 && strcmp (preftype, "tex") != 0 && strcmp (preftype, "nroff") != 0 && strcmp (preftype, "sgml") != 0) { (void) fprintf (stderr, ISPELL_C_BAD_TYPE, preftype); exit (1); } } if (prefstringchar < 0) defstringgroup = 0; else defstringgroup = prefstringchar; if (compoundflag < 0) compoundflag = hashheader.compoundflag; if (tryhardflag < 0) tryhardflag = hashheader.defhardflag; /* * Set up the various tables of keywords to be treated specially. * * TeX/LaTeX mode: */ (void) init_keyword_table (NULL, TEXSKIP1VAR, TEXSKIP1, 0, &texskip1list); (void) init_keyword_table (NULL, TEXSKIP2VAR, TEXSKIP2, 0, &texskip2list); /* * HTML mode: */ (void) init_keyword_table (NULL, HTMLIGNOREVAR, HTMLIGNORE, 1, &htmlignorelist); (void) init_keyword_table (NULL, HTMLCHECKVAR, HTMLCHECK, 1, &htmlchecklist); initckch(wchars); if (LibDict == NULL) { (void) strcpy (libdictname, DEFHASH); LibDict = libdictname; p = rindex (libdictname, '.'); if (p != NULL && strcmp (p, HASHSUFFIX) == 0) *p = '\0'; /* Don't want ext. in LibDict */ } if (!nodictflag) treeinit (cpd, LibDict); if (aflag) { askmode (); treeoutput (); exit (0); } else if (eflag) { expandmode (eflag); exit (0); } else if (dumpflag) { dumpmode (); exit (0); } #ifndef __bsdi__ setbuf (stdout, outbuf); #endif /* __bsdi__ */ if (lflag) { infile = setupdefmt(NULL, NULL); outfile = stdout; checkfile (); exit (0); } /* * If there is a log directory, open a log file. If the open * fails, we just won't log. */ (void) sprintf (logfilename, "%s/%s/%s", getenv ("HOME") == NULL ? "" : getenv ("HOME"), DEFLOGDIR, LibDict); logfile = fopen (logfilename, "a"); terminit (); while (argc--) dofile (*argv++); done (0); /* NOTREACHED */ return 0; } static void dofile (filename) char * filename; { struct stat statbuf; char * cp; int outfd; /* Used in opening temp file */ /* ..might produce not-used warnings */ currentfile = filename; /* Guess a deformatter based on the file extension */ tflag = deftflag; if (tflag < 0) { tflag = DEFORMAT_NONE; /* Default to none */ cp = rindex (filename, '.'); if (cp != NULL) { if (strcmp (cp, ".ms") == 0 || strcmp (cp, ".mm") == 0 || strcmp (cp, ".me") == 0 || strcmp (cp, ".man") == 0 || isdigit(*cp)) tflag = DEFORMAT_NROFF; else if (strcmp (cp, ".tex") == 0) tflag = DEFORMAT_TEX; else if (strcmp (cp, ".html") == 0 || strcmp (cp, ".htm") == 0 || strcmp (cp, ".shtml") == 0) tflag = DEFORMAT_SGML; } } if (prefstringchar < 0) { defstringgroup = findfiletype (filename, 0, deftflag < 0 ? &tflag : (int *) NULL); if (defstringgroup < 0) defstringgroup = 0; } if ((infile = setupdefmt (filename, &statbuf)) == NULL) { (void) fprintf (stderr, CANT_OPEN, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } readonly = access (filename, W_OK) < 0; if (readonly) { (void) fprintf (stderr, ISPELL_C_CANT_WRITE, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); } /* * Security notes: TEMPNAME must be less than MAXPATHLEN - 1. If * the system has O_EXCL but not mkstemp, the temporary file will * be opened securely as in the manner of mkstemp (which * unfortunately isn't available anywhere). In other words, don't * worry about the security of this hunk of code. */ if (last_slash (TEMPNAME) != NULL) (void) strcpy (tempfile, TEMPNAME); else { char *tmp = getenv ("TMPDIR"); int lastchar; if (tmp == NULL) tmp = getenv ("TEMP"); if (tmp == NULL) tmp = getenv ("TMP"); if (tmp == NULL) #ifdef P_tmpdir tmp = P_tmpdir; #else tmp = "/tmp"; #endif lastchar = tmp[strlen (tmp) - 1]; (void) sprintf (tempfile, "%s%s%s", tmp, IS_SLASH (lastchar) ? "" : "/", TEMPNAME); } #ifdef NO_MKSTEMP if (mktemp (tempfile) == NULL || tempfile[0] == '\0' #ifdef O_EXCL || (outfd = open (tempfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) < 0 || (outfile = fdopen (outfd, "w")) == NULL) #else /* O_EXCL */ || (outfile = fopen (tempfile, "w")) == NULL) #endif /* O_EXCL */ #else /* NO_MKSTEMP */ if ((outfd = mkstemp (tempfile)) < 0 || (outfile = fdopen (outfd, "w")) == NULL) #endif /* NO_MKSTEMP */ { (void) fprintf (stderr, CANT_CREATE, (tempfile == NULL || tempfile[0] == '\0') ? "temporary file" : tempfile, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifndef MSDOS /* ** This is usually a no-op on MS-DOS, but with file-sharing ** installed, it was reported to produce empty spelled files! ** Apparently, the file-sharing module would close the file when ** `chmod' is called. */ (void) chmod (tempfile, statbuf.st_mode); #endif quit = 0; changes = 0; checkfile (); (void) fclose (infile); (void) fclose (outfile); if (!cflag) treeoutput (); if (changes && !readonly) update_file (filename, &statbuf); (void) unlink (tempfile); } /* * Set up to externally deformat a file. * * If no deformatter is provided, we return either standard input (if * filename is NULL) or the result of opening the specified file. * * If a deformatter is provided, but no filename is provided, we * assume that the input comes from stdin, and we set up the * deformatter to filter that descriptor, and return stdin as our * result. In such a case, there is no dual input: we will read the * filtered data via the deformatter and ignore the unfiltered * version. * * If there is a deformatter and we are given a filename, then we set * up the deformatter to read the file from its own standard input and * write to its standard output. In addition, we set up "sourcefile" * so that it can read the unfiltered data directly from the input * file. * * If "statbuf" is non-NULL, it will be filled in with the result of * stat-ing the file. If the stat fails, statbuf->st_mode will be set * to a reasonable default value. The contents of statbuf are * undefined if the input file or the filter cannot be opened. * * Note that external deformatters do not work with named pipes as input. */ static FILE * setupdefmt (filename, statbuf) char * filename; /* File to open, if non-NULL */ struct stat * statbuf; /* Buffer to hold file status */ { FILE* filteredfile; /* Access to the filtered file */ int inputfd; /* Fd for access to file to open */ int savedstdin; /* File descriptor saving stdin */ sourcefile = NULL; if (defmtpgm == NULL) { /* * There is no deformatter. Return either stdin or an open file. */ if (filename == NULL) filteredfile = stdin; else filteredfile = fopen (filename, "r"); if (statbuf != NULL && filteredfile != NULL && fstat (fileno (filteredfile), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; return filteredfile; } else if (filename == NULL) { /* * We are reading from standard input. Switch over to a * filtered version of stdin. */ if (statbuf != NULL && fstat (fileno (stdin), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; return popen (defmtpgm, "r"); } else { /* * This is the tricky case. We need to get the deformatter to * read from the input file and filter it to us. Doing so * requires several steps: * * 1. Preserve file descriptor 0 by duplicating it. * 2. Close file descriptor 0, and reopen it on the file to be * filtered. * 3. Open a pipe to the deformat program. * 4. Restore file descriptor 0. * * Because we do all of this without ever letting the stdio * library know that we've been mucking around with file * descriptors, we won't bother its access to stdin. */ sourcefile = fopen (filename, "r"); if (sourcefile == NULL) return NULL; if (statbuf != NULL && fstat (fileno (sourcefile), statbuf) == -1) statbuf->st_mode = DEFAULT_FILE_MODE; savedstdin = dup (0); inputfd = open (filename, 0); if (inputfd < 0) return NULL; /* Failed to open the file */ else if (dup2 (inputfd, 0) != 0) { (void) fprintf (stderr, ISPELL_C_UNEXPECTED_FD, filename, MAYBE_CR (stderr)); exit (1); } filteredfile = popen (defmtpgm, "r"); if (dup2 (savedstdin, 0) != 0) { (void) fprintf (stderr, ISPELL_C_UNEXPECTED_FD, filename, MAYBE_CR (stderr)); exit (1); } close (savedstdin); return filteredfile; } } static void update_file (filename, statbuf) char * filename; struct stat * statbuf; { char bakfile[MAXPATHLEN]; int c; char * pathtail; if ((infile = fopen (tempfile, "r")) == NULL) { (void) fprintf (stderr, ISPELL_C_TEMP_DISAPPEARED, tempfile, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifdef TRUNCATEBAK (void) strncpy (bakfile, filename, sizeof bakfile - 1); bakfile[sizeof bakfile - 1] = '\0'; #else /* TRUNCATEBAK */ (void) sprintf (bakfile, "%.*s%s", (int) (sizeof bakfile - sizeof BAKEXT), filename, BAKEXT); #endif /* TRUNCATEBAK */ pathtail = last_slash (bakfile); if (pathtail == NULL) pathtail = bakfile; else pathtail++; #ifdef TRUNCATEBAK if (strcmp(BAKEXT, filename + strlen(filename) - sizeof BAKEXT + 1) != 0) { if (strlen (pathtail) > MAXNAMLEN - sizeof BAKEXT + 1) pathtail[MAXNAMLEN - sizeof BAKEXT + 1] = '\0'; (void) strcat (pathtail, BAKEXT); } #endif /* TRUNCATEBAK */ #ifdef MSDOS if (pathconf (filename, _PC_NAME_MAX) <= MAXBASENAMELEN + MAXEXTLEN + 1) { /* ** Excessive characters beyond 8+3 will be truncated by the ** OS. Ensure the backup extension won't be truncated, and ** that we don't create an invalid filename (e.g., more than ** one dot). Allow use of BAKEXT without a leading dot (such ** as "~"). */ char *last_dot = rindex (pathtail, '.'); /* ** If no dot in backup filename, make BAKEXT be the extension. ** This ensures we don't truncate the name more than necessary. */ if (last_dot == NULL && strlen (pathtail) > MAXBASENAMELEN) { pathtail[MAXBASENAMELEN] = '.'; /* ** BAKEXT cannot include a dot here (or we would have ** found it above, and last_dot would not be NULL). */ strcpy (pathtail + MAXBASENAMELEN + 1, BAKEXT); } else if (last_dot != NULL) { char *p = pathtail; size_t ext_len = strlen (last_dot); /* Convert all dots but the last to underscores. */ while (p < last_dot && *p) { if (*p == '.') *p = '_'; p++; } /* Make sure we preserve as much of BAKEXT as we can. */ if (ext_len > MAXEXTLEN && ext_len > sizeof (BAKEXT) - 1) strcpy (MAXEXTLEN <= sizeof (BAKEXT) - 1 ? last_dot + 1 : last_dot + MAXEXTLEN - sizeof (BAKEXT) + 1, BAKEXT); } } #endif /* MSDOS */ if (strncmp (filename, bakfile, pathtail - bakfile + MAXNAMLEN) != 0) (void) unlink (bakfile); /* unlink so we can write a new one. */ #ifdef HAS_RENAME (void) rename (filename, bakfile); #else /* HAS_RENAME */ if (link (filename, bakfile) == 0) (void) unlink (filename); #endif /* HAS_RENAME */ /* if we can't write new, preserve .bak regardless of xflag */ if ((outfile = fopen (filename, "w")) == NULL) { (void) fprintf (stderr, CANT_CREATE, filename, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); return; } #ifndef MSDOS /* ** This is usually a no-op on MS-DOS, but with file-sharing ** installed, it was reported to produce empty spelled files! ** Apparently, the file-sharing module would close the file when ** `chmod' is called. */ (void) chmod (filename, statbuf->st_mode); #endif while ((c = getc (infile)) != EOF) (void) putc (c, outfile); (void) fclose (infile); (void) fclose (outfile); if (xflag && strncmp (filename, bakfile, pathtail - bakfile + MAXNAMLEN) != 0) (void) unlink (bakfile); } static void expandmode (option) int option; /* How to print: */ /* 1 = expansions only */ /* 2 = original line + expansions */ /* 3 = original paired w/ expansions */ /* 4 = add length ratio */ /* 5 = root + flags used, expansion */ { char buf[BUFSIZ]; int explength; /* Total length of all expansions */ register char * flagp; /* Pointer to next flag char */ ichar_t ibuf[BUFSIZ]; MASKTYPE mask[MASKSIZE]; char origbuf[BUFSIZ]; /* Original contents of buf */ char ratiobuf[20]; /* Expansion/root length ratio */ int rootlength; /* Length of root word */ register int temp; while (xgets (buf, sizeof buf, stdin) != NULL) { rootlength = strlen (buf); if (buf[rootlength - 1] == '\n') buf[--rootlength] = '\0'; (void) strcpy (origbuf, buf); if ((flagp = index (buf, hashheader.flagmarker)) != NULL) { rootlength = flagp - buf; *flagp++ = '\0'; } if (option == 2 || option == 3 || option == 4) (void) printf ("%s ", origbuf); if (flagp != NULL) { if (flagp - buf > INPUTWORDLEN) buf[INPUTWORDLEN] = '\0'; } else { if ((int) strlen (buf) > INPUTWORDLEN - 1) buf[INPUTWORDLEN] = '\0'; } (void) fputs (buf, stdout); if (flagp != NULL) { (void) BZERO ((char *) mask, sizeof (mask)); while (*flagp != '\0' && *flagp != '\n') { temp = CHARTOBIT ((unsigned char) *flagp); if (temp >= 0 && temp <= LARGESTFLAG) SETMASKBIT (mask, temp); else (void) fprintf (stderr, BAD_FLAG, MAYBE_CR (stderr), (unsigned char) *flagp, MAYBE_CR (stderr)); flagp++; /* Accept old-format dicts with extra slashes */ if (*flagp == hashheader.flagmarker) flagp++; } if (strtoichar (ibuf, (unsigned char *) buf, sizeof ibuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (buf)); explength = expand_pre ((unsigned char *) origbuf, ibuf, mask, option, (unsigned char *) ""); explength += expand_suf ((unsigned char *) origbuf, ibuf, mask, 0, option, (unsigned char *) ""); explength += rootlength; if (option == 4) { (void) sprintf (ratiobuf, " %f", (double) explength / (double) rootlength); (void) fputs (ratiobuf, stdout); (void) expand_pre ((unsigned char *) origbuf, ibuf, mask, 3, (unsigned char *) ratiobuf); (void) expand_suf ((unsigned char *) origbuf, ibuf, mask, 0, 3, (unsigned char *) ratiobuf); } } (void) putchar ('\n'); (void) fflush (stdout); } } /* ** A trivial wrapper for rindex (file '/') on Unix, but ** saves a lot of ifdef-ing on MS-DOS. */ char * last_slash (file) char * file; /* String to search for / or \ */ { #ifdef MSDOS char * backslash; /* Position of last backslash */ #endif /* MSDOS */ char * slash; /* Position of last slash */ slash = rindex (file, '/'); #ifdef MSDOS /* ** We can have both forward- and backslashes; find the rightmost ** one of either type. */ backslash = rindex (file, '\\'); if (slash == NULL || (backslash != NULL && backslash > slash)) slash = backslash; /* ** If there is no backslash, but the first two characters are a ** letter and a colon, the basename begins right after them. */ if (slash == NULL && file[0] != '\0' && file[1] == ':') slash = file + 1; #endif return slash; } ispell-3.4.00/PaxHeaders.19408/proto.h0000644000000000000000000000007410233541510014143 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/proto.h0000444003214100001440000003230510233541510015206 0ustar00geofffaculty00000000000000#ifndef PROTO_H_INCLUDED #define PROTO_H_INCLUDED /* * $Id: proto.h,v 1.28 2005/04/26 22:40:08 geoff Exp $ * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * $Log: proto.h,v $ * Revision 1.28 2005/04/26 22:40:08 geoff * Add double-inclusion protection. Include ispell.h for the definition of P. * * Revision 1.27 2005/04/20 23:16:32 geoff * Add inpossibilities. * * Revision 1.26 2005/04/14 23:11:36 geoff * Prototype initckch. * * Revision 1.25 2005/04/14 14:38:23 geoff * Update license. Rename some functions to avoid collisions with * libraries. Add a couple of "const" declarations. * * Revision 1.24 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.23 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.22 2001/04/04 06:50:00 geoff * Add unistd.h to work around a problem in Mac OSX * * Revision 1.21 1999/01/18 02:14:11 geoff * Change most char declarations to unsigned char, to avoid * sign-extension problems with 8-bit characters. * * Revision 1.20 1999/01/07 01:58:12 geoff * Update the copyright. * * Revision 1.19 1999/01/03 01:46:44 geoff * Add a declaration for "dup". * * Revision 1.18 1998/07/06 06:55:21 geoff * Rename sethtmltags to init_keyword_table, and simplify the argument * list. * * Revision 1.17 1997/12/02 06:25:07 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.16 1997/12/01 00:53:54 geoff * Add HTML declarations. * * Revision 1.15 1994/10/25 05:46:38 geoff * Protoize bzero the way 4.1.1 does it (which I hope is the standard). * * Revision 1.14 1994/05/24 06:23:10 geoff * Make cap_ok a global routine. * * Revision 1.13 1994/05/17 06:44:20 geoff * Add the new arguments to chk_aff, good, and compoundgood. * * Revision 1.12 1994/03/16 03:49:15 geoff * Add an ifdef so that there won't be a conflict with the definition of * free() on braindamaged Sun systems. * * Revision 1.11 1994/02/14 00:34:55 geoff * Add new arguments to the prototype for correct(). * * Revision 1.10 1994/02/08 05:45:34 geoff * Don't undef P unless we're going to redefine it * * Revision 1.9 1994/02/07 08:10:47 geoff * Add the GENERATE_LIBRARY_PROTOS option. Put the definitions of * index/rindex back the way they were, because that's what's needed on * my system (sigh). * * Revision 1.8 1994/02/07 05:45:25 geoff * Change the second parameter of index/rindex to be a char * * Revision 1.7 1994/01/25 07:12:05 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "ispell.h" /* For definition of P */ extern int addvheader P ((struct dent * ent)); extern void askmode P ((void)); extern void backup P ((void)); extern int cap_ok P ((ichar_t * word, struct success * hit, int len)); extern int casecmp P ((unsigned char * a, unsigned char * b, int canonical)); extern void chupcase P ((unsigned char * s)); extern void checkfile P ((void)); extern void checkline P ((FILE * ofile)); extern void chk_aff P ((ichar_t * word, ichar_t * ucword, int len, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); extern int combinecaps P ((struct dent * hdr, struct dent * newent)); extern int compoundgood P ((ichar_t * word, int pfxopts)); extern void copyout P ((unsigned char ** cc, int cnt)); extern void correct P ((unsigned char * ctok, int ctokl, ichar_t * itok, int itokl, unsigned char ** curchar)); extern char * do_regex_lookup P ((char * expr, int whence)); extern SIGNAL_TYPE done P ((int)); extern void dumpmode P ((void)); extern void ierase P ((void)); extern int expand_pre P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int option, unsigned char *extra)); extern int expand_suf P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int crossonly, int option, unsigned char * extra)); extern int findfiletype P ((char * name, int searchnames, int * deformatter)); extern void flagpr P ((ichar_t * word, int preflag, int prestrip, int preadd, int sufflag, int sufadd)); extern void givehelp P ((int interactive)); extern int good P ((ichar_t * word, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); extern int hash P ((ichar_t * word, int hashtablesize)); #ifndef ICHAR_IS_CHAR extern int icharcmp P ((ichar_t * s1, ichar_t * s2)); extern ichar_t * icharcpy P ((ichar_t * out, ichar_t * in)); extern int icharlen P ((ichar_t * str)); extern int icharncmp P ((ichar_t * s1, ichar_t * s2, int n)); #endif /* ICHAR_IS_CHAR */ extern int ichartostr P ((unsigned char * out, const ichar_t * in, int outlen, int canonical)); extern unsigned char * ichartosstr P ((const ichar_t * in, int canonical)); extern void initckch P ((const char * wchars)); extern int ins_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent)); extern void inverse P ((void)); extern int linit P ((void)); extern struct dent * lookup P ((ichar_t * word, int dotree)); extern void lowcase P ((ichar_t * string)); extern int makedent P ((unsigned char * lbuf, int lbuflen, struct dent * d)); extern void makepossibilities P ((ichar_t * word)); extern int inpossibilities P ((unsigned char * ctok)); extern void imove P ((int row, int col)); extern void normal P ((void)); extern char * printichar P ((int in)); extern int init_keyword_table P ((char * rawtags, char * envvar, char * deftags, int ignorecase, struct kwtable * keywords)); #ifdef USESH extern int shellescape P ((char * buf)); extern void shescape P ((char * buf)); #else /* USESH */ #ifndef REGEX_LOOKUP extern int shellescape P ((char * buf)); #endif /* REGEX_LOOKUP */ #endif /* USESH */ extern unsigned char * skipoverword P ((unsigned char * bufp)); extern void stop P ((void)); extern int stringcharlen P ((unsigned char * bufp, int canonical)); extern int strtoichar P ((ichar_t * out, unsigned char * in, int outlen, int canonical)); extern ichar_t * strtosichar P ((unsigned char * in, int canonical)); extern void terminit P ((void)); extern void toutent P ((FILE * outfile, struct dent * hent, int onlykeep)); extern void treeinit P ((char * persdict, char * LibDict)); extern void treeinsert P ((unsigned char * word, int wordlen, int keep)); extern struct dent * treelookup P ((ichar_t * word)); extern void treeoutput P ((void)); extern void upcase P ((ichar_t * string)); extern long whatcap P ((ichar_t * word)); extern char * xgets P ((char * string, int size, FILE * stream)); extern void yyinit P ((void)); extern int yyopen P ((char * file)); extern int yyparse P ((void)); extern void myfree P ((VOID * area)); extern VOID * mymalloc P ((unsigned int)); extern VOID * myrealloc P ((VOID * area, unsigned int size, unsigned int oldsize)); /* * C library functions. If possible, we get these from stdlib.h. * * Even if stdlib.h doesn't exist, we don't generate proper prototypes * on most systems. This protects us against minor differences in * declarations that break the compilation unnecessarily. * GENERATE_LIBRARY_PROTOS is mostly for the benefit of the ispell * developer. */ #ifndef GENERATE_LIBRARY_PROTOS #undef P #define P(x) () #endif /* GENERATE_LIBRARY_PROTOS */ #ifdef NO_STDLIB_H extern int access P ((const char * file, int mode)); extern int atoi P ((const char * string)); #ifndef USG extern VOID * bcopy P ((const VOID * src, VOID * dest, unsigned int size)); extern void bzero P ((VOID * dest, int size)); #endif /* USG */ extern VOID * calloc P ((unsigned int nelems, unsigned int elemsize)); #ifdef _POSIX_SOURCE extern int chmod P ((const char * file, unsigned int mode)); #else /* _POSIX_SOURCE */ extern int chmod P ((const char * file, unsigned long mode)); #endif /* POSIX_SOURCE */ extern int close P ((int fd)); extern int creat P ((const char * file, int mode)); extern int dup P ((int fd)); extern int execvp P ((const char * name, const char * argv[])); extern void _exit P ((int status)); extern void exit P ((int status)); extern char * fgets P ((char * string, int size, FILE * stream)); extern int fork P ((void)); #ifdef __STDC__ /* * Some flaming cretin at Sun decided that free() should be declared * as returning an int in /usr/include/malloc.h, so the following * declaration causes a conflict. Fortunately, it doesn't really do a * lot of harm to leave it undeclared, since (a) we always properly * ignore the return value and (b) any machine that really needs * special code to handle ignoring the return value is likely to also * provide a correct declaration. * * (Why is this ifdef'ed on __STDC__? Because I want it to be correct * on my development machine, so I can catch lint problems.) * * A pox on those who violate long-established standards! */ extern void free P ((VOID * area)); #endif /* __STDC__ */ extern char * getenv P ((const char * varname)); extern int ioctl P ((int fd, int func, char * arg)); extern int kill P ((int pid, int sig)); extern int link P ((const char * existing, const char * new)); extern long lseek P ((int fd, long offset, int whence)); extern VOID * malloc P ((unsigned int size)); #ifdef USG extern VOID * memcpy P ((VOID * dest, const VOID * src)); extern VOID * memset P ((VOID * dest, int val, unsigned int len)); #endif /* USG */ extern char * mktemp P ((char * prototype)); extern int open P ((const char * file, int mode)); extern void perror P ((const char * msg)); extern void qsort P ((VOID * array, unsigned int nelems, unsigned int elemsize, int (*cmp) (const VOID * a, const VOID * b))); extern int read P ((int fd, VOID * buf, unsigned int n)); extern VOID * realloc P ((VOID * area, unsigned int size)); extern unsigned int sleep P ((unsigned int)); extern char * strcat P ((char * dest, const char * src)); #ifdef USG extern char * strchr P ((const char * string, int ch)); #endif /* USG */ extern int strcmp P ((const char * s1, const char * s2)); extern char * strcpy P ((char * dest, const char * src)); extern unsigned int strlen P ((const char * str)); extern int strncmp P ((const char * s1, const char * s2, unsigned int len)); extern char * strncpy P ((char * dest, const char * src, unsigned int len)); #ifdef USG extern char * strrchr P ((const char * string, int ch)); #endif /* USG */ extern int system P ((const char * command)); extern int unlink P ((const char * file)); extern int wait P ((int * statusp)); #else /* NO_STDLIB_H */ #include #include #include #endif /* NO_STDLIB_H */ #ifndef USG extern char * index P ((const char * string, int ch)); extern char * rindex P ((const char * string, int ch)); #endif /* USG */ #ifdef REGEX_LOOKUP #ifdef USG extern char * regcmp P ((const char * expr, const char * terminator, ...)); extern char * regex P ((const char * pat, const char * subject, ...)); #else /* USG */ extern char * re_comp P ((const char * expr)); extern int * re_exec P ((const char * pat)); #endif /* USG */ #endif /* REGEX_LOOKUP */ extern int tgetent P ((char * buf, const char * termname)); extern int tgetnum P ((const char * id)); extern char * tgetstr P ((const char * id, char ** area)); extern char * tgoto P ((const char * cm, int col, int row)); extern char * tputs P ((const char * str, int pad, int (*func) (int ch))); #ifndef GENERATE_LIBRARY_PROTOS #ifdef __STDC__ #undef P #define P(x) x #endif /* __STDC__ */ #endif /* GENERATE_LIBRARY_PROTOS */ #endif /* PROTO_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/xgets.c0000644000000000000000000000007410227500137014130 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/xgets.c0000444003214100001440000001175010227500137015174 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: xgets.c,v 1.28 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: xgets.c,v $ * Revision 1.28 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.27 2002/02/06 05:58:03 geoff * Janos Mandli: trim trailing whitespace from include-file names * * Revision 1.26 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.25 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.24 1999/01/18 03:28:47 geoff * Get of a warning message caused by poor style. * * Revision 1.23 1999/01/07 01:23:01 geoff * Update the copyright. * * Revision 1.22 1994/09/16 04:48:34 geoff * Be sure to deliver newlines to the caller, so that it can tell whether * or not a complete line was read. * * Revision 1.21 1994/01/25 07:12:22 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include char * xgets P ((char * string, int size, FILE * stream)); #ifndef MAXINCLUDEFILES #define MAXINCLUDEFILES 1 /* maximum number of new files in stack */ #endif /* * xgets () acts just like gets () except that if a line matches * "&Include_File&" xgets () will start reading from the * file . * * Andrew Vignaux -- andrew@vuwcomp Fri May 8 16:40:23 NZST 1987 * modified * Mark Davies -- mark@vuwcomp Mon May 11 22:38:10 NZST 1987 */ char * xgets (str, size, stream) char str[]; int size; FILE * stream; { #if MAXINCLUDEFILES == 0 return fgets (str, size, stream); #else static char * Include_File = DEFINCSTR; static int Include_Len = 0; static FILE * F[MAXINCLUDEFILES+1]; static FILE ** current_F = F; char * s = str; int c; /* read the environment variable if we havent already */ if (Include_Len == 0) { char * env_variable; if ((env_variable = getenv (INCSTRVAR)) != NULL) Include_File = env_variable; Include_Len = strlen (Include_File); /* initialise the file stack */ *current_F = stream; } for ( ; ; ) { c = '\0'; if ((s - str) + 1 < size && (c = getc (*current_F)) != EOF) { *s++ = (char) c; if (c != '\n') continue; } *s = '\0'; /* end of line */ if (c == EOF) { if (current_F == F) /* if end of standard input */ { if (s == str) return (NULL); } else { (void) fclose (*(current_F--)); if (s == str) continue; } } if (incfileflag != 0 && strncmp (str, Include_File, (unsigned int) Include_Len) == 0) { char * file_name = str + Include_Len; if (*file_name != '\0') { char* p = file_name + strlen (file_name) - 1; while (p >= file_name && isspace (*p)) { *p = '\0'; --p; } } if (current_F - F < MAXINCLUDEFILES && *file_name != '\0') { FILE * f; if ((f = fopen (file_name, "r")) != NULL) *(++current_F) = f; } s = str; continue; } break; } return (str); #endif } ispell-3.4.00/PaxHeaders.19408/README0000644000000000000000000000007410245122266013515 xustar0030 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/README0000444003214100001440000002650610245122266014566 0ustar00geofffaculty00000000000000 This is ispell version 3.3, an interactive spelling checker. Contents of this README file: What Is Ispell and Why Do I Want It? What's New in This Version? Where Can I Get Ispell? OK, How Do I Install It? Who Wrote Ispell? Where Do I Send Bug Reports? How Do I Reference Ispell in Scholarly Papers? Where Do I Get Dictionaries? How Long Does It Take to Make Dictionaries? Special Installation Notes for Certain Machines What About Ispell for MS-DOS? Note: this README file might not contain the latest information about ispell. For that information, visit the ispell Web page: http://www.lasr.cs.ucla.edu/geoff/ispell.html ------------------------------------------------------------------------ What Is Ispell and Why Do I Want It? Ispell is a fast screen-oriented spelling checker that shows you your errors in the context of the original file, and suggests possible corrections when it can figure them out. Compared to UNIX spell, it is faster and much easier to use. Ispell can also handle languages other than English. What's New in This Version? Ispell 3.3 offers improved support for international languages, improved deformatting, and better support for compilation on Windows systems. All known security holes have been closed. A number of small bugs are also fixed. Where Can I Get Ispell? Point your Web browser at the ispell home page: http://www.lasr.cs.ucla.edu/geoff/ispell.html The current version of ispell is available for Web download from www.lasr.cs.ucla.edu using the following URL: http://www.lasr.cs.ucla.edu/geoff/tars The latest version is always named "ispell-3.3.xx.tar.gz", where "xx" is the patch level. There are also sometimes files named "README-patchxx", which contain notes specific to a given version. A number of ftp mirror sites also store ispell. Check your favorite search engine for "ispell-3.3" to find a site near you. Ispell comes with English dictionaries. For other languages, visit the ispell dictionaries Web page at: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html OK, How Do I Install It? Quick installation instructions for American English: 1) Download Ispell from http://www.lasr.cs.ucla.edu/geoff/ispell.html 2) gunzip ispell-3.3.xx.tar.gz 3) tar -xvf ispell-3.3.xx.tar 4) cd ispell-3.3.xx 5) Copy one of the sample local.h files to local.h: cp local.h.bsd local.h cp local.h.cygwin local.h cp local.h.linux local.h cp local.h.macos local.h cp local.h.solaris local.h or cp local.h.generic local.h 6) If you used the generic local.h file and are using a USG-style system (Linux, IRIX, HP-UX, Solaris, etc): Edit local.h and change: #undef USG to: #define USG 7) make all If you get compile errors in term.c, do step 6 (or undo it if you already did it). 8) make install Long installation instructions: (For installation on MS-DOS, see the section about MS-DOS at the end of this file.) Ispell is quite portable (thanks to many people). If you speak American English and have one of the pre-configured systems, follow the instructions above. For more complex installations, you will have to create a fancier local.h file. All customization of ispell, even for the Makefile, is done by creating or editing the file "local.h" to override the default definitions of certain variables. The most common change is to add or remove "#define USG" so that term.c will compile. The next most common changes will be to the LANGUAGES variable (to set the languages; see also the Makefiles in the various language subdirectories), CC (to choose gcc), and BINDIR through MAN45DIR (to control where ispell is installed). There are many other configuration parameters; see config.X for the complete list and further instructions. *DO NOT* make changes to config.X or to any of the Makefiles. Anything you define in "local.h" will override definitions in those files. The English-language dictionary comes in four sizes: small, medium, large, and extra-large. I recommend using the medium dictionary unless you are very short on space. The small and medium dictionaries have been hand-checked against a paper dictionary to improve their accuracy. This is not true of the two larger ones. The large and extra-large dictionaries contain less-frequently-used words and are known to have misspelling in them. Also, even a correct large dictionary can hide misspellings of short words because there is some similar word that nobody uses. (For example, the crossword-puzzle favorite "ort" can keep you from finding a place where you mistyped "or".) If you have a list of extra words (such as /usr/share/dict/words on some commercial Unixes), you can also choose to make a "plus" version, named by adding a plus sign to the size indication, to include that list in your dictionary. Because many modern computers don't have /usr/share/dict/words, the default dictionary is the "non-plus" version. After all edits, you are ready to compile ispell. Simply type "make all" to compile all the programs, put the dictionaries together, and build the hash file. If you get errors while compiling term.c, change the setting of "#define USG" in your local.h file and try again. After your first make completes, you are ready to install ispell. The standard "make install" will install ispell, the auxiliary programs and scripts, the manual page, and the dictionary hash file, all in the directories you have chosen for them. This usually has to be done as root, and on some systems you will not be able to redirect the output to a file. (If you're the careful sort, you'll check the output of "make -n install" first to be sure there are no hidden surprises.) If you don't want to install the dictionary-building tools, you can type "make partial-install" to install just the files needed to use ispell itself. As well as the standard "make clean" and "make realclean" targets, there is also a "make dictclean" target which will get rid of constructed dictionary files such as "english.med+". This is a separate target because of the time it takes to build dictionaries. Finally, there is a directory named "addons", which contains shar kits for ispell helper programs that were generously written by other people. These are not copyrighted or supported by the ispell maintainer. Contact the original authors (listed in README files in the kits) for more information. Who Wrote Ispell? Ispell is a very old program. The original was written in PDP-10 assembly in 1971, by R. E. Gorin. The C version was written by Pace Willisson of MIT. Walt Buehring of Texas Instruments added the emacs interface and posted it to the net. Geoff Kuenning added the international support and created the current release. Ken Stevens has maintained the Emacs interface (ispell.el) for many years. Many, many other people contributed to the current version; a partial list (with a much more detailed history) can be found in the file "Contributors". Where Do I Send Bug Reports? Most ispell bug reports, except bugs related to the emacs-lisp interface, should be sent to "ispell-bugs@itcorp.com". Bugs in the emacs interface (ispell.el) should be sent to "ispell-el-bugs@itcorp.com". If you're not sure which address to use, send your report to "ispell-bugs@itcorp.com" and I'll sort it out from there. Note that the bug aliases are not discussion lists; membership is limited. Bugs in add-on packages (found in the "addons" subdirectory) should not be sent to itcorp.com. Instead, send reports to the developers of those packages (see the README file for the package you are using). How Do I Reference Ispell in Scholarly Papers? There is no published paper on ispell, so if you make use of ispell in a fashion that requires a reference (e.g., using the dictionary as a word list in a research project), you are limited to an Internet reference. The full proper title is printed by "ispell -v": "International Ispell Version x.y.z". Please include the full version number in your reference so that people can discover the exact variant that you used; sometimes it's important. If you're feeling really nice, you can also credit me, Geoff Kuenning, as the author. Usually, you should also include a link to the ispell Web page: http://www.lasr.cs.ucla.edu/geoff/ispell.html so that readers of your paper can locate a copy of ispell if they wish. Where Do I Get Dictionaries? Ispell comes with American and British dictionaries. American-style spellings are the default. To get British spellings, copy the LANGUAGES and MASTERHASH definitions from config.X into your local.h, and then globally replace "american" with "british". For other languages, consult the file "languages/Where", which lists everything I know about. You can also check the ispell dictionaries page: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html which contains pointers to all known dictionaries. As a general rule, if you use a dictionary that was not intended for ispell, or if you combine multiple dictionaries, you should use munchlist to reduce the size of the dictionary. If you create a dictionary of your own and make it available for ftp, please send a notification to ispell-bugs@itcorp.com so that I can add your dictionary to the ftp list. How Long Does It Take to Make Dictionaries? Long ago, making a big dictionary took hours. But on a modern machine, it should only take a few minutes. Special Installation Notes for Certain Machines: Although I have tried to avoid putting in specific machine dependencies as a general rule, some machine-specific #defines will be found at the end of config.X. If you get lots of warnings when compiling term.c, check to be sure that you have correctly defined SIGNAL_TYPE in your local.h. Some recent "internationalized" Unixes (such as HP, and anything using the GNU tools, such as Linux) vary the behavior of sort(1) based on an environment variable such as LANG, LOCALE, or LC_xxx. The symptom is that munchlist does not produce an optimal dictionary. The shell scripts try to protect against this by setting all of these variables to "C", but if your system uses different environment variables, you may have to do this by hand. If you get core dumps from the sort command (reported on HP systems building large German dictionaries), try adding the "-y" flag to the appropriate invocation of sort in the Makefile or in munchlist. This flag is only available on some systems. Some BSDI systems have a screwy sort command that uses -T to specify the record (as opposed to field) delimiter. You'll have to disable SORTTMP and enable MAKE_SORTTMP. What About Ispell for MS-DOS? Although the ispell maintainer does not support MS-DOS and Windows, a generous contributor, Eli Zaretskii, has added MS-DOS support. You can build ispell for MS-DOS with either EMX/GCC or DJGPP. See the file pc/README for compilation instructions. ispell-3.4.00/PaxHeaders.19408/ispell.1X0000644000000000000000000000013212465617735014352 xustar0030 mtime=1423384541.141510808 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/ispell.1X0000444003214100001440000013651212465617735015427 0ustar00geofffaculty00000000000000.\" .\" $Id: ispell.1X,v 1.101 2015-02-08 00:35:41-08 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: ispell.1X,v $ .\" Revision 1.101 2015-02-08 00:35:41-08 geoff .\" Identify helper programs as such in the synopsis (patch from Eric S. Raymond). .\" .\" Revision 1.100 2013-04-03 16:38:30-07 geoff .\" Add a warning about the -C option's dangers. .\" .\" Revision 1.99 2009-01-01 14:55:32-08 geoff .\" Get rid of a .IR that actually belongs in config.X (Richard Roger). .\" .\" Revision 1.98 2005-09-05 23:31:32-07 geoff .\" Get the version described from version.h, rather than hardwiring it. .\" .\" Revision 1.97 2005/05/01 22:35:00 geoff .\" Make the backup-file extension configurable. .\" .\" Revision 1.96 2005/04/26 22:42:22 geoff .\" Remove fixispell-a, since it doesn't really do the job .\" .\" Revision 1.95 2005/04/14 23:11:36 geoff .\" Document the -w switch to icombine. .\" .\" Revision 1.94 2005/04/14 21:25:52 geoff .\" Document MUNCHDEBUGDIR and ISPELL_CHARSET. .\" .\" Revision 1.93 2005/04/14 14:38:23 geoff .\" Update license. Incorporate Ed Avis's changes. Document fixispell-a. .\" Add the -o flag. Make certain external references configurable. .\" Document -e5. .\" .\" Revision 1.92 2001/10/01 23:32:07 geoff .\" Remove an obsolete reference to sq. .\" .\" Revision 1.91 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.90 2001/07/23 20:24:03 geoff .\" Update the copyright and the license. .\" .\" Revision 1.89 2001/07/23 19:36:49 geoff .\" Document that -w doesn't work with / .\" .\" Revision 1.88 2000/08/24 06:48:40 geoff .\" Document correct_verbose_mode. .\" .\" Revision 1.87 1999/01/07 01:22:40 geoff .\" Update the copyright. .\" .\" Revision 1.86 1999/01/05 20:40:26 geoff .\" Improve the documentation of -F .\" .\" Revision 1.85 1999/01/03 01:46:31 geoff .\" Document the -F (external deformatter) switch. .\" .\" Revision 1.84 1998/07/12 20:42:15 geoff .\" Document the -k switch and associated environment variables. Fix a .\" couple of places where ispell wasn't italicized. .\" .\" Revision 1.83 1995/11/08 05:09:12 geoff .\" Document the new ispell-4-like interactive mode. .\" .\" Revision 1.82 1995/11/08 04:53:34 geoff .\" Change the HTML-mode documentation to reflect the compatibility .\" improvements and flag renaming I did. .\" .\" Revision 1.81 1995/10/25 04:05:20 geoff .\" Documentation for html-mode added by Gerry Tierney 10/14/1995. .\" .\" Revision 1.80 1995/01/08 23:23:31 geoff .\" Document the new personal-dictionary behavior (dictionary named after .\" the hash file is preferred). .\" .\" Revision 1.79 1994/10/25 05:46:02 geoff .\" Document the new DICTIONARY variable, and improve the documentation of .\" the -d flag. .\" .\" Revision 1.78 1994/09/16 05:06:58 geoff .\" Make it clear that the + command doesn't change the string-character .\" type. .\" .\" Revision 1.77 1994/04/27 01:50:35 geoff .\" Remove the bug about the tex parser getting confused by \endxxx. .\" .\" Revision 1.76 1994/03/21 01:54:08 geoff .\" Document the '&' command in -a mode. .\" .\" Revision 1.75 1994/03/15 06:24:26 geoff .\" Document the changes to the +/-/~ commands and the -T switch. .\" .\" Revision 1.74 1994/01/25 07:11:39 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH ISPELL 1 local .SH NAME ispell, buildhash, munchlist, findaffix, tryaffix, icombine, ijoin \- Interactive spelling checking .SH SYNOPSIS .B ispell .RI [ common-flags ] .RB [ \-M | \-N ] .RB [ \-L \fIcontext\fP ] .RB [ \-V ] files .br .B ispell .RI [ common-flags ] .B \-l .br .B ispell .RI [ common-flags ] .RB [ \-f file] .RB [ \-s ] .RB [ \-a | \-A ] .br .B ispell .RB [ \-d .IR file ] .RB [ \-w .IR chars ] .B \-c .br .B ispell .RB [ \-d .IR file ] .RB [ \-w .IR chars ] .BR \-e [ e ] .br .B ispell .RB [ \-d .IR file ] .B \-D .br .B ispell .BR \-v [ v ] .IP \fIcommon-flags\fP: .RB [ \-t ] .RB [ \-n ] .RB [ \-H ] .RB [ \-o ] .RB [ \-b ] .RB [ \-x ] .RB [ \-B ] .RB [ \-C ] .RB [ \-P ] .RB [ \-m ] .RB [ \-S ] .RB [ \-d .IR file ] .RB [ \-p .IR file ] .RB [ \-w .IR chars ] .RB [ \-W .IR n ] .RB [ \-T .IR type ] .RB [ \-k\fIname\fP .IR list ] .RB [ \-F .IR program ] .PP Helper programs: .PP .B buildhash .RB [ \-s ] .I dict-file affix-file hash-file .br .B buildhash .B \-s .I count affix-file .if n .TP 10 .if t .PP .B munchlist .RB [ \-l .IR aff-file ] .RB [ \-c .IR conv-file ] .RB [ \-T .IR suffix ] .if n .br .RB [ \-s .IR hash-file ] .RB [ \-D ] .RB [ \-v ] .RB [ \-w .IR chars ] .RI [ files ] .if n .TP 10 .if t .PP .B findaffix .RB [ \-p | \-s ] .RB [ \-f ] .RB [ \-c ] .RB [ \-m .IR min ] .RB [ \-M .IR max ] .RB [ \-e .IR elim ] .if n .br .RB [ \-t .IR tabchar ] .RB [ \-l .IR low ] .RI [ files ] .PP .B tryaffix .RB [ \-p | \-s] .RB [ \-c ] .I expanded-file .IR affix [ +addition ] ... .PP .B icombine .RB [ \-T .IR type ] .RB [ \-w .IR chars ] .RI [ aff-file ] .PP .B ijoin .RB [ \-s | \-u ] .I join-options .I file1 .I file2 .SH DESCRIPTION .PP .I Ispell is fashioned after the .I spell program from ITS (called .I ispell on Twenex systems.) The most common usage is "ispell filename". In this case, .I ispell will display each word which does not appear in the dictionary at the top of the screen and allow you to change it. If there are "near misses" in the dictionary (words which differ by only a single letter, a missing or extra letter, a pair of transposed letters, or a missing space or hyphen), then they are also displayed on following lines. As well as "near misses", ispell may display other guesses at ways to make the word from a known root, with each guess preceded by question marks. Finally, the line containing the word and the previous line are printed at the bottom of the screen. If your terminal can display in reverse video, the word itself is highlighted. You have the option of replacing the word completely, or choosing one of the suggested words. Commands are single characters as follows (case is ignored): .PP .RS .IP R Replace the misspelled word completely. .IP Space Accept the word this time only. .IP A Accept the word for the rest of this .I ispell session. .IP I Accept the word, capitalized as it is in the file, and update private dictionary. .IP U Accept the word, and add an uncapitalized (actually, all lower-case) version to the private dictionary. .IP 0-\fIn\fR Replace with one of the suggested words. .IP L Look up words in system dictionary (controlled by the WORDS compilation option). .IP X Write the rest of this file, ignoring misspellings, and start next file. .IP Q Exit immediately and leave the file unchanged. .IP ! Shell escape. .IP ^L Redraw screen. .IP ^Z Suspend ispell. .IP ? Give help screen. .RE .PP If the .B \-M switch is specified, a one-line mini-menu at the bottom of the screen will summarize these options. Conversely, the .B \-N switch may be used to suppress the mini-menu. (The minimenu is displayed by default if .I ispell was compiled with the MINIMENU option, but these two switches will always override the default). .PP If the .B \-L flag is given, the specified number is used as the number of lines of context to be shown at the bottom of the screen (The default is to calculate the amount of context as a certain percentage of the screen size). The amount of context is subject to a system-imposed limit. .PP If the .B \-V flag is given, characters that are not in the 7-bit ANSI printable character set will always be displayed in the style of "cat -v", even if .I ispell thinks that these characters are legal ISO Latin-1 on your system. This is useful when working with older terminals. Without this switch, .I ispell will display 8-bit characters "as is" if they have been defined as string characters for the chosen file type. .PP "Normal" mode, as well as the .BR \-l , .BR \-a , and .B \-A options and interactive mode (see below) also accepts the following "common" flags on the command line: .RS .IP \fB\-t\fR The input file is in TeX or LaTeX format. .IP \fB\-n\fR The input file is in nroff/troff format. .IP \fB\-H\fR The input file is in SGML/HTML format. (This should really be .BR \-s , but for historical reasons that flag was already taken.) .IP \fB\-o\fR The input file should be treated as ordinary text. (This could be used to override DEFTEXFLAG.) .IP \fB\-b\fR Create a backup file by appending "!!BAKEXT!!" to the name of the input file. .IP \fB\-x\fR Delete the backup file after spell-checking is finished. .IP \fB\-B\fR Report run-together words with missing blanks as spelling errors. .IP \fB\-C\fR Consider run-together words as legal compounds. .IP \fB\-P\fR Don't generate extra root/affix combinations. .IP \fB\-m\fR Make possible root/affix combinations that aren't in the dictionary. .IP \fB\-S\fR Sort the list of guesses by probable correctness. .IP "\fB\-d\fR file" Specify an alternate dictionary file. For example, use .B "\-d deutsch" to choose a German dictionary in a German installation. .IP "\fB\-p\fR file" Specify an alternate personal dictionary. .IP "\fB\-w\fR chars" Specify additional characters that can be part of a word. .IP "\fB\-W\fR n" Specify length of words that are always legal. .IP "\fB-T\fR type" Assume a given formatter type for all files. .RE .PP The .BR \-H , .BR \-n , .BR \-t , and .B \-o options select whether .I ispell runs in HTML .RB ( \-H ), nroff/troff .RB ( \-n ), TeX/LaTeX .RB ( \-t ), or ordinary text .RB ( \-o ) input mode. mode. (The default mode is controlled by the DEFTEXFLAG installation option, but is normally nroff/troff mode for historical reasons.) Unless overridden by one of the mode-selection switches, TeX/LaTeX mode is automatically selected if an input file has the extension ".tex", and HTML mode is automatically selected if an input file has the extension ".html" or ".htm". .PP In HTML mode, HTML tags delimited by <> signs are skipped, except that the "ALT=" construct is recognized if it appears with no spaces around the equals sign, and the text inside is spell-checked. .PP In TeX/LaTeX mode, whenever a backslash ("\e") is found, .I ispell will skip to the next whitespace or TeX/LaTeX delimiter. Certain commands contain arguments which should not be checked, such as labels and reference keys as are found in the \ecite command, since they contain arbitrary, non-word arguments. Spell checking is also suppressed when in math mode. Thus, for example, given .PP .RS \echapter {This is a Ckapter} \ecite{SCH86} .RE .PP .I ispell will find "Ckapter" but not "SCH". The .B \-t option does not recognize the TeX comment character "%", so comments are also spell-checked. It also assumes correct LaTeX syntax. Arguments to infrequently used commands and some optional arguments are sometimes checked unnecessarily. The bibliography will not be checked if .I ispell was compiled with .B IGNOREBIB defined. Otherwise, the bibliography will be checked but the reference key will not. .PP References for the !!TIB_XREF!! bibliography system, that is, text between a ``[.'' or ``<.'' and ``.]'' or ``.>'' will always be ignored in TeX/LaTeX mode. .PP The .B \-b and .B \-x options control whether .I ispell leaves a backup (!!BAKEXT!!) file for each input file. The !!BAKEXT!! file contains the pre-corrected text. If there are file opening / writing errors, the !!BAKEXT!! file may be left for recovery purposes even with the .B \-x option. The default for this option is controlled by the DEFNOBACKUPFLAG installation option. .PP The .B \-B and .B \-C options control how .I ispell handles run-together words, such as "notthe" for "not the". If .B \-B is specified, such words will be considered as errors, and .I ispell will list variations with an inserted blank or hyphen as possible replacements. If .B \-C is specified, run-together words will be considered to be legal compounds, so long as both components are in the dictionary, and each component is at least as long as a language-dependent minimum (3 characters, by default). This is useful for languages such as German and Norwegian, where many compound words are formed by concatenation. (Note that compounds formed from three or more root words will still be considered errors). The default for this option is language-dependent; in a multi-lingual installation the default may vary depending on which dictionary you choose. .B Warning: the .B \-C option can cause .I ispell to recognize non-words and misspellings. Use it with caution! .PP The .B \-P and .B \-m options control when .I ispell automatically generates suggested root/affix combinations for possible addition to your personal dictionary. (These are the entries in the "guess" list which are preceded by question marks.) If .B \-P is specified, such guesses are displayed only if .I ispell cannot generate any possibilities that match the current dictionary. If .B \-m is specified, such guesses are always displayed. This can be useful if the dictionary has a limited word list, or a word list with few suffixes. However, you should be careful when using this option, as it can generate guesses that produce illegal words. The default for this option is controlled by the dictionary file used. .PP The .B \-S option suppresses .IR ispell "'s" normal behavior of sorting the list of possible replacement words. Some people may prefer this, since it somewhat enhances the probability that the correct word will be low-numbered. .PP The .B \-d option is used to specify an alternate hashed dictionary file, other than the default. If the filename does not contain a "/", the library directory for the default dictionary file is prefixed; thus, to use a dictionary in the local directory "-d ./xxx.hash" must be used. This is useful to allow dictionaries for alternate languages. Unlike previous versions of .IR ispell , a dictionary of .IR /dev/null is illegal, because the dictionary contains the affix table. If you need an effectively empty dictionary, create a one-entry list with an unlikely string (e.g., "qqqqq"). .PP The .B \-p option is used to specify an alternate personal dictionary file. If the file name does not begin with "/", $HOME is prefixed. Also, the shell variable WORDLIST may be set, which renames the personal dictionary in the same manner. The command line overrides any WORDLIST setting. If neither the .B \-p switch nor the WORDLIST environment variable is given, .I ispell will search for a personal dictionary in both the current directory and $HOME, creating one in $HOME if none is found. The preferred name is constructed by appending ".ispell_" to the base name of the hash file. For example, if you use the English dictionary, your personal dictionary would be named ".ispell_english". However, if the file ".ispell_words" exists, it will be used as the personal dictionary regardless of the language hash file chosen. This feature is included primarily for backwards compatibility. .PP If the .B \-p option is .I not specified, .I ispell will look for personal dictionaries in both the current directory and the home directory. If dictionaries exist in both places, they will be merged. If any words are added to the personal dictionary, they will be written to the current directory if a dictionary already existed in that place; otherwise they will be written to the dictionary in the home directory. .PP The .B \-w option may be used to specify characters other than alphabetics which may also appear in words. For instance, .B \-w "&" will allow "AT&T" to be picked up. Underscores are useful in many technical documents. There is an admittedly crude provision in this option for 8-bit international characters. Non-printing characters may be specified in the usual way by inserting a backslash followed by the octal character code; e.g., "\e014" for a form feed. Alternatively, if "n" appears in the character string, the (up to) three characters following are a DECIMAL code 0 - 255, for the character. For example, to include bells and form feeds in your words (an admittedly silly thing to do, but aren't most pedagogical examples): .PP .RS n007n012 .RE .PP Numeric digits other than the three following "n" are simply numeric characters. Use of "n" does not conflict with anything because actual alphabetics have no meaning - alphabetics are already accepted. .I Ispell will typically be used with input from a file, meaning that preserving parity for possible 8 bit characters from the input text is OK. If you specify the -l option, and actually type text from the terminal, this may create problems if your stty settings preserve parity. .PP It is not possible to use .B \-w with certain characters. In particular, the flag-marker character for the language (defined in the affix file, but usually "/") can never be made into a word character. .PP The .B \-W option may be used to change the length of words that .I ispell always accepts as legal. Normally, .I ispell will accept all 1-character words as legal, which is equivalent to specifying "\fB\-W 1\fR." (The default for this switch is actually controlled by the MINWORD installation option, so it may vary at your installation.) If you want all words to be checked against the dictionary, regardless of length, you might want to specify "\fB\-W 0\fR." On the other hand, if your document specifies a lot of three-letter acronyms, you would specify "\fB\-W 3\fR" to accept all words of three letters or less. Regardless of the setting of this option, .I ispell will only generate words that are in the dictionary as suggested replacements for words; this prevents the list from becoming too long. Obviously, this option can be very dangerous, since short misspellings may be missed. If you use this option a lot, you should probably make a last pass without it before you publish your document, to protect yourself against errors. .PP The .B \-T option is used to specify a default formatter type for use in generating string characters. This switch overrides the default type determined from the file name. The .I type argument may be either one of the unique names defined in the language affix file (e.g., .BR nroff ) or a file suffix including the dot (e.g., .BR .tex ). If no .B \-T option appears and no type can be determined from the file name, the default string character type declared in the language affix file will be used. .PP The .B \-k option is used to enhance the behavior of certain deformatters. The .I name parameter gives the name of a deformatter keyword set (see below), and the .I list parameter gives a list of one or more keywords that are to be treated specially. If .I list begins with a plus (+) sign, it is added to the existing keywords; otherwise it replaces the existing keyword list. For example, .B "\-ktexskip1 +bibliographystyle" adds "bibliographystyle" to the TeX skip-1 list, while .B "\-khtmlignore pre,strong" replaces the HTML ignore list with "pre" and "strong". The lists available are: .IP texskip1 TeX/LaTeX commands that take a single argument that should not be spell-checked, such as "bibliographystyle". The default is "end", "vspace", "hspace", "cite", "ref", "parbox", "label", "input", "nocite", "include", "includeonly", "documentstyle", "documentclass", "usepackage", "selectlanguage", "pagestyle", "pagenumbering", "hyphenation", "pageref", and "psfig", plus "bibliography" in some installations. These keywords are case-sensitive. .IP texskip2 TeX/LaTeX commands that take two arguments that should not be spell-checked, such as "setlength". The default is "rule", "setcounter", "addtocounter", "setlength", "addtolength", and "settowidth". These keywords are case-sensitive. .IP htmlignore HTML tags that delimit text that should not be spell-checked until the matching end tag is reached. The default is "code", "samp", "kbd", "pre", "listing", and "address". These keywords are case-insensitive. (Note that the content inside HTML tags, such as HREF=, is not normally checked.) .IP htmlcheck Subfields that should be spell-checked even inside HTML tags. The default is "alt", so that the ALT= portion of IMG tags will be spell-checked. These keywords are case-insensitive. .PP All of the above keyword lists can also be modified by environment variables whose names are the same as above, except in uppercase, e.g., TEXSKIP1. The .B \-k switch overrides (or adds to) the environment variables, and the environment variables override or add to the built-in defaults. .PP The .B \-F switch specifies an external deformatter program. This program should read data from its standard input and write to its standard output. The program .I must produce exactly one character of output for each character of input, or ispell will lose synchronization and corrupt the output file. Whitespace characters (especially blanks, tabs, and newlines) and characters that should be spell-checked should be passed through unchanged. Characters that should not be spell-checked should be converted into blanks or other non-word characters. For example, an HTML deformatter might turn all HTML tags into blanks, and also blank out all text delimited by tags such as "code" or "kbd". .PP The .B \-F switch is the preferred way to deformat files for ispell, and eventually will become the only way. .PP If .I ispell is invoked without any filenames or mode switches, it enters an interactive mode designed to let the user check the spelling of individual words. The program repeatedly prompts on standard output with "word:" and responds with either "ok" (possibly with commentary), "not found", or "how about" followed by a list of suggestions. .PP The .B \-l or "list" option to .I ispell is used to produce a list of misspelled words from the standard input. .PP The .B \-a option is intended to be used from other programs through a pipe. In this mode, .I ispell prints a one-line version identification message, and then begins reading lines of input. For each input line, a single line is written to the standard output for each word checked for spelling on the line. If the word was found in the main dictionary, or your personal dictionary, then the line contains only a '*'. If the word was found through affix removal, then the line contains a '+', a space, and the root word. If the word was found through compound formation (concatenation of two words, controlled by the .B \-C option), then the line contains only a '\-'. .PP If the word is not in the dictionary, but there are near misses, then the line contains an '&', a space, the misspelled word, a space, the number of near misses, the number of characters between the beginning of the line and the beginning of the misspelled word, a colon, another space, and a list of the near misses separated by commas and spaces. Following the near misses (and identified only by the count of near misses), if the word could be formed by adding (illegal) affixes to a known root, is a list of suggested derivations, again separated by commas and spaces. If there are no near misses at all, the line format is the same, except that the '&' is replaced by '?' (and the near-miss count is always zero). The suggested derivations following the near misses are in the form: .PP .RS [prefix+] root [-prefix] [-suffix] [+suffix] .RE .PP (e.g., "re+fry-y+ies" to get "refries") where each optional .I pfx and .I sfx is a string. Also, each near miss or guess is capitalized the same as the input word unless such capitalization is illegal; in the latter case each near miss is capitalized correctly according to the dictionary. .PP Finally, if the word does not appear in the dictionary, and there are no near misses, then the line contains a '#', a space, the misspelled word, a space, and the character offset from the beginning of the line. Each sentence of text input is terminated with an additional blank line, indicating that .I ispell has completed processing the input line. .PP These output lines can be summarized as follows: .PP .RS .IP OK: * .IP Root: + .IP Compound: \- .IP Miss: & : , , ..., , ... .IP Guess: ? 0 : , , ... .IP None: # .RE .PP For example, a dummy dictionary containing the words "fray", "Frey", "fry", and "refried" might produce the following response to the command "echo 'frqy refries | ispell -a -m -d ./test.hash": .RS .nf (#) International Ispell Version 3.0.05 (beta), 08/10/91 & frqy 3 0: fray, Frey, fry & refries 1 5: refried, re+fry-y+ies .fi .RE .PP This mode is also suitable for interactive use when you want to figure out the spelling of a single word. .PP The .B \-A option works just like .BR \-a , except that if a line begins with the string "&Include_File&", the rest of the line is taken as the name of a file to read for further words. Input returns to the original file when the include file is exhausted. Inclusion may be nested up to five deep. The key string may be changed with the environment variable .B INCLUDE_STRING (the ampersands, if any, must be included). .PP When in the .B \-a mode, .I ispell will also accept lines of single words prefixed with any of '*', '&', '@', '+', '-', '~', '#', '!', '%', '`', or '^'. A line starting with '*' tells .I ispell to insert the word into the user's dictionary (similar to the I command). A line starting with '&' tells .I ispell to insert an all-lowercase version of the word into the user's dictionary (similar to the U command). A line starting with '@' causes .I ispell to accept this word in the future (similar to the A command). A line starting with '+', followed immediately by .B tex or .B nroff will cause .I ispell to parse future input according the syntax of that formatter. A line consisting solely of a '+' will place .I ispell in TeX/LaTeX mode (similar to the .B \-t option) and '-' returns .I ispell to nroff/troff mode (but these commands are obsolete). However, the string character type is .I not changed; the '~' command must be used to do this. A line starting with '~' causes .I ispell to set internal parameters (in particular, the default string character type) based on the filename given in the rest of the line. (A file suffix is sufficient, but the period must be included. Instead of a file name or suffix, a unique name, as listed in the language affix file, may be specified.) However, the formatter parsing is .I not changed; the '+' command must be used to change the formatter. A line prefixed with '#' will cause the personal dictionary to be saved. A line prefixed with '!' will turn on .I terse mode (see below), and a line prefixed with '%' will return .I ispell to normal (non-terse) mode. A line prefixed with '`' will turn on verbose-correction mode (see below); this mode can only be disabled by turning on terse mode with '%'. .PP Any input following the prefix characters '+', '-', '#', '!', '%', or '`' is ignored, as is any input following the filename on a '~' line. To allow spell-checking of lines beginning with these characters, a line starting with '^' has that character removed before it is passed to the spell-checking code. It is recommended that programmatic interfaces prefix every data line with an uparrow to protect themselves against future changes in .IR ispell . .PP To summarize these: .PP .RS .IP * Add to personal dictionary .IP @ Accept word, but leave out of dictionary .IP # Save current personal dictionary .IP ~ Set parameters based on filename .IP + Enter TeX mode .IP - Exit TeX mode .IP ! Enter terse mode .IP % Exit terse mode .IP "`" Enter verbose-correction mode .IP ^ Spell-check rest of line .fi .RE .PP In .I terse mode, .I ispell will not print lines beginning with '*', '+', or '\-', all of which indicate correct words. This significantly improves running speed when the driving program is going to ignore correct words anyway. .PP In .I verbose-correction mode, .I ispell includes the original word immediately after the indicator character in output lines beginning with '*', '+', and '\-', which simplifies interaction for some programs. .PP The .B \-s option is only valid in conjunction with the .B \-a or .B \-A options, and only on BSD-derived systems. If specified, .I ispell will stop itself with a .B SIGTSTP signal after each line of input. It will not read more input until it receives a .B SIGCONT signal. This may be useful for handshaking with certain text editors. .PP The .B \-f option is only valid in conjunction with the .B \-a or .B \-A options. If .B \-f is specified, .I ispell will write its results to the given file, rather than to standard output. .PP The .B \-v option causes .I ispell to print its current version identification on the standard output and exit. If the switch is doubled, .I ispell will also print the options that it was compiled with. .PP The .BR \-c , .BR \-e [ 1-5 ], and .B \-D options of .IR ispell , are primarily intended for use by the .I munchlist shell script. The .B \-c switch causes a list of words to be read from the standard input. For each word, a list of possible root words and affixes will be written to the standard output. Some of the root words will be illegal and must be filtered from the output by other means; the .I munchlist script does this. As an example, the command: .PP .RS echo BOTHER | ispell -c .RE .PP produces: .PP .RS .nf BOTHER BOTHE/R BOTH/R .fi .RE .PP The .B \-e switch is the reverse of .BR \-c ; it expands affix flags to produce a list of words. For example, the command: .PP .RS echo BOTH/R | ispell -e .RE .PP produces: .PP .RS .nf BOTH BOTHER .fi .RE .PP An optional expansion level can also be specified. A level of 1 .RB ( \-e1 ) is the same as .B \-e alone. A level of 2 causes the original root/affix combination to be prepended to the line: .PP .RS .nf BOTH/R BOTH BOTHER .fi .RE .PP A level of 3 causes multiple lines to be output, one for each generated word, with the original root/affix combination followed by the word it creates: .PP .RS .nf BOTH/R BOTH BOTH/R BOTHER .fi .RE .PP A level of 4 causes a floating-point number to be appended to each of the level-3 lines, giving the ratio between the length of the root and the total length of all generated words including the root: .PP .RS .nf BOTH/R BOTH 2.500000 BOTH/R BOTHER 2.500000 .fi .RE .PP A level of 5 causes multiple lines to be output, one for each generated word. If the generated word did not use any affixes, the line is just that word. If one or more affixes were used, the original root and the affixes actually used are printed, joined by a plus sign; then the generated word is printed: .PP .RS .nf BOTH BOTH+R BOTHER .fi .RE .PP Finally, the .B \-D flag causes the affix tables from the dictionary file to be dumped to standard output. .PP .I Ispell is aware of the correct capitalizations of words in the dictionary and in your personal dictionary. As well as recognizing words that must be capitalized (e.g., George) and words that must be all-capitals (e.g., NASA), it can also handle words with "unusual" capitalization (e.g., "ITCorp" or "TeX"). If a word is capitalized incorrectly, the list of possibilities will include all acceptable capitalizations. (More than one capitalization may be acceptable; for example, my dictionary lists both "ITCorp" and "ITcorp".) .PP Normally, this feature will not cause you surprises, but there is one circumstance you need to be aware of. If you use "I" to add a word to your dictionary that is at the beginning of a sentence (e.g., the first word of this paragraph if "normally" were not in the dictionary), it will be marked as "capitalization required". A subsequent usage of this word without capitalization (e.g., the quoted word in the previous sentence) will be considered a misspelling by .IR ispell , and it will suggest the capitalized version. You must then compare the actual spellings by eye, and then type "I" to add the uncapitalized variant to your personal dictionary. You can avoid this problem by using "U" to add the original word, rather than "I". .PP The rules for capitalization are as follows: .IP (1) Any word may appear in all capitals, as in headings. .IP (2) Any word that is in the dictionary in all-lowercase form may appear either in lowercase or capitalized (as at the beginning of a sentence). .IP (3) Any word that has "funny" capitalization (i.e., it contains both cases and there is an uppercase character besides the first) must appear exactly as in the dictionary, except as permitted by rule (1). If the word is acceptable in all-lowercase, it must appear thus in a dictionary entry. .SS buildhash .PP The .I buildhash program builds hashed dictionary files for later use by .I ispell. The raw word list (with affix flags) is given in .IR dict-file , and the the affix flags are defined by .IR affix-file . The hashed output is written to .IR hash-file . The formats of the two input files are described in .IR ispell (!!MAN45SECT!!). The .B \-s (silent) option suppresses the usual status messages that are written to the standard error device. .SS munchlist .PP The .I munchlist shell script is used to reduce the size of dictionary files, primarily personal dictionary files. It is also capable of combining dictionaries from various sources. The given .I files are read (standard input if no arguments are given), reduced to a minimal set of roots and affixes that will match the same list of words, and written to standard output. .PP Input for munchlist contains of raw words (e.g from your personal dictionary files) or root and affix combinations (probably generated in earlier munchlist runs). Each word or root/affix combination must be on a separate line. .PP The .B \-D (debug) option leaves temporary files around under standard names instead of deleting them, so that the script can be debugged. Warning: on a multiuser system, this can be a security hole. To avoid possible destruction of important files, don't run the script as root, and set MUNCHDEBUGDIR to the name of a directory that only you can access. .PP The .B \-v (verbose) option causes progress messages to be reported to stderr so you won't get nervous that .I munchlist has hung. .PP If the .B \-s (strip) option is specified, words that are in the specified .I hash-file are removed from the word list. This can be useful with personal dictionaries. .PP The .B \-l option can be used to specify an alternate .I affix-file for munching dictionaries in languages other than English. .PP The .B \-c option can be used to convert dictionaries that were built with an older affix file, without risk of accidentally introducing unintended affix combinations into the dictionary. .PP The .B \-T option allows dictionaries to be converted to a canonical string-character format. The suffix specified is looked up in the affix file .RB ( \-l switch) to determine the string-character format used for the input file; the output always uses the canonical string-character format. For example, a dictionary collected from TeX source files might be converted to canonical format by specifying .BR "\-T tex" . .PP The .B \-w option is passed on to .IR ispell . .SS findaffix .PP The .I findaffix shell script is an aid to writers of new language descriptions in choosing affixes. The given dictionary .I files (standard input if none are given) are examined for possible prefixes .RB ( \-p switch) or suffixes .RB ( \-s switch, the default). Each commonly-occurring affix is presented along with a count of the number of times it appears and an estimate of the number of bytes that would be saved in a dictionary hash file if it were added to the language table. Only affixes that generate legal roots (found in the original input) are listed. .PP If the "-c" option is not given, the output lines are in the following format: .IP strip/add/count/bytes .PP where .I strip is the string that should be stripped from a root word before adding the affix, .I add is the affix to be added, .I count is a count of the number of times that this .IR strip / add combination appears, and .I bytes is an estimate of the number of bytes that might be saved in the raw dictionary file if this combination is added to the affix file. The field separator in the output will be the tab character specified by the .B -t switch; the default is a slash ("/"). .PP If the .B \-c ("clean output") option is given, the appearance of the output is made visually cleaner (but harder to post-process) by changing it to: .IP -strip+addcountbytes .PP where .IR strip , .IR add , .IR count , and .I bytes are as before, and .I "" represents the ASCII tab character. .PP The method used to generate possible affixes will also generate longer affixes which have common headers or trailers. For example, the two words "moth" and "mother" will generate not only the obvious substitution "+er" but also "-h+her" and "-th+ther" (and possibly even longer ones, depending on the value of .IR min ). To prevent cluttering the output with such affixes, any affix pair that shares a common header (or, for prefixes, trailer) string longer than .I elim characters (default 1) will be suppressed. You may want to set "elim" to a value greater than 1 if your language has string characters; usually the need for this parameter will become obvious when you examine the output of your .I findaffix run. .PP Normally, the affixes are sorted according to the estimate of bytes saved. The .B \-f switch may be used to cause the affixes to be sorted by frequency of appearance. .PP To save output file space, affixes which occur fewer than 10 times are eliminated; this limit may be changed with the .B \-l switch. The .B \-M switch specifies a maximum affix length (default 8). Affixes longer than this will not be reported. (This saves on temporary disk space and makes the script run faster.) .PP Affixes which generate stems shorter than 3 characters are suppressed. (A stem is the word after the .I strip string has been removed, and before the .I add string has been added.) This reduces both the running time and the size of the output file. This limit may be changed with the .B \-m switch. The minimum stem length should only be set to 1 if you have a .I lot of free time and disk space (in the range of many days and hundreds of megabytes). .PP The .I findaffix script requires a non-blank field-separator character for internal use. Normally, this character is a slash ("/"), but if the slash appears as a character in the input word list, a different character can be specified with the .B \-t switch. .PP Ispell dictionaries should be expanded before being fed to .IR findaffix ; in addition, characters that are not in the English alphabet (if any) should be translated to lowercase. .SS tryaffix .PP The .I tryaffix shell script is used to estimate the effectiveness of a proposed prefix .RB ( \-p switch) or suffix .RB ( \-s switch, the default) with a given .IR expanded-file . Only one affix can be tried with each execution of .IR tryaffix , although multiple arguments can be used to describe varying forms of the same affix flag (e.g., the .B D flag for English can add either .I D or .I ED depending on whether a trailing E is already present). Each word in the expanded dictionary that ends (or begins) with the chosen suffix (or prefix) has that suffix (prefix) removed; the dictionary is then searched for root words that match the stripped word. Normally, all matching roots are written to standard output, but if the .B \-c (count) flag is given, only a statistical summary of the results is written. The statistics given are a count of words the affix potentially applies to and an estimate of the number of dictionary bytes that a flag using the affix would save. The estimate will be high if the flag generates words that are currently generated by other affix flags (e.g., in English, .I bathers can be generated by either .I bath/X or .IR bather/S ). .P The dictionary file, .IR expanded-file , must already be expanded (using the .B \-e switch of .IR ispell ) and sorted, and things will usually work best if uppercase has been folded to lower with 'tr'. .PP The .I affix arguments are things to be stripped from the dictionary file to produce trial roots: for English, .I con (prefix) and .I ing (suffix) are examples. The .I addition parts of the argument are letters that would have been stripped off the root before adding the affix. For example, in English the affix .I ing normally strips .I e for words ending in that letter (e.g., .I like becomes .IR liking ) so we might run: .PP .RS .nf tryaffix ing ing+e .fi .RE .PP to cover both cases. .PP All of the shell scripts contain documentation as commentary at the beginning; sometimes these comments contain useful information beyond the scope of this manual page. .PP It is possible to install .I ispell in such a way as to only support ASCII range text if desired. .SS icombine The .I icombine program is a helper for .IR munchlist . It reads a list of words in dictionary format (roots plus flags) from the standard input, and produces a reduced list on standard output which combines common roots found on adjacent entries. Identical roots which have differing flags will have their flags combined, and roots which have differing capitalizations will be combined in a way which only preserves important capitalization information. The optional .I aff-file specifies a language file which defines the character sets used and the meanings of the various flags. The .B \-T switch can be used to select among alternative string character types by giving a dummy suffix that can be found in an .B altstringtype statement. The .B \-w switch is identical to the same switch in .IR ispell . .SS ijoin The .I ijoin program is a re-implementation of .IR join (1) which handles long lines and 8-bit characters correctly. The .B \-s switch specifies that the .IR sort (1) program used to prepare the input to .I ijoin uses signed comparisons on 8-bit characters; the .B \-u switch specifies that .IR sort (1) uses unsigned comparisons. All other options and behaviors of .IR join (1) are duplicated as exactly as possible based on the manual page, except that .I ijoin will not handle newline as a field separator. See the .IR join (1) manual page for more information. .SH ENVIRONMENT .IP DICTIONARY Default dictionary to use, if no .B \-d flag is given. .IP ISPELL_CHARSET Formatter type or character encoding to use, if none is chosen by a flag option. .IP WORDLIST Personal dictionary file name .IP INCLUDE_STRING Code for file inclusion under the .B \-A option .IP TMPDIR Directory used for some of munchlist's temporary files .IP MUNCHDEBUGDIR Directory used to hold the output of munchlists' .B \-D option. .IP TEXSKIP1 List of single-argument TeX keywords that .I ispell should ignore. .IP TEXSKIP2 List of two-argument TeX keywords that .I ispell should ignore. .IP HTMLIGNORE List of HTML keywords that delimit text that should not be spell-checked. .IP HTMLCHECK List of HTML fields that should always be spell-checked, even inside a tag. .SH FILES .IP !!LIBDIR!!/!!DEFHASH!! Hashed dictionary (may be found in some other local directory, depending on the system). .IP !!LIBDIR!!/!!DEFLANG!! Affix-definition file for .I munchlist .IP !!WORDS!! For the Lookup function. .IP $HOME/.ispell_\fIhashfile\fP User's private dictionary .IP .ispell_\fIhashfile\fP Directory-specific private dictionary .SH SEE ALSO .IR egrep (1), !!LOOK_XREF!! .IR join (1), .IR sort (1), !!SPELL_XREF!! .IR sq (1), !!TIB_XREF!! .IR ispell (!!MAN45SECT!!), .IR english (!!MAN45SECT!!) .SH BUGS On some machines it takes too long for .I ispell to read in the hash table, depending on size. .sp When all options are enabled, .I ispell may take several seconds to generate all the guesses at corrections for a misspelled word; on slower machines this time is long enough to be annoying. .sp The hash table is stored as a quarter-megabyte (or larger) array, so a PDP-11 or 286 version does not seem likely. .sp .I Ispell should understand more .I troff syntax, and deal more intelligently with contractions. .sp Although small personal dictionaries are sorted before they are written out, the order of capitalizations of the same word is somewhat random. .sp When the .B \-x flag is specified, .I ispell will unlink any existing !!BAKEXT!! file. .sp There are too many flags, and many of them have non-mnemonic names. .sp The .B \-e flag should accept mnemonic arguments instead of numeric ones. .sp .I Munchlist does not deal very gracefully with dictionaries which contain "non-word" characters. Such characters ought to be deleted from the dictionary with a warning message. .sp .I Findaffix and .I munchlist require tremendous amounts of temporary file space for large dictionaries. They do respect the TMPDIR environment variable, so this space can be redirected. However, a lot of the temporary space needed is for sorting, so TMPDIR is only a partial help on systems with an uncooperative .IR sort (1). ("Cooperative" is defined as accepting the undocumented -T switch). At its peak usage, .I munchlist takes 10 to 40 times the original dictionary's size in Kb. (The larger ratio is for dictionaries that already have heavy affix use, such as the one distributed with .IR ispell ). .I Munchlist is also very slow; munching a normal-sized dictionary (15K roots, 45K expanded words) takes around an hour on a small workstation. (Most of this time is spent in .IR sort (1), and .I munchlist can run much faster on machines that have a more modern .I sort that makes better use of the memory available to it.) .I Findaffix is even worse; the smallest English dictionary cannot be processed with this script in a mere 50Kb of free space, and even after specifying switches to reduce the temporary space required, the script will run for over 24 hours on a small workstation. .SH AUTHOR Pace Willisson (pace@mit-vax), 1983, based on the PDP-10 assembly version. That version was written by R. E. Gorin in 1971, and later revised by W. E. Matson (1974) and W. B. Ackerman (1978). .P Collected, revised, and enhanced for the Usenet by Walt Buehring, 1987. .P Table-driven multi-lingual version by Geoff Kuenning, 1987-88. .P Large dictionaries provided by Bob Devine (vianet!devine). .P A complete list of contributors is too large to list here, but is distributed with the .I ispell sources in the file "Contributors". .SH VERSION The version of .I ispell described by this manual page is !!VERSION!!. ispell-3.4.00/PaxHeaders.19408/Magiclines0000644000000000000000000000007410227500137014630 xustar0030 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/Magiclines0000444003214100001440000000636410227500137015701 0ustar00geofffaculty00000000000000# # $Id: Magiclines,v 1.13 2005/04/14 14:38:23 geoff Exp $ # # Copyright 1993, 1999, 2001, 2002, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # The following lines can be inserted into /etc/magic or # /usr/lib/file/magic so that "file" will recognize ispell hash files. # On some systems, these lines will need modification. The most # common modifications involve turning the magic number into a 16-bit # integer (0x9602). Some systems (e.g., Ultrix) may require an extra # field to be added; see the documentation or comments for your magic # file for more information. # # $Log: Magiclines,v $ # Revision 1.13 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.12 2001/12/26 05:55:04 geoff # Get rid of obsolete options # # Revision 1.11 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.10 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.9 1999/01/07 01:57:49 geoff # Update the copyright. # # Revision 1.8 1995/01/08 23:23:52 geoff # Add comments that document minor variations in /etc/magic formats. # # Revision 1.7 1994/01/25 07:11:10 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # 0 short 0xffff9602 ispell 3.x hash file >2 short 0x03 - 8-bit, capitalization, 26 flags >2 short 0x07 - 8-bit, capitalization, 52 flags >2 short 0x0B - 8-bit, capitalization, 128 flags >2 short 0x0F - 8-bit, capitalization, 256 flags >4 short >0 and %d string characters ispell-3.4.00/PaxHeaders.19408/ijoin.c0000644000000000000000000000007410227500137014106 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/ijoin.c0000444003214100001440000003577610227500137015170 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: ijoin.c,v 1.12 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * "Join" command for ispell. * * This command is a complete reimplementation of the UNIX "join" * command, except that fields cannot be separated by a newline, it * can handle lines of unlimited length, and the preceding sort can * treat characters as either signed or unsigned. * * Usage: * * ijoin [options] file1 file2 * * See the UNIX "join" manual page for option descriptions. Only * nonstandard options are described here. * * Either file1 or file2 may be "-", in which case the standard input * is used for that file. * * Normally, ijoin uses "strcmp" to compare fields. This is the * correct thing to do on most systems if you are using the * system-provided "sort" command to sort the input files before * feeding them to ijoin. In some cases, however, the sort command * you use will disagree with strcmp about how to handle characters * with the high bit set. If this is the case, you can specify the * "-s" (signed comparisons) or "-u" (unsigned comparisons) option to * force ijoin to conform to the method used by the sort program. * This is only necessary if one of the input files contains 8-bit * characters in the field that is being joined on. * * On some older machines with non-ANSI compilers, the "-s" option * will be ineffective because characters default to unsigned. * However, this option should be unnecessary on those machines, so no * harm will be done. */ /* * $Log: ijoin.c,v $ * Revision 1.12 2005/04/14 14:38:23 geoff * Update license. Integrate Ed Avis's changes (making certain things * unsigned). * * Revision 1.11.1.1 2002/06/21 00:35:54 geoff * Edward Avis's changes * * Revision 1.2 2001/10/05 14:22:25 epa98 * Imported 3.2.06.epa1 release. This was previously developed using * sporadic RCS for certain files, but I'm not really bothered about * rolling back beyond this release. * * Revision 1.11 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.10 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.9 2001/06/07 19:06:33 geoff * Add a workaround for the strcmp-as-macro problem found on recent * releases of gcc. * * Revision 1.8 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.7 1999/01/07 01:58:00 geoff * Update the copyright. * * Revision 1.6 1994/10/18 04:03:21 geoff * Fix a couple of bugs, one where the last field on a line could be * output incorrectly, and one where fields from the wrong file could be * output. * * Revision 1.5 1994/01/25 07:11:36 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "fields.h" #ifdef __STDC__ #define SIGNED signed #else /* __STDC */ #define SIGNED #endif /* __STDC */ int main P ((int argc, char * argv[])); /* Join files */ static void usage P ((void)); /* Issue a usage message */ static void dojoin P ((void)); /* Actually perform the join */ static void full_output P ((field_t * line1, field_t * line2)); /* Output everything from both lines */ static void selected_output P ((field_t * line1, field_t * line2)); /* Output selected fields */ static int strscmp P ((SIGNED char * a, SIGNED char * b)); /* Signed version of strcmp */ static int strucmp P ((unsigned char * a, unsigned char * b)); /* Unsigned version of strcmp */ typedef struct { int file; /* Number of file to output from */ unsigned int field; /* Number of field to output */ } outlist_t; /* Output description list */ /* * Some excessively "smart" compilers (for which you are welcome to * read "stupid compiler implementers") try to get clever about * strcmp, turning it into a macro in some circumstances. That breaks * things, since you then can't take the address of what is supposed * to be a library function. To be safe, we'll #undef any possible * macro here to get around that particular lack of foresight. */ #undef strcmp static int (*compare) () = strcmp; /* Comparison function */ static char * emptyfield = ""; /* Use this to replace empty fields */ static FILE * file1; /* First file to join */ static FILE * file2; /* Second file to join */ static unsigned int join1field = 0; /* Field to join file 1 on */ static unsigned int join2field = 0; /* Field to join file 2 on */ static unsigned int maxf[2] = {0, 0}; /* Max field to parse in each file */ static outlist_t * outlist = NULL; /* List of fields to write */ static int outlistsize; /* Number of elements in outlist */ static int runs = FLD_RUNS; /* Set if runs of tabchar same as 1 */ static char * tabchar = " \t"; /* Field separator character(s) */ static int unpairable1 = 0; /* NZ if -a1 */ static int unpairable2 = 0; /* NZ if -a2 */ extern int strcmp (); int main (argc, argv) /* Join files */ int argc; /* Argument count */ char * argv[]; /* Argument vector */ { while (argc > 3 && argv[1][0] == '-') { argc--; argv++; switch (argv[0][1]) { case 'a': /* produce output for unpairables */ if (argv[0][2] == '1') unpairable1 = 1; else if (argv[0][2] == '2') unpairable2 = 1; else if (argv[0][2] == '\0') unpairable1 = unpairable2 = 1; else usage (); break; case 'e': /* Replace empty fields with this */ argc--; argv++; emptyfield = *argv; break; case 'j': /* Specify field to join on */ if (argv[0][2] == '1') join1field = atoi (argv[1]) - 1; else if (argv[0][2] == '2') join2field = atoi (argv[1]) - 1; else if (argv[0][2] == '\0') join1field = join2field = atoi (argv[1]) - 1; else usage (); argc--; argv++; break; case 'o': /* Specify output list */ /* * We will assume that all remaining switch arguments * are used to describe the output list. This will * occasionally result in malloc'ing a few too many * elements, but no real harm will be done. */ outlist = (outlist_t *) malloc ((argc - 3) * sizeof (outlist_t)); if (outlist == NULL) { (void) fprintf (stderr, "ijoin: out of memory!\n"); return 1; } for (outlistsize = 0, argc--, argv++; argc > 2 && (argv[0][0] == '1' || argv[0][0] == '2') && argv[0][1] == '.'; argc--, argv++, outlistsize++) { outlist[outlistsize].file = argv[0][0] - '0'; outlist[outlistsize].field = atoi (&argv[0][2]) - 1; if (maxf[outlist[outlistsize].file - 1] <= outlist[outlistsize].field) maxf[outlist[outlistsize].file - 1] = outlist[outlistsize].field + 1; } argc++; /* Un-do arg that stopped us */ argv--; break; case 't': tabchar = &argv[0][2]; runs &= ~FLD_RUNS; break; case 's': compare = strscmp; break; case 'u': compare = strucmp; break; default: usage (); break; } } if (argc != 3) usage (); if (strcmp (argv[1], "-") == 0) file1 = stdin; else { file1 = fopen (argv[1], "r"); if (file1 == NULL) perror (argv[1]); } file2 = fopen (argv[2], "r"); if (file2 == NULL) perror (argv[2]); if (file1 == NULL || file2 == NULL) return 1; dojoin (); return 0; } static void usage () /* Issue a usage message */ { (void) fprintf (stderr, "Usage: ijoin [-an] [-e s] [-jn m] [-o n.m ...] [-tc] file1 file2\n"); exit (1); } static void dojoin () /* Actually perform the join */ { int comparison; /* Result of comparing the lines */ long file2pos; /* Position file 2 started at */ register field_t * line1; /* Line from file 1 */ register field_t * line2; /* Line from file 2 */ int pairable; /* NZ if lines can be paired */ int skip2; /* No. of "unpairable" 2's to skip */ runs |= FLD_NOSHRINK; /* Don't do excessive reallocations */ field_line_inc = BUFSIZ; /* Allocate line bfr in huge chunks */ line1 = fieldread (file1, tabchar, runs, maxf[0]); file2pos = ftell (file2); skip2 = 0; if (file2pos == -1) { (void) fprintf (stderr, "ijoin: Can't seek file "); perror ("2"); exit (1); } line2 = fieldread (file2, tabchar, runs, maxf[1]); while (line1 != NULL || line2 != NULL) { /* * Do a little work to reduce the number of calls to realloc, at * the expense of slightly-increased memory usage. */ if (line1 != NULL && line1->nfields >= field_field_inc) field_field_inc = line1->nfields + 1; if (line2 != NULL && line2->nfields >= field_field_inc) field_field_inc = line2->nfields + 1; /* * Determine if the lines can be paired. */ pairable = 1; if (line1 == NULL) { pairable = 0; comparison = 1; /* This causes file 2 to advance */ } else if (join1field >= line1->nfields) { pairable = 0; comparison = -1; /* This causes file 1 to advance */ } if (line2 == NULL) { pairable = 0; comparison = -1; /* This causes file 1 to advance */ } else if (join2field >= line2->nfields) { pairable = 0; comparison = 1; /* This causes file 2 to advance */ } if (pairable) { comparison = (*compare) (line1->fields[join1field], line2->fields[join2field]); pairable = (comparison == 0); } if (pairable) { /* * The two lines can be paired. Produce output. */ if (outlist == NULL) full_output (line1, line2); else selected_output (line1, line2); } /* * Advance through the files */ if (comparison < 0) { if (unpairable1) { if (outlist == NULL) (void) fieldwrite (stdout, line1, tabchar[0]); else selected_output (line1, (field_t *) NULL); } fieldfree (line1); line1 = fieldread (file1, tabchar, runs, maxf[0]); } else if (comparison > 0) { if (skip2 > 0) skip2--; else if (unpairable2) { if (outlist == NULL) (void) fieldwrite (stdout, line2, tabchar[0]); else selected_output ((field_t *) NULL, line2); } fieldfree (line2); file2pos = ftell (file2); line2 = fieldread (file2, tabchar, runs, maxf[1]); } else { /* * Here's the tricky part. We have to advance file 2 * until comparisons fail, and then back it up and advance * file 1. */ skip2++; fieldfree (line2); line2 = fieldread (file2, tabchar, runs, maxf[1]); if (line2 == NULL || join2field >= line2->nfields || (*compare) (line1->fields[join1field], line2->fields[join2field]) != 0) { (void) fseek (file2, file2pos, 0); fieldfree (line2); line2 = fieldread (file2, tabchar, runs, maxf[1]); fieldfree (line1); line1 = fieldread (file1, tabchar, runs, maxf[0]); if (line1 != NULL && line2 != NULL && join1field < line1->nfields && join2field < line2->nfields && (*compare) (line1->fields[join1field], line2->fields[join2field]) == 0) skip2 = 0; } } } } static void full_output (line1, line2) /* Output everything from both lines */ register field_t * line1; /* Line from file 1 */ register field_t * line2; /* Line from file 2 */ { register unsigned int fieldno; /* Number of field being handled */ (void) fputs (line1->fields[join1field], stdout); for (fieldno = 0; fieldno < line1->nfields; fieldno++) { if (fieldno == join1field) continue; (void) putchar (tabchar[0]); if (line1->fields[fieldno][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (line1->fields[fieldno], stdout); } for (fieldno = 0; fieldno < line2->nfields; fieldno++) { if (fieldno == join2field) continue; (void) putchar (tabchar[0]); if (line2->fields[fieldno][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (line2->fields[fieldno], stdout); } (void) putchar ('\n'); } static void selected_output (line1, line2) /* Output selected fields */ field_t * line1; /* Line from file 1 */ field_t * line2; /* Line from file 2 */ { register field_t * cline; /* Current line being handled */ register int listno; /* Number of output list entry */ for (listno = 0; listno < outlistsize; listno++) { if (listno != 0) (void) putchar (tabchar[0]); if (outlist[listno].file == 1) cline = line1; else cline = line2; if (cline == NULL || outlist[listno].field >= cline->nfields || cline->fields[outlist[listno].field][0] == '\0') (void) fputs (emptyfield, stdout); else (void) fputs (cline->fields[outlist[listno].field], stdout); } (void) putchar ('\n'); } static int strscmp (a, b) /* Compare signed strings */ register SIGNED char * a; /* First string to compare */ register SIGNED char * b; /* Second string to compare */ { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } static int strucmp (a, b) /* Compare unsigned strings */ register unsigned char * a; /* First string to compare */ register unsigned char * b; /* Second string to compare */ { while (*a != '\0') { if (*a++ != *b++) return *--a - *--b; } return *a - *b; } ispell-3.4.00/PaxHeaders.19408/tgood.c0000644000000000000000000000007410227500137014112 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/tgood.c0000444003214100001440000006563210227500137015166 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: tgood.c,v 1.43 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Table-driven version of good.c. * * Geoff Kuenning, July 1987 */ /* * $Log: tgood.c,v $ * Revision 1.43 2005/04/14 14:38:23 geoff * Update license. Incorporate Ed Avis's changes, which primarily * involve making the expansion table a proper structure (almost a * C++-style object) and moving the code to handle it into a separate * file. * * Revision 1.42 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.41 2001/07/23 22:09:15 geoff * Change the expansion code so that the scratch table is allocated * dynamically. This cures a bug that caused munchlist to fail for * languages that used affixes to encode parts of speech, rather than * string transformations, and generated huge numbers of affixes. While * fixing this bug, I also eliminated an obsolete unused parameter from * several functions. * * Revision 1.40 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.39 2000/11/14 07:27:04 geoff * Use messages from msgs.h for the "too many expansions" errors. * * Revision 1.38 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.37 1999/01/18 03:28:43 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.36 1999/01/07 01:57:43 geoff * Update the copyright. * * Revision 1.35 1997/12/21 23:10:24 geoff * Fix the generation of expansions so that only one unique expansion is * produced for any given root/affix combination. For example, if both * the A and the N flags can add "n" to the end of a word (as in the * deutsch.aff file), expanding foo/AN will produce "foon" only once. * This has the side effect that the "-e4" option will generate a more * accurate ratio for flag productivity, which in turn means that * munchlist will do a better job of choosing an optimal set of roots and * flags. * * Revision 1.34 1997/12/03 05:28:13 geoff * Fix a bug that caused suffix expansions to be printed with the wrong * capitalization when all but one character of the root was stripped. * * Revision 1.33 1997/12/02 06:25:09 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.32 1994/11/02 06:56:16 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.31 1994/10/25 05:46:25 geoff * Add support for the FF_ANYWORD (affix applies to all words, even if * flag bit isn't set) flag option. * * Revision 1.30 1994/05/24 06:23:08 geoff * Don't create a hit if "allhits" is clear and capitalization * mismatches. This cures a bug where a word could be in the dictionary * and yet not found. * * Revision 1.29 1994/05/17 06:44:21 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.28 1994/01/25 07:12:13 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "msgs.h" #include "proto.h" #include "exp_table.h" void chk_aff P ((ichar_t * word, ichar_t * ucword, int len, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); static void pfx_list_chk P ((ichar_t * word, ichar_t * ucword, int len, int optflags, int sfxopts, struct flagptr * ind, int ignoreflagbits, int allhits)); static void chk_suf P ((ichar_t * word, ichar_t * ucword, int len, int optflags, struct flagent * pfxent, int ignoreflagbits, int allhits)); static void suf_list_chk P ((ichar_t * word, ichar_t * ucword, int len, struct flagptr * ind, int optflags, struct flagent * pfxent, int ignoreflagbits, int allhits)); int expand_pre P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int option, unsigned char * extra)); static void gen_pre_expansion P ((ichar_t * rootword, struct flagent * flent, MASKTYPE mask[], struct exp_table * exptable)); int expand_suf P ((unsigned char * croot, ichar_t * rootword, MASKTYPE mask[], int optflags, int option, unsigned char * extra)); static void expand_suf_into_table P ((ichar_t * rootword, MASKTYPE mask[], int optflags, struct exp_table * exptable, MASKTYPE existing_flags[])); static void gen_suf_expansion P ((ichar_t * rootword, struct flagent * flent, struct exp_table * exptable, MASKTYPE existing_flags[])); static void forcelc P ((ichar_t * dst, int len)); static char * flags_str P ((MASKTYPE flags)); static int output_expansions P ((struct exp_table * exptable, int option, unsigned char * croot, unsigned char * extra)); /* Check possible affixes */ void chk_aff (word, ucword, len, ignoreflagbits, allhits, pfxopts, sfxopts) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only copy of word */ int len; /* The length of word/ucword */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ int pfxopts; /* Options to apply to prefixes */ int sfxopts; /* Options to apply to suffixes */ { register ichar_t * cp; /* Pointer to char to index on */ struct flagptr * ind; /* Flag index table to test */ pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &pflagindex[0], ignoreflagbits, allhits); cp = ucword; ind = &pflagindex[*cp++]; while (ind->numents == 0 && ind->pu.fp != NULL) { if (*cp == 0) return; if (ind->pu.fp[0].numents) { pfx_list_chk (word, ucword, len, pfxopts, sfxopts, &ind->pu.fp[0], ignoreflagbits, allhits); if (numhits && !allhits && !cflag && !ignoreflagbits) return; } ind = &ind->pu.fp[*cp++]; } pfx_list_chk (word, ucword, len, pfxopts, sfxopts, ind, ignoreflagbits, allhits); if (numhits && !allhits && !cflag && !ignoreflagbits) return; chk_suf (word, ucword, len, sfxopts, (struct flagent *) NULL, ignoreflagbits, allhits); } /* Check some prefix flags */ static void pfx_list_chk (word, ucword, len, optflags, sfxopts, ind, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ int optflags; /* Options to apply */ int sfxopts; /* Options to apply to suffixes */ struct flagptr * ind; /* Flag index table */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { int cond; /* Condition number */ register ichar_t * cp; /* Pointer into end of ucword */ struct dent * dent; /* Dictionary entry we found */ int entcount; /* Number of entries to process */ register struct flagent * flent; /* Current table entry */ int preadd; /* Length added to tword2 as prefix */ register int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */ for (flent = ind->pu.ent, entcount = ind->numents; entcount > 0; flent++, entcount--) { /* * If this is a compound-only affix, ignore it unless we're * looking for that specific thing. */ if ((flent->flagflags & FF_COMPOUNDONLY) != 0 && (optflags & FF_COMPOUNDONLY) == 0) continue; /* * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must * match exactly. */ if (compoundflag == COMPOUND_CONTROLLED && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0) continue; /* * See if the prefix matches. */ tlen = len - flent->affl; if (tlen > 0 && (flent->affl == 0 || icharncmp (flent->affix, ucword, flent->affl) == 0) && tlen + flent->stripl >= flent->numconds) { /* * The prefix matches. Remove it, replace it by the "strip" * string (if any), and check the original conditions. */ if (flent->stripl) (void) icharcpy (tword, flent->strip); (void) icharcpy (tword + flent->stripl, ucword + flent->affl); cp = tword; for (cond = 0; cond < flent->numconds; cond++) { if ((flent->conds[*cp++] & (1 << cond)) == 0) break; } if (cond >= flent->numconds) { /* * The conditions match. See if the word is in the * dictionary. */ tlen += flent->stripl; if (cflag) flagpr (tword, BITTOCHAR (flent->flagbit), flent->stripl, flent->affl, -1, 0); else if (ignoreflagbits) { if ((dent = lookup (tword, 1)) != NULL) { cp = tword2; if (flent->affl) { (void) icharcpy (cp, flent->affix); cp += flent->affl; *cp++ = '+'; } preadd = cp - tword2; (void) icharcpy (cp, tword); cp += tlen; if (flent->stripl) { *cp++ = '-'; (void) icharcpy (cp, flent->strip); } (void) ins_root_cap (tword2, word, flent->stripl, preadd, 0, (cp - tword2) - tlen - preadd, dent, flent, (struct flagent *) NULL); } } else if ((dent = lookup (tword, 1)) != NULL && TSTMASKBIT (dent->mask, flent->flagbit)) { if (numhits < MAX_HITS) { hits[numhits].dictent = dent; hits[numhits].prefix = flent; hits[numhits].suffix = NULL; numhits++; } if (!allhits) { if (cap_ok (word, &hits[0], len)) return; numhits = 0; } } /* * Handle cross-products. */ if (flent->flagflags & FF_CROSSPRODUCT) chk_suf (word, tword, tlen, sfxopts | FF_CROSSPRODUCT, flent, ignoreflagbits, allhits); } } } } /* Check possible suffixes */ static void chk_suf (word, ucword, len, optflags, pfxent, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ int optflags; /* Affix option flags */ struct flagent * pfxent; /* Prefix flag entry if cross-prod */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { register ichar_t * cp; /* Pointer to char to index on */ struct flagptr * ind; /* Flag index table to test */ suf_list_chk (word, ucword, len, &sflagindex[0], optflags, pfxent, ignoreflagbits, allhits); cp = ucword + len - 1; ind = &sflagindex[*cp]; while (ind->numents == 0 && ind->pu.fp != NULL) { if (cp == ucword) return; if (ind->pu.fp[0].numents) { suf_list_chk (word, ucword, len, &ind->pu.fp[0], optflags, pfxent, ignoreflagbits, allhits); if (numhits != 0 && !allhits && !cflag && !ignoreflagbits) return; } ind = &ind->pu.fp[*--cp]; } suf_list_chk (word, ucword, len, ind, optflags, pfxent, ignoreflagbits, allhits); } static void suf_list_chk (word, ucword, len, ind, optflags, pfxent, ignoreflagbits, allhits) ichar_t * word; /* Word to be checked */ ichar_t * ucword; /* Upper-case-only word */ int len; /* The length of ucword */ struct flagptr * ind; /* Flag index table */ int optflags; /* Affix option flags */ struct flagent * pfxent; /* Prefix flag entry if crossonly */ int ignoreflagbits; /* Ignore whether affix is legal */ int allhits; /* Keep going after first hit */ { register ichar_t * cp; /* Pointer into end of ucword */ int cond; /* Condition number */ struct dent * dent; /* Dictionary entry we found */ int entcount; /* Number of entries to process */ register struct flagent * flent; /* Current table entry */ int preadd; /* Length added to tword2 as prefix */ register int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; /* Tmp cpy */ ichar_t tword2[sizeof tword]; /* 2nd copy for ins_root_cap */ (void) icharcpy (tword, ucword); for (flent = ind->pu.ent, entcount = ind->numents; entcount > 0; flent++, entcount--) { if ((optflags & FF_CROSSPRODUCT) != 0 && (flent->flagflags & FF_CROSSPRODUCT) == 0) continue; /* * If this is a compound-only affix, ignore it unless we're * looking for that specific thing. */ if ((flent->flagflags & FF_COMPOUNDONLY) != 0 && (optflags & FF_COMPOUNDONLY) == 0) continue; /* * In COMPOUND_CONTROLLED mode, the FF_COMPOUNDONLY bit must * match exactly. */ if (compoundflag == COMPOUND_CONTROLLED && ((flent->flagflags ^ optflags) & FF_COMPOUNDONLY) != 0) continue; /* * See if the suffix matches. */ tlen = len - flent->affl; if (tlen > 0 && (flent->affl == 0 || icharcmp (flent->affix, ucword + tlen) == 0) && tlen + flent->stripl >= flent->numconds) { /* * The suffix matches. Remove it, replace it by the "strip" * string (if any), and check the original conditions. */ (void) icharcpy (tword, ucword); cp = tword + tlen; if (flent->stripl) { (void) icharcpy (cp, flent->strip); tlen += flent->stripl; cp = tword + tlen; } else *cp = '\0'; for (cond = flent->numconds; --cond >= 0; ) { if ((flent->conds[*--cp] & (1 << cond)) == 0) break; } if (cond < 0) { /* * The conditions match. See if the word is in the * dictionary. */ if (cflag) { if (optflags & FF_CROSSPRODUCT) flagpr (tword, BITTOCHAR (pfxent->flagbit), pfxent->stripl, pfxent->affl, BITTOCHAR (flent->flagbit), flent->affl); else flagpr (tword, -1, 0, 0, BITTOCHAR (flent->flagbit), flent->affl); } else if (ignoreflagbits) { if ((dent = lookup (tword, 1)) != NULL) { cp = tword2; if ((optflags & FF_CROSSPRODUCT) && pfxent->affl != 0) { (void) icharcpy (cp, pfxent->affix); cp += pfxent->affl; *cp++ = '+'; } preadd = cp - tword2; (void) icharcpy (cp, tword); cp += tlen; if ((optflags & FF_CROSSPRODUCT) && pfxent->stripl != 0) { *cp++ = '-'; (void) icharcpy (cp, pfxent->strip); cp += pfxent->stripl; } if (flent->stripl) { *cp++ = '-'; (void) icharcpy (cp, flent->strip); cp += flent->stripl; } if (flent->affl) { *cp++ = '+'; (void) icharcpy (cp, flent->affix); cp += flent->affl; } (void) ins_root_cap (tword2, word, (optflags & FF_CROSSPRODUCT) ? pfxent->stripl : 0, preadd, flent->stripl, (cp - tword2) - tlen - preadd, dent, pfxent, flent); } } else if ((dent = lookup (tword, 1)) != NULL && TSTMASKBIT (dent->mask, flent->flagbit) && ((optflags & FF_CROSSPRODUCT) == 0 || TSTMASKBIT (dent->mask, pfxent->flagbit))) { if (numhits < MAX_HITS) { hits[numhits].dictent = dent; hits[numhits].prefix = pfxent; hits[numhits].suffix = flent; numhits++; } if (!allhits) { if (cap_ok (word, &hits[0], len)) return; numhits = 0; } } } } } } /* * Expand a dictionary prefix entry */ int expand_pre (croot, rootword, mask, option, extra) unsigned char * croot; /* Char version of rootword */ ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int option; /* Option, see expandmode */ unsigned char * extra; /* Extra info to add to line */ { int entcount; /* No. of entries to process */ int explength; /* Length of expansions */ static struct exp_table exptable; /* Table of expansions */ register struct flagent * flent; /* Current table entry */ exp_table_init(&exptable, rootword); for (flent = pflaglist, entcount = numpflags; entcount > 0; flent++, entcount--) { if (TSTMASKBIT (mask, flent->flagbit)) gen_pre_expansion (rootword, flent, mask, &exptable); } explength = output_expansions (&exptable, option, croot, extra); (void) exp_table_empty (&exptable); return explength; } /* Generate a prefix expansion, modifying the table passed in */ static void gen_pre_expansion (rootword, flent, mask, exptable) register ichar_t * rootword; /* Root word to expand */ register struct flagent * flent; /* Current table entry */ MASKTYPE mask[]; /* Mask bits to expand on */ struct exp_table * exptable; /* Ptr to tbl of expansions */ { MASKTYPE applied[MASKSIZE]; /* Flag being applied */ int cond; /* Current condition number */ register ichar_t * nextc; /* Next case choice */ register unsigned char * result; /* Result of expansion */ int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */ tlen = icharlen (rootword); if (flent->numconds > tlen) return; tlen -= flent->stripl; if (tlen <= 0) return; tlen += flent->affl; for (cond = 0, nextc = rootword; cond < flent->numconds; cond++) { if ((flent->conds[mytoupper (*nextc++)] & (1 << cond)) == 0) return; } /* * The conditions are satisfied. Copy the word, add the prefix, * and make it the proper case. This code is carefully written * to match that ins_cap and cap_ok. Note that the affix, as * inserted, is uppercase. * * There is a tricky bit here: if the root is capitalized, we * want a capitalized result. If the root is followcase, however, * we want to duplicate the case of the first remaining letter * of the root. In other words, "Loved/U" should generate "Unloved", * but "LOved/U" should generate "UNLOved" and "lOved/U" should * produce "unlOved". */ if (flent->affl) { (void) icharcpy (tword, flent->affix); nextc = tword + flent->affl; } (void) icharcpy (nextc, rootword + flent->stripl); if (myupper (rootword[0])) { /* We must distinguish followcase from capitalized and all-upper */ for (nextc = rootword + 1; *nextc; nextc++) { if (!myupper (*nextc)) break; } if (*nextc) { /* It's a followcase or capitalized word. Figure out which. */ for ( ; *nextc; nextc++) { if (myupper (*nextc)) break; } if (*nextc) { /* It's followcase. */ if (!myupper (tword[flent->affl])) forcelc (tword, flent->affl); } else { /* It's capitalized */ forcelc (tword + 1, tlen - 1); } } } else { /* Followcase or all-lower, we don't care which */ if (!myupper (*nextc)) forcelc (tword, flent->affl); } /* * We've generated the result. If it's not already in the * expansion table, add it at the end. */ result = ichartosstr (tword, 1); BZERO (applied, sizeof applied); SETMASKBIT (applied, flent->flagbit); add_expansion_copy(exptable, (char *) result, applied); if (flent->flagflags & FF_CROSSPRODUCT) expand_suf_into_table (tword, mask, FF_CROSSPRODUCT, exptable, applied); } /* * Expand a dictionary suffix entry */ int expand_suf (croot, rootword, mask, optflags, option, extra) unsigned char * croot; /* Char version of rootword */ ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int optflags; /* Affix option flags */ int option; /* Option, see expandmode */ unsigned char * extra; /* Extra info to add to line */ { int explength; /* Length of expansions */ struct exp_table exptable; /* Table of expansions */ int i; /* For zeroing flags */ MASKTYPE nullflags[MASKSIZE]; /* Flag being applied */ for (i = 0; i < MASKSIZE; i++) nullflags[i] = 0; exp_table_init (&exptable, rootword); expand_suf_into_table(rootword, mask, optflags, &exptable, nullflags); explength = output_expansions (&exptable, option, croot, extra); (void) exp_table_empty (&exptable); return explength; } /* * Expand a dictionary suffix entry and insert it into an expansion table */ static void expand_suf_into_table (rootword, mask, optflags, exptable, existing_flags) ichar_t * rootword; /* Root word to expand */ register MASKTYPE mask[]; /* Mask bits to expand on */ int optflags; /* Affix option flags */ struct exp_table * exptable; /* Table of expansions */ MASKTYPE existing_flags[]; /* Flags already applied */ { int entcount; /* No. of entries to process */ register struct flagent * flent; /* Current table entry */ for (flent = sflaglist, entcount = numsflags; entcount > 0; flent++, entcount--) { if (TSTMASKBIT (mask, flent->flagbit)) { if ((optflags & FF_CROSSPRODUCT) == 0 || (flent->flagflags & FF_CROSSPRODUCT)) (void) gen_suf_expansion (rootword, flent, exptable, existing_flags); } } } /* Generate a suffix expansion */ static void gen_suf_expansion (rootword, flent, exptable, existing_flags) register ichar_t * rootword; /* Root word to expand */ register struct flagent * flent; /* Current table entry */ struct exp_table * exptable; /* Table of expansions */ MASKTYPE * existing_flags; /* Flags already applied */ { int cond; /* Current condition number */ register ichar_t * nextc; /* Next case choice */ register unsigned char * result; /* Result of expansion */ int tlen; /* Length of tword */ ichar_t tword[INPUTWORDLEN + MAXAFFIXLEN]; /* Temp */ int wascapitalized; /* NZ if capitalized root */ tlen = icharlen (rootword); cond = flent->numconds; if (cond > tlen) return; if (tlen - flent->stripl <= 0) return; wascapitalized = myupper (rootword[0]); for (nextc = rootword + tlen; --cond >= 0; ) { if ((flent->conds[mytoupper (*--nextc)] & (1 << cond)) == 0) return; if (nextc > rootword && myupper (*nextc)) wascapitalized = 0; } while (--nextc > rootword) { if (myupper (*nextc)) wascapitalized = 0; } /* * The conditions are satisfied. Copy the word, add the suffix, * and make it match the case of the last remaining character of the * root. Again, this code carefully matches ins_cap and cap_ok. * * There is one tricky case to watch out for here. If the root * was simply capitalized, and the stripping removed all but the * initial character of the root, the above algorithm will * generate an all-caps result. However, ins_cap and cap_ok would * generate a simple capitalization, because a captype of * CAPITALIZED would override FOLLOWCASE and ALLCAPS. So we have * to deal with this as a special case. */ (void) icharcpy (tword, rootword); nextc = tword + tlen - flent->stripl; if (flent->affl) { (void) icharcpy (nextc, flent->affix); if ((nextc == tword + 1 && wascapitalized) || !myupper (nextc[-1])) forcelc (nextc, flent->affl); } else *nextc = 0; /* * We've generated the result. If it's not already in the * expansion table, add it at the end. */ result = ichartosstr (tword, 1); SETMASKBIT (existing_flags, flent->flagbit); (void) add_expansion_copy(exptable, (char *) result, existing_flags); } static void forcelc (dst, len) /* Force to lowercase */ register ichar_t * dst; /* Destination to modify */ register int len; /* Length to copy */ { for ( ; --len >= 0; dst++) *dst = mytolower (*dst); } /* * Convert a mask of flags to a string of flag chars, using a static * buffer. * * Assume 26 letters in the alphabet :-). In practice you probably * won't get more than two flags at once. */ static char * flags_str (flags) MASKTYPE flags; { static char flags_str_buf[MASKSIZE + 1]; int i; int length = 0; for (i = 0; i < MASKSIZE; i++) { if (TSTMASKBIT (&flags, i)) flags_str_buf[length++] = BITTOCHAR (i); } flags_str_buf[length] = '\0'; return flags_str_buf; } /* * Print an expansion table in the manner required by ispell's various * -e options (or at least do some of the printing required). Returns * the total length of all expansions. * * P.S. Yes, I'm embarrassed by the magic numbers. */ static int output_expansions (exptable, option, croot, extra) struct exp_table * exptable; /* Expansions to print */ int option; /* Num. of -e option */ unsigned char * croot; /* Original "word/flags" */ unsigned char * extra; /* Extra info to add to line */ { int explength = 0; /* Expansion size (chars) */ int i; /* Loop index */ const ichar_t * rootword; /* Root of the expansion */ rootword = get_orig_word (exptable); /* Print in reverse order to match old behavior */ for (i = num_expansions (exptable); --i >= 0; ) { const char * expansion = get_expansion (exptable, i); if (option == 3) (void) printf ("\n%s", (char *) croot); else if (option == 5) { char * fs = flags_str (get_flags (exptable, i)); if (strlen (fs) != 0) (void) printf ("\n%s+%s", ichartosstr (rootword, 1), fs); else (void) printf ("\n%s", ichartosstr (rootword, 1)); } if (option != 4) (void) printf (" %s%s", expansion, (char *) extra); explength += strlen (expansion); } return explength; } ispell-3.4.00/PaxHeaders.19408/ispell.h0000644000000000000000000000007410234173533014277 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/ispell.h0000444003214100001440000006671510234173533015356 0ustar00geofffaculty00000000000000#ifndef ISPELL_H_INCLUDED #define ISPELL_H_INCLUDED /* * $Id: ispell.h,v 1.84 2005/04/28 14:46:51 geoff Exp $ */ /* * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: ispell.h,v $ * Revision 1.84 2005/04/28 14:46:51 geoff * Add support for a correction log file. * * Revision 1.83 2005/04/26 22:40:07 geoff * Add double-inclusion protection. Include config.h to be sure it's * available. * * Revision 1.82 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.81 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.80 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.79 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.78 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.77 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.76 1999/01/18 02:14:09 geoff * Change most char declarations to unsigned char, to avoid * sign-extension problems with 8-bit characters. * * Revision 1.75 1999/01/07 01:23:05 geoff * Update the copyright. * * Revision 1.74 1999/01/03 01:46:37 geoff * Add support for external deformatters. * * Revision 1.73 1998/07/06 06:55:19 geoff * Add struct kwtable and some new variables, to support the new * generalized keyword-lookup stuff. * * Revision 1.72 1997/12/02 06:24:54 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.71 1997/12/01 00:53:49 geoff * Add HTML support variables. * * Revision 1.70 1995/11/08 05:09:18 geoff * Add the DEFORMAT_xxx constants and askverbose. Improve the stylistic * consistency of the HTML support. * * Revision 1.69 1995/10/25 04:05:26 geoff * Patch by Gerry Tierney 1995/10/14. Added * variables htmlflag and insidehtml for use in html-mode. * * Revision 1.68 1995/03/06 02:42:41 geoff * Be vastly more paranoid about parenthesizing macro arguments. This * fixes a bug in defmt.c where a complex argument was passed to * isstringch. * * Revision 1.67 1995/01/03 19:24:12 geoff * Get rid of a non-global declaration. * * Revision 1.66 1994/12/27 23:08:49 geoff * Fix a lot of subtly bad assumptions about the widths of ints and longs * which only show up on 64-bit machines like the Cray and the DEC Alpha. * * Revision 1.65 1994/11/02 06:56:10 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.64 1994/10/25 05:46:18 geoff * Add the FF_ANYWORD flag for defining an affix that will apply to any * word, even if not explicitly specified. (Good for French.) * * Revision 1.63 1994/09/16 04:48:28 geoff * Make stringdups and laststringch unsigned ints, and dupnos a plain * int, so that we can handle more than 128 stringchars and stringchar * types. * * Revision 1.62 1994/09/01 06:06:39 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.61 1994/08/31 05:58:35 geoff * Add contextoffset, used in -a mode to handle extremely long lines. * * Revision 1.60 1994/05/17 06:44:15 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.59 1994/03/15 06:25:16 geoff * Change deftflag's initialization so we can tell if -t/-n appeared. * * Revision 1.58 1994/02/07 05:53:28 geoff * Add typecasts to the the 7-bit versions of ichar* routines * * Revision 1.57 1994/01/25 07:11:48 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include #ifdef __STDC__ #define P(x) x #define VOID void #else /* __STDC__ */ #define P(x) () #define VOID char #define const #endif /* __STDC__ */ #define SET_SIZE 256 #define MASKSIZE (MASKBITS / MASKTYPE_WIDTH) #ifdef lint extern void SETMASKBIT P ((MASKTYPE * mask, int bit)); extern void CLRMASKBIT P ((MASKTYPE * mask, int bit)); extern int TSTMASKBIT P ((MASKTYPE * mask, int bit)); #else /* lint */ /* The following is really testing for MASKSIZE <= 1, but cpp can't do that */ #if MASKBITS <= MASKTYPE_WIDTH #define SETMASKBIT(mask, bit) ((mask)[0] |= (MASKTYPE) 1 << (bit)) #define CLRMASKBIT(mask, bit) ((mask)[0] &= (MASKTYPE) ~(1 << (bit))) #define TSTMASKBIT(mask, bit) ((mask)[0] & ((MASKTYPE) 1 << (bit))) #else #define SETMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] |= \ (MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1))) #define CLRMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] &= \ ~((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1)))) #define TSTMASKBIT(mask, bit) \ ((mask)[(bit) / MASKTYPE_WIDTH] & \ ((MASKTYPE) 1 << ((bit) & (MASKTYPE_WIDTH - 1)))) #endif #endif /* lint */ #if MASKBITS > 64 #define FULLMASKSET #endif #ifdef lint extern int BITTOCHAR P ((int bit)); extern int CHARTOBIT P ((int ch)); #endif /* lint */ #if MASKBITS <= 32 # ifndef lint #define BITTOCHAR(bit) ((bit) + 'A') #define CHARTOBIT(ch) ((ch) - 'A') # endif /* lint */ #define LARGESTFLAG 26 /* 5 are needed for flagfield below */ #define FLAGBASE ((MASKTYPE_WIDTH) - 6) #else # if MASKBITS <= 64 # ifndef lint #define BITTOCHAR(bit) ((bit) + 'A') #define CHARTOBIT(ch) ((ch) - 'A') # endif /* lint */ #define LARGESTFLAG (64 - 6) /* 5 are needed for flagfield below */ #define FLAGBASE ((MASKTYPE_WIDTH) - 6) # else # ifndef lint #define BITTOCHAR(bit) (bit) #define CHARTOBIT(ch) (ch) # endif /* lint */ #define LARGESTFLAG MASKBITS /* flagfield is a separate field */ #define FLAGBASE 0 # endif #endif /* ** Data type for internal word storage. If necessary, we use shorts rather ** than chars so that string characters can be encoded as a single unit. */ #if (SET_SIZE + MAXSTRINGCHARS) <= 256 #ifndef lint #define ICHAR_IS_CHAR #endif /* lint */ #endif #ifdef ICHAR_IS_CHAR typedef unsigned char ichar_t; /* Internal character */ #define icharlen(s) strlen ((char *) (s)) #define icharcpy(a, b) strcpy ((char *) (a), (char *) (b)) #define icharcmp(a, b) strcmp ((char *) (a), (char *) (b)) #define icharncmp(a, b, n) strncmp ((char *) (a), (char *) (b), (n)) #define chartoichar(x) ((ichar_t) (x)) #else typedef unsigned short ichar_t; /* Internal character */ #define chartoichar(x) ((ichar_t) (unsigned char) (x)) #endif struct dent { struct dent * next; unsigned char * word; MASKTYPE mask[MASKSIZE]; #ifdef FULLMASKSET char flags; #endif }; /* ** Flags in the directory entry. If FULLMASKSET is undefined, these are ** stored in the highest bits of the last longword of the mask field. If ** FULLMASKSET is defined, they are stored in the extra "flags" field. ** ** If a word has only one capitalization form, and that form is not ** FOLLOWCASE, it will have exactly one entry in the dictionary. The ** legal capitalizations will be indicated by the 2-bit capitalization ** field, as follows: ** ** ALLCAPS The word must appear in all capitals. ** CAPITALIZED The word must be capitalized (e.g., London). ** It will also be accepted in all capitals. ** ANYCASE The word may appear in lowercase, capitalized, ** or all-capitals. ** ** Regardless of the capitalization flags, the "word" field of the entry ** will point to an all-uppercase copy of the word. This is to simplify ** the large portion of the code that doesn't care about capitalization. ** Ispell will generate the correct version when needed. ** ** If a word has more than one capitalization, there will be multiple ** entries for it, linked together by the "next" field. The initial ** entry for such words will be a dummy entry, primarily for use by code ** that ignores capitalization. The "word" field of this entry will ** again point to an all-uppercase copy of the word. The "mask" field ** will contain the logical OR of the mask fields of all variants. ** A header entry is indicated by a capitalization type of ALLCAPS, ** with the MOREVARIANTS bit set. ** ** The following entries will define the individual variants. Each ** entry except the last has the MOREVARIANTS flag set, and each ** contains one of the following capitalization options: ** ** ALLCAPS The word must appear in all capitals. ** CAPITALIZED The word must be capitalized (e.g., London). ** It will also be accepted in all capitals. ** FOLLOWCASE The word must be capitalized exactly like the ** sample in the entry. Prefix (suffix) characters ** must be rendered in the case of the first (last) ** "alphabetic" character. It will also be accepted ** in all capitals. ("Alphabetic" means "mentioned ** in a 'casechars' statement".) ** ANYCASE The word may appear in lowercase, capitalized, ** or all-capitals. ** ** The "mask" field for the entry contains only the affix flag bits that ** are legal for that capitalization. The "word" field will be null ** except for FOLLOWCASE entries, where it will point to the ** correctly-capitalized spelling of the root word. ** ** It is worth discussing why the ALLCAPS option is used in ** the header entry. The header entry accepts an all-capitals ** version of the root plus every affix (this is always legal, since ** words get capitalized in headers and so forth). Further, all of ** the following variant entries will reject any all-capitals form ** that is illegal due to an affix. ** ** Finally, note that variations in the KEEP flag can cause a multiple-variant ** entry as well. For example, if the personal dictionary contains "ALPHA", ** (KEEP flag set) and the user adds "alpha" with the KEEP flag clear, a ** multiple-variant entry will be created so that "alpha" will be accepted ** but only "ALPHA" will actually be kept. */ #ifdef FULLMASKSET #define flagfield flags #else #define flagfield mask[MASKSIZE - 1] #endif #define USED ((MASKTYPE) 1 << (FLAGBASE + 0)) #define KEEP ((MASKTYPE) 1 << (FLAGBASE + 1)) #define ANYCASE ((MASKTYPE) 0 << (FLAGBASE + 2)) #define ALLCAPS ((MASKTYPE) 1 << (FLAGBASE + 2)) #define CAPITALIZED ((MASKTYPE) 2 << (FLAGBASE + 2)) #define FOLLOWCASE ((MASKTYPE) 3 << (FLAGBASE + 2)) #define CAPTYPEMASK ((MASKTYPE) 3 << (FLAGBASE + 2)) #define MOREVARIANTS ((MASKTYPE) 1 << (FLAGBASE + 4)) #define ALLFLAGS (USED | KEEP | CAPTYPEMASK | MOREVARIANTS) #define captype(x) ((x) & CAPTYPEMASK) /* * Language tables used to encode prefix and suffix information. */ struct flagent { ichar_t * strip; /* String to strip off */ ichar_t * affix; /* Affix to append */ short flagbit; /* Flag bit this ent matches */ short stripl; /* Length of strip */ short affl; /* Length of affix */ short numconds; /* Number of char conditions */ short flagflags; /* Modifiers on this flag */ char conds[SET_SIZE + MAXSTRINGCHARS]; /* Adj. char conds */ }; /* * Bits in flagflags */ #define FF_CROSSPRODUCT (1 << 0) /* Affix does cross-products */ #define FF_COMPOUNDONLY (1 << 1) /* Afx works in compounds */ union ptr_union /* Aid for building flg ptrs */ { struct flagptr * fp; /* Pointer to more indexing */ struct flagent * ent; /* First of a list of ents */ }; struct flagptr { union ptr_union pu; /* Ent list or more indexes */ int numents; /* If zero, pu.fp is valid */ }; /* * Description of a single string character type. */ struct strchartype { unsigned char * name; /* Name of the type */ char * deformatter; /* Deformatter to use */ char * suffixes; /* File suffixes, null seps */ }; /* * Header placed at the beginning of the hash file. */ struct hashheader { unsigned short magic; /* Magic number for ID */ unsigned short compileoptions; /* How we were compiled */ unsigned short maxstringchars; /* Max # strchrs we support */ unsigned short maxstringcharlen; /* Max strchr len supported */ unsigned short compoundmin; /* Min lth of compound parts */ short compoundbit; /* Flag 4 compounding roots */ unsigned int stringsize; /* Size of string table */ unsigned int lstringsize; /* Size of lang. str tbl */ unsigned int tblsize; /* No. entries in hash tbl */ unsigned int stblsize; /* No. entries in sfx tbl */ unsigned int ptblsize; /* No. entries in pfx tbl */ unsigned int sortval; /* Largest sort ID assigned */ unsigned int nstrchars; /* No. strchars defined */ unsigned int nstrchartype; /* No. strchar types */ unsigned int strtypestart; /* Start of strtype table */ char nrchars[5]; /* Nroff special characters */ char texchars[13]; /* TeX special characters */ char compoundflag; /* Compund-word handling */ char defhardflag; /* Default tryveryhard flag */ char flagmarker; /* "Start-of-flags" char */ unsigned short sortorder[SET_SIZE + MAXSTRINGCHARS]; /* Sort ordering */ ichar_t lowerconv[SET_SIZE + MAXSTRINGCHARS]; /* Lower-conversion table */ ichar_t upperconv[SET_SIZE + MAXSTRINGCHARS]; /* Upper-conversion table */ char wordchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for chars found in wrds */ char upperchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for uppercase chars */ char lowerchars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for lowercase chars */ char boundarychars[SET_SIZE + MAXSTRINGCHARS]; /* NZ for boundary chars */ char stringstarts[SET_SIZE]; /* NZ if char can start str */ unsigned char stringchars[MAXSTRINGCHARS][MAXSTRINGCHARLEN + 1]; /* String chars */ unsigned int stringdups[MAXSTRINGCHARS]; /* No. of "base" char */ int groupnos[MAXSTRINGCHARS]; /* Group char is in # */ unsigned short magic2; /* Second magic for dbl chk */ }; /* hash table magic number */ #define MAGIC 0x9602 /* compile options, put in the hash header for consistency checking */ # define MAGICNOTUSED1 0x01 /* No longer used */ # define MAGICNOTUSED2 0x02 /* No longer used */ #if MASKBITS <= 32 # define MAGICMASKSET 0x00 #else # if MASKBITS <= 64 # define MAGICMASKSET 0x04 # else # if MASKBITS <= 128 # define MAGICMASKSET 0x08 # else # define MAGICMASKSET 0x0C # endif # endif #endif #define COMPILEOPTIONS (MAGICNOTUSED1 | MAGICNOTUSED2 | MAGICMASKSET) /* * Structure used to record data about successful lookups; these values * are used in the ins_root_cap routine to produce correct capitalizations. */ struct success { struct dent * dictent; /* Header of dict entry chain for wd */ struct flagent * prefix; /* Prefix flag used, or NULL */ struct flagent * suffix; /* Suffix flag used, or NULL */ }; /* * Structure used to describe keyword-lookup tables. The lookup * routine uses binary search on the keyword array. Maxlen and minlen * are just optimizations: if the string length isn't in this range, * the lookup routine can fail immediately. */ struct kwtable { unsigned char ** kwlist; /* Sorted array of keywords */ unsigned int numkw; /* Number of keywords in array */ unsigned int minlen; /* Length of shortest keyword */ unsigned int maxlen; /* Length of longest keyword */ int forceupper; /* NZ to force uppercase in match */ }; /* ** Offsets into the nroff special-character array */ #define NRLEFTPAREN hashheader.nrchars[0] #define NRRIGHTPAREN hashheader.nrchars[1] #define NRDOT hashheader.nrchars[2] #define NRBACKSLASH hashheader.nrchars[3] #define NRSTAR hashheader.nrchars[4] /* ** Offsets into the TeX special-character array */ #define TEXLEFTPAREN hashheader.texchars[0] #define TEXRIGHTPAREN hashheader.texchars[1] #define TEXLEFTSQUARE hashheader.texchars[2] #define TEXRIGHTSQUARE hashheader.texchars[3] #define TEXLEFTCURLY hashheader.texchars[4] #define TEXRIGHTCURLY hashheader.texchars[5] #define TEXLEFTANGLE hashheader.texchars[6] #define TEXRIGHTANGLE hashheader.texchars[7] #define TEXBACKSLASH hashheader.texchars[8] #define TEXDOLLAR hashheader.texchars[9] #define TEXSTAR hashheader.texchars[10] #define TEXDOT hashheader.texchars[11] #define TEXPERCENT hashheader.texchars[12] #define HTMLTAGSTART '<' #define HTMLTAGEND '>' #define HTMLSLASH '/' #define HTMLSPECSTART '&' #define HTMLSPECEND ';' #define HTMLQUOTE '"' /* ** Values for compoundflag */ #define COMPOUND_NEVER 0 /* Compound words are never good */ #define COMPOUND_ANYTIME 1 /* Accept run-together words */ #define COMPOUND_CONTROLLED 2 /* Compounds controlled by afx flags */ /* ** Values for deftflag and tflag (deformatting style) */ #define DEFORMAT_NONE 0 /* No deformatting (or external) */ #define DEFORMAT_NROFF 1 /* Nroff/troff-style deformatting */ #define DEFORMAT_TEX 2 /* TeX/LaTeX-style deformatting */ #define DEFORMAT_SGML 3 /* SGML/HTML-style deformatting */ /* ** The isXXXX macros normally only check ASCII range, and don't support ** the character sets of other languages. These private versions handle ** whatever character sets have been defined in the affix files. */ #ifdef lint extern int myupper P ((unsigned int ch)); extern int mylower P ((unsigned int ch)); extern int myspace P ((unsigned int ch)); extern int iswordch P ((unsigned int ch)); extern int isboundarych P ((unsigned int ch)); extern int isstringstart P ((unsigned int ch)); extern ichar_t mytolower P ((unsigned int ch)); extern ichar_t mytoupper P ((unsigned int ch)); #else /* lint */ #define myupper(X) (hashheader.upperchars[(X)]) #define mylower(X) (hashheader.lowerchars[(X)]) #define myspace(X) (((X) > 0) && ((X) < 0x80) \ && isspace((unsigned char) (X))) #define iswordch(X) (hashheader.wordchars[(X)]) #define isboundarych(X) (hashheader.boundarychars[(X)]) #define isstringstart(X) (hashheader.stringstarts[(unsigned char) (X)]) #define mytolower(X) (hashheader.lowerconv[(X)]) #define mytoupper(X) (hashheader.upperconv[(X)]) #endif /* lint */ /* ** These macros are similar to the ones above, but they take into account ** the possibility of string characters. Note well that they take a POINTER, ** not a character. ** ** The "l_" versions set "len" to the length of the string character as a ** handy side effect. (Note that the global "laststringch" is also set, ** and sometimes used, by these macros.) ** ** The "l1_" versions go one step further and guarantee that the "len" ** field is valid for *all* characters, being set to 1 even if the macro ** returns false. This macro is a great example of how NOT to write ** readable C. */ #define isstringch(ptr, canon) (isstringstart (*(ptr)) \ && stringcharlen ((ptr), (canon)) > 0) #define l_isstringch(ptr, len, canon) \ (isstringstart (*(ptr)) \ && (len = stringcharlen ((ptr), (canon))) \ > 0) #define l1_isstringch(ptr, len, canon) \ (len = 1, \ isstringstart (*(ptr)) \ && ((len = \ stringcharlen ((ptr), (canon))) \ > 0 \ ? 1 : (len = 1, 0))) /* * Sizes of buffers returned by ichartosstr/strtosichar. */ #define ICHARTOSSTR_SIZE (INPUTWORDLEN + 4 * MAXAFFIXLEN + 4) #define STRTOSICHAR_SIZE ((INPUTWORDLEN + 4 * MAXAFFIXLEN + 4) \ * sizeof (ichar_t)) /* * termcap variables */ #ifdef MAIN # define EXTERN /* nothing */ #else # define EXTERN extern #endif EXTERN char * BC; /* backspace if not ^H */ EXTERN char * cd; /* clear to end of display */ EXTERN char * cl; /* clear display */ EXTERN char * cm; /* cursor movement */ EXTERN char * ho; /* home */ EXTERN char * nd; /* non-destructive space */ EXTERN char * so; /* standout */ EXTERN char * se; /* standout end */ EXTERN int sg; /* space taken by so/se */ EXTERN char * ti; /* terminal initialization sequence */ EXTERN char * te; /* terminal termination sequence */ EXTERN int li; /* lines */ EXTERN int co; /* columns */ EXTERN int contextsize; /* number of lines of context to show */ EXTERN unsigned char contextbufs[MAXCONTEXT][BUFSIZ]; /* Context of current line */ EXTERN int contextoffset; /* Offset of line start in contextbufs[0] */ EXTERN unsigned char * currentchar; /* Location in contextbufs */ EXTERN unsigned char ctoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Current token as char */ EXTERN unsigned char filteredbuf[BUFSIZ]; /* Filtered line */ EXTERN ichar_t itoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Ctoken as ichar_t str */ EXTERN char termcap[2048]; /* termcap entry */ EXTERN char termstr[2048]; /* for string values */ EXTERN char * termptr; /* pointer into termcap, used by tgetstr */ EXTERN int numhits; /* number of hits in dictionary lookups */ EXTERN struct success hits[MAX_HITS]; /* table of hits gotten in lookup */ EXTERN unsigned char * hashstrings; /* Strings in hash table */ EXTERN struct hashheader hashheader; /* Header of hash table */ EXTERN struct dent * hashtbl; /* Main hash table, for dictionary */ EXTERN unsigned int hashsize; /* Size of main hash table */ EXTERN char hashname[MAXPATHLEN]; /* Name of hash table file */ EXTERN int aflag; /* NZ if -a or -A option specified */ EXTERN int cflag; /* NZ if -c (crunch) option */ EXTERN int lflag; /* NZ if -l (list) option */ EXTERN int incfileflag; /* whether xgets() acts exactly like gets() */ EXTERN int nodictflag; /* NZ if dictionary not needed */ EXTERN int uerasechar; /* User's erase character, from stty */ EXTERN int ukillchar; /* User's kill character */ EXTERN unsigned int laststringch; /* Number of last string character */ EXTERN int defstringgroup; /* Default string character group type */ EXTERN unsigned int numpflags; /* Number of prefix flags in table */ EXTERN unsigned int numsflags; /* Number of suffix flags in table */ EXTERN struct flagptr pflagindex[SET_SIZE + MAXSTRINGCHARS]; /* Fast index to pflaglist */ EXTERN struct flagent * pflaglist; /* Prefix flag control list */ EXTERN struct flagptr sflagindex[SET_SIZE + MAXSTRINGCHARS]; /* Fast index to sflaglist */ EXTERN struct flagent * sflaglist; /* Suffix flag control list */ EXTERN struct strchartype * /* String character type collection */ chartypes; EXTERN FILE * infile; /* File being corrected */ EXTERN FILE * outfile; /* Corrected copy of infile */ EXTERN FILE * sourcefile; /* File with full input data */ EXTERN FILE * logfile; /* File for logging corrections */ EXTERN char * askfilename; /* File specified in -f option */ EXTERN int changes; /* NZ if changes made to cur. file */ EXTERN int readonly; /* NZ if current file is readonly */ EXTERN int quit; /* NZ if we're done with this file */ #define MAXPOSSIBLE 100 /* Max no. of possibilities to generate */ EXTERN char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; /* Table of possible corrections */ EXTERN int pcount; /* Count of possibilities generated */ EXTERN int maxposslen; /* Length of longest possibility */ EXTERN int easypossibilities; /* Number of "easy" corrections found */ /* ..(defined as those using legal affixes) */ /* * The following array contains a list of characters that should be tried * in "missingletter." Note that lowercase characters are omitted. */ EXTERN int Trynum; /* Size of "Try" array */ EXTERN ichar_t Try[SET_SIZE + MAXSTRINGCHARS]; /* * Tables of keywords, used in defmt.c */ EXTERN struct kwtable htmlchecklist; /* List of HTML tags to always check */ EXTERN struct kwtable htmlignorelist; /* List of HTML tags to be ignored */ EXTERN struct kwtable texskip1list; /* List of TEX tags to skip 1 arg */ EXTERN struct kwtable texskip2list; /* List of TEX tags to skip 2 args */ /* * Initialized variables. These are generated using macros so that they * may be consistently declared in all programs. Numerous examples of * usage are given below. */ #ifdef MAIN #define INIT(decl, init) decl = init #else #define INIT(decl, init) extern decl #endif #ifdef MINIMENU INIT (int minimenusize, 2); /* MUST be either 2 or zero */ #else /* MINIMENU */ INIT (int minimenusize, 0); /* MUST be either 2 or zero */ #endif /* MINIMENU */ INIT (int askverbose, 0); /* NZ for verbose ask mode */ INIT (int eflag, 0); /* NZ for expand mode */ INIT (char * defmtpgm, NULL); /* Filter to use for deformatting */ INIT (int dumpflag, 0); /* NZ to do dump mode */ INIT (int fflag, 0); /* NZ if -f specified */ #ifndef USG INIT (int sflag, 0); /* NZ to stop self after EOF */ #endif INIT (int vflag, 0); /* NZ to display characters as M-xxx */ INIT (int xflag, DEFNOBACKUPFLAG); /* NZ to suppress backups */ INIT (int deftflag, -1); /* Default deformatting mode, chosen */ /* ..from DEFORMAT_* values */ INIT (int tflag, DEFTEXFLAG); /* Deformatting for current file */ INIT (int prefstringchar, -1); /* Preferred string character type */ INIT (int insidehtml, 0); /* Flag to indicate we're amid HTML */ /* 0 = normal text */ #define HTML_IN_TAG 0x01 /* in <...> tag */ #define HTML_IN_ENDTAG 0x02 /* in tag */ #define HTML_IN_SPEC 0x04 /* in &...; special-char sequence */ #define HTML_IN_QUOTE 0x08 /* in quoted text within tag */ #define HTML_CHECKING_QUOTE 0x10 /* checking quoted text within tag */ #define HTML_IGNORE 0x20 /* in text to be ignored */ /* ...must be last, because we use */ /* ...the higher bits as a nesting */ /* ...counter */ #define HTML_ISIGNORED (~(HTML_IGNORE - 1)) /* Mask for testing ignore bits */ INIT (int terse, 0); /* NZ for "terse" mode */ INIT (int correct_verbose_mode, 0); /* NZ for "verbose" -a mode */ INIT (char tempfile[MAXPATHLEN], ""); /* Name of file we're spelling into */ INIT (int minword, MINWORD); /* Longest always-legal word */ INIT (int sortit, 1); /* Sort suggestions alphabetically */ INIT (int compoundflag, -1); /* How to treat compounds: see above */ INIT (int tryhardflag, -1); /* Always call tryveryhard */ INIT (char * currentfile, NULL); /* Name of current input file */ /* Odd numbers for math mode in LaTeX; even for LR or paragraph mode */ INIT (int math_mode, 0); /* P -- paragraph or LR mode * b -- parsing a \begin statement * e -- parsing an \end statement * r -- parsing a \ref type of argument. * m -- looking for a \begin{minipage} argument. */ INIT (char LaTeX_Mode, 'P'); #endif /* ISPELL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/local.h.solaris0000644000000000000000000000007410233541510015545 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/local.h.solaris0000444003214100001440000000674610233541510016622 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.solaris,v 1.2 2005/04/26 22:40:08 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #define HAS_RENAME /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man4" #define MAN45EXT ".4" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/sq.c0000644000000000000000000000007410227500137013421 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/sq.c0000444003214100001440000000761010227500137014465 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: sq.c,v 1.16 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: sq.c,v $ * Revision 1.16 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.15 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.14 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.13 1999/01/07 01:57:41 geoff * Update the copyright. * * Revision 1.12 1994/01/25 07:12:09 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ int main P ((int argc, char * argv[])); static void trunc P ((char * word, char * prev)); /* * The following table encodes prefix sizes as a single character. A * matching table will be found in unsq.c. */ static char size_encodings[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', /* 00-09 */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', /* 10-19 */ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', /* 20-29 */ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', /* 30-39 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', /* 40-49 */ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', /* 50-59 */ 'y', 'z' /* 60-61 */ }; #define MAX_PREFIX (sizeof (size_encodings) - 1) int main (argc, argv) int argc; char * argv[]; { char word[257]; static char prev[257] = ""; while (gets (word) != NULL) trunc (word, prev); return 0; } static void trunc (word, prev) char * word; char * prev; { register char * wordp; register char * prevp; register int same_count; wordp = word; prevp = prev; for (same_count = 0; *wordp == *prevp++; ++wordp, ++same_count) ; if (same_count>MAX_PREFIX) same_count = MAX_PREFIX; (void) putchar (size_encodings[same_count]); (void) puts (wordp); (void) strcpy (prev, word); } ispell-3.4.00/PaxHeaders.19408/munchlist.X0000644000000000000000000000013212465617735015007 xustar0030 mtime=1423384541.149510902 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/munchlist.X0000555003214100001440000007551412465617735016073 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: munchlist.X,v 1.70 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, # Claremont, CA. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Given a list of words for ispell, generate a reduced list # in which all possible affixes have been collapsed. The reduced # list will match the same list as the original. # # Usage: # # munchlist [-l lang] [-c lang] [-s hashfile] [-D] [-w chars] [-v] \ # [file] ... # # Options: # # -l lang Specifies the language table to be used. The default # is "$LIBDIR/!!DEFLANG!!". # -c lang Specifies "conversion" language table. If this option is # given, the input file(s) will be assumed to be described by # this table, rather than the table given in the -l option. # This may be used to convert between incompatible language # tables. (When in doubt, use this option -- it doesn't # hurt, and it may save you from creating a dictionary that has # illegal words in it). The default is no conversion. # -T suff Specifies that the source word lists are in the format # of a "suff"-suffixed file, rather than in the # canonical form. For example, "-T tex" specifies that # string characters in the word lists are in TeX format. # The string character conversions are taken from the language # table specified by the "-l" switch. # -s Remove any words that are already covered by the # dictionary in 'hashfile'. The words will be removed # only if all affixes are covered. This option should not be # specified when the main dictionary is being munched. # 'Hashfile' must have been created with the language # table given in the -l option, but this is not checked. # -D Leave temporary files for debugging purposes # -w Passed on to ispell (specify chars that are part of a word) # Unfortunately, special characters must be quoted twice # rather than once when invoking this script. Also, since # buildhash doesn't accept this option, the final ispell -l # step ignores it, making it somewhat less than useful. # -v Report progress to stderr. # # The given input files are merged, then processed by 'ispell -c' # to generate possible affix lists; these are then combined # and reduced. The final result is written to standard output. # # For portability to older systems, I have avoided getopt. # # Geoff Kuenning # 2/28/87 # # $Log: munchlist.X,v $ # Revision 1.70 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. Fix a problem # with detecting a new-style sort that refuses to be backwards # compatible (and yes, it's still cretinism to break backwards # compatibility--but I have to put up with the cretins). # # Revision 1.69 2005/04/28 14:46:51 geoff # Remove references to the now-obsolete count file. # # Revision 1.68 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.67 2005/04/14 23:11:36 geoff # Pass the -w switch to icombine. # # Revision 1.66 2005/04/14 21:25:52 geoff # Make the temporary-file handling safer (using mktemp, if it exists). # # Revision 1.65 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.64 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Change the debugging names of the # minimal-affixes count and stat files. # # Revision 1.63 2002/06/20 23:46:16 geoff # Add yet more locale definitions so that we won't run into bugs caused # by sorting inconsistencies. # # Revision 1.62 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.61 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.60 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.59 2001/06/07 08:02:18 geoff # Fix a copule of typos in comments. # # Revision 1.58 2000/11/14 07:27:04 geoff # Don't generate an extra dot when attempting to preserve the count # files in -D mode. # # Revision 1.57 2000/10/06 23:59:48 geoff # Don't assume dot is in the path # # Revision 1.56 1999/01/07 01:22:42 geoff # Update the copyright. # # Revision 1.55 1997/12/02 06:25:01 geoff # Start the cross-expansions loop count at 1, not zero. # # Revision 1.54 1997/12/01 00:53:52 geoff # Abort the munchlist cross-product loop if it goes over 100 passes. # # Revision 1.53 1995/01/08 23:23:36 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.52 1994/12/27 23:08:46 geoff # Dynamically determine how to pass backslashes to 'tr' so that it'll # work on any machine. Define LC_CTYPE to work around yet more # internationalized sort programs. Work around a bug in GNU uniq that # uses the wrong separator between counts and duplicated lines. # # Revision 1.51 1994/11/21 07:02:54 geoff # Correctly quote the arguments to 'tr' when detecting systems with # unsigned sorts. Be sure to provide a zero exit status on all systems, # even if MUNCHDEBUG is not set. # # Revision 1.50 1994/10/25 05:46:05 geoff # Export values for LANG and LOCALE in an attempt to override some # stupidly-internationalized sort programs. # # Revision 1.49 1994/10/04 03:51:30 geoff # Add the MUNCHMAIL feature. If the MUNCHMAIL environment variable is # set to an email address, debugging information about the munchlist run # will automatically be collected and mailed to that address. # # Revision 1.48 1994/05/17 06:32:06 geoff # Don't look for affix tables in LIBDIR if the name contains a slash # # Revision 1.47 1994/04/27 02:50:48 geoff # Fix some cosmetic flaws in the verbose-mode messages. # # Revision 1.46 1994/01/25 07:11:59 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} MUNCHDIR=`mktemp -d ${TDIR}/munchXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/munch$$" || (echo "Can't create temp directory: ${TDIR}/munch$$" 1>&2; exit 1); MUNCHDIR="$TDIR/munch$$") TMP=${MUNCHDIR}/munch. MAILDEBUGDIR=${MUNCHDIR-/tmp} if [ "X$MUNCHMAIL" != X ] then exec 2> ${MAILDEBUGDIR}/munchlist.mail echo "munchlist $*" 1>&2 set -vx fi SORTTMP="-T ${TDIR}" # !!SORTTMP!! DBDIR=${MUNCHDEBUGDIR-$MAILDEBUGDIR} # Detect MS-DOS systems and arrange to use their silly suffix system if [ -z "$COMSPEC$ComSpec" ] then EXE="" else EXE=".exe" fi # # Set up some program names. This prefers the versions that are in # the same directory as munchlist was run from; if that can't be # figured out, it prefers local versions and finally ones chosen from # $PATH. # # This code could be simplified by using the dirname command, but it's # not available everywhere. For the same reason, we use -r rather than # -x to test for executable files. # case "$0" in */*) bindir=`expr "$0" : '\(.*\)/[^/]*'` ;; *) bindir='.' ;; esac if [ -r $bindir/buildhash$EXE ] then BUILDHASH=$bindir/buildhash$EXE elif [ -r ./buildhash$EXE ] then BUILDHASH=./buildhash$EXE else BUILDHASH=buildhash fi if [ -r $bindir/icombine$EXE ] then COMBINE=$bindir/icombine$EXE elif [ -r ./icombine$EXE ] then COMBINE=./icombine$EXE else COMBINE=icombine fi if [ -r $bindir/ijoin$EXE ] then JOIN=$bindir/ijoin$EXE elif [ -r ./ijoin$EXE ] then JOIN=./ijoin$EXE else JOIN=ijoin fi if [ -r $bindir/ispell$EXE ] then ISPELL=$bindir/ispell$EXE elif [ -r ./ispell$EXE ] then ISPELL=./ispell$EXE else ISPELL=ispell fi # In one of the most incredibly stupid decisions of all time, some # genius decided to break backwards compatibility by "deprecating" the # old-style sort switches even though it was trivial to recognize both # styles. The result is that that thousands of people (like me) will # have to rewrite shell scripts to tolerate that stupidity. (It's not # that the new syntax is bad--it's definitely easier to understand. # But that doesn't excuse breaking compatibility.) # # Detect whether sort accepts old-style switches. if sort +0 /dev/null >/dev/null 2>&1 then CRETIN_SORT=false else CRETIN_SORT=true fi # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME debug=no dictopt= langtabs=${LIBDIR}/!!DEFLANG!! convtabs= strip=no icflags= verbose=false # The following value of "wchars" is necessary to prevent ispell from # receiving a null argument if -w is not specified. As long as "A" is # a member of the existing character set, ispell will ignore the argument. wchars=-wA while [ $# != 0 ] do case "$1" in -l) case "$2" in */*) langtabs=$2 ;; *) if [ -r "$2" ] then langtabs="$2" else langtabs="${LIBDIR}/$2" fi ;; esac if [ ! -r "$langtabs" ] then echo "Can't open language table '$2'" 1>&2 rm -rf $MUNCHDIR exit 1 fi shift ;; -c) if [ -r "$2" ] then convtabs="$2" elif [ -r "${LIBDIR}/$2" ] then convtabs="${LIBDIR}/$2" else echo "Can't open conversion language table '$2'" 1>&2 rm -rf $MUNCHDIR exit 1 fi shift ;; -s) dictopt="-d $2" strip=yes shift ;; -D) debug=yes ;; -T) icflags="-T $2" shift ;; -v) verbose=true ;; -w) wchars="-w$2" shift ;; --) shift break ;; -) break ;; -*) echo 'Usage: munchlist [-l lang] [-c lang] [-T suff] [-s hashfile] [-D] [-w chars] [-v] [file] ...' \ 1>&2 rm -rf $MUNCHDIR exit 2 ;; *) break ;; esac shift done if [ "X$MUNCHMAIL" != X ] then verbose=true debug=yes fi trap "rm -rf $MUNCHDIR; exit 1" 1 2 13 15 # # Names of temporary files. This is just to make the code a little easier # to read. # EXPANDEDINPUT=${TMP}a STRIPPEDINPUT=${TMP}b CRUNCHEDINPUT=${TMP}c PRODUCTLIST=${TMP}d EXPANDEDPAIRS=${TMP}e LEGALFLAGLIST=${TMP}f JOINEDPAIRS=${TMP}g MINIMALAFFIXES=${TMP}h CROSSROOTS=${TMP}i CROSSEXPANDED=${TMP}j CROSSPAIRS=${TMP}k CROSSILLEGAL=${TMP}l ILLEGALCOMBOS=${TMP}m FAKEDICT=${TMP}n # Ispell insists that hash files have a "!!HASHSUFFIX!!" suffix FAKEHASH=${TMP}o!!HASHSUFFIX!! AWKSCRIPT=${TMP}p if [ "$debug" = yes ] then touch $EXPANDEDINPUT $STRIPPEDINPUT $CRUNCHEDINPUT $PRODUCTLIST \ $EXPANDEDPAIRS $LEGALFLAGLIST $JOINEDPAIRS $MINIMALAFFIXES \ $CROSSROOTS $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $ILLEGALCOMBOS \ $FAKEDICT $FAKEHASH $AWKSCRIPT rm -f ${DBDIR}/EXPANDEDINPUT ${DBDIR}/STRIPPEDINPUT \ ${DBDIR}/CRUNCHEDINPUT ${DBDIR}/PRODUCTLIST ${DBDIR}/EXPANDEDPAIRS \ ${DBDIR}/LEGALFLAGLIST ${DBDIR}/JOINEDPAIRS ${DBDIR}/MINIMALAFFIXES \ ${DBDIR}/CROSSROOTS ${DBDIR}/CROSSEXPANDED ${DBDIR}/CROSSPAIRS \ ${DBDIR}/CROSSILLEGAL ${DBDIR}/ILLEGALCOMBOS ${DBDIR}/FAKEDICT \ ${DBDIR}/FAKEHASH!!HASHSUFFIX!! ${DBDIR}/AWKSCRIPT \ ${DBDIR}/CROSSROOTS.[0-9]* ${DBDIR}/CROSSEXP.[0-9]* \ ${DBDIR}/CROSSPAIRS.[0-9]* ${DBDIR}/CROSSILLEGAL.[0-9]* ln $EXPANDEDINPUT ${DBDIR}/EXPANDEDINPUT ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT ln $CRUNCHEDINPUT ${DBDIR}/CRUNCHEDINPUT ln $PRODUCTLIST ${DBDIR}/PRODUCTLIST ln $EXPANDEDPAIRS ${DBDIR}/EXPANDEDPAIRS ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST ln $JOINEDPAIRS ${DBDIR}/JOINEDPAIRS ln $MINIMALAFFIXES ${DBDIR}/MINIMALAFFIXES ln $CROSSROOTS ${DBDIR}/CROSSROOTS ln $CROSSEXPANDED ${DBDIR}/CROSSEXPANDED ln $CROSSPAIRS ${DBDIR}/CROSSPAIRS ln $CROSSILLEGAL ${DBDIR}/CROSSILLEGAL ln $ILLEGALCOMBOS ${DBDIR}/ILLEGALCOMBOS ln $FAKEDICT ${DBDIR}/FAKEDICT ln $FAKEHASH ${DBDIR}/FAKEHASH!!HASHSUFFIX!! ln $AWKSCRIPT ${DBDIR}/AWKSCRIPT fi # # Create a dummy dictionary to hold a compiled copy of the language # table. Initially, it holds the conversion table, if it exists. # case "X$convtabs" in X) convtabs="$langtabs" ;; esac echo 'QQQQQQQQ' > $FAKEDICT $BUILDHASH -s $FAKEDICT $convtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $MUNCHDIR; exit 1) \ || exit 1 # # Figure out how 'sort' sorts signed fields, for arguments to ijoin. # This is a little bit of a tricky pipe, but the result is that SIGNED # is set to "-s" if characters with the top bit set sort before those # without, and "-u" if the reverse is true. How does it work? The # first "tr" step generates two lines, one containing "-u", the other # with the same but with the high-order bit set. The second "tr" # changes the high-bit "-u" back to "-s". If the high-bit "-u" was # sorted first, the sed step will select "-s" for SIGNED; otherwise # it'll pick "-u". We have to be careful about backslash quoting # conventions, because some systems differ. # backslash=\\ for i in 0 1 2 3 do if [ `echo a | tr "${backslash}141" b` = b ] then break fi backslash="$backslash$backslash" done SIGNED=`echo '-s -u' | tr s "${backslash}365" | sort | tr "${backslash}365" s | sed -e 1q` # # Collect all the input and expand all the affix options ($ISPELL -e), # and preserve (sorted) for later joining in EXPANDEDINPUT. The icombine # step is to make sure that unneeded capitalizations (e.g., Farmer and farmer) # are weeded out. The first sort must be folded for icombine; the second # must be unfolded for join. # $verbose && echo "Collecting input." 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi if [ $# -eq 0 ] then $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " ' ' else cat "$@" | $ISPELL "$wchars" -e1 -d $FAKEHASH -p /dev/null | tr " " ' ' fi \ | sort $SORTTMP -u $sortopts \ | $COMBINE $icflags "$wchars" $langtabs \ | sort $SORTTMP -u > $EXPANDEDINPUT # # If a conversion table existed, recreate the fake hash file with the # "real" language table. # case "$convtabs" in $langtabs) ;; *) $BUILDHASH -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; \ rm -rf $MUNCHDIR; exit 1) \ || exit 1 ;; esac rm -f ${FAKEDICT}* # # If the -s (strip) option was specified, remove all # expanded words that are covered by the dictionary. This produces # the final list of expanded words that this dictionary must cover. # Leave the list in STRIPPEDINPUT. # if [ "X$strip" = "Xno" ] then rm -f $STRIPPEDINPUT ln $EXPANDEDINPUT $STRIPPEDINPUT if [ "$debug" = yes ] then rm -f ${DBDIR}/STRIPPEDINPUT ln $STRIPPEDINPUT ${DBDIR}/STRIPPEDINPUT fi else $verbose && echo "Stripping words already in the dictionary." 1>&2 $ISPELL "$wchars" -l $dictopt -p /dev/null < $EXPANDEDINPUT \ > $STRIPPEDINPUT fi # # Figure out what the flag-marking character is. # $verbose && echo "Finding flag marker." 1>&2 flagmarker=`$ISPELL -D -d $FAKEHASH \ | sed -n -e '/^flagmarker/s/flagmarker //p'` case "$flagmarker" in \\*) flagmarker=`expr "$flagmarker" : '.\(.\)'` ;; esac # # Munch the input to generate roots and affixes ($ISPELL -c). We are # only interested in words that have at least one affix (egrep $flagmarker); # the next step will pick up the rest. Some of the roots are illegal. We # use join to restrict the output to those root words that are found # in the original dictionary. # $verbose && echo "Generating roots and affixes." 1>&2 if $CRETIN_SORT then sortopts='-k 1,1 -k 2' else sortopts='+0 -1 +1' fi $ISPELL "$wchars" -c -W0 -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT \ | tr " " ' ' \ | egrep "$flagmarker" | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $JOIN $SIGNED "-t$flagmarker" - $EXPANDEDINPUT > $CRUNCHEDINPUT # # We now have a list of legal roots, and of affixes that apply to the # root words. However, it is possible for some affix flags to generate more # than one output word. For example, with the flag table entry # # flag R: . > ER # . > ERS # # the input "BOTHER" will generate an entry "BOTH/R" in CRUNCHEDINPUT. But # this will accept "BOTHER" and "BOTHERS" in the dictionary, which is # wrong (in this case, though it's good English). # # To cure this problem, we first have to know which flags generate which # expansions. We use $ISPELL -e3 to expand the flags (the second e causes # the root and flag to be included in the output), and get pairs # suitable for joining. In the example above, we would get # # BOTH/R BOTHER # BOTH/R BOTHERS # # We save this in EXPANDEDPAIRS for the next step. # $verbose && echo 'Expanding dictionary into EXPANDEDPAIRS.' 1>&2 if $CRETIN_SORT then sortopts='-k 2' else sortopts='+1' fi $ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CRUNCHEDINPUT \ | sort $SORTTMP $sortopts > $EXPANDEDPAIRS # # Now we want to extract the lines in EXPANDEDPAIRS in which the second field # is *not* listed in the original dictionary EXPANDEDINPUT; these illegal # lines contain the flags we cannot include without accepting illegal words. # It is somewhat easier to extract those which actually are listed (with # join), and then use comm to strip these from EXPANDEDPAIRS to get the # illegal expansions, together with the flags that generate them (we must # re-sort EXPANDEDPAIRS before running comm). Sed # gets rid of the expansion and uniq gets rid of duplicates. Comm then # selects the remainder of the list from CRUNCHEDINPUT and puts it in # LEGALFLAGLIST. The final step is to use a sort and icombine to put # the list into a one-entry-per-root format. # # BTW, I thought of using cut for the sed step (on systems that have it), # but it turns out that sed is faster! # $JOIN -j1 2 -o 1.1 1.2 $SIGNED $EXPANDEDPAIRS $EXPANDEDINPUT \ | sort $SORTTMP -u > $JOINEDPAIRS sort $SORTTMP -o $EXPANDEDPAIRS $EXPANDEDPAIRS sort $SORTTMP -o $CRUNCHEDINPUT $CRUNCHEDINPUT $verbose && echo 'Creating list of legal roots/flags.' 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi comm -13 $JOINEDPAIRS $EXPANDEDPAIRS \ | (sed -e 's; .*$;;' ; rm -f $JOINEDPAIRS $EXPANDEDPAIRS) \ | uniq \ | (comm -13 - $CRUNCHEDINPUT ; rm -f $CRUNCHEDINPUT) \ | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $COMBINE "$wchars" $langtabs > $LEGALFLAGLIST # # LEGALFLAGLIST now contains root/flag combinations that, when expanded, # produce only words from EXPANDEDPAIRS. However, there is still a # problem if the language tables have any cross-product flags. A legal # root may appear in LEGALFLAGLIST with two flags that participate # in cross-products. When such a dictionary entry is expanded, # the cross-products will generate some extra words that may not # be in EXPANDEDPAIRS. We need to remove these from LEGALFLAGLIST. # # The first step is to collect the names of the flags that participate # in cross-products. Ispell will dump the language tables for us, and # sed is a pretty handy way to strip out extra information. We use # uniq -c and a numerical sort to put the flags in approximate order of how # "productive" they are (in terms of how likely they are to generate a lot # of output words). The least-productive flags are given last and will # be removed first. # $verbose \ && echo 'Creating list of flags that participate in cross-products.' 1>&2 if $CRETIN_SORT then sortopts='-k 1rn,1 -k 3' else sortopts='+0rn -1 +2' fi $ISPELL -D -d $FAKEHASH \ | sed -n -e '1,$s/:.*$// /^flagmarker/d /^prefixes/,/^suffixes/s/^ flag \*/p /p /^suffixes/,$s/^ flag \*/s /p' \ | sort $SORTTMP \ | uniq -c \ | tr ' ' ' ' \ | sort $SORTTMP $sortopts > $PRODUCTLIST if [ `egrep ' p ' $PRODUCTLIST | wc -l` -gt 0 \ -a `egrep ' s ' $PRODUCTLIST | wc -l` -gt 0 ] then # # The language tables allow cross products. See if LEGALFLAGLIST has # any roots with multiple cross-product flags. Put them in CROSSROOTS. # $verbose && echo 'Finding prefix and suffix flags.' 1>&2 preflags=`sed -n -e 's/^[ 0-9]*p //p' $PRODUCTLIST | tr -d ' '` sufflags=`sed -n -e 's/^[ 0-9]*s //p' $PRODUCTLIST | tr -d ' '` egrep "$flagmarker.*[$preflags].*[$sufflags]|$flagmarker.*[$sufflags].*[$preflags]" \ $LEGALFLAGLIST \ > $CROSSROOTS # # We will need an awk script; it's so big that it core-dumps my shell # under certain conditions. The rationale behind the script is commented # where the script is used. Note that you may want to change this # script for languages other than English. # case "$flagmarker" in /) sedchar=: ;; *) sedchar=/ ;; esac $verbose && echo 'Creating awk script.' 1>&2 sed -e "s/PREFLAGS/$preflags/" -e "s/SUFFLAGS/$sufflags/" \ -e "s;ILLEGALCOMBOS;$ILLEGALCOMBOS;" \ -e "s${sedchar}FLAGMARKER${sedchar}$flagmarker${sedchar}" \ > $AWKSCRIPT << 'ENDOFAWKSCRIPT' BEGIN \ { preflags = "PREFLAGS" sufflags = "SUFFLAGS" illegalcombos = "ILLEGALCOMBOS" flagmarker = "FLAGMARKER" pflaglen = length (preflags) for (i = 1; i <= pflaglen; i++) pflags[i] = substr (preflags, i, 1); sflaglen = length (sufflags) for (i = 1; i <= sflaglen; i++) sflags[i] = substr (sufflags, i, 1); } { len = length ($2) pnew2 = "" snew2 = "" pbad = "" sbad = "" sufs = 0 pres = 0 for (i = 1; i <= len; i++) { curflag = substr ($2, i, 1) for (j = 1; j <= pflaglen; j++) { if (pflags[j] == curflag) { pres++ pnew2 = substr ($2, 1, i - 1) substr ($2, i + 1) pbad = curflag } } for (j = 1; j <= sflaglen; j++) { if (sflags[j] == curflag) { sufs++ snew2 = substr ($2, 1, i - 1) substr ($2, i + 1) sbad = curflag } } } if (pres == 1) { print $1 flagmarker pnew2 print $1 flagmarker pbad >> illegalcombos } else if (sufs == 1) { print $1 flagmarker snew2 print $1 flagmarker sbad >> illegalcombos } else if (pres > 0) { print $1 flagmarker pnew2 print $1 flagmarker pbad >> illegalcombos } else { print $1 flagmarker snew2 print $1 flagmarker sbad >> illegalcombos } } ENDOFAWKSCRIPT : > $ILLEGALCOMBOS dbnum=1 while [ -s $CROSSROOTS ] do # # CROSSROOTS contains the roots whose cross-product expansions # might be illegal. We now need to locate the actual illegal ones. # We do this in much the same way we created LEGALFLAGLIST from # CRUNCHEDINPUT. First we make CROSSEXPANDED, which is analogous # to EXPANDEDPAIRS. # $verbose && echo "Creating cross expansions (pass $dbnum)." 1>&2 if $CRETIN_SORT then sortopts='-k 2' else sortopts='+1' fi $ISPELL "$wchars" -e3 -d $FAKEHASH -p /dev/null < $CROSSROOTS \ | sort $SORTTMP $sortopts > $CROSSEXPANDED # # Now we join CROSSEXPANDED against EXPANDEDINPUT to produce # CROSSPAIRS, and then comm that against CROSSEXPANDED to # get CROSSILLEGAL, the list of illegal cross-product flag # combinations. # $JOIN -j1 2 -o 1.1 1.2 $SIGNED $CROSSEXPANDED $EXPANDEDINPUT \ | sort $SORTTMP -u > $CROSSPAIRS sort $SORTTMP -u -o $CROSSEXPANDED $CROSSEXPANDED $verbose \ && echo "Finding illegal cross expansions (pass $dbnum)." 1>&2 comm -13 $CROSSPAIRS $CROSSEXPANDED \ | sed -e 's; .*$;;' \ | uniq > $CROSSILLEGAL if [ "$debug" = yes ] then mv $CROSSROOTS $DBDIR/CROSSROOTS.$dbnum ln $CROSSEXPANDED $DBDIR/CROSSEXP.$dbnum ln $CROSSPAIRS $DBDIR/CROSSPAIRS.$dbnum ln $CROSSILLEGAL $DBDIR/CROSSILLEGAL.$dbnum fi # # Now it is time to try to clear up the illegalities. For # each word in the illegal list, remove one of the cross-product # flags. The flag chosen is selected in an attempt to cure the # problem quickly, as follows: (1) if there is only one suffix # flag or only one prefix flag, we remove that. (2) If there is # a prefix flag, we remove the "least desirable" (according to # the order of preflags). (This may be pro-English prejudice, # and you might want to change this if your language is prefix-heavy). # (3) Otherwise we remove the least-desirable suffix flag # # The output of the awk script becomes the new CROSSROOTS. In # addition, we add the rejected flags to ILLEGALCOMBOS (this is done # inside the awk script) so they can be removed from LEGALFLAGLIST # later. # awk "-F$flagmarker" -f $AWKSCRIPT $CROSSILLEGAL > $CROSSROOTS if [ "$debug" = yes ] then rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL fi dbnum=`expr $dbnum + 1` if [ $dbnum -gt 100 ] then echo "Too many passes, aborting cross-product loop. Munchlist failed." 1>&2 if [ "X$MUNCHMAIL" != X ] then ( ls -ld ${DBDIR}/[A-Z]* cat ${MAILDEBUGDIR}/munchlist.mail ) | mail -s 'Munchlist debug output' "$MUNCHMAIL" rm -f ${MAILDEBUGDIR}/munchlist.mail fi rm -rf $MUNCHDIR exit 1 fi done rm -f $CROSSEXPANDED $CROSSPAIRS $CROSSILLEGAL $AWKSCRIPT # # Now we have, in ILLEGALCOMBOS, a list of root/flag combinations # that must be removed from LEGALFLAGLIST to get the final list # of truly legal flags. ILLEGALCOMBOS has one flag per line, so # by turning LEGALFLAGLIST into this form (sed), it's an # easy task for comm. We have to recombine flags again after the # extraction, to get all flags for a given root on the same line so that # cross-products will come out right. # if [ -s $ILLEGALCOMBOS ] then sort $SORTTMP -u -o $ILLEGALCOMBOS $ILLEGALCOMBOS $verbose && echo 'Finding roots of cross expansions.' 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi sort $SORTTMP $LEGALFLAGLIST \ | sed -e '/\/../{ s;^\(.*\)/\(.\)\(.*\);\1/\2\ \1/\3; P D }' \ | comm -23 - $ILLEGALCOMBOS \ | sort $SORTTMP -u "-t$flagmarker" $sortopts \ | $COMBINE "$wchars" $langtabs > $CROSSROOTS mv $CROSSROOTS $LEGALFLAGLIST if [ "$debug" = yes ] then rm -f ${DBDIR}/LEGALFLAGLIST1 ln $LEGALFLAGLIST ${DBDIR}/LEGALFLAGLIST1 fi fi fi rm -f $PRODUCTLIST $CROSSROOTS $ILLEGALCOMBOS $EXPANDEDINPUT # # We now have (in LEGALFLAGLIST) a list of roots and flags which will # accept words taken from EXPANDEDINPUT and no others (though some of # EXPANDEDINPUT is not covered by this list). However, many of the # expanded words can be generated in more than one way. For example, # "bather" can be generated from "bath/R" and "bathe/R". This wastes # unnecessary space in the raw dictionary and, in some cases, in the # hash file as well. The solution is to list the various ways of # getting a given word and choose exactly one. All other things being # equal, we want to choose the one with the highest expansion length # to root length ratio. The $ISPELL -e4 option takes care of this by # providing us with a field to sort on. # # The ispell/awk combination is similar to the ispell/sed pipe used to # generate EXPANDEDPAIRS, except that ispell adds an extra field # giving the sort order. The first sort gets things in order so the # first root listed is the one we want, and the second sort (-um) then # selects that first root. Sed strips the expansion from the root, # and a final sort -u generates MINIMALAFFIXES, the final list of # affixes that (more or less) minimally covers what it can from # EXPANDEDINPUT. # $verbose && echo 'Eliminating non-optimal affixes.' 1>&2 if $CRETIN_SORT then sortopts1='-k 2,2 -k 2rn,3 -k 1,1' sortopts2='-k 2,2' sortopts3='-k 1f,1 -k 1' else sortopts1='+1 -2 +2rn -3 +0 -1' sortopts2='+1 -2' sortopts3='+0f -1 +0' fi $ISPELL "$wchars" -e4 -d $FAKEHASH -p /dev/null < $LEGALFLAGLIST \ | sort $SORTTMP $sortopts1 \ | sort $SORTTMP -um $sortopts2 \ | sed -e 's; .*$;;' \ | sort $SORTTMP -u "-t$flagmarker" $sortopts3 > $MINIMALAFFIXES rm -f $LEGALFLAGLIST # # Now we're almost done. MINIMALAFFIXES covers some (with luck, most) # of the words in STRIPPEDINPUT. Now we must create a list of the remaining # words (those omitted by MINIMALAFFIXES) and add it to MINIMALAFFIXES. # The best way to do this is to actually build a partial dictionary from # MINIMALAFFIXES in FAKEHASH, and then use $ISPELL -l to list the words that # are not covered by this dictionary. This must then be combined with the # reduced version of MINIMALAFFIXES and sorted to produce the final result. # $verbose && echo "Generating output word list." 1>&2 if $CRETIN_SORT then sortopts='-k 1f,1 -k 1' else sortopts='+0f -1 +0' fi if [ -s $MINIMALAFFIXES ] then $BUILDHASH -s $MINIMALAFFIXES $langtabs $FAKEHASH > /dev/null \ || (echo "Couldn't create intermediate hash file" 1>&2; rm -rf $MUNCHDIR; exit 1) \ || exit 1 if [ "$debug" = yes ] then rm -f ${DBDIR}/MINIMALAFFIXES!!STATSUFFIX!! ln $MINIMALAFFIXES!!STATSUFFIX!! ${DBDIR}/MINIMALAFFIXES.!!STATSUFFIX!! fi ($ISPELL "$wchars" -l -d $FAKEHASH -p /dev/null < $STRIPPEDINPUT; \ $COMBINE "$wchars" $langtabs < $MINIMALAFFIXES) \ | sort $SORTTMP "-t$flagmarker" -u $sortopts else # MINIMALAFFIXES is empty; just produce a sorted version of STRIPPEDINPUT sort $SORTTMP "-t$flagmarker" -u $sortopts $STRIPPEDINPUT fi if [ "X$MUNCHMAIL" != X ] then ( ls -ld ${DBDIR}/[A-Z]* cat ${MAILDEBUGDIR}/munchlist.mail ) | mail -s 'Munchlist debug output' "$MUNCHMAIL" rm -f ${MAILDEBUGDIR}/munchlist.mail fi rm -rf $MUNCHDIR exit 0 ispell-3.4.00/PaxHeaders.19408/correct.c0000644000000000000000000000013212465617735014455 xustar0030 mtime=1423384541.122510584 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/correct.c0000444003214100001440000015320112465617735015524 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: correct.c,v 1.83 2015-02-08 00:35:41-08 geoff Exp $"; #endif /* * correct.c - Routines to manage the higher-level aspects of spell-checking * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: correct.c,v $ * Revision 1.83 2015-02-08 00:35:41-08 geoff * Fix a namespace collision with "getline". * * Revision 1.82 2005/04/28 14:46:51 geoff * Add code to log all corrections and replacements. * * Revision 1.81 2005/04/20 23:16:32 geoff * Add inpossibilities, and use it to deal with the case where uppercase * SS in German causes ambiguities. Rename some variables to make them * more meaningful. * * Revision 1.80 2005/04/14 14:38:23 geoff * Update license. Use i-prefixed names for terminal access functions to * prevent conflicts with libraries. Fix a bug that caused a hang when * using external deformatters. * * Revision 1.79 2001/09/06 00:40:44 geoff * In ask mode, when extending long lines to ensure that a word hasn't * been broken, remember to do the extension inside both the context and * the filtered buffer. * * Revision 1.78 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.77 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.76 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.75 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bcopy to avoid compilation problems on * smarter compilers. * * Revision 1.74 2001/06/10 23:54:56 geoff * Fix an ask-mode bug that could cause hangs. * * Revision 1.73 2001/06/07 08:02:18 geoff * When copying out, be sure to use the information from contextbufs[0] * (the original file) rather then filteredbuf (the deformatted * information). * * Revision 1.72 2000/08/24 06:47:16 geoff * Fix a dumb error in merging the correct_verbose_mode patch * * Revision 1.71 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.70 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.69 1999/11/04 07:51:05 geoff * In verbose ask mode, put out a newline after the EOF so the TTY looks * nice. * * Revision 1.68 1999/11/04 07:19:59 geoff * Add "oktochange" to inserttoken, and set it to false on the first of * each paired call. * * Revision 1.67 1999/10/05 05:49:56 geoff * When processing the ~ command, don't pass a newline by accident! * * Revision 1.66 1999/01/18 03:28:24 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.65 1999/01/07 01:57:51 geoff * Update the copyright. * * Revision 1.64 1999/01/03 01:46:25 geoff * Add support for external deformatters. Also display tab characters * correctly when showing context. * * Revision 1.63 1997/12/02 06:24:38 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.62 1997/12/01 00:53:43 geoff * Don't strip out the newline at the end of contextbufs on long lines. * * Revision 1.61 1995/11/08 05:09:26 geoff * Add the new interactive mode ("askverbose"). Modify the deformatting * support to allow html/sgml as a full equal of nroff and TeX. * * Revision 1.60 1995/10/25 04:05:28 geoff * Line added by Gerry Tierney to reset insidehtml flag for each new file * in case a tag was left open by a previous file. 10/14/95. * * Revision 1.59 1995/08/05 23:19:43 geoff * Fix a bug that caused offsets for long lines to be confused if the * line started with a quoting uparrow. * * Revision 1.58 1994/11/02 06:56:00 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.57 1994/10/26 05:12:39 geoff * Try boundary characters when inserting or substituting letters, except * (naturally) at word boundaries. * * Revision 1.56 1994/10/25 05:46:30 geoff * Fix an assignment inside a conditional that could generate spurious * warnings (as well as being bad style). Add support for the FF_ANYWORD * option. * * Revision 1.55 1994/09/16 04:48:24 geoff * Don't pass newlines from the input to various other routines, and * don't assume that those routines leave the input unchanged. * * Revision 1.54 1994/09/01 06:06:41 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.53 1994/08/31 05:58:38 geoff * Add code to handle extremely long lines in -a mode without splitting * words or reporting incorrect offsets. * * Revision 1.52 1994/05/25 04:29:24 geoff * Fix a bug that caused line widths to be calculated incorrectly when * displaying lines containing tabs. Fix a couple of places where * characters were sign-extended incorrectly, which could cause 8-bit * characters to be displayed wrong. * * Revision 1.51 1994/05/17 06:44:05 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.50 1994/04/27 05:20:14 geoff * Allow compound words to be formed from more than two components * * Revision 1.49 1994/04/27 01:50:31 geoff * Add support to correctly capitalize words generated as a result of a * missing-space suggestion. * * Revision 1.48 1994/04/03 23:23:02 geoff * Clean up the code in missingspace() to be a bit simpler and more * efficient. * * Revision 1.47 1994/03/15 06:24:23 geoff * Fix the +/-/~ commands to be independent. Allow the + command to * receive a suffix which is a deformatter type (currently hardwired to * be either tex or nroff/troff). * * Revision 1.46 1994/02/21 00:20:03 geoff * Fix some bugs that could cause bad displays in the interaction between * TeX parsing and string characters. Show_char now will not overrun * the inverse-video display area by accident. * * Revision 1.45 1994/02/14 00:34:51 geoff * Fix correct to accept length parameters for ctok and itok, so that it * can pass them to the to/from ichar routines. * * Revision 1.44 1994/01/25 07:11:22 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include "version.h" void givehelp P ((int interactive)); void checkfile P ((void)); void correct P ((unsigned char * ctok, int ctokl, ichar_t * itok, int itokl, unsigned char ** curchar)); static void show_line P ((unsigned char * line, unsigned char * invstart, int invlen)); static int show_char P ((unsigned char ** cp, int linew, int output, int maxw)); static int line_size P ((unsigned char * buf, unsigned char * bufend)); static void inserttoken P ((unsigned char * buf, unsigned char * start, unsigned char * tok, unsigned char ** curchar, int oktochange)); static int posscmp P ((unsigned char * a, unsigned char * b)); int casecmp P ((unsigned char * a, unsigned char * b, int canonical)); void makepossibilities P ((ichar_t * word)); int inpossibilities P ((unsigned char * ctok)); static int insert P ((ichar_t * word)); static void wrongcapital P ((ichar_t * word)); static void wrongletter P ((ichar_t * word)); static void extraletter P ((ichar_t * word)); static void missingletter P ((ichar_t * word)); static void missingspace P ((ichar_t * word)); int compoundgood P ((ichar_t * word, int pfxopts)); static void transposedletter P ((ichar_t * word)); static void tryveryhard P ((ichar_t * word)); static int ins_cap P ((ichar_t * word, ichar_t * pattern)); static int save_cap P ((ichar_t * word, ichar_t * pattern, ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN])); int ins_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent)); static void save_root_cap P ((ichar_t * word, ichar_t * pattern, int prestrip, int preadd, int sufstrip, int sufadd, struct dent * firstdent, struct flagent * pfxent, struct flagent * sufent, ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN], int * nsaved)); static char * get_line_from_user P ((char * buf, int bufsize)); void askmode P ((void)); void copyout P ((unsigned char ** cc, int cnt)); static void lookharder P ((unsigned char * string)); #ifdef REGEX_LOOKUP static void regex_dict_lookup P ((char * cmd, char * grepstr)); #endif /* REGEX_LOOKUP */ void givehelp (interactive) int interactive; /* NZ for interactive-mode help */ { #ifdef COMMANDFORSPACE char ch; #endif register FILE *helpout; /* File to write help to */ if (interactive) { ierase (); helpout = stdout; } else helpout = stderr; (void) fprintf (helpout, CORR_C_HELP_1, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_2, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_3, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_4, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_5, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_6, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_7, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_8, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_9, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_COMMANDS, MAYBE_CR (helpout), MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_R_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_BLANK, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_A_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_I_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_U_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_0_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_L_CMD, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_X_CMD, MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_Q_CMD, MAYBE_CR (helpout), MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_BANG, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_REDRAW, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_SUSPEND, MAYBE_CR (helpout)); (void) fprintf (helpout, CORR_C_HELP_HELP, MAYBE_CR (helpout)); if (interactive) { (void) fprintf (helpout, "\r\n"); imove (li - 1, 0); /* bottom line, no matter what screen size is */ (void) fprintf (helpout, CORR_C_HELP_TYPE_SPACE); (void) fflush (helpout); #ifdef COMMANDFORSPACE ch = GETKEYSTROKE (); if (ch != ' ' && ch != '\n' && ch != '\r') (void) ungetc (ch, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } } void checkfile () { int bufno; unsigned int bufsize; int ch; insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; for (bufno = 0; bufno < contextsize; bufno++) contextbufs[bufno][0] = '\0'; for ( ; ; ) { for (bufno = contextsize; --bufno > 0; ) (void) strcpy ((char *) contextbufs[bufno], (char *) contextbufs[bufno - 1]); if (quit) /* quit can't be set in l mode */ { if (sourcefile == NULL) sourcefile = infile; while (fgets ((char *) contextbufs[0], sizeof contextbufs[0], sourcefile) != NULL) (void) fputs ((char *) contextbufs[0], outfile); break; } /* * Only read in enough characters to fill half this buffer so that any * corrections we make are not likely to cause an overflow. */ if (fgets ((char *) filteredbuf, sizeof filteredbuf / 2, infile) == NULL) { if (sourcefile != NULL) { while (fgets ((char *) contextbufs[0], sizeof contextbufs[0], sourcefile) != NULL) (void) fputs ((char *) contextbufs[0], outfile); } break; } /* * If we didn't read to end-of-line, we may have ended the * buffer in the middle of a word. So keep reading until we * see some sort of character that can't possibly be part of a * word. (or until the buffer is full, which fortunately isn't * all that likely). */ bufsize = strlen ((char *) filteredbuf); if (bufsize == sizeof filteredbuf / 2 - 1) { ch = (unsigned char) filteredbuf[bufsize - 1]; while (bufsize < sizeof filteredbuf - 1 && (iswordch ((ichar_t) ch) || isboundarych ((ichar_t) ch) || isstringstart (ch))) { ch = getc (infile); if (ch == EOF) break; filteredbuf[bufsize++] = (char) ch; filteredbuf[bufsize] = '\0'; } } /* * If we're not filtering, make a duplicate of filteredbuf in * contextbufs[0]. Otherwise, read the same number of * characters into contextbufs[0] from sourcefile. */ if (sourcefile == NULL) (void) strcpy ((char *) contextbufs[0], (char *) filteredbuf); else { if (fread (contextbufs[0], 1, bufsize, sourcefile) != bufsize) { (void) fprintf (stderr, CORR_C_SHORT_SOURCE, MAYBE_CR (stderr)); (void) sleep ((unsigned) 2); xflag = 0; /* Preserve file backup */ break; } contextbufs[0][bufsize] = '\0'; } checkline (outfile); } } void correct (ctok, ctokl, itok, itokl, curchar) unsigned char * ctok; int ctokl; ichar_t * itok; int itokl; unsigned char ** curchar; /* Pointer into filteredbuf */ { register int c; register int i; int col_ht; unsigned char * curcontextchar; /* Pointer into contextbufs[0] */ int ncols; unsigned char * start_l2; unsigned char * begintoken; curcontextchar = contextbufs[0] + (*curchar - filteredbuf); begintoken = curcontextchar - strlen ((char *) ctok); if (icharlen (itok) <= minword) return; /* Accept very short words */ checkagain: if (good (itok, 0, 0, 0, 0) || compoundgood (itok, 0)) return; makepossibilities (itok); if (inpossibilities (ctok)) /* Kludge for German and similar languages */ return; ierase (); (void) printf (" %s", (char *) ctok); if (currentfile) (void) printf (CORR_C_FILE_LABEL, currentfile); if (readonly) (void) printf (" %s", CORR_C_READONLY); (void) printf ("\r\n\r\n"); /* * Make sure we have enough room on the screen to hold the * possibilities. Reduce the list if necessary. co / (maxposslen + 8) * is the maximum number of columns that will fit. col_ht is the * height of the columns. The constant 4 allows 2 lines (1 blank) at * the top of the screen, plus another blank line between the * columns and the context, plus a final blank line at the bottom * of the screen for command entry (R, L, etc). */ col_ht = li - contextsize - 4 - minimenusize; ncols = co / (maxposslen + 8); if (pcount > ncols * col_ht) pcount = ncols * col_ht; #ifdef EQUAL_COLUMNS /* * Equalize the column sizes. The last column will be short. */ col_ht = (pcount + ncols - 1) / ncols; #endif for (i = 0; i < pcount; i++) { #ifdef BOTTOMCONTEXT imove (2 + (i % col_ht), (maxposslen + 8) * (i / col_ht)); #else /* BOTTOMCONTEXT */ imove (3 + contextsize + (i % col_ht), (maxposslen + 8) * (i / col_ht)); #endif /* BOTTOMCONTEXT */ if (i >= easypossibilities) (void) printf ("??: %s", possibilities[i]); else if (easypossibilities >= 10 && i < 10) (void) printf ("0%d: %s", i, possibilities[i]); else (void) printf ("%2d: %s", i, possibilities[i]); } #ifdef BOTTOMCONTEXT imove (li - contextsize - 1 - minimenusize, 0); #else /* BOTTOMCONTEXT */ imove (2, 0); #endif /* BOTTOMCONTEXT */ for (i = contextsize; --i > 0; ) show_line (contextbufs[i], contextbufs[i], 0); start_l2 = contextbufs[0]; if (line_size (contextbufs[0], curcontextchar) > co - (sg << 1) - 1) { start_l2 = begintoken - (co / 2); while (start_l2 < begintoken) { i = line_size (start_l2, curcontextchar) + 1; if (i + (sg << 1) <= co) break; start_l2 += i - co; } if (start_l2 > begintoken) start_l2 = begintoken; if (start_l2 < contextbufs[0]) start_l2 = contextbufs[0]; } show_line (start_l2, begintoken, (int) strlen ((char *) ctok)); if (minimenusize != 0) { imove (li - 2, 0); (void) printf (CORR_C_MINI_MENU); } for ( ; ; ) { (void) fflush (stdout); switch (c = GETKEYSTROKE ()) { case 'Z' & 037: stop (); ierase (); goto checkagain; case ' ': ierase (); (void) fflush (stdout); return; case 'q': case 'Q': if (changes) { (void) printf (CORR_C_CONFIRM_QUIT); (void) fflush (stdout); c = GETKEYSTROKE (); } else c = 'y'; if (c == 'y' || c == 'Y') { ierase (); (void) fflush (stdout); fclose (outfile); /* So `done' may unlink it safely */ done (0); } goto checkagain; case 'i': case 'I': treeinsert (ichartosstr (strtosichar (ctok, 0), 1), ICHARTOSSTR_SIZE, 1); ierase (); (void) fflush (stdout); changes = 1; return; case 'u': case 'U': itok = strtosichar (ctok, 0); lowcase (itok); treeinsert (ichartosstr (itok, 1), ICHARTOSSTR_SIZE, 1); ierase (); (void) fflush (stdout); changes = 1; return; case 'a': case 'A': treeinsert (ichartosstr (strtosichar (ctok, 0), 1), ICHARTOSSTR_SIZE, 0); ierase (); (void) fflush (stdout); return; case 'L' & 037: goto checkagain; case '?': givehelp (1); goto checkagain; case '!': { unsigned char buf[200]; imove (li - 1, 0); (void) putchar ('!'); if (get_line_from_user ((char *) buf, sizeof buf) == NULL) { (void) putchar (7); ierase (); (void) fflush (stdout); goto checkagain; } (void) printf ("\r\n"); (void) fflush (stdout); #ifdef USESH shescape ((char *) buf); #else (void) shellescape ((char *) buf); #endif ierase (); goto checkagain; } case 'r': case 'R': imove (li - 1, 0); if (readonly) { (void) putchar (7); (void) printf ("%s ", CORR_C_READONLY); } (void) printf (CORR_C_REPLACE_WITH); if (get_line_from_user ((char *) ctok, ctokl) == NULL) { (void) putchar (7); /* Put it back */ (void) ichartostr (ctok, itok, ctokl, 0); } else { inserttoken (contextbufs[0], begintoken, ctok, &curcontextchar, 0); inserttoken (filteredbuf, filteredbuf + (begintoken - contextbufs[0]), ctok, curchar, 1); if (strtoichar (itok, ctok, itokl, 0)) { (void) putchar (7); (void) printf (WORD_TOO_LONG ((char *) ctok)); } changes = 1; } ierase (); if (icharlen (itok) <= minword) return; /* Accept very short replacements */ goto checkagain; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': i = c - '0'; if (easypossibilities >= 10) { c = GETKEYSTROKE (); if (c >= '0' && c <= '9') i = i * 10 + c - '0'; else if (c != '\r' && c != '\n') { (void) putchar (7); break; } } if (i < easypossibilities) { (void) strcpy ((char *) ctok, possibilities[i]); changes = 1; inserttoken (contextbufs[0], begintoken, ctok, &curcontextchar, 0); inserttoken (filteredbuf, filteredbuf + (begintoken - contextbufs[0]), ctok, curchar, 1); ierase (); if (readonly) { imove (li - 1, 0); (void) putchar (7); (void) printf ("%s", CORR_C_READONLY); (void) fflush (stdout); (void) sleep ((unsigned) 2); } return; } (void) putchar (7); break; case '\r': /* This makes typing \n after single digits */ case '\n': /* ..less obnoxious */ break; case 'l': case 'L': { unsigned char buf[100]; imove (li - 1, 0); (void) printf (CORR_C_LOOKUP_PROMPT); if (get_line_from_user ((char *) buf, sizeof buf) == NULL) { (void) putchar (7); ierase (); goto checkagain; } (void) printf ("\r\n"); (void) fflush (stdout); lookharder (buf); ierase (); goto checkagain; } case 'x': case 'X': quit = 1; ierase (); (void) fflush (stdout); return; default: (void) putchar (7); break; } } } static void show_line (line, invstart, invlen) unsigned char * line; register unsigned char * invstart; register int invlen; { register int width = 0; int maxwidth = co - 1; if (invlen != 0) maxwidth -= sg << 1; while (line < invstart && width < maxwidth) width += show_char (&line, width, 1, invstart - line); if (invlen) { inverse (); invstart += invlen; while (line < invstart && width < maxwidth) width += show_char (&line, width, 1, invstart - line); normal (); } while (*line && width < maxwidth) width += show_char (&line, width, 1, 0); (void) printf ("\r\n"); } static int show_char (cp, linew, output, maxw) register unsigned char ** cp; int linew; int output; /* NZ to actually do output */ int maxw; /* NZ to limit width shown */ { register int ch; register int i; int len; ichar_t ichar; register int width; ch = **cp; if (l1_isstringch (*cp, len, 0)) ichar = SET_SIZE + laststringch; else ichar = chartoichar (ch); if (!vflag && iswordch (ichar) && len == 1) { if (output) (void) putchar (ch); (*cp)++; return 1; } if (ch == '\t') { if (output) { for (i = 8 - (linew & 0x07); --i >= 0; ) (void) putchar (' '); } (*cp)++; return 8 - (linew & 0x07); } /* * Character is non-printing, or it's ISO and vflag is set. Display * it in "cat -v" form. For string characters, display every element * separately in that form. */ width = 0; if (maxw != 0 && len > maxw) len = maxw; /* Don't show too much */ for (i = 0; i < len; i++) { ch = (unsigned char) *(*cp)++; if (ch > '\177') { if (output) { (void) putchar ('M'); (void) putchar ('-'); } width += 2; ch &= 0x7f; } if (ch < ' ' || ch == '\177') { if (output) { (void) putchar ('^'); if (ch == '\177') (void) putchar ('?'); else (void) putchar (ch + 'A' - '\001'); } width += 2; } else { if (output) (void) putchar (ch); width += 1; } } return width; } static int line_size (buf, bufend) unsigned char * buf; register unsigned char * bufend; { register int width; for (width = 0; buf < bufend && *buf != '\0'; ) width += show_char (&buf, width, 0, bufend - buf); return width; } static void inserttoken (buf, start, tok, curchar, oktochange) unsigned char * buf; unsigned char * start; register unsigned char * tok; unsigned char ** curchar; /* Where to do insertion (updated) */ int oktochange; /* NZ if OK to modify tok */ { unsigned char copy[BUFSIZ]; register unsigned char * p; register unsigned char * q; unsigned char * ew; if (!oktochange && logfile != NULL) { for (p = start; p != *curchar; p++) (void) putc (*p, logfile); (void) putc (' ', logfile); (void) fputs (tok, logfile); (void) putc ('\n', logfile); (void) fflush (logfile); } (void) strcpy ((char *) copy, (char *) buf); p = start; q = copy + (*curchar - buf); ew = skipoverword (tok); while (tok < ew) *p++ = *tok++; *curchar = p; if (*tok) { /* ** The token changed to two words. Split it up and save the ** second one for later. */ *p++ = *tok; if (oktochange) *tok = '\0'; tok++; while (*tok) *p++ = *tok++; } while ((*p++ = *q++) != '\0') ; } static int posscmp (a, b) unsigned char * a; unsigned char * b; { return casecmp (a, b, 0); } int casecmp (a, b, canonical) unsigned char * a; unsigned char * b; int canonical; /* NZ for canonical string chars */ { register ichar_t * ap; register ichar_t * bp; ichar_t inta[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; ichar_t intb[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; (void) strtoichar (inta, a, sizeof inta, canonical); (void) strtoichar (intb, b, sizeof intb, canonical); for (ap = inta, bp = intb; *ap != 0; ap++, bp++) { if (*ap != *bp) { if (*bp == '\0') return hashheader.sortorder[*ap]; else if (mylower (*ap)) { if (mylower (*bp) || mytoupper (*ap) != *bp) return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } else { if (myupper (*bp) || mytolower (*ap) != *bp) return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } } } if (*bp != '\0') return -(int) hashheader.sortorder[*bp]; for (ap = inta, bp = intb; *ap; ap++, bp++) { if (*ap != *bp) { return (int) hashheader.sortorder[*ap] - (int) hashheader.sortorder[*bp]; } } return 0; } void makepossibilities (word) register ichar_t * word; { register int i; for (i = 0; i < MAXPOSSIBLE; i++) possibilities[i][0] = 0; pcount = 0; maxposslen = 0; easypossibilities = 0; wrongcapital (word); /* * according to Pollock and Zamora, CACM April 1984 (V. 27, No. 4), * page 363, the correct order for this is: * OMISSION = TRANSPOSITION > INSERTION > SUBSTITUTION * thus, it was exactly backwards in the old version. -- PWP */ if (pcount < MAXPOSSIBLE) missingletter (word); /* omission */ if (pcount < MAXPOSSIBLE) transposedletter (word); /* transposition */ if (pcount < MAXPOSSIBLE) extraletter (word); /* insertion */ if (pcount < MAXPOSSIBLE) wrongletter (word); /* substitution */ if ((compoundflag != COMPOUND_ANYTIME) && pcount < MAXPOSSIBLE) missingspace (word); /* two words */ easypossibilities = pcount; if (easypossibilities == 0 || tryhardflag) tryveryhard (word); if ((sortit || (pcount > easypossibilities)) && pcount) { if (easypossibilities > 0 && sortit) qsort ((char *) possibilities, (unsigned) easypossibilities, sizeof (possibilities[0]), (int (*) P ((const void *, const void *))) posscmp); if (pcount > easypossibilities) qsort ((char *) &possibilities[easypossibilities][0], (unsigned) (pcount - easypossibilities), sizeof (possibilities[0]), (int (*) P ((const void *, const void *))) posscmp); } } int inpossibilities (ctok) register unsigned char * ctok; { register int i; /* * This function is a horrible kludge, necessitated by a problem * that shows up in German (and possibly other languages). The * problem in German is that the character "ess-zed" (which I'm * going to write as "|3" in these comments so I don't have to use * the ISO Latin-1 character set) doesn't have an uppercase * equivalent. Instead, words that contain |3 are uppercased by * converting the character to SS. * * For ispell, this presents a problem. Consider the two German * words "gro|3" (large) and "nass" (wet). In lowercase, they are * represented differently both externally and internally. * Internally, the "ss" gets converted to a single ichar_t (for a * couple of good reasons I won't go into right now). Internally, * there is also an uppercase representation for |3. So when we * do things like dictionary lookups (which are in uppercase for * historical reasons) we can distinguish the correct "gro|3" and * "nass" from the incorrect "gross" and "na|3", even when they're * converted to uppercase. * * The problem arises when the user writes the words in uppercase: * "GROSS" and "NASS". When parsing the character strings, ispell * would like to convert the "SS" sequence into the correct * ichar_t for the word. However, the ichar_t that is needed for * the two S's in "GROSS" (uppercase version of |3) is different * from the ichar_t needed for the two S's in "NASS" (SS). There * is no solution to the problem that can be based purely on * lexical information; the character representation simply * doesn't have the information needed. * * What ispell really needs is to base the chose of ichar_t * representation on the correct spelling of the word. For * "GROSS" it should pick uppercase |3 because "gro|3" is in the * dictionary, and for "NASS" it should pick SS for the same * reason. * * That brings us to this function. Lexically, ispell will always * choose one or the other of the internal representations. (The * choice is fairly unpredictable; it depends on which one the * binary search happens to hit upon first.) If good() says that * the spelling is OK, we must have chosen the right * representation (and we'll never get into this function. But if * good() fails, makepossibilities() will wind up substituting the * correct character for the incorrect one in wrongletter(). Then * the reconversion to external string format will wind up * generating exactly the word that was originally spell-checked. * * So this function searches the possibilities list to see if the * requested word is found in the list. If so, the caller will * accept the word just as if good() had succeeded. * * This is a pretty ugly solution. It's also only partial. If a * word contains TWO ambiguous characters, it won't find a * solution because wrongletter() can only correct a single error. * Fortunately, at least in German, that's not a huge problem. * The most popular German dictionary contains only three words * that have more than one ess-zed: Ku|3tengewa|3ser, * Vergro|3Serungsgla|3er, and gro|3Senordnungsma|3Sig/A. */ for (i = 0; i < pcount; i++) { if (strcmp ((char *) ctok, possibilities[i]) == 0) return 1; } return 0; } static int insert (word) register ichar_t * word; { register int i; register unsigned char * realword; realword = ichartosstr (word, 0); for (i = 0; i < pcount; i++) { if (strcmp (possibilities[i], (char *) realword) == 0) return (0); } (void) strcpy (possibilities[pcount++], (char *) realword); i = strlen ((char *) realword); if (i > maxposslen) maxposslen = i; if (pcount >= MAXPOSSIBLE) return (-1); else return (0); } static void wrongcapital (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; /* ** When the third parameter to "good" is nonzero, it ignores ** case. If the word matches this way, "ins_cap" will recapitalize ** it correctly. */ if (good (word, 0, 1, 0, 0)) { (void) icharcpy (newword, word); upcase (newword); (void) ins_cap (newword, word); } } static void wrongletter (word) register ichar_t * word; { register int i; register int j; register int n; ichar_t savechar; ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; n = icharlen (word); (void) icharcpy (newword, word); upcase (newword); for (i = 0; i < n; i++) { savechar = newword[i]; for (j=0; j < Trynum; ++j) { if (Try[j] == savechar) continue; else if (isboundarych (Try[j]) && (i == 0 || i == n - 1)) continue; newword[i] = Try[j]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } newword[i] = savechar; } } static void extraletter (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t * r; if (icharlen (word) < 2) return; (void) icharcpy (newword, word + 1); for (p = word, r = newword; *p != 0; ) { if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } *r++ = *p++; } } static void missingletter (word) ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN + 1]; register ichar_t * p; register ichar_t * r; register int i; (void) icharcpy (newword + 1, word); for (p = word, r = newword; *p != 0; ) { for (i = 0; i < Trynum; i++) { if (isboundarych (Try[i]) && r == newword) continue; *r = Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } *r++ = *p++; } for (i = 0; i < Trynum; i++) { if (isboundarych (Try[i])) continue; *r = Try[i]; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } } } static void missingspace (word) ichar_t * word; { ichar_t firsthalf[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int firstno; /* Index into first */ ichar_t * firstp; /* Ptr into current firsthalf word */ ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN + 1]; int nfirsthalf; /* No. words saved in 1st half */ int nsecondhalf; /* No. words saved in 2nd half */ register ichar_t * p; ichar_t secondhalf[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int secondno; /* Index into second */ /* ** We don't do words of length less than 3; this keeps us from ** splitting all two-letter words into two single letters. We ** also don't do maximum-length words, since adding the space ** would exceed the size of the "possibilities" array. */ nfirsthalf = icharlen (word); if (nfirsthalf < 3 || nfirsthalf >= INPUTWORDLEN + MAXAFFIXLEN - 1) return; (void) icharcpy (newword + 1, word); for (p = newword + 1; p[1] != '\0'; p++) { p[-1] = *p; *p = '\0'; if (good (newword, 0, 1, 0, 0)) { /* * Save_cap must be called before good() is called on the * second half, because it uses state left around by * good(). This is unfortunate because it wastes a bit of * time, but I don't think it's a significant performance * problem. */ nfirsthalf = save_cap (newword, word, firsthalf); if (good (p + 1, 0, 1, 0, 0)) { nsecondhalf = save_cap (p + 1, p + 1, secondhalf); for (firstno = 0; firstno < nfirsthalf; firstno++) { firstp = &firsthalf[firstno][p - newword]; for (secondno = 0; secondno < nsecondhalf; secondno++) { *firstp = ' '; (void) icharcpy (firstp + 1, secondhalf[secondno]); if (insert (firsthalf[firstno]) < 0) return; *firstp = '-'; if (insert (firsthalf[firstno]) < 0) return; } } } } } } int compoundgood (word, pfxopts) ichar_t * word; int pfxopts; /* Options to apply to prefixes */ { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t savech; long secondcap; /* Capitalization of 2nd half */ /* ** If compoundflag is COMPOUND_NEVER, compound words are never ok. */ if (compoundflag == COMPOUND_NEVER) return 0; /* ** Test for a possible compound word (for languages like German that ** form lots of compounds). ** ** This is similar to missingspace, except we quit on the first hit, ** and we won't allow either member of the compound to be a single ** letter. ** ** We don't do words of length less than 2 * compoundmin, since ** both halves must at least compoundmin letters. */ if (icharlen (word) < 2 * hashheader.compoundmin) return 0; (void) icharcpy (newword, word); p = newword + hashheader.compoundmin; for ( ; p[hashheader.compoundmin - 1] != 0; p++) { savech = *p; *p = 0; if (good (newword, 0, 0, pfxopts, FF_COMPOUNDONLY)) { *p = savech; if (good (p, 0, 1, FF_COMPOUNDONLY, 0) || compoundgood (p, FF_COMPOUNDONLY)) { secondcap = whatcap (p); switch (whatcap (newword)) { case ANYCASE: case CAPITALIZED: case FOLLOWCASE: /* Followcase can have l.c. suffix */ return secondcap == ANYCASE; case ALLCAPS: return secondcap == ALLCAPS; } } } else *p = savech; } return 0; } static void transposedletter (word) register ichar_t * word; { ichar_t newword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t temp; (void) icharcpy (newword, word); for (p = newword; p[1] != 0; p++) { temp = *p; *p = p[1]; p[1] = temp; if (good (newword, 0, 1, 0, 0)) { if (ins_cap (newword, word) < 0) return; } temp = *p; *p = p[1]; p[1] = temp; } } static void tryveryhard (word) ichar_t * word; { (void) good (word, 1, 0, 0, 0); } /* Insert one or more correctly capitalized versions of word */ static int ins_cap (word, pattern) ichar_t * word; ichar_t * pattern; { int i; /* Index into savearea */ int nsaved; /* No. of words saved */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; nsaved = save_cap (word, pattern, savearea); for (i = 0; i < nsaved; i++) { if (insert (savearea[i]) < 0) return -1; } return 0; } /* Save one or more correctly capitalized versions of word */ static int save_cap (word, pattern, savearea) ichar_t * word; /* Word to save */ ichar_t * pattern; /* Prototype capitalization pattern */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; /* Room to save words */ { int hitno; /* Index into hits array */ int nsaved; /* Number of words saved */ int preadd; /* No. chars added to front of root */ int prestrip; /* No. chars stripped from front */ int sufadd; /* No. chars added to back of root */ int sufstrip; /* No. chars stripped from back */ if (*word == 0) return 0; for (hitno = numhits, nsaved = 0; --hitno >= 0 && nsaved < MAX_CAPS; ) { if (hits[hitno].prefix) { prestrip = hits[hitno].prefix->stripl; preadd = hits[hitno].prefix->affl; } else prestrip = preadd = 0; if (hits[hitno].suffix) { sufstrip = hits[hitno].suffix->stripl; sufadd = hits[hitno].suffix->affl; } else sufadd = sufstrip = 0; save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, hits[hitno].dictent, hits[hitno].prefix, hits[hitno].suffix, savearea, &nsaved); } return nsaved; } int ins_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent) register ichar_t * word; register ichar_t * pattern; int prestrip; int preadd; int sufstrip; int sufadd; struct dent * firstdent; struct flagent * pfxent; struct flagent * sufent; { int i; /* Index into savearea */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; int nsaved; /* Number of words saved */ nsaved = 0; save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent, savearea, &nsaved); for (i = 0; i < nsaved; i++) { if (insert (savearea[i]) < 0) return -1; } return 0; } /* ARGSUSED */ static void save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd, firstdent, pfxent, sufent, savearea, nsaved) register ichar_t * word; /* Word to be saved */ register ichar_t * pattern; /* Capitalization pattern */ int prestrip; /* No. chars stripped from front */ int preadd; /* No. chars added to front of root */ int sufstrip; /* No. chars stripped from back */ int sufadd; /* No. chars added to back of root */ struct dent * firstdent; /* First dent for root */ struct flagent * pfxent; /* Pfx-flag entry for word */ struct flagent * sufent; /* Sfx-flag entry for word */ ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN]; /* Room to save words */ int * nsaved; /* Number saved so far (updated) */ { register struct dent * dent; int firstisupper; ichar_t newword[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; register ichar_t * p; int len; int i; int limit; if (*nsaved >= MAX_CAPS) return; (void) icharcpy (newword, word); firstisupper = myupper (pattern[0]); #define flagsareok(dent) \ ((pfxent == NULL \ || TSTMASKBIT (dent->mask, pfxent->flagbit)) \ && (sufent == NULL \ || TSTMASKBIT (dent->mask, sufent->flagbit))) dent = firstdent; if ((dent->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS) { upcase (newword); /* Uppercase required */ (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } for (p = pattern; *p; p++) { if (mylower (*p)) break; } if (*p == 0) { upcase (newword); /* Pattern was all caps */ (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } for (p = pattern + 1; *p; p++) { if (myupper (*p)) break; } if (*p == 0) { /* ** The pattern was all-lower or capitalized. If that's ** legal, insert only that version. */ if (firstisupper) { if (captype (dent->flagfield) == CAPITALIZED || captype (dent->flagfield) == ANYCASE) { lowcase (newword); newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } else { if (captype (dent->flagfield) == ANYCASE) { lowcase (newword); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } while (dent->flagfield & MOREVARIANTS) { dent = dent->next; if (captype (dent->flagfield) == FOLLOWCASE || !flagsareok (dent)) continue; if (firstisupper) { if (captype (dent->flagfield) == CAPITALIZED) { lowcase (newword); newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } else { if (captype (dent->flagfield) == ANYCASE) { lowcase (newword); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; return; } } } } /* ** Either the sample had complex capitalization, or the simple ** capitalizations (all-lower or capitalized) are illegal. ** Insert all legal capitalizations, including those that are ** all-lower or capitalized. If the prototype is capitalized, ** capitalized all-lower samples. Watch out for affixes. */ dent = firstdent; p = strtosichar (dent->word, 1); len = icharlen (p); if (dent->flagfield & MOREVARIANTS) dent = dent->next; /* Skip place-holder entry */ for ( ; ; ) { if (flagsareok (dent)) { if (captype (dent->flagfield) != FOLLOWCASE) { lowcase (newword); if (firstisupper || captype (dent->flagfield) == CAPITALIZED) newword[0] = mytoupper (newword[0]); (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; if (*nsaved >= MAX_CAPS) return; } else { /* Followcase is the tough one. */ p = strtosichar (dent->word, 1); (void) BCOPY ((char *) (p + prestrip), (char *) (newword + preadd), (len - prestrip - sufstrip) * sizeof (ichar_t)); if (myupper (p[prestrip])) { for (i = 0; i < preadd; i++) newword[i] = mytoupper (newword[i]); } else { for (i = 0; i < preadd; i++) newword[i] = mytolower (newword[i]); } limit = len + preadd + sufadd - prestrip - sufstrip; i = len + preadd - prestrip - sufstrip; p += len - sufstrip - 1; if (myupper (*p)) { for (p = newword + i; i < limit; i++, p++) *p = mytoupper (*p); } else { for (p = newword + i; i < limit; i++, p++) *p = mytolower (*p); } (void) icharcpy (savearea[*nsaved], newword); (*nsaved)++; if (*nsaved >= MAX_CAPS) return; } } if ((dent->flagfield & MOREVARIANTS) == 0) break; /* End of the line */ dent = dent->next; } return; } static char * get_line_from_user (s, len) register char * s; register int len; { register char * p; register int c; p = s; for ( ; ; ) { (void) fflush (stdout); c = GETKEYSTROKE (); /* ** Don't let them overflow the buffer. */ if (p >= s + len - 1) { *p = 0; return s; } if (c == '\\') { (void) putchar ('\\'); (void) fflush (stdout); c = GETKEYSTROKE (); backup (); (void) putchar (c); *p++ = (char) c; } else if (c == ('G' & 037)) return (NULL); else if (c == '\n' || c == '\r') { *p = 0; return (s); } else if (c == uerasechar) { if (p != s) { p--; backup (); (void) putchar (' '); backup (); } } else if (c == ukillchar) { while (p != s) { p--; backup (); (void) putchar (' '); backup (); } } else { *p++ = (char) c; (void) putchar (c); } } } void askmode () { unsigned int bufsize; /* Length of contextbufs[0] */ int ch; /* Next character read from input */ register unsigned char * cp1; register unsigned char * cp2; ichar_t * itok; /* Ichar version of current word */ int hadnl; /* NZ if \n was at end of line */ if (fflag) { if (freopen (askfilename, "w", stdout) == NULL) { (void) fprintf (stderr, CANT_CREATE, askfilename, MAYBE_CR (stderr)); exit (1); } } (void) printf ("%s\n", Version_ID[0]); contextoffset = 0; while (1) { if (askverbose) (void) printf ("word: "); (void) fflush (stdout); /* * Only read in enough characters to fill half this buffer so that any * corrections we make are not likely to cause an overflow. */ if (contextoffset == 0) { if (xgets ((char *) filteredbuf, (sizeof filteredbuf) / 2, stdin) == NULL) break; } else { if (fgets ((char *) filteredbuf, (sizeof filteredbuf) / 2, stdin) == NULL) break; } /* * Make a copy of the line in contextbufs[0] so copyout works. */ (void) strcpy ((char *) contextbufs[0], (char *) filteredbuf); /* * If we didn't read to end-of-line, we may have ended the * buffer in the middle of a word. So keep reading until we * see some sort of character that can't possibly be part of a * word. (or until the buffer is full, which fortunately isn't * all that likely). */ bufsize = strlen ((char *) filteredbuf); hadnl = filteredbuf[bufsize - 1] == '\n'; if (bufsize == (sizeof filteredbuf) / 2 - 1) { ch = (unsigned char) filteredbuf[bufsize - 1]; while (bufsize < sizeof filteredbuf - 1 && (iswordch ((ichar_t) ch) || isboundarych ((ichar_t) ch) || isstringstart (ch))) { ch = getc (stdin); if (ch == EOF) break; contextbufs[0][bufsize] = (char) ch; filteredbuf[bufsize++] = (char) ch; contextbufs[0][bufsize] = '\0'; filteredbuf[bufsize] = '\0'; } } /* ** *line is like `i', @line is like `a', &line is like 'u' ** `#' is like `Q' (writes personal dictionary) ** `+' sets tflag, `-' clears tflag ** `!' sets terse mode, `%' clears terse ** `~' followed by a filename sets parameters according to file name ** `^' causes rest of line to be checked after stripping 1st char */ if (askverbose || contextoffset != 0) checkline (stdout); else { if (filteredbuf[0] == '*' || filteredbuf[0] == '@') treeinsert(ichartosstr (strtosichar (filteredbuf + 1, 0), 1), ICHARTOSSTR_SIZE, filteredbuf[0] == '*'); else if (filteredbuf[0] == '&') { itok = strtosichar (filteredbuf + 1, 0); lowcase (itok); treeinsert (ichartosstr (itok, 1), ICHARTOSSTR_SIZE, 1); } else if (filteredbuf[0] == '#') { treeoutput (); insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; } else if (filteredbuf[0] == '!') terse = 1; else if (filteredbuf[0] == '%') { terse = 0; correct_verbose_mode = 0; } else if (filteredbuf[0] == '-') { insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; tflag = DEFORMAT_NROFF; } else if (filteredbuf[0] == '+') { insidehtml = 0; math_mode = 0; LaTeX_Mode = 'P'; if (strcmp ((char *) &filteredbuf[1], "plain") == 0 || strcmp ((char *) &filteredbuf[1], "none") == 0) tflag = DEFORMAT_NONE; else if (strcmp ((char *) &filteredbuf[1], "nroff") == 0 || strcmp ((char *) &filteredbuf[1], "troff") == 0) tflag = DEFORMAT_NROFF; else if (strcmp ((char *) &filteredbuf[1], "tex") == 0 || strcmp ((char *) &filteredbuf[1], "latex") == 0 || filteredbuf[1] == '\0') /* Backwards compatibility */ tflag = DEFORMAT_TEX; else if (strcmp ((char *) &filteredbuf[1], "html") == 0 || strcmp ((char *) &filteredbuf[1], "sgml") == 0) tflag = DEFORMAT_SGML; else tflag = DEFORMAT_TEX; /* Backwards compatibility */ } else if (filteredbuf[0] == '~') { if (hadnl) filteredbuf[bufsize - 1] = '\0'; defstringgroup = findfiletype ((char *) &filteredbuf[1], 1, (int *) NULL); if (defstringgroup < 0) defstringgroup = 0; if (hadnl) filteredbuf[bufsize - 1] = '\n'; } else if (filteredbuf[0] == '`') correct_verbose_mode = 1; else { if (filteredbuf[0] == '^') { /* Strip off leading uparrow */ for (cp1 = filteredbuf, cp2 = filteredbuf + 1; (*cp1++ = *cp2++) != '\0'; ) ; contextoffset++; bufsize--; } checkline (stdout); } } if (hadnl) contextoffset = 0; else contextoffset += bufsize; #ifndef USG if (sflag) { stop (); if (fflag) { rewind (stdout); (void) creat (askfilename, 0666); } } #endif } if (askverbose) (void) printf ("\n"); } /* * Copy up to "cnt" characters to the output file. For historical * reasons, cc points to a characer in "filteredbuf", but the copying * must be done from "contextbufs[0]". As a side effect this function * advances cc by the number of characters actually copied. */ void copyout (cc, cnt) unsigned char ** cc; /* Char in filteredbuf to start at */ register int cnt; /* Number of chars to copy */ { register char * cp; /* Char in contextbufs[0] to copy */ cp = (char *) &contextbufs[0][*cc - filteredbuf]; *cc += cnt; while (--cnt >= 0) { if (*cp == '\0') { *cc -= cnt + 1; /* Compensate for short copy */ break; } if (!aflag && !lflag) (void) putc (*cp, outfile); cp++; } } static void lookharder (string) unsigned char * string; { char cmd[150]; char grepstr[100]; register char * g; register unsigned char * s; #ifndef REGEX_LOOKUP register int wild = 0; #ifdef LOOK static int look = -1; #endif /* LOOK */ #endif /* REGEX_LOOKUP */ g = grepstr; for (s = string; *s != '\0'; s++) { if (*s == '*') { #ifndef REGEX_LOOKUP wild++; #endif /* REGEX_LOOKUP */ *g++ = '.'; *g++ = '*'; } else *g++ = *s; } *g = '\0'; if (grepstr[0]) { #ifdef REGEX_LOOKUP regex_dict_lookup (cmd, grepstr); #else /* REGEX_LOOKUP */ #ifdef LOOK /* now supports automatic use of look - gms */ if (!wild && look) { /* no wild and look(1) is possibly available */ (void) sprintf (cmd, "%s %s %s", LOOK, grepstr, WORDS); if (shellescape (cmd)) return; else look = 0; } #endif /* LOOK */ /* string has wild card chars or look not avail */ if (!wild) (void) strcat (grepstr, ".*"); /* work like look */ (void) sprintf (cmd, "%s ^%s$ %s", EGREPCMD, grepstr, WORDS); (void) shellescape (cmd); #endif /* REGEX_LOOKUP */ } } #ifdef REGEX_LOOKUP static void regex_dict_lookup (cmd, grepstr) char * cmd; char * grepstr; { char * rval; int whence = 0; int quitlookup = 0; int count = 0; int ch; (void) sprintf (cmd, "^%s$", grepstr); while (!quitlookup && (rval = do_regex_lookup (cmd, whence)) != NULL) { whence = 1; (void) printf ("%s\r\n", rval);; if ((++count % (li - 1)) == 0) { inverse (); (void) printf (CORR_C_MORE_PROMPT); normal (); (void) fflush (stdout); if ((ch = GETKEYSTROKE ()) == 'q' || ch == 'Q' || ch == 'x' || ch == 'X' ) quitlookup = 1; /* * The following line should blank out the -- more -- even on * magic-cookie terminals. */ (void) printf (CORR_C_BLANK_MORE); (void) fflush (stdout); } } if ( rval == NULL ) { inverse (); (void) printf (CORR_C_END_LOOK); normal (); (void) fflush (stdout); (void) GETKEYSTROKE (); } } #endif /* REGEX_LOOKUP */ ispell-3.4.00/PaxHeaders.19408/lookup.c0000644000000000000000000000007410227557740014323 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/lookup.c0000444003214100001440000003614710227557740015376 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: lookup.c,v 1.52 2005/04/14 21:25:52 geoff Exp $"; #endif /* * lookup.c - see if a word appears in the dictionary * * Pace Willisson, 1983 * * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: lookup.c,v $ * Revision 1.52 2005/04/14 21:25:52 geoff * Fix a couple of tiny formatting inconsistencies. * * Revision 1.51 2005/04/14 14:38:23 geoff * Update license. Improve some typecasting. * * Revision 1.50 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.49 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.48 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.47 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.46 1999/01/18 03:28:35 geoff * Turn some char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.45 1999/01/07 01:22:51 geoff * Update the copyright. * * Revision 1.44 1998/07/06 05:44:47 geoff * Use off_t in lseeks, for 64-bit and NetBSD machines * * Revision 1.43 1997/12/02 06:24:56 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.42 1995/01/08 23:23:42 geoff * Support MSDOS_BINARY_OPEN when opening the hash file to read it in. * * Revision 1.41 1994/01/25 07:11:51 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" int linit P ((void)); #ifdef INDEXDUMP static void dumpindex P ((struct flagptr * indexp, int depth)); #endif /* INDEXDUMP */ struct dent * lookup P ((ichar_t * word, int dotree)); static int inited = 0; int linit () { int hashfd; register int i; register struct dent * dp; struct flagent * entry; struct flagptr * ind; int nextchar; int viazero; register ichar_t * cp; if (inited) return 0; if ((hashfd = open (hashname, 0 | MSDOS_BINARY_OPEN)) < 0) { (void) fprintf (stderr, CANT_OPEN, hashname, MAYBE_CR (stderr)); return (-1); } hashsize = read (hashfd, (char *) &hashheader, sizeof hashheader); if (hashsize < sizeof hashheader) { if (hashsize == (unsigned int) -1) (void) fprintf (stderr, LOOKUP_C_CANT_READ, hashname, MAYBE_CR (stderr)); else if (hashsize == 0) (void) fprintf (stderr, LOOKUP_C_NULL_HASH, hashname, MAYBE_CR (stderr)); else (void) fprintf (stderr, LOOKUP_C_SHORT_HASH (hashname, hashsize, (int) sizeof hashheader), MAYBE_CR (stderr)); return (-1); } else if (hashheader.magic != MAGIC) { (void) fprintf (stderr, LOOKUP_C_BAD_MAGIC (hashname, (unsigned int) MAGIC, (unsigned int) hashheader.magic), MAYBE_CR (stderr)); return (-1); } else if (hashheader.magic2 != MAGIC) { (void) fprintf (stderr, LOOKUP_C_BAD_MAGIC2 (hashname, (unsigned int) MAGIC, (unsigned int) hashheader.magic2), MAYBE_CR (stderr)); return (-1); } else if (hashheader.compileoptions != COMPILEOPTIONS || hashheader.maxstringchars != MAXSTRINGCHARS || hashheader.maxstringcharlen != MAXSTRINGCHARLEN) { (void) fprintf (stderr, LOOKUP_C_BAD_OPTIONS ((unsigned int) hashheader.compileoptions, hashheader.maxstringchars, hashheader.maxstringcharlen, (unsigned int) COMPILEOPTIONS, MAXSTRINGCHARS, MAXSTRINGCHARLEN), MAYBE_CR (stderr)); return (-1); } if (nodictflag) { /* * Dictionary is not needed - create an empty dummy table. We * actually have to have one entry since the hash * algorithm involves a divide by the table size * (actually modulo, but zero is still unacceptable). * So we create an empty entry. */ hashsize = 1; /* This prevents divides by zero */ hashtbl = (struct dent *) calloc (1, sizeof (struct dent)); if (hashtbl == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_HASH_SPACE, MAYBE_CR (stderr)); return (-1); } hashtbl[0].word = NULL; hashtbl[0].next = NULL; hashtbl[0].flagfield &= ~(USED | KEEP); /* The flag bits don't matter, but calloc cleared them. */ hashstrings = (unsigned char *) malloc ((unsigned) hashheader.lstringsize); } else { hashtbl = (struct dent *) malloc ((unsigned) hashheader.tblsize * sizeof (struct dent)); hashsize = hashheader.tblsize; hashstrings = (unsigned char *) malloc ((unsigned) hashheader.stringsize); } numsflags = hashheader.stblsize; numpflags = hashheader.ptblsize; sflaglist = (struct flagent *) malloc ((numsflags + numpflags) * sizeof (struct flagent)); if (hashtbl == NULL || hashstrings == NULL || sflaglist == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_HASH_SPACE, MAYBE_CR (stderr)); return (-1); } pflaglist = sflaglist + numsflags; if (nodictflag) { /* * Read just the strings for the language table, and * skip over the rest of the strings and all of the * hash table. */ if (read (hashfd, hashstrings, (unsigned) hashheader.lstringsize) != (int) hashheader.lstringsize) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } (void) lseek (hashfd, (off_t) hashheader.stringsize - (off_t) hashheader.lstringsize + (off_t) hashheader.tblsize * (off_t) sizeof (struct dent), 1); } else { if (read (hashfd, hashstrings, (unsigned) hashheader.stringsize) != (int) hashheader.stringsize || read (hashfd, (char *) hashtbl, (unsigned) hashheader.tblsize * sizeof (struct dent)) != (int) (hashheader.tblsize * sizeof (struct dent))) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } } if ((unsigned) read (hashfd, (char *) sflaglist, (unsigned) (numsflags + numpflags) * sizeof (struct flagent)) != (numsflags + numpflags) * sizeof (struct flagent)) { (void) fprintf (stderr, LOOKUP_C_BAD_FORMAT, MAYBE_CR (stderr)); return (-1); } (void) close (hashfd); if (!nodictflag) { for (i = hashsize, dp = hashtbl; --i >= 0; dp++) { if (dp->word == (unsigned char *) -1) dp->word = NULL; else dp->word = &hashstrings[(unsigned long) dp->word]; if (dp->next == (struct dent *) -1) dp->next = NULL; else dp->next = &hashtbl[(unsigned long) dp->next]; } } for (i = numsflags + numpflags, entry = sflaglist; --i >= 0; entry++) { if (entry->stripl) entry->strip = (ichar_t *) &hashstrings[(unsigned long) entry->strip]; else entry->strip = NULL; if (entry->affl) entry->affix = (ichar_t *) &hashstrings[(unsigned long) entry->affix]; else entry->affix = NULL; } /* ** Warning - 'entry' and 'i' are reset in the body of the loop ** below. Don't try to optimize it by (e.g.) moving the decrement ** of i into the loop condition. */ for (i = numsflags, entry = sflaglist; i > 0; i--, entry++) { if (entry->affl == 0) { cp = NULL; ind = &sflagindex[0]; viazero = 1; } else { cp = entry->affix + entry->affl - 1; ind = &sflagindex[*cp]; viazero = 0; while (ind->numents == 0 && ind->pu.fp != NULL) { if (cp == entry->affix) { ind = &ind->pu.fp[0]; viazero = 1; } else { ind = &ind->pu.fp[*--cp]; viazero = 0; } } } if (ind->numents == 0) ind->pu.ent = entry; ind->numents++; /* ** If this index entry has more than MAXSEARCH flags in ** it, we will split it into subentries to reduce the ** searching. However, the split doesn't make sense in ** two cases: (a) if we are already at the end of the ** current affix, or (b) if all the entries in the list ** have identical affixes. Since the list is sorted, (b) ** is true if the first and last affixes in the list ** are identical. */ if (!viazero && ind->numents >= MAXSEARCH && icharcmp (entry->affix, ind->pu.ent->affix) != 0) { /* Sneaky trick: back up and reprocess */ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */ i = numsflags - (entry - sflaglist); ind->pu.fp = (struct flagptr *) calloc ((unsigned) (SET_SIZE + hashheader.nstrchars), sizeof (struct flagptr)); if (ind->pu.fp == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } ind->numents = 0; } } /* ** Warning - 'entry' and 'i' are reset in the body of the loop ** below. Don't try to optimize it by (e.g.) moving the decrement ** of i into the loop condition. */ for (i = numpflags, entry = pflaglist; i > 0; i--, entry++) { if (entry->affl == 0) { cp = NULL; ind = &pflagindex[0]; viazero = 1; } else { cp = entry->affix; ind = &pflagindex[*cp++]; viazero = 0; while (ind->numents == 0 && ind->pu.fp != NULL) { if (*cp == 0) { ind = &ind->pu.fp[0]; viazero = 1; } else { ind = &ind->pu.fp[*cp++]; viazero = 0; } } } if (ind->numents == 0) ind->pu.ent = entry; ind->numents++; /* ** If this index entry has more than MAXSEARCH flags in ** it, we will split it into subentries to reduce the ** searching. However, the split doesn't make sense in ** two cases: (a) if we are already at the end of the ** current affix, or (b) if all the entries in the list ** have identical affixes. Since the list is sorted, (b) ** is true if the first and last affixes in the list ** are identical. */ if (!viazero && ind->numents >= MAXSEARCH && icharcmp (entry->affix, ind->pu.ent->affix) != 0) { /* Sneaky trick: back up and reprocess */ entry = ind->pu.ent - 1; /* -1 is for entry++ in loop */ i = numpflags - (entry - pflaglist); ind->pu.fp = (struct flagptr *) calloc (SET_SIZE + hashheader.nstrchars, sizeof (struct flagptr)); if (ind->pu.fp == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } ind->numents = 0; } } #ifdef INDEXDUMP (void) fprintf (stderr, "Prefix index table:\n"); dumpindex (pflagindex, 0); (void) fprintf (stderr, "Suffix index table:\n"); dumpindex (sflagindex, 0); #endif if (hashheader.nstrchartype == 0) chartypes = NULL; else { chartypes = (struct strchartype *) malloc (hashheader.nstrchartype * sizeof (struct strchartype)); if (chartypes == NULL) { (void) fprintf (stderr, LOOKUP_C_NO_LANG_SPACE, MAYBE_CR (stderr)); return (-1); } for (i = 0, nextchar = hashheader.strtypestart; i < (int) hashheader.nstrchartype; i++) { chartypes[i].name = &hashstrings[nextchar]; nextchar += strlen ((char *) chartypes[i].name) + 1; chartypes[i].deformatter = (char *) &hashstrings[nextchar]; nextchar += strlen (chartypes[i].deformatter) + 1; chartypes[i].suffixes = (char *) &hashstrings[nextchar]; while (hashstrings[nextchar] != '\0') nextchar += strlen ((char *) &hashstrings[nextchar]) + 1; nextchar++; } } inited = 1; return (0); } #ifdef INDEXDUMP static void dumpindex (indexp, depth) register struct flagptr * indexp; register int depth; { register int i; int j; int k; char stripbuf[INPUTWORDLEN + 4 * MAXAFFIXLEN + 4]; for (i = 0; i < SET_SIZE + hashheader.nstrchars; i++, indexp++) { if (indexp->numents == 0 && indexp->pu.fp != NULL) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (i >= ' ' && i <= '~') (void) putc (i, stderr); else (void) fprintf (stderr, "0x%x", i); (void) putc ('\n', stderr); dumpindex (indexp->pu.fp, depth + 1); } else if (indexp->numents) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (i >= ' ' && i <= '~') (void) putc (i, stderr); else (void) fprintf (stderr, "0x%x", i); (void) fprintf (stderr, " -> %d entries\n", indexp->numents); for (k = 0; k < indexp->numents; k++) { for (j = depth; --j >= 0; ) (void) putc (' ', stderr); if (indexp->pu.ent[k].stripl) { (void) ichartostr (stripbuf, indexp->pu.ent[k].strip, sizeof stripbuf, 1); (void) fprintf (stderr, " entry %d (-%s,%s)\n", &indexp->pu.ent[k] - sflaglist, stripbuf, indexp->pu.ent[k].affl ? ichartosstr (indexp->pu.ent[k].affix, 1) : "-"); } else (void) fprintf (stderr, " entry %d (%s)\n", &indexp->pu.ent[k] - sflaglist, ichartosstr (indexp->pu.ent[k].affix, 1)); } } } } #endif /* n is length of s */ struct dent * lookup (s, dotree) register ichar_t * s; int dotree; { register struct dent * dp; register unsigned char * s1; unsigned char schar[INPUTWORDLEN + MAXAFFIXLEN]; dp = &hashtbl[hash (s, hashsize)]; if (ichartostr (schar, s, sizeof schar, 1)) (void) fprintf (stderr, WORD_TOO_LONG (schar)); for ( ; dp != NULL; dp = dp->next) { /* quick strcmp, but only for equality */ s1 = dp->word; if (s1 && s1[0] == schar[0] && strcmp ((char *) s1 + 1, (char *) schar + 1) == 0) return dp; while (dp->flagfield & MOREVARIANTS) /* Skip variations */ dp = dp->next; } if (dotree) { dp = treelookup (s); return dp; } else return NULL; } ispell-3.4.00/PaxHeaders.19408/addons0000644000000000000000000000013212466065110014024 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/0000755003214100001440000000000012466065110015150 5ustar00geofffaculty00000000000000ispell-3.4.00/addons/PaxHeaders.19408/nextispell0000644000000000000000000000013212466065110016213 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/0000755003214100001440000000000012466065110017337 5ustar00geofffaculty00000000000000ispell-3.4.00/addons/nextispell/PaxHeaders.19408/README0000644000000000000000000000007410227330435017153 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/README0000444003214100001440000000435310227330435020220 0ustar00geofffaculty00000000000000 **** nextispell ******* Release 0.5, 3rd of January 1995 This is a new improved release of the former internationalspell, a spell service for the NeXT spell panel (like the one in Edit). The new release is quicker and more reliable. by Moritz Willers (willers@butp.unibe.ch (NeXTMail)) University of Berne Institute for Theoretical Physics Switzerland To install just type: configure. To make TeX-style parsing be the default, use "configure -t". (You will have to make two configure runs to get both TeX-style and nroff-style parsing.) To install in the system-wide /LocalLibrary rather than in your personal ~/Library, you must be root, and use "configure -r" or "configure -r -t". You need to have ispell installed with the corresponding hash files to make use of this spell server (The spell server invokes ispell and communicates with it via a pipe). Major advantage: based on ispell -> you can spellcheck any language!! Major disadvantage: I can't think of any (no more) except that it still isn't as fast as I would like it to be to be more specific: - you can spellcheck in TeX mode - you can spell any language you've got or produced a wordlist and a *.aff file for - ispell can be a bit of a pain to install to be found at cs.orst.edu in /pub/next/binaries/util/nextispell.tar.gz Thanks to Detlev Droege and Geoff Kuenning for new ideas and thanks to Christoph Hauert for his ever patient help. **************** Internal: The spellserver gives ispell the text to correct bout 80 characters at a time now, this makes it faster now. However with a huge hash file, like the german one, ispell is still rather slow. From time to time the program still hangs because the reading on a pipe would block. You will find this error in the Console. Modify the code as you like and if you come up with anything better let me know it. The configuration scripts haven't been improved yet. *** Some words about ispell: *** You can get ispell from (thanks to Geoff Kuenning) ftp.cs.ucla.edu /pub/ispell Current version: International Ispell Version 3.1.00, 12/21/93 Be sure to get ispell 3.1 and not 4.0 which is something completely different and doesn't work with my program. ispell-3.4.00/addons/nextispell/PaxHeaders.19408/configure.h.template0000644000000000000000000000007410227330436022240 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/configure.h.template0000444003214100001440000000015010227330436023274 0ustar00geofffaculty00000000000000#define VENDOR "ispell" #define LANGUAGE "English" #define ISPELL "ispell", "ispell", "-a", "-denglish" ispell-3.4.00/addons/nextispell/PaxHeaders.19408/services.template0000644000000000000000000000007410227330437021655 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/services.template0000444003214100001440000000007710227330437022721 0ustar00geofffaculty00000000000000Spell Checker: ispell Language: English Executable: nextispell ispell-3.4.00/addons/nextispell/PaxHeaders.19408/Makefile0000644000000000000000000000007410227330434017732 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/Makefile0000444003214100001440000000152210227330434020772 0ustar00geofffaculty00000000000000# # Makefile for nextispell. # # Created by Moritz Willers. # # 4. Januar 1994 # Version 0.2 # NAME = nextispell INSTALLDIR = ${HOME}/Library CFLAGS = -O -Wall all: ${NAME} rm -rf ${NAME}.service mkdir ${NAME}.service mv ${NAME} ${NAME}.service/ if [ -f services ]; then touch services; else cp services.template services; fi mv services ${NAME}.service/ strip ${NAME}.service/${NAME} ${NAME}: nextispell.m if [ -f configure.h ]; then touch configure.h; else cp configure.h.template configure.h; fi cc ${CFLAGS} -o ${NAME} nextispell.m -lNeXT_s rm -f configure.h install: all if [ -d $(INSTALLDIR)/Services/${NAME}.service ]; then rm -Rf $(INSTALLDIR)/Services/${NAME}.service/; fi cp -r ${NAME}.service $(INSTALLDIR)/Services/ rm -Rf ${NAME}.service echo "Don't forget to execute: make_services" clean: rm -Rf ${NAME}.service ispell-3.4.00/addons/nextispell/PaxHeaders.19408/configure0000644000000000000000000000007410227330435020177 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/configure0000555003214100001440000001363310227330435021250 0ustar00geofffaculty00000000000000#!/bin/csh # Moritz Willers # 21. September 1993 # Version 0.2 # # Usage: # set USAGE = 'Usage: configure [-r] [-t]' # # If run with the -r switch, you must be root, and nextispell will be # installed in /LocalLibrary rather than your personal Library. If # run with the -t switch, TeX support will be installed. Installing # both TeX and non-TeX support requires two runs, one with and one # without the -t switch. # set INSTALLDIR = ~/Library set spellname = spell set texsuff set stringchartype = 'NeXT' unset definetex while ( $#argv > 0 ) switch ($argv[1]) case '-r': set INSTALLDIR = /LocalLibrary breaksw case '-t': set spellname = texspell set texsuff = '-TeX' set stringchartype = 'tex' set definetex breaksw default: sh -c "echo '$USAGE' 1>&2" exit 1 breaksw endsw shift argv end echo "" echo "Let's see whether you've got ispell" ispell -vv > /dev/null if ($status) then echo "You must first install ispell before you can run this skript" exit 0 endif echo "Ok" echo "" echo "Looking for your hash files" set LIBDIR = `ispell -vv | grep LIBDIR | awk '{print $3}' | sed 'y/"/ /'` set files = `ls ${LIBDIR}` echo "There are:" foreach file ($files) if ($file:e == "hash") then echo " $file" endif end if ( ! -d ${INSTALLDIR}/Services) mkdir ${INSTALLDIR}/Services foreach file ($files) if ($file:e == "hash") then set name = ${file:r}${spellname} echo "" # # English variants are listed first because there are so many; # all other languages are listed alphabetically by the native # name, with the English name given second # # I don't know enough about the NeXT's international-language # support to know whether non-English dictionaries can be # insalled under the native language name, instead of the # English one, so the "deutsch" dictionary is installed as # "German" and so forth. European NeXT owners are welcome to # change this if they wish. # switch ("$file:r") case 'altamer': set longname = "Default Alternate American" breaksw case 'altamersml': set longname = "Alternate American, Small" breaksw case 'altamersml+': set longname = "Alternate American, Small-Plus" breaksw case 'altamermed': set longname = "Alternate American, Medium" breaksw case 'altamermed+': set longname = "Alternate American, Medium-Plus" breaksw case 'altamerlrg': set longname = "Alternate American, Large" breaksw case 'altamerlrg+': set longname = "Alternate American, Large-Plus" breaksw case 'altamerxlg': set longname = "Alternate American, Extra-Large" breaksw case 'altamerxlg+': set longname = "Alternate American, Extra-Large-Plus" breaksw case 'american': set longname = "Default American" breaksw case 'americansml': set longname = "American, Small" breaksw case 'americansml+': set longname = "American, Small-Plus" breaksw case 'americanmed': set longname = "American, Medium" breaksw case 'americanmed+': set longname = "American, Medium-Plus" breaksw case 'americanlrg': set longname = "American, Large" breaksw case 'americanlrg+': set longname = "American, Large-Plus" breaksw case 'americanxlg': set longname = "American, Extra-Large" breaksw case 'americanxlg+': set longname = "American, Extra-Large-Plus" breaksw case 'british': set longname = "Default British" breaksw case 'britishsml': set longname = "British, Small" breaksw case 'britishsml+': set longname = "British, Small-Plus" breaksw case 'britishmed': set longname = "British, Medium" breaksw case 'britishmed+': set longname = "British, Medium-Plus" breaksw case 'britishlrg': set longname = "British, Large" breaksw case 'britishlrg+': set longname = "British, Large-Plus" breaksw case 'britishxlg': set longname = "British, Extra-Large" breaksw case 'britishxlg+': set longname = "British, Extra-Large-Plus" breaksw case 'english': set longname = "Default English" breaksw case dansk: set longname = "Danish" breaksw case danish: set longname = "Danish" breaksw case deutsch: set longname = "German" breaksw case german: set longname = "German" breaksw case castellano: set longname = "Spanish" breaksw case espanol: set longname = "Spanish" breaksw case spanish: set longname = "Spanish" breaksw case francais: set longname = "French" breaksw case french: set longname = "French" breaksw case italiano: set longname = "Italian" breaksw case italian: set longname = "Italian" breaksw case nederlands: set longname = "Dutch" breaksw case dutch: set longname = "Dutch" breaksw case norsk: set longname = "Norwegian" breaksw case norwegian: set longname = "Norwegian" breaksw case portuguese: set longname = "Portuguese" breaksw case russkij: set longname = "Russian" breaksw case russian: set longname = "Russian" breaksw case svenska: set longname = "Swedish" breaksw case swedish: set longname = "Swedish" breaksw default: set longname = "$file:r" echo "$file:r is not a NeXT supported Language" echo "I will do my best to include it into the spell checker anyway" breaksw endsw echo "Making $longname${texsuff} ..." echo "Spell Checker: Ispell${texsuff}" > services echo "Language: $longname" >> services echo "Executable: $name" >> services echo '#define VENDOR "ispell'"${texsuff}"'"' > configure.h echo '#define LANGUAGE "'"$longname"'"' >> configure.h echo '#define ISPELL "ispell", "ispell", "-a", "-t", "-T.'"$stringchartype"'", "-d'"$file:r"'"' >> configure.h if ( $?definetex ) echo '#define TEX' >> configure.h make install INSTALLDIR=$INSTALLDIR NAME=$name > /dev/null endif end echo "" echo "Making services ..." make_services echo "" echo "I'm done." echo "" ispell-3.4.00/addons/nextispell/PaxHeaders.19408/configureTeX0000644000000000000000000000007410227330436020621 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/configureTeX0000555003214100001440000000044710227330436021671 0ustar00geofffaculty00000000000000#!/bin/sh # Moritz Willers # 21. September 1993 # Version 0.2 # # Usage: # USAGE='Usage: configureTeX [-r]' # # configureTeX is the same as running configure with the -t switch. # It is provided solely for backwards compatibility with previous # distributions of nextispell. # ./configure -t $* ispell-3.4.00/addons/nextispell/PaxHeaders.19408/nextispell.m0000644000000000000000000000007410227330436020641 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/nextispell/nextispell.m0000444003214100001440000002433310227330436021706 0ustar00geofffaculty00000000000000/* nextispell.m */ /* * * Modify the code anyway you like and report changes * as well as any good ideas to me, willers@butp.unibe.ch * * written by Moritz Willers * */ #define DATE "4. Januar 1994\n" #define VERSION "Version 0.4\n" #import #import "configure.h" #define MAXBUFLEN 1024 struct pipe_with_buf { int fd; char *buf; }; mutex_t lock; char misspelled[MAXBUFLEN]; @interface Dictionaire:Object { int fromIspell, toIspell, fromDictionaire, toDictionaire; } - init; - free; - (BOOL)spellServer:(NXSpellServer *)sender findMisspelledWord:(int *)start length:(int *)length inLanguage:(const char *)language inTextStream:(id )textStream startingAt:(int)startPosition wordCount:(int *)number countOnly:(BOOL)flag; - (void)spellServer:(NXSpellServer *)sender suggestGuessesForWord:(const char *)word inLanguage:(const char *)language; @end @implementation Dictionaire /* ******************** private functions ************************ */ int makepipe(int *rd, int *wrt) { int piperesult, fildes[2]; piperesult = pipe(fildes); *rd = fildes[0]; *wrt = fildes[1]; return piperesult; } int secure_read(int d, char *buf, int nbytes) { /* someday I'm going to rewrite this using the select() call instead of a nonblocking fd */ int ret, reads = 0; do { ret = read(d, buf, nbytes-1); reads++; } while ((ret == -1) && (reads < 100000)); if (reads < 100000) { return ret; } else fprintf(stderr, "%s: Couldn't read from pipe: %s\n", *NXArgv, strerror(errno)); exit(1); } void empty_pipe(struct pipe_with_buf *pointerTopwb) { int len; int fd = pointerTopwb->fd; char buf[MAXBUFLEN]; char *bufptr; mutex_lock(lock); strcpy(buf, pointerTopwb->buf); bufptr = strrchr(buf, '\n'); if (bufptr) bufptr--; else bufptr = buf; while (*bufptr != '\n') { len = secure_read(fd, buf, MAXBUFLEN); buf[len] = '\0'; bufptr = strrchr(buf, '\n'); if (bufptr) bufptr--; else bufptr = buf; } mutex_unlock(lock); } /* ******************************************************************** */ - init { int fdstate; [super init]; lock = mutex_alloc(); *misspelled = '\0'; if (makepipe(&fromIspell,&toDictionaire)) { fprintf(stderr, "%s: Couldn't create pipe: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; // init wasn't successful } if (makepipe(&fromDictionaire,&toIspell)) { fprintf(stderr, "%s: Couldn't create pipe: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; // init wasn't successful } switch (fork()) { case -1: fprintf(stderr, "%s: Couldn't fork: %s\n", *NXArgv, strerror(errno)); [self free]; return nil; case 0: close(toIspell); close(fromIspell); if ( dup2(fromDictionaire, 0) == -1 ) fprintf(stderr, "%s: Error establishing read pipe: %s\n", *NXArgv, strerror(errno)); if ( dup2(toDictionaire, 1) == -1 ) fprintf(stderr, "%s: Error establishing write pipe: %s\n", *NXArgv, strerror(errno)); /* change child into ispell */ execlp(ISPELL, NULL); fprintf(stderr, "%s: Failed to exec ispellpipe: %s\n", *NXArgv, strerror(errno)); exit(1); default: close(fromDictionaire); close(toDictionaire); /* set fromIspell fd non blocking: */ fdstate = fcntl(fromIspell, F_GETFL, 0); fcntl(fromIspell, F_SETFL, fdstate|O_NDELAY); #ifdef TEX write(toIspell, "+\n", 2); #endif break; } return self; } - free { char eof = EOF; if (toIspell) { write(toIspell, &eof, 1); close(toIspell); } if (fromIspell) close(fromIspell); return [super free]; } /* *********************** delegate methods ************************* */ - (BOOL)spellServer:(NXSpellServer *)sender findMisspelledWord:(int *)start length:(int *)length inLanguage:(const char *)language inTextStream:(id )textStream startingAt:(int)startPosition wordCount:(int *)number countOnly:(BOOL)flag { char readbuf[MAXBUFLEN], writebuf[MAXBUFLEN]; char *readbufptr, *writebufptr; int otherlen, len; int offset, linelength = 0; char misspelledWord[MAXBUFLEN]; BOOL repeatLoop; struct pipe_with_buf pwb; if (flag) { *number = -1; /* is not able to do pure wordcounting */ return NO; } if ([textStream isAtEOTS]) return NO; mutex_lock(lock); /* to make sure the thread has emptied the pipe */ mutex_unlock(lock); readbufptr = readbuf; *start = startPosition; /* set stream outside a word */ [textStream readCharacters:readbufptr count:1]; while (!NXIsSpace(*readbufptr) && startPosition && ![textStream isAtEOTS]) { [textStream readCharacters:readbufptr count:1]; (*start)++; } if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; len = 1; /* main loop */ do { /* read the 80 characters form the text stream and complete the last word */ len += [textStream readCharacters:readbufptr count:80]; readbufptr = readbuf; readbufptr[len] = '\0'; while (*readbufptr) { if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; } if (len>=80) while (!(NXIsSpace(*(readbufptr-1)) || [textStream isAtEOTS])) { [textStream readCharacters:readbufptr count:1]; len++; if (*readbufptr == '\n') *readbufptr = ' '; readbufptr++; } *readbufptr++ = '\n'; *readbufptr = '\0'; linelength = len; len = 0; readbufptr = readbuf; /* send ispell the next ca. 80 chars */ write(toIspell, "^", 1); while (*readbufptr) write(toIspell, readbufptr++, 1); readbufptr = readbuf; repeatLoop = YES; do { otherlen = secure_read(fromIspell, writebuf, MAXBUFLEN); writebuf[otherlen] = '\0'; writebufptr = writebuf; while (writebufptr && *writebufptr) { /* make sure a whole line is ready to be processed */ while (!strchr(writebufptr, '\n')) { /* add more to the buffer */ strcpy(writebuf, writebufptr); writebufptr = strchr(writebuf, '\0'); otherlen = secure_read(fromIspell, writebufptr, MAXBUFLEN - strlen(writebuf)); writebufptr[otherlen] = '\0'; writebufptr = writebuf; } /* then process the line: */ switch(*writebufptr) { case '*': case '+': case '-': (*number)++; break; case '&': case '?': strcpy(misspelled, writebufptr); writebufptr += 2; sscanf(writebufptr, "%s %*d %d", misspelledWord, &offset); if ([sender isInUserDictionary:(const char *)misspelledWord caseSensitive:NO]) { (*number)++; break; } *length = strlen(misspelledWord); *start += offset - 1; pwb.fd = fromIspell; pwb.buf = writebuf; cthread_detach(cthread_fork( (cthread_fn_t)empty_pipe, (any_t)&pwb)); return YES; case '#': strcpy(misspelled, writebufptr); writebufptr += 2; sscanf(writebufptr, "%s %d", misspelledWord, &offset); if ([sender isInUserDictionary:(const char *)misspelledWord caseSensitive:NO]) { (*number)++; break; } *length = strlen(misspelledWord); *start += offset - 1; pwb.fd = fromIspell; pwb.buf = writebuf; cthread_detach(cthread_fork( (cthread_fn_t)empty_pipe, (any_t)&pwb)); return YES; case '\n': *start += linelength; linelength = 0; repeatLoop = NO; default: break; } writebufptr = strchr(writebufptr, '\n'); if (writebufptr) writebufptr++; } } while (repeatLoop); } while (![textStream isAtEOTS]); return NO; /* no misspelled words found */ } - (void)spellServer:(NXSpellServer *)sender suggestGuessesForWord:(const char *)word inLanguage:(const char *)language { int len, misscount; char buf[MAXBUFLEN]; char *bufptr, *guess; if (*misspelled) { bufptr = strchr(misspelled, '\n'); bufptr++; *bufptr = '\0'; switch (*misspelled) { case '&': case '?': bufptr = strchr(misspelled + 2, ' ') + 1; misscount = atoi(bufptr); bufptr = strchr(misspelled, ':'); while (bufptr != NULL && misscount > 0) { misscount--; guess = bufptr + 2; if (bufptr = strchr(guess, ',')) *bufptr = '\0'; else { bufptr = strchr(guess, '\n'); *bufptr = '\0'; bufptr = NULL; } [sender addGuess:guess]; } case '#': ; /* no guesses */ } *misspelled = '\0'; return; } /* else */ mutex_lock(lock); /* make sure that the pipe has been emptied */ mutex_unlock(lock); write(toIspell, "^", 1); write(toIspell, word, strlen(word)); write(toIspell, "\n", 1); bufptr = buf; *buf = '\0'; do { len = secure_read(fromIspell, bufptr, MAXBUFLEN - strlen(buf)); bufptr[len] = '\0'; if (strchr(buf, '\n') == strrchr(buf, '\n')) bufptr = strchr(buf, '\0'); else bufptr = buf; } while (!(*bufptr)); switch (*bufptr) { case '*': case '+': case '-': [sender addGuess:word]; break; case '&': case '?': bufptr = strchr(bufptr + 2, ' ') + 1; misscount = atoi(bufptr); bufptr = strchr(bufptr, ':'); while (bufptr != NULL && misscount > 0) { misscount--; guess = bufptr + 2; if (bufptr = strchr(guess, ',')) *bufptr = '\0'; else { bufptr = strchr(guess, '\n'); *bufptr = '\0'; bufptr = NULL; } [sender addGuess:guess]; } case '#': ; /* no guesses */ } return; } @end /* ************************** main ******************************* */ void main(int argc, char **argv) { NXSpellServer *aServer; if (argc > 1) { if (!strcmp((argv[1]), "-v")) { printf("nextispell by Moritz Willers\n"); printf("email: willers@butp.unibe.ch (NeXTMail)\n"); printf(VERSION); printf(DATE); exit(0); } else { fprintf(stderr, "Usage: %s [-v]\n", *argv); exit(0); } } aServer = [[NXSpellServer alloc] init]; if ([aServer registerLanguage:LANGUAGE byVendor:VENDOR]) { [aServer setDelegate:[[Dictionaire alloc] init]]; [aServer run]; fprintf(stderr, "Unexpected death of %s!\n", *argv); } else { fprintf(stderr, "Unable to check in %s.\n", *argv); } } ispell-3.4.00/addons/PaxHeaders.19408/xspell.shar0000644000000000000000000000007410227330416016271 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/addons/xspell.shar0000444003214100001440000013303410227330416017335 0ustar00geofffaculty00000000000000# This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by Philippe-Andre Prindeville on Fri Mar 4 17:17:24 1994 # # This archive contains: # README Makefile # Xspell.c buffer.h # app-defaults app-defaults.eng # app-defaults.fr look.c # LANG=""; export LANG PATH=/bin:/usr/bin:$PATH; export PATH echo x - README cat >README <<'@EOF' This is a very hastily done Motif front-end to ispell. It was done as an exercise to teach myself Motif. Judge for yourselves if I learned anything. Anyway, please send me bug fixes, etc. I will try to keep it up-to-date, but I make no promises. If someone wants to write German labels, I will include them, for instance. Note: you must have *proper* 8bit fonts for most of it to work, and not the trashy X11R4 fonts nor the broken hp_roman8 fonts. -Philip @EOF chmod 640 README echo x - Makefile cat >Makefile <<'@EOF' # CC = cc LINT = lint # Sun #DEFINES = -DSELECT_BROKEN #INCS = -I/sig/quartz/Motif-1.1.2/lib #LIBES = -L/sig/quartz/Motif-1.1.2/lib/Xm -lXm -L/sig/quartz/Motif-1.1.2/lib/Xt -lXt -L/sig/quartz/Motif-1.1.2/lib/X -lX11 # HP #DEFINES = -DSELECT_BROKEN -D_NO_PROTO -DDEBUG=1 DEFINES = -DSELECT_BROKEN -D_NO_PROTO #INCS = -I/usr/include/Motif1.1 -I/usr/include/X11R4 #LIBES = -L/usr/lib/Motif1.1 -lXm -L/usr/lib/X11R4 -lXt -lX11 INCS = -I/usr/include/Motif1.2 -I/usr/include/X11R5 LIBES = -L/usr/lib/Motif1.2 -lXm -L/usr/lib/X11R5 -lXt -lX11 CFLAGS = -g $(DEFINES) -I.. $(INCS) LINTFLAGS = $(DEFINES) -I.. $(INCS) X11LIB= /usr/local/lib/X11 X11BIN= /usr/local/bin/Xspell #install= install # # HP brain-death... install= /usr/local/bin/install Xspell: Xspell.o $(CC) $(CFLAGS) -o Xspell Xspell.o $(LIBES) Xspell.o: buffer.h install: install-app-defaults install-binaries install-app-defaults: cat app-defaults app-defaults.eng > foobar $(install) -o root -g sys -m 644 foobar $(X11LIB)/app-defaults/Xspell cat app-defaults app-defaults.fr > foobar $(install) -o root -g sys -m 644 foobar $(X11LIB)/french/app-defaults/Xspell rm foobar install-binaries: Xspell $(install) -o bin -g bin -m 755 Xspell $(X11BIN) release: tar cf - README Makefile Xspell.c buffer.h app* look.c | \ compress > Xspell.tar.Z shar README Makefile Xspell.c buffer.h app* look.c > Xspell.shar @EOF chmod 660 Makefile echo x - Xspell.c cat >Xspell.c <<'@EOF' static char *progid = "Xspell 1.0b, 1 May 92 philipp@res.enst.fr"; /* * Xspell: Philippe-Andre Prindeville, Telecom Paris 1 May 1992 * * This program tries to follow the interface offered by * conventional ispell, but with a window interface (Motif * in this case). The code is fairly simply and straight- * forward. I'm interested in ports to other toolkits, * bug fixes, suggestions, etc. * * The code for saving and backing up the files is perhaps * not entirely thought-out. I don't like the way vi does * its backups, but perhaps I should have found another way. * * Related to this is adding a mode to run as a filter. If * you have my patches to xmeditor, then you know that you * can pipe the selection through a filter. Thus, you could * use Xspell with xmeditor if Xspell had a stdin filter-mode. * Something to add on a rainy day. * * I will probably be accused of being fascist for hard-wiring * the window layout. Tant pis. * * Note: the MOTION code doesn't work. I was too lazy to get * it running... */ #include "config.h" #include "ispell.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define min(a,b) (((a)<=(b))?(a):(b)) #define MAXRESP BUFSIZ*8 #define NCOLS 5 /* max... */ #define NENTRIES 8 #undef DOMOTION #define LINELEN 100 #ifndef CUNCAP #define CUNCAP '&' #endif #ifndef SELECT_BROKEN #define HighlightText(text, from, to) XmTextSetSelection(text, from, to, 0L) #define UnhighlightText(text, from, to) XmTextClearSelection(text) #else #define HighlightText(text, from, to) XmTextSetHighlight(text, from, to, XmHIGHLIGHT_SELECTED) #define UnhighlightText(text, from, to) XmTextSetHighlight(text, from, to, XmHIGHLIGHT_NORMAL) #endif #include #include extern XtAppContext app_context; extern Widget toplevel; extern Widget actions; extern Widget fileName; extern Widget lineNumber; extern Widget offsetNumber; extern Widget text; extern Widget textedit; extern Widget list[]; extern Widget noBackupDialog; extern Widget isReadonlyDialog; extern Widget couldntSaveDialog; extern Widget tempIsDialog; extern Widget isModifiedDialog; typedef struct { int columns; String dictionary; String type; Boolean backup; Boolean haveCompounds; Boolean sortPossibilities; } AppData; static AppData app_data; #ifdef DEBUG #define dprintf printf #define dputc putchar #else #define dprintf _dprintf #define dputc(x) #endif #include "buffer.h" static FILE *srvout, *srvin = NULL; static char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; static int quit, nslots, pcount; static short nlines; static buf_t buf; static char **filePtr = NULL; static int inputPending = 0; static int isBlocked = 0; #define Block() (isBlocked = 1) #define UnBlock() { isBlocked = 0; Parse(); } #ifdef DOMOTION static int ignoreMotion = 1; #endif extern void CheckLine(); extern void Correct(); extern void PostWarning(); static void getbuf(bp, offset) buf_t * bp; long offset; { char *nl; int ret; long size; if (bp->base) { XtFree(bp->base); bp->base = NULL; } if (offset >= bp->size) { bp->ptr = bp->base = NULL; return; } size = min(bp->size - offset, BUFSIZ); bp->base = (char *) XtMalloc(size + 1); /* count the \0 */ ret = XmTextGetSubstring(text, offset, size, size + 1, bp->base); assert(ret != XmCOPY_FAILED); bp->ptr = bp->base; bp->size += bp->delta; bp->offset = offset; bp->cnt = size; bp->delta = 0; bp->lineno++; bp->wordlen = -1; /* * perhaps if we don't find a \n, we should look for a space... */ nl = strchr(bp->base, '\n'); if (nl) bp->cnt = (++nl - bp->base); else bp->base[size] = '\n'; } static void PipeInputCb(dummy, fd, xtid) int dummy; int *fd; XtInputId *xtid; { inputPending = 1; while (! isBlocked) CheckLine(&buf); } static void Connect(w) Widget w; { int srv[2], clnt[2]; int pid, argc; char buf[BUFSIZ]; char *argv[10]; XtInputId *xtid; pipe(srv); pipe(clnt); switch (pid = fork()) { case -1: perror("fork"); exit(1); case 0: dup2(srv[0], 0); close(srv[0]); close(srv[1]); dup2(clnt[1], 1); close(clnt[0]); close(clnt[1]); argc = 0; argv[argc++] = "ispell"; argv[argc++] = "-d"; argv[argc++] = app_data.dictionary; argv[argc++] = "-T"; argv[argc++] = app_data.type; if (app_data.haveCompounds) argv[argc++] = "-C"; if (app_data.sortPossibilities) argv[argc++] = "-S"; argv[argc++] = "-a"; argv[argc++] = NULL; execvp("ispell", argv); perror("execl: ispell"); exit(1); default: close(clnt[1]); close(srv[0]); if (! (srvout = fdopen(srv[1], "w"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } if (! (srvin = fdopen(clnt[0], "r"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } xtid = XtAppAddInput(XtWidgetToApplicationContext(w), clnt[0], XtInputReadMask, (XtCallbackProc) PipeInputCb, NULL); break; } } static void SessionEnd() { WriteCmd(srvout, "#\n"); fclose(srvout); #if 0 fclose(srvin); #endif } static void ReadFile(path, bp) char *path; buf_t *bp; { struct stat st; char *str; XmString xstr; long size, n; FILE *infile; if (access(path, W_OK)) { bp->readonly = 1; PostWarning(&isReadonlyDialog, "isReadonlyDialog", NULL, False); } if (! (infile = fopen(path, "r"))) { perror(path); exit(1); } if (fstat(fileno(infile), &st)) { perror(path); exit(1); } size = st.st_size; if ((str = XtMalloc(size + 1)) == NULL) { fprintf(stderr, "%s: out of memory\n", path); exit(1); } if((n = fread(str, sizeof(char), size, infile)) != st.st_size) { fprintf(stderr, "%s: read is short\n", path); exit(1); } fclose(infile); str[size] = '\0'; XmTextSetString(text, str); XtFree(str); bp->base = bp->ptr = NULL; bp->offset = bp->cnt = bp->delta = 0; bp->lineno = -1; bp->size = size; bp->changed = 0; bp->filename = strdup(path); xstr = XmStringCreateSimple(path); XtVaSetValues(fileName, XmNlabelString, xstr, NULL); } static WriteFile (path, bp) char *path; buf_t *bp; { FILE *outfile; int n, size, offset; char *str; if (! (outfile = fopen(path, "w"))) { perror(path); return 1; } str = malloc(BUFSIZ + 1); for (offset = 0; offset < bp->size; offset += size) { size = BUFSIZ; if (offset + size > bp->size) size = bp->size - offset; XmTextGetSubstring(text, offset, size, size + 1, str); n = fwrite(str, sizeof(char), size, outfile); if(n != size) { perror("write"); fclose(outfile); free(str); return 1; } } free(str); if (fclose(outfile)) { perror("close"); return 1; } return 0; } Parse() { while (! isBlocked) CheckLine(&buf); } Loop() { for (; ; ) { XtAppMainLoop(app_context); dprintf("Exited from XtAppMainLoop!\n"); } } static void StartFile () { int lineno; char *slash; char *path = *filePtr; #ifdef DOMOTION void MotionCB(); #endif dprintf("StartFile(%s)\n", path); ReadFile(path, &buf); buf.tempname = strdup("/tmp/XspellXXXXXX"); mktemp(buf.tempname); if (! buf.readonly && WriteFile(buf.tempname, &buf)) PostWarning(&noBackupDialog, "noBackupDialog", NULL, True); XtVaGetValues(text, XmNrows, &nlines, NULL); XtVaGetValues(list[0], XmNvisibleItemCount, &nslots, NULL); XmTextSetTopCharacter(text, 0); buf.topline = 0; #if 0 if (slash = strrchr(buf.filename, '/')) ++slash; else slash = buf.filename; WriteCmd(srvout, "~%s\n", slash); #endif /* * To get us started, we prime the motor... */ (void)WriteLine(&buf); } static void EndFile() { /* * * If the file was read-only, put the buffer into the tempfile. * * Otherwise, if there buffer wasn't modified, OR it was but we * wrote it successfully, then we can remove the backup file. * Otherwise, we bombed writing the file out... */ if (buf.changed && buf.readonly) { if (! WriteFile(buf.tempname, &buf)) PostWarning(&tempIsDialog, "tempIsDialog", buf.tempname, True); else PostWarning(&couldntSaveDialog, "couldntSaveDialog", NULL, True); } else if (! buf.changed || ! WriteFile(buf.filename, &buf)) unlink(buf.tempname); else PostWarning(&tempIsDialog, "tempIsDialog", buf.tempname, True); free(buf.tempname); } int WriteLine(bp) buf_t *bp; { getbuf(bp, bp->offset + (bp->cnt + bp->delta)); if (! bp->base) return 0; WriteCmd(srvout, "^%.*s", bp->cnt, bp->base); return bp->cnt; } static void CheckLine (bp) buf_t *bp; { int c, t, n, reliable; long pos; char word[INPUTWORDLEN], *s; char buf[BUFSIZ]; if (quit) { EndFile(); SessionEnd(); exit(0); } if (fgets(buf, sizeof(buf), srvin) == NULL) c = EOF; else c = buf[0]; dprintf("<<<%s", buf); switch (c) { case EOF: /* very unexpected */ fprintf(stderr, "End of file!\n"); exit(1); case '\n': /* time to do the next line... */ if (WriteLine(bp)) break; EndFile(); /* no more text remained, so close the file. */ ++filePtr; if (*filePtr) { /* if there is another file, start it... */ StartFile(); break; } SessionEnd(); exit(0); case '@': /* this is the version string... */ s = &buf[1]; /* banner... */ break; case '*': /* word is OK */ break; case '+': /* derivative */ s = &buf[2]; dprintf("deriv.:%s", s); break; case '&': /* word is dubious */ s = &buf[1]; n = sscanf(s, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d), %d choices:", word, pos + bp->delta, bp->offset + pos + bp->delta, reliable); s = index(s, ':'); /* find colon... */ assert(s); for (n = 0; ; ++n) { c = *s++; /* skip comma or colon */ if (c == '\n') break; sscanf(s, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); s += 1 + strlen(possibilities[n]); /* count the space... */ } /* newline already eaten */ dputc('\n'); pcount = n; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '?': s = &buf[1]; n = sscanf(s, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d), %d choices:", word, pos + bp->delta, bp->offset + pos + bp->delta, reliable); s = index(s, ':'); /* find colon... */ assert(s); for (n = 0; ; ++n) { c = *s++; /* slip colon or comma */ if (c == '\n') break; sscanf(s, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); s += 1 + strlen(possibilities[n]); /* count space... */ } /* newline already eaten */ dputc('\n'); pcount = n; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '#': s = &buf[1]; n = sscanf(s, " %s %d", word, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d(@%d)\n", word, pos + bp->delta, bp->offset + pos + bp->delta); pcount = 0; bp->wordlen = strlen(word); bp->ptr = bp->base + pos; Correct (bp); Block(); break; case '-': /* gak! */ default: fprintf(stderr, "Error: read '%c' (\\%03o) on connection\n", c, c); exit(1); break; } inputPending = 0; } static void ListPossibilities() { int col, start, limit, nelems, i, resized = 0; int ncols = app_data.columns; /* * What to do? Throw away the extras?? */ #if 0 if (pcount > (ncols * nslots)) { resized = 1; nslots = (pcount + (ncols - 1)) / ncols; dprintf("resizing to %d!\n", nslots); } #endif for (col = 0; col < ncols; ++col) { XtVaGetValues(list[col], XmNitemCount, &nelems, NULL); if (resized) XtVaSetValues(list[col], XmNvisibleItemCount, nslots, NULL); start = col * nslots; limit = MIN(pcount, (col + 1) * nslots); for (i = start; i < limit; i++) { XmString xstr = XmStringCreateSimple(possibilities[i]); XmListAddItemUnselected(list[col], xstr, 0); XmStringFree(xstr); } if (nelems) XmListDeleteItemsPos(list[col], nelems, 1); #if 1 if (start >= pcount) XtUnmapWidget(list[col]); else #endif XtMapWidget(list[col]); } } /* * Shared with callback functions... along with buf */ static void Correct(bp) buf_t * bp; { long pos; char tmp[INPUTWORDLEN]; static int lastline = -1; XmString xstr; pos = bp->offset + (bp->ptr - bp->base) + bp->delta; if (lastline != bp->lineno) { int nscroll; lastline = bp->lineno; sprintf(tmp, "%u", bp->lineno + 1); xstr = XmStringCreateSimple(tmp); XtVaSetValues(lineNumber, XmNlabelString, xstr, NULL); nscroll = (bp->lineno - (nlines - 1) / 2) - bp->topline; if (nscroll > 0) { XmTextScroll(text, nscroll); bp->topline += nscroll; } } XmTextSetInsertionPosition(text, pos + bp->wordlen); sprintf(tmp, "%.*s", bp->wordlen, bp->ptr); XmTextFieldSetString(textedit, tmp); sprintf(tmp, "+%u @%u", pos - bp->offset, pos); xstr = XmStringCreateSimple(tmp); XtVaSetValues(offsetNumber, XmNlabelString, xstr, NULL); ListPossibilities (); /* * We don't use the XmTextSetSelection() because of a display bug... */ HighlightText(text, pos, pos + bp->wordlen); #ifdef DOMOTION ignoreMotion = 0; #endif #ifdef DOMOTION ignoreMotion = 1; #endif } #ifndef DEBUG _dprintf() { } #endif static void ListSelectCB(list, bp, lcb) Widget list; buf_t *bp; XmListCallbackStruct *lcb; { char *word; long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; XmStringGetLtoR(lcb->item, XmSTRING_DEFAULT_CHARSET, &word); UnhighlightText(text, pos, pos + bp->wordlen); XmTextReplace(text, pos, pos + bp->wordlen, word); bp->changed = 1; bp->ptr += strlen(word); bp->delta += (strlen(word) - bp->wordlen); UnBlock(); } static void ReplaceCB(button, textedit, call_data) Widget button; Widget textedit; caddr_t call_data; { char *word; buf_t *bp = &buf; /* cheat! */ long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; word = XmTextFieldGetString(textedit); UnhighlightText(text, pos, pos + bp->wordlen); XmTextReplace(text, pos, pos + bp->wordlen, word); bp->changed = 1; bp->ptr += strlen(word); bp->delta += (strlen(word) - bp->wordlen); UnBlock(); } static void AcceptCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "@%.*s\n", bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void InsertCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "*%.*s\n", bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void SkipCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); bp->ptr += bp->wordlen; UnBlock(); } static void UncapCB(button, bp, call_data) Widget button; buf_t *bp; caddr_t call_data; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; UnhighlightText(text, pos, pos + bp->wordlen); WriteCmd(srvout, "%c%.*s\n", CUNCAP, bp->wordlen, bp->ptr); bp->ptr += bp->wordlen; UnBlock(); } static void QuitCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { quit = 1; UnBlock(); } static void AckCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget widget = XtParent(button); XtUnmanageChild(widget); /* Unblocking... */ /* UnBlock(); */ } static void CancelAbortCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget isModifiedDialog = XtParent(button); XtUnmanageChild(isModifiedDialog); #if 0 UnBlock(); #endif } static void AbortOKCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { Widget isModifiedDialog = XtParent(button); buf_t *bp = &buf; XtUnmanageChild(isModifiedDialog); bp->changed = 0; /* we don't want to write the file */ quit = 1; UnBlock(); } static void AbortCB(button, client_data, call_data) Widget button; caddr_t client_data; caddr_t call_data; { buf_t *bp = &buf; int exists = (isModifiedDialog != NULL); if (! bp->changed) { quit = 1; UnBlock(); return; } PostWarning(&isModifiedDialog, "isModifiedDialog", NULL, False); if (exists) return; XtManageChild(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_CANCEL_BUTTON)); XtRemoveCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_OK_BUTTON), XmNactivateCallback, AckCB, NULL); XtAddCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_OK_BUTTON), XmNactivateCallback, AbortOKCB, NULL); XtAddCallback(XmMessageBoxGetChild(isModifiedDialog, XmDIALOG_CANCEL_BUTTON), XmNactivateCallback, CancelAbortCB, NULL); } static void PostWarning(widget, name, arg, block) Widget *widget; char *name; char *arg; int block; { Widget shell; char *newline; XmString tmp; XmString xstr; void _XmDestroyParentCallback(); char buf[80]; dprintf("PostWarning(0x%x, \"%s\", %s)\n", widget, name, arg); if (! *widget) { shell = XtVaCreatePopupShell("Dialog_popup", xmDialogShellWidgetClass, toplevel, XmNallowShellResize, True, XmNmwmDecorations, MWM_DECOR_BORDER, XmNtransient, True, NULL); *widget = XtVaCreateWidget(name, xmMessageBoxWidgetClass, shell, XmNnoResize, True, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNmessageAlignment, XmALIGNMENT_CENTER, NULL); XtAddCallback(*widget, XmNdestroyCallback, _XmDestroyParentCallback, NULL); XtUnmanageChild(XmMessageBoxGetChild(*widget, XmDIALOG_HELP_BUTTON)); XtUnmanageChild(XmMessageBoxGetChild(*widget, XmDIALOG_CANCEL_BUTTON)); XtAddCallback(XmMessageBoxGetChild(*widget, XmDIALOG_OK_BUTTON), XmNactivateCallback, AckCB, NULL); /* * We use the 'userData' value for storing away the string, * since it gets clobbered by a sprintf()... */ XtVaGetValues(*widget, XmNmessageString, &tmp, NULL); XtVaSetValues(*widget, XmNuserData, tmp, NULL); } XtVaGetValues(*widget, XmNuserData, &xstr, NULL); XmStringGetLtoR(xstr, XmSTRING_DEFAULT_CHARSET, &tmp); /* * This is a bit of a kludge -- we replace any occurences of * backslash with newlines. I can't figure out how to protect * these characters from Motif... I suppose if using compound * strings were slightly more obvious, I would use those. */ while (newline = strchr(tmp, '\\')) *newline = '\n'; sprintf(buf, tmp, arg); #if 0 XtFree(tmp); dprintf("did free\n"); #endif xstr = XmStringCreateLtoR(buf, XmSTRING_DEFAULT_CHARSET); XtVaSetValues(*widget, XmNnoResize, False, XmNmessageString, xstr, NULL); XtManageChild(*widget); } #ifdef DOMOTION static void MotionCB(text, client_data, mcb) Widget text; caddr_t client_data; XmTextVerifyCallbackStruct *mcb; { long pos = bp->offset + (bp->ptr - bp->base) + bp->delta; long newpos = mcb->newInsert; int n; if (ignoreMotion) return; ignoreMotion = 1; dprintf("MotionCB(%d)\n", newpos); /* * LINELEN is an arbitrary number here... */ getbuf(bp, newpos - LINELEN); bp->ptr += LINELEN; bp->ptr -= (n = skipbackword(bp->ptr, bp->base)); dprintf("new word is: %.20s\n", bp->ptr); /* we should eat up to an empty line before continuing! */ UnBlock(); } #endif void WriteCmd(fp, fmt, va_alist) FILE *fp; char *fmt; va_dcl { va_list args; va_start(args); #ifdef DEBUG printf(">>>"); (void)vprintf(fmt, args); #endif (void)vfprintf(fp, fmt, args); fflush(fp); va_end(args); } #if 0 static String fallback_resources[] = { "*isReadonlyDialog*messageString: Notice: File is read-only.", "*tempIsDialog*messageString: \ Warning: File is read-only; modified\\\\\ file is '%s'.", "*couldntSaveDialog*messageString: Error: Couldn't save modified file.", "*noBackupDialog*messageString: Warning: Couldn't write backup file.", "*isModifiedDialog*messageString: Warning: File has been modified;\\\\\ Do you really want to quit?", "*fileLabel.labelString: File:", "*lineLabel.labelString: Line:", "*offsetLabel.labelString: Offset:", "*wordLabel.labelString: Word:", "*psblLabel.labelString: Possibilities:", "*actions.skipButton.labelString: Skip", "*actions.replButton.labelString: Replace", "*actions.acptButton.labelString: Accept", "*actions.insrButton.labelString: Insert", "*actions.lookButton.labelString: Lookup", "*actions.uncpButton.labelString: Uncap.", "*actions.quitButton.labelString: Quit", "*actions.abrtButton.labelString: Abort", "*actions.helpButton.labelString: Help", "*isReadonlyDialog*dialogType: DIALOG_INFORMATION", "*couldntSaveDialog*dialogType: DIALOG_ERROR", "*tempIsDialog*dialogType: DIALOG_WARNING", "*noBackupDialog*dialogType: DIALOG_WARNING", "*isModifiedDialog*dialogType: DIALOG_WARNING", "*fileView.rows: 10", "*fileView.columns: 80", "*fileView.scrollVertical: True", "*fileView.scrollHorizontal: False", "*separator.separatorType: SINGLE_LINE", NULL}; #endif static XrmOptionDescRec options[] = { {"-c", "*columns", XrmoptionStickyArg, NULL}, {"-d", "*dictionary", XrmoptionStickyArg, NULL}, {"-T", "*type", XrmoptionStickyArg, NULL}, {"-t", "*type", XrmoptionNoArg, "tex"}, {"-n", "*type", XrmoptionNoArg, "nroff"}, {"-b", "*backup", XrmoptionNoArg, "True"}, {"-x", "*backup", XrmoptionNoArg, "False"}, {"-C", "*haveCompounds", XrmoptionNoArg, "True"}, {"-S", "*sortPossibilities", XrmoptionNoArg, "True"}, }; #define XtNcolumns "columns" #define XtCColumns "Columns" #define XtNdictionary "dictionary" #define XtCDictionary "Dictionary" #define XtNtype "type" #define XtCType "Type" #define XtNbackup "backup" #define XtCBackup "Backup" #define XtNhaveCompounds "haveCompounds" #define XtCHaveCompounds "HaveCompounds" #define XtNsortPossibilities "sortPossibilities" #define XtCSortPossibilities "SortPossibilities" static XtResource resources[] = { { XtNcolumns, XtCColumns, XtRInt, sizeof(int), XtOffsetOf(AppData,columns), XtRImmediate, (XtPointer) NCOLS, }, { XtNdictionary, XtCDictionary, XtRString, sizeof(String), XtOffsetOf(AppData,dictionary), XtRImmediate, (XtPointer) "english", }, { XtNtype, XtCType, XtRString, sizeof(String), XtOffsetOf(AppData,type), XtRImmediate, (XtPointer) "nroff", }, { XtNbackup, XtCBackup, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,backup), XtRImmediate, (XtPointer) True, }, { XtNhaveCompounds, XtCHaveCompounds, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,haveCompounds), XtRImmediate, (XtPointer) False, }, { XtNsortPossibilities, XtCSortPossibilities, XtRBoolean, sizeof(Boolean), XtOffsetOf(AppData,sortPossibilities), XtRImmediate, (XtPointer) False, }, }; static XtAppContext app_context; static Widget toplevel; static Widget actions; static Widget fileName; static Widget lineNumber; static Widget offsetNumber; static Widget text; static Widget textedit; static Widget list[NCOLS]; static Widget noBackupDialog; static Widget isReadonlyDialog; static Widget couldntSaveDialog; static Widget tempIsDialog; static Widget isModifiedDialog; void CreateWidgets(toplevel) Widget toplevel; { Widget shell; Widget mainwin; Widget psblRC; Widget button; Widget subform, subform2; Widget frame; Widget fileLabel, lineLabel, offsetLabel; Widget psblLabel, wordLabel; Widget form; Widget scrolledWindow; void _XmDestroyParentCallback(); int i; if (app_data.columns > NCOLS) app_data.columns = NCOLS; mainwin = XmCreateMainWindow (toplevel, "main", NULL, 0); XtManageChild (mainwin); #if 0 /* * Create all our pop-up shells and message boxes here... */ shell = XtVaCreatePopupShell("abortDialog_popup", xmDialogShellWidgetClass, toplevel, XmNallowShellResize, True, XmNmwmDecorations, MWM_DECOR_BORDER, XmNtransient, True, NULL); abortMsg = XtVaCreateWidget("abortDialog", xmMessageBoxWidgetClass, shell, XmNnoResize, True, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNmessageAlignment, XmALIGNMENT_CENTER, NULL); XtAddCallback(abortMsg, XmNdestroyCallback, _XmDestroyParentCallback, NULL); XtUnmanageChild(XmMessageBoxGetChild(abortMsg, XmDIALOG_HELP_BUTTON)); XtAddCallback(XmMessageBoxGetChild(abortMsg, XmDIALOG_OK_BUTTON), XmNactivateCallback, AbortOKCB, NULL); XtAddCallback(XmMessageBoxGetChild(abortMsg, XmDIALOG_CANCEL_BUTTON), XmNactivateCallback, CancelAbortCB, NULL); #endif form = XtCreateManagedWidget("form", xmFormWidgetClass, mainwin, NULL, 0); /* * Do subform containing file name, line, and character offset... */ subform = XtVaCreateManagedWidget("subform1", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); fileLabel = XtVaCreateManagedWidget("fileLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, #if 0 XmNleftOffset, 2, #endif NULL); fileName = XtVaCreateManagedWidget("fileName", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, fileLabel, XmNshadowThickness, 2, NULL); lineLabel = XtVaCreateManagedWidget("lineLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, fileName, NULL); lineNumber = XtVaCreateManagedWidget("lineNumber", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, lineLabel, XmNshadowThickness, 2, NULL); offsetLabel = XtVaCreateManagedWidget("offsetLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, lineNumber, NULL); offsetNumber = XtVaCreateManagedWidget("offsetNumber", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, offsetLabel, XmNshadowThickness, 2, NULL); /* * file viewport done as multi-line text widget... */ scrolledWindow = XtVaCreateManagedWidget("fileViewSW", xmScrolledWindowWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, subform, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 2, XmNscrollingPolicy, XmAPPLICATION_DEFINED, XmNvisualPolicy, XmVARIABLE, XmNscrollBarDisplayPolicy, XmSTATIC, XmNshadowThickness, 0, NULL); text = XtVaCreateManagedWidget("fileView", xmTextWidgetClass, scrolledWindow, XmNeditMode, XmMULTI_LINE_EDIT, XmNeditable, False, XmNautoShowCursorPosition, False, NULL); XtAddCallback(text, XmNdestroyCallback, _XmDestroyParentCallback, NULL); #ifdef DOMOTION XtAddCallback(text, XmNmotionVerifyCallback, MotionCB, NULL); #endif /* * word editing box... */ subform = XtVaCreateManagedWidget("subform", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); wordLabel = XtVaCreateManagedWidget("wordLabel", xmLabelWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, NULL); textedit = XtVaCreateManagedWidget("wordBuffer", xmTextFieldWidgetClass, subform, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, wordLabel, XmNrightAttachment, XmATTACH_FORM, NULL); XtAddCallback(textedit, XmNactivateCallback, ReplaceCB, textedit); subform2 = XtVaCreateManagedWidget("subform", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, subform, XmNtopOffset, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); frame = XtVaCreateManagedWidget("buttonBoxFrame", xmFrameWidgetClass, subform2, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 2, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 2, NULL); /* * Create list of action buttons as row/column widget... */ actions = XtVaCreateManagedWidget("actions", xmRowColumnWidgetClass, frame, XmNorientation, XmVERTICAL, XmNpacking, XmPACK_COLUMN, XmNnumColumns, 2, XmNadjustLast, False, NULL); /* can we put this into a structure? */ button = XmCreatePushButtonGadget(actions, "skipButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, SkipCB, &buf); button = XmCreatePushButtonGadget(actions, "replButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, ReplaceCB, textedit); button = XmCreatePushButtonGadget(actions, "acptButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, AcceptCB, &buf); button = XmCreatePushButtonGadget(actions, "insrButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, InsertCB, &buf); button = XmCreatePushButtonGadget(actions, "lookButton", NULL, 0); XtManageChild(button); button = XmCreatePushButtonGadget(actions, "uncpButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, UncapCB, &buf); button = XmCreatePushButtonGadget(actions, "quitButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, QuitCB, NULL); button = XmCreatePushButtonGadget(actions, "abrtButton", NULL, 0); XtManageChild(button); XtAddCallback(button, XmNactivateCallback, AbortCB, NULL); button = XmCreatePushButtonGadget(actions, "helpButton", NULL, 0); XtManageChild(button); psblLabel = XtVaCreateManagedWidget("psblLabel", xmLabelWidgetClass, subform2, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, frame, NULL); /* * Create R/C widget with word possibilities in list widgets */ psblRC = XtVaCreateManagedWidget("psblRC", xmRowColumnWidgetClass, subform2, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, psblLabel, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 2, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, frame, XmNbottomAttachment, XmATTACH_FORM, #if 1 XmNpacking, XmPACK_COLUMN, XmNnumColumns, app_data.columns, XmNorientation, XmVERTICAL, #else XmNpacking, XmPACK_TIGHT, XmNnumColumns, 1, XmNorientation, XmHORIZONTAL, #endif XmNadjustLast, False, NULL); for (i = 0; i < app_data.columns; ++i) { list[i] = XtVaCreateManagedWidget("psbList", xmListWidgetClass, psblRC, XmNselectionPolicy, XmSINGLE_SELECT, #if 1 XmNscrollBarDisplayPolicy, XmAS_NEEDED, XmNvisibleItemCount, NENTRIES, XmNlistSizePolicy, XmVARIABLE, #endif NULL); XtAddCallback(list[i], XmNsingleSelectionCallback, ListSelectCB, &buf); } /* what, nothing else? */ } main(argc, argv) char *argv[]; { char *myname, *slash; int i; char **files; myname = argv[0]; if (slash = strrchr(myname, '/')) myname = ++slash; toplevel = XtAppInitialize (&app_context, "Xspell", #if 0 options, XtNumber(options), &argc, argv, fallback_resources, #else options, XtNumber(options), &argc, argv, NULL, #endif NULL, 0); XtVaGetApplicationResources(toplevel, &app_data, resources, XtNumber(resources), NULL); if (argc == 1) { fprintf(stderr, "usage: %s file1 [ file2 ] ...\n", myname); exit(1); } CreateWidgets (toplevel); XtRealizeWidget (toplevel); Connect(toplevel); files = calloc(argc, sizeof(char *)); for (i = 1; i < argc; ++i) files[i - 1] = argv[i]; files[argc - 1] = NULL; filePtr = &files[0]; StartFile(); Loop(); } @EOF chmod 664 Xspell.c echo x - buffer.h cat >buffer.h <<'@EOF' /* * This is the structure of a file that is being spell-checked. * * Basically, all associated state is found here. */ typedef struct { char * base; char * ptr; long offset; int cnt; int delta; int lineno; int topline; int wordlen; long size; char *filename; char *tempname; /* booleans */ char changed; char readonly } buf_t; @EOF chmod 660 buffer.h echo x - app-defaults cat >app-defaults <<'@EOF' ! ! Applications defaults for Xspell ! ! Probably not wise to fool with the screen layout... ! !*type: nroff *sortPossibilities: false *backup true ! *isReadonlyDialog*dialogType: DIALOG_INFORMATION *tempIsDialog*dialogType: DIALOG_WARNING *noBackupDialog*dialogType: DIALOG_WARNING *isModifiedDialog*dialogType: DIALOG_WARNING *couldntSaveDialog*dialogType: DIALOG_ERROR ! *frame.shadowType: SHADOW_OUT *separator.separatorType: SINGLE_LINE *fileView.rows: 10 *fileView.columns: 80 *fileView.scrollVertical: True *fileView.scrollHorizontal: False @EOF chmod 666 app-defaults echo x - app-defaults.eng cat >app-defaults.eng <<'@EOF' ! ! Language dependencies for Xspell in english ! ! default strings are in english... *dictionary: english *haveCompounds: false ! *isReadonlyDialog*messageString: Notice: File is read-only. *tempIsDialog*messageString: \ Warning: File is read-only; modified\\\ file is '%s'. *couldntSaveDialog*messageString: Error: Couldn't save modified file. *noBackupDialog*messageString: Warning: Couldn't write backup file. *isModifiedDialog*messageString: Warning: File has been modified;\\\ Do you really want to quit? *fileLabel.labelString: File: *lineLabel.labelString: Line: *offsetLabel.labelString: Offset: *wordLabel.labelString: Word: *psblLabel.labelString: Possibilities: *actions.skipButton.labelString: Skip *actions.replButton.labelString: Replace *actions.acptButton.labelString: Accept *actions.insrButton.labelString: Insert *actions.lookButton.labelString: Lookup *actions.uncpButton.labelString: Uncap. *actions.quitButton.labelString: Quit *actions.abrtButton.labelString: Abort *actions.helpButton.labelString: Help @EOF chmod 640 app-defaults.eng rm -f /tmp/uud$$ (echo "begin 666 /tmp/uud$$\n#;VL*n#6%@x\n \nend" | uudecode) >/dev/null 2>&1 if [ X"`cat /tmp/uud$$ 2>&1`" = Xok ] then unpacker=uudecode else echo Compiling unpacker for non-ascii files pwd=`pwd`; cd /tmp cat >unpack$$.c <<'EOF' #include #define C (*p++ - ' ' & 077) main() { int n; char buf[128], *p, a,b; scanf("begin %o ", &n); gets(buf); if (freopen(buf, "w", stdout) == NULL) { perror(buf); exit(1); } while (gets(p=buf) && (n=C)) { while (n>0) { a = C; if (n-- > 0) putchar(a << 2 | (b=C) >> 4); if (n-- > 0) putchar(b << 4 | (a=C) >> 2); if (n-- > 0) putchar(a << 6 | C); } } exit(0); } EOF cc -o unpack$$ unpack$$.c rm unpack$$.c cd $pwd unpacker=/tmp/unpack$$ fi rm -f /tmp/uud$$ echo x - app-defaults.fr '[non-ascii]' $unpacker <<'@eof' begin 640 app-defaults.fr M(0HA"4QA;F=U86=E(&1E<&5N9&5N8VEE3H)"0D)9G)E;F-H"BIT>7!EX M.@D)"0D);&%T:6XQ"BIIDN"BIF:6QE3&%B96PN;&%B96Q3X M=')I;Flook.c <<'@EOF' static char *progid = "look 1.0a, 4 December 92 philipp@res.enst.fr"; /* * Xspell: Philippe-Andre Prindeville, Telecom Paris 4 December 1992 * * After cursing ispell numerous times for not having a * simple command line interface like "look" for searching * for words, I wrote one. Most of the code was recycled * from Xspell anyway (I should plug it here but...). * * You type: * * look [-d dictionary] word1 [word2 ... wordn ] * * and, in the best of UNIX tradition, it will *not* print * out the word if it likes it, will print out a list of * alternatives for dubious words, and will print a stupid * message (well after 10 minutes hacking I wasn't going * to spend 3 hours worrying about "user-friendly" error * messages) saying it didn't like the word... * * Debugging is simple. If you have patches, by all means * send them to me. * * Enjoy, * -Philip */ #include "config.h" #include "ispell.h" #include #include #include #include #ifdef DEBUG #define dprintf printf #define dputc putchar #else #define dprintf _dprintf #define dputc(x) #endif extern char *optarg; extern int optind, opterr, optopt; char *lang = "english"; char *fmt = NULL; int verbose = 0; static FILE *srvin, *srvout; static char possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; static int pcount; static void Connect() { int srv[2], clnt[2]; int pid, n, argc; char buf[BUFSIZ]; char *argv[10]; pipe(srv); pipe(clnt); if ((pid = fork()) == -1) { perror("fork"); exit(1); } else if (! pid) { dup2(srv[0], 0); close(srv[0]); close(srv[1]); dup2(clnt[1], 1); close(clnt[0]); close(clnt[1]); argc = 0; argv[argc++] = "ispell"; argv[argc++] = "-d"; argv[argc++] = lang; if (! strcmp(lang, "french")) argv[argc++] = "-Tlatin1"; #if 0 argv[argc++] = "-P"; #endif argv[argc++] = "-S"; argv[argc++] = "-a"; argv[argc++] = NULL; execvp("ispell", argv); perror("execl: ispell"); exit(1); } else { close(clnt[1]); close(srv[0]); if (! (srvin = fdopen(clnt[0], "r")) || ! (srvout = fdopen(srv[1], "w"))) { fprintf(stderr, "fdopen: cannot open stream\n"); exit(1); } /* * get hello banner */ n = fgets(buf, sizeof(buf) - 1, srvin); dprintf(buf); if (verbose) fputs(buf, stdout); } } static void SessionEnd() { dprintf(">>> #\n"); fprintf(srvout, "#\n"); fclose(srvout); fclose(srvin); } static void Choices (word, count, poss) char *word; int count; char poss[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; { int i; printf("%s:", word); for (i = 0; i < count; ++i) if (! strpbrk(poss[i], " -")) printf(" %s", poss[i]); putchar('\n'); } static void Clueless (word) char *word; { printf("%s ??? Totally bogus, bro'\n", word); } static void ReadBack () { int c, m, n, reliable; long pos; char word[INPUTWORDLEN]; for (; ; ) { dprintf("<<< "); c = fgetc(srvin); switch (c) { case EOF: /* very unexpected */ dprintf("EOF\n"); return; case '\n': /* done! */ dprintf("\\n\n"); break; case '*': /* word is OK */ dputc('*'); c = fgetc(srvin); dputc(c); break; case '+': /* found derivative */ dputc('+'); (void)fgets(word, sizeof(word), srvin); dprintf("%s", word); break; case '&': /* word is dubious */ dputc('&'); n = fscanf(srvin, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf("\"%s\" at %d, %d choices:", word, pos, reliable); for (n = 0; ; ++n) { c = fgetc(srvin); /* eat colon or comma */ if (c == '\n') break; fscanf(srvin, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); } /* newline already eaten */ dputc(c); pcount = n; Choices(word, pcount, possibilities); break; case '?': dputc('?'); n = fscanf(srvin, " %s %d %d", word, &reliable, &pos); pos--; /* correct for uparrow we added */ dprintf(" \"%s\" at %d, %d choices:", word, pos, reliable); for (n = 0; ; ++n) { c = fgetc(srvin); /* eat colon or comma */ if (c == '\n') break; fscanf(srvin, " %[^,\n]", possibilities[n]); dprintf(" \"%s\"", possibilities[n]); fflush(stdout); } /* newline already eaten */ dputc('\n'); pcount = n; Choices(word, pcount, possibilities); break; case '#': dputc('#'); n = fscanf(srvin, " %s %d", word, &pos); pos--; /* correct for uparrow we added */ dprintf(" \"%s\" at %d\n", word, pos); fgetc(srvin); pcount = 0; Clueless(word); break; case '-': /* gak! */ default: dputc(c); fgets(word, sizeof(word), srvin); dprintf(" %s", word); fprintf(stderr, "Error: read '%c' on connection\n", c); exit(1); break; } } } main(argc, argv) char *argv[]; { int i, c; char *myname, *slash; char *tmp; myname = argv[0]; if (slash = strrchr(myname, '/')) myname = ++slash; while ((c = getopt(argc, argv, "vd:")) != EOF) switch (c) { case 'd': /* dictionary */ lang = optarg; break; case 'v': ++verbose; break; case '?': usage: fprintf(stderr, "usage: %s [-v] [-d dictionary] word1 [word2 ... wordn]\n", myname); exit(1); } if (!verbose && optind == argc) goto usage; Connect(); dprintf(">>> ^"); fputc('^', srvout); for (i = optind; i < argc; ++i) { dprintf(" %s", argv[i]); fprintf(srvout, " %s", argv[i]); } dputc('\n'); fputc('\n', srvout); fclose(srvout); ReadBack(); SessionEnd(); exit(0); } #ifndef DEBUG dprintf() { } #endif @EOF chmod 660 look.c rm -f /tmp/unpack$$ exit 0 ispell-3.4.00/PaxHeaders.19408/unsq.c0000644000000000000000000000007410227500137013764 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/unsq.c0000444003214100001440000001035710227500137015032 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: unsq.c,v 1.18 2005/04/14 14:38:23 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: unsq.c,v $ * Revision 1.18 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.17 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.16 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.15 1999/01/07 01:58:02 geoff * Update the copyright. * * Revision 1.14 1994/01/25 07:12:19 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "msgs.h" #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ int main P ((int argc, char * argv[])); static int expand P ((char * word, char * prev)); /* * The following table encodes prefix sizes as a single character. A * matching table will be found in sq.c. */ static char size_encodings[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', /* 00-09 */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', /* 10-19 */ 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', /* 20-29 */ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', /* 30-39 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', /* 40-49 */ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', /* 50-59 */ 'y', 'z' /* 60-61 */ }; #define MAX_PREFIX (sizeof (size_encodings) - 1) extern void exit P ((int status)); int main (argc, argv) int argc; char * argv[]; { char word[257]; static char prev[257] = ""; while (!expand (word, prev)) puts (word); return 0; } static int expand (word, prev) char * word; char * prev; { register char * wordp; register char * prevp; register int same_count; register int count_char; count_char = getchar (); if (count_char == EOF) return(1); for (same_count = 0; same_count < MAX_PREFIX && size_encodings[same_count] != count_char; same_count++) ; if (same_count == MAX_PREFIX) { (void) fprintf (stderr, UNSQ_C_BAD_COUNT, (unsigned int) count_char); exit (1); } prevp = prev; wordp = word; while (same_count--) *wordp++ = (*prevp++); if (gets (wordp) == NULL) { (void) fprintf (stderr, UNSQ_C_SURPRISE_EOF); exit (1); } (void) strcpy (prev, word); return 0 ; } ispell-3.4.00/PaxHeaders.19408/icombine.c0000644000000000000000000000007410231561320014557 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/icombine.c0000444003214100001440000001741510231561320015627 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: icombine.c,v 2.33 2005/04/20 23:16:32 geoff Exp $"; #endif #define MAIN /* * icombine: combine multiple ispell dictionary entries into a single * entry with the options of all entries * * The original version of this program was written by Gary Puckering at * Cognos, Inc. The current version is a complete replacement, created by * reducing Pace Willisson's buildhash program. By using routines common * to buildhash and ispell, we can be sure that the rules for combining * capitalizations are compatible. * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: icombine.c,v $ * Revision 2.33 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 2.32 2005/04/14 23:11:36 geoff * Add the -w switch. * * Revision 2.31 2005/04/14 14:38:23 geoff * Update license. * * Revision 2.30 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 2.29 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 2.28 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 2.27 1999/01/07 01:22:44 geoff * Update the copyright. * * Revision 2.26 1999/01/03 01:46:30 geoff * Add support for sgml and plain deformatter types. * * Revision 2.25 1997/12/02 06:24:45 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 2.24 1994/01/25 07:11:35 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" char * Lfile; /* Language-description file */ int main P ((int argc, char * argv[])); static void usage P ((void)); VOID * mymalloc P ((unsigned int size)); VOID * myrealloc P ((VOID * ptr, unsigned int size, unsigned int oldsize)); void myfree P ((VOID * ptr)); static void combinedict P ((void)); static void combineout P ((void)); int main (argc, argv) int argc; char * argv[]; { char * argp; char * preftype = NULL; char * wchars = NULL; while (argc > 1 && argv[1][0] == '-') { argc--; argv++; switch (argv[0][1]) { case 'T': argp = (*argv)+2; if (*argp == '\0') { argv++; argc--; if (argc == 0) usage (); argp = *argv; } preftype = argp; break; case 'w': wchars = (*argv) + 2; if (*wchars == '\0') { argv++; argc--; if (argc == 0) usage (); wchars = *argv; } break; break; default: usage (); break; } } if (argc > 1) /* Figure out what language to use */ Lfile = argv[1]; else Lfile = DEFLANG; if (yyopen (Lfile)) /* Open the language file */ return 1; yyinit (); /* Set up for the parse */ if (yyparse ()) /* Parse the language tables */ exit (1); initckch (wchars); if (preftype != NULL) { defstringgroup = findfiletype (preftype, 1, (int *) NULL); if (defstringgroup < 0 && strcmp (preftype, "plain") != 0 && strcmp (preftype, "tex") != 0 && strcmp (preftype, "nroff") != 0 && strcmp (preftype, "sgml") != 0) { (void) fprintf (stderr, ICOMBINE_C_BAD_TYPE, preftype); exit (1); } } if (defstringgroup < 0) defstringgroup = 0; combinedict (); /* Combine words */ return 0; } static void usage () { (void) fprintf (stderr, ICOMBINE_C_USAGE); exit (1); } VOID * mymalloc (size) unsigned int size; { return malloc (size); } /* ARGSUSED */ VOID * myrealloc (ptr, size, oldsize) VOID * ptr; unsigned int size; unsigned int oldsize; { return realloc (ptr, size); } void myfree (ptr) VOID * ptr; { free (ptr); } static void combinedict () { struct dent d; register struct dent * dp; unsigned char lbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; ichar_t ucbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; ichar_t lastbuf[INPUTWORDLEN + MAXAFFIXLEN + 2 * MASKBITS]; lastbuf[0] = '\0'; hashtbl = (struct dent *) mymalloc (sizeof (struct dent)); hashtbl->flagfield = 0; hashtbl->word = 0; while (fgets ((char *) lbuf, sizeof lbuf, stdin) != NULL) { if (ichartostr (lbuf, strtosichar (lbuf, 0), sizeof lbuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (lbuf)); if (makedent (ichartosstr (strtosichar (lbuf, 0), 1), ICHARTOSSTR_SIZE, &d) < 0) continue; if (strtoichar (ucbuf, d.word, sizeof ucbuf, 1)) (void) fprintf (stderr, WORD_TOO_LONG (lbuf)); upcase (ucbuf); if (icharcmp (ucbuf, lastbuf) != 0) { /* ** We have a new word. Put the old one out. */ combineout (); (void) icharcpy (lastbuf, ucbuf); } dp = hashtbl; if ((dp->flagfield & USED) == 0) { *dp = d; /* ** If it's a followcase word, we need to make this a ** special dummy entry, and add a second with the ** correct capitalization. */ if (captype (d.flagfield) == FOLLOWCASE) { if (addvheader (dp)) exit (1); } } else { /* ** A different capitalization is already in ** the dictionary. Combine capitalizations. */ if (combinecaps (dp, &d) < 0) exit (1); } } combineout (); } static void combineout () { register struct dent * ndp; register struct dent * tdp; /* ** Put out the dictionary entry on stdout in text format, ** freeing it as we go. **/ if (hashtbl->flagfield & USED) { for (tdp = hashtbl; tdp != NULL; tdp = ndp) { toutent (stdout, tdp, 0); myfree (tdp->word); ndp = tdp->next; while (tdp->flagfield & MOREVARIANTS) { if (tdp != hashtbl) myfree ((char *) tdp); tdp = ndp; if (tdp->word) myfree (tdp->word); ndp = tdp->next; } if (tdp != hashtbl) myfree ((char *) tdp); } } hashtbl->flagfield = 0; hashtbl->word = NULL; } ispell-3.4.00/PaxHeaders.19408/exp_table.h0000644000000000000000000000007410233541507014751 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/exp_table.h0000444003214100001440000000611510233541507016014 0ustar00geofffaculty00000000000000#ifndef EXP_TABLE_H_INCLUDED #define EXP_TABLE_H_INCLUDED /* * $Id: exp_table.h,v 1.3 2005/04/26 22:40:07 geoff Exp $ */ /* * Note: this header file was written by Edward Avis. Thus, it is not * distributed under the same license as the rest of ispell. */ /* * $Log: exp_table.h,v $ * Revision 1.3 2005/04/26 22:40:07 geoff * Add double-inclusion protection. * * Revision 1.2 2005/04/14 15:19:37 geoff * Reformat to be more consistent with ispell style. * * Revision 1.1 2002/07/02 00:06:50 geoff * Initial revision * */ /* * Provides the exp_table type, which stores the expansions of a word. * Use it like this: * * int i; * struct exp_table t; * exp_table_init (&t, "paint"); * add_expansion_copy (&t, "painted", mask0); * add_expansion_copy (&t, "painting", mask1); * add_expansion_copy (&t, "painter", mask2); * for (i = 0; i < num_expansions (&t); i++) * printf("expansion: %s\n", get_expansion (&t, i)); * exp_table_empty (&t); * * where mask0 is a MASKTYPE with the flags used to add 'ed' set, * mask1 gives the flags for 'ing', etc. * * Note that allocating the struct itself is up to you, but you * should initialize it with exp_table_init() before use and call * exp_table_empty() before you free it. */ /* * The structure itself. Normally, it is better to use the accessors * below rather than access the structure directly. */ struct exp_table { char ** exps; /* Table of expansions */ MASKTYPE * flags; /* Flags used to get the expansions */ int size; /* Current number of expansions */ int max_size; /* Maximum number of expansions */ ichar_t * orig_word; /* Root word that flags were applied to */ }; /* * Initialize a struct exp_table. After initialization the number of * expansions will be zero. Pass in the original word from which the * expansions are generated - this will be stored by reference. */ extern void exp_table_init (struct exp_table * e, ichar_t * orig_name); /* Return the original word in an expansion. */ extern const ichar_t * get_orig_word (const struct exp_table * e); /* Return expansion number i (numbered from zero). */ extern const char * get_expansion (const struct exp_table * e, int i); /* Return the flags used to get expansion number i. */ extern MASKTYPE get_flags (const struct exp_table * e, int i); /* Return number of expansions in the table. */ extern int num_expansions (const struct exp_table * e); /* Add a new expansion to the list, if it is not already in there. * Returns true iff the expansion was added. Specify the result of * the expansion and the flags that were used. Takes a copy of the * string passed in. */ extern int add_expansion_copy (struct exp_table * e, const char * s, MASKTYPE flags[]); /* * Empty the table of expansions, freeing any resources allocated. * Returns a pointer to the now empty struct. */ extern struct exp_table * exp_table_empty (struct exp_table * e); /* Dump the contents of a table to stderr, for debugging. */ extern void exp_table_dump (const struct exp_table * e); #endif /* EXP_TABLE_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/Makekit0000644000000000000000000000013212466001472014142 xustar0030 mtime=1423442746.191032224 30 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/Makekit0000555003214100001440000001601612466001472015216 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: Makekit,v 1.53 2015-02-08 01:32:53-08 geoff Exp $ # # Copyright 1992, 1993, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make an ispell distribution kit. This is not a clever script, # just a handy one. # # Usage: # USAGE="Usage: Makekit [-d destdir] [-e]" # # destdir is the directory in which the kits will be made; you will # want to pick someplace that has lots of space. # # If -e is specified, the list of files in the kit is echoed to # stdout and no kit is made. # # $Log: Makekit,v $ # Revision 1.53 2015-02-08 01:32:53-08 geoff # Remove english.5X from the kit. # # Revision 1.52 2005-05-25 09:17:57-07 geoff # Add local.h.cygwin to the kit. # # Revision 1.51 2005/04/27 01:18:34 geoff # Add the CHANGES file. # # Revision 1.50 2005/04/27 00:17:35 geoff # Add a sample local.h for BSD systems. # # Revision 1.49 2005/04/26 22:41:07 geoff # Remove fixispell-a, since it really doesn't do the job # # Revision 1.48 2005/04/14 14:38:23 geoff # Update license. Add several new files, notably Eli Zaretskii's # changes to support DOS/Windows systems. # # Revision 1.47 2002/06/21 00:19:30 geoff # Fix the names of the deformatters. Generate RCS version tags when # building a kit. # # Revision 1.46 2002/06/20 23:46:15 geoff # Put sq/unsq back, since some dictionaries are still distributed in sq # format. # # Revision 1.45 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.44 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.43 2001/06/07 08:02:18 geoff # Change the kit to use my deformatters. # # Revision 1.42 2001/06/06 23:08:23 geoff # Add some sample deformatters. # # Revision 1.41 1999/01/18 03:40:32 geoff # Build tar file from a version-numbered directory # # Revision 1.40 1999/01/07 01:23:03 geoff # Update the copyright. Make the kit into a gzipped tar file rather # than shars. Get rid of the -c switch. Remove the following files # from the kit: ishar, ispell.el, ispell.texinfo, makeshar, splitdict, # sq.1, sq.c, unsq.c, and all foreign-language affix files. # # Revision 1.39 1995/10/11 04:58:07 geoff # Add the Portuguese language files # # Revision 1.38 1995/01/15 00:54:45 geoff # Add iwhich and the new Spanish support # # Revision 1.37 1994/05/18 02:56:25 geoff # Remember to list dictionaries with the -e switch # # Revision 1.36 1994/04/27 02:58:42 geoff # Add the new English-dialect Makefiles # # Revision 1.35 1994/02/07 08:39:49 geoff # Don't delete everything when we're only echoing names # # Revision 1.34 1994/01/25 08:51:16 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # maxsize=60000 # This leaves room for some headers destdir=kits echolist=false PATH=`pwd`:$PATH; export PATH while [ $# -gt 0 ] do case "$1" in -d) destdir="$2" shift; shift ;; -e) echolist=true shift ;; *) echo "$USAGE" 1>&2 exit 1 ;; esac done case "$destdir" in /*) ;; *) destdir=`pwd`/$destdir ;; esac flist=' CHANGES Contributors README Magiclines Makefile Makekit Makepatch WISHES buildhash.c config.X correct.c defmt.c dump.c exp_table.c exp_table.h fields.3 fields.c fields.h findaffix.X good.c hash.c icombine.c ijoin.c ispell.1X ispell.5X ispell.c ispell.h iwhich local.h.bsd local.h.cygwin local.h.generic local.h.linux local.h.macos local.h.solaris lookup.c makedict.sh makedent.c munchlist.X parse.y proto.h sq.1 sq.c subset.X term.c tgood.c tree.c tryaffix.X unsq.c version.h xgets.c zapdups.X languages/Makefile languages/Where languages/fix8bit.c languages/altamer/Makefile languages/american/Makefile languages/british/Makefile languages/dansk/Makefile languages/deutsch/Makefile languages/english/Makefile languages/english/altamer.0 languages/english/altamer.1 languages/english/altamer.2 languages/english/american.0 languages/english/american.1 languages/english/american.2 languages/english/british.0 languages/english/british.1 languages/english/british.2 languages/english/english.0 languages/english/english.1 languages/english/english.2 languages/english/english.3 languages/english/english.aff languages/english/msgs.h languages/espanol/Makefile languages/francais/Makefile languages/nederlands/Makefile languages/norsk/Makefile languages/portugues/Makefile languages/svenska/Makefile addons/nextispell/Makefile addons/nextispell/README addons/nextispell/configure addons/nextispell/configure.h.template addons/nextispell/configureTeX addons/nextispell/nextispell.m addons/nextispell/services.template addons/xspell.shar deformatters/Makefile deformatters/README deformatters/defmt-c.c deformatters/defmt-sh.c pc/README pc/cfglang.sed pc/cfgmain.sed pc/configdj.bat pc/djterm.c pc/local.djgpp pc/local.emx pc/make-dj.bat pc/makeemx.bat ' if $echolist then echo $flist exit 0 fi [ -d "$destdir" ] || mkdir "$destdir" version=`egrep 'International Ispell' version.h | awk '{print $5;exit}'` rcsversion=`echo $version | tr . _` TMP=$destdir/ispell-$version rm -rf $TMP trap "rm -rf $TMP; exit 1" 1 2 15 trap "rm -rf $TMP; exit 0" 13 rcs -NV${rcsversion}: $flist mkdir $TMP tar cf - $flist | (cd $TMP; tar xf -) tarfile=$destdir/ispell-$version.tar.gz rm -f $tarfile (cd $destdir; tar cvf - ispell-$version) | gzip -v -9 > $tarfile rm -rf $TMP ispell-3.4.00/PaxHeaders.19408/deformatters0000644000000000000000000000013212466065110015253 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/deformatters/0000755003214100001440000000000012466065110016377 5ustar00geofffaculty00000000000000ispell-3.4.00/deformatters/PaxHeaders.19408/README0000644000000000000000000000007410227330506016212 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/deformatters/README0000444003214100001440000000044710227330506017257 0ustar00geofffaculty00000000000000The enclosed programs are sample deformatters provided primarily to show how to write filters for use with ispell's -F switch. They allow ispell to be used to check C and C++ programs as well as shell scripts (and any other languages that use # for comments and both quote styles for strings). ispell-3.4.00/deformatters/PaxHeaders.19408/defmt-sh.c0000644000000000000000000000007407504567672017231 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/deformatters/defmt-sh.c0000644003214100001440000001346107504567672020300 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: deformat-sh.c,v 1.4 2001/07/25 21:51:48 geoff Exp geoff $"; #endif /* * Simple deformatter for sh/bash scripts. * * Copyright 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * $Log: deformat-sh.c,v $ * Revision 1.4 2001/07/25 21:51:48 geoff * *** empty log message *** * * Revision 1.3 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.2 2001/06/07 08:03:54 geoff * Don't interpret $# as a comment introduction. * * Revision 1.1 2001/06/07 07:23:54 geoff * Initial revision * */ #include #ifndef NO_FCNTL_H #include #if defined(O_BINARY) && O_BINARY #include #define SET_BINARY(fd) do \ { \ if (!isatty (fd)) \ setmode (fd, O_BINARY); \ } while (0) #else #define SET_BINARY(fd) /* Nothing needed */ #endif /* O_BINARY */ #endif /* NO_FCNTL_H */ int main (); /* Filter to select sh/bash comments */ static int igetchar (); /* Read one character from stdin */ static int do_comment (); /* Handle comments */ static int do_quote (); /* Handle quoted strings */ int main (argc, argv) int argc; /* Argument count */ char * argv[]; /* Argument vector */ { int c; /* Next character read from stdin */ /* * Since the deformatter needs to produce exactly one character * of output for each character of input, we need to preserve * the end-of-line format (Unix Newline or DOS CR-LF) of the * input file. This means we must do binary I/O. */ SET_BINARY (fileno (stdin)); SET_BINARY (fileno (stdout)); while ((c = igetchar ()) != EOF) { if (c == '\\') { putchar (' '); if ((c = igetchar ()) == EOF) break; if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } else if (c == '#') { if (do_comment()) break; } else if (c == '\'' || c == '"') { if (do_quote(c)) break; } else if (c == '$') { /* * $ might be followed by #, in which case it's not a comment * start. So we skip the character immediately after the $. */ putchar (' '); if ((c = igetchar ()) == EOF) break; putchar (' '); } else if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } return 0; } /* * Like getchar, except on MSDOS, where it knows about ^Z. */ static int igetchar () { int c = getchar (); #ifdef MSDOS if (c == '\032') /* ^Z is a kind of ``software EOF'' */ c = EOF;; #endif return c; } /* * Handle shell comments, passing their contents through unchanged. */ static int do_comment () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for pound sign */ while ((c = igetchar ()) != EOF) { putchar (c); if (c == '\n') return 0; /* End of comment, continue deformatting */ } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle quoted strings, passing their contents through unchanged. */ static int do_quote(qc) int qc; /* Character that started the quote section */ { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { if (c == qc) { putchar (' '); return 0; /* End of quotes, continue deformatting */ } else if (c == '\\') { /* * Backslashed stuff is tricky to handle, because it might * contain a magic nroff or TeX character, but in that case * a doubled backslash would have to be converted to single. * That's too hard, so we'll settle for just passing the double * backslash through. If you want to spell-check that kind of * sequence, you'll have to create a new character-set type in * your affix file. */ putchar ('\\'); if ((c = igetchar ()) == EOF) return 1; putchar (c); } else putchar (c); } return 1; /* EOF hit, caller must terminate loop */ } ispell-3.4.00/deformatters/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624061016775 xustar0030 mtime=1423386673.988273506 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/deformatters/Makefile0000444003214100001440000000661512465624061020052 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.9 2015-02-08 01:11:13-08 geoff Exp $ # # Copyright 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # # $Log: Makefile,v $ # Revision 1.9 2015-02-08 01:11:13-08 geoff # Support DESTDIR # # Revision 1.8 2015-02-08 00:56:20-08 geoff # Change executable names and fix a few misuses of make. # # Revision 1.7 2005/05/01 23:04:58 geoff # Add EXEEXT to executables for DOS portability (courtesy of Eli Zaretskii). # # Revision 1.6 2004/06/02 06:30:28 geoff # Add .c: and .o: rules so proper flags are always used. # # Revision 1.5 2004/06/02 06:28:12 geoff # Minor license update # # Revision 1.4 2001/09/06 00:35:18 geoff # Shorten names so that the deformatters can be built on MS-DOS. # # Revision 1.3 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.2 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.1 2001/06/07 07:23:54 geoff # Initial revision # # SHELL = /bin/sh MAKE = make PROGRAMS = defmt-c$(EXEEXT) defmt-sh$(EXEEXT) all: $(PROGRAMS) defmt-c: defmt-c.o @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -o $@ $< defmt-sh: defmt-sh.o @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -o $@ $< .c.o: @. ../config.sh; \ set -x; \ $$CC $$CFLAGS -c $< install: all @. ../config.sh; \ set -x; \ rm -f $(DESTDIR)$$BINDIR/defmt-c $(DESTDIR)$$BINDIR/defmt-sh @. ../config.sh; \ set -x; \ $$INSTALL $(PROGRAMS) $(DESTDIR)$$BINDIR @. ../config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip $(PROGRAMS); \ chmod 755 $(PROGRAMS) clean: rm -f *.o core a.out mon.out $(PROGRAMS) realclean veryclean: clean ispell-3.4.00/deformatters/PaxHeaders.19408/defmt-c.c0000644000000000000000000000007407504567631017034 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/deformatters/defmt-c.c0000644003214100001440000001637307504567631020110 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: deformat-c.c,v 1.3 2001/07/25 21:51:48 geoff Exp geoff $"; #endif /* * Simple deformatter for C/C++ strings and comments. * * Copyright 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Since the new ANSI C9X standard supports //-style comments, this * deformatter does not distinguish between the languages. There are * some pathological cases where it might produce the wrong result on * older C programs, but since those programs will become illegal * under C9X, it's not worth supporting them. * * This deformatter is rather stupid; it shouldn't be run on programs * that have syntax errors. */ /* * $Log: deformat-c.c,v $ * Revision 1.3 2001/07/25 21:51:48 geoff * *** empty log message *** * * Revision 1.2 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.1 2001/06/07 07:23:54 geoff * Initial revision * */ #include #ifndef NO_FCNTL_H #include #if defined(O_BINARY) && O_BINARY #include #define SET_BINARY(fd) do \ { \ if (!isatty (fd)) \ setmode (fd, O_BINARY); \ } while (0) #else #define SET_BINARY(fd) /* Nothing needed */ #endif /* O_BINARY */ #endif /* NO_FCNTL_H */ int main (); /* Filter to select C/C++ comments */ static int igetchar (); /* Read one character from stdin */ static int do_slashstar (); /* Handle C-style comments */ static int do_slashslash (); /* Handle C++-style comments */ static int do_singlequote (); /* Handle single-quoted strings */ static int do_doublequote (); /* Handle double-quoted strings */ int main (argc, argv) int argc; /* Argument count */ char * argv[]; /* Argument vector */ { int c; /* Next character read from stdin */ /* * Since the deformatter needs to produce exactly one character * of output for each character of input, we need to preserve * the end-of-line format (Unix Newline or DOS CR-LF) of the * input file. This means we must do binary I/O. */ SET_BINARY (fileno (stdin)); SET_BINARY (fileno (stdout)); while ((c = igetchar ()) != EOF) { if (c == '/') { putchar (' '); if ((c = igetchar ()) == EOF) break; else if (c == '*') { if (do_slashstar()) break; } else if (c == '/') { if (do_slashslash()) break; } else putchar (' '); } else if (c == '\'') { if (do_singlequote()) break; } else if (c == '"') { if (do_doublequote()) break; } else if (c == '\n' || c == '\r') putchar (c); else putchar (' '); } return 0; } /* * Like getchar, except on MSDOS, where it knows about ^Z. */ static int igetchar () { int c = getchar (); #ifdef MSDOS if (c == '\032') /* ^Z is a kind of ``software EOF'' */ c = EOF;; #endif return c; } /* * Handle C-style comments, passing their contents through unchanged. */ static int do_slashstar () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the star */ while ((c = igetchar ()) != EOF) { if (c != '*') putchar (c); else { if ((c = igetchar ()) == EOF) return 1; /* EOF hit, caller must terminate loop */ if (c == '/') { putchar (' '); putchar (' '); return 0; /* Done with comment, continue deformatting */ } putchar ('*'); putchar (c); } } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle C++-style comments, passing their contents through unchanged. */ static int do_slashslash () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for 2nd slash */ while ((c = igetchar ()) != EOF) { putchar (c); if (c == '\n') return 0; /* End of comment, continue deformatting */ } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle single-quoted strings by whiting them out (but not getting confused * if they contain embedded slashes or double quotes). */ static int do_singlequote () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { putchar (' '); if (c == '\'') return 0; /* End of quotes, continue deformatting */ else if (c == '\\') { if ((c = igetchar ()) == EOF) return 1; putchar (' '); } } return 1; /* EOF hit, caller must terminate loop */ } /* * Handle double-quoted strings, passing their contents through unchanged. */ static int do_doublequote () { int c; /* Next character from stdin */ putchar (' '); /* Create blank to cover for the quote */ while ((c = igetchar ()) != EOF) { if (c == '"') { putchar (' '); return 0; /* End of quotes, continue deformatting */ } else if (c == '\\') { /* * Backslashed stuff is tricky to handle, because it might * contain a magic nroff or TeX character, but in that case * a doubled backslash would have to be converted to single. * That's too hard, so we'll settle for just passing the double * backslash through. If you want to spell-check that kind of * sequence, you'll have to create a new character-set type in * your affix file. */ putchar ('\\'); if ((c = igetchar ()) == EOF) return 1; putchar (c); } else putchar (c); } return 1; /* EOF hit, caller must terminate loop */ } ispell-3.4.00/PaxHeaders.19408/hash.c0000644000000000000000000000007410227500137013721 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/hash.c0000444003214100001440000000725410227500137014771 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: hash.c,v 1.25 2005/04/14 14:38:23 geoff Exp $"; #endif /* * hash.c - a simple hash function for ispell * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: hash.c,v $ * Revision 1.25 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.24 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.23 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.22 1999/01/07 01:22:38 geoff * Update the copyright. * * Revision 1.21 1997/12/02 06:24:44 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.20 1994/01/25 07:11:34 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" int hash P ((ichar_t * word, int hashtblsize)); /* * The following hash algorithm is due to Ian Dall, with slight modifications * by Geoff Kuenning to reflect the results of testing with the English * dictionaries actually distributed with ispell. */ #define HASHSHIFT 5 #define HASHUPPER(c) mytoupper(c) int hash (s, hashtblsize) register ichar_t * s; register int hashtblsize; { register long h = 0; register int i; #ifdef ICHAR_IS_CHAR for (i = 4; i-- && *s != 0; ) h = (h << 8) | HASHUPPER (*s++); #else /* ICHAR_IS_CHAR */ for (i = 2; i-- && *s != 0; ) h = (h << 16) | HASHUPPER (*s++); #endif /* ICHAR_IS_CHAR */ while (*s != 0) { /* * We have to do circular shifts the hard way, since C doesn't * have them even though the hardware probably does. Oh, well. */ h = (h << HASHSHIFT) | ((h >> (32 - HASHSHIFT)) & ((1 << HASHSHIFT) - 1)); h ^= HASHUPPER (*s++); } return (unsigned long) h % hashtblsize; } ispell-3.4.00/PaxHeaders.19408/Contributors0000644000000000000000000000007410233703535015256 xustar0030 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/Contributors0000444003214100001440000002733410233703535016327 0ustar00geofffaculty00000000000000Ispell has a long and convoluted history. I have tried to track down as much as possible about it and condense it below. THE DEVELOPMENT OF SPELL-CHECKING AND THE FIRST ISPELL The following background information on spelling checkers in general, and ispell in particular, was provided to me by Les Earnest (les@dec-lite.stanford.edu): > The earliest spelling checker (of sorts) of which I am aware was in a > program that attempted to automatically receive human-keyed Morse > code, which can be ambiguous because of the variable timing between > dots, dashes, intercharacter pauses, and interword pauses. This > program didn't use a full dictionary; instead, used a table of > digraphs (two-letter sequences) that occur in English and barred > improper letter sequences. This program was written by someone at MIT > Lincoln Lab around 1959 and, I think, ran on the TX-2 computer there. > Unfortunately, I don't remember his name. I might still have the > paper he wrote in my files but it would take a major search to find it > and I might not succeed. > > A program that I wrote in 1961 to read cursive writing contained a > real spelling checker, using the 10,000 most common English words. > It is reported in: > L. Earnest, "Machine Recognition of Cursive Writing," Information > Processing 62, (Proc. IFIP Congress 1962, Munich), North-Holland, > Amsterdam, 1963. > and > N. Lindgren, ``Machine Recognition of Human Language, Part III - > Cursive Script Recognition'', IEEE Spectrum, May 1965. > > I brought that dictionary to Stanford and got a PhD student to write > a spelling checker for text in Lisp running on our PDP-6 computer at > the Stanford Artificial Intelligence Lab around 1967. > Unfortunately, I do not remember which student it was; it could have > been Gil Falk. It was a rather simple program (certainly much > simpler than the earlier cursive writing program) and I didn't think > of it as a significant development at the time. > > [Later], I got another PhD student, Ralph Gorin, to do a better and > faster spelling checker sometime in the early '70s, still using my > old dictionary. Ralph later wrote an article about it in CACM. I > believe that he later augmented the dictionary. [note: Ralph has since informed me that he wrote no such article. The program was called SPELL and was written in 1971. Ralph provided me with a reference to "Computer Programs for Spelling Correction", by James L. Peterson, Springer-Verlag, Berlin, 1980, No. 96 in the series "Lecture Notes in Computer Science." This book states that Ralph's SPELL program, which was the direct ancestor of ispell, was the first computer program written for checking the spelling of text documents. The book is also a good source of references on spelling programs.] > ... > > [Ispell] was originally written in PDP-10 assembly language and ran > under the WAITS operating system, which is similar to TOPS-10 but existed > only on SAIL (a dual processor KA10/PDP-6 system). It was and is called > SPELL on that machine. It later was modified to run under Tenex and > TOPS-20. [Ralph mentions that SPELL was also ported to MIT's ITS and TOPS-10.] The Tenex version of ispell was later revised by W. E. Matson (1974), and Bill Ackerman (1978). Bill has provided the following information: > I came across the SPELL program in 1978 on ITS. It was a port from > Stanford, and had the names Ralph Gorin (approximately 1971) and > Wayne Matson (1974) associated with it. I did 3 things to it: > > Rewrote it as a native program for ITS, and, shortly thereafter, > TOPS-20. (I never did anything for TOPS-10, and am not aware > that it ever ran on TOPS-10, though it may have.) > > Replaced the heuristics for suffix removal, which I found unreliable > and unsatisfactory, with an algorithm that was driven by specific > suffix flags in the dictionary. This way, the dictionary would have > complete control over what words were legal, and there would be no > spurious hits. > > Apparently most importantly, though I had no idea at time, gave it > the name "ISPELL", for "ITS version of spell", since I didn't > consider myself authorized to throw away an existing program > and overwrite it with a new one under the same name. > > I have not followed the history of the program since then, and do not know > if it still uses the "suffix flags" in its dictionary. But if it does, > I introduced them. The Ispell algorithm that uses those flags to make > accurate decisions about the legality of words was documented in great > detail in James Peterson's Springer-Verlag book. (He spent a semester > at MIT while working on the book, and I provided him with a lot of > information and documentation at that time.) > > Bill Ackerman > wba@apollo.hp.com Michael Adler adds: > I did work on ispell in 1982. Actually, I stole the ispell > dictionary and suffix compression algorithm and wrote a spelling > checker for CP/M in 8080 assembler that I very creatively called "SPELL." > By sorting the dictionary alphabetically and using a difference encoding > I managed to pack the entire dictionary that Bill was using in about > 56Kb. The CP/M program read a document, sorted all the words alphabetically > and then checked them. It then reread the document and compared words as > it found them against the in memory, sorted and checked words. SPELL was > around in the public domain on CP/M. > > I was in high school at the time and talked to Bill only over email. > We wound up in the same compiler group at Apollo in the late 80's by > coincidence. DEVELOPMENT OF THE C/UNIX VERSION OF ISPELL In 1983, Pace Willisson (pace@prep.ai.mit.edu) wrote a C/Unix version from scratch, based on the ispell documentation. In 1987, Walt Buehring revised and enhanced ispell, and posted it to the Usenet along with a dictionary. In addition, Walt wrote the first version of "ispell.el", the emacs interface. Geoff Kuenning (geoff@ITcorp.com, that's me, and by the way I pronounce it "Kenning"; the "u" is silent) picked up this version, fixed some bugs, and added further enhancements, all of which made me the de-facto ispell maintainer for the net. I also put quite a bit of work into improving the quality of the dictionaries. In 1987 I began work on the "munchlist" script, which I originally intended to be used to add flags to personal dictionary entries. At the same time I was studying German, and wanted to use ispell to check the papers I was writing for that class. After thinking about it for some time, I realized that the suffix flags could be table-driven, which would both add flexibility and would get rid of certain difficult-to-find bugs. In 1988 I rewrote major portions of the code to do this, resulting in the first multi-lingual version. Ole Bjoern Hessen (obh@ifi.uio.no) in Norway alpha-tested this version and provided several important enhancements. Bob Devine (vianet!devine) provided two larger dictionaries (which became the basis for english.1 and english.2) to me for inclusion with subsequent releases. Ashwin Ram (ram@cs.yale.edu) made substantial enhancements to Walt Buehring's emacs interface, and provided them to me for inclusion with an earlier release. The emacs interface was then completely overhauled by Ken Stevens (stevens@hplabs.hp.com), who also beta-tested the software and without whom this posting would not have been possible. If there's a feature in the emacs interface that you like, you probably have Ken to thank for it. His efforts have been tireless for many years. Martin Boyer made major contributions to the munchlist script, including producing a version that runs under perl (see languages/Where for instructions on how to get that version). Philippe-Andre Prindeville provided xspell (a Motif-based X interface), and Moritz Willers provided a NeXTStep interface. DEVELOPMENT AND DEATH OF ISPELL 4.0 Meanwhile, and unbeknownst to me, Pace Willisson was working on his own improvements to ispell. He focused primarily on dictionary size and startup time. His solution was a dictionary compression algorithm that detected and encoded frequent letter pairs. This also reduced the time needed to read it in. Pace also changed some internal data structures to improve startup time. Pace and I eventually discovered each other's efforts, and discussed re-merging our changes, but we decided that there would be too much work involved. This was partly because I was close to a release and didn't want to delay it with an extensive and error-prone merge. In late 1992 (if my memory serves correctly), Richard Stallman contacted me, asking for permission to distribute ispell as part of the GNU suite. I responded that he was welcome to distribute it, but that I was not willing to place my software under the Gnu Public License. Through a misunderstanding, neither of us considered the possibility of finding a compromise license that both could live with. So Richard started a search for an alternate version, and found Pace working right in his back yard. I have been told that when FSF first learned of Pace's version, they again considered using International Ispell instead because it was both more popular and more capable, but this idea was rejected due to the license misunderstanding. Instead, FSF enhanced Pace's version somewhat and called it ispell 4.0, apparently in the hopes that by numbering the version higher, it would become the standard. When ispell 4.0 was released, much confusion ensued. Many ispell users innocently "upgraded" to 4.0 and then screamed when they could not find features to which they had grown accustomed. Europeans in general were angered by the apparent provincialism shown by the "dropping" of international support. I found myself inundated with questions about a version I had never heard of or seen. One of the earliest and most common suggestions was that FSF should rename their version "gispell". This had a lot of precedent, both in the naming of other FSF utilities and in the then-recent change of the suffix used by gzip from ".z" to ".gz". Unfortunately, the FSF refused to do this. I may have inadvertently contributed to this refusal with a Usenet posting in which I tried to clarify what had happened, pointing out that the FSF version was more recently related to Pace's than my own. This may have been seen as an acknowledgment that FSF should have the rights to the name "ispell," and that I should rename my version. A flame war arose, and I decided that the only way to solve the problem was to rename my version to eliminate the confusion. However, at about the same time Richard Stallman and I began negotiating via e-mail. We itemized and clarified his objections to my license, and I learned from a third party that FSF is willing to distribute software that falls under the University of California license (also known as the Berkeley license). Richard and I agreed that if I changed my license to be a paraphrase of the UC license, FSF would be willing to distribute my version with no changes. Since then, ispell 4.0 has been dropped by FSF and has pretty well disappeared from the net, leaving International Ispell as the version of choice for nearly everyone. OTHER CONTRIBUTORS Numerous other people have contributed enhancements, suggestions, and bug fixes. I used to attempt to keep track of all of them, and list their names here. However, I found that keeping the list of names correct was as time-consuming as fixing bugs, so I finally decided that the list had grown too long, and stopped keeping it current. This is unfortunate, because many people have made significant contributions to ispell and I would like to have a way to acknowledge them. So please remember that hundreds of people have helped in this effort, and that I appreciate each and every one of them. ispell-3.4.00/PaxHeaders.19408/sq.10000644000000000000000000000007410227500137013337 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/sq.10000444003214100001440000000724210227500137014404 0ustar00geofffaculty00000000000000.\" .\" $Id: sq.1,v 1.12 2005/04/14 14:38:23 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: sq.1,v $ .\" Revision 1.12 2005/04/14 14:38:23 geoff .\" Update license. .\" .\" Revision 1.11 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.10 2001/07/23 20:24:04 geoff .\" Update the copyright and the license. .\" .\" Revision 1.9 2000/07/19 23:30:12 geoff .\" Add a bugs section, and mention gzip instead of compress .\" .\" Revision 1.8 1999/01/07 01:57:39 geoff .\" Update the copyright. .\" .\" Revision 1.7 1995/11/08 05:09:25 geoff .\" Put the synopsis on one line so some versions of "makewhatis" don't .\" break. .\" .\" Revision 1.6 1994/01/25 07:12:07 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH SQ 1 LOCAL .SH NAME sq, unsq \- squeeze or unsqueeze a sorted word list .SH SYNOPSIS .B sq < infile > outfile .PP .B unsq < infile > outfile .SH DESCRIPTION .I sq compresses a sorted list of words (a dictionary). For example: .RS sort -u /usr/dict/words | sq | gzip -9 > words.sq.Z .RE will compress dict by about a factor of 5. .PP .I unsq uncompress the output of .I sq. For example: .RS gunzip < words.sq.gz | unsq | sort -f -o words .RE will uncompress a dictionary compressed with .I sq. .P The squeezing is achieved by eliminating common prefixes, and replacing them with a single character which encodes the number of characters shared with the preceding word. The prefix size is encoded as a single printable character: 0-9 represent 0-9, A-Z represent 10-35, and a-z represent 36-61. .SH BUGS .I sq and .I unsq can only handle words of up to 256 characters. The input must be sorted, and duplicates must be suppressed. .SH AUTHOR Mike Wexler .SH SEE ALSO compress(1), sort(1). ispell-3.4.00/PaxHeaders.19408/defmt.c0000644000000000000000000000013212465775264014115 xustar0030 mtime=1423440564.488480336 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/defmt.c0000444003214100001440000012045212465775264015166 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: defmt.c,v 1.64 2015-02-08 16:09:24-08 geoff Exp $"; #endif /* * defmt.c - Handle formatter constructs, mostly by scanning over them. * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright (c), 1983, by Pace Willisson * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The TeX code is originally by Greg Schaffer, with many improvements from * Ken Stevens. The nroff code is primarily from Pace Willisson, although * other people have improved it. */ /* * $Log: defmt.c,v $ * Revision 1.64 2015-02-08 16:09:24-08 geoff * When skipping curly-braced environment arguments, allow nested curlies. * * Revision 1.63 2015-02-08 01:28:09-08 geoff * Keep track of how many dollar signs were used to enter math mode, so * that we only parse the same number on exit. * * Revision 1.62 2005-04-20 16:16:32-07 geoff * Use inpossibilities to deal with the case where uppercase SS in German * causes ambiguities. * * Revision 1.61 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.60 2001/11/28 22:39:26 geoff * Add Ken Stevens's fix for newlines in \verb * * Revision 1.59 2001/09/06 00:30:29 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.58 2001/08/01 22:15:56 geoff * When processing quoted strings inside HTML tags, don't handle * ampersand sequences unless the quoted string is being spell-checked. * That way, ampersands inside HREF links won't confuse the deformatter, * but ampersand sequence inside ALT= tags will be handled correctly. * Also, when skipping ampersand sequences inside quoted strings, give up * the search for the semicolon if the closing quote is hit. This change * makes us a bit more robust in the fact of HTML syntax errors. * * Revision 1.57 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.56 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.55 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned compiler warnings. * * Revision 1.54 2000/08/22 00:11:25 geoff * Add support for correct_verbose_mode. * * Revision 1.53 1999/11/04 08:16:54 geoff * Add a few more special TeX sequences * * Revision 1.52 1999/01/18 03:28:27 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.51 1999/01/07 01:57:53 geoff * Update the copyright. * * Revision 1.50 1999/01/03 01:46:28 geoff * Add support for external deformatters. * * Revision 1.49 1998/07/07 02:30:53 geoff * Implement the plus notation for adding to keyword lists * * Revision 1.48 1998/07/06 06:55:13 geoff * Generalize the HTML tag routines to be handy keyword lookup routines, * and fix some (but by no means all) of the TeX deformatting to take * advantage of these routines to allow a bit more flexibility in * processing private TeX commands. * * Revision 1.47 1998/07/06 05:34:10 geoff * Add a few more TeX commands * * Revision 1.46 1997/12/01 00:53:47 geoff * Add HTML support. Fix the "\ " bug again, this time (hopefully) right. * * Revision 1.45 1995/11/08 05:09:29 geoff * Add the new interactive mode ("askverbose"). * * Revision 1.44 1995/11/08 04:32:51 geoff * Modify the HTML support to be stylistically more consistent and to * interoperate more cleanly with the nroff and TeX modes. * * Revision 1.43 1995/10/25 04:05:31 geoff * html-mode code added by Gerry Tierney 14th of * Oct '95. * * Revision 1.42 1995/10/25 03:35:42 geoff * After skipping over a backslash sequence, make sure that we don't skip * over the first character of the following word. Also, support the * verbatim environment of LaTex. * * Revision 1.41 1995/08/05 23:19:47 geoff * Get rid of an obsolete comment. Add recognition of documentclass and * usepackage for Latex2e support. * * Revision 1.40 1995/03/06 02:42:43 geoff * Change TeX backslash processing so that it only assumes alpha * characters and the commonly-used "@" character are part of macro * names, and so that any other backslashed character (specifically * dollar signs) is skipped. * * Revision 1.39 1995/01/08 23:23:54 geoff * Fix typos in a couple of comments. * * Revision 1.38 1995/01/03 19:24:14 geoff * Add code to handle the LaTeX \verb command. * * Revision 1.37 1994/12/27 23:08:54 geoff * Fix a bug in TeX backslash processing that caused ispell to become * confused when it encountered an optional argument to a * double-backslash command. Be a little smarter about scanning for * curly-brace matches, so that we avoid missing a math-mode transition * during the scan. * * Revision 1.36 1994/10/25 05:46:34 geoff * Recognize a few more Latex commands: pagestyle, pagenumbering, * setcounter, addtocounter, setlength, addtolength, settowidth. * * Revision 1.35 1994/10/18 04:03:19 geoff * Add code to skip hex numbers if they're preceded by '0x'. * * Revision 1.34 1994/10/04 03:51:24 geoff * Modify the parsing so that TeX commands are ignored even within * comments, but do not affect the overall parsing state. (This is * slightly imperfect, in that some types of modality are ignored when * comments are entered. But it should solve nearly all the problems * with commented-out TeX commands.) This also fixes a couple of minor * bugs with TeX deformatting. * * Revision 1.33 1994/10/03 17:06:07 geoff * Remember to use contextoffset when reporting complete misses * * Revision 1.32 1994/08/31 05:58:41 geoff * Report the offset-within-line correctly in -a mode even if the line is * longer than BUFSIZ characters. * * Revision 1.31 1994/05/25 04:29:28 geoff * If two boundary characters appear in a row, consider it the end of the * word. * * Revision 1.30 1994/05/17 06:44:08 geoff * Add the new argument to all calls to good and compoundgood. * * Revision 1.29 1994/03/16 06:30:41 geoff * Don't lose track of math mode when an array environment is embedded. * * Revision 1.28 1994/03/15 05:31:57 geoff * Add TeX_strncmp, which allows us to handle AMS-TeX constructs like * \endroster without getting confused. * * Revision 1.27 1994/02/14 00:34:53 geoff * Pass length arguments to correct(). * * Revision 1.26 1994/01/25 07:11:25 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" static unsigned char * skiptoword P ((unsigned char * bufp)); unsigned char * skipoverword P ((unsigned char * bufp)); void checkline P ((FILE * ofile)); static int TeX_math_end P ((unsigned char ** bufp)); static int TeX_math_begin P ((unsigned char ** bufp)); static int TeX_LR_begin P ((unsigned char ** bufp)); static int TeX_LR_check P ((int begin_p, unsigned char ** bufp)); static void TeX_skip_args P ((unsigned char ** bufp)); static int TeX_math_check P ((int cont_char, unsigned char ** bufp)); static void TeX_skip_parens P ((unsigned char ** bufp)); static void TeX_open_paren P ((unsigned char ** bufp)); static void TeX_skip_check P ((unsigned char ** bufp)); static int TeX_strncmp P ((unsigned char * a, char * b, int n)); int init_keyword_table P ((char * rawtags, char * envvar, char * deftags, int ignorecase, struct kwtable * keywords)); static int keyword_in_list P ((unsigned char * string, unsigned char * stringend, struct kwtable * keywords)); static int tagcmp P ((unsigned char ** a, unsigned char ** b)); #define ISTEXTERM(c) (((c) == TEXLEFTCURLY) || \ ((c) == TEXRIGHTCURLY) || \ ((c) == TEXLEFTSQUARE) || \ ((c) == TEXRIGHTSQUARE)) #define ISMATHCH(c) (((c) == TEXBACKSLASH) || \ ((c) == TEXDOLLAR) || \ ((c) == TEXPERCENT)) static int TeX_comment = 0; /* * The following variables are used to save the parsing state when * processing comments. This allows comments to be parsed without * affecting the overall nesting. */ static int save_math_mode; static char save_LaTeX_Mode; /* * The following variable indicates whether math mode was entered with * a single or double dollar sign. Each time math mode is entered * with dollar signs, it is shifted left by one bit, and it is shifted * right on math exit. If the low-order bit is a 1, math mode was * entered with a double dollar; otherwise it was entered with a * single dollar. Note that this is a kludge that breaks on illegal * syntax. */ static unsigned int math_mode_dollars = 0; /* * The following variables are used by the deformatter to keep * track of keywords that may indicate text to be ignored. */ static unsigned char * keywordbuf; /* Scratch buffer for keyword comparison */ static unsigned int maxkeywordlen; /* Length of longest keyword */ static unsigned char * skiptoword (bufp) /* Skip to beginning of a word */ unsigned char * bufp; { unsigned char * htmltagstart; /* Beginning of an HTML tag */ unsigned char * htmlsubfield = bufp; /* Ptr to start of subfield name */ while (*bufp && ((!isstringch (bufp, 0) && !iswordch (chartoichar (*bufp))) || isboundarych (chartoichar (*bufp)) || (tflag == DEFORMAT_TEX && ((math_mode & 1) || LaTeX_Mode != 'P')) || (insidehtml & (HTML_IN_SPEC | HTML_ISIGNORED)) != 0 || ((insidehtml & HTML_IN_TAG) != 0 && (insidehtml & (HTML_IN_QUOTE | HTML_CHECKING_QUOTE)) != (HTML_IN_QUOTE | HTML_CHECKING_QUOTE)) ) ) { /* * HTML deformatting */ if (tflag == DEFORMAT_SGML) { if ((insidehtml & HTML_IN_TAG) != 0 && *bufp == HTMLQUOTE) { if (insidehtml & HTML_IN_QUOTE) insidehtml &= ~(HTML_IN_QUOTE | HTML_CHECKING_QUOTE); else insidehtml |= HTML_IN_QUOTE; htmlsubfield = NULL; } else if ((insidehtml & (HTML_IN_TAG | HTML_IN_QUOTE)) == HTML_IN_TAG && *bufp == HTMLTAGEND) insidehtml &= ~(HTML_IN_TAG | HTML_IN_ENDTAG | HTML_CHECKING_QUOTE); /* * If we are checking an HTML file, we want to ignore any HTML * tags. These should start with a '<' and end with a '>', so * we simply skip over anything between these two symbols. If * we reach the end of the line before finding a matching '>', * we set 'insidehtml' appropriately. */ else if ((insidehtml & HTML_IN_TAG) == 0 && *bufp == HTMLTAGSTART) { insidehtml |= HTML_IN_TAG; bufp++; if (*bufp == HTMLSLASH) { bufp++; insidehtml |= HTML_IN_ENDTAG; } htmltagstart = bufp; /* * We found the start of an HTML tag. Skip to the end * of the tag. We assume that all tags are made up of * purely alphabetic characters. */ while (isalpha (*bufp)) bufp++; /* * Check to see if this is an ignored tag, and set * HTML_IGNORE properly. */ if (keyword_in_list (htmltagstart, bufp, &htmlignorelist)) { /* * Note that we use +/- here, rather than Boolean * operators. This is quite deliberate, because * it allows us to properly handle nested HTML * constructs that are supposed to be ignored. */ if (insidehtml & HTML_IN_ENDTAG) insidehtml -= HTML_IGNORE; else insidehtml += HTML_IGNORE; } htmlsubfield = NULL; if (bufp > htmltagstart) bufp--; } else if ((insidehtml & (HTML_IN_TAG | HTML_IN_QUOTE)) == HTML_IN_TAG) { if (htmlsubfield == NULL && isalpha (*bufp)) htmlsubfield = bufp; else if (htmlsubfield != NULL && !isalpha (*bufp)) { if (bufp != htmlsubfield && keyword_in_list (htmlsubfield, bufp, &htmlchecklist)) insidehtml |= HTML_CHECKING_QUOTE; htmlsubfield = NULL; } } /* * Skip over quoted entities such as """. These all * start with an ampersand and end with a semi-colon. We * do not need to worry about them extending over more * than one line. We also don't need to worry about them * being string characters, because the isstringch() test * above would have already broken us out of the enclosing * loop in that case. * * A complication is that quoted entities are only * interpreted in some quoted strings. For example, * they're valid in ALT= tags but not in HREF tags, where * ampersands have an entirely different meaning. We deal * with the problem by only interpreting HTMLSPECSTART if * we are checking the quoted string. */ else if ((insidehtml & HTML_IN_SPEC) != 0 || (*bufp == HTMLSPECSTART && ((insidehtml & HTML_CHECKING_QUOTE) || (insidehtml & HTML_IN_QUOTE) == 0))) { while (*bufp != HTMLSPECEND && *bufp != '\0') { if ((insidehtml & HTML_IN_QUOTE) && *bufp == HTMLQUOTE) { /* * The quoted string ended before the * ampersand sequence finished. The HTML is * probably incorrect, but it would be a * mistake to keep skipping until we reach the * next random semicolon. Instead, just stop * skipping right here. */ insidehtml &= ~(HTML_IN_QUOTE | HTML_CHECKING_QUOTE); break; } bufp++; } if (*bufp == '\0') insidehtml |= HTML_IN_SPEC; else insidehtml &= ~HTML_IN_SPEC; } } else if (tflag == DEFORMAT_TEX) /* TeX or LaTeX stuff */ { /* Odd numbers mean we are in "math mode" */ /* Even numbers mean we are in LR or */ /* paragraph mode */ if (*bufp == TEXPERCENT && LaTeX_Mode != 'v') { if (!TeX_comment) { save_math_mode = math_mode; save_LaTeX_Mode = LaTeX_Mode; math_mode = 0; LaTeX_Mode = 'P'; TeX_comment = 1; } } else if (math_mode & 1) { if ((LaTeX_Mode == 'e' && TeX_math_check('e', &bufp)) || (LaTeX_Mode == 'm' && TeX_LR_check(1, &bufp))) math_mode--; /* end math mode */ else { while (*bufp && !ISMATHCH(*bufp)) bufp++; if (*bufp == 0) break; if (TeX_math_end(&bufp)) math_mode--; } if (math_mode < 0) { (void) fprintf (stderr, DEFMT_C_TEX_MATH_ERROR, MAYBE_CR (stderr)); math_mode = 0; } } else { if (math_mode > 1 && *bufp == TEXRIGHTCURLY && (math_mode < (math_mode & 127) * 128)) math_mode--; /* re-enter math */ else if (LaTeX_Mode == 'm' || (math_mode && (math_mode >= (math_mode & 127) * 128) && (TeX_strncmp(bufp, "\\end", 4) == 0))) { if (TeX_LR_check(0, &bufp)) math_mode--; } else if (LaTeX_Mode == 'b' && TeX_math_check('b', &bufp)) { /* continued begin */ math_mode++; } else if (LaTeX_Mode == 'r') { /* continued "reference" */ TeX_skip_parens(&bufp); LaTeX_Mode = 'P'; } else if (LaTeX_Mode == 'v') { /* continued "verb" */ while (*bufp != save_LaTeX_Mode && *bufp != '\0') bufp++; if (*bufp != 0) LaTeX_Mode = 'P'; } else if (TeX_math_begin(&bufp)) /* checks references and */ /* skips \ commands */ math_mode++; } if (*bufp == 0) break; } else if (tflag == DEFORMAT_NROFF) /* nroff deformatting */ { if (*bufp == NRBACKSLASH) { switch ( bufp[1] ) { case 'f': if(bufp[2] == NRLEFTPAREN) { /* font change: \f(XY */ bufp += 5; } else { /* ) */ /* font change: \fX */ bufp += 3; } continue; case 's': /* size change */ bufp += 2; if (*bufp == '+' || *bufp == '-') bufp++; /* This looks wierd 'cause we ** assume *bufp is now a digit. */ bufp++; if (isdigit (*bufp)) bufp++; continue; default: if (bufp[1] == NRLEFTPAREN) { /* extended char set */ /* escape: \(XX */ /* ) */ bufp += 4; continue; } else if (bufp[1] == NRSTAR) { if (bufp[2] == NRLEFTPAREN) bufp += 5; else bufp += 3; continue; } break; } } } /* * Skip hex numbers, but not if we're in non-terse askmode. * (In that case, we'd lose sync if we skipped hex.) */ if (*bufp == '0' && (bufp[1] == 'x' || bufp[1] == 'X') && (terse || !aflag)) { bufp += 2; while (isxdigit (*bufp)) bufp++; } else bufp++; } if (*bufp == '\0') { if (TeX_comment) { math_mode = save_math_mode; LaTeX_Mode = save_LaTeX_Mode; TeX_comment = 0; } } return bufp; } unsigned char * skipoverword (bufp) /* Return pointer to end of a word */ register unsigned char * bufp; /* Start of word -- MUST BE A REAL START */ { register unsigned char * lastboundary; register int scharlen; /* Length of a string character */ lastboundary = NULL; for ( ; ; ) { if (*bufp == '\0') { if (TeX_comment) { math_mode = save_math_mode; LaTeX_Mode = save_LaTeX_Mode; TeX_comment = 0; } break; } else if (l_isstringch(bufp, scharlen, 0)) { bufp += scharlen; lastboundary = NULL; } /* ** Note that we get here if a character satisfies ** isstringstart() but isn't in the string table; this ** allows string characters to start with word characters. */ else if (iswordch (chartoichar (*bufp))) { bufp++; lastboundary = NULL; } else if (isboundarych (chartoichar (*bufp))) { if (lastboundary == NULL) lastboundary = bufp; else if (lastboundary == bufp - 1) break; /* Double boundary -- end of word */ bufp++; } else break; /* End of the word */ } /* ** If the word ended in one or more boundary characters, ** the address of the first of these is in lastboundary, and it ** is the end of the word. Otherwise, bufp is the end. */ return (lastboundary != NULL) ? lastboundary : bufp; } void checkline (ofile) FILE * ofile; { register unsigned char * p; register unsigned char * endp; int hadlf; register int len; register int i; int ilen; currentchar = filteredbuf; len = strlen ((char *) filteredbuf) - 1; hadlf = filteredbuf[len] == '\n'; if (hadlf) { filteredbuf[len] = '\0'; contextbufs[0][len] = '\0'; } if (tflag == DEFORMAT_NROFF) { /* skip over .if */ if (*currentchar == NRDOT && (strncmp ((char *) currentchar + 1, "if t", 4) == 0 || strncmp ((char *) currentchar + 1, "if n", 4) == 0)) { copyout (¤tchar,5); while (*currentchar && myspace (chartoichar (*currentchar))) copyout (¤tchar, 1); } /* skip over .ds XX or .nr XX */ if (*currentchar == NRDOT && (strncmp ((char *) currentchar + 1, "ds ", 3) == 0 || strncmp ((char *) currentchar + 1, "de ", 3) == 0 || strncmp ((char *) currentchar + 1, "nr ", 3) == 0)) { copyout (¤tchar, 4); while (*currentchar && myspace (chartoichar (*currentchar))) copyout(¤tchar, 1); while (*currentchar && !myspace (chartoichar (*currentchar))) copyout(¤tchar, 1); if (*currentchar == 0) { if (!lflag && hadlf) (void) putc ('\n', ofile); return; } } } /* if this is a formatter command, skip over it */ if (tflag == DEFORMAT_NROFF && *currentchar == NRDOT) { while (*currentchar && !myspace (chartoichar (*currentchar))) { if (!aflag && !lflag) (void) putc (*currentchar, ofile); currentchar++; } if (*currentchar == 0) { if (!lflag && hadlf) (void) putc ('\n', ofile); return; } } for ( ; ; ) { p = skiptoword (currentchar); if (p != currentchar) copyout (¤tchar, p - currentchar); if (*currentchar == 0) break; p = ctoken; endp = skipoverword (currentchar); while (currentchar < endp && p < ctoken + sizeof ctoken - 1) *p++ = *currentchar++; *p = 0; if (strtoichar (itoken, ctoken, INPUTWORDLEN * sizeof (ichar_t), 0)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) ctoken)); ilen = icharlen (itoken); if (lflag) { if (ilen > minword && !good (itoken, 0, 0, 0, 0) && !cflag && !compoundgood (itoken, 0)) (void) fprintf (ofile, "%s\n", (char *) ctoken); } else { if (aflag) { if (ilen <= minword) { /* matched because of minword */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } continue; } if (good (itoken, 0, 0, 0, 0)) { if (hits[0].prefix == NULL && hits[0].suffix == NULL) { /* perfect match */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } } else if (!terse) { /* matched because of root */ if (askverbose) (void) fprintf (ofile, "ok (derives from root %s)\n", (char *) hits[0].dictent->word); else { if (correct_verbose_mode) (void) fprintf (ofile, "+ %s %s\n", ctoken, hits[0].dictent->word); else (void) fprintf (ofile, "+ %s\n", hits[0].dictent->word); } } } else if (compoundgood (itoken, 0)) { /* compound-word match */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok (compound word)\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "- %s\n", ctoken); else (void) fprintf (ofile, "-\n"); } } } else { makepossibilities (itoken); if (inpossibilities (ctoken)) /* Kludge for German, etc. */ { /* might not be perfect match, but we'll lie */ if (!terse) { if (askverbose) (void) fprintf (ofile, "ok\n"); else { if (correct_verbose_mode) (void) fprintf (ofile, "* %s\n", ctoken ); else (void) fprintf (ofile, "*\n"); } } } else if (pcount) { /* ** print & or ?, ctoken, then ** character offset, possibility ** count, and the possibilities. */ if (askverbose) (void) fprintf (ofile, "how about"); else (void) fprintf (ofile, "%c %s %d %d", easypossibilities ? '&' : '?', (char *) ctoken, easypossibilities, (int) ((currentchar - filteredbuf) - strlen ((char *) ctoken)) + contextoffset); for (i = 0; i < MAXPOSSIBLE; i++) { if (possibilities[i][0] == 0) break; (void) fprintf (ofile, "%c %s", i ? ',' : ':', possibilities[i]); } (void) fprintf (ofile, "\n"); } else { /* ** No possibilities found for word TOKEN */ if (askverbose) (void) fprintf (ofile, "not found\n"); else (void) fprintf (ofile, "# %s %d\n", (char *) ctoken, (int) ((currentchar - filteredbuf) - strlen ((char *) ctoken)) + contextoffset); } } } else { if (!quit) correct (ctoken, sizeof ctoken, itoken, sizeof itoken, ¤tchar); } } if (!aflag && !lflag) (void) fprintf (ofile, "%s", (char *) ctoken); } if (!lflag && hadlf) (void) putc ('\n', ofile); } /* must check for \begin{mbox} or whatever makes new text region. */ static int TeX_math_end (bufp) unsigned char ** bufp; { if (**bufp == TEXDOLLAR) { if ((*bufp)[1] == TEXDOLLAR && (math_mode_dollars & 1) != 0) (*bufp)++; math_mode_dollars >>= 1; return 1; } else if (**bufp == TEXPERCENT) { if (!TeX_comment) { save_math_mode = math_mode; save_LaTeX_Mode = LaTeX_Mode; math_mode = 0; LaTeX_Mode = 'P'; TeX_comment = 1; } return 0; } /* processing extended TeX command */ (*bufp)++; if (**bufp == TEXRIGHTPAREN || **bufp == TEXRIGHTSQUARE) return 1; if (TeX_LR_begin (bufp)) /* check for switch back to LR mode */ return 1; if (TeX_strncmp (*bufp, "end", 3) == 0) /* find environment that is ending */ return TeX_math_check ('e', bufp); else return 0; } static int TeX_math_begin (bufp) unsigned char ** bufp; { int didskip = 0; if (**bufp == TEXDOLLAR) { math_mode_dollars <<= 1; if ((*bufp)[1] == TEXDOLLAR) { math_mode_dollars |= 1; (*bufp)++; } return 1; } while (**bufp == TEXBACKSLASH) { didskip = 1; (*bufp)++; /* check for null char here? */ if (**bufp == TEXLEFTPAREN || **bufp == TEXLEFTSQUARE) return 1; else if (!isalpha(**bufp) && **bufp != '@') { (*bufp)++; continue; } else if (TeX_strncmp (*bufp, "begin", 5) == 0) { if (TeX_math_check ('b', bufp)) return 1; else (*bufp)--; } else { TeX_skip_check (bufp); return 0; } } /* * Ignore references for the tib (1) bibliography system, that * is, text between a ``[.'' or ``<.'' and ``.]'' or ``.>''. * We don't care whether they match, tib doesn't care either. * * A limitation is that the entire tib reference must be on one * line, or we break down and check the remainder anyway. */ if ((**bufp == TEXLEFTSQUARE || **bufp == TEXLEFTANGLE) && (*bufp)[1] == TEXDOT) { (*bufp)++; while (**bufp) { if (*(*bufp)++ == TEXDOT && (**bufp == TEXRIGHTSQUARE || **bufp == TEXRIGHTANGLE)) return TeX_math_begin (bufp); } return 0; } else if (didskip) { /* * If we've skipped over anything, it's possible that we are * pointing at an important character. If so, we need to back up * one byte, because our caller will increment bufp. Yes, * this is a kludge. This whole TeX deformatter is a mess. */ (*bufp)--; } return 0; } static int TeX_LR_begin (bufp) unsigned char ** bufp; { if ((TeX_strncmp (*bufp, "mbox", 4) == 0) || (TeX_strncmp (*bufp, "makebox", 7) == 0) || (TeX_strncmp (*bufp, "text", 4) == 0) || (TeX_strncmp (*bufp, "intertext", 9) == 0) || (TeX_strncmp (*bufp, "fbox", 4) == 0) || (TeX_strncmp (*bufp, "framebox", 8) == 0)) math_mode += 2; else if ((TeX_strncmp (*bufp, "parbox", 6) == 0) || (TeX_strncmp (*bufp, "raisebox", 8) == 0)) { math_mode += 2; TeX_open_paren (bufp); if (**bufp) (*bufp)++; else LaTeX_Mode = 'r'; /* same as reference -- skip {} */ } else if (TeX_strncmp (*bufp, "begin", 5) == 0) return TeX_LR_check (1, bufp); /* minipage */ else return 0; /* skip tex command name and optional or width arguments. */ TeX_open_paren (bufp); return 1; } static int TeX_LR_check (begin_p, bufp) int begin_p; unsigned char ** bufp; { TeX_open_paren (bufp); if (**bufp == 0) /* { */ { LaTeX_Mode = 'm'; return 0; /* remain in math mode until '}' encountered. */ } else LaTeX_Mode = 'P'; if (strncmp ((char *) ++(*bufp), "minipage", 8) == 0) { TeX_skip_parens (bufp); if (**bufp) (*bufp)++; if (begin_p) { TeX_skip_parens (bufp); /* now skip opt. args if on this line. */ math_mode += 2; /* indicate minipage mode. */ math_mode += ((math_mode & 127) - 1) * 128; } else { math_mode -= (math_mode & 127) * 128; if (math_mode < 0) { (void) fprintf (stderr, DEFMT_C_LR_MATH_ERROR, MAYBE_CR (stderr)); math_mode = 1; } } return 1; } (*bufp)--; return 0; } /* Skips the begin{ARG}, and optionally up to two {PARAM}{PARAM}'s to * the begin if they are required. However, Only skips if on this line. */ static void TeX_skip_args (bufp) unsigned char ** bufp; { register int skip_cnt = 0; /* Max of 2. */ if (strncmp((char *) *bufp, "tabular", 7) == 0 || strncmp((char *) *bufp, "minipage", 8) == 0) skip_cnt++; if (strncmp((char *) *bufp, "tabular*", 8) == 0) skip_cnt++; TeX_skip_parens (bufp); /* Skip to the end of the \begin{} parens */ if (**bufp) (*bufp)++; else return; if (skip_cnt--) TeX_skip_parens (bufp); /* skip 1st {PARAM}. */ else return; if (**bufp) (*bufp)++; else return; if (skip_cnt) TeX_skip_parens (bufp); /* skip to end of 2nd {PARAM}. */ } static int TeX_math_check (cont_char, bufp) int cont_char; unsigned char ** bufp; { TeX_open_paren (bufp); /* Check for end of line, continue later. */ if (**bufp == 0) { LaTeX_Mode = (char) cont_char; return 0; } else LaTeX_Mode = 'P'; if (strncmp ((char *) ++(*bufp), "equation", 8) == 0 || strncmp ((char *) *bufp, "eqnarray", 8) == 0 || strncmp ((char *) *bufp, "displaymath", 11) == 0 || strncmp ((char *) *bufp, "picture", 7) == 0 || strncmp ((char *) *bufp, "gather", 6) == 0 || strncmp ((char *) *bufp, "align", 5) == 0 || strncmp ((char *) *bufp, "multline", 8) == 0 || strncmp ((char *) *bufp, "flalign", 7) == 0 || strncmp ((char *) *bufp, "alignat", 7) == 0 #ifdef IGNOREBIB || strncmp ((char *) *bufp, "thebibliography", 15) == 0 #endif || strncmp ((char *) *bufp, "verbatim", 8) == 0 || strncmp ((char *) *bufp, "math", 4) == 0) { (*bufp)--; TeX_skip_parens (bufp); return 1; } if (cont_char == 'b') TeX_skip_args (bufp); else TeX_skip_parens (bufp); return 0; } static void TeX_skip_parens (bufp) unsigned char ** bufp; { int nesting = 0; while (**bufp) { if (**bufp == '\\' && (*bufp)[1] != '\0') (*bufp)++; else if (**bufp == TEXLEFTCURLY) nesting++; else if (**bufp == TEXRIGHTCURLY) { --nesting; if (nesting <= 0) return; } (*bufp)++; } } static void TeX_open_paren (bufp) unsigned char ** bufp; { while (**bufp && **bufp != TEXLEFTCURLY && **bufp != TEXDOLLAR) { if (**bufp == '\\' && (*bufp)[1] != '\0') (*bufp)++; (*bufp)++; } } static void TeX_skip_check (bufp) unsigned char ** bufp; { unsigned char * endp; int skip_ch; for (endp = *bufp; isalpha(*endp) || *endp == '@'; endp++) ; if (keyword_in_list (*bufp, endp, &texskip1list)) { TeX_skip_parens (bufp); if (**bufp == 0) LaTeX_Mode = 'r'; } else if (keyword_in_list (*bufp, endp, &texskip2list)) /* skip two args. */ { TeX_skip_parens (bufp); if (**bufp == 0) /* Only skips one {} if not on same line. */ LaTeX_Mode = 'r'; else /* Skip second arg. */ { (*bufp)++; TeX_skip_parens (bufp); if (**bufp == 0) LaTeX_Mode = 'r'; } } else if (TeX_strncmp (*bufp, "verb", 4) == 0) { skip_ch = (*bufp)[4]; *bufp += 5; while (**bufp != skip_ch && **bufp != '\0') (*bufp)++; /* skip to end of verb field when not in a comment or math field */ if (**bufp == 0 && !TeX_comment && !(math_mode & 1)) { LaTeX_Mode = 'v'; save_LaTeX_Mode = skip_ch; } } else { /* Optional tex arguments sometimes should and ** sometimes shouldn't be checked ** (eg \section [C Programming] {foo} vs ** \rule [3em] {0.015in} {5em}) ** SO -- we'll always spell-check it rather than make a ** full LaTeX parser. */ /* Must look at the space after the command. */ while (isalpha(**bufp) || **bufp == '@') (*bufp)++; /* ** Our caller expects to skip over a single character. So we ** need to back up by one. Ugh. */ (*bufp)--; } } /* * TeX_strncmp is like strncmp, except that it returns inequality if * the following character of a is alphabetic. We do not use * iswordch here because TeX itself won't normally accept * nonalphabetics (except maybe on ISO Latin-1 installations? I'll * have to look into that). As a special hack, because LaTeX uses the * @ sign so much, we'll also accept that character. * * Properly speaking, the @ sign should be settable in the hash file * header, but I doubt that it varies, and I don't want to change the * syntax of affix files right now. * * Incidentally, TeX_strncmp uses unequal signedness for its arguments * because that's how it's always called, and it's easier to do one * typecast here than lots of casts in the calls. */ static int TeX_strncmp (a, b, n) unsigned char * a; /* Strings to compare */ char * b; /* ... */ int n; /* Number of characters to compare */ { int cmpresult; /* Result of calling strncmp */ cmpresult = strncmp ((char *) a, b, n); if (cmpresult == 0) { if (isascii (a[n]) && isalpha (a[n])) return 1; /* Force inequality if alpha follows */ } return cmpresult; } /* * Set up a table of keywords to be treated specially. The input is * "rawtags", which is a comma-separated list of keywords to be * inserted into the table. If rawtags is null, the environment * variable "envvar" is consulted; if this isn't set, the list in * "deftags" is used instead. * * If either rawtags or the contents of envvar begins with a + sign, * then this value is appended to the string in deftags, rather than * replacing it. This effect is cumulative. Thus, there are the * following possibilities: * * rawtags envvar deftags result * xxx * * xxx * +xxx yyy * xxx,yyy * +xxx +yyy zzz xxx,yyy,zzz * null yyy * yyy * null +yyy zzz yyy,zzz * null null zzz zzz * * The result of this routine is the initialization of a "struct * kwtable" that can be passed to keyword_in_list for lookup purposes. * Before the first time this routine is called, the "kwlist" pointer * in the struct kwtable must be set to NULL, to indicate that the * structure is uninitialized. * * Returns nonzero if the list has already been initialized, zero if * all is well. */ int init_keyword_table (rawtags, envvar, deftags, ignorecase, keywords) char * rawtags; /* Comma-separated list of tags to look up */ char * envvar; /* Environment variable containing tag list */ char * deftags; /* Default tag list */ int ignorecase; /* NZ to ignore case in keyword matching */ struct kwtable * keywords; /* Where to put the keyword table */ { char * end; /* End of current tag */ char * envtags; /* Tags from envvar */ unsigned char ** nextkw; /* Next keyword-table entry */ char * start; /* Start of current tag */ char * wlist; /* Modifiable copy of raw list */ unsigned int wsize; /* Size of wlist */ if (keywords->kwlist != NULL) return 1; envtags = (envvar == NULL) ? NULL : getenv (envvar); if (rawtags != NULL && rawtags[0] != '+') { envtags = NULL; deftags = NULL; } if (envtags != NULL && envtags[0] != '+') deftags = NULL; /* * Allocate space for the modifiable tag list. This may * over-allocate by up to 2 bytes if the "+" notation is used. */ wsize = 0; if (rawtags != NULL) wsize += strlen (rawtags) + 1; if (envtags != NULL) wsize += strlen (envtags) + 1; if (deftags != NULL) wsize += strlen (deftags) + 1; wlist = malloc (wsize); if (wlist == NULL) { (void) fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } wlist[0] = '\0'; if (rawtags != NULL) { if (rawtags[0] == '+') rawtags++; strcpy (wlist, rawtags); } if (envtags != NULL) { if (envtags[0] == '+') envtags++; if (wlist[0] != '\0') strcat (wlist, ","); strcat (wlist, envtags); } if (deftags != NULL) { if (wlist[0] != '\0') strcat (wlist, ","); strcat (wlist, deftags); } /* * Count the keywords and allocate space for the pointers. */ keywords->numkw = 1; keywords->forceupper = ignorecase; for (end = wlist; *end != '\0'; ++end) { if (*end == ',' || *end == ':') ++keywords->numkw; } keywords->kwlist = (unsigned char **) malloc (keywords->numkw * sizeof keywords->kwlist[0]); if (keywords->kwlist == NULL) { fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit (1); } end = wlist; nextkw = keywords->kwlist; keywords->maxlen = 0; keywords->minlen = 0; while (nextkw < keywords->kwlist + keywords->numkw) { for (start = end; *end != '\0' && *end != ',' && *end != ':'; end++) ; *end = '\0'; if (ignorecase) chupcase ((unsigned char *) start); if (end == start) --keywords->numkw; else { *nextkw++ = (unsigned char *) start; if ((unsigned) (end - start) > keywords->maxlen) keywords->maxlen = end - start; if (keywords->minlen == 0 || (unsigned) (end - start) < keywords->minlen) keywords->minlen = end - start; } end++; } qsort ((char *) keywords->kwlist, keywords->numkw, sizeof keywords->kwlist[0], (int (*) P ((const void *, const void *))) tagcmp); if (keywords->maxlen > maxkeywordlen) { maxkeywordlen = keywords->maxlen; if (keywordbuf != NULL) free (keywordbuf); keywordbuf = (unsigned char *) malloc ((maxkeywordlen + 1) * sizeof keywordbuf[0]); if (keywordbuf == NULL) { fprintf (stderr, DEFMT_C_NO_SPACE, MAYBE_CR (stderr)); exit(1); } } return 0; } /* * Decide whether a given keyword is in a list of those that need * special treatment. The list of tags is so small that there's * little point in being fancy, but the code given to me used a binary * search and it seemed silly to throw it away. * * Returns nonzero if the keyword is in the chosen list. */ static int keyword_in_list (str, strend, keywords) unsigned char * str; /* String to be tested (not null-terminated) */ unsigned char * strend; /* Character following end of test string */ struct kwtable * keywords; /* Table of keywords to be searched */ { int cmpresult; /* Result of string comparison */ unsigned int i; /* Current binary-search position */ int imin; /* Bottom of binary search */ int imax; /* Top of binary search */ i = strend - str; if (i < keywords->minlen || i > keywords->maxlen) return 0; strncpy ((char *) keywordbuf, (char *) str, i); keywordbuf[i] = '\0'; if (keywords->forceupper) chupcase (keywordbuf); /* * Binary search through the tags list */ imin = 0; imax = keywords->numkw - 1; while (imin <= imax) { i = (imin + imax) >> 1; cmpresult = strcmp ((char *) keywordbuf, (char *) keywords->kwlist[i]); if (cmpresult == 0) return 1; else if (cmpresult > 0 ) imin = i + 1; else imax = i - 1; } return 0; /* Not a tag to be ignored */ } /* * Compare two pointed-to strings */ static int tagcmp (a, b) unsigned char ** a; /* Strings to be compared */ unsigned char ** b; /* ... */ { return strcmp ((char *) *a, (char *) *b); } ispell-3.4.00/PaxHeaders.19408/subset.X0000644000000000000000000000013212465617735014306 xustar0030 mtime=1423384541.153510949 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/subset.X0000555003214100001440000001762512465617735015371 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: subset.X,v 1.23 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Combine and resolve various dictionaries so they are proper # subsets of one another, and so that maximal use is made of # flags in the smaller ones. # # Usage: # # subset [-b base] [-l langfile] small-dict bigger-dict ... biggest-dict # # The output is a an equal number of successively-larger # dictionaries. The smallest is written to "dict.0". Successive # files are named "dict.1", "dict.2", and so forth, and each contains # a list of words which should be added to the previous files to # generate a dictionary. Words which are in smaller dictionaries are # effectively propagated to the larger ones, so that the smaller ones # are proper subsets of their siblings. If dictionaries are # completely disjoint, this may result in an empty output dictionary. # Affix flags are propagated to the smallest dictionary containing # the root word; this expands the effectiveness of small dictionaries # at no cost in hash table space. # # The -b switch is used to specify a different base name for the # output files than "dict". (In other words, "-b english" would # produce output in english.0, english.1, etc.). # # If the -l switch is specified, the language tables are gotten # from the specified file; otherwise they come from $LIBDIR/!!DEFLANG!!. # # Input dictionaries should be "clean"; if non-word characters # appear in the dictionaries, the script may produce incorrect output. # # $Log: subset.X,v $ # Revision 1.23 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. Fix a sorting # bug that caused join to complain. # # Revision 1.22 2005/04/27 01:18:35 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.21 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Fix a place where the affix table # wasn't passed to munchlist. # # Revision 1.19 2001/09/06 00:30:29 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.18 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.17 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.16 1999/01/07 01:57:42 geoff # Update the copyright. # # Revision 1.15 1995/01/08 23:23:47 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.14 1994/01/25 07:12:10 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/ssetXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/sset$$" || (echo "Can't create temp directory: ${TDIR}/sset$$" 1>&2; exit 1); TEMPDIR="$TDIR/sset$$") TMP=${TEMPDIR}/sset. SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE="Usage: subset [-b base] [-l langfile] dict-0 dict-1 ..." langtabs=${LIBDIR}/!!DEFLANG!! outbase=dict while : do case "$1" in -b) outbase="$2" shift; shift ;; -l) langtabs="$2" shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done if [ $# -lt 2 ] then echo "$USAGE" 1>&2 exit 1 fi # Temp files MUNCHOUTPUT=${TMP}a MISSINGWORDS=${TMP}b TEMPDICT=${TMP}c FAKEDICT=${TMP}d FAKEHASH=${TMP}e!!HASHSUFFIX!! trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # Create a dummy dictionary to hold a compiled copy of the language # tables. # echo 'QQQQQQQQ' > $FAKEDICT buildhash -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $TEMPDIR; exit 1) \ || exit 1 rm -f ${FAKEDICT}* # # Figure out what the flag-marking character is. # flagmarker=`ispell -D -d $FAKEHASH \ | sed -n -e '/^flagmarker/s/flagmarker //p'` case "$flagmarker" in \\*) flagmarker=`expr "$flagmarker" : '.\(.\)'` ;; esac # # (1) Use munchlist to create a list of roots and maximal suffixes. # munchlist -l $langtabs "$@" | sort -t/ +0 -1 $SORTTMP > $MUNCHOUTPUT # # (2) Use join to add the maximal suffixes to each dictionary's roots. # Re-expand this, combine with the original, and save for later. # newline=' ' dictno=0 for dictfile do ispell -e -d $FAKEHASH < $dictfile | tr ' ' "$newline" \ | sort -t/ +0 -1 -u $SORTTMP | join "-t$flagmarker" -a1 - $MUNCHOUTPUT \ | ispell -e -d $FAKEHASH | tr ' ' "$newline" \ | sort -u $SORTTMP > ${TEMPDICT}.$dictno dictno=`expr $dictno + 1` done rm -f $MUNCHOUTPUT # # (3) For each adjacent pair of dictionaries, use comm to find words # in the smaller that are missing from the larger, and add them # to the larger. # firstdict="$1" shift lastdict="${TEMPDICT}.0" dictno=1 for dictfile do comm -23 $lastdict ${TEMPDICT}.$dictno > $MISSINGWORDS.$dictno if [ -s $MISSINGWORDS.$dictno ] then sort $SORTTMP -o ${TEMPDICT}.$dictno \ ${TEMPDICT}.$dictno $MISSINGWORDS.$dictno fi lastdict="${TEMPDICT}.$dictno" dictno=`expr $dictno + 1` done rm -f $MISSINGWORDS.* # # (4) For each pair of dictionaries, use comm to eliminate words in # the smaller from the larger, and shrink the result with munchlist. # From this point out, we ignore interrupts. # munchlist -l $langtabs ${TEMPDICT}.0 > $outbase.0 lastdict="${TEMPDICT}.0" dictno=1 trap "" 1 2 13 15 for dictfile do comm -13 $lastdict ${TEMPDICT}.$dictno \ | munchlist -l $langtabs > $outbase.$dictno rm -f $lastdict lastdict="${TEMPDICT}.$dictno" dictno=`expr $dictno + 1` done rm -rf $TEMPDIR ispell-3.4.00/PaxHeaders.19408/findaffix.X0000644000000000000000000000013212465617735014737 xustar0030 mtime=1423384541.128510655 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/findaffix.X0000555003214100001440000002765312465617735016024 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: findaffix.X,v 1.23 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Find possible affixes for use with ispell # # Usage: # # findaffix [-p | -s] [-f] [-c] [-m min] [-M max] [-e elim] [-l low] \ # [-t tabchar] [files] # # Each common prefix (-p) or suffix (-s, default) is presented, along # with statistics to indicate how useful such an affix might be in # reducing the size of the input file. Only those affixes which # produce a legal root (one found in the original input) are reported. # # If the "-c" option is not given, the output lines are in the # following format: # # strip/add/count/bytes # # where "strip" is the string that should be stripped from a root # word before adding the affix, "add" is the affix to be added, "count" # is a count of the number of times that this "strip/add" combination # appears, and "bytes" is an estimate of the number of bytes that # will be saved in the raw dictionary file if this combination is # added to the affix file. The field separator in the output will # normally be the tab character specified by the "-t" switch; the # default is a slash ("/"). # # If the "-c" ("clean output") option is given, the appearance of # the output is made cleaner by changing it to: # # -strip+addcountbytes # # where "strip," "add," "count," and "bytes" are as before, and "" # represents the ASCII tab character. # # The method used to generate possible affixes will also generate # longer affixes which have common headers or trailers. For example, # the two words "moth" and "mother" will generate not only the obvious # substition "+er" but also "-h+her" and "-th+ther" (and possibly # even longer ones, depending on the value of "min"). To prevent # cluttering the output with such affixes, any affix pair that shares # a common header (or, for prefixes, trailer) string longer than # "elim" characters (default 1) will be suppressed. You may want to # set "elim" to a value greater than 1 if your language has string # characters; usually the need for this parameter will become obvious # when you examine the output of your findaffix run. # # Normally, the output is sorted on the "bytes" field. If the "-f" # flag is given, the output is sorted according to the "count" field. # # No affix longer than "max" characters (default 8) will be reported. # Smaller values of "max" will make the script run faster. # # Affixes which appear fewer than "low" times (default 10) are # suppressed. This significantly reduces the size of the output file. # # Affixes which generate stems shorter than "min" characters (default 3) # are suppressed. (A stem is the word after the "strip" string has # been removed, and before the "add" string has been added.) This # reduces both the running time and the size of the output file. "Min" # should only be set to 1 if you have a *lot* of free time and disk # space. # # The script requires a non-blank field-separator character for internal # use. Normally, this character is a slash ("/"), but if the slash # appears as a character in the input word list, a different character # can be specified with the "-t" switch. # # If the input files are ispell dictionaries, they should be expanded # before being fed to this script. # # If the input files contains characters other than [A-Za-z], they # should be translated to lowercase before being fed to this script. # # $Log: findaffix.X,v $ # Revision 1.23 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. # # Revision 1.22 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.21 2005/04/14 14:39:33 geoff # Use /tmp as the default temp directory # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. # # Revision 1.19 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.18 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.17 2001/07/23 20:24:03 geoff # Update the copyright and the license. # # Revision 1.16 1999/01/07 01:22:55 geoff # Update the copyright. # # Revision 1.15 1994/01/25 07:11:29 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # In one of the most incredibly stupid decisions of all time, some # genius decided to break backwards compatibility by "deprecating" the # old-style sort switches even though it was trivial to recognize both # styles. The result is that that thousands of people (like me) will # have to rewrite shell scripts to tolerate that stupidity. (It's not # that the new syntax is bad--it's definitely easier to understand. # But that doesn't excuse breaking compatibility.) # # Detect whether sort accepts old-style switches. if sort +0 -1 /dev/null >/dev/null 2>&1 then CRETIN_SORT=false else CRETIN_SORT=true fi # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/faffXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/faff$$" || (echo "Can't create temp directory: ${TDIR}/faff$$" 1>&2; exit 1); TEMPDIR="$TDIR/faff$$") TMP=${TEMPDIR}/faff. SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE='Usage: findaffix [-p | -s] [-f] [-c] [-e elim] [-m min] [-M max] [-l low] [-t tabch] [files]' LOOP=' i = len - maxlim + 1 if (i < minstem + 1) i = minstem + 1 for ( ; i <= len; i++) print substr ($0, 1, i - 1) tabch substr ($0, i) tabch len print $0 tabch tabch len' ELIM='$1!=$2 \ { if (substr ($1, 1, elimlen) != substr ($2, 1, elimlen)) print }' maxlim=8 minstem=3 elimlen=1 lowcount=10 cleanout=no if $CRETIN_SORT then finalsortopts='-k 4rn,4 -k 3rn,3 -k 2,2 -k 1,1' else finalsortopts='+3rn -4 +2rn -3 +1 -2 +0 -1' fi tabch=/ while : do case "$1" in -p) LOOP=' lim = len - minstem if (lim > maxlim) lim = maxlim for (i = 1; i <= lim; i++) print substr ($0, i + 1) tabch substr ($0, 1, i) tabch len print $0 tabch tabch len' ELIM='$1!=$2 \ { if (substr ($1, length ($1), elimlen) \ != substr ($2, length ($2), elimlen)) print }' shift ;; -s) shift ;; -f) if $CRETIN_SORT then finalsortopts='-k 3rn,3 -k 4rn,4 -k 2,2 -k 1,1' else finalsortopts='+2rn -3 +3rn -4 +1 -2 +0 -1' fi shift ;; -c) cleanout=yes shift ;; -e) elimlen=$2 shift; shift ;; -m) minstem=$2 shift; shift ;; -M) maxlim=$2 shift; shift ;; -l) lowcount=$2 shift; shift ;; -t) tabch="$2" shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # We are ready to do the work. First, we collect all input, translate it # to lowercase, sort it (dropping duplications), and save it for later. # if [ $# -ne 0 ] then cat "$@" | tr '[A-Z]' '[a-z]' else tr '[A-Z]' '[a-z]' fi \ | sort -u $SORTTMP > ${TMP}a # # Now the monstrous pipeline. The awk command produces several lines for # each input word. Each line contains a possible stem (first field), # a possible affix, and the length of the original word. The loop which # does this was placed into the LOOP variable by the code above (q.v.). # # The first sort puts this output into an order appropriate for feeding # to 'join'. The join command then combines stems and affixes, and for # each puts out an affix to strip, an affix to add, and the length of # the word before and after modification. # # From here on out the job is relatively easy. The second 'awk' gets rid # of lines that have the same strip and add affixes, and also eliminates # lines where the strip and add affix have a common leading (for suffixes) # or trailing (for prefixes) substring, or where the strip affix is longer # than the add affix (this is all done by the $ELIM variable, which is also # set up by the code above. The second sort collects identical affixes; # the third 'awk' functions like 'uniq -c', replacing duplicate affixes # with a count and summing the estimate of bytes saved. It also eliminates # any affixes which appear less frequently than the minimum ("lowcount"). # Finally, the third sort ($finalsortopts) rearranges the list in the chosen # sort order. # if $CRETIN_SORT then sortopts1='-k 1,1 -k 2' sortopts2='-k 2,2 -k 1,1' else sortopts1='+0 -1 +1' sortopts2='+1 -2 +0 -1' fi awk "BEGIN{minstem=$minstem; maxlim=$maxlim; tabch="'"'"$tabch"'"} { len = length ($0) if (len < 2) next '"$LOOP"' }' < ${TMP}a \ | sort "-t$tabch" $sortopts1 $SORTTMP -o ${TMP}a join "-t$tabch" -o 1.2 2.2 2.3 ${TMP}a ${TMP}a \ | awk "-F$tabch" "BEGIN{elimlen=$elimlen}$ELIM" \ | sort "-t$tabch" $sortopts2 $SORTTMP \ | awk "-F$tabch" 'BEGIN{tabch="'"$tabch"'"; lowcount='"$lowcount"'} { if ($1 == last1 && $2 == last2) { count++ totchars += $3 } else { if ((last1 != "" || last2 != "") && count >= lowcount) print last1 tabch last2 tabch count tabch totchars count = 1 last1 = $1 last2 = $2 totchars = $3 } } END { if ((last1 != "" || last2 != "") && count >= lowcount) print last1 tabch last2 tabch count tabch totchars }' \ | sort "-t$tabch" $finalsortopts $SORTTMP \ | if [ "$cleanout" = "yes" ] then case "$tabch" in /) sedsub=/ sedsep=';' ;; .|\*|\[|\^|\$|\\) sedsub="\\$tabch" sedsep=/ ;; *) sedsub="$tabch" sedsep=/ ;; esac exec sed -e "s$sedsep$sedsub$sedsep ${sedsep}g" \ -e 's/ /+/' -e 's/^/-/' \ -e 's/^-+/+/' -e 's/+ / /' else exec cat fi rm -rf $TEMPDIR ispell-3.4.00/PaxHeaders.19408/Makepatch0000644000000000000000000000007410233564152014456 xustar0030 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/Makepatch0000555003214100001440000001674610233564152015537 0ustar00geofffaculty00000000000000: Use /bin/sh # # # Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make an ispell patch kit. This is not a clever script, # just a handy one. # # Usage: # USAGE="Usage: Makepatch [-n] [-d destdir] [-o file] ... [new-files]" # # destdir is the directory in which the kits and patches are kept. # # new-files are any new files to be added to the distribution. # # The -n switch suppresses RCS updates, so that the patch can be # tested. # # The -o switch can be used to limit patching to certain files. # This is useful to control the size of patches. Version.h is # always patched. This switch can appear more than once. # # $Log: Makepatch,v $ # Revision 1.21 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilies in tail. # # Revision 1.20 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.19 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.18 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.17 1999/01/07 01:58:06 geoff # Update the copyright. # # Revision 1.16 1994/11/01 05:54:33 geoff # When doing a partial run, update the fields code in the right RCS # directory. # # Revision 1.15 1994/11/01 05:27:14 geoff # Change the special code for handling the fields routines to reflect my # latest source-tree reorganization. # # Revision 1.14 1994/05/18 02:56:48 geoff # Correctly detect dictionary files for context selection # # Revision 1.13 1994/05/17 06:37:27 geoff # Add the -o switch, to help handle overly-large patches. Remember to # return a success status at the end (rcsdiff can return a nonzero # status). # # Revision 1.12 1994/02/08 06:03:56 geoff # Don't expect a comma after version number (it makes patch barf) # # Revision 1.11 1994/01/25 07:11:15 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # destdir=kits baserelease=3.1 trialrun= files= partialrun=false nl=' ' while [ $# -gt 0 ] do case "$1" in -d) destdir="$2" shift; shift ;; -n) trialrun=echo shift ;; -o) files="$files $2" partialrun=true shift; shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done allfiles=`Makekit -e` if $partialrun then : else files="$allfiles" fi [ -d "$destdir" ] || mkdir "$destdir" # # Because some cretin decided to break backwards compatibility in # tail, we'll use sed to achieve the effect of "tail -1". # if [ -r "$destdir/Patch${baserelease}.01" ] then lastpatch=`ls $destdir/Patch${baserelease}.?? | sed -n -e '$p' \ | sed "s;$destdir/Patch${baserelease}.;;"` else lastpatch=00 fi patchno=`expr $lastpatch + 1` case "$patchno" in [1-9]) patchno=0$patchno ;; esac patchfile="$destdir/Patch${baserelease}.$patchno" case "$trialrun" in echo) patchfile="${patchfile}-test" ;; esac lastpatchid=`echo Patch${baserelease}.$lastpatch | sed 's/\./_/g'` patchid=`echo Patch${baserelease}.$patchno | sed 's/\./_/g'` echo 'Index: version.h' > "$patchfile" prereq=`co -r$lastpatchid -p RCS/version.h \ | egrep 'International Ispell Version' \ | sed -e 's/^.*International Ispell Version //' -e 's/ .*$//'` echo "Prereq: $prereq" >> "$patchfile" echo "" >> "$patchfile" patchlevel=`egrep "International Ispell Version $baserelease" version.h \ | sed -e "s/^.*Version $baserelease\.//" -e 's/ .*$//'` case "$patchlevel" in $patchno) ;; $lastpatch) $trialrun co -l version.h # Note this requires System V date command! date=`date +%D` co -p -q version.h \ | sed "/International/s;$baserelease.$lastpatch ../../..;$baserelease.$patchno $date;" \ | case "$trialrun" in '') cat > version.h ;; echo) echo 'Edit version.h to produce:' egrep 'International Ispell Version' ;; esac ;; *) echo "Sorry, I can't figure out what level you're patching!" 1>&2 exit 1 ;; esac lastrev=`rlog -h version.h | sed -n 's/head:[ ]*//p'` if $partialrun then $trialrun rcs -N$patchid:$lastpatchid \ `echo $allfiles | tr ' ' "$nl" \ | sed '/^fields.[ch3]$/s;^;'"$HOME/src/local/fields/;"` fi case "$trialrun" in '') rcs -N$patchid:$lastrev version.h rcsdiff -r$lastpatchid -r$patchid version.h >> "$patchfile" ;; echo) echo rcs -N$patchid:$lastrev version.h rcsdiff -r$lastpatchid version.h >> "$patchfile" ;; esac for basefile in $files do case "$basefile" in fields.[ch3]) rcsfile=$HOME/src/local/fields/RCS/$basefile,v ;; *) rcsfile=`rlog -R $basefile` ;; esac lastrev=`rlog -h $rcsfile | sed -n 's/head:[ ]*//p'` case "$basefile" in version.h) ;; *) $trialrun rcs -N$patchid:$lastrev $rcsfile case "$trialrun" in '') changes=`rcsdiff -r$lastpatchid -r$patchid $rcsfile \ $basefile 2>/dev/null \ | sed 1q` ;; echo) changes=`rcsdiff -r$lastpatchid $rcsfile $basefile \ 2>/dev/null \ | sed 1d` ;; esac case "$changes" in '') ;; *) case "$basefile" in languages/english/*.[0-9]) context= ;; *) context=-u ;; esac echo "" >> "$patchfile" echo "Index: $basefile" >> "$patchfile" echo "" >> "$patchfile" case "$trialrun" in '') rcsdiff $context -r$lastpatchid -r$patchid \ $rcsfile $basefile \ >> "$patchfile" ;; echo) rcsdiff $context -r$lastpatchid $rcsfile \ $basefile \ >> "$patchfile" ;; esac ;; esac esac done # # Do new files # for basefile do echo "" >> "$patchfile" echo "Index: $basefile" >> "$patchfile" echo "" >> "$patchfile" diff -c /dev/null $basefile | sed "s;/dev/null;$basefile;" >> "$patchfile" done exit 0 ispell-3.4.00/PaxHeaders.19408/config.X0000644000000000000000000000013212465632566014245 xustar0030 mtime=1423390070.774146233 30 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/config.X0000444003214100001440000011604412465632566015320 0ustar00geofffaculty00000000000000#ifndef CONFIG_H_INCLUDED #define CONFIG_H_INCLUDED /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This is the configuration file for ispell. Thanks to Bob McQueer * for creating it and making the necessary changes elsewhere to * support it, and to George Sipe for figuring out how to make it easier * to use. * * WARNING: The Makefile edits this file (config.X) to produce config.h. * If you are looking at config.h, you're in the wrong file. * * Look through this file from top to bottom. If anything needs changing, * create the header file "local.h" and define the correct values there; * they will override this file. If you don't make any changes to this * file, future patching will be easier. */ /* * $Id: config.X,v 1.101 2015-02-08 00:35:41-08 geoff Exp $ * * $Log: config.X,v $ * Revision 1.101 2015-02-08 00:35:41-08 geoff * Add POSIX termios support (thanks to Christian Weisgerber for the patch). * * Revision 1.100 2007-01-23 17:20:35-08 geoff * Ignore HTML style and script tags * * Revision 1.99 2005/05/25 14:13:53 geoff * Correct the spelling of the default for EXEEXT. * * Revision 1.98 2005/05/01 23:07:59 geoff * Add #ifndef around the definition of LINK (how the heck did I blow * THAT one? Thanks to Eli Zaretskii for fixing it). Add EXTEXT (again * courtesy of Eli) to support MS-DOS and similar systems. * * Revision 1.97 2005/04/28 14:46:51 geoff * Add DEFLOGDIR. * * Revision 1.96 2005/04/28 01:03:11 geoff * Include defhash.h after local.h so local.h can override its * definitions. Put back the definitions of MASTERHASH, DEFHASH, and * DEFLANG so they'll be documented. * * Revision 1.95 2005/04/28 00:26:06 geoff * Get hash-file names from defhash.h (but let local.h override them). * Document the fact that the master hash file is the first language in * the language list. * * Revision 1.94 2005/04/26 22:40:07 geoff * Add double-inclusion protection. * * Revision 1.93 2005/04/21 14:08:58 geoff * Don't put an explicit path on egrep, and assume that it takes the -i * switch (since that's true on most modern systems). * * Revision 1.92 2005/04/14 21:25:52 geoff * Add a prominent warning against using symbolic links. Add * DICTIONARYVAR and CHARESETVAR. Fix a typo in determining word size * for masks. Try to get the masktype width from the system word size if * possible. * * Revision 1.91 2005/04/14 15:19:37 geoff * Add shortcite to both versions of TEXSKIP1. * * Revision 1.90 2005/04/14 14:38:23 geoff * Update license. Integrate Ed Avis's changes. Make "ln" configurable. * Use -lncurses by default, rather than -ltermcap. Make manual * extensions configures. Also make some of the manual contents * configurable. Make words default to /usr/share/dict. Add a warning * against /usr/share/dict/web2. Make the determination of MAXPATHLEN * and MAXNAMLEN smarter. Increase a bunch of parameters to reflect the * increased power of modern machines. Add support for 64-bit word size. * Expand the known TeX keywords. Add DEFAULT_FILE_MODE. * * Revision 1.89 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.88 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.87 2001/07/23 20:24:02 geoff * Update the copyright and the license. * * Revision 1.86 2001/06/14 09:11:11 geoff * Use non-conflicting macros for bcopy and bzero to avoid compilation * problems on smarter compilers. * * Revision 1.85 2001/05/30 21:14:47 geoff * Invert the fcntl/mkstemp options so they will default to being used. * * Revision 1.84 2001/05/30 21:04:25 geoff * Add HAS_FCNTL_H and HAS_MKSTEMP. * * Revision 1.83 2001/01/24 01:18:27 geoff * Don't build the + dictionaries by default any more, because too many * distributions no longer supply /usr/dict/words. * * Revision 1.82 2000/08/22 10:52:25 geoff * Fix a spelling error in an ifdef, improve comments on TERMLIB, and * bump MAXSTRINGCHARS to 512 to reflect the increased number used in the * english.aff file (and presumably others). * * Revision 1.81 2000/06/30 08:32:47 geoff * Bump the default MAXSTRINGCHARS to handle more complex languages * * Revision 1.80 2000/01/21 06:57:38 geoff * Add a bunch of new TeX keywords * * Revision 1.79 1999/01/13 01:34:18 geoff * Get rid of EMACS, which is now obsolete. * * Revision 1.78 1999/01/08 04:34:11 geoff * Get rid of ELISPDIR and TEXINFODIR * * Revision 1.77 1999/01/07 01:22:34 geoff * Update the copyright. * * Revision 1.76 1998/07/12 20:42:12 geoff * Switch the sense of IGNOREBIB for TEXSKIP1. * * Revision 1.75 1998/07/06 06:55:11 geoff * Add TEXSKIP1/2 and associated variables. * * Revision 1.74 1997/12/02 06:24:35 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.73 1997/12/01 00:53:41 geoff * Add HTML support variables. * * Revision 1.72 1995/11/08 05:09:09 geoff * Use symbolic values for DEFTEXFLAG. * * Revision 1.71 1995/01/08 23:23:28 geoff * Add some more configuration variables: HAS_RENAME, MSDOS_BINARY_OPEN, * HOME, PDICTHOME, HASHSUFFIX, STATSUFFIX, and COUNTSUFFIX. These are * all to make it easier to port ispell to MS-DOS. Change DEFPAFF back * to "words" so that only .ispell_words will be independent of language. * * Revision 1.70 1994/10/25 05:45:57 geoff * Fix a tiny typo in a comment. Add a configurable install command. * * Revision 1.69 1994/09/01 06:06:30 geoff * Improve the the documentation of LANGUAGES to include working examples. * * Revision 1.68 1994/07/28 05:11:34 geoff * Log message for previous revision: force MASKBITS to greater than or * equal to MASKTYPE_WIDTH (simplifies configuration for 64-bit * machines). * * Revision 1.67 1994/07/28 04:53:34 geoff * * Revision 1.66 1994/04/27 02:50:46 geoff * Change the documentation and defaults for the languages variable to * reflect the new method of making American and British dictionary * variants. * * Revision 1.65 1994/04/27 01:50:28 geoff * Add MAX_CAPS. * * Revision 1.64 1994/02/07 08:10:42 geoff * Add GENERATE_LIBRARY_PROTOS as a special variable for use only by me. * * Revision 1.63 1994/01/26 07:44:45 geoff * Make yacc configurable through local.h. * * Revision 1.62 1994/01/25 07:11:20 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ /* You may wish to specify your local definitions in this file: */ #include "local.h" /* local definitions for options */ #include "defhash.h" /* Automatically generated options */ /* ** Major-differences selection. The default system is BSD; for USG ** or non-UNIX systems you should add the appropriate #define to local.h. */ #ifndef USG #undef USG /* Define this in local.h for System V machines */ #endif /* USG */ #include #include #ifndef USG #include #endif /* USG */ #ifndef TERMIOS #define TERMIOS 1 /* POSIX termios.h */ #endif /* TERMIOS */ /* ** Things that normally go in a Makefile. Define these just like you ** might in the Makefile, except you should use #define instead of ** make's assignment syntax. Everything must be double-quoted, and ** (unlike make) you can't use any sort of $-syntax to pick up the ** values of other definitions. */ #ifndef CC #define CC "cc" #endif /* CC */ #ifndef LINT #define LINT "lint" #endif /* LINT */ #ifndef CFLAGS #define CFLAGS "-O" #endif /* CFLAGS */ #ifndef LINTFLAGS #define LINTFLAGS "" #endif /* LINTFLAGS */ #ifndef YACC #define YACC "yacc" #endif /* YACC */ /* ** For some systems, it might be better to use symbolic links rather ** than traditional hard links. Usually hard links are better, ** because they are more efficient. However, hard links don't work ** across physical devices. In such cases, you may prefer to set LINK ** to "ln -s" to work around that deficiency. ** ** NOTE TO PERSONS WHO FIRST LEARNED UNIX AFTER 1980: many Unix ** novices seem to think that symbolic links are the only kind of ** links, and seem to use them reflexively. Remember that symbolic ** links are inferior to hard links in almost every way. The ** exception is when you're dealing either with (a) links to ** directories or (b) cross-device links. Ispell uses neither. Don't ** change LINK to "ln -s" unless you are working on a system that ** simply doesn't support hard links. */ #ifndef LINK #define LINK "ln" #endif /* ** Libraries that may need to be added to the cc line to get ispell to ** link. Normally, this should be null. */ #ifndef LIBES #define LIBES "" #endif /* ** TERMLIB - where to get the termcap library. Should be -ltermcap, ** -lcurses, or -lncurses on most systems. */ #ifndef TERMLIB #define TERMLIB "-lncurses" #endif /* ** REGLIB - where to get the regular-expression routines, if ** REGEX_LOOKUP is defined. Should be -lPW on USG systems, null on ** BSD systems. */ #ifndef REGLIB #define REGLIB "" #endif /* ** Where to install various components of ispell. BINDIR contains ** binaries. LIBDIR contains hash tables and affix files. ** ** If you intend to use multiple dictionary files, I would suggest ** LIBDIR be a directory which will contain nothing else, so sensible ** names can be constructed for the -d option without conflict. */ #ifndef BINDIR #define BINDIR "/usr/local/bin" #endif #ifndef LIBDIR #define LIBDIR "/usr/local/lib" #endif /* ** MAN1DIR and MAN1EXT control installing the section 1 (executable ** programs) manual pages. There are also manual pages for file ** formats, but there seems to be some controversy over whether these ** belong in section 4 or section 5 of the manual. To make the ** cross-references correct you also need to change MAN45SECT. (The ** built files are always called .5X and .5; the extension changes ** only when it's finally installed.) ** ** If your system likes to use ".1l" and such for local manual pages, ** you can change MAN1EXT and MAN45EXT appropriately. */ #ifndef MAN1DIR #define MAN1DIR "/usr/local/man/man1" #endif #ifndef MAN1EXT #define MAN1EXT ".1" #endif #ifndef MAN45DIR #define MAN45DIR "/usr/local/man/man5" #endif #ifndef MAN45EXT #define MAN45EXT ".5" #endif #ifndef MAN45SECT #define MAN45SECT "5" #endif /* ** Ispell's manual page refers to some programs, look, spell, and tib, that ** may be absent on some systems. Look used to be optional; spell ** used to be a part of standard Unix, but has been obsoleted by ** ispell; tib is part of a rarely used TeX package that is not ** available on most systems. To avoid having a cross reference to a ** manual page that doesn't exist, they are changeable here. ** ** If you have either on your system, define these as follows: ** ** #define SPELL_XREF ".IR spell (1)," ** #define TIB_XREF ".IR tib (1)," ** ** By default, SPELL_XREF is defined as a special string that ** evaluates to nothing in a manual page, because the program is not ** otherwise mentioned in the ispell manaul. Since tib is mentioned ** elsewhere, its default definition is more complex. ** ** Incidentally, there is no need to do the same for sort, join, and ** so on, since they are standard on any Unix-like system. */ #ifndef LOOK_XREF #define LOOK_XREF ".IR look (1)," #endif #ifndef SPELL_XREF #define SPELL_XREF ".\\\"" #endif #ifndef TIB_XREF #define TIB_XREF ".IR tib \" (if available on your system)\"," #endif /* ** List of all hash files (languages) which will be supported by ispell. ** ** This variable has a complex format so that many options can be ** specified. The format is as follows: ** ** [,...] [ [, ...] ...] ** ** where ** ** language is the name of a subdirectory of the ** "languages" directory ** make-options are options that are to be passed to "make" in ** the specified directory. The make-options ** should not, in general, specify a target, as ** this will be provided by the make process. ** ** For example, if LANGUAGES is: ** ** "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/share/dict/words /usr/share/dict/web2} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" ** ** then the American-English and Deutsch (German) languages will be supported, ** and the following variable settings will be passed to the two Makefiles: ** ** American: ** ** MASTERDICTS='american.med+' ** HASHFILES='americanmed+.hash' ** EXTRADICT='/usr/share/dict/words /usr/share/dict/web2' ** ** Deutsch: ** ** DICTALWAYS='deutsch.sml' ** DICTOPTIONS='' ** ** Incidentally, it is rarely a good idea to include /usr/share/dict/web2 ** in an ispell dictionary even if the file exists on your system, ** because it contains obscure words that may mask misspellings of ** more common words. ** ** Notes on the syntax: The makefile is not very robust. If you have ** make problems, or if make seems to fail in the language-subdirs ** dependency, check your syntax. The makefile adds single quotes to ** the individual variables in the LANGUAGES specification, so don't ** use quotes of any kind. ** ** The first language listed in this variable MUST contain a HASHFILES ** declaration. That language will become the default for ** spell-checking if no dictionary is explicitly specified. As a ** special (and kludgey) feature, if that language begins with ** "american" or "british", it will also be aliased to "english", and ** "english" will become the default dictionary. (All of these ** defaults can be overridden by defining MASTERHASH, DEFHASH, and ** DEFLANG, but that should rarely be necessary.) ** ** On MSDOS systems, you must use names that are consistent with the ** 8+3 filename restrictions, or you will risk filename collision. See ** the file pc/local.djgpp for details. */ #ifndef LANGUAGES #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash,EXTRADICT=}" #endif /* LANGUAGES */ /* ** Master hash file for DEFHASH. This is the name of a hash file ** built by a language Makefile. It should be the most-popular hash ** file on your system, because it is the one that will be used by ** default. It must be listed in LANGUAGES, above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef MASTERHASH #define MASTERHASH "americanmed.hash" #endif /* ** Default native-language hash file. This is the name given to the ** hash table that will be used if no language is specified to ** ispell. It is a link to MASTERHASH, above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef DEFHASH #define DEFHASH "english.hash" #endif /* ** Language tables for the default language. This must be the name of ** the affix file that was used to generate the MASTERHASH/DEFHASH, ** above. ** ** Normally, it is not necessary to define this variable in local.h, ** because it will automatically be extracted from LANGUAGES, above. */ #ifndef DEFLANG #define DEFLANG "english.aff" #endif /* ** Language to use for error messages. If there are no messages in this ** language, English will be used instead. */ #ifndef MSGLANG #define MSGLANG "english" #endif /* MSGLANG */ /* ** If your sort command accepts the -T switch to set temp file ** locations (try it out; it exists but is undocumented on some ** systems), make the following variable the null string. Otherwise ** leave it as the sed script. */ #ifndef SORTTMP #define SORTTMP "-e '/!!SORTTMP!!/s/=.*$/=/'" #endif /* ** If your sort command accepts the -T switch (see above), make the ** following variable refer to a temporary directory with lots of ** space. Otherwise make it the null string. */ #ifndef MAKE_SORTTMP #define MAKE_SORTTMP "-T ${TMPDIR-/tmp}" #endif /* ** Sequence that indicates the beginning of a shell script. Most ** systems use "#!/bin/sh" here. Some very old machines, however, ** need ": Use /bin/sh". */ #ifndef POUNDBANG #define POUNDBANG "#!/bin/sh" #endif /* ** INSTALL program. Could be a copy program like cp or something fancier ** like /usr/ucb/install -c */ #ifndef INSTALL #define INSTALL "cp" #endif /* ** If your system has the rename(2) system call, define HAS_RENAME and ** ispell will use that call to rename backup files. Otherwise, it ** will use link/unlink. There is no harm in this except on MS-DOS, ** which doesn't support link/unlink. */ #ifndef HAS_RENAME #undef HAS_RENAME #endif /* HAS_RENAME */ /* ** If your system doesn't have the fcntl.h header file (most modern ** systems do), define this. */ #ifndef NO_FCNTL_H #undef NO_FCNTL_H #endif /* NO_FCNTL_H */ /* ** If your system doesn't have the mkstemp library call, define this. */ #ifndef NO_MKSTEMP #undef NO_MKSTEMP #endif /* NO_MKSTEMP */ /* Aliases for some routines */ #ifdef USG #define BCOPY(s, d, n) memcpy (d, s, n) #define BZERO(d, n) memset (d, 0, n) #define index strchr #define rindex strrchr #else #define BCOPY(s, d, n) bcopy (s, d, n) #define BZERO(d, n) bzero (d, n) #endif /* type given to signal() by signal.h */ #ifndef SIGNAL_TYPE #define SIGNAL_TYPE void #endif /* environment variable for user's word list */ #ifndef PDICTVAR #define PDICTVAR "WORDLIST" #endif /* prefix part of default word list */ #ifndef DEFPDICT #define DEFPDICT ".ispell_" #endif /* ** suffix part of default word list */ #ifndef DEFPAFF #define DEFPAFF "words" #endif /* old place to look for default word list */ #ifndef OLDPDICT #define OLDPDICT ".ispell_" #endif /* OLDPDICT */ #ifndef OLDPAFF #define OLDPAFF "words" #endif /* OLDPAFF */ /* where to put log files (inside home */ #define DEFLOGDIR ".ispell_logs" /* environment variable for include file string */ #ifndef INCSTRVAR #define INCSTRVAR "INCLUDE_STRING" #endif /* default include string */ #ifndef DEFINCSTR #define DEFINCSTR "&Include_File&" #endif /* Environment variable for getting extra ispell options */ #define OPTIONVAR "ISPELL_OPTIONS" /* Environment variable for controlling where to look for dictionaries */ #define LIBRARYVAR "ISPELL_DICTDIR" /* environment variable for preferred dictionary */ #ifndef DICTIONARYVAR #define DICTIONARYVAR "DICTIONARY" #endif /* environment variable for preferred character set */ #ifndef CHARSETVAR #define CHARSETVAR "ISPELL_CHARSET" #endif /* mktemp template for temporary file - MUST contain 6 consecutive X's */ #ifndef TEMPNAME #define TEMPNAME "/tmp/ispellXXXXXX" #endif /* ** If REGEX_LOOKUP is undefined, the lookup command (L) will use the look(1) ** command (if available) or the egrep command. If REGEX_LOOKUP is defined, ** the lookup command will use the internal dictionary and the ** regular-expression library (which you must supply separately. There is ** a public-domain library available; libraries are also distributed with ** both BSD and System V. ** ** The advantage of no REGEX_LOOKUP is that it is often much faster, especially ** if the look(1) command is available, that the words found are presented ** in alphabetical order, and that the list of words searched is larger. ** The advantage of REGEX_LOOKUP is that ispell doesn't need to spawn another ** program, and the list of words searched is exactly the list of (root) words ** that ispell will accept. (However, note that words formed with affixes will ** not be found; this can produce some artifacts. For example, since ** "brother" can be formed as "broth+er", a lookup command might fail to ** find "brother.") */ #ifndef REGEX_LOOKUP #undef REGEX_LOOKUP #endif /* REGEX_LOOKUP */ /* ** Choose the proper type of regular-expression routines here. BSD ** and public-domain systems have routines called re_comp and re_exec; ** System V uses regcmp and regex. ** ** REGCTYPE is the type of a variable to hold the compiled regexp ** REGCMP(re,str) is the function that compiles a regexp in `str' into ** a compiled regexp `re' declared as REGCTYPE and ** returns `re'. ** REGEX(re, str, dummy) is a function that matches `str' against a compiled ** regexp in `re' and returns a non-NULL pointer if it ** matches, NULL otherwise. ** REGFREE(re) is anything that should be done when the compiled ** regexp `re' is no longer needed. It can be also used ** to allocate any structures required to compile a ** regexp, since it is called *before* compiling a new ** regexp (that's where we know that the old one will no ** longer be used). ** ** Here is one way of defining these if you have POSIX regexp functions: ** ** #include ** #include ** #define REGCTYPE regex_t * ** #define REGCMP(re,str) (regcomp (re, str, 0), re) ** #define REGEX(re, str, dummy) \ ** (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *) 1 : NULL) ** #define REGFREE(re) \ ** do \ ** { \ ** if (re == 0) \ ** re = (regex_t *) calloc (1, sizeof (regex_t)); \ ** else \ ** regfree (re); \ ** } while (0) ** */ #ifdef REGEX_LOOKUP #ifndef REGCMP #ifdef USG #define REGCTYPE char * #define REGCMP(re, str) regcmp (str, (char *) 0) #define REGEX(re, str, dummy) regex (re, str, dummy, dummy, dummy, dummy, \ dummy, dummy, dummy, dummy, dummy, dummy) #define REGFREE(re) do \ { \ if (re != NULL) \ free (re); \ re = NULL; \ } \ while (0) #else /* USG */ #define REGCTYPE char * #define REGFREE(re) /* Do nothing */ #define REGCMP(re, str) re_comp (str) #define REGEX(re, str, dummy) re_exec (str) #endif /* USG */ #endif /* REGCMP */ #endif /* REGEX_LOOKUP */ /* look command (if look(1) MAY BE available - ignored if not) */ #ifndef REGEX_LOOKUP #ifndef LOOK #define LOOK "look -df" #endif #endif /* REGEX_LOOKUP */ /* path to egrep (use speeded up version if available) */ #ifndef EGREPCMD #define EGREPCMD "egrep -i" #endif /* ** Path to wordlist for Lookup command (typically /usr/dict/words, ** /usr/dict/web2, or /usr/share/dict/words or web2). ** ** Note that it is usually a bad idea to specify the web2 dictionary ** because it contains obscure words. */ /* note that /usr/share/dict/web2 is usually a bad idea due to obscure words */ #ifndef WORDS #define WORDS "/usr/share/dict/words" #endif /* buffer size to use for file names if not in sys/param.h */ #ifndef MAXPATHLEN #ifdef PATH_MAX #define MAXPATHLEN PATH_MAX #else #define MAXPATHLEN 240 #endif #endif /* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */ #ifndef MAXNAMLEN #ifdef NAME_MAX #define MAXNAMLEN NAME_MAX #else #define MAXNAMLEN 14 #endif #endif /* define if you want .bak file names truncated to MAXNAMLEN characters */ #ifndef TRUNCATEBAK #undef TRUNCATEBAK #endif /* TRUNCATEBAK */ /* largest word accepted from a file by any input routine, plus one */ #ifndef INPUTWORDLEN #define INPUTWORDLEN 100 #endif /* largest amount that a word might be extended by adding affixes */ #ifndef MAXAFFIXLEN #define MAXAFFIXLEN 40 #endif /* ** Number of mask bits (affix flags) supported. Must be 32, 64, 128, or ** 256. If MASKBITS is 32 or 64, there are really only 26 or 58 flags ** available, respectively. If it is 32, the flags are named with the ** 26 English uppercase letters; lowercase will be converted to uppercase. ** If MASKBITS is 64, the 58 flags are named 'A' through 'z' in ASCII ** order, including the 6 special characters from 'Z' to 'a': "[\]^_`". ** If MASKBITS is 128 or 256, all the 7-bit or 8-bit characters, ** respectively, are theoretically available, though a few (newline, slash, ** null byte) are pretty hard to actually use successfully. ** ** Note that most non-English affix files depend on having MASKBITS ** equal to 64 or larger. It is for this reason that MASKBITS ** defaults to 64. If you are only going to be using ispell for ** English, and you are very tight on memory space, you might want to ** reduce MASKBITS to 32. */ #ifndef MASKBITS #define MASKBITS 64 #endif /* ** C type to use for masks. This should be a type that the processor ** accesses efficiently. ** ** MASKTYPE_WIDTH must correctly reflect the number of bits in a ** MASKTYPE. Unfortunately, it is also required to be a constant at ** preprocessor time, which means you can't use the sizeof operator to ** define it. ** ** Note that MASKTYPE *must* match MASKTYPE_WIDTH or you may get ** division-by-zero errors! */ #ifndef MASKTYPE #ifdef __WORDSIZE #if __WORDSIZE == 64 #define MASKTYPE long #define MASKTYPE_WIDTH 64 #else #define MASKTYPE int #define MASKTYPE_WIDTH __WORDSIZE #endif #else #define MASKTYPE long #endif #endif #ifndef MASKTYPE_WIDTH #ifdef __WORDSIZE #define MASKTYPE_WIDTH __WORDSIZE #else #define MASKTYPE_WIDTH 32 #endif /* __WORDSIZE */ #endif /* MASKTYPE_WIDTH */ #if MASKBITS < MASKTYPE_WIDTH #undef MASKBITS #define MASKBITS MASKTYPE_WIDTH #endif /* MASKBITS < MASKTYPE_WIDTH */ /* maximum number of include files supported by xgets; set to 0 to disable */ #ifndef MAXINCLUDEFILES #define MAXINCLUDEFILES 5 #endif /* ** Maximum hash table fullness percentage. Larger numbers trade space ** for time. **/ #ifndef MAXPCT #define MAXPCT 70 /* Expand table when 70% full */ #endif /* ** Maximum number of "string" characters that can be defined in a ** language (affix) file. Don't forget that an upper/lower string ** character counts as two! */ #ifndef MAXSTRINGCHARS #define MAXSTRINGCHARS 512 #endif /* MAXSTRINGCHARS */ /* ** Maximum length of a "string" character. The default is appropriate for ** nroff-style characters starting with a backslash. */ #ifndef MAXSTRINGCHARLEN #define MAXSTRINGCHARLEN 10 #endif /* MAXSTRINGCHARLEN */ /* ** the terminal mode for ispell, set to CBREAK or RAW ** */ #ifndef TERM_MODE #define TERM_MODE CBREAK #endif /* ** Define this if you want your columns of words to be of equal length. ** This will spread short word lists across the screen instead of down it. */ #ifndef EQUAL_COLUMNS #undef EQUAL_COLUMNS #endif /* EQUAL_COLUMNS */ /* ** This is the extension that will be added to backup files */ #ifndef BAKEXT #define BAKEXT ".bak" #endif /* ** Define this if you want your personal dictionary sorted. This may take ** a long time for very large dictionaries. Dictionaries larger than ** SORTPERSONAL words will not be sorted. Define SORTPERSONAL as zero ** to disable this feature. */ #ifndef SORTPERSONAL #define SORTPERSONAL 4000 #endif /* ** Define this if you want to use the shell for interpretation of commands ** issued via the "L" command, "^Z" under System V, and "!". If this is ** not defined then a direct fork()/exec() will be used in place of the ** normal system(). This may speed up these operations greatly on some ** systems. */ #ifndef USESH #undef USESH #endif /* USESH */ /* ** Maximum language-table search size. Smaller numbers make ispell ** run faster, at the expense of more memory (the lowest reasonable value ** is 2). If a given character appears in a significant position in ** more than MAXSEARCH suffixes, it will be given its own index table. ** If you change this, define INDEXDUMP in lookup.c to be sure your ** index table looks reasonable. */ #ifndef MAXSEARCH #define MAXSEARCH 4 #endif /* ** Define this if you want to be able to type any command at a "type space ** to continue" prompt. */ #ifndef COMMANDFORSPACE #undef COMMANDFORSPACE #endif /* COMMANDFORSPACE */ /* ** Memory-allocation increment. Buildhash allocates memory in chunks ** of this size, and then subdivides it to get its storage. This saves ** much malloc execution time. A good number for this is the system ** page size less the malloc storage overhead. ** ** Define this to zero to revert to using malloc/realloc. This is normally ** useful only on systems with limited memory. */ #ifndef MALLOC_INCREMENT #define MALLOC_INCREMENT (4096 - 8) #endif /* ** Maximum number of "hits" expected on a word. This is basically the ** number of different ways different affixes can produce the same word. ** For example, with "english.aff", "brothers" can be produced 3 ways: ** "brothers," "brother+s", or "broth+ers". If this is too low, no major ** harm will be done, but ispell may occasionally forget a capitalization. */ #ifndef MAX_HITS #define MAX_HITS 10 #endif /* ** Maximum number of capitalization variations expected in any word. ** Besides the obvious all-lower, all-upper, and capitalized versions, ** this includes followcase variants. If this is too low, no real ** harm will be done, but ispell may occasionally fail to suggest a ** correct capitalization. */ #ifndef MAX_CAPS #define MAX_CAPS 10 #endif /* MAX_CAPS */ /* Define this to ignore spelling check of entire LaTeX bibliography listings */ #ifndef IGNOREBIB #undef IGNOREBIB #endif /* ** Default nroff and TeX special characters. Normally, you won't want to ** change this; instead you would override it in the language-definition ** file. */ #ifndef TEXSPECIAL #define TEXSPECIAL "()[]{}<>\\$*.%" #endif #ifndef NRSPECIAL #define NRSPECIAL "().\\*" #endif /* ** Default tags after which TeX mode ignores one (skip1) and two (skip2) ** arguments */ #ifndef TEXSKIP1 #ifdef IGNOREBIB #define TEXSKIP1 "end,vspace,hspace,cite,shortcite,ref,eqref,parbox,label,input,nocite,include,includeonly,documentstyle,documentclass,usepackage,selectlanguage,pagestyle,thispagestyle,pagenumbering,value,arabic,roman,Roman,alph,Alph,fnsymbol,stepcounter,refstepcounter,newcounter,addtocontents,newenvironment,renewenvironment,newtheorem,theoremstyle,color,colorbox,textcolor,pagecolor,enlargethispage,stretch,scalebox,rotatebox,includegraphics,symbol,settowidth,settoheight,settodepth,bibliography,bibitem,hyphenation,pageref,psfig" #else /* IGNOREBIB */ #define TEXSKIP1 "end,vspace,hspace,cite,shortcite,ref,eqref,parbox,label,input,nocite,include,includeonly,documentstyle,documentclass,usepackage,selectlanguage,pagestyle,thispagestyle,pagenumbering,value,arabic,roman,Roman,alph,Alph,fnsymbol,stepcounter,refstepcounter,newcounter,addtocontents,newenvironment,renewenvironment,newtheorem,theoremstyle,color,colorbox,textcolor,pagecolor,enlargethispage,stretch,scalebox,rotatebox,includegraphics,symbol,settowidth,settoheight,settodepth,hyphenation,pageref,psfig" #endif /* IGNOREBIB */ #endif /* TEXSKIP1 */ #ifndef TEXSKIP2 #define TEXSKIP2 "rule,setcounter,addtocounter,setlength,addtolength,settowidth" #endif /* TEXSKIP2 */ /* ** Environment variables used to override TEXSKIP1 and TEXSKIP2 */ #ifndef TEXSKIP1VAR #define TEXSKIP1VAR "TEXSKIP1" #endif /* TEXSKIP1VAR */ #ifndef TEXSKIP2VAR #define TEXSKIP2VAR "TEXSKIP2" #endif /* TEXSKIP2VAR */ /* ** Default tags between which HTML mode ignores text */ #ifndef HTMLIGNORE #define HTMLIGNORE "code,samp,kbd,pre,listing,address,style,script" #endif /* ** Variable used to override HTMLIGNORE */ #ifndef HTMLIGNOREVAR #define HTMLIGNOREVAR "HTMLIGNORE" #endif /* HTMLIGNOREVAR */ /* ** Default tag fields which HTML mode always checks */ #ifndef HTMLCHECK #define HTMLCHECK "alt" #endif /* HTMLCHECK */ /* ** Variable used to override HTMLCHECK */ #ifndef HTMLCHECKVAR #define HTMLCHECKVAR "HTMLCHECK" #endif /* HTMLCHECKVAR */ /* ** Defaults for certain command-line flags. */ #ifndef DEFNOBACKUPFLAG #define DEFNOBACKUPFLAG 0 /* Don't suppress backup file */ #endif /* ** DEFTEXFLAG should really be named DEFAULT_DEFORMATTER, but isn't for ** historical reasons. **/ #ifndef DEFTEXFLAG #define DEFTEXFLAG DEFORMAT_NROFF /* Default to nroff mode */ #endif /* ** Define this if you want ispell to place a limitation on the maximum ** size of the screen. On windowed workstations with very large windows, ** the size of the window can be too much of a good thing, forcing the ** user to look back and forth between the bottom and top of the screen. ** If MAX_SCREEN_SIZE is nonzero, screens larger than this will be treated ** as if they have only MAX_SCREEN_SIZE lines. A good value for this ** variable is 24 or 30. Define it as zero to suppress the feature. */ #ifndef MAX_SCREEN_SIZE #define MAX_SCREEN_SIZE 0 #endif /* ** The next three variables are used to provide a variable-size context ** display at the bottom of the screen. Normally, the user will see ** a number of lines equal to CONTEXTPCT of his screen, rounded down ** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines ** of context). The context will never be greater than MAXCONTEXT or ** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT ** and MINCONTEXT to the same value. To round context percentages up, ** define CONTEXTROUNDUP. ** ** Warning: don't set MAXCONTEXT ridiculously large. There is a ** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently ** 1K or larger, this can create a remarkably large executable. */ #ifndef CONTEXTPCT #define CONTEXTPCT 10 /* Use 10% of the screen for context */ #endif #ifndef MINCONTEXT #define MINCONTEXT 2 /* Always show at least 2 lines of context */ #endif #ifndef MAXCONTEXT #define MAXCONTEXT 10 /* Never show more than 10 lines of context */ #endif #ifndef CONTEXTROUNDUP #undef CONTEXTROUNDUP /* Don't round context up */ #endif /* ** Define this if you want the context lines to be displayed at the ** bottom of the screen, the way they used to be, rather than at the top. */ #ifndef BOTTOMCONTEXT #undef BOTTOMCONTEXT #endif /* BOTTOMCONTEXT */ /* ** Define this if you want the "mini-menu," which gives the most important ** options at the bottom of the screen, to be the default (in any case, it ** can be controlled with the "-M" switch). */ #ifndef MINIMENU #undef MINIMENU #endif /* ** You might want to change this to zero if your users want to check ** single-letter words against the dictionary. However, you should try ** some sample runs using the -W switch before you try it out; you'd ** be surprised how many single letters appear in documents. If you increase ** MINWORD beyond 1, don't say I didn't warn you that it was a bad idea. */ #ifndef MINWORD #define MINWORD 1 /* Words this short and shorter are always ok */ #endif /* ** ANSI C compilers are supposed to provide an include file, ** "stdlib.h", which gives function prototypes for all library ** routines. Define NO_STDLIB_H if you have a compiler that claims to ** be ANSI, but doesn't provide this include file. */ #ifndef NO_STDLIB_H #ifndef __STDC__ #define NO_STDLIB_H #endif /* __STDC__ */ #endif /* NO_STDLIB_H */ /* ** Not all systems have the same definitions for R_OK and W_OK ** flags for calling `access'. If the defaults below are not ** good for your system, define different values in "local.h". ** Usually, the system header defines these. */ #ifndef R_OK #define R_OK 4 #endif #ifndef W_OK #define W_OK 2 #endif /* ** Default mode to give to output files if the mode of the input file ** cannot be determined. There should be no need to change this. */ #ifndef DEFAULT_FILE_MODE #define DEFAULT_FILE_MODE 0644 #endif /* DEFAULT_FILE_MODE */ /* ** The following define is used by the ispell developer to help ** double-check the software. Leave it undefined on other systems ** unless you are especially fond of warning messages, or are pursuing ** an inexplicable bug that might be related to a type mismatch. */ #ifndef GENERATE_LIBRARY_PROTOS #undef GENERATE_LIBRARY_PROTOS #endif /* GENERATE_LIBRARY_PROTOS */ /* ** Symbols below this point are generally intended to cater to ** idiosyncracies of specific machines and operating systems. ** ** MS-DOS users should also define HAS_RENAME, above, if appropriate. ** ** Define PIECEMEAL_HASH_WRITES if your system can't handle huge write ** operations. This is known to be a problem on MS-DOS systems when ** a 16-bit compiler is used to compile Ispell (but not with DJGPP or ** EMX). */ #ifndef PIECEMEAL_HASH_WRITES #undef PIECEMEAL_HASH_WRITES #endif /* PIECEMEAL_HASH_WRITES */ /* ** Redefine GETKEYSTROKE() to getkey() on some MS-DOS systems where ** getchar() doesn't operate properly in raw mode. */ #ifndef GETKEYSTROKE #define GETKEYSTROKE() getchar () #endif /* GETKEYSTROKE */ /* ** Define MSDOS_BINARY_OPEN to 0x8000 on MS-DOS systems. This can be ** done by adding "#include fcntl.h" to your local.h file. */ #ifndef MSDOS_BINARY_OPEN #ifdef O_BINARY #define MSDOS_BINARY_OPEN O_BINARY #else /* O_BINARY */ #define MSDOS_BINARY_OPEN 0 #endif /* O_BINARY */ #endif /* MSDOS_BINARY_OPEN */ /* ** Environment variable to use to locate the home directory. On DOS ** systems you might want to set this to ISPELL_HOME to avoid ** conflicts with other programs that look for a HOME environment ** variable; on all other systems it should be just HOME. */ #ifndef HOME #define HOME "HOME" #endif /* HOME */ /* ** On MS-DOS systems, define PDICTHOME to be the name of a directory ** to be used to contain the personal dictionary (.ispell_english, ** etc.). On other systems, you can leave it undefined. */ #ifndef PDICTHOME #undef PDICTHOME #endif /* PDICTHOME */ /* ** On MS-DOS systems, you can rename the following variables so that ** ispell's files have 3-character suffixes. Note that, if you do ** this, you will have to redefine any variable above that incorporates ** one of the suffixes. (Most MS-DOS environments will silently truncate ** excess characters beyond the 8+3 limit, so you usually don't need to ** change the suffixes just because they are longer than 3 characters.) */ #ifndef HASHSUFFIX #define HASHSUFFIX ".hash" #endif /* HASHSUFFIX */ #ifndef STATSUFFIX #define STATSUFFIX ".stat" #endif /* STATSUFFIX */ /* ** MS-DOS and MS-Windows systems can use either '/' or '\\' for ** a directory separator in file names. */ #ifndef IS_SLASH #ifdef MSDOS #define IS_SLASH(c) ((c) == '/' || (c) == '\\') #else /* MSDOS */ #define IS_SLASH(c) ((c) == '/') #endif /* MSDOS */ #endif /* IS_SLASH */ #ifndef EXEEXT #define EXEEXT "" #endif #endif /* CONFIG_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/makedent.c0000644000000000000000000000007410332505743014573 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/makedent.c0000444003214100001440000010315210332505743015635 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: makedent.c,v 1.60 2005/11/03 22:14:26 geoff Exp $"; #endif /* * Copyright 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: makedent.c,v $ * Revision 1.60 2005/11/03 22:14:26 geoff * When combining capitals, insert new variants at the end of the variant * list. This maintains the order of variants in the personal dictionary. * * Revision 1.59 2005/04/20 23:16:32 geoff * Rename some variables to make them more meaningful. * * Revision 1.58 2005/04/14 23:11:36 geoff * Move initck from ispell.c. * * Revision 1.57 2005/04/14 15:19:37 geoff * Stick in a couple of strategic const declarations. * * Revision 1.56 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.55 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.54 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.53 2001/06/14 09:11:11 geoff * Use a non-conflicting macro for bzero to avoid compilation problems on * smarter compilers. * * Revision 1.52 2000/08/22 10:52:25 geoff * Fix a whole bunch of signed/unsigned discrepancies. * * Revision 1.51 1999/01/18 03:28:37 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.50 1999/01/07 01:23:09 geoff * Update the copyright. * * Revision 1.49 1999/01/03 01:46:39 geoff * Add support for the "plain" deformatters. * * Revision 1.48 1998/07/06 05:03:39 geoff * Don't issue bad-flag messages in -a mode; it confuses emacs * * Revision 1.47 1997/12/02 06:24:58 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.46 1995/11/08 05:09:20 geoff * Allow sgml as a deformatter type. * * Revision 1.45 1994/12/27 23:08:52 geoff * Add code to makedent to reject words that contain non-word characters. * This helps protect people who use ISO 8-bit characters when ispell * isn't configured for that option. * * Revision 1.44 1994/10/25 05:46:20 geoff * Fix some incorrect declarations in the lint versions of some routines. * * Revision 1.43 1994/09/16 03:32:34 geoff * Issue an error message for bad affix flags * * Revision 1.42 1994/02/07 04:23:43 geoff * Correctly identify the deformatter when changing file types * * Revision 1.41 1994/01/25 07:11:55 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #include int makedent P ((unsigned char * lbuf, int lbuflen, struct dent * ent)); long whatcap P ((ichar_t * word)); int addvheader P ((struct dent * ent)); int combinecaps P ((struct dent * hdr, struct dent * newent)); static void forcevheader P ((struct dent * hdrp, struct dent * oldp, struct dent * newp)); static int combine_two_entries P ((struct dent * hdrp, struct dent * oldp, struct dent * newp)); static int acoversb P ((struct dent * enta, struct dent * entb)); void upcase P ((ichar_t * string)); void lowcase P ((ichar_t * string)); void chupcase P ((unsigned char * s)); static int issubset P ((struct dent * ent1, struct dent * ent2)); static void combineaffixes P ((struct dent * ent1, struct dent * ent2)); void toutent P ((FILE * outfile, struct dent * hent, int onlykeep)); static void toutword P ((FILE * outfile, unsigned char * word, struct dent * cent)); static void flagout P ((FILE * outfile, int flag)); int stringcharlen P ((unsigned char * bufp, int canonical)); int strtoichar P ((ichar_t * out, unsigned char * in, int outlen, int canonical)); int ichartostr P ((unsigned char * out, const ichar_t * in, int outlen, int canonical)); ichar_t * strtosichar P ((unsigned char * in, int canonical)); unsigned char * ichartosstr P ((const ichar_t * in, int canonical)); char * printichar P ((int in)); #ifndef ICHAR_IS_CHAR ichar_t * icharcpy P ((ichar_t * out, ichar_t * in)); int icharlen P ((ichar_t * str)); int icharcmp P ((ichar_t * s1, ichar_t * s2)); int icharncmp P ((ichar_t * s1, ichar_t * s2, int n)); #endif /* ICHAR_IS_CHAR */ int findfiletype P ((char * name, int searchnames, int * deformatter)); void initckch P ((const char * wchars)); static int has_marker; /* * Fill in a directory entry, including setting the capitalization flags, and * allocate and initialize memory for the d->word field. Returns -1 * if there was trouble. The input word must be in canonical form. */ int makedent (lbuf, lbuflen, d) unsigned char * lbuf; int lbuflen; struct dent * d; { ichar_t ibuf[INPUTWORDLEN + MAXAFFIXLEN]; ichar_t * ip; unsigned char * p; int bit; int len; /* Strip off any trailing newlines and returns */ len = (int) strlen ((char *) lbuf) - 1; while (len >= 0 && (lbuf[len] == '\n' || lbuf[len] == '\r')) lbuf[len--] = '\0'; d->next = NULL; /* WARNING: flagfield might be the same as mask! See ispell.h. */ d->flagfield = 0; (void) BZERO ((char *) d->mask, sizeof (d->mask)); d->flagfield |= USED; d->flagfield &= ~KEEP; p = (unsigned char *) index ((char *) lbuf, hashheader.flagmarker); if (p != NULL) *p = 0; /* ** Convert the word to an ichar_t and back; this makes sure that ** it is in canonical form and thus that the length is correct. */ if (strtoichar (ibuf, lbuf, INPUTWORDLEN * sizeof (ichar_t), 1) || ichartostr (lbuf, ibuf, lbuflen, 1)) { (void) fprintf (stderr, WORD_TOO_LONG ((char *) lbuf)); return (-1); } /* ** Make sure the word is well-formed (contains only legal characters). */ for (ip = ibuf; *ip != 0; ip++) { if (!iswordch (*ip)) { /* Boundary characters are legal as long as they're not at edges */ if (!isboundarych (*ip) || ip == ibuf || ip[1] == 0) { (void) fprintf (stderr, MAKEDENT_C_BAD_WORD_CHAR, MAYBE_CR (stderr), (char *) lbuf, MAYBE_CR (stderr)); return -1; } } } len = (int) strlen ((char *) lbuf); /* ** Figure out the capitalization rules from the capitalization of ** the sample entry. */ d->flagfield |= whatcap (ibuf); if (len > INPUTWORDLEN - 1) { (void) fprintf (stderr, WORD_TOO_LONG ((char *) lbuf)); return (-1); } d->word = mymalloc ((unsigned) len + 1); if (d->word == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) lbuf, MAYBE_CR (stderr)); return -1; } (void) strcpy ((char *) d->word, (char *) lbuf); if (captype (d->flagfield) != FOLLOWCASE) chupcase (d->word); if (p == NULL) return (0); p++; while (*p != '\0' && *p != '\n') { bit = CHARTOBIT ((unsigned char) *p); if (bit >= 0 && bit <= LARGESTFLAG) SETMASKBIT (d->mask, bit); else if (!aflag) (void) fprintf (stderr, BAD_FLAG, MAYBE_CR (stderr), (unsigned char) *p, MAYBE_CR (stderr)); p++; if (*p == hashheader.flagmarker) p++; /* Handle old-format dictionaries too */ } return (0); } /* ** Classify the capitalization of a sample entry. Returns one of the ** four capitalization codes ANYCASE, ALLCAPS, CAPITALIZED, or FOLLOWCASE. */ long whatcap (word) register ichar_t * word; { register ichar_t * p; for (p = word; *p; p++) { if (mylower (*p)) break; } if (*p == '\0') return ALLCAPS; else { for ( ; *p; p++) { if (myupper (*p)) break; } if (*p == '\0') { /* ** No uppercase letters follow the lowercase ones. ** If there is more than one uppercase letter, it's ** "followcase". If only the first one is capitalized, ** it's "capitalize". If there are no capitals ** at all, it's ANYCASE. */ if (myupper (word[0])) { for (p = word + 1; *p != '\0'; p++) { if (myupper (*p)) return FOLLOWCASE; } return CAPITALIZED; } else return ANYCASE; } else return FOLLOWCASE; /* .../lower/upper */ } } /* ** Add a variant-capitalization header to a word. This routine may be ** called even for a followcase word that doesn't yet have a header. ** ** Returns 0 if all was ok, -1 if allocation error. */ int addvheader (dp) register struct dent * dp; /* Entry to update */ { register struct dent * tdent; /* Copy of entry */ /* ** Add a second entry with the correct capitalization, and then make ** dp into a special dummy entry. */ tdent = (struct dent *) mymalloc (sizeof (struct dent)); if (tdent == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) dp->word, MAYBE_CR (stderr)); return -1; } *tdent = *dp; if (captype (tdent->flagfield) != FOLLOWCASE) tdent->word = NULL; else { /* Followcase words need a copy of the capitalization */ tdent->word = mymalloc ((unsigned int) strlen ((char *) tdent->word) + 1); if (tdent->word == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) dp->word, MAYBE_CR (stderr)); myfree ((char *) tdent); return -1; } (void) strcpy ((char *) tdent->word, (char *) dp->word); } chupcase (dp->word); dp->next = tdent; dp->flagfield &= ~CAPTYPEMASK; dp->flagfield |= (ALLCAPS | MOREVARIANTS); return 0; } /* ** Combine and resolve the entries describing two capitalizations of the same ** word. This may require allocating yet more entries. ** ** Hdrp is a pointer into a hash table. If the word covered by hdrp has ** variations, hdrp must point to the header. Newp is a pointer to temporary ** storage, and space is malloc'ed if newp is to be kept. The newp->word ** field must have been allocated with mymalloc, so that this routine may free ** the space if it keeps newp but not the word. ** ** Return value: 0 if the word was added, 1 if the word was combined ** with an existing entry, and -1 if trouble occurred (e.g., malloc). ** If 1 is returned, newp->word may have been be freed using myfree. ** ** Life is made much more difficult by the KEEP flag's possibilities. We ** must ensure that a !KEEP word doesn't find its way into the personal ** dictionary as a result of this routine's actions. However, a !KEEP ** word that has affixes must have come from the main dictionary, so it ** is acceptable to combine entries in that case (got that?). ** ** The net result of all this is a set of rules that is a bloody pain ** to figure out. Basically, we want to choose one of the following actions: ** ** (1) Add newp's affixes and KEEP flag to oldp, and discard newp. ** (2) Add oldp's affixes and KEEP flag to newp, replace oldp with ** newp, and discard newp. ** (3) Insert newp as a new entry in the variants list. If there is ** currently no variant header, this requires adding one. Adding a ** header splits into two sub-cases: ** ** (3a) If oldp is ALLCAPS and the KEEP flags match, just turn it ** into the header. ** (3b) Otherwise, add a new entry to serve as the header. ** To ease list linking, this is done by copying oldp into ** the new entry, and then performing (3a). ** ** After newp has been added as a variant, its affixes and KEEP ** flag are OR-ed into the variant header. ** ** So how to choose which? The default is always case (3), which adds newp ** as a new entry in the variants list. Cases (1) and (2) are symmetrical ** except for which entry is discarded. We can use case (1) or (2) whenever ** one entry "covers" the other. "Covering" is defined as follows: ** ** (4) For entries with matching capitalization types, A covers B ** if: ** ** (4a) B's affix flags are a subset of A's, or the KEEP flags ** match, and ** (4b) either the KEEP flags match, or A's KEEP flag is set. ** (Since A has more suffixes, combining B with it won't ** cause any extra suffixes to be added to the dictionary.) ** (4c) If the words are FOLLOWCASE, the capitalizations match ** exactly. ** ** (5) For entries with mismatched capitalization types, A covers B ** if (4a) and (4b) are true, and: ** ** (5a) B is ALLCAPS, or ** (5b) A is ANYCASE, and B is CAPITALIZED. ** ** For any "hdrp" without variants, oldp is the same as hdrp. Otherwise, ** the above tests are applied using each variant in turn for oldp. */ int combinecaps (hdrp, newp) struct dent * hdrp; /* Header of entry currently in dictionary */ register struct dent * newp; /* Entry to add */ { register struct dent * oldp; /* Current "oldp" entry */ register struct dent * tdent; /* Entry we'll add to the dictionary */ register int retval = 0; /* Return value from combine_two_entries */ /* ** First, see if we can combine the two entries (cases 1 and 2). If ** combine_two_entries does so, it will return 1. If it has trouble, ** it will return zero. */ oldp = hdrp; if ((oldp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == (ALLCAPS | MOREVARIANTS)) { while (oldp->flagfield & MOREVARIANTS) { oldp = oldp->next; retval = combine_two_entries (hdrp, oldp, newp); if (retval != 0) /* Did we combine them? */ break; } } else retval = combine_two_entries (hdrp, oldp, newp); if (retval == 0) { /* ** Couldn't combine the two entries. Add a new variant. We ** stick it at the end of the variant list because it's ** important to maintain order; this causes the personal ** dictionary to have a stable ordering. */ forcevheader (hdrp, oldp, newp); tdent = (struct dent *) mymalloc (sizeof (struct dent)); if (tdent == NULL) { (void) fprintf (stderr, MAKEDENT_C_NO_WORD_SPACE, MAYBE_CR (stderr), (char *) newp->word, MAYBE_CR (stderr)); return -1; } *tdent = *newp; for (oldp = hdrp; oldp->next != NULL && oldp->flagfield & MOREVARIANTS; oldp = oldp->next) ; tdent->next = oldp->next; oldp->next = tdent; oldp->flagfield |= MOREVARIANTS; combineaffixes (hdrp, newp); hdrp->flagfield |= (newp->flagfield & KEEP); if (captype (newp->flagfield) == FOLLOWCASE) tdent->word = newp->word; else { tdent->word = NULL; myfree (newp->word); /* newp->word isn't needed */ } } return retval; } /* ** The following routine implements steps 3a and 3b in the commentary ** for "combinecaps". */ static void forcevheader (hdrp, oldp, newp) register struct dent * hdrp; struct dent * oldp; struct dent * newp; { if ((hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) == ALLCAPS && ((oldp->flagfield ^ newp->flagfield) & KEEP) == 0) return; /* Caller will set MOREVARIANTS */ else if ((hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) != (ALLCAPS | MOREVARIANTS)) (void) addvheader (hdrp); } /* ** This routine implements steps 4 and 5 of the commentary for "combinecaps". ** ** Returns 1 if newp can be discarded, 0 if nothing done. */ static int combine_two_entries (hdrp, oldp, newp) struct dent * hdrp; /* (Possible) header of variant chain */ register struct dent * oldp; /* Pre-existing dictionary entry */ register struct dent * newp; /* Entry to possibly combine */ { if (acoversb (oldp, newp)) { /* newp is superfluous. Drop it, preserving affixes and keep flag */ combineaffixes (oldp, newp); oldp->flagfield |= (newp->flagfield & KEEP); hdrp->flagfield |= (newp->flagfield & KEEP); myfree (newp->word); return 1; } else if (acoversb (newp, oldp)) { /* ** oldp is superfluous. Replace it with newp, preserving affixes and ** the keep flag. */ combineaffixes (newp, oldp); newp->flagfield |= (oldp->flagfield & (KEEP | MOREVARIANTS)); hdrp->flagfield |= (newp->flagfield & KEEP); newp->next = oldp->next; /* ** We really want to free oldp->word, but that might be part of ** "hashstrings". So we'll futz around to arrange things so we can ** free newp->word instead. This depends very much on the fact ** that both words are the same length. */ if (oldp->word != NULL) (void) strcpy ((char *) oldp->word, (char *) newp->word); myfree (newp->word); /* No longer needed */ newp->word = oldp->word; *oldp = *newp; /* We may need to add a header if newp is followcase */ if (captype (newp->flagfield) == FOLLOWCASE && (hdrp->flagfield & (CAPTYPEMASK | MOREVARIANTS)) != (ALLCAPS | MOREVARIANTS)) (void) addvheader (hdrp); return 1; } else return 0; } /* ** Determine if enta covers entb, according to the rules in steps 4 and 5 ** of the commentary for "combinecaps". */ static int acoversb (enta, entb) register struct dent * enta; /* "A" in the rules */ register struct dent * entb; /* "B" in the rules */ { int subset; /* NZ if entb is a subset of enta */ if ((subset = issubset (entb, enta)) != 0) { /* entb is a subset of enta; thus enta might cover entb */ if (((enta->flagfield ^ entb->flagfield) & KEEP) != 0 && (enta->flagfield & KEEP) == 0) /* Inverse of condition (4b) */ return 0; } else { /* not a subset; KEEP flags must match exactly (both (4a) and (4b)) */ if (((enta->flagfield ^ entb->flagfield) & KEEP) != 0) return 0; } /* Rules (4a) and (4b) are satisfied; check for capitalization match */ if (((enta->flagfield ^ entb->flagfield) & CAPTYPEMASK) == 0) { if (captype (enta->flagfield) != FOLLOWCASE /* Condition (4c) */ || strcmp ((char *) enta->word, (char *) entb->word) == 0) return 1; /* Perfect match */ else return 0; } else if (subset == 0) /* No flag subset, refuse */ return 0; /* ..near matches */ else if (captype (entb->flagfield) == ALLCAPS) return 1; else if (captype (enta->flagfield) == ANYCASE && captype (entb->flagfield) == CAPITALIZED) return 1; else return 0; } void upcase (s) register ichar_t * s; { while (*s) { *s = mytoupper (*s); s++; } } void lowcase (s) register ichar_t * s; { while (*s) { *s = mytolower (*s); s++; } } /* * Upcase variant that works on normal strings. Note that it is a lot * slower than the normal upcase. The input must be in canonical form. */ void chupcase (s) unsigned char * s; { ichar_t * is; is = strtosichar (s, 1); upcase (is); (void) ichartostr (s, is, strlen ((char *) s) + 1, 1); } /* ** See if one affix field is a subset of another. Returns NZ if ent1 ** is a subset of ent2. The KEEP flag is not taken into consideration. */ static int issubset (ent1, ent2) register struct dent * ent1; register struct dent * ent2; { /* The following is really testing for MASKSIZE > 1, but cpp can't do that */ #if MASKBITS > 32 register int flagword; #ifdef FULLMASKSET #define MASKMAX MASKSIZE #else #define MASKMAX MASKSIZE - 1 #endif /* FULLMASKSET */ for (flagword = MASKMAX; --flagword >= 0; ) { if ((ent1->mask[flagword] & ent2->mask[flagword]) != ent1->mask[flagword]) return 0; } #endif /* MASKBITS > 32 */ #ifdef FULLMASKSET return ((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1]) == ent1->mask[MASKSIZE - 1]); #else if (((ent1->mask[MASKSIZE - 1] & ent2->mask[MASKSIZE - 1]) ^ ent1->mask[MASKSIZE - 1]) & ~ALLFLAGS) return 0; else return 1; #endif /* FULLMASKSET */ } /* ** Add ent2's affix flags to ent1. */ static void combineaffixes (ent1, ent2) register struct dent * ent1; register struct dent * ent2; { /* The following is really testing for MASKSIZE > 1, but cpp can't do that */ #if MASKBITS > 32 register int flagword; if (ent1 == ent2) return; /* MASKMAX is defined in issubset, just above */ for (flagword = MASKMAX; --flagword >= 0; ) ent1->mask[flagword] |= ent2->mask[flagword]; #endif /* MASKBITS > 32 */ #ifndef FULLMASKSET ent1->mask[MASKSIZE - 1] |= ent2->mask[MASKSIZE - 1] & ~ALLFLAGS; #endif } /* ** Write out a dictionary entry, including capitalization variants. ** If onlykeep is true, only those variants with KEEP set will be ** written. */ void toutent (toutfile, hent, onlykeep) register FILE * toutfile; struct dent * hent; register int onlykeep; { register struct dent * cent; ichar_t wbuf[INPUTWORDLEN + MAXAFFIXLEN]; cent = hent; if (strtoichar (wbuf, cent->word, INPUTWORDLEN, 1)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) cent->word)); for ( ; ; ) { if (!onlykeep || (cent->flagfield & KEEP)) { switch (captype (cent->flagfield)) { case ANYCASE: lowcase (wbuf); toutword (toutfile, ichartosstr (wbuf, 1), cent); break; case ALLCAPS: if ((cent->flagfield & MOREVARIANTS) == 0 || cent != hent) { upcase (wbuf); toutword (toutfile, ichartosstr (wbuf, 1), cent); } break; case CAPITALIZED: lowcase (wbuf); wbuf[0] = mytoupper (wbuf[0]); toutword (toutfile, ichartosstr (wbuf, 1), cent); break; case FOLLOWCASE: toutword (toutfile, cent->word, cent); break; } } if (cent->flagfield & MOREVARIANTS) cent = cent->next; else break; } } static void toutword (toutfile, word, cent) register FILE * toutfile; unsigned char * word; register struct dent * cent; { register int bit; has_marker = 0; (void) fprintf (toutfile, "%s", (char *) word); for (bit = 0; bit < LARGESTFLAG; bit++) { if (TSTMASKBIT (cent->mask, bit)) flagout (toutfile, BITTOCHAR (bit)); } (void) fprintf (toutfile, "\n"); } static void flagout (toutfile, flag) register FILE * toutfile; int flag; { if (!has_marker) (void) putc (hashheader.flagmarker, toutfile); has_marker = 1; (void) putc (flag, toutfile); } /* * If the string under the given pointer begins with a string character, * return the length of that "character". If not, return 0. * May be called any time, but it's best if "isstrstart" is first * used to filter out unnecessary calls. * * As a side effect, "laststringch" is set to the number of the string * found, or to -1 if none was found. This can be useful for such things * as case conversion. */ int stringcharlen (bufp, canonical) unsigned char * bufp; int canonical; /* NZ if input is in canonical form */ { #ifdef SLOWMULTIPLY static unsigned char * sp[MAXSTRINGCHARS]; static int inited = 0; #endif /* SLOWMULTIPLY */ register unsigned char * bufcur; register unsigned char * stringcur; register int stringno; register int lowstringno; register int highstringno; int dupwanted; #ifdef SLOWMULTIPLY if (!inited) { inited = 1; for (stringno = 0; stringno < MAXSTRINGCHARS; stringno++) sp[stringno] = &hashheader.stringchars[stringno][0]; } #endif /* SLOWMULTIPLY */ lowstringno = 0; highstringno = hashheader.nstrchars - 1; dupwanted = canonical ? 0 : defstringgroup; while (lowstringno <= highstringno) { stringno = (lowstringno + highstringno) >> 1; #ifdef SLOWMULTIPLY stringcur = sp[stringno]; #else /* SLOWMULTIPLY */ stringcur = &hashheader.stringchars[stringno][0]; #endif /* SLOWMULTIPLY */ bufcur = bufp; while (*stringcur) { if (*bufcur++ != *stringcur) break; /* ** We can't use autoincrement above because of the ** test below. */ stringcur++; } if (*stringcur == '\0') { if (hashheader.groupnos[stringno] == dupwanted) { /* We have a match */ laststringch = hashheader.stringdups[stringno]; #ifdef SLOWMULTIPLY return stringcur - sp[stringno]; #else /* SLOWMULTIPLY */ return stringcur - &hashheader.stringchars[stringno][0]; #endif /* SLOWMULTIPLY */ } else --stringcur; } /* No match - choose which side to search on */ if (*--bufcur < *stringcur) highstringno = stringno - 1; else if (*bufcur > *stringcur) lowstringno = stringno + 1; else if (dupwanted < hashheader.groupnos[stringno]) highstringno = stringno - 1; else lowstringno = stringno + 1; } laststringch = -1; return 0; /* Not a string character */ } /* * Convert an external string to an ichar_t string. * * Returns NZ if the output string overflowed. */ int strtoichar (out, in, outlen, canonical) register ichar_t * out; /* Where to put result */ register unsigned char * in; /* String to convert */ int outlen; /* Size of output buffer, *BYTES* */ int canonical; /* NZ if input is in canonical form */ { register int len; /* Length of next character */ outlen /= sizeof (ichar_t); /* Convert to an ichar_t count */ for ( ; --outlen > 0 && *in != '\0'; in += len) { if (l1_isstringch (in, len, canonical)) *out++ = SET_SIZE + laststringch; else *out++ = *in; } *out = 0; return outlen <= 0; } /* * Convert an ichar_t string to an external string. * * WARNING: the resulting string may wind up being longer than the * original. In fact, even the sequence strtoichar->ichartostr may * produce a result longer than the original, because the output form * may use a different string type set than the original input form. * * Returns NZ if the output string overflowed. */ int ichartostr (out, in, outlen, canonical) register unsigned char * out; /* Where to put result */ register const ichar_t * in; /* String to convert */ int outlen; /* Size of output buffer, bytes */ int canonical; /* NZ for canonical form */ { register unsigned int ch; /* Next character to store */ register int i; /* Index into duplicates list */ register unsigned char * scharp; /* Pointer into a string char */ while (--outlen > 0 && (ch = *in++) != '\0') { if (ch < SET_SIZE) *out++ = (char) ch; else { ch -= SET_SIZE; if (!canonical) { for (i = hashheader.nstrchars; --i >= 0; ) { if (hashheader.groupnos[i] == defstringgroup && hashheader.stringdups[i] == ch) { ch = i; break; } } } scharp = hashheader.stringchars[(unsigned) ch]; while ((*out++ = *scharp++) != '\0') ; out--; } } *out = '\0'; return outlen <= 0; } /* * Convert a string to an ichar_t *, storing the result in a static area. */ ichar_t * strtosichar (in, canonical) unsigned char * in; /* String to convert */ int canonical; /* NZ if input is in canonical form */ { static ichar_t out[STRTOSICHAR_SIZE / sizeof (ichar_t)]; if (strtoichar (out, in, sizeof out, canonical)) (void) fprintf (stderr, WORD_TOO_LONG ((char *) in)); return out; } /* * Convert an ichar_t * to a string, storing the result in a static area. */ unsigned char * ichartosstr (in, canonical) const ichar_t * in; /* Internal string to convert */ int canonical; /* NZ for canonical conversion */ { static unsigned char out[ICHARTOSSTR_SIZE]; if (ichartostr (out, in, sizeof out, canonical)) (void) fprintf (stderr, WORD_TOO_LONG (out)); return out; } /* * Convert a single ichar to a printable string, storing the result in * a static area. */ char * printichar (in) int in; { static char out[MAXSTRINGCHARLEN + 1]; if (in < SET_SIZE) { out[0] = (char) in; out[1] = '\0'; } else (void) strcpy (out, (char *) hashheader.stringchars[(unsigned) in - SET_SIZE]); return out; } #ifndef ICHAR_IS_CHAR /* * Copy an ichar_t. */ ichar_t * icharcpy (out, in) register ichar_t * out; /* Destination */ register ichar_t * in; /* Source */ { ichar_t * origout; /* Copy of destination for return */ origout = out; while ((*out++ = *in++) != 0) ; return origout; } /* * Return the length of an ichar_t. */ int icharlen (in) register ichar_t * in; /* String to count */ { register int len; /* Length so far */ for (len = 0; *in++ != 0; len++) ; return len; } /* * Compare two ichar_t's. */ int icharcmp (s1, s2) register ichar_t * s1; register ichar_t * s2; { while (*s1 != 0) { if (*s1++ != *s2++) return *--s1 - *--s2; } return *s1 - *s2; } /* * Strncmp for two ichar_t's. */ int icharncmp (s1, s2, n) register ichar_t * s1; register ichar_t * s2; register int n; { while (--n >= 0 && *s1 != 0) { if (*s1++ != *s2++) return *--s1 - *--s2; } if (n < 0) return 0; else return *s1 - *s2; } #endif /* ICHAR_IS_CHAR */ int findfiletype (name, searchnames, deformatter) char * name; /* Name to look up in suffix table */ int searchnames; /* NZ to search name field of table */ int * deformatter; /* Where to set deformatter type */ { char * cp; /* Pointer into suffix list */ int cplen; /* Length of current suffix */ register unsigned int i; /* Index into type table */ int len; /* Length of the name */ len = strlen (name); if (searchnames) { for (i = 0; i < hashheader.nstrchartype; i++) { if (strcmp (name, (char *) chartypes[i].name) == 0) { if (deformatter != NULL) { if (strcmp (chartypes[i].deformatter, "plain") == 0) *deformatter = DEFORMAT_NONE; else if (strcmp (chartypes[i].deformatter, "tex") == 0) *deformatter = DEFORMAT_TEX; else if (strcmp (chartypes[i].deformatter, "sgml") == 0) *deformatter = DEFORMAT_SGML; else *deformatter = DEFORMAT_NROFF; } return i; } } } for (i = 0; i < hashheader.nstrchartype; i++) { for (cp = chartypes[i].suffixes; *cp != '\0'; cp += cplen + 1) { cplen = strlen (cp); if (len >= cplen && strcmp (&name[len - cplen], cp) == 0) { if (deformatter != NULL) { if (strcmp (chartypes[i].deformatter, "tex") == 0) *deformatter = DEFORMAT_TEX; else if (strcmp (chartypes[i].deformatter, "sgml") == 0) *deformatter = DEFORMAT_SGML; else *deformatter = DEFORMAT_NROFF; } return i; } } } return -1; } void initckch (wchars) const char * wchars; /* Characters in -w option, if any */ { register ichar_t c; char num[4]; for (c = 0; c < (ichar_t) (SET_SIZE + hashheader.nstrchars); ++c) { if (iswordch (c)) { if (!mylower (c)) { Try[Trynum] = c; ++Trynum; } } else if (isboundarych (c)) { Try[Trynum] = c; ++Trynum; } } if (wchars != NULL) { while (Trynum < SET_SIZE + MAXSTRINGCHARS && *wchars != '\0') { if (*wchars != 'n' && *wchars != '\\') { c = *wchars; ++wchars; } else { ++wchars; num[0] = '\0'; num[1] = '\0'; num[2] = '\0'; num[3] = '\0'; if (isdigit (wchars[0])) { num[0] = wchars[0]; if (isdigit (wchars[1])) { num[1] = wchars[1]; if (isdigit (wchars[2])) num[2] = wchars[2]; } } if (wchars[-1] == 'n') { wchars += strlen (num); c = atoi (num); } else { wchars += strlen (num); c = 0; if (num[0]) c = num[0] - '0'; if (num[1]) { c <<= 3; c += num[1] - '0'; } if (num[2]) { c <<= 3; c += num[2] - '0'; } } } c &= 0xFF; if (!hashheader.wordchars[c]) { hashheader.wordchars[c] = 1; hashheader.sortorder[c] = hashheader.sortval++; Try[Trynum] = c; ++Trynum; } } } } /* * The following routines are all dummies for the benefit of lint. */ #ifdef lint int TSTMASKBIT (mask, bit) MASKTYPE * mask; int bit; { return bit + (int) *mask; } void CLRMASKBIT (mask, bit) MASKTYPE * mask; int bit; { bit += (int) *mask; } void SETMASKBIT (mask, bit) MASKTYPE * mask; int bit; { bit += (int) *mask; } int BITTOCHAR (bit) int bit; { return bit; } int CHARTOBIT (ch) int ch; { return ch; } int myupper (ch) unsigned int ch; { return (int) ch; } int mylower (ch) unsigned int ch; { return (int) ch; } int myspace (ch) unsigned int ch; { return (int) ch; } int iswordch (ch) unsigned int ch; { return (int) ch; } int isboundarych (ch) unsigned int ch; { return (int) ch; } int isstringstart (ch) unsigned int ch; { return ch; } ichar_t mytolower (ch) unsigned int ch; { return (ichar_t) ch; } ichar_t mytoupper (ch) unsigned int ch; { return (ichar_t) ch; } #endif /* lint */ ispell-3.4.00/PaxHeaders.19408/languages0000644000000000000000000000013212466065110014522 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.798383192 30 ctime=1423469128.801383206 ispell-3.4.00/languages/0000755003214100001440000000000012466065110015646 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/PaxHeaders.19408/altamer0000644000000000000000000000013212466065110016147 xustar0030 mtime=1423469128.798383192 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/languages/altamer/0000755003214100001440000000000012466065110017273 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/altamer/PaxHeaders.19408/Makefile0000644000000000000000000000013212466001162017661 xustar0030 mtime=1423442546.603735112 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/languages/altamer/Makefile0000444003214100001440000003057712466001162020742 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.10 2015-02-08 16:42:26-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an alternate # American variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.10 2015-02-08 16:42:26-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.9 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.8 2005-04-14 14:27:39-07 geoff # Build english.5 as part of installation. # # Revision 1.7 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.6 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.5 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.4 1999/01/07 01:23:22 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.3 1994/08/31 05:58:56 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:43 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:46:22 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "altamer.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "altamer.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = altamer # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: altamersml.hash altamermed.hash normhashes: altamerlrg.hash altamerxlg.hash plushashes: altamersml+.hash altamermed+.hash plushashes: altamerlrg+.hash altamerxlg+.hash altamersml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.sml rm -f altamersml.hash $(BUILDHASH) altamer.sml $(DICTSRC)/$(AFFIXES) altamersml.hash altamersml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.sml+ rm -f altamersml+.hash $(BUILDHASH) altamer.sml+ $(DICTSRC)/$(AFFIXES) altamersml+.hash altamermed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.med rm -f altamermed.hash $(BUILDHASH) altamer.med $(DICTSRC)/$(AFFIXES) altamermed.hash altamermed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.med+ rm -f altamermed+.hash $(BUILDHASH) altamer.med+ $(DICTSRC)/$(AFFIXES) altamermed+.hash altamerlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.lrg rm -f altamerlrg.hash $(BUILDHASH) altamer.lrg $(DICTSRC)/$(AFFIXES) altamerlrg.hash altamerlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.lrg+ rm -f altamerlrg+.hash $(BUILDHASH) altamer.lrg+ $(DICTSRC)/$(AFFIXES) altamerlrg+.hash altamerxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.xlg rm -f altamerxlg.hash $(BUILDHASH) altamer.xlg $(DICTSRC)/$(AFFIXES) altamerxlg.hash altamerxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) altamer.xlg+ rm -f altamerxlg+.hash $(BUILDHASH) altamer.xlg+ $(DICTSRC)/$(AFFIXES) altamerxlg+.hash # # The eight dictionaries, altamer.sml through altamer.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: altamer.sml normdicts: altamer.med normdicts: altamer.lrg normdicts: altamer.xlg plusdicts: altamer.sml+ plusdicts: altamer.med+ plusdicts: altamer.lrg+ plusdicts: altamer.xlg+ altamer.sml: english.sml rm -f altamer.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml altamer.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml altamer.sml+: english.sml+ rm -f altamer.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ altamer.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ altamer.med: english.med rm -f altamer.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med altamer.med english.med: $(CONFIG) english.med: english.0 english.med: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med altamer.med+: english.med+ rm -f altamer.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ altamer.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ altamer.lrg: english.lrg rm -f altamer.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg altamer.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg altamer.lrg+: english.lrg+ rm -f altamer.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ altamer.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ altamer.xlg: english.xlg rm -f altamer.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg altamer.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg altamer.xlg+: english.xlg+ rm -f altamer.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ altamer.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: altamer.0 $(MAKE) -f $(DICTSRC)/Makefile \ 'VARIANTS=american altamer' \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.00/languages/PaxHeaders.19408/american0000644000000000000000000000013212466065110016301 xustar0030 mtime=1423469128.799383196 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/american/0000755003214100001440000000000012466065110017425 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/american/PaxHeaders.19408/Makefile0000644000000000000000000000013212466001146020015 xustar0030 mtime=1423442534.775630497 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/american/Makefile0000444003214100001440000003070212466001146021064 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 16:42:14-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an American # variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 16:42:14-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.10 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.9 2005-04-14 14:27:25-07 geoff # Build english.5 as part of installation. # # Revision 1.8 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.7 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1999/01/07 01:23:18 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.4 1995/01/08 23:24:15 geoff # Remember to set SHELLDEBUG when making dictcomponents. # # Revision 1.3 1994/08/31 05:58:53 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:40 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:46:10 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "american.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "american.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = american # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: americansml.hash americanmed.hash normhashes: americanlrg.hash americanxlg.hash plushashes: americansml+.hash americanmed+.hash plushashes: americanlrg+.hash americanxlg+.hash americansml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.sml rm -f americansml.hash $(BUILDHASH) american.sml $(DICTSRC)/$(AFFIXES) americansml.hash americansml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.sml+ rm -f americansml+.hash $(BUILDHASH) american.sml+ $(DICTSRC)/$(AFFIXES) americansml+.hash americanmed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.med rm -f americanmed.hash $(BUILDHASH) american.med $(DICTSRC)/$(AFFIXES) americanmed.hash americanmed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.med+ rm -f americanmed+.hash $(BUILDHASH) american.med+ $(DICTSRC)/$(AFFIXES) americanmed+.hash americanlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.lrg rm -f americanlrg.hash $(BUILDHASH) american.lrg $(DICTSRC)/$(AFFIXES) americanlrg.hash americanlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.lrg+ rm -f americanlrg+.hash $(BUILDHASH) american.lrg+ $(DICTSRC)/$(AFFIXES) americanlrg+.hash americanxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.xlg rm -f americanxlg.hash $(BUILDHASH) american.xlg $(DICTSRC)/$(AFFIXES) americanxlg.hash americanxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) american.xlg+ rm -f americanxlg+.hash $(BUILDHASH) american.xlg+ $(DICTSRC)/$(AFFIXES) americanxlg+.hash # # The eight dictionaries, american.sml through american.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: american.sml normdicts: american.med normdicts: american.lrg normdicts: american.xlg plusdicts: american.sml+ plusdicts: american.med+ plusdicts: american.lrg+ plusdicts: american.xlg+ american.sml: english.sml rm -f american.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml american.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml american.sml+: english.sml+ rm -f american.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ american.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ american.med: english.med rm -f american.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med american.med english.med: $(CONFIG) english.med: english.0 english.med: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med american.med+: english.med+ rm -f american.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ american.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ american.lrg: english.lrg rm -f american.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg american.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg american.lrg+: english.lrg+ rm -f american.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ american.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ american.xlg: english.xlg rm -f american.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg american.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg american.xlg+: english.xlg+ rm -f american.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ american.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: american.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=american \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.00/languages/PaxHeaders.19408/norsk0000644000000000000000000000013212466065110015656 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/norsk/0000755003214100001440000000000012466065110017002 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/norsk/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133017400 xustar0030 mtime=1423386715.386463071 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/norsk/Makefile0000444003214100001440000001126012465624133020445 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:07:14-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:58:48 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:09 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:48 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = norsk DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/Where0000644000000000000000000000007407504564601015607 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/languages/Where0000444003214100001440000000177107504564601016655 0ustar00geofffaculty00000000000000Ispell is distributed with dictionaries and affix files for the British and American variants of the English language. For other languages, you will need to download a dictionary and affix file for each language. (Affix files for languages other than English are no longer distributed with ispell, due to the difficulty of keeping them up to date.) If you install your dictionaries and affix files into the proper directories with correct Makefiles, you can add extra languages to the "LANGUAGES" variable in local.h and your extra dictionaries will be created automatically. To help you with this task, ispell is distributed with sample Makefiles for several common languages. To find dictionaries and affix files, visit the ispell dictionaries web page at: http://www.lasr.cs.ucla.edu/geoff/ispell-dictionaries.html This page is expected to move in the future, but a forwarding page will remain. More ispell information can be found at the ispell home page: http://www.lasr.cs.ucla.edu/geoff/ispell.html ispell-3.4.00/languages/PaxHeaders.19408/british0000644000000000000000000000013212466065110016166 xustar0030 mtime=1423469128.799383196 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/british/0000755003214100001440000000000012466065110017312 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/british/PaxHeaders.19408/Makefile0000644000000000000000000000013112466001174017702 xustar0029 mtime=1423442556.99783139 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/british/Makefile0000444003214100001440000003053412466001174020755 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 16:42:36-08 geoff Exp $ # # Copyright 1994, 2001, 2015, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile allows a single installation to build an British # variant of ispell's English dictionary. It depends on the # languages/english directory for most of its input files. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 16:42:36-08 geoff # Support DESTDIR. Get rid of the old munchlist-suppressing code and # references to english.5. Use symbolic links instead of hard links; # symbolic links are safer. # # Revision 1.10 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.9 2005-04-14 14:27:35-07 geoff # Build english.5 as part of installation. # # Revision 1.8 2005/04/14 13:25:20 geoff # Update license. Drop unsq. Changes from Ed Avis: Allow LIBDIR to be # a relative path. Allow symbolic links as a configuration option. # # Revision 1.7 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1999/01/07 01:23:20 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.4 1995/01/08 23:24:18 geoff # Remember to set SHELLDEBUG when making dictcomponents. # # Revision 1.3 1994/08/31 05:58:54 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.2 1994/05/17 06:37:42 geoff # Explicitly specify the affix files with a path so that initial # installation will work correctly. # # Revision 1.1 1994/04/27 02:45:55 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named as # "british.hash", where is the suffix of dictionary (e.g., # "med+"). The first-listed hash file will also be installed under # the name "british.hash". As a general rule, the dictionaries # needed to build the HASHFILES must be listed in the MASTERDICTS # variable. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff LANGUAGE = british # # DICTSRC specifies where the dictionary sources are found. You # should not have to change this. # DICTSRC = ../english # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) \ 'EXTRADICT=$(EXTRADICT)' 'DICTSRC=$(DICTSRC)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) $(LANGUAGE).hash @. $(CONFIG); \ set -x; \ cp $(DICTSRC)/english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES); \ for i in $(HASHFILES); do \ $$LINK -s $$i $(LANGUAGE).hash; \ break; \ done # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: britishsml.hash britishmed.hash normhashes: britishlrg.hash britishxlg.hash plushashes: britishsml+.hash britishmed+.hash plushashes: britishlrg+.hash britishxlg+.hash britishsml.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.sml rm -f britishsml.hash $(BUILDHASH) british.sml $(DICTSRC)/$(AFFIXES) britishsml.hash britishsml+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.sml+ rm -f britishsml+.hash $(BUILDHASH) british.sml+ $(DICTSRC)/$(AFFIXES) britishsml+.hash britishmed.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.med rm -f britishmed.hash $(BUILDHASH) british.med $(DICTSRC)/$(AFFIXES) britishmed.hash britishmed+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.med+ rm -f britishmed+.hash $(BUILDHASH) british.med+ $(DICTSRC)/$(AFFIXES) britishmed+.hash britishlrg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.lrg rm -f britishlrg.hash $(BUILDHASH) british.lrg $(DICTSRC)/$(AFFIXES) britishlrg.hash britishlrg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.lrg+ rm -f britishlrg+.hash $(BUILDHASH) british.lrg+ $(DICTSRC)/$(AFFIXES) britishlrg+.hash britishxlg.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.xlg rm -f britishxlg.hash $(BUILDHASH) british.xlg $(DICTSRC)/$(AFFIXES) britishxlg.hash britishxlg+.hash: $(BUILDHASH) $(DICTSRC)/$(AFFIXES) british.xlg+ rm -f britishxlg+.hash $(BUILDHASH) british.xlg+ $(DICTSRC)/$(AFFIXES) britishxlg+.hash # # The eight dictionaries, british.sml through british.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: british.sml normdicts: british.med normdicts: british.lrg normdicts: british.xlg plusdicts: british.sml+ plusdicts: british.med+ plusdicts: british.lrg+ plusdicts: british.xlg+ british.sml: english.sml rm -f british.sml @. $(CONFIG); \ set -x; \ $$LINK -s english.sml british.sml english.sml: $(CONFIG) english.sml: english.0 english.sml: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml british.sml+: english.sml+ rm -f british.sml+ @. $(CONFIG); \ set -x; \ $$LINK -s english.sml+ british.sml+ english.sml+: $(CONFIG) english.sml+: english.0 english.sml+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.sml+ british.med: english.med rm -f british.med @. $(CONFIG); \ set -x; \ $$LINK -s english.med british.med english.med: $(CONFIG) english.med: english.0 english.med: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med british.med+: english.med+ rm -f british.med+ @. $(CONFIG); \ set -x; \ $$LINK -s english.med+ british.med+ english.med+: $(CONFIG) english.med+: english.0 english.med+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.med+ british.lrg: english.lrg rm -f british.lrg @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg british.lrg english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg british.lrg+: english.lrg+ rm -f british.lrg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.lrg+ british.lrg+ english.lrg+: $(CONFIG) english.lrg+: english.0 english.lrg+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.lrg+ british.xlg: english.xlg rm -f british.xlg @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg british.xlg english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg british.xlg+: english.xlg+ rm -f british.xlg+ @. $(CONFIG); \ set -x; \ $$LINK -s english.xlg+ british.xlg+ english.xlg+: $(CONFIG) english.xlg+: english.0 english.xlg+: british.0 $(MAKE) -f $(DICTSRC)/Makefile VARIANTS=british \ 'EXTRADICT=$(EXTRADICT)' 'SHELLDEBUG=$(SHELLDEBUG)' \ 'AFFIXES=$(DICTSRC)/$(AFFIXES)' \ english.xlg+ # # Dependencies to create the components of the dictionaries, # preferably by linking. We create some components that we'll # never use because the master English Makefile requires them. # dictcomponents: english.0 dictcomponents: english.1 dictcomponents: english.2 dictcomponents: english.3 dictcomponents: american.0 dictcomponents: american.1 dictcomponents: american.2 dictcomponents: altamer.0 dictcomponents: altamer.1 dictcomponents: altamer.2 dictcomponents: british.0 dictcomponents: british.1 dictcomponents: british.2 english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 \ altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2: rm -f english.[0-3] american.[0-2] altamer.[012] british.[012] @set $(SHELLDEBUG); \ . $(CONFIG); \ for i in english.0 english.1 english.2 english.3 \ american.0 american.1 american.2 altamer.0 altamer.1 altamer.2 \ british.0 british.1 british.2; do \ $$LINK -s $(DICTSRC)/$$i . || $$LINK $(DICTSRC)/$$i . \ || cp $(DICTSRC)/$$i .; \ done clean: rm -f core *.hash *.stat *.cnt # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.[0-3] american.[0-3] altamer.[0-3] british.[0-3] rm -f *.sml *.sml+ *.med *.med+ *.lrg *.lrg+ *.xlg *.xlg+ ispell-3.4.00/languages/PaxHeaders.19408/dansk0000644000000000000000000000013212466065110015622 xustar0030 mtime=1423469128.799383196 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/dansk/0000755003214100001440000000000012466065110016746 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/dansk/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133017344 xustar0030 mtime=1423386715.361462902 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/dansk/Makefile0000444003214100001440000001116412465624133020414 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:08:01-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:59:01 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:15 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:28 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = dansk DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/fix8bit.c0000644000000000000000000000007410227330312016315 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/languages/fix8bit.c0000444003214100001440000003021610227330312017357 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: fix8bit.c,v 1.8 2005/04/13 23:52:42 geoff Exp $"; #endif /* * Copyright 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This is a stupid little program that can be used to convert 8-bit * characters to and from backslashed escape sequences. It is usually * more efficient to do this to affix files than to uuencode them for * transport. Ispell will read affix files in either format, so it is * merely personal preference as to which form to use. * * Usage: * * fix8bit {-7 | -8} < infile > outfile * * One of -7 and -8 must be specified. If -7 is given, any character * sequence that is not standard printable ASCII will be converted * into a backslashed octal sequence. If -8 is given, any backslashed * octal or hex sequence will be converted into the equivalent 8-bit * character. * * This program is not very smart. In particular, it makes no attempt * to understand comments, quoted strings, or similar constructs in * which you might not want conversion to take place. I suggest that * you "diff" the input against the output, and if you don't like the * result, correct it by hand. */ /* * $Log: fix8bit.c,v $ * Revision 1.8 2005/04/13 23:52:42 geoff * Clean up a bit of style, fix push_back to be tolerant of pushes while * there is still stuff on the queue, and make the octal coding conform * to C standards (i.e., don't require 3 digits), ill-advised though that * may be. * * Revision 1.7 2005/04/13 23:08:18 geoff * Ed Avis's improvements * * Revision 1.3 2001/11/07 18:59:26 epa98 * Rewrite of fix8bit.c prompted by SuSE's ispell-3.2.06-languages.patch. * I wanted to make sure the patch wouldn't break anything, so I wrote a * test suite, but doing that I found lots of other things that were * wrong, so I started trying to fix those... * * Makefile: fixed dependencies for fix8bit, added 'test' target. The * test suite checks fix8bit's pushback routines, runs test_fix8bit (see * below) and checks a couple of additional properties: fix8bit -8 | * fix8bit -7 == cat; fix8bit -7 | fix8bit -7 == fix8bit -7. * * fix8bit.c: rewrote to8bit() to better handle cases when the * backslashed sequence turns out to be illegal. The initial backslash * is printed and the remaining characters are pushed back to be read * again. This means that for example \\x41 will print as \A, in the * same way that !\x41 produces !A. It also handles escape sequences * cut off by EOF properly (again they are printed unchanged). This uses * a mini pushback library which has a test suite if you give main() the * argument --test-pushback. Also fixed the original problem with hex * sequences being miscomputed, which SuSE wrote the patch for. Added a * warning if the input already contains 8-bit chars (that would stop * -8 | -7 being identity). * * test_fix8bit: new file. This is a Perl script to run fix8bit -7 and * fix8bit -8 on every input file in test_data/ and check the results * against the expected results also in that directory. * * test_data/: new directory. Contains test cases, some written by hand * and some randomly generated by rand_gen. rand_gen tries to make 'well * behaved' input that doesn't muck up fix8bit -8 | fix8bit -7 or other * commands - but there are three flags you can use to tell it not to. * The random test cases have not been checked by hand, so they should be * used in addition to human-written ones. * * Revision 1.2 2001/10/05 14:22:30 epa98 * Imported 3.2.06.epa1 release. This was previously developed using * sporadic RCS for certain files, but I'm not really bothered about * rolling back beyond this release. * * Revision 1.6 2001/07/25 21:51:47 geoff * *** empty log message *** * * Revision 1.5 2001/07/23 20:43:38 geoff * *** empty log message *** * * Revision 1.4 1999/01/07 06:07:52 geoff * Update the copyright. * * Revision 1.3 1994/01/25 07:12:26 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include #include int main (); /* Convert to/from 8-bit sequences */ static void usage (); /* Issue a usage message */ static void to7bit (); /* Convert from 8-bit sequences */ static void to8bit (); /* Convert to 8-bit sequences */ static int get_char (); /* Get char with pushback */ static void push_back (); /* Push back character */ static void warn_not_8bit (); /* Warn if input isn't 8-bit */ extern void exit (); /* Terminate program */ /* * Maximum number of characters that get_char can push back */ #define MAX_PUSHED_BACK 3 static int num_pushed_back = 0; /* Amount of data in pushed_back */ static int pushed_back[MAX_PUSHED_BACK]; /* Characters that get_char has pushed back */ int main (argc, argv) /* Convert to/from 8-bit sequences */ int argc; /* Argument count */ char * argv[]; /* Argument vector */ { if (argc != 2) usage (); if (strcmp (argv[1], "-7") == 0) to7bit (); else if (strcmp (argv[1], "-8") == 0) to8bit (); else usage (); return 0; } static void usage () /* Issue a usage message */ { (void) fprintf (stderr, "Usage: fix8bit {-7 | -8} < infile > outfile\n"); exit (1); } static void to7bit () /* Convert from 8-bit sequences */ { int ch; /* Next character read from input */ while ((ch = getchar ()) != EOF) { ch &= 0xFF; if (ch >= 0x80) (void) printf ("\\%3.3o", (unsigned) ch); else (void) putchar (ch); } } static void to8bit () /* Convert to 8-bit sequences */ { int backch; /* Backslashed character being built */ int ch; /* Next character read from input */ int ch_1; /* First character after backslash */ int ch_2; /* Second character after backslash */ int ch_3; /* Third character after backslash */ while ((ch = get_char ()) != EOF) { ch &= 0xFF; if (ch != '\\') { /* Not a backslashed sequence */ if (ch >= 0x80) { fprintf(stderr, "warning: passing through 8-bit character unchanged: 0x%x\n", ch); } (void) putchar (ch); } else { /* * Collect a backslashed character. If we have to abandon * our reading because we got a bad character or EOF, * then we output the backslash (since it doesn't start a * legal escape sequence) and push back the remaining * characters for use next time. This is so that * \\x60 will become \` , for example. */ ch_1 = get_char (); switch (ch_1) { case 'x': case 'X': /* \x.. hex sequence. Check following character... */ ch_2 = get_char (); if (ch_2 >= '0' && ch_2 <= '9') backch = ch_2 - '0'; else if (ch_2 >= 'a' && ch_2 <= 'f') backch = ch_2 - 'a' + 0xA; else if (ch_2 >= 'A' && ch_2 <= 'F') backch = ch_2 - 'A' + 0xA; else { /* * \x not followed by valid hex digit. Put * out the backslash, and push the rest back. * (We could output the x right now, but it's * safer for future refinements to push it * back, and the computational cost is * negligible.) */ (void) putchar ('\\'); if (ch_2 != EOF) (void) push_back (ch_2); (void) push_back (ch_1); break; } /* Third character after the backslash. */ ch_3 = get_char (); if (ch_3 >= '0' && ch_3 <= '9') backch = (backch << 4) | (ch_3 - '0'); else if (ch_3 >= 'a' && ch_3 <= 'f') backch = (backch << 4) | (ch_3 - 'a' + 0xA); else if (ch_3 >= 'A' && ch_3 <= 'F') backch = (backch << 4) | (ch_3 - 'A' + 0xA); else { /* * Not a hex digit. The rules require \x to * be followed by exactly two hex digits, so * we'll reject the entire sequence. Again, * we push back everything after the backslash * so that future modifications will be safer. */ (void) putchar ('\\'); if (ch_3 != EOF) (void) push_back (ch_3); (void) push_back (ch_2); (void) push_back (ch_1); break; } /* * All OK. Warn if necessary, and the output the * converted character. */ warn_not_8bit (backch); (void) putchar (backch); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': /* * We're starting a backslashed octal sequence. * We just got the first character, so do the second. * Octal is a bit more fun because the rules allow * variable-length sequences: \7a is the same as * \007a: a 7 (BEL) character followed by "a" (but * note that \10a is NOT the same as \0010a: the * first is a hex 8 (BS) followed by "A" while the * second is hex 1 (SOH) followed by "0a"). */ backch = ch_1 - '0'; ch_2 = get_char (); if (ch_2 >= '0' && ch_2 <= '7') backch = (backch << 3) | (ch_2 - '0'); else { (void) putchar (backch); if (ch_2 != EOF) (void) push_back (ch_2); break; } /* Third character. */ ch_3 = get_char (); if (ch_3 >= '0' && ch_3 <= '7') backch = (backch << 3) | (ch_3 - '0'); else { (void) putchar (backch); if (ch_3 != EOF) (void) push_back (ch_3); break; } /* All OK. */ warn_not_8bit (backch); (void) putchar (backch); break; default: /* * A backslash was followed by something that's * not a valid hex or octal code. Put out the * backslash, and push back the following * character. */ (void) putchar ('\\'); if (ch_1 != EOF) (void) push_back (ch_1); } } } } /* * Simple character input with limited-length pushback. * Unfortunately, ungetc() handles only a single character of * pushback, and we may need several. */ static int get_char () { if (num_pushed_back > 0) return pushed_back[--num_pushed_back]; else return getchar(); } /* * Push a character onto the push-back queue. */ static void push_back (ch) int ch; /* Character to push back */ { assert (num_pushed_back < MAX_PUSHED_BACK); pushed_back[num_pushed_back++] = ch; } /* * If a character isn't 8-bit, put out a warning. */ static void warn_not_8bit (ch) int ch; /* Character to test */ { if (ch < 0x80) fprintf(stderr, "warning: converted an escape sequence to " "a 7-bit character: 0x%x\n", ch); } ispell-3.4.00/languages/PaxHeaders.19408/francais0000644000000000000000000000013212466065110016310 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/francais/0000755003214100001440000000000012466065110017434 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/francais/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133020032 xustar0030 mtime=1423386715.379463024 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/francais/Makefile0000444003214100001440000001144612465624133021105 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.12 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.12 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.11 2005-04-13 17:06:51-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.10 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.9 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.8 1994/08/31 05:58:58 geoff # Create directories before installing into them. # # Revision 1.7 1994/02/22 06:09:14 geoff # Add SHELLDEBUG. # # Revision 1.6 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.5 1994/01/25 07:12:44 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = francais DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/deutsch0000644000000000000000000000013212466065110016161 xustar0030 mtime=1423469128.799383196 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/deutsch/0000755003214100001440000000000012466065110017305 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/deutsch/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133017703 xustar0030 mtime=1423386715.366462936 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/deutsch/Makefile0000444003214100001440000001426412465624133020757 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.15 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.15 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.14 2005-04-13 17:05:48-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.13 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.12 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.11 1994/08/31 05:58:47 geoff # Create directories before installing into them. # # Revision 1.10 1994/05/25 04:29:34 geoff # Purge Martin Schulz's obsolete e-mail address from the file. # # Revision 1.9 1994/02/22 06:09:08 geoff # Add SHELLDEBUG. # # Revision 1.8 1994/02/07 06:18:03 geoff # Use MAKE_SORTTMP when building the dictionary # # Revision 1.7 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.6 1994/01/25 07:12:30 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # The German dictionary I use is due to Martin Schulz, Moncton, New # Brunswick, Canada. It is not distributed with ispell due to its # size, but is available for ftp (see the languages/Where file for # locations). # # Martin's dictionary has been broken up into a number of sub-files # which can be combined to make a master dictionary. See the files # README or LIESMICH for more information on what these sub-files # contain. # # The DICTOPTIONS variable should be set to a list of one or more files, # separated by spaces, and selected from the following options: # # abkuerz.txt abweichend.txt compeng.txt elektronik.txt # geographie.txt infoabk.txt informatik.txt namen.txt # seltenes.txt technik.txt zusammen.txt # # # If you change DICTOPTIONS in your local.h file, you will have to do # "make dictclean" to clear out the old dictionary before you re-make. # DICTALWAYS = adjektive.txt worte.txt verben.txt DICTOPTIONS = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. Note that selection of # the affix file is closely related to the dictionary chosen; don't # change the affix file unless you know what you are doing! # AFFIXES = deutsch.aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: deutsch.hash install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f deutsch.aff deutsch.hash @. $(CONFIG); \ set -x; \ cp deutsch.aff deutsch.hash \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 deutsch.aff deutsch.hash deutsch.hash: $(BUILDHASH) $(AFFIXES) deutsch.dict rm -f deutsch.hash $(BUILDHASH) deutsch.dict $(AFFIXES) deutsch.hash $(AFFIXES): deutsch.7bit $(FIX8BIT) $(FIX8BIT) -8 < deutsch.7bit > $(AFFIXES) deutsch-alt.aff: deutsch-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < deutsch-alt.7bit > deutsch-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit deutsch.dict: $(DICTALWAYS) $(DICTOPTIONS) . $(CONFIG); \ eval sort -f -o deutsch.dict $$MAKE_SORTTMP \ $(DICTALWAYS) $(DICTOPTIONS) # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target allows you to clean out the combined # dictionary file. # dictclean: rm -f deutsch.dict # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/Makefile0000644000000000000000000000007410227330312016234 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/languages/Makefile0000444003214100001440000001136010227330312017275 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.6 2005/04/13 23:52:42 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # $Log: Makefile,v $ # Revision 1.6 2005/04/13 23:52:42 geoff # Update the license. Integrate Ed Avis's changes. # # Revision 1.5.1.1 2002/06/21 00:35:55 geoff # Edward Avis's changes # # Revision 1.3 2001/11/07 18:59:26 epa98 # Rewrite of fix8bit.c prompted by SuSE's ispell-3.2.06-languages.patch. # I wanted to make sure the patch wouldn't break anything, so I wrote a # test suite, but doing that I found lots of other things that were # wrong, so I started trying to fix those... # # Makefile: fixed dependencies for fix8bit, added 'test' target. The # test suite checks fix8bit's pushback routines, runs test_fix8bit (see # below) and checks a couple of additional properties: fix8bit -8 | # fix8bit -7 == cat; fix8bit -7 | fix8bit -7 == fix8bit -7. # # fix8bit.c: rewrote to8bit() to better handle cases when the # backslashed sequence turns out to be illegal. The initial backslash # is printed and the remaining characters are pushed back to be read # again. This means that for example \\x41 will print as \A, in the # same way that !\x41 produces !A. It also handles escape sequences # cut off by EOF properly (again they are printed unchanged). This uses # a mini pushback library which has a test suite if you give main() the # argument --test-pushback. Also fixed the original problem with hex # sequences being miscomputed, which SuSE wrote the patch for. Added a # warning if the input already contains 8-bit chars (that would stop # -8 | -7 being identity). # # test_fix8bit: new file. This is a Perl script to run fix8bit -7 and # fix8bit -8 on every input file in test_data/ and check the results # against the expected results also in that directory. # # test_data/: new directory. Contains test cases, some written by hand # and some randomly generated by rand_gen. rand_gen tries to make 'well # behaved' input that doesn't muck up fix8bit -8 | fix8bit -7 or other # commands - but there are three flags you can use to tell it not to. # The random test cases have not been checked by hand, so they should be # used in addition to human-written ones. # # Revision 1.2 2001/10/05 14:22:30 epa98 # Imported 3.2.06.epa1 release. This was previously developed using # sporadic RCS for certain files, but I'm not really bothered about # rolling back beyond this release. # # Revision 1.5 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.4 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.3 1994/01/25 07:12:25 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../config.sh FIX8BIT = ../fix8bit all: fix8bit install: fix8bit: $(CONFIG) fix8bit.c @. $(CONFIG); \ set -x; \ $$CC $$CFLAGS -o fix8bit fix8bit.c # Note that individual languages are cleaned from the top-level Makefile. clean: rm -f core *.log fix8bit ispell-3.4.00/languages/PaxHeaders.19408/svenska0000644000000000000000000000013212466065110016174 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/svenska/0000755003214100001440000000000012466065110017320 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/svenska/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133017716 xustar0030 mtime=1423386715.396463138 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/svenska/Makefile0000444003214100001440000001105312465624133020763 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.11 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.11 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.10 2005-04-13 17:08:11-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.9 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.8 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.7 1994/08/31 05:59:02 geoff # Create directories before installing into them. # # Revision 1.6 1994/02/22 06:09:16 geoff # Add SHELLDEBUG. # # Revision 1.5 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.4 1994/01/25 07:12:50 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = svenska DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/nederlands0000644000000000000000000000013212466065110016641 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/nederlands/0000755003214100001440000000000012466065110017765 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/nederlands/PaxHeaders.19408/Makefile0000644000000000000000000000013112465624133020362 xustar0029 mtime=1423386715.38346305 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/nederlands/Makefile0000444003214100001440000001126212465624133021432 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.9 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.9 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.8 2005-04-13 17:07:23-07 geoff # Update license. Drop unsq. Allow LIBDIR to be a relative path. # # Revision 1.7 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.6 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.5 1994/08/31 05:58:50 geoff # Create directories before installing into them. # # Revision 1.4 1994/02/22 06:09:11 geoff # Add SHELLDEBUG. # # Revision 1.3 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.2 1994/01/25 07:12:45 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = nederlands DICTIONARY = $(LANGUAGE).sml HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) $(BUILDHASH) $(DICTIONARY) $(AFFIXES) $(HASHFILE) $(AFFIXES): $(LANGUAGE).7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE).7bit > $(AFFIXES) $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/english0000644000000000000000000000013212466065110016153 xustar0030 mtime=1423469128.800383201 30 atime=1423469128.799383196 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/0000755003214100001440000000000012466065110017277 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/english/PaxHeaders.19408/altamer.20000644000000000000000000000013112465616723017752 xustar0029 mtime=1423384019.41185992 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/altamer.20000444003214100001440000000245512465616723021026 0ustar00geofffaculty00000000000000asafoetida bejewelled bejewelling bemedalled bimetallist bimetallistic calliper/S cancellable cancellous chiselling/S corbelling/S councilorship counsellee counsellorship cryptocrystaline crystalizability/MSU crystalizable/MSU crystalographical/Y cupellation cupeller/S disenthral/S driveller/S empanelled enamellist/S forejudgement/MS frivolled frivoller frivolling gambolled gambolling gavelled glamorless gruelled hiccupped hiccupping houselled/U hovelled impanelled indraught intercrystalization/MS intercrystalize/S interjudgement/MS jewellery/S judgemental judgementalism kennelled/U kernelled labellable lapelled libellant/S libelled libellee/S libelling libellist marshall/S medallist/S metallization/MS metallize/DGS microcrystaline microcrystalinity miocrystaline mislabelled monometallism monometallist nonacknowledgement/MS noncrystalizable/MS noncrystalized/MS noncrystalizing/MS overjudgement/MS penciller/S perilled phanerocrystaline photolabelled photolabeller photolabelling preacknowledgement/MS precancellation prejudgement/MS programmist/MS programmistic/S raveller/SU ravelling semicrystaline snobsnivelling subtotalled subtotalling superacknowledgement/MS teazelling tendrilled trammelled trammelling tranquillization/AMS trowelled trowelling weevilled woollenization/MS woollenize/S woollie woollybutt ispell-3.4.00/languages/english/PaxHeaders.19408/msgs.h0000644000000000000000000000007410757464547017401 xustar0030 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/msgs.h0000444003214100001440000003730610757464547020452 0ustar00geofffaculty00000000000000#ifndef MSGS_H_INCLUDED #define MSGS_H_INCLUDED /* * $Id: msgs.h,v 1.46 2008/02/22 06:19:19 geoff Exp $ * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* * Messages header file. * * This file contains all text strings that are written by any of the * C programs in the ispell package. The strings are collected here so that * you can have the option of translating them into your local language for * the benefit of your users. * * Anyone who goes to the effort of making a translation may wish to return * the translated strings to me, geoff@ITcorp.com, so that I can include * them in a later distribution under #ifdef control. * * Besides the strings in this header file, you may also want to translate * the strings in version.h, which give the version and copyright information. * However, any translation of these strings MUST accurately preserve the * legal rights under international law; you may wish to consult a lawyer * about this since you will be responsible for the results of any * incorrect translation. * * Most of the strings below are simple printf format strings. If the printf * takes more than one parameter, the string is given as a parameterized * macro in case your local language needs a different word order. */ /* * $Log: msgs.h,v $ * Revision 1.46 2008/02/22 06:19:19 geoff * Improve the hash overflow message. * * Revision 1.45 2005/04/28 00:19:48 geoff * Remove obsolete messages related to the count file. * * Revision 1.44 2005/04/26 23:57:22 geoff * Add double-inclusion protection * * Revision 1.43 2005/04/20 23:06:32 geoff * Add a new message and tweak an old one. * * Revision 1.42 2005/04/13 22:52:37 geoff * Update the license. Improve a couple of messages. * * Revision 1.41 2001/09/06 00:34:38 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.40 2001/07/25 21:51:47 geoff * *** empty log message *** * * Revision 1.39 2001/07/23 22:11:08 geoff * *** empty log message *** * * Revision 1.38 2001/07/23 20:43:37 geoff * *** empty log message *** * * Revision 1.37 2000/11/14 07:27:04 geoff * *** empty log message *** * * Revision 1.36 1999/01/07 01:58:14 geoff * Update the copyright. * * Revision 1.35 1999/01/03 01:51:19 geoff * Document the -F switch, and add messages needed in support of it. Also * fix the text of PARSE_Y_BAD_DEFORMATTER. * * Revision 1.34 1999/01/02 23:22:18 geoff * Add the -k switch * * Revision 1.33 1998/07/06 07:04:07 geoff * Clean up some minor problems in messages. Add DEFMT_C_NO_SPACE, and remove * PARSE_Y_8_BIT. * * Revision 1.32 1995/11/08 05:09:32 geoff * Fix the usage message to document the -h flag, and to document (mostly * by implication) the new interactive mode. * * Revision 1.31 1994/12/27 23:08:57 geoff * Add a message to be issued if a word contains illegal characters. * * Revision 1.30 1994/10/25 05:46:40 geoff * Improve a couple of error messages relating to affix flags. * * Revision 1.29 1994/10/04 03:46:23 geoff * Add a missing carriage return in the help message * * Revision 1.28 1994/09/16 05:07:00 geoff * Add the BAD_FLAG message, and start a sentence in another message with * an uppercase letter. * * Revision 1.27 1994/07/28 05:11:38 geoff * Log message for previous revision: add BHASH_C_ZERO_COUNT. * * Revision 1.26 1994/07/28 04:53:49 geoff * * Revision 1.25 1994/05/24 04:54:36 geoff * Add error messages for affix-flag checking. * * Revision 1.24 1994/01/25 07:12:42 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ /* * Produce either a CR or an empty string, depending on whether * stderr is a terminal device or not. Used when the message * could be printed to a redirected stream, to avoid the pesky ^M. */ #define MAYBE_CR(stream) (isatty (fileno (stream)) ? "\r" : "") /* * The following strings are used in numerous places: */ #define BAD_FLAG "%s\nIllegal affix flag character '%c'%s\n" #define CANT_OPEN "Can't open %s%s\n" #define CANT_CREATE "Can't create %s%s\n" #define WORD_TOO_LONG(w) "%s\nWord '%s' too long at line %d of %s, truncated%s\n", \ MAYBE_CR (stderr), w, __LINE__, __FILE__, \ MAYBE_CR (stderr) /* * The following strings are used in buildhash.c: */ #define BHASH_C_NO_DICT "No dictionary (%s)\n" #define BHASH_C_ZERO_COUNT "No words in dictionary\n" /* I think this message looks better when it's nearly 80 characters wide, * thus the ugly formatting in the next two defines. GK 9-87 */ #define BHASH_C_BAFF_1(max, excess) \ " Warning: this language table may exceed the maximum total affix length\nof %d by up to %d bytes. You should either increase MAXAFFIXLEN in local.h\nor shorten your largest affix/strip string difference. (This is the\n", \ max, excess #define BHASH_C_BAFF_2 \ "difference between the affix length and the strip length in a given\nreplacement rule, or the affix length if there is no strip string\nin that rule.)\n" #define BHASH_C_OVERFLOW "Hash table overflowed by %d word(s).\nYou probably need to run your dictionary through munchlist.\n" #define BHASH_C_CANT_OPEN_DICT "Can't open dictionary\n" #define BHASH_C_NO_SPACE "Couldn't allocate hash table\n" #define BHASH_C_COLLISION_SPACE "\ncouldn't allocate space for collision\n" #define BHASH_C_COUNTING "Counting words in dictionary ...\n" #define BHASH_C_WORD_COUNT "\n%d words\n" #define BHASH_C_USAGE "Usage: buildhash [-s] dict-file aff-file hash-file\n\tbuildhash -c count aff-file\n" /* * The following strings are used in correct.c: */ #define CORR_C_HELP_1 "Whenever a word is found that is not in the dictionary,%s\n" #define CORR_C_HELP_2 "it is printed on the first line of the screen. If the dictionary%s\n" #define CORR_C_HELP_3 "contains any similar words, they are listed with a number%s\n" #define CORR_C_HELP_4 "next to each one. You have the option of replacing the word%s\n" #define CORR_C_HELP_5 "completely, or choosing one of the suggested words.%s\n" /* You may add HELP_6 through HELP_9 if your language needs more lines */ #define CORR_C_HELP_6 "" #define CORR_C_HELP_7 "" #define CORR_C_HELP_8 "" #define CORR_C_HELP_9 "" #define CORR_C_HELP_COMMANDS "%s\nCommands are:%s\n%s\n" #define CORR_C_HELP_R_CMD "R Replace the misspelled word completely.%s\n" #define CORR_C_HELP_BLANK "Space Accept the word this time only.%s\n" #define CORR_C_HELP_A_CMD "A Accept the word for the rest of this session.%s\n" #define CORR_C_HELP_I_CMD "I Accept the word, and put it in your private dictionary.%s\n" #define CORR_C_HELP_U_CMD "U Accept and add lowercase version to private dictionary.%s\n" #define CORR_C_HELP_0_CMD "0-n Replace with one of the suggested words.%s\n" #define CORR_C_HELP_L_CMD "L Look up words in system dictionary.%s\n" #define CORR_C_HELP_X_CMD "X Write the rest of this file, ignoring misspellings,%s\n and start next file.%s\n" #define CORR_C_HELP_Q_CMD "Q Quit immediately. Asks for confirmation.%s\n Leaves file unchanged.%s\n" #define CORR_C_HELP_BANG "! Shell escape.%s\n" #define CORR_C_HELP_REDRAW "^L Redraw screen.%s\n" #define CORR_C_HELP_SUSPEND "^Z Suspend program.%s\n" #define CORR_C_HELP_HELP "? Show this help screen.%s\n" #define CORR_C_HELP_TYPE_SPACE "-- Type space to continue --" #define CORR_C_FILE_LABEL " File: %s" #define CORR_C_READONLY "[READONLY]" #define CORR_C_MINI_MENU "[SP] R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help\r\n" #define CORR_C_CONFIRM_QUIT "Are you sure you want to throw away your changes? " #define CORR_C_REPLACE_WITH "Replace with: " #define CORR_C_LOOKUP_PROMPT "Lookup string ('*' is wildcard): " #define CORR_C_MORE_PROMPT "-- more --" #define CORR_C_BLANK_MORE "\r \r" #define CORR_C_END_LOOK "--end--" #define CORR_C_SHORT_SOURCE "ispell: unexpected EOF on unfiltered version of input%s\n" /* * The following strings are used in defmt.c: */ #define DEFMT_C_TEX_MATH_ERROR "***ERROR in parsing TeX math mode!%s\n" #define DEFMT_C_LR_MATH_ERROR "***ERROR in LR to math-mode switch.%s\n" #define DEFMT_C_NO_SPACE "Ran out of space building keyword list%s\n" /* * The following strings are used in icombine.c: */ #define ICOMBINE_C_BAD_TYPE "icombine: unrecognized formatter type '%s'\n" #define ICOMBINE_C_USAGE "Usage: icombine [-T suffix] [aff-file] < wordlist\n" /* * The following strings are used in ispell.c: */ #define ISPELL_C_USAGE1 "Usage: %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -H | -x | -b | -S | -B | -C | -P | -m | -Lcontext | -M | -N | -Ttype | -ktype kws | -Fpgm | -V] file .....\n" #define ISPELL_C_USAGE2 " %s [-dfile | -pfile | -wchars | -Wn | -t | -n | -H | -Ttype | -ktype kws | -Fpgm] -l\n" #ifndef USG #define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -H | -s | -B | -C | -P | -m | -Ttype | -ktype kws | -Fpgm] [-a | -A]\n" #else #define ISPELL_C_USAGE3 " %s [-dfile | -pfile | -ffile | -Wn | -t | -n | -H | -B | -C | -P | -m | -Ttype | -ktype kws | -Fpgm] [-a | -A]\n" #endif #define ISPELL_C_USAGE4 " %s [-dfile] [-wchars | -Wn] -c\n" #define ISPELL_C_USAGE5 " %s [-dfile] [-wchars] -e[1-4]\n" #define ISPELL_C_USAGE6 " %s [-dfile] [-wchars] -D\n" #define ISPELL_C_USAGE7 " %s -v\n" #define ISPELL_C_TEMP_DISAPPEARED "temporary file disappeared or is unreadable (%s)%s\n" #define ISPELL_C_BAD_TYPE "ispell: unrecognized formatter type '%s'\n" #define ISPELL_C_NO_FILE "ispell: specified file does not exist\n" #define ISPELL_C_NO_FILES "ispell: specified files do not exist\n" #define ISPELL_C_CANT_WRITE "Warning: Can't write to %s%s\n" #define ISPELL_C_OPTIONS_ARE "Compiled-in options:\n" #define ISPELL_C_UNEXPECTED_FD "ispell: unexpected fd while opening '%s'%s\n" #define ISPELL_C_NO_OPTIONS_SPACE "ispell: no memory to read default options\n" /* * The following strings are used in lookup.c: */ #define LOOKUP_C_CANT_READ "Trouble reading hash table %s%s\n" #define LOOKUP_C_NULL_HASH "Null hash table %s%s\n" #define LOOKUP_C_SHORT_HASH(name, gotten, wanted) \ "Truncated hash table %s: got %d bytes, expected %d%s\n", \ name, gotten, wanted #define LOOKUP_C_BAD_MAGIC(name, wanted, gotten) \ "Illegal format hash table %s - expected magic 0x%x, got 0x%x%s\n", \ name, wanted, gotten #define LOOKUP_C_BAD_MAGIC2(name, wanted, gotten) \ "Illegal format hash table %s - expected magic2 0x%x, got 0x%x%s\n", \ name, wanted, gotten #define LOOKUP_C_BAD_OPTIONS(gotopts, gotchars, gotlen, wantedopts, wantedchars, wantedlen) \ "Hash table options don't agree with buildhash - 0x%x/%d/%d vs. 0x%x/%d/%d%s\n", \ gotopts, gotchars, gotlen, \ wantedopts, wantedchars, wantedlen #define LOOKUP_C_NO_HASH_SPACE "Couldn't allocate space for hash table%s\n" #define LOOKUP_C_BAD_FORMAT "Illegal format hash table%s\n" #define LOOKUP_C_NO_LANG_SPACE "Couldn't allocate space for language tables%s\n" /* * The following strings are used in makedent.c: */ #define MAKEDENT_C_NO_WORD_SPACE "%s\nCouldn't allocate space for word '%s'%s\n" #define MAKEDENT_C_BAD_WORD_CHAR "%s\nWord '%s' contains illegal characters%s\n" /* * The following strings are used in parse.y: */ #define PARSE_Y_NO_WORD_STRINGS "wordchars statement may not specify string characters" #define PARSE_Y_UNMATCHED "Unmatched charset lengths" #define PARSE_Y_NO_BOUNDARY_STRINGS "boundarychars statement may not specify string characters" #define PARSE_Y_LONG_STRING "String character is too long" #define PARSE_Y_NULL_STRING "String character must have nonzero length" #define PARSE_Y_MANY_STRINGS "Too many string characters" #define PARSE_Y_NO_SUCH_STRING "No such string character" #define PARSE_Y_MULTIPLE_STRINGS "Alternate string character is already defined" #define PARSE_Y_WRONG_STRING_COUNT \ "Alternate string characters must map one-to-one to base string characters" #define PARSE_Y_LENGTH_MISMATCH "Upper and lower versions of string character must be same length" #define PARSE_Y_WRONG_NROFF "Incorrect character count in nroffchars statement" #define PARSE_Y_WRONG_TEX "Incorrect character count in TeXchars statement" #define PARSE_Y_DOUBLE_COMPOUND "Compoundwords option may only appear once" #define PARSE_Y_LONG_FLAG "Flag must be single character" #define PARSE_Y_BAD_FLAG "Flag must be alphabetic" #define PARSE_Y_DUP_FLAG "Duplicate flag" #define PARSE_Y_NO_SPACE "Out of memory" #define PARSE_Y_NEED_BLANK "Single characters must be separated by a blank" #define PARSE_Y_MANY_CONDS "Too many conditions; 8 maximum" #define PARSE_Y_EOF "Unexpected EOF in quoted string" #define PARSE_Y_LONG_QUOTE "Quoted string too long, max 256 characters" #define PARSE_Y_ERROR_FORMAT(file, lineno, error) \ "%s line %d: %s\n", file, lineno, error #define PARSE_Y_MALLOC_TROUBLE "yyopen: trouble allocating memory\n" #define PARSE_Y_UNGRAB_PROBLEM "Internal error: ungrab buffer overflow" #define PARSE_Y_BAD_DEFORMATTER "Deformatter must be 'plain', 'nroff', 'tex', or 'sgml'" #define PARSE_Y_BAD_NUMBER "Illegal digit in number" /* * The following strings are used in term.c: */ #define TERM_C_SMALL_SCREEN "Screen too small: need at least %d lines\n" #define TERM_C_NO_BATCH "Can't deal with non-interactive use yet.\n" #define TERM_C_CANT_FORK "Couldn't fork, try later.%s\n" #define TERM_C_TYPE_SPACE "\n-- Type space to continue --" /* * The following strings are used in tgood.c: */ #define TGOOD_C_NO_SPACE "Out of memory while generating expansions" /* * The following strings are used in tree.c: */ #define TREE_C_CANT_UPDATE "Warning: Cannot update personal dictionary (%s)%s\n" #define TREE_C_NO_SPACE "Ran out of space for personal dictionary%s\n" #define TREE_C_TRY_ANYWAY "Continuing anyway (with reduced performance).%s\n" /* * The following strings are used in unsq.c: */ #define UNSQ_C_BAD_COUNT "Illegal count character 0x%x\n" #define UNSQ_C_SURPRISE_EOF "Unexpected EOF\n" #endif /* MSGS_H_INCLUDED */ ispell-3.4.00/languages/english/PaxHeaders.19408/english.10000644000000000000000000000013212465612632017751 xustar0030 mtime=1423381914.311300454 30 atime=1423469128.799383196 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/english.10000444003214100001440000043674612465612632021042 0ustar00geofffaculty00000000000000aardvark/MS Aaron/M abalone/MS abdicate/DGNS Abe/M abeyant Abigail/M Abilene/M Abner/M abominate/DGNSX aborning aboveboard Abraham Abrams Abramson abrasive/PSY abscissae abstemiously abstinent/Y abusable academician academicianship Acapulco acceptant accessors accordant/Y accrual/S acetic achromatic Ackerman acknowledgeable ACM's acquiescent/Y acquisitive/Y acrylate Acta actinic actinide actuaries Adam/MS Adamson adaptivity addend Addison addle/DGS Addressograph adios Adirondack/S adjectival/Y adjoint administrable administrate/DGS administratrix Adonis Adriatic adsorbate adsorptive/Y advert/DGS adware/MS Aegean Aeneid aeolian affordability afforest/A afforestation Afghani/MS Afrikaans afro AFS afterbirth afterglow afterlife aftershave Agatha Aggie/S Agnes agribusiness agriculturalists aha ahem ahoy AI ain't Aires airfare airmass airpark airplay airtight/P Ajax Akron Al/MR ala Alabamans Alameda Alamo/S Alan/M Albany albatross/S Albert Alberta Alberto Albuquerque Alcoa aldehyde Aldrin/M Alec Aleck aleph Aleut alewife Alexander/S Alexandra/M Alexandre Alexandria Alfa Algiers Alhambra Alicia Alistair/M alit Allan Allegheny/S allegiant Allen/M Allendale Allentown Allison alliterate/DGS allocable/U allotropic allspice Allstate alluvial alluvium almagest almshouses alp Alsatian/S altercate altho altimeter/MS ALU Alvarez Alvin/M AMA Amadeus Amarillo/M ambrose ambrosia ambulant Americanism amethyst amethystine Amherst/M aminobenzoic ammeter/MS Amoco/M amoebae Amos amperage/S Ampex/M AMS Amy/M anachronistic anaglyph Anaheim/M analgesic anamorphic anastigmatic Andean/M Andersen/M Anderson/M Andes Andover/M Andre/M Andrew/MS androgynous Andromeda Andy/M Angeles angelfish Angelina Angeline Angelo Angie angiosperm Anglia Anglo angora Angus Anheuser anhydride anhydrite animadversion animadvert Anita Ankara Ann Anna Annapolis Anne/M anneal/DGRSZ annotator/MS annuity/S annular/Y annulus anodic ANSI's Anson antacid Antares antebellum Anthony anthropogenic anthropometric/S anthropometry anticlimactic Antietam antifreeze antigone antilogs antimatter/M Antioch antipasto antiperspirant antiquary antisemitic antisemitism/M antithetic antivirus Antoine Antoinette/M Antony antonym/MS anytime apache/S Apache's apolar Apollinaire Appaloosas apparency Appian applesauce Appleton/M applicate Appomattox apposite/NPVY appositive/Y appropriable Aquinas Araby arbitrage/R arboretum Arcadia arcana archetypical/Y Archibald Archimedes archway/S ARCO arcsine arctangent Arcturus ardency areawide arenaceous Argonne Argus aria/MS Ariadne Aristotelean Arkansan Arlene Arlington armada armature/S Armonk Arnold/M ARPA ARPA's Arpanet arrangeable arrear arrestee/MS arrowroot arsenate arsenide arsonist artesian Arthur articulable arty/PRY Aruba ascriptive ashame Asheville Ashland Ashley/M ashy/R Asimov/M asperity asphyxiate/N asplenium Assad assertional asshole/MS assignation/S assimilationist Assn associable assumability Assyria Astaire/S asteria astigmatic astigmatism Astor Astoria astraddle astrobiologist/MS astronautic astronomic astrophysicist/MS Atari athwart Atkins Atkinson Atlanta Atlantis ATMs Atreus attestation Attica attosecond/MS attributional audibility/I audiotape audiovisual/S Augean Augustan Augustine Augustus auntie Aurelius auric Auschwitz Australis australites autoloader automount/DRS autostart Aventine Aventino aviate/X aviatrix Avis Aviv Avogadro/M Avon awardee axiology azimuthal/Y Aztec Aztecan babbitt/DGS Babcock baboon/MS Babylon Babylonian/S babysitting baccarat Bacchus bachelorhood backarrow backboard backchaining backend/MS backfill/DGS backfire/DGMS backhand/DR backhanded/Y backlit backorder backplate/S backside backstop backwood badland badmen baggageman baggagemen Baghdad Bahama/S Bakelite Baker/M Bakersfield Baldwin baldy baleen Bali Balinese Ballard/MS ballfields Baltimore Balzac Bamberger Bambi bamboozle/DGS bamboozlement Bancroft bandaid bandoleers bandstop bangkok Bangor Baptiste Barbara/M Barcelona Barclay barefaced/PY barf barkeep/R Barnabas barnacle/D Barnard Barney barnful barnsful baronet barrette/MS Barron Barry/M Barrymore/S barstool/MS Barstow bartend Barth Bartholomew Bartlett/M Bartok Bascom baseband basemen baseplate Basie basilar basilisk basophilic Bassett bassist/MS bassoon/MS basswood Batavia bates batik Batista batwings Baudelaire Bauer Bauhaus Bavaria Bavarian/MS bayberry/S Bayesian Baylor Bayonne BCD beachcomber/S beachcombing/M beadsman beadworker beasties Beatrice Beauchamps Beaujolais Beaumont Beauregard beautician/S beaux Beaverton bebop Bechtel Becky Bedford bedmate/MS bedpan/MS bedstraw beechwood Beelzebub/M befuddlement begonia behemoths Beirut belate Belfast Belgrade Bella belladonna Bellatrix Belleville bellflower Bellwood bellyache/GR bellyfull Belmont Beloit belove Belton Beltsville belvedere bemuse/D bemused/Y Ben/M Bendix benefice beneficent/Y Benjamin Bennett/M Bennington Benny Benson Bentham Bentley/S Benz Beowulf berg/NRS Bergson beribbon Beringer Berkowitz Berkshire/S Berlioz Berlitz Bern Bernadine Bernard Bernardine Bernice Bernie Bernoulli Bernstein/M Berra berserk/R Bert Bertha Bertrand bespoke Bess Bessemer Bessie bestir bestirring bestubble/D betatron Betelgeuse Beth/M bethel Bethesda Bethlehem bethought betoken/DG bettor Betty/S bewhisker bezel Bhutan biaxial/Y bicep bichromate/D biconnected bicyclist/MS Biddle bidiagonal Bienville Bierce Bigelow biharmonic bilayer/S bilingualism Billie billionaire/MS billy/S bimetallic bimetallism Bimini bindery bindle Bingham Binghamton biochemist/S biograph bioinformatics biologic biomass biometric/S biometry biomolecule/S biophysic/S biophysical/Y biophysicist/S bioscience/S biosphere biostatistic/S biotic birdseed birdwatch birthfather/MS birthmother/MS birthparent/MS birthrate/MS Biscayne biserial bisexual/MSY bishopric Bismarck bistable bistate bisyllabic bittern bitternut bitterroot bitumen Black/M blackball/DGS blackbody/S Blackburn Blackfeet Blackman Blackmer Blackstone Blackwell/S bladdernut bladderwort Blair Blake Blakey blameworthy/P blanc Blanche Blanton blatancy blather/DGR blatting Blatz Blaze/M blazon/DGR bldg bleeps blest/U blindside/DGS Bloch/M blocky/R blog/MS blogged blogger blogging bloodbath/S bloodroot Bloomfield Bloomington blotch/S blowhole/MS blowtorch blueback bluebill bluebook bluebush bluegill bluegrass bluejacket Blvd boa/S Bobbie bobble/DGS Bobbsey bobcat/M Bobrow bobsled bobsledding bock bockwurst Bodenheim bodhisattva bodyweight Boeing Boer Bogart Bogartian bogey/DGS bogeymen bogging boggy Bogota bogy/S Boheme Bohemia Bohemian Bohr boilermaker/MS Boise bokeh/M bolivar bolo/S bolometer/MS Bolshevist Bolshevistic Bolshoi Bolton Boltzmann Bombay/M bombshell/MS bona Bonaparte Bonaventure boneless bongo Bonham Boniface bonito bonjour Bonn Bonneville Bonnie Bontempo bonzes boogie bookbind/GRZ bookend/S bookkeep bookmark/MRSZ bookplate/S Boole/M boomtown/S Boone boosterism bootblack/S Bootle bop bopping Bordeaux Borden Borealis Boreas Borg borosilicate Borroughs Bose boson bossy/PRS Bostitch Boswell botanic botfly bottommost botulin bouillon bountiful/PY boutique/S Bouvier Bowes bowie boxy/PR Boyce bpi BPS brachia brachium bracken brad Bradbury Bradford Bradley Bradshaw Brady braggadocio Brahms Brainard/S brakeman brakemen/M Branchville Brandeis Brandel Brandenburg Brandon brandywine Braniff Brannon Brasilia bratwurst Braun breadfruit/S breakneck breastfed breastfeed/G breastplate Brenda Brian/M bribery brickmason/S brickyard Bridewell Bridgeport Bridgetown Bridgewater Brien Brigadoon Brigham brimming brimstone Brinkley briny/PR Brisbane/M bristly/R bristol/S Britannic Britannica Brittany Britten/M broadloom Broadway Brock bronc/S bronchiolar bronchiolitis bronco/S Bronx broody/P Brookdale Brooke Brookfield Brookhaven Brooklyn Brookmont brookside brouhaha Browne Brownell Brownian Brubeck Bruce brucellosis bruin/MS Brunhilde Bruno brushwork Brussels Bruxelles Bryan Bryant Bryce Bryn BS BTW bubonic Buchanan Bucharest Buchwald buckaroo/S bucketful/MS buckeye buckhorn Bucky Budapest Budd Buddha Buddhism Buddhist/S Budweiser/S bufflehead bugaboo Bugatti bugbears bugeyed Bugzilla/M Buick Bulba bulblet Bulgaria Bulgarian bulimia bulimic bullfinch bullfrog bullhead/D bullheaded/PY bullhide bullseye bullshit bullwhackers bullyboy/S bulrush Bumbry Bundestag Bundy Bunsen/MS Bunyan/M Burbank/M burble/DGRS Burch burg/Z Burgundian Burgundy/S burlap burley Burlingame Burma Burmese Burne/S Burnett Burnside/S burrito/MS Burroughs burstiness Burt Burton Burundi Busch bushmaster Bushnell businesspeople/M businessperson/M businesswoman/M busyness butch butene butterball buttercup Butterfield buttermilk buttery buttonweed bypath Byrne byroad Byron/M Byronic Byronism Byzantine Byzantium cabal/S cabana/S cabaret/S cabbie/MS cabdriver/S Cabernet/MS cabinetmaker/MS cabinetry cacao cacciatore cackly CACM cacophonist cacophony cadaver cadaverous/Y caddy/S cadent cadenza cadet cadge/DGRS Cadillac/S cadmium cadre Caesar caffeine/M cagey/P cahoot/S Cain Caine cairn/DS Cairo Caitlin/M Cal calamitous/PY calcareous/PY calcify/DN calcite CalComp calculability/I calculable/IP calculi Calcutta/M Calder calfskin Calgary Calif californium Caligula caliphate calisthenic/S callable/A callback/S callee/M calligraph/RZ calligraphy calliope Callisto callow/P caloric calorimeter/MS calorimetric calorimetry Caltech Calumet calumniate/DN calumny calvary calve/G Calvinist calypso cam/S camaraderie camber/DG Cambodia camellias Camelot cameo/S cameraman cameramen Camille Camino Campbell/M Campbellsport campesinos campfire campground/S campsite/S Canadian/S Canaveral Canberra cancerous/Y candidacy Candide candlelight/R Candlewick canine/S Canis canister/S cannabis cannery/S cannibalism/M cannibalistic cannonball canny/PRY Canoga canonic canonist cant/DGRZ cantaloupe/MS canted/AI canteen/S canter/DGS Canterbury canticle cantilever/S Cantonese Canute canvasback Cap'n capacitate/IV Capet Capetown Capistrano capitalistic Capitan capitulate/DNS Cappy caprice Capricorn capsize/DGS capstan/S capstone capsule/DGS Capt captaincy captious/PY Caracas caramel caraway carbide carbine/S carbonaceous Carbondale Carbones carbonyl carborundum carboy carbuncle/D carcinogen/S carcinogenic carcinoma cardiology cardiomegaly cardiovascular careen/DG careerism caretaker/S careworn Caribbean caricature/DS caricaturist Carl/M Carla Carleton Carletonian carload/GS Carlos Carlsbad/MS Carlson Carlton Carlyle Carmichael carmine carnage carnal/Y carnality Carnegie carob Caroline/M Carolinian/S carouse/DGR carousel/MS carp/DGRS carpentry carping/Y carport carrageen carrel/S Carrie carrion carryon/MS Carson carte cartel/MS Carthage cartilage cartographer/S cartographic cartoonist/S cartwheel/DGMRS Carty Caruso carven casbah casebook/S casein casework/RZ Casey cashew/S cashmere casino/S Cassandra cassette/S Cassiopeia Cassite Cassius cassock/D castanet/S castigate/DNS castor castrate/DGNRSZ Castro cataclysmic Catalina catalysis catalytic catalytically catapult/DGS catastrophically catatonia catatonic Catawba catbird catcall/MS catchword/S catchy/R catechism catecholamine/S categoric catenate/N catfish catharsis Catherine cathodic catholicism Cathy catlike catnip Catskill/S cattail cattleman cattlemen catty/PRSY catwalk/MS Caucasian/S Caucasus Cauchy caucus/GS cauliflower/S caulk/RS causate/V causative/Y cautionary cavalcade/S cavalrymen caveman cavemen Cavendish cavernous/Y caviar cavil cavort/DG cayenne CD CDT Cecil Cecilia cede/DGR cedilla Celanese celebrant/S celerity celesta celli cello/MS cellophane cellphone/MS cellulose/S Celsius Celtic Cenozoic censorial centaur/S centenary centennial/Y centigrade/S Centralia centrality centrifugal/SY centrifugate/N centrist centroid/S ceramic/S cerate/D Cerberus cerebellum cerebrate/DGNSX ceremonious/PUY cerise cerium certiorari certitude/S cerulean Cervantes cervical cession Cessna cetera/S Cetus Ceylon Cezanne/S Chablis Chad Chaffey chainlike chairlady chairwoman/M chairwomen chaise chalkline chalky Chalmers chambermaid/S chamfer/DGS chamois champ/SZ Champlain Chancellorsville chancery/S chancy/PR Chandy/M Chang Channing chantey Chantilly chantry/S chaparral chaperone/S Chaplin Chapman chapping charisma charismatic charitably/U charlatan/MS Charles Charleston Charley Charlie/M Charlotte/M Charlottesville charred chartist/S chartreuse chartroom/S charwomen Charybdis chassis chastisement/S chastity/U chateaux Chattahoochee Chattanooga chatted chattel/S chatting chatty/PRY Chaucer Chautauqua chaw checkbox/MS checkerboard/S checklist/S checksummed checksumming checkup/S cheekbone/S cheeky/PRY cheerleader/S cheeseburger/MS cheesecloth/S cheesy/PR cheetah/S Chekhov chelate/DGNX chemic chemotherapy/M Chen Cheney/M Cheng Cheriton/M Cherokee/S Cheryl/M Chesapeake Cheshire Chesterfield Chesterton chevalier Chevrolet chevron/D Chevy Cheyenne/S chianti chic/PY Chicago/M Chicagoan/S Chicana/MS chicanery Chicano/MS Chickasaws chicory chiefdom/S chigger/S Chihuahua/MS chilblain/S childbearing childbirth/S childless/P childlike/P childrearing Chile/S chili chimera chimeric Chimiques chimp/MS chimpanzee/S china Chinaman Chinamen chinchilla Ching chinless Chinook chipboard chipped Chippendale chipper Chippewa chipping chiropractor/S Chisholm chitter/DGS chive/S chivying chlorate chloride/S chlorinate/DNS chloroform chlorophyll Choctaw/S choirboy/MS choirmaster chokeberry cholesterol cholinesterase chomp Chomsky/M choosy/R Chopin choppy/PRY chopstick/MS chorale/S chordal chordata chordate choreograph/DRZ choreographic choreography chorines chortle/DGS chow chowder/S Chris chrissake Christ Christendom Christenson Christianity Christie Christine/M Christlike Christopher/M Christy chromate chromatic/PS chromatogram/MS chromatograph chromatographic chromatography chrome/DGS chromic chromite chromium chromosphere chronically chronograph/S chronography chrysalis chrysanthemum/MS Chrysler chub/S chug/S chugging chumming chummy/PRY chunky/RY churchgoers churchgoing Churchill Churchillian churchmen churchwoman churchwomen churl/S chutney/S CIA ciao cicada/S Cicero Ciceronian cilia ciliate/DSY cinch/S Cincinnati Cinderella cinema/S cinematic Cinerama cinnabar circa Circe circlet circulant circulatory circumcise/DGNRSX circumcised/U circumferential/Y circumnavigate/DGNSX circumpolar circumscribe/DGS circumscriptions circumspection/S circumsphere circumvention/S citizenry citrate/D citric Citroen citron citrus/S cityscape/S citywide civet cladding Claire clairvoyance clamming clammy/PRY clamshell/S clandestine/PY clank/DG clanking/Y clannish/PY clapboard/S clapped clapping Clara Clare Claremont Clarence claret/S clarinet/S clarinetist/MS clarion Clark/M Clarke Clarridge classicist classificatory/Y classless/P classy/PRT clattery Claude Claudia Claudio Claus/N claustrophobia claustrophobic clave/MRS clavicle/MS clearcut clearheaded/PY clearinghouse Clearwater cleat/DGS clemence clemency/I Clemens clement/SY Clemente clemently/I Clemson clergymen cleric/S Cleveland clientele cliffhanger/MS cliffhanging Clifford cliffside/MS climactic climatological/Y climatology clinician/S clinometer/IMS Clint Clinton/M Clio clipboard/S Clive cloakroom/S clockwatcher cloddish/P clodhopper/MS clomp/DGS closeup/S clot clothbound clothesbrush clothesline/S clothesman clothesmen clothier clotted clotting cloture/DGS cloudburst/S cloy/G cloying/Y clubhouse clubroom/S clueful clueless clunky/PY Clyde Clytemnestra cm CMU CMU's coachmen coachwork coadjutor coagulable coalescence coalescent coastline Coates coattail/S coauthor cobalt cobble/DGS cobblestone/DS coble cobra cocaine cochineal Cochise cochlea cockatoo cockcrow cockeye/D cockeyed/PY cockle cocklebur cockleshell cockpit/S cockscomb cocksucker/MS cocksure cocky/PRY coda/MS coddle/DGRS codebook/S codebreak codetermine/S codfish codicil coed/S coedited coediting coeditor/MS coedits coeducation coequal/Y coercible/I coexistent coextensive/Y cofactor/S coffeecup coffeepot Coffman cog/S cognac cognate/NSXY cohabitational Cohen coherency Cohn cohort/MS coiffure/D coincident/Y coital/Y coitus cola colander/S colatitude/S Colby Coleridge coleus Colgate colicky coliform coliseum collagen collapsibility collapsible collarbone collard collectivities collegian/S collimate/DGNS collinear collinearity colloidal/Y colloquia colloquial/Y colloquialism/MS colloquium collude/DGS collusion/S Colombia Colombian/S colonialism colonialist colonnade/DS coloration coloratura colorimeter/MS colorimetry Colosseum coltish/PY Columbia/M Columbian columbines Columbus columnist/S coma/S Comanche comatose combatted combinable combo/S combustible/S comeback cometary comeuppance commando/S commendable/A commendatory/A commensurable/I commercialism Commie commies commingle/D commiserate/DGNSV commissary committable committal/A committeeman committeemen committeewoman committeewomen commodious/IPY communicable/IU communicational communique/S communism communistic commutable/I commutate/DGNSX compaction compatriot/S compellable compendia compensable competency/S complacency complacent complainant/S complaisance complaisant/Y complementarity complementation compliant/Y comport/DGS comportment composable compositor/S compost compote compressibility/I compressor/S compulsive/PSY compulsivity Compuserve/M con concave concavities conceptuality concertgoer/MS concertina concertmaster concerto/MS concessionaire/S conch/S concierge/S conciliate/DNSVX conciliator conciliatory/A conclave/S concoct/DGRSV concordance concordant/Y Concorde Concordia concourse/S concubine/S concussion/S condemnate condemnatory condensate/SX condensible condescension condiment/S condo/MS condolence/S condominium/MS condoms condor/MS conduce/DGS conductance/S coneflower Conestoga coney confabulate/DNSX confect/S confectionery conferee/S conferrable confessional/SY configurability/A confirmatory confiscatory conflagration/S confluent/S conformal conformance conformant conformation/MS conformational/Y conformist/S confrontational Confucian Confucianism Confucius confute/DGRS congeal/DGS congeniality/U congenital/Y congest/GSV conglomerate/DNSVX Congo congratulatory congregationalism congregationalist/S congressmen congresswoman congresswomen congruential/Y congruity/I congruous/IPY conic/S conical/PY conifer/S coniferous conjectural/Y conjoin/GS conjoint/Y conjugal/Y conjugate/DGNPSVXY conjuncture/S conk/DGRSZ conn/DGRV Connecticut connectionless Connelly connivance connive/DGRS connotation/S connotative/Y connubial/Y conquistador/S conquistadores Conrad/M Conrail/M consanguine consanguineous/Y consanguinity conscionable/U conscript/DGS conscription/S consensual/Y conservator consistence/I consonance/I consonantal conspiratorial/Y constance Constantinople consternate/DGS constrict/DGSV constriction/S constrictor/S constructional/Y consular cont'd contaminant/S contentious/PY contestant/S continence/I continuant contort/DGSV contortion/S contraband contrabass contrabassoon/MS contraception contraceptive/S contrail/MS contraindicate/DGNSVX contraindication/MS contravene/DGRS contravention contrite/NPY controversialists controvertible/I contumacy contumely contusion/S convalesce/G convalescent convection/S conventionality/U conversationalist convexity conveyor/S convivial/Y convocation/S convoke/DGS convolute/NXY convolve/DGS convulse/DGSV convulsive/PY cookbook/S coolant/S coolheaded Coolidge Coors Copeland Copenhagen Copernicus coplanar Copland/M copolymer/S Copperfield copperhead coppersmith/S coppery copter/S copybook/S copyist copywriter coquette/DG cordage cordite cordless cordon corduroy/S coriander Corinthian/S corkscrew/S cornbread cornea Cornell/M cornet/MS cornflower Cornish cornmeal cornstarch cornucopia Cornwall Cornwallis corny/PRTY corona coronal coronate coroner/S Corp corporeal/PY corporeality corporeally/I corpsman corpsmen corpulence/S corpulent/PY corpulentness/S corpuscular corral/S corralled corralling correlator/MS corrigendum corrigible/I corrode/DGS corrodible corrosive/PSY corrugate/DGNSX corruptible/I corsage/S Corsica/M Corsican cortex/S cortical/Y corticosteroid/S cortisone Cortland corundum coruscate/DGNSX corvette cosmic cosmical/Y cosmological/Y cosmologist/MS cosmopolitanism cosmos/S cosponsor/DS cossack/S Costello cosy/Y cotangent coterminous/Y cotillion cotter/S cottonmouth cottonseed cottonwood cottony cougar/S could've coulomb councilman councilmen councilwoman councilwomen counterargument/S counterattack/R counterbalance/DGS counterclaim countercyclical counterflow counterforce counterintuitive/Y counterman countermand/DGS countermen counterpoise counterproposal countersink/GS countersunk countervail/DGS counterweight/DGMS countrify/D countrymen countrywide coup/AS coupe couplet/MS courtesan covalent/Y covariance/S covariant/S covariate/NS covary coven Covent Coventry coverall/DS covington cowbell cowbird/S cowhand/S cowherd cowhide/DG cowlick coworker/MS cowpoke cowpony cowpox cowpunch/R coxcomb/S coy/PY cozen CPA CPR crabapple crabbed/PY crabbing crackpot/S craftsmanship craftsmen craftspeople craggy/PRY Craig Cramer crammed cramming cranelike Cranford crania cranium crankcase crankshaft cranny/DS Cranston crappie/R crass/PTY craw/Y Crawford crawlspace crawlway crayfish crayon/S creaky/RY creamery creationism/M credent credential/S credenza credo/S Cree creedal creekside creepy/PR Creighton crematory Creole Creon crescendo cress crestfallen/PY Crestview Cretaceous/Y Cretan Crete cretinous crevasses crewcut crewel crewman crewmen cribbing Crimea Crimean criminality crimp/DGRS crinkle/DGS crinkly crisscross/DS criticality Croatian crock/DRS crockery Crockett/M crocodile/S crocus/S croft/RZ Croix Cromwell Cromwellian cron crone/S crony/S croon/DGRSZ Crosby crossarm crossbeam/MS crosshatch/DGS crosspoint crossproduct/S crossroad/GS crosstalk crosswalk crossway/S crosswise crotch/DS crotchety/P croupier croutons crowbait crowbar/MS crowfoot/S Crowley CRT crucible crucifix crucifixion crud cruddy crudity/S cruft crufty crummy/RS crump crushproof Crusoe cryogenic/S cryostat crypt/S cryptanalyst cryptanalytic cryptogram/MS cryptographer/MS cryptographically cryptologic cryptological cryptologist cryptosystem/MS crystallite/S crystallographer/S crystallographic crystallography CS CSS CST Cuba Cuban/S cubbyhole cubicles cubism cubist/S cud cuddly/R cufflink/S cuisine culinary culpa/S culpable/P cultist/S cultivable Culver/S culvert Cumberland cumin cumulate/DGNSX cumulus Cunard Cunningham cunt/MS cupcakes Cupid cupidity cupric cuprous curate/V curative/Y curator/S curbside curd curdle/DGS curia curiae curie curio/S curlicue curricula curtsey/DGS curvaceous/Y curvilinear/Y curvilinearity curvy Cushman cushy/TY custodial customhouse/S cutaneous/Y cutback/S cutlass cutlet/S cutout/S cutthroat cuttlebone/S cuttlefish/S cutworm CVS Cyanamid cyanate cyanic cyanide cyberspace/M cyclical cyclist/S cyclohexanol cyclopean cyclops Cygnus cylindric cynic/S cynicism Cynthia Cyprian Cypriot Cyprus Cyril Cyrus cytochemistry cytolysis cytoplasm czarevitch czarina czarism czarist czarship Czech Czechoslovakia d'art d'etat d'etre d'oeuvre DA DA's dab/S dabbed dabbing dachshund Dacron dactyl/S dactylic Dadaism Dadaist Dade Daedalus daffy/R DAG Daimler dairyland dairyman dairymen dais/S Dakar Dakota Dali Dallas dally/DGR Dalton Daly Damascus dammed damming dammit Danbury dancelike Dane/S dang/D Daniel/MS Danielson Danish dank/PY Danny/M Dante/M Danube Danville Danzig Daphne dapper/PY dapple/DGS Darcy/M Darlene Darlington Darrell Darrow Dartmouth Darwin Darwinian Darwinism Daryl/M dashboard/S dastard/Y dastardly/P databanks datacenter/MS datafile datagram/MS Datamedia dataset/S dateline/DS Datsun daub/DRS Dave/M davenport David/M Davidson Davie/S Davinich Davis davits Davy/S dawdle/DGRSZ Dawson daybed daysail/GRS Dayton DB DDOS deaconess deactivate/DGNS deadhead/S deadweight deadwood dealerships deanonymization/MS deanonymize/DGS Dearborn dearie deassign/S deathbed deathward debacle/S debar/S debarring debase/DGRS debauch/DRS debauched/PY debauchery Debby debenture/S Debian debility debit/DGS debonair/PY Deborah/M Debra debrief/DGS debunk/GRS Debussy/M debut/GS debutante/MS Dec decaffeinate/DGS decal decant/DGRSZ decapitated decathlon/S Decca decedent decennial/Y decertifier/MS decertify/DGNRSZ dechlorinate/DNS decibel/S deciduous/PY decile decisional declaim/DGRS declamation/S declamatory declarator/S declaratory declassify/NX declension/S declivity decolletage/S decollimate decommission/DGS decompress/DGRS decontaminated decontrol decontrolled decontrolling decor decorator/S decorous/IPY decorticate/DGNS decry/DGRS decrypt/DGS decryption DECsystem DECtape deductibility deductible/S deduplicate/DGNS deduplication/M deemphasis Deere deerskin/S deerstalker deface/GRS defacement defame/DGRS defecate/DGNSX defensible/I deferent/S deflate/DGNRS deflect/DGSV deflected/U deflection/S deflector defocus/G Defoe deforest/DGRS deforestation deform/GS deformational defragmentation/M defraud/DGRS defray/DGS defrost/DGRS deft/PRT defunct degrease degum degumming dehumidify/DNRX dehydrate/DGNS deify/N deja deject dejection DeKalb/M delectable/P delectation delegable deleterious/PY Delhi/M deli/MS delicatessen delicti Delilah/M delimitation delirium/S deliveryman/M deliverymen/M Dellwood delouse/DGS Delphi Delphic deltoid/S delusive/PY deluxe demagnify/N demagogue/S demarcate/DGNS demarked demarks demean/DGS demented/PY demerit/S demigod demiscible demit demitted demitting demographer/MS demographical/Y demography demoniac demonic demonstrably/I demote/DGNS demotivate/DGS demountable Dempsey demultiplex demurred demurrer demurring denature/DGS Deneen deniability denim/S Dennis denominate/DV denominationally denouement densitometer/MS densitometric densitometry dentistry denture/IS denude/DGRS denumerable denunciate/DGNSVX Denver deodorant/MS deoxyribonucleic depiction/S deplorably deployable depositary depository depravity/S deprecate/DGNSX deprecating/Y deprecatory/Y depreciable depredations depressant/S depressible depressors Dept deputation/S depute/DGS derange/DGS derangement Derbyshire deregulate derelict/S dereliction derisive/PY derivate derogate/DGNSV derogatory/Y derrick/DGS derriere dervish/S descant Descartes descendent/MS desecrate/DNRS desegregate/DGNS desist Desmond desorption desperado desperadoes despicable/P despicably despoil/DGRSZ despond despondency despondent/Y despotism dessicate destinate destruct/S destructor/MS desuetude desultory/PY detachable detente/X deter/S detergency detergent/S determinability deterred/U deterrence deterrent/SY deterring deters/V detersive/S detestation/S detonable detonator/MS detour/DGS detrimental/Y detune/DGS deuce/DGS deuced/Y deus deuterium/S Deutsch devaluation devalue/DGS deviance/S devious/PY devoice/DGS devolve/DGS Devon Devonshire devotional/Y Dewar/MS Dewey Dewitt Dexedrine dexter dextrous diabase diabetic/S diabolic diabolical/PY diachronic/P diacritical/SY diagnometer/MS diagnostician/S diagrammaticality dialectal/Y dialectic/S dialectical/Y dialysis diamagnetic diametric Diana/M Diane/M Dianne/M diaphanous/PY diathermy diathesis diatom/S diatomic diatonic dichloride dichotomous/PY dick/RSZ Dick's dicker/DGS dickey Dickinson Dickson dicotyledon dictatorial/PY didactic/S diddle/DGR Diego/M diehard/S diem diesel/S dietary/SY dietetic/S diethylaminoethyl diethylstilbestrol dietician/S Dietrich differentiability differentiable differentiator difficile diffidence diffident/Y diffract/DGS diffraction/S diffractometer/MS diffusible digitalis dignitary/S digram dihedral Dijon/M dilapidate/DGNS dilatation dilator dilatory/PY dilettante/S dilithium dill dillinger Dillon/M dilogarithm DiMaggio/M dimensionless dimethyl dimethylglyoxime Dinah dinette/MS ding/DGRS dinghy/MS dingo dinnertime dinnerware dinosaur/S diocesan diocese Diogenes Dion Dionysian Dionysus diorama/S dioxalate diphthong/S dipodic dipody dipole/MS Dirac directivity directorate directorship directrices directrix direful/Y disablement disaffected/PY disaffection disaffiliate/DGNS disaggregate/DGNV disapprobation disarranged disarray/S disarticulated disassembly disavow/DGS disavowal/S disbar/S disbelief discipleship disco/MS discoloration discomfit/DGS discontinuation discordant/Y discorporate/D discourteous/PY discrepant/Y discretionary discriminable discriminant discursive/PY discus/S discussant/S disdainful/PY disembodied disembowel/S disenchantment disengagement disequilibrium disgruntle/GS disgustful/Y disharmony dishevel/S dishonesty dishwater disincentives disinclination disincorporated disinfect/DGS disinfectant/MS disingenuous/PY disinherit/DGS disinheritance disintegrate/DGNSVX disinterest disinterred disjoin diskette/S dislodgment disloyal/Y disloyalty dismantle/DGS dismembered dismemberment Disney/M Disneyland disobedient/Y disoriented disparage/DGRS disparagement disparaging/Y dispassionate/PY dispensary dispensate dispersal dispersement dispersible dispositional dispossessed dispossession disproportion disproportional disproportionate/NY disputable/I disputant disquietude disquisition Disraeli disrepair disreputable/P disrepute disrespect disrobe dissect/DGS dissection dissemble/DGR dissimulation dissociable/I dissonant/Y dissuade/DGRS distaff/S distend/D distension distillate/SX distillery/S distortable distributorship disunion disunited disunity disuse/D disvalues disyllable dither/DGR ditto/S ditty/S diuretic diurnal diva divalent diversionary divertimento divestiture divination divisible divisional divisive/PY divorcee/S divvied divvies divvying Dixie Dixiecrats Dixieland Djakarta DMA DMCA Dmitri DNA DNS doable Doberman Doc docile/Y docket/DGS dockside dockyard doctrinaire doctrinal/Y Dodds dodecahedra dodecahedral dodecahedron Dodington doe doff/GS doggone/DG doghouse dogleg dogmatic/S dogmatically/U dogtooth Dogtown dogtrot dogwood doldrum/S dolomite/S dolomitic Dolores dolt doltish/PY Domesday domesticity domicile/D dominator domineer/G domineering/PY Domingo Dominic Dominican/S domino Don/M Donahue Donald/M Donaldson Donna donned Donnelly donning donnish/PY donnybrook donor/S Donovan donuts doodle/DGRS Doolittle doomsday doorbell doorkeep/RZ doorknob/S doorman doormen dopant Doppler Dora/M Dorado Dorchester Doris dorm/RS Dorothy dosage/S dosimeter/MS dosimetry dossier/S Dostoevsky dotage dotard Doubleday doubleheader doublespeak/M doubleton doubloon Doug Dougherty Douglas Douglass dour/PY dovetail/DGS Dow dowager/S dowdy/PRSY dowel dower downbeat Downey downgrade/DGS downhill download/DGSZ downpour downside/MS downslope downspout downswings downtrend downtrodden downturn/S downwind dowry/S dowse/GRS Doyle DPI Dr draconian draftee/S dragger dragnet dragonfly dragonhead dram Dramamine dramatical dramaturgy dreadlocks dreadnought dreamboat dreamless/PY dreamlike dreamt/U dreg dressmaking dressy/PR Drexel Dreyfuss drib/S dribble/DGRS driftwood/MS dripped drippy/R drizzle/DGS drizzling/Y drizzly droll/P dromedary droopy/R drophead droplet/S dropout/S drosophila dross drowse/DGS drub drubbing drudge/GRS drudging/Y drugged drugging drugless drugstore/S druid drumhead drumstick/MS Drury Dryden dryer/S dryness drywall dualism Duane dubbed Dublin Dubuque ducat duce/S duckling/MS duct/DGS ductile/I ductwork dud/S duet/S duff/RZ duffel/MS Duffy dugout dukedom dulcet/Y dulcify dullard Dulles Duluth Dumas dumbfound/DRS Dumont dumpster/MS Dumpty dumpy/PRY dun Duncan dung Dunham dunk/DGRS Dunkirk Dunlap Dunne duopolist duopoly dupe/DGNRS duplex/R duplicable duplicity DuPont/S Dupont/S durational duress Durham Durkee Dusenberg Dusseldorf dustbin/S Dustin Dutch Dutchman Dutchmen dutiable Dvorak dwarves dwelt Dwight dyad/S dyadic Dyke dynamical dynamism dynamo/S dynastic dysentery dysfunctional dyslexia dyspeptic dysprosium dystopia dystrophy e'er eardrum/S Earp earphone/S earsplitting Earthling/MS earthmen earthmover earthmoving earthy/PRY easel/MS eastbound easternmost Easthampton Eastland Eastman Eastwick Eastwood easygoing/P eatable/S eave EBCDIC ebullience/M ebullient/Y ecclesiastic echelon/S echinoderm eclectic eclectically eclecticism/M ecliptic ecological/Y ecologists econometric/S Econometrica econometricians ecosystem/S ecstatic/S Ecuador ecumenic/MS ecumenical/Y ecumenicist/MS ecumenist/MS ed/N Eddie/M edelweiss Edgar Edgerton Edgewater edgewise Edgewood edgy/PRY edify/DGNS Edinburgh Edison Edith editorialist editorship Edmund Edna Eduard educe/G Edward/S Edwardian Edwin Edwina EEG eelgrass eerily efface/DGRS effaceable/I effectual/IP effectuate/DGNS efferent/Y effete/PY efficacious/IPY effloresce efflorescent effluent/S effluvia effluvium efflux effluxion effuse/DGNSV effusive/PY egalitarian/I egalitarianism Egerton eggbeater/MS egghead/D eggheaded/P eggplant eggshell egocentric egotism egotist/S egotistic egotistical/Y egregious/PY egress egret/S Egypt Egyptian/S eh Eichmann eider eidetic eigenstate/S eigenvector/S eightfold Eileen Einstein/M Einsteinian einsteinium Eisenhower ejector/S Ekberg Ektachrome Elaine elan elastomer Elba Eleanor electorate Electra electress electrician/S electro electrocardiogram/MS electrocardiograph electrodynamic/SY electroencephalogram/MS electrolysis electromagnet/S electromagnetic/S electromagnetism/S electromechanical/Y electromyograph electromyographic electromyographically electromyography electrophoresis electrophorus electroshock/S electrostatic/S electrotherapist electrotypers electroweak elegiac elegy/S elephantine elfin Eli elide/DGS Elijah Eliot Elisabeth Elise/M elision/S elite/PS elitism/M Elizabeth Elizabethan/S Elkhart Ella Ellie/M Elliot Elliott ellipsometer/MS ellipsometry ellipticity Ellis Ellison Ellsworth Elmhurst Elmira Elmsford elocution Eloise elope/DGRS Elroy Elsie Elsinore eluate/S elute/DGN Elwood/M Elysees elysian Elysium emaciate/GNS emanate/DNSVX emancipate/DGS Emanuel emasculate/DGNS embalm/DGRSZ embank/DGS embankment/S embarcadero embargo/DG embargoes embattle/DGS embedder embezzlement embittered emblazon/DGRS emblematic embolden/DS emboss/DGRSZ embower embraceable embrittle embroil/DGS embryonic emcee/D emend/R emendable emeritus Emerson Emily emirate emissary/S emission/AMS emissivity/S emittance emitter/S emitting Emma/M Emmanuel emolument/S Emory emotionalism emotionality empath empathetically empathic emphysema emphysematous empiric empiricism emplace emplacement/MS employability/U emporium/S emptor emulsify/DNRS emulsion/S encampment encase/D encephalitis encephalographic enchain/D enchantress enchiladas enclave/S encomium/S encore/DGS encroach/DGRS encroachment encrust/DGS encumbrance/RS encyclical endearment/S endemicity endgame Endicott endnote/MS endogamous endogamy endogenous/Y endosperm endothelial endothermic endpoint/S energetically enervate/DGNSV enfeeble/DGS enforceability enforceable/U enforcible/U England/M Englewood Englishman Englishmen engorge/DGS engulfed engulfing engulfs enigma enjoinder enlargeable enmesh/D Enoch Enos enquiry/S enrapture/DGS enrichment Enrico enrollee/S ensconced enshrined enshroud enslavement Ensolite entailment entanglement enthalpy enthralled enthralling enthrone/DGS enthuse/DGS enticements entitlement/S entomb/D entomologist entomology entourage/S entrain/DGRS entranceway entrant/S entrap/S entrapment/MS entrapped entrapping/Y entree/S entrenchment/S entrepreneurial entrepreneurship entryway/MS entwine/DGS enunciable enunciate/DGS enunciated/U envenom/DGS enviable/P enzymatic enzymatically enzyme/S enzymology Eocene EOF eohippus EPA ephemerides ephemeris Ephesian/S Ephraim epicure epicurean Epicurus epicycle/S epicyclic epicyclical/Y epidemiological/Y epidemiology epidermic epidermis epigenetic epigram/S epigrammatic epigraph/R epilepsy epileptic/S epilogue/S epiphany epiphenomena Episcopalian episcopate epistolatory epitaxy epithelial epithelium epitome/S epochal/Y epoxy/DGS Epsom Epstein equable/P equanimity/S equestrian/S equidistant/Y equilateral/S equilibrate/DGNS equilibria equine/S equinox equipotent equiproportional equiproportionality equiproportionate equivocal/PY equivocation eradicable/I Erasmus Eratosthenes erbium ergodic ergodicity Eric/M Erich Erickson Ericsson Erie Erik/M Erika/M Erikson Ernest Ernestine Ernie Ernst erode/DGS erodible Eros erosible erosion erosive/P erotic erotica erotically errancy/S errant/SY errantry errata/S erratically erratum Errol ersatz erstwhile erudite/NY erupt/DGSV eruptive/Y Ervin Erwin escadrille escalator/S escapist escarpment/MS escritoire escrow escutcheon/S Eskimo/S esophagi Esp Espagnol esplanade espousal/S essayists Essex esters Esther estimable/P estimator/S estoppal estrange/DGRS estrangement estuarine estuary/S et eta/S etcetera/S etched ethane ethanol Ethel ethicist/S Ethiopia Ethiopians ethnically ethnicity/S ethnographers ethnographic ethnography ethnology ethnomethodology ethology ethos ethyl ethylene Etruscan etymological/Y etymology/S eucalyptus Eucharist Euclid/M Euclidean Eugene Eugenia eugenic/S Euler/M Eulerian eulogy/S Eunice euphemist euphony euphoric Euphrates Eurasia Eurasian eureka Euripides Europa europium Eurydice euthanasia Eva evanescent evangelic evangelical/Y evangelicalism Evangeline evangelism evangelist/S evangelistic Evans Evanston Evansville evasion/S evasive/PY Evelyn evensong eventide/S eventuate/DGS Eveready Everett Everglades everyman evidential/Y evildoer/S evocable evocate/NVX evocative/PY evolutionists Ewen ex exabit/MS exabyte/MS exaltation/S examinable excelsior excisable excitability excitatory exclamatory exclusionary excoriate/DGNSX excrescence/S excretory excruciate/DGNS exculpatory excursus/S exec/M execrable/P execrate/DGNSV executrix/S exegesis exegete exemption/S exercisable Exeter exhilarate/DGNSV exhilarating/Y exhort/DGRS exhumation/S exhume/DGRS exigent/Y exodus exogamous exogamy exogenous/Y exonerate/DGNSV exorciser exorcism exorcist exoskeleton exothermic exotica expansible expansionist expectable expectorant expectorate/N expediency/I expellable experiential/Y experimentalism experimentalist/MS expiable/I expiate/DGNS expletive/S explicable explicate/DGNSV explicative/Y exportation exposit/D expressionism expressionist/S expressionistic expressionless/PY expressway/S expurgate/DGNS extemporaneous/PY extempore extendibility extensional/Y extensor exterminator/MS extern externalities extirpate/DGNV extolled extoller extolling extort/DGRSV extracellular/Y extraditable extralegal/Y extramarital extraterrestrial extravaganza/S extrema extremism extricable/I extricate/DGNS extroversion extrovert/DS extrude/DGRS extrusion extrusive exuberant/Y exudation exude/DGS exultant/Y Exxon eyeful eyelash/S eyeless eyelet/S eyesore/MS eyeteeth Ezekiel Ezra Facebook/MS faceplate facetious/PY facilitators facilitatory factious/PY facto factuality fad/S fadeout faerie faery Fagin Fahrenheit/S failsafe Fairchild Fairfax Fairfield fairgoer/S fairgrounds fairless Fairmont Fairport Fairview fairway/S fakery falafel falconry Falk fallback/MS falloff fallout/S fallow/P Falstaff familial fanatical/P fanaticism fanfare fanfold fangled Fanny/S fanout fantasia fantasist fantastically FAQ FAQ's FAQs Faraday Farber farcical/Y farfetched/P Fargo/M farina Farley Farmington farmland/S farmworker/S Farrell farsighted/PY fascicle/DS fasciculate/DNX fascism fascist/S fastball/MS fastidious/PY fatalistic fatalists fateful/PY fatherhood fatherless Fatima fatso fatty/PRS fatuity fatuous/PY faucet/S Faulkner Faulknerian faun fauna/I Fauntleroy Faust Faustian Faustus Fawkes Fayetteville faze/DGS fazed/U FCC FCFS FDA fealty fearsome/PY feasibly featherbed featherbedding featherbrain/D Featherman feathertop featherweight feathery Feb febrile feces fecund/I fecundability fecundity federalism federalist/S federate/DGSVX federated/U federative/Y FedEx/M fedora feint/DGS Feldman feldspar Felice Felicia felicitous/PY felicitously/I feline/SY Felix fella/S Fellini felon/S felonious/PY felony FEMA/M feminism femme/S femtosecond/MS fencepost fend/RZ fennel Fenwick/M Ferdinand/M Ferdinando/M Fermi/MS fermion/MS fermium/M Fernando/M fernery ferret/DGRS ferric ferris ferro ferroelectric/S ferromagnet/S ferromagnetic/S ferrous fervid/PY Fess fest/RZ fester/DGS fetal fete/DS fetish/S fettle/DGS feudalistic feudatory fiance fiancee fiasco fiat/S fib fibbing Fiberglas Fibonacci fibrin fibrosis fiche fictive/Y ficus fiddlestick/S fide Fidel fidget/DGS fiducial/Y fiduciary fief fiefdom/MS fieldstone fieldwork/RZ fiendish/PY fiesta Figaro figment figural figurine/S filamentary filbert/S filch/DS filesystem/MS filet/S filibuster/DGRS filigree/D Filipino/S Filippo fillet/DGS Fillmore filly/S filmdom filmmaker/MS filmstrip/S filmy/PRY filtrate/DGS finagle/DGRS finale/MS finalist/S finch findable/U finesse/DG fingernail/S fingerprint/DGS fingertip/S finial finicky/P fink Finland Finn/S finned Finnegan Finnish finny Fiorello Fiori fireball/S fireboat firebrand/MS firebreak/S firebug firecracker/S firefight/GRSZ firefighter/MS Firefox firehouse/S firemen firepower fireproof Firestone firewall/DGMS firework Fischer/M fisheye/MS Fishkill fishmeal fishmonger/S fishpond fishy/R Fisk fissile fission/DGS fisticuff/S Fitch Fitchburg fittest Fitzgerald Fitzpatrick Fitzroy fivefold fizz/R fizzle/DGS fjord/S flabbergast/DGS flabbergasting/Y flagellate/DGNS flagman flagpole/S flagstaff flagstone flail/DGS flair flak flaky/PR flam/N flamboyant/Y flamethrower flamingo/MS Flanagan Flanders flange/DS flapped flapper/S flashback/S flashbulb/S flashy/PRY flatbed flathead flatiron/S flatland/RS flatulence flatulent/Y flatworm flautist flaxseed fleawort fleck/DGMRS Fledermaus fledge/GS Fleischman Fleisher Fleming/S Flemish/DGS fletch/DGJRS fletching/MS flex/DG flexed/I flexural flexure flimsy/PRSY flintless flintlock flinty/PRY flipflop flippant/Y flipped flippers flipping flirtation/S flirtatious/PY flitting flocculate/DGNS floe/S flog/S flogged flogging floodgate floodlight floorboard/S flophouses flopped flopping floral/Y Florence/M Florentine florid/PY Floridian/S florist/S flotation/S flotilla/S flotsam/M flounce/DGS floury flout/DGRS flowerpot flowstone Floyd flu flub/S flubbed flubbing flue fluency fluff/S fluke/MS fluky/R fluoresce/RS fluorescent fluoridate/DGNSX fluoride/S fluorimetric fluorinated fluorine fluorite fluorocarbon flushable fluster/DGS flutist/MS flux/ADS flyaway flycatcher/S Flynn flywheel/S foal/S foamy/PR fob foible/S foist/DGS foldout/S foliate/DGNSX folio/S folklike folksong/S folksy/PRY follicle/S follicular followup/MS Folsom foment/DGRS Fontainebleau Fontana foolhardy/PY footage/S footbridge/S Foote footfall/S foothill/S footlight/MS footloose footmen footpad/S footpath/S footstool/S footwear footwork fop/S foppery foppish/PY Forbes forbore Fordham forebears foreclosed foreclosing foredeck/MS forefeet forefront foreknowledge foreknown foreleg foremen forensic/S forepart forepaws forerunner/S foresaw foreseeing foreshadow/DGRS foreshortened foreshortening forestry foreword forfeiture/S forfend/DGS forgo/GR forklift formability/A formaldehyde formate/S formic Formica formidably formless/PY Formosa Formosan formulaic forsook forswear/S forthcome forthright/PY fortiori fossiliferous Foster/M foulmouth/D foundling/S fountainhead fourfold foursome/S foursquare fovea foxglove Foxhall foxhole/S foxhound foxtail foxy/PRY foyer fracases fractionated fractionation fractious/PY frag/S fragged fragging fragility fragmentation Fran/M Francaise Francesca Francesco Francie Francis Franciscan/S Francisco francium Franco Francois Frankford Frankfort frankfurter/S Frankie franklin Franny Franz Frau fraudulent/P Frayne Frazier frazzle/DGS freakish/PY Fred Freddie Freddy/M Frederic Frederick/S Frederico Fredrick Fredrickson freeboot/RZ freeborn freedman freedmen freehand/D freehanded/Y freehold/RZ freemen Freeport freestone freethinkers freewheel/DGRSZ freewheeling/P Freida Frenchman Frenchmen frenetic freon fresco/DGS frescoes freshwater Fresnel Fresno fretted fretting Freud Freudian Frey Fri friable/P Frick frictional/Y Friedman Frigga frigid/PY Frigidaire frilly Frisbee frisky/PRY Frito fritter/RS Fritz frivolity/S frizzle/DGS fro frolicking frontage frontal/Y frontiersman frontiersmen frosh/M Frost/M Frostbelt/M frostbite/G frostbitten frothy/PRY frowzy/R frugality frustum ft/A ftp/GJRSZ Fuchs fuchsia fuck/DGMRSZ fucker/MS fudge/DGS fugue Fuji Fulbright fulcrum fullback/G Fullerton fulminate/DGNSX fulsome/PY fumigant fumigate/DNSX functionalism functionalist/S functionary fundamentalism funereal/Y fungal fungi fungible fungicides fungoid funk furbish/GRS furl/DU furlong/S furlough/DS furor/MS furring furry/RZ furthermost furthest fuselage/S fusible/I fusiform fusillade/S fussy/PRY fusty/PY fuzz/D gab gabbing Gabriel Gabrielle gadfly gadgetry Gaelic gaffe/RS gaggle gagwriter/S Gail Gainesville gainful/PY Gaithersburg gal/NS gala galactic Galahad Galapagos Galatea Galbreath galena galenite Galilee Galileo gallium gallivant/DGS gallonage Galloway gallstone/S Gallup Galois galvanic galvanism galvanometer/MS Galveston gambit/S gambol/S gamecock gamut gander Ganges gangland gangling ganglion gangplank gangway/S gantry/S Ganymede Garcia gardenia/S Gardner Garfield gargantuan gargoyle/DS Garibaldi garish/PY garnet Garnett garret/S Garrett garrote/DGRS garrulous/PY Garry Garvey Gary/M Gascony gasify/DGNRSXZ gasket/S gaslight/DS Gasset gassy/P Gaston gastronome/S gastronomy gatekeeper/MS Gatlinburg gator Gatsby gauche/PY gaugeable Gauguin Gaul gauntlet/D Gauntley gauss/S Gaussian gavel Gavin gawk/DGRS gawky/RY Gaylor Gaylord Gaynor gazelle/S gazette/DGS gazetteer/S gb gee/T geek/MS geeky/RT geezer/MS Gehrig Geiger geisha/S gelable gelatine gelatinous/PY geld/GJ Gemini gemlike genealogists genealogy/S genera generational genesis geneticist/MS Geneva/M Genevieve/M genie/MS genital/MSY genitive/MS genotype/MS gent/S gentian/S gentile/S gentility gentlemen/M gentlewomen/M gentrification geocentric geocentricism geochemical/Y geochemistry geochronology geodesic/S geodetic geographer/MS geologic geology geometer/MS geometrical/Y geometrician geomorphological geomorphology geophysical/Y geophysicist/S geophysics geopolitic/S geopolitical/Y George/MS Georgetown Georgia Georgian/S geosynchronous Gerald Geraldine Gerard Gerber gerbil gerenuk/MS Gerhard Gerhardt geriatric/S Germania Germanic germanium Germantown germicidal germicide/S germinal/Y Gerome gerontologist/S gerontology Gerry/MS gerrymandering Gershwin/S Gertrude gerund/V gestapo gestate/DGNSX gestation/MS gesticulate/DGNSVX gesticulative/Y getaway/S Getty Gettysburg geyser/DGS Ghana Ghent gherkin/S ghetto/S ghostlike ghoul/S ghoulish/PY GHz Giacomo giantess gibber/DGS gibbet/DGS gibbon/S gibbous/PY Gibbs Gibby gibe/GRS giblet/S Gibraltar giddap Giddings Gideon GIF Gifford/M gigabit/MS gigabyte/MS gigacycle/S gigahertz gigavolt gigawatt gigging GIGO gila gilbert Gilbertson Gilda/M Giles Gilkson Gillespie Gillette Gillian/M Gilligan gimbal/MS Gimbel gimpy ginkgo ginmill ginning ginormous ginseng Gioconda Giorgio Giovanni girlie girlish/PY gist git giveaway/S glaciate/DGNS gladden/DGS gladdy gladiator/S gladiolus Gladstone Gladys glamorous/PUY glandular/Y Glasgow glassless glassware glasswort glaucoma glaucous glaziers Gleason Glenda Glendale Glenn glib/PY glim gloat/DRS glob globetrotter globule globulin/S glockenspiel/MS glommed Gloria glottis Gloucester gloveless gluey glum/PY glut/NS glutinous/PY glutted glutting glutton/MS glyceride glycerin glycerinate/D glycerine glycerol glycol/S Glynn glyph GM gnarl/DS gnash/GS gneiss gnome/S gnomelike gnomonic gnostic GNP gnu/S Gnutella/M gob/MS gobbledygook goddamn/D godfather godhead godless/P Godot godparent godsend/S godson Goethe goggle/DGRSZ Gogh Golda Goldberg/M goldenrod goldenseal goldfinch goldfish Goldman Goldstein/M Goldwater Goliath golly Gomez gondola/S Gonzales goober Goodman Goodrich goodwill Goodwin Goodyear gooey goof/DGS goofy/PRY google/DGS Google's gooseberry gopher/S Gordian Gordon gorgon Gorham Gorky goshawk gosling/MS gossamer Gotham Gothicism gourd gourmand/MS gourmet/S gout governance GPA GPS/M Gracie grad/S gradate/DGS gradualist/S Grady graffiti Grafton grail/S grammarian/S grammatic grammaticality/U grandchild grandchildren granddaughter/S grandiloquent/Y grandnephew/S grandniece/S grandstand/DGRS granola grantee grantor granular/Y granule/S granulocytic Granville grapefruit grapheme grasshopper/MS grassland/S grassroots gratis graven gravestone/S graveyard/S gravid/PY gravimetric gravitate/DGSVX graybeard/S Grayson greatcoat/DS Grecian Greece greenbelt Greenberg Greenblatt Greenbriar greenery Greenfeld Greenfield greengrocer Greenland Greenpeace/M Greensboro Greensville Greentree Greenville Greenwich greenwood gregarious/PY Gregg Gregorian Gregory Grendel Grenier Grenoble Grenville Greta Gretchen Gretel/M greyhound griddle gridiron Grieg/MS griffin Griffith/S grillwork grimace/DGRS grime/S Grimm grimmer Grinch/M grinned grinning/Y Gris grisly/P grist/Y gristly/PR gristmill gritty/PRY grizzle/DGS groat/S groggy/PRY groin grok/S grokked grokking grommet groomsmen Groot grosbeak Grosset Grossman Grosvenor Groton grottoes grouchy/PRY groundhog/MS groundless/PY groundskeepers grout/DGRS Grove/M grovelike grubbing grubby/PRY Grumman grumpy/PRTY Grusky GSA Guadalupe Guam guano guardhouse Guatemala Guatemalan gubernatorial guerilla guernsey/S guesswork guffaw/S Guggenheim/M Guhleman GUI Guiana guidepost/S guildhall guileless/PY guitarist/S gullet/S gullible gumbo gumming gummy/PR gumption gumshoe gunboat Gunderson gunfight/RS gunflint gunk gunky gunman gunmen Gunnar gunnery gunny gunshot gunsling/GR gunwale/MS Gus gusset/S gusto gusty/PY Gutenberg Guthrie gutsy/PR gutted gutting guttural/P Guyana guzzle/DGRS Gwen gymnosperm gyp gypping gypsite gypsum gyrate/DGS gyro/S gyrocompass gyroscopic habeas haberdashery/S habitant/S habituate/DGNS hacienda/S Hackett hackle/DGRS hackney/DGS hacksaw/S hackwork haddock/S Hades hadron Hafiz hafnium haggle/DGRS Hague Haifa haiku hailstone hailstorm hairdo/S hairdressing hairline hairpin hairstyle/GMS hairstylist Haiti Haitian Hal halcyon halfback/S halfhearted/PY halftime halibut/S halide/S Halifax halite hallelujah/S Hallinan Halloween hallucinate/DGNSVX halo/S halocarbon halogen/S halyard/MS Hamey Hamilton Hamiltonian/S hammerhead hammerless Hammett hamming Hammond Hampshire Hampton hamster/S Hancock handclasp handcrafted handgrip/MS handgun/S handheld/MS handhold handicapper handicapping handicraft/RS handicraftsman handicraftsmen handleable handlebar/S handless handmade handmaiden handoff/MS handout/S handrail handset/S handspike/S handstand/S handwrite/JS handyman handymen hangable hangman/M hangmen hangout/S hangup/MS hank/RZ hanker/DGRS Hannah/M Hannibal Hanoi Hanover Hanoverian Hans/N Hansel hansom Hanson Hanukkah Hapgood happenstance/MS harangue/DGRS harbinger/S Harcourt hardboard hardboiled hardhat Hardin hardscrabble hardshell hardtack hardtop/S hardwire/DGS hardwood/S hardworking harelip/S harem Harlem harmonic/S Harold harpist harpoon/DGMRS harpsichord/S harpsichordist harpy/MS Harriet Harris Harrisburg Harrison Harrisonburg harrumph/DGS Harry/M Hartford Hartley Hartman Harvard/M harvestman Harvey/S hashish Haskell Haskins hasp/S Hatchure hatchway Hatfield hatless hatted hatters Hattie haulage Hauser Havana haw/G Hawaii/M Hawkins Hawley hawser hawthorn Hawthorne Haydn/M Hayes hayfield/S hayloft/MS Haynes haystack/S Hayward Haywood hazelnut/S headboard/S headdress headless/P headlight/S headmaster headquarter/D headroom headset/S headship headsman headsmen headstand/S headstone/S headwall/S headwater/S heady/PRY hearse Hearst/M heartbeat/S heartbreak/G heartbreaking/Y heartburn/G heartfelt heartland/M heartthrob/MS Heartwood heathenish/Y Heathkit Heathman heavenward/S heavyweight hebephrenic Hebraic Hebrew/S hecatomb heck heckle/DGRSZ hectare/S hectic hector Hecuba Hedda hedonism hedonist/S hedonistic heedful/PY heft/DS hefty/PRY Hegel Hegelian hegemonic hegemony/S Heidegger Heidelberg Heidi/M Heinz Heinze Heisenberg Heiser heist/DGMRS Helen Helena Helene helical/Y helices helicon helicopter/MS heliocentric Heliopolis heliotrope helium helix/S hellbender Hellenic hellfire hellish/PY helluva Helm/M Helmholtz helmsman helmsmen Helmut helpmate Helsinki hematite Hemingway hemispheric hemispherical hemmed hemming hemoglobin hemolytic hemorrhage/DGS hemorrhoids Henderson Hendrick/S Hendrickson Hendrix Hennessey/M henning henpeck/D Henrietta henry Henry's hepatitis Hepburn heptane Hera Heraclitus herbal Herbert Herculean Hercules herdsman Hereford hereof hereunto heritable heritor Herman hermeneutics Hermes hermetic Hermite hermitian Hermosa Hernandez Herodotus herpes herpetologist/S herpetology Herr herringbone Herrington Herschel Hersey Hershel Hershey hertz/S hesitance hesitancy Hesperus Hess Hessian/S heterodyne heterogamous heterogamy/M heterogeneity heterosexual/MSY heterostructure/MS heterozygous Heublein/M hewn hexachloride hexadecimal/SY hexafluoride hexagon/MS hexameter heyday Heywood hi hiatus/S Hiawatha hibachi hibernate/DGNS Hibernia hick/S Hickey/S Hickok hideaway hierarchal hierarchic hieratic hieroglyphic/S Hieronymus hifalutin highball highboy highfalutin Highfield highhanded highroad hight hightail highwayman highwaymen hilarity Hilbert/M Hilgard/M Hillary hillbilly Hillcrest Hillel hillman hillmen Hillsboro Hillsdale hilly/R Hilton Himalayas Himmler Hindemith/M Hindi hindmost hindquarters Hindu/MS Hinduism Hinkle Hinsdale hinterland/S hipping hippo/S hippodrome hippopotamus hippy/S hipster/S Hiram hireling/S Hirey Hiroshima Hispanic/MS histochemic histochemical histochemistry histology historicism historicity historiography histrionic/S Hitachi Hitchcock Hitler/MS hitless HMC/M ho hoagie/S hoagy/S hoarfrost hob Hobbes hobbing Hobbs hobbyhorse Hobday hobgoblin/MS hobo/S Hoboken hoc hock/GRS hodge/S hodgepodge Hoffman/M hogan hogging hokey/PRT Holbrook holdover/S holdup/S hollandaise holler/DGS Hollerith Hollister hollowware hollyhock/S Hollywood/M Holmes holmium Holocene holography Holst Holstein holster/DGS Holyoke holystone/S Holzman homebound homebuilder/S homebuilding homecoming/S homeland homemake/G homeowner/S homeownership Homeric homerists homicidal/Y homicide/S homily hominem homo/S homogamy homogenate/S homologous homologue homology homonym/MS homophobia/M homophobic homopolymers homosexual/SY homosexuality homozygous/Y hon Hondo Honduras honeybee/S honeydew honeyfarm/MS Honeyman/M honeypot/MS Honeywell hong honk/DGRSZ honky/MS Honolulu hooches hoodlum/S hoofmark/S hookup/S hookworm hooligan/S hooliganism hoopla hoosegow/S Hoosier Hoover/M hooves Hopi Hopkins Hopkinsian hoppled hopples hopscotch Horace Horatio Hornblower horny/PR horoscope/S Horowitz hors/X horsedom horseflesh horsefly/S horsehair horselike horsemanship horsemen horseplay/R horsetail horsewoman horticulture Horton hosiery hospice/S hostelry/S hostname/MS hotbed/MS hotbox hotdogs hotelman hothead/D hotheaded/PY hothouse hotrod Houdini hough hourglass houseboat/S housebreak/GRZ housebroken housekeep housewares housewives Houston hove Howard howdy Howe Howell hoy HP HTML HTTP hubba Hubble/M hubbub hubby/S hubcap/MS Hubert Huck huckleberry huckster/DGS Hudson Huey hugged hugging/S Hugh/S Hugo hulk/DGS humanism humanist/S humanistic humanitarian/S humankind/M Humboldt Hume humidistat hummingbird/S hummock/S humongous humorist/MS humpback/DS Humphrey/S Humpty humus hundredfold Hungarian Hungary huntress Huntsville Huron hurray/S Hurst hurtful/PY hurtle/DGS husbandman husbandmen Huston/M hutch Hutchins Hutchinson Hutchison Huxley huzzahs Hyannis hydrant/S hydrate/DGNSX hydride/S hydro/S hydrocarbon/S hydrochemistry hydrochloric hydrochloride hydroelectric hydrofluoric hydrogenate/N hydrological/Y hydrology hydrolysis hydrometer/MS hydrophilic hydrophobia hydrophobic hydrosphere hydrostatic/S hydrothermal/Y hydrous hydroxide/S hydroxy hydroxyl/MS hydroxylate/N hydroxyzine hyena hygienic/S hygrometer/MS hygroscopic hying hymen/S hymnal hyperbola hyperbole hyperbolically hyperboloid hyperboloidal hypercellularity hypercube/MS hyperemia hyperemic hyperfine hypergamous/Y hypergamy hyperlink/MS hyperplasia hyperspace/MS hypertensive hypertrophy/D hypervelocity hypervisor/MS hyphenate/DGNSX hypnosis hypnotic/S hypnotically hypnotist/MS hypoactive hypocellularity hypocritical/Y hypophyseal hypotenuse/S hypothalamic hypothalamically hypothalamus hypothermia hypothetic hypothyroid hypothyroidism hysterectomy hysteria hysteric/S iambic Ian/M Iberia Iberian Ibero ibex/MS ibid ibis/S Ibsen Icarus ICC icebox Iceland/MR Icelandic icicle/S iconic iconoclasm iconoclast iconoclastic icosahedral icosahedron ICU/M Idaho idealist idealogical idealogue/MS ideate/NS idempotent/S identifiability ideologist/S idiolect idiom/S idiomatic/P idiosyncratically idiotically idyll idyllic iffy/P igloo/S igneous ignite/DGRSX ignominious/Y ignoramus Igor ileum iliac Iliad ilk/M illegible illegitimacy illegitimate/Y illimitable/P illiteracy illogic illume/DG illumine/DS illusionary illusory/PY imagery imbecile/Y imbibe/DGR Imbrium imbroglio imbruing imbue/DG imitable/I imitators immanent/Y immeasurable/P immeasurably immensity/S imminence immobile immobility immoderate/NPY immodest/Y immodesty immunological/Y impairment impale/DGS impalpable impartation impartiality impassable/P impeccable impeccably impelled impeller/S impelling impend imperceivable imperceptible imperceptibly imperfectability imperishable/P impermeable/P imperturbable impiety impish/PY implacable/P implacably implantation implausibly implementability implode/DGS impolite/PY impolitic/PY imponderable/PS importunate/PY importune/RYZ importunities impost/RS impotency impound/DGS impoundments imprecate/DGNSX impregnate/DGNSX impresario/MS impressible Impressionism/M imprimatur improbably impropitious impropriety improvident/Y imprudent/Y impudence impugn/DGRS imputation/S inaction inactivate inadvertence inalienable inanity/S inappeasable inarticulate/PY inattention inboard inbound inbreed/GR Inca/S incandescent/Y incant/D incapacitate/DNS incapacity incarcerate/DGNS incarnate incept/DGSV inceptive/Y inceptor incest incestuous/PY incinerate/DGNSX incinerator/S incipience incipiency incise/DGSV incisive/PY incisor/MS incitement/S inclement/Y incombustible incommunicado incompetency incondensable incongruity/S inconstant incorporable incorrigible/P incorruptibility increasable incrementation incriminating incubi incubus inculcate/DNS inculpable incumbent/S incursion/S indecipherable indefatigable/P indelible indelibly indelicate/PY indemnify/DGNRS indenture/DGS indestructible/P Indianapolis indicant/S indict/DR indigent Indira indiscoverable indiscretion indispose/G indisposition indisputable/P indisputably indissoluble/P indium individualism individualist/S individuate/DGNS Indochina indolence Indonesia Indonesian indubitable/P inducible inductee/S indulgent/Y industrialism Indy/S inebriate/DGNS ineffable/P ineffectual/PY inelastic ineligibility ineligible ineluctable inept/PY inequitable inequivalent inertial/Y inexpert/PY inexplicit inextinguishable inextricably infamy infanticide/M infantile infantryman infantrymen infatuation infelicitous/Y infelicity'M inferable infertile infestation/S infield/MRZ infielder/MS infinitude infirm/DY infirmary inflammation inflammatory/Y inflect/DGSV inflection/S inflectional/Y infliction inflow influx info infra infraction infrared infusible/P ingenuous/PY Ingersoll ingest/DV ingestible ingestion ingrain Ingram ingrate ingratiate/GN ingratiating/Y inhabitation inhalant inhalation inhibitory inhomogeneous inimical/Y inimitable/P iniquitous/PY injectable/U injunctive inkjet/MS inlay/GR inline innovator/MS innuendo/S innuendoes inoculate/DGNSVX inoperative/P inquest inquisitor insatiable/P inscrutability inscrutable/P insecticide/S inseminate/N insensate/PY insensibility inseparably inset insincere/Y insipid/Y insolvent insomnia insomniac/S insouciance insouciant/Y INSPEC inspirational/Y instable instep instill/DGR instillation instinctual Institute/MS institutionalist instrumentalities insubordinate/NY insubstantial insufferable insular/Y insularity insulin insuperably insurgence intake/G integrable integrand integument intellectuality intelligentsia intendant/S intensional/Y inter interarrival interaxial intercalate/DGNSV intercase intercaste intercede/RS intercensal interception/MS interceptor interclass intercohort intercollegiate intercom/MS intercontinental intercorrelated interdenominational interdepartmental/Y interdict/V interfaith interferometer/MS interferometric interferometry interferon intergalactic intergeneration intergenerational interglacial intergovernmental intergroup interindex interindustry interject/DGS interjection/MS interlayer/G interlibrary interlingua interlining interlobular interlock/DGRS interlocutor interlude/S intermarriage interment intermeshed intermetrics interminably intermission/S intermolecular/Y internationalism/M internationalist/S internetwork internship/MS interoperability interoperable interpenetrates interplanetary interpol interposition interpretative/Y interpretor/S interprocessor interquartile interracial interred interregional interregnum interrogator/S interrogatory/S interspecies interstellar interstice/S interstitial/Y intersurvey intervenor interventionist intervocalic interweaving intimal intonate intone/G intoxicant intra intracity intraclass intracohort intradepartmental intrafamily intragenerational intraindustry intraline intrametropolitan intramuscular/Y intranasal intranet/MS intransigence intraoffice intrapulmonary intraregional intrasectoral intrastate intratissue intravenous/Y intrepid/PY intro introject/DS introversion intuitable inundate/DGNSX inure/DG invalidism invasive/P invective/PY inveigh/R inveigle/DGR Inverness investigatory inveterate/Y invidious/PY invigorate/DGNS invigorating/Y invigoration/A inviolability inviolable inviolate/PY invitational invitee/S invocate involute/NXY involutorial invulnerability Io iodate/DGN iodide iodinate/DGN ionic ionosphere ionospheric iota IOU IOU's IOUs Iowa IP ipecac ipso Iraqi irascibility'M irascible/P IRC Irene iridium Irish Irishman Irishmen Irma ironic ironside/S ironstone ironwood Iroquois irradiate/DNV irreconcilable/P irredeemable irredeemably irredentism irredentist irrelevancy/S irremediable/P irremovable irreparable/P irreparably irreplaceable/P irreproachable/P irreproducibility irreproducible irresistibility irresistibly irresolute/NPY irresolvable irresponsibility irretrievable irreverence irreverent/Y irreversibly irrevocable/P irrevocably irritability irritable/P irritably irritant/S irruption/S Irvine Irving Irwin/M Isaac/S Isabel isinglass Islam Islamic Islandia ISO isochronal/Y isochronous/Y isocline isocyanate isodine isolationism isolationistic isomer/S isomorph isopleth/S isotherm/S isothermal/Y isotonic isotopic isotropic isotropically isotropy ISP Israelite/S issuant Istanbul Italy Ithaca Ithacan itinerant/Y ITT IUD IUDs Ivan Ivanhoe Izaak Izvestia jabbering/S jackass jackboot/DS jackdaw/S Jackie jackknife/DGMS Jackman jackpot/S Jackson/MS Jacksonian Jacksonville Jacky Jacob/S Jacobean Jacobian Jacobite Jacobs/N Jacoby Jacqueline Jacques jag jagged/PY jaggers jagging jaguar/M jailbird/MS Jakarta/M Jake/S jalopy/S Jamaica/M Jamaican/M jamboree/M Jameson/M Jamestown/M Jamie/M Jan/M Jane/M Janeiro/M Janesville/M Janet/M jangle/DGRS Janice/M Janis janissary/S janitorial Jansen/M Janus jasmine/M Jason/M jasper/S Jastrow jaundice/DGS Java/M Javanese JavaScript/M jawbone Jaycee/MS jazzmen jazzy/PRY Jeanette/M Jeanie/M Jeanne/M Jeannie/M Jeff/M Jeffersonian/S Jeffrey/MS Jehovah/M jejune/PY jejunum Jello/M Jenkins Jennie/M Jennifer/M Jennings/M jeopard jeopardy/S Jeremiah/M Jeremy/M Jericho/M Jerome/M jerry Jerry's Jerusalem/M jess Jesse/M Jessica Jessie Jessy Jesuit/S Jesus jetliner/S jettison/DGS Jew/S Jewelled Jewish/P jibe/DGS jiffy/S jigger/D jigging jiggle/DGS jigsaw jilt/DRS Jim/M Jimmie jimmy/DGS Jimmy's Jinny jinx jitter/S jitterbug jittery jive/DGS Joan Joanna Joanne/MS Joaquin jobbery jobbing jobholder/S jobless/P Jobrel jockey/DGS jockstrap/S jocose/PY jocular/Y Jodi/M Jody Joe/MS Joel/M joey Joey's joggle/DGRS Johann Johannes Johannesburg Johansen Johanson Johnny/M Johnsen Johnstown joist/S jokester/MS Joliet jollity/S Jon/M Jonas Jonathan/M Jones/S jonquil/S Joplin Jordan Jorge Jorgensen Jorgenson Jose Josef Joseph Josephine Josephson Josephus josh/DGRS Joshua Josiah joss joule jounce/DGS journalese/S journeyman journeymen Jovanovich Jove jovial/Y joviality Jovian jowl/DS Joyce/M joyless/PY joyride/GR joystick/S JPEG JPL Juan/M Juanita Jubal jubilant/Y jubilate/DGNSX Judaism Judas Jude Judea judgeship judgmental judgmentalism'M judicatory judicature/S Judith judo Judy/M jugate jugging juju jujube juke/GS jukebox/MS julep/S Jules Julia Julian Juliet Julio Julius jumbo/S Juneau Jungian junkerdom junket/DGRS junketeer/G Juno junta Jupiter juridical/Y jurisdictional/Y jurisprudence jurisprudent jurisprudential/Y jurist/S justiciable Justin/M Justine Justinian jute/S Jutish jutting juxtaposition kaboom Kabuki Kabul Kaddish Kafka Kafkaesque Kalamazoo kaleidescope kamikaze Kamikazes kangaroo/S Kankakee Kansas Kant kaolin kaolinite kappa karaoke/M karat karate Karen Karl Karol Kate Kathleen Kathy Katie/M Katmandu Katrina/M katydid/MS Katz/M Kay kazoo/S kB kb kcal Keaton Keats kebob Keegan Keenan keg/S Keith Keller/M Kelley Kellogg Kelly/M kelp Kelvin Kenilworth Kennecott Kennedy Kenneth Kenny keno Kenosha Kensington Kent Kentucky Kenya Kepler/M Kerberos Kermit Kernighan/M ketone ketosis Kettering Kevin Kewaskum Kewaunee keyhole/S Keynes Keynesian keynote/RS keypunch/DGRS keystone/S kg KGB khaki/S khan Khmer Khrushchev/S kibbutzim kibitz/R Kickapoo kickback/S kickoff/S kidder kiddie/S kidless Kiel Kiev killable Killebrew killjoy kilobaud kilobuck kilogauss kilohertz kilohm kilojoule kiloton/S kilovolt/S kilowatt/S kiloword kilts Kim kimono kinematic/S kinesics kinetic/S kingbird kingfisher/MS kinglet kingpin Kingsbury Kingsley Kingston Kingstown Kingwood kink/U Kinnickinnic Kinsey kinsmen/M kiosk/S Kipling Kirby Kirchoff Kirk/M Kirkland Kirkpatrick Kirkwood kitchenette/S kittenish/PY Kiwanis Klan Klaus klaxon kleenex klystron/S km kneecap/S kneepad/S knick/RZ knickerbocker knitted knitting knobby Knobeloch knockdown/S knockout/S knockwurst knotmeter/MS knotty/PR Knowles Knox Knoxville knuckleball/R Knudsen Knudson knurl Knutsen Knutson koala Koch Kodachrome Kodak/S Kodiak Koenig Koenigsberg Kohler kohlrabi Kong Konrad kooks Korea Korean/S kosher/DG Kraemer kraft Krakatoa Krakow Kramer Krause kraut/S Kremlin Kresge krill Kris Krishna Kristina/M Krueger Kruger krypton kudzu kumquat Kurd Kurdish Kurt kurtosis Kuwait Kyle/M Kylie/M Kyoto la/S labial/Y labile labiodental laborious/PY Labrador Lacey lackadaisic Lackawanna lackey/DGS lacrosse/S lactate/DGNS lactational/Y lactose lacuna/S lacunae ladle/DGS ladylike Lafayette laggard/PSY lagging Lagrange Laguna laissez laity Lakehurst lakeside Lakewood lamas Lamborghini/MS lamentably laminate/DGNSX lammed lamming lampblack lamplight/R lampoon/DGRS lamprey/S LAN Lancashire Lancaster Lance/M landau landfall/MS landfill landhold/GJRZ Landis landless landlubber/MSY landownership landslide/S Landwehr Lange Langeland Langford Langley languor lank/PY lanky/PRY Lansing lanthanide lanthanum Laocoon Laos Laotian/S lapidary Laplace lapped lapping laptop/MS Laramie larceny larch Laredo largemouth largesse largish lariat Larry/M Lars/N Larson larval laryngeal/Y larynx/S las/G lascivious/PY lasso/DR latecomer/MS lathe Lathrop Latinate Latino/MS latitudinal/Y latitudinary Lattimer laud/DGRS laudably laudanum laudatory/Y Lauderdale laughingstock/S laundresses Laundromat/S laundrymen laura Laura's laureate/DGNS Lauren Laurence Laurentian lawbreaker/S lawbreaking Lawford lawgiver/S lawgiving lawmakers lawmaking lawman lawmen Lawrence Lawrenceville lawrencium Lawson/M lax/PY laxative/PSY laxity layoff layperson layup/MS Lazarus lazybones lb/S LCD leach/GS leachate leaderless leadsman leadsmen leafhopper leaky/PRY leapfrog Leary leasehold/R leatherneck leathery Leavenworth Lebanese Lebanon lebensraum Lebesgue lecher lechery Lee/M leek leery leeward/S leeway lefty/S legate/DGNSX legatee legato legerdemain legging leggy/R leghorn legume/S leguminous Lehigh Leigh Leighton Leila leitmotif leitmotiv Leland/M Lemke lemming/S Lenin Leningrad Leninism Leninist Lennon/M Lenny lenticular Leo Leon Leona Leonard Leonardo Leone leonine Leopold Leopoldville leper/S lepidopterist/MS Leroy lesbian/S lesion/S Leslie lessor letdown/MS lethal/Y lethality lethargy/S letterhead/S letterman lettermen leukemic Levi/S Levin/M Levine levitate/DGNS Leviticus levity/S Lewellyn lewis lex Lexington Leyden libation/S Libby/M libel/S Liberace liberalism liberality Liberia libertarian/S libertine/S libidinous/PY librettist/S libretto/MS Libya Libyan lice licensable licensor licentious/PY Lichtenstein Lichter licit/Y licorice lidding lidless Lieberman Liechtenstein lieut lifeblood lifeboat/S lifeguard/S lifesaving lifespan/S LIFO ligament/S ligand/S ligature/DGS lighthearted/PY lightproof lightships lignite lignum likeable Lilliputian lilt/G lilting/PY Lima limbic limbo/S limelight limerick/MS limitless/PY limnologist/MS limo/MS limousine/S limpid/PY Lincoln Linda/M Lindberg Lindy lineage/S lineal/Y linebacker/S lineman/MS linemen lineup/S lingerie lingo lingua lingual/Y liniment/S Linotype Linus Linux/M Lionel lipid/MS Lipton liquefaction liqueur liquidate/DGS Lisa Lisbon Liss listless/PY Liston Liszt/M litany/S literalism lithium lithograph/RSZ lithography lithology lithosphere lithospheric Lithuanian litigant/S litigious/PY litmus litterbug Little/M littleneck Littleton Litton littoral liturgic/S liturgical/Y liturgy livability Livermore Liverpool liverwort livestock livid/P Livingston Lizzie Lizzy Lloyd loadable loam loamy lob lobotomy lobular/Y lobularity lobule/S locale/S localisms locational/Y lockdown/MS Locke Lockhart Lockheed Lockian locknut locksmith/G Lockwood locomotor locomotory locoweed lodestone lodgepole lodgment Logan logarithmic loge/NX loggerhead logistical/Y logjam logo/MS loincloth Lois Lola loll/GR lolly/S Lombard London/MR Londonderry longevity Longfellow longhand longhorn/S longish longitudinal/Y longshoremen longstanding Longstreet longterm longtime looseleaf lop/DGRS lope/DGR Lopez lopped lopping lopsided/PY loquacious/PY loquacity Lorelei Lorentzian Lorenz/M Lori/M lorikeet/MS Lorraine lossage lossless Lothario lotion/S Lottie loudspeaking Louis Louisa Louise Louisiana Louisianan Louisville louse/DGS lousewort lovebird/S Lovejoy Lovelace Loveland loveless/PY lovelorn/P lowboy lowdown Lowell lowercase/DGS lowlight/MS Loy loyalist/S Loyola lozenge/DS LRU Ltd Lubbock lubricate/DGSVX lubricious/Y lubricity Lucas lucent/Y Lucerne Lucia Lucian lucid/PY lucidity Lucien Lucifer Lucille Lucius lucrative/PY lucre Lucretia Lucretius Lucy/M Ludmilla Lufthansa Luftwaffe lug/RS luge/R lugged lugging Luke/M lulu lumbar lumberman lumbermen lumberyard lumen luminary/S luminescence luminescent luminosity lummox lumpish/PY lumpy/PRY Luna/M lunacy lunary lunate/DNY lunchroom/S lunchtime lunge lupine lurid/PY lush/PSY lustful/PY lutanist Luther Lutheran luxe/S Luxembourg luxuriance luxuriate/DG lycopodium Lycra/M Lydia lye lymphocyte/S lymphoma Lynchburg Lyndon Lyon lyrical/PY lyricism lyricist/S ma/M Mac/M macabre/Y MacArthur/M Macarthur/M Macaulay/M Macbeth/M MacDonald/M Macdonald/M Macedon Macedonia Macedonian/M MacGregor/M Macgregor/M Mach Machiavelli Machiavellian machinable machination/MS machinelike machinist/S machismo macho macintosh mack MacKenzie Mackenzie Mackinac mackinaw mackintosh MacMillan Macmillan Macon macrodynamic macromolecular macrophage/MS macroscopically macrosimulation macrosocioeconomic Madagascar/M Madame/MS madcap madding Madeleine/M Madeline/M madhouse/MS Madison/M madmen/M Madonna/S Madrid/M madrigal/GS Maelstrom/M maestro/MS MAG Magdalene/M magenta/M Maggie/M maggoty magi/M Magill/M magisterial/Y magnanimity magnanimous/PY magnate/MS magnesia/M magnesite/M magnetite/M magneto/MS magnolia/MS magnum/MS magpie/MS Magruder/M Maguire/MS Mahadev/M Mahler/M maidenhair/M maidservant/M mailman/M mailmen/M Maine/M mainline/DGRSZ mainmast/MS mainspring/MS mainstream majestically maladapt/DV maladjust/DV maladjustment/MS maladroit/Y malaise/M Malamud/M malaprop malapropism/MS malarial malarious Malay/M Malaysia/M Malaysian/M Malcolm/M malcontent/DMS malcontented/PY maledict malediction/M malevolence/M malevolencies malevolent/Y malfeasant/M malformation/S malformed malign/DY malignancy/MS malingering mallard/MS malleable/P Mallory/M malnourished malocclusion/M malodorous/PY Malone/M malposed malpractice/M Malta/M Maltese/M Malthusian/MS maltreat malware/MS mambo/MS mammalian/M Managua/M manatee/M Manchester/M mandarin/MS mandrake/MS Manfred/M manganese/M manhole/MS mania/M maniacal/Y manic manicurist/MS manikin/MS Manitoba/M Manitowoc/M Mankowski/M manna/M mannequin/MS mannerism/MS manorial/M manservant/M Mansfield/M manslaughter/M mantlepiece/M mantrap/M Manville/M Mao/M Maori/MS Maplecrest/M marathon/MS marauder/MS Marcie/M Marconi/M Marcotte/M Marcus Marcy/M Mardi/S Margaret/M margarine/M marginalia marginality Margo/M Marguerite/M maria Maria's Marian/M Marie/M Marietta/M Marilyn/M Marin/M marina/MS marinade/MS Marino/M Mario/M Marion/M marionette/MS Marissa/M marital/Y Marjorie/M marketeer/GMS Markov/M Markovian Markovitz marksman/M marksmanship/M marksmen/M Marlborough Marlene/M marlin/MS Marlowe/M marmalade/MS maroon/DGS marquee/S marquess/S Marquette/M marred/U marriageable marring Marriott/M marrowbone/MS Marseilles Marsha/M Marshall/DGM marshland/MS marshmallow/MS Martha/M Martian/MS martin/MS Martinez/M martingale/MS martini/MS Martinique/M Martinson/M Marty/M Marvin/M Marx/MS Marxism/MS Marxist/MS mascara/MS mascot/MS maser/M Maserati/MS Masonic Masonite/M masque/RSZ massless mastermind/DGS mastiff/MS mastodon/MS matchbook/MS materialistic maternity/M Mathews Mathewson/M Mathias Mathieu/M Matilda/M matinee/M Matisse/MS matriarch/M matriarchal matriculate/DGS matrimonial/Y Matthew/MS Mattie/M matting/M maturate/DGSVX maturational Maude/M maudlin/Y Maui/M maul/GRSZ Maureen/M Maurice/M Mauritania Mauritius mausoleum/S mauve maverick/S maw/M mawkish/PY Mawr/M maxima/M Maximilian/M Maxine/M maxwell/M Maxwellian Maya Mayan/MS Mayer/M Mayfair/M Mayflower/M Maying Maynard/M mayorship/MS Mays Mazda/MS mb MBA MBA's McAdams McAllister/M McBride/M McCabe/M McCall/M McCarthy/M McCauley/M McClain/M McClellan/M McClure/M McCluskey/M McConnell/M McCoy/M McCracken/M McDaniel/M McDermott/M McDonald/M McDonnell/M McDougall/M McDowell/M McFadden/M McFarland/M McGee/M McGill/M McGillicuddy/M McGinty/M McGovern/M McGrath/M McGraw/M McGregor/M McGuire/M McIntosh/M McIntyre/M McKay/M McKee/M McKesson/M McKinley/M McKinney/M McKnight/M McLanahan McLaughlin/M McLean/M McLeod/M McMillan/M McNaughton/M McNeil/M McPherson/M MD MDT meadowland meadowsweet mealtime mealy/RS measle/D measly/R meaty/PRT mecca mechanist mechanistic mechanochemically meddlesome/P Medea Medfield mediator/S Medicaid Medicare medicate/DGNSVX Medici/S medico/S medievalist/MS mediocre mediocrity/S Mediterranean mediumistic medley/S meerkat/MS meetinghouse Meg/M megahertz megalomania megalomaniac megalopolises Megan/M megaphone/MS megapixel/MS megaton/S megavolt megawatt megohm/S Meister Meistersinger Mekong Mel/M melamine Melanesia Melanesian melange Melanie melanin melanoma Melbourne melee Melinda meliorate/DGNSVX Melisande Mellon melodic melodically melodramatic/S Melville Melvin memento/S mementoes memorabilia memoriam Memphis menarche/S Mencken mendacious/PY mendacity mendelevium Mendelssohn/M Mendoza Menelaus menfolk/S meningitis Menlo Mennonite/S Menominee menopause Mensch menstrual menstruate/DGNSX mensurable/P mensuration/S Mephistopheles mercantile Mercator Mercedes mercer/S merchantability mercurial/PY mercuric Meredith meretricious/PY meringue/S meritocracy meritocratic Meriwether Merle merlin mermaid/MS merman/M mermen Merriam Merrick Merrill Merrimac Merrimack merrymaking mesa mescaline mesmeric meson Mesozoic mesquite Messrs metabolic metabolism/S metabolite/S metalliferous metallography metalloid metallurgic metallurgical/Y metallurgists metalsmith/S metalwork/GJR metamorphic metamorphism metamorphose/D metaphoric metaphosphate metaphysic meteorite/S meteoritic/S meteoroid/MS meteorological meteorologist/MS methane methanol methodism Methuselah/S methyl methylene meticulous/PY Metricom metro/S metronome/S mettle/DS mettlesome Mexican/S Mexico Meyer/S mezzo/S Miami miasma miasmal Michael/MS Michaelangelo Michaelson Michelangelo Michelin Michelle/M Michelson Mick Mickelson Mickey/M Mickie Micky micro/S microamp microanalysis microanalytic microbial microchemistry microcosm microeconomic microfossils micrography microjoule microkernel/MS microlevel micrometeorites micrometeoritic micrometer/MS micron/S Micronesia Micronesian microorganism/S microscopical/Y microscopy microsimulation/S microsomal microvolt/S midair midas midband Middlebury middleman middlemen Middlesex Middleton Middletown middleware/MS middleweight/S midge/S midi midland/RS midlife midmorn/G midrange midriff/MS midscale midsection midship/S midshipman midshipmen midspan midstream midterm/MS midweek/Y Midwestern/RZ midwife/DG midwives midyear MIG might've mignon migrant/MS migratory/S MIGs Miguel mike/DGS Mike's Mikhail Mikoyan mil Milan Mildred milieu/S militarist militate/DGS militiamen milkweed Millard millenarian millenarianism millenia millennia millennialism millennium milliamp milliampere/S millidegree/S Millie milligram/MS millijoule/S milliners millinery millivolt/S millivoltmeter/MS milliwatt/S millwright/S Milquetoast/S Milton Miltonic Milwaukee MIMD mime/GR MIME's mimeograph/DGMS mimesis mimetic mimetically mincemeat minefield mineralogical mineralogist/S mineralogy/S Minerva/M minesweeper/S mini/S minidress/S minify/DGS minima minimalist/MS minimax miniscule miniskirt ministerial/Y ministrations miniver Minneapolis Minnie/M Minoan minuend/S minuet minuscule minuteman minutemen minutiae Miocene Mira mirage/DGS Miranda Miriam/M mirthless/PY misadventure/DMS misalign/DGS misalignment/MS misanthrope misanthropic misapprehension/MS misbegotten misbehave/DRS misbrand/DGS miscalculated miscarriage/S miscarry/DGS miscegenation/S miscellany/S misclassification misclassified misclassifying miscode/DGS misconduct/DGS misconfigure/DGS misconstruction/S miscount/DGS miscreant/S miscue/MS misdeed/S misdemeanant/S misdirector/S misestimate/DGNS misfire/DGS misgauge/DGS misidentification/MS misidentify/DGNSX misinterpretation/S misjudge/DGS misjudging/Y mismanage/DGS misname/DGS misogynist/MS misogyny misplacement/S misprint/MS mispronounce/DGS mispronunciation misquote/DGS misrelated misremember/DGS misreporting misrepresent/DGRS misroute/DS misshapen/PY misshapenness/S Mississippi Mississippian/S Missoula Missouri misspecification misspecified misstatement/S misstep Missy mistletoe mistook mistreatment/MS mistrial miswritten Mitch/M Mitchell/M Mitsubishi/MS mitzvah/MS mixup mm mobbed mobbing mobcap/S Mobil mobile/MS mobster/S mockingbird mockup/S mod/S modernism modernist/MS modernistic Modesto modicum modish/PY Mohammed/M Mohammedan Mohawk moiety/S Moines moire molal molar/S moldboard molehill Moliere Moline moll mollie mollify/DGNSX mollusk/S mollycoddle/DGRS Molotov molt/DGRS molybdenite molybdenum momenta momma mommy Mon Monaco monad/S monadic monarchic monasticism monaural/Y Monet monetarism moneylenders moneymaking Monfort Mongolia Mongolian mongoose/S Monica monies monkish monochromatic monochromator monocle/DS monoclinic monocular/Y monogamous/PY monogamy monolingual/S monolingualism monolith/S monolithically monologist/S monologue/S monomer/MS monomeric monomial mononuclear monophonic monopod/MS monopolistic monopolists monorail/MS monosyllabic monosyllable/S monotheistic Monroe Monrovia Monsanto monsieur monsoon/S monstrosity/S montage/DGS Montague Montaigne Montclair Monterey Montevideo Montgomery Monticello Montpelier Montreal Monty monumentality moo/DS Mooney Moorish mope/S mopped mopping moraine moralist moralistic moratorium/S Moravia Moravian morbidity mordant/Y Morehouse Moreland Morgan morgen morgue/S Moriarty moribund Mormon Moroccan morocco moronic morose/PY morpheme morphemic morphine/S morphism/MS morphologic morphophonemic/S morris Morrison Morristown Morse mortgagee/S mortician/S Mortimer Morton/M Moscone Moscow Moses mosque/S Mossberg mote/MS motherfucker/MS motherhood motherland motional motivator motorman motormen mottle/DGRS mountable mountainside/S mousy/PRY mouthpiece/S Mozart/M MPH MST MTS MTV mucilage mucky mucus mudding muddlehead/DS muddleheaded/P mudguard mudsling/GRZ muggers mugging/S muggy/PRY Muhammad Muir/M mulatto/S mulattoes mulch/DGS mulct mulish/PY mull/GNR mullah mulligan Mulligan's mulligatawny multi multicast/DGS multichannel multicollinearity multicolumn multicomputer/MS multiculturalism/M multidimensionality multidisciplinary multifaceted multifigure multifunctioned multilateral/Y multilingual/Y multilingualism multimedia/M multimegaton multimillionaire multinomial multiplet/S multipliable multipurpose multiset/MS multisyllabic multitudinous/PY multivalent multiversity mum Mumford mummify/DNX Muncie Mundt munge/DGJRSZ Munich munificent/Y Munroe Munson muon muriatic Muriel murk Murphy Murray Murrow Muscat muscovite/S Muscovy musculature mush/R musicality musicianship musicological musicologist/MS musicology Muskegon muskellunge muskmelon muskox/N muss/DGS Mussolini/MS Mussorgsky/M must've mustachio/DS mustang/S mustn't mutant/S mutational/Y mutineer mutt mutuality Muzak Mycenae Mycenaean mycology myers mylar mynah myocardial myocardium myopia myopic Myron mystify/DGNRS mystifying/Y mystique mythic mythographer/S mythography mythological/Y NAACP nab nabbed nabbing Nabisco NaCl nadir Nagasaki nagged nagging/Y Nairobi Nakamura Nakoma nameplate/S nameserver/MS namespace/MS Nan Nancy/M Nanette Nanking Nanook Nantucket Naomi naphtha Naples Napoleon Napoleonic napped napping narcissist narcosis narrate/DGNSX narrator/MS nary NASA NASA's nasality NASCAR nascent/A Nash Nashua Nashville Nassau nasturtium Nat natal Natalie/M natalist natality natch Natchez Nate Nathan/M Nathaniel nationalism/S nationalistic nationhood NATO natty/PRY naturalistic nausea/S nauseate/DGS nauseating/Y nautical/Y nautilus Navaho Navajo navel/S navigational/Y Navona Nazarene Nazareth Nazism NBC NBS NCAA NCC NCR nd Neal/M Neanderthal Neapolitan nearsighted/PY nebulae nebular nebulous/PY neckline necromancer/S necromancy necromantic necropsy necrosis necrotic nectar nectarous nectary/S nee Needham needlepoint negativism/S negativity negligee/S negligent/Y negotiant negroid nelson nematic nematode/S nemesis neoclassic neoclassical neocortex neodymium neolithic neologism/MS neomycin neon/D neonatal/Y neoplasms neoprene Nepali Neptune neptunium Nero nerveless/PY nervy/PR Nestor Netflix netherworld netizen/MS Netscape/M nettlesome Neumann/M neuralgia neurasthenic neuritis neuroanatomy neurologist neurology neuromuscular neuronal neuropathology neurophysiology neuropsychiatric neuroscientist/MS neuroses neurosis neurotic neuter/DGJRSZ neutralism neutralist/S neutron/S Nevada Newark newbie/S Newbury Newburyport Newcastle newel Newell newfound newfoundland newlywed/S Newman Newport newsboy/S newscast/GRSZ newspaperman newspapermen newsreel newsstand Newsweek/Y newsworthy/P newton Newton's NeXT NeXTStep nexus/S NFS's Niagara Nicaean Nicaragua Niccolo Nicholas Nichols Nicholson nichrome Nicklaus Nicodemus Nielsen/M Nielson Nietzsche Nigeria Nigerian niggard/Y niggardly/P niggle/DGRS niggling/Y nightcap nightclub/S nightdress nighthawk nightmarish/Y nightshirt nighttime nihilism/S nihilist nihilistic Nijinsky Nile nilpotent Nilsen Nilsson nimbus/DS Nina ninefold Niobe niobium nipped nipping/Y nipple/S Nippon nirvana nit/MS nitpick/RZ nitpicker/MS nitrate/DGNSX nitric nitride/G nitrite nitrogenous nitroglycerine nitrous Nixon nm NOAA Noah nob Nobel nobelium Noble/M noblemen noblesse nobody'll nocturne/MS nodal/Y nodular nodule/S Noel noisemake/GRZ nomad/MS nomadic nominee/S nonacid nonadjacent nonagricultural nonbusiness noncarbohydrate nonchalant/PY noncombatant noncommissioned noncommittal/Y noncompliance nonconformist/S noncontiguous nondiscrimination nondiscriminatory nondurable noneconomic nonemergency nonequivalence nonequivalent nonessential nonferrous nonfiction nonionic nonlinguistic nonliterary nonmagical nonmetallic nonogenarian nonpartisan nonpayment nonperturbing nonpoisonous nonpolitical nonprescription nonprofit/MS nonracial nonrandom nonreducing nonresident nonresidential nonresistance nonrespondent/S nonresponse nonsectarian/MS nonsingular nonstop nonsupervisory nonverbal/Y nonveteran/S nonviolent/Y nonvolunteer/S nonwhite noodle/DGS noontime noose/GS noradrenalin noradrenaline Norfolk Norma Norman/M Normandy normative/PY Norris Norristown Norse Northampton northbound northernmost Northfield northland Northumberland Norton Norwalk Norway Norwegian Norwich nosebleed/MS nostalgia nostalgic nostalgically Nostradamus nosy/PRY notary/MS notate/DGSV notoriety Notre Nottingham nouveau nouvelle nova/MS novitiate/S noxious/PY Noyes nozzle/S NSA NSF nth nuance/D Nubian nubile nucleate/DN nuclei nucleic nucleoli nucleolus nuclide nude/PRSTY nudge/DGRS nudism nudist/S nudity nugatory Nugent nugget/MS nullity numerable numerate/DGNSX numerological numerology numinous numismatic/S numismatist nutate/DGNS nutcrack nutmeg nutrient/S nutritional/Y nutritionist/S nutritious/PY nutritive/Y nutshell nutty/PR nuzzle/DGS nylon/S nymphomania nymphomaniac/S NYSE O'Brien/M O'Clock O'Connell/M O'Connor/M O'Dell/M O'Donnell/M O'Dwyer/M O'Er O'Hara/M O'Hare/M O'Leary/M O'Reilly O'Shea/M O'Sullivan/M oaf/S Oakland/M Oakley/M Oakmont oakwood oases obduracy obdurate/PY obeisant/Y obelisk/MS Oberlin obese obesity obfuscatory obit/R obituary/S objectify/DGNSX objectivity obligational obnoxious/PY oboe/S oboist/MS obscenity/S obsequies obsequious/PY obsequy observably observational/Y obsess/DGSV obsessive/PY obsidian obsolescent/Y obtrude/DGRS obtrusive/PUY obtuse/PRTY obverse/Y ocarina Occam/M occident occidental/Y occipital/Y occlusive occult/RY oceanic oceanographic oceanography oceanside ocelot Oconomowoc octagon/S octagonal/Y octahedron octane Octavia octennial octet octile octillion octogenarian octoroon ocular oculist Odessa odium odometer/MS odoriferous/PY Odysseus odyssey Oedipal/Y offal offbeat Offenbach offertory/S offhand/D offhanded/PY officeholder/S officemate/S officialdom offline offload/DGS offramp offsetting offshoot offshore offstage Ogden ogive ogled ohm/S ohmic ohmmeter/MS oilman oilmen oilseed/S OK's Okamoto Okinawa Olaf Oldenburg Oldsmobile oldster/S oldy/S oleander/S Oleg oleomargarine Olga oligarchic oligarchy oligopolistic oligopoly Olivers Olivetti Olivia Olsen Olson Olympia Olympian Olympic/S Olympus Omaha Oman omega/S omelet/S omicron omni omnibus omnipotence omnipotent/Y omniscience oncology oncoming Oneida onetime oneupmanship onlooker/S onrush/G onslaught/S onstage Ontario ontogeny ontological/Y ontology onus onyx oodles opalescent/Y OPEC Opel operant/SY operatic operetta ophthalmic ophthalmologic ophthalmologist ophthalmology opine/DGS opinionated/PY opossum/MS Oppenheimer opposable opprobrium opticians optimist/S optionality optometric optometrist/S optometry opulence/M opulent/Y opus/S orangutan/MS orate/DGS oratorical/Y oratorio/S orchestral/Y orchestrate/DGNRSX ordnance/S oregano Oregon Oregonians organdy organically/I organismic organometallic orgasm/S orgiastic oriental/Y origami/M oriole/S Orlando Orleans Orlick ornate/PY ornery/P orographic orography orphanage/S orphanhood Orpheus Orphic Ortega orthodontic/S orthodontist/S orthodoxy/U orthographic orthography/S orthonormal orthophosphate/S Orwellian Osaka Osbert Osborn Osborne Oscar OSDI Oshkosh Oslo osmium osmosis osmotic osprey/S osseous/Y ossify/DNX ostensible ostensibly ostentatious/PY osteology osteopath/S osteopathic osteopathy osteoporosis ostracism Ostrander Oswald Othello otherworld/Y otherworldly/P OTOH Ottawa Otto/M Ottoman ouch oughtn't oust/DGR outage/MS outback outboard/S outbuilding/MS outclass/D outcrop/MS outdated/P outdistanced outdistancing outdo outdrew outface outfield/RZ outfitted outflow/S outfought outfox outgeneraled outgrip outhouse outland/RZ outlandish/PY outlawry outliers outlying outmatched outmigration outmoded outnumber/DGS outpatient/S outplayed outpour/GJ outreach outrigger/S outscoring outshone outsized outsmart/DGS outspoken/PY outspread outstate/N outtake/MS outworn ouzo ova ovate/NSX ovation/DGS overabundance overactive overage overaggressive overarching overbearing/PY overburden/DGS overburdening/Y overcerebral overconfident/Y overconsumption overcooked overcooled overcorrection overcurious overdeveloped overdid overdo/G overdoes overdriving overeager/PY overeat/GNR overeducated overexcited overexploitation overexploited overextend/DGS overextension overfall overfeed overfill/DGS overgenerous overgrazing overgrown overhand/D overheat/DGS overindulged overlords overloud overpaid overpass/MS overpayment overplayed overplaying overpopulated overpopulation overpressure overprice/D overprotection overprotective overran overrated overreach/DRS overrepresented oversample/DG oversaturate oversaw overshoes oversize/DS oversleep/GS overslept oversoft/P overspill overstay overstepping overstraining overstrike/GS oversubscribed oversupply overtax/DGS overwrap Ovid oviform ovulatory Owen/S owlish/PY owly oxalate oxalic oxaloacetic oxcart Oxford oxidant oxidate/VX oxidative/Y Oxnard oxygenate/DGNSX oxyhydroxides oxymoron/MS Oz Ozark/S ozone Ozzie Pablo/M Pabst/M pacemaker pacesetting pacifism pacifist pacifistic Packwood paddock padlock/DS padre paean/S Paganini paganism pageantry pagoda/S Paine paintbrush Pakistan Pakistani/S palatability/U palatable/P palatal/Y Palatine palefaces Paleolithic paleontologist/MS Paleozoic Palermo Palestine palette palindrome/S palindromic palisade/S palladium pallet/MS Palmdale/M palmetto palmist Palmolive palmtop/MS Palmyra Palomar palpable palpably palsy/DGS paltry/PR Pam/M Pamela pamper/DGRS panama Pancho pancreatic pandemic Pandora panicked panicky panjandrum panoply/D panorama/S panoramic pantheism pantheist pantheon pantomime/D pap paperboard paperhangers paperweight/S papery/P papillary papoose Pappas pappy/S papyri papyrus/S parable/S parabola parabolic paraboloid paraboloidal paradigmatic paradoxic Paraguay parakeet/S parallelepiped/S paramagnet paramagnetic paramedical parametrically paranoiac/S paranormal/Y paraphernalia paraplegic paraprofessional/S parapsychology parasol/S parasympathetic paratroop/RSZ paravirtualization/MS parboil/D parenthetic pariah parimutuel/S Paris parishioner/S Parisian parka/MS Parkersburg Parkhouse Parkinson parkish parkland parklike parkway parlance parlay/DGS parley/S parliamentarian/S parochial/Y parochialism/MS parody/DS parolee/S parquet/DG Parrish parrotlike parsec/S parsimonious/Y parsnip parsonage Parthenon participial/Y participle/S particularistic particularity particulate/S partook parvenu Pasadena passable Passaic passband passerby passersby Passover pasta pasteboard pastel/S Pasternak pasteup Pasteur pastiche pasty/PRS Patagonia Patagonians patchy/PRY patentee/S paternalism paternalistic paternity paternoster pathless/P pathogen/S pathogenesis pathogenic pathologic patina/S patio/S patriarchal patriarchy/S Patrice Patricia patrimonial patrimony patristic/S patrolled patrolling patrolman patrolmen patroness Patsy/S patted Patterson/M patting Patton Paul/GM Paula Paulette/M Pauli Pauline Paulsen Paulson paunch paunchy/PR pauper Pavlov pawnshop/MS Pawtucket payday payload/MS paymaster/S Payne/S Payson PB/S PCMCIA PDT Peabody peacemaker/MS peacemaking peacetime/S Peachtree peaky Pearce peasanthood pecan/S peccadilloes peccary Pecos pectoral/S peculate/DGNS pecuniary/Y pedagogue pedagogy pedal/S pedant pedantry peddle/DGS pediatrician pedigree/D pediment/D Pedro peephole peepy peerage peevish/PY Pegasus pegboard/S pegged pegging Peggy/M pejorative/SY Peking Pelham pelican/S pellagra pelvic pelvis/S pemmican penal/Y penchant pendant/MS Pendleton penicillin penitential/Y penknife/M penknives penman penmen Penn pennant/S Pensacola pentagonal/Y Pentecost pentecostal Pentium/MS penultimate/Y penurious/PY penury peony/S Peoria peppergrass peppermint/S pepperoni peppery pepping peppy/PR Pepsi Pepsico peptidase/S peptide/S percept percolator/S percussion/S percussionist/MS percussive/PY Percy perdition/S Perez perfectibility perfectible perfectionism perfidious/PY perfidy perforate/DGNSX perforated/U perfumery perfunctory/PY perfusion Pergamon Pericles perihelion perimeter periodicity/S periodontal/Y peripatetic periphrastic periscope/S periwinkle/S perjure/DGRS perjury perk/DGS Perkins perky/PRY Perl/M permalloy permanency permeable/P pernicious/PY Pernod peroxide perpetuity perquisite/S Perry/M persecutory Perseus Pershing Persia Persian/S persiflage persimmon/S persona personae perspicacious/PY perspicuity perspire/DGS pert/PY Perth pertinacious/PY pertinence Peru Peruvian/S pervasion perverse/NPVXY pesky/R pessimism pessimist/S pesticide/S pestilent/Y pestilential/Y pestle/DGS petabit/MS petabyte/MS Pete/M Petersburg Petersen Peterson/M petite/P petits petri petrify/DN petrochemical petroglyph/MS petrol petrology Pettibone pettish/PY petulance/S petulant/Y petunia Peugeot Pewaukee peyote Peyton/M pfennig Pfizer PGP Ph pH Phaedra phagocyte/S phalanger phalanx/S phantasy pharmaceutic/S pharmaceutical/SY pharmacist/S pharmacological/Y pharmacology pharmacy/S pharyngeal pharynx/S phenol phenolic phenotype phenyl phi Phil/MY Philadelphia philander/DGRSZ philanderer/MS philanthropic philanthropist/S philanthropy/S Philco philharmonic/M Philip Philippe Philippians Philippine/S Philistine/S Phillips Philly/S philodendron philological/Y philologists philology phish/DGRSZ phisher/MS phlegm phlox phobic phoebe phoenix phonetically phonic/S phonologic phonological/Y phonology phony/PRSY phosphide phosphine/S phosphor/S phosphoresce phosphorescent/Y phosphorus photochemical/Y photoelectronic photoelectrons photoengravers photogenic photographically photojournalist/MS photoluminescence photolysis photolytic photometric photometry photomicrograph photomicrography photon/MS photorealism photosensitive phrasemaking phraseology/MS Phyllis phylogeny physiochemical physiognomy physiologic physiologist physiotherapist physiotherapy phytoplankton pianism pianissimo pianist/S pianistic pica Picasso Piccadilly piccolo/MS pickaxe pickerel/S Pickford pickiness/M Pickman pickoff/S pickpocket/MS picky/PR picnicked picnicker/S picnicking picofarad/S picojoule picosecond/MS piddle/G pidgin piedmont Pierre Pierson piezoelectric piezoelectricity pigeonhole/DGS pigging piggish/PY piggy pigmentation/S pigpen/S pigroot pigskin pigsty/MS pigtail/DMS pilfer/DGRS pillory/DGS pillowcase/MS Pillsbury pimento pimp/GSY pimple/DS pimplike pinafore/S pinball pincushion Pinehurst pinhead/DS pinheaded/P pinhole/S pinkie/S pinkish/P pinochle pintail/S pinto pinwheel pion pip Pipestone pipet pipette piquant/PY piracy pirouette/G Pisa Pisces pistachio pistole pistoleers pitchblende pitchfork/MS pitchstone pitman Pitney piton/MS Pitt pittance/MS pitting Pittsburgh/Z Pittsfield Pittston pituitary Pius pixmap/MS pixy/PS pizza/MS pizzicato placate/DGNRSV placeable placeholder/MS placeless/Y placenta placental placidity/M plagiarism plagiarist plainclothes Plainfield Plainview planeload planetaria planetarium planetesimal planetoid/S plankton planoconcave planoconvex plantain plaque/S plasm plastically platitude/S platitudinous/Y Plato platonic Platonism Platonist platoon/S platted Platteville plausibly playback/S playboy/S playhouse/S playoff/MS playroom playtime playwriting plaza/S pleat/DRS Pleiades Pleistocene plenipotentiary plenitude plenum plethora pleura/S pleural Plexiglas pliable/P pliancy pliant/PY plink/DGRS Pliny Pliocene plodded plodding/Y plop plopped plopping plosive plover/S pluggable plummer plummet/DS plunk/DGRSZ pluralism pluralist/S pluralistic plushy/PR Plutarch Pluto plutonium Plymouth plywood PM pneumatic/S Pocahontas pock pocketful pocketknife/M pocketknives Pocono/S PODC podge/RZ podia podium Poe poesy/S pogo pogrom/S poignancy poignant/Y Poincare Poindexter poinsettia Poisson pokerface/D pol polarimeter/MS polarimetry Polaris polariscope polarogram/MS polarograph polarography Polaroid polecat polemical/Y policymaker/S policymaking polio politburo politicking politico/S polities Polk polka/MS pollock pollutant/S Pollux polonaise polonium poltergeist/MS polybutene/S polychemicals polycrystalline polyelectrolytes polyester/S polyether/S polyethylene polygamous/Y polygamy polygonal/Y polygynous polyhedra polyhedral polyhedron polyisobutylene polyisocyanates polymerase polymeric polymorph polymorphic polymyositis Polynesia/M Polynesian Polyphemus polyphony polyphosphate/S polypropylene polystyrene polytechnic polytonal/Y polyunsaturated pomegranate Pomerania Pomeranian Pomona/M pompadour pompano Pompeii Pompey pompons pomposity poncho/MS pons Pontiac pontiff pontifical/S pontificate/DGNS pontoon/MS pooch/D poodle pooh poop/DGMRS popcorn poplin popper poppyseed Popsicle/S popularism porcine porgy pornographer pornography porosity porous/PY porpoise/S portage/DG portent/S portentous/PY porterhouse portfolio/S porthole/MS Portland/M portmanteau/S portraiture portrayal/S Portsmouth Portugal Portuguese Poseidon poseur/S posh/T positivism positivist/S positron POSIX/M posse/S postdate/DGS postdoctoral posteriori postfix/DGS postgraduate posthumous/PY postlude/S postmarital postmark/DS postmen postmortem postoperative/Y postorder postpartum postponement postpositions postsecondary postvocalic postwar potable/P potage potbelly/D potboil/RZ Potemkin potency pothole/DG potion/S potlatch/S potluck Potomac potpourri Potsdam Pottawatomie Potts Poughkeepsie Poulenc/MS poultice/S Poussin/S pow powderpuff powdery Powerbook/MS powerhouse/MS PPP/M practicability pragmatism pragmatist/S Prague praiseworthy/PY pram/S prankish/PY prankster/MS praseodymium Pratt prattle/DGRS prattling/Y Prattville Pravda praxes praxis prayerful/PY preamble/S prearrange/DGRS precalculate/DGRS Precambrian precautionary precess/DGS precession prechlorination precipitable precocity precode/D precollege precolonial precompute/DGRS preconscious precooked precut predator/MS predatory/Y predecline predestined predetermination/M predicator predigested predilect predilection/S predispose/DS predisposition/S predoctoral predominance preeminence preeminent/Y preemployment preemptor preen/GR preexistent preexisting prefab prefabricate/DN prefatory/Y prefect/S prefecture/S preferment prefetch/DGS prefiguration preflight/DGS pregnancy/S preindustrial preinterview preisolated prejudicial/PY preliterate preload/DGS premarital/Y premarket premeditate/NV premix/D premonition/S premonitory/Y Prentice/DG preordainment prep prepackaged prepaid prepay/DGS prepayment preponderance/S preponderant/Y preponderate/GNY prepping preprepared preprocessing prepubescent prepublication preradiation presage/DGRS Presbyterian Presbyterianism preschool/R prescience/M prescient/Y Prescott prescript presentable/P presentational presentments preservationist/MS Presley presoaks pressman pressmen prestidigitate/N prestidigitator prestigious/PY presto/S Preston/M presumable presupposition/S pretest/DGS Pretoria pretrial pretzels prevarication/MS prevision/DGS prewar prickle/DG priestess/S Priestley prig priggish/PY prim/PY primal primate/S primitivism primordial/Y primp/G Princeton Principia printmake/GRZ Priscilla prismatic prissy/PRY pristine/Y privateer/MS probabilist probity procaine processional/Y procreate/NV procreativity procrustean Procrustes proctor/DGMS Procyon prod prodded prodding prodigy/S prof profanity professorial/Y professorship profligate/SY profoundity profundity profuse/NPY progenitor prognoses prognosis prognosticate/NV prognosticator progressivism prohibitory projectile/S projectionist/S Prokofieff prolate prolifically prolix/Y prolixity prolongate/DGNS Promethean Prometheus promethium promptitude promulgators pronto proofreader proofreading proofreads propagandist/S propagandistic propane propellant/S propelling prophetically propinquity propionate propitiate/N proportionality proportionate propped propping proprietorship/S proprioception proprioceptive propylene prorate/DGN prosaic proscenium/S proscribe/DGRS proscription prosecutor/S prosody/S prostate prosthetic/S prostitute/S protactinium protagonist/S protean protease/S protectionist protectress proteolysis proteolytic protestant Protestantism protoplasmic prototypic protozoa protozoan protract/DV protrusive/PY protuberance/MS protuberant Proust provenance proverbial/Y provident/Y providential/Y provincialism proviso provocateur/S provocative/PY provost Proxmire proxy/S prudential/Y prurient/Y Prussia Prussian psalmist pseudocode/DGMS pseudonym/MS psi PST psych psychedelic psychiatric psychic/MS psychical/Y psycho/S psychoacoustic/S psychoactive psychoanalyses psychoanalysis psychoanalyst psychoanalytic psychobiology psychocultural psycholinguistic/S psychometric/S psychometry psychopath/MS psychopathic psychophysic/S psychophysical/Y psychophysiology psychos/S psychosis psychosomatic/S psychotherapeutic/S psychotherapists psychotherapy psychotic PTA ptarmigan pterodactyl/MS Ptolemaic Ptolemaists Ptolemy puberty pubescent publicists publishable Puccini/M puck puckish/PY puddly pudgy/PR pueblo/S puerile/Y Puerto puffball/S puffery puffin/S puffy/P puissant/Y puke/DGS Pulaski Pulitzer Pullman/S pullover pulmonary pulsar/MS pulsate/DGNSX pulverable puma/M pumice/DG pummel/S punctuality punctuate/DGS pundit/S punditry pungency pungent/Y punk/S punky/PRS punster/S pupal pupate/DGNS puppeteer/S puppyish Purcell Purdue/M purgation purgative purgatory Purina purism purist/S puritan/S puritanic puritanical/Y purloin/DGRS purposeless/PY pursuant purvey/DGS purveyor/S pus pushup/MS pushy/PRY pussycat putative/Y putrefy putrid/PY putt/D putted/I putty/DGS Pygmalion Pyhrric pyknotic Pyotr/M pyramidal/Y pyre Pyrex pyridine pyrolysis pyromania/M pyromaniac/MS pyrometer/MS pyrometry pyrophosphate pyrotechnic/S pyroxene pyroxenite Pythagoras Pythagorean/S python/MS QoS quackery/M quad/MS quadrangle/MS quadrangular quadrapole/MS quadrennial/Y quadric quadriceps quadrilateral/S quadrille/NS quadrillion/H quadripartite/NY quadriplegic quadrivium quadruplicate/DGNSX quaff/R quahog Quakeress Qualcomm/M Quantico quantile/S quarryman quarrymen quarterback/S quartermaster/S quartile/S quartzite quasar/MS Quasimodo/M quaternary/S quatrain queasy/PRY Quebec Queensland/M querulous/PY quibble/DGRS quiche/S quickie/S quicklime quicksand/S quickstep/S quiescent/PY quincy Quinn/M quinquennial/Y quint quintessential quintet/S quintile/S quintillion/H quintuple/DGRS quip/S quipping quirk/GS quirt Quixote quixotic quizzical/Y Quonset/MS quorum/MS rabbi/MS rabbinical/Y rabid/PY rabies racetrack/R raceway/MS Rachel Rachmaninoff/M Racine racism racist/S rackety racquet/S racy/PRY Radcliffe radian/S radicalism radices radii radioactive/Y radioactivity/S radioastronomy radiocarbon radiochemical/Y radiochemistry radiographic radiography radiologic radiological/Y radioman radiomen radiometer/MS radiometric radiometry radionics radiophysics radiotherapy radium radon Rafael raffish/PY raffle/DGS ragging ragout ragweed/S railbird/S railhead/S raillery rainless rainstorm rainwater rajah/S Rajive/M rakish/PY Raleigh Ralph/M Ralston Ramada ramify/DGS Ramirez rammed ramming Ramona rampage/DGS rampant/Y ramrod/S Ramsey rancho/S rancid/P rancidity rancorous/Y Rand Randall Randolph randy/S Randy's rangeland/MS Rangoon/M rangy/PR Raoul/M rapacious/PY Raphael/M rapier rapist/MS rapped rappel rapper/MS rapping rapport/M rapprochement/M Rapunzel/M rarefy/D Rasmussen ratable ratchet/DGMS rateable ratiocinate/DGNSV rationalism rationalist/S rationalistic rattail ratty/R raucous/PY Ravel/M ravish/GRS ravishing/Y rawboned rawhide/DG Rawlings Rawlins Rawlinson Rawson Rayburn Rayleigh Raymond/M Raymondville Raytheon raze/DGRS razorback RCA rd reachability reactant/S readably/U readapt/S readaptation readership/M readjust/GR readjustment README reaffirmation Reagan/M reagent realtor/S realty reappearance reapplication reappoint/DGS reappointment reapportionment reappraise/G reassembly reassert/DG reassurance Rebecca/M recalcitrant recant/D recappable recency receptionist/S recertification recharge/GR recheck/G recherche/S recipiency recitative recluse/MNSV recluster/G recoilless recommence/G recomposition recondite/NPXY recondition/GJS reconnaissance reconquer/DGS reconstitute/GN recontamination reconvene/G reconvention reconverting recopy/DS recoup/DGS recriminate/DGNSVX recruitment rectify/DNRXZ rectilinear/Y rectitude rectory recumbent/Y recuperate/DGNSV recurred recusant recuse redact/DGS redactions redactor redbird/S redbud redcoat/S redding redecorating redecoration rededicate redemptive redeposition redhead/DRS Redhook rediscover/G rediscovery redistricting Redmond/M redneck/DS redo redound Redstone reduct/V reductionism redwood/S Reedville reedy/R reek/DGRS reelection reenact reentry reenumerate/N Reese reestimate reeve reexamination refactoring refashion refectory/S referenda refinance refinery/S refinish/GRSZ refinisher/MS reflectance reflux/DGS reforestation reformatory/S reformism reformist/S refract/DGSV refraction refractive/PY refractometer/MS refrigerate/DN refurbish/DGR regale regalia regatta/S regency regimentation Regina Reginald regionalism registrable registrant/S registrar/MS registry/S regressors reground regulatory Regulus rehabilitate/DGNSVX rehearing Reich/M Reichenberg Reichstag/M Reiher/M Reilly/M reimbursable reimburse/GS reimplement/GS Reinhard/M Reinhardt/M Reinhold/M reinstitution reintegration reinterpretation reinterview reinvest reinvestigation rejigger rejoinder relativist releasable relevancy reliant/Y relict religionists religiosity relocatable remail/DGS remake/G remand/DG remap/DG remapping remarriage remarry/G rematch Rembrandt/M remediable/P remedial/Y Remington/M reminisce/DGS remiss/PY remission remit/S remitted remitting/U remorseful/PY remorseless/PY remount/DGS remunerate/DGNSVX remunerated/U remunerative/PY Remus renaturation renature/G Renault/MS Renee/M renegotiate/N renewable Renoir/M renovat/DGRS renovate/DGNRSX renumeration renunciate/NVX Renville/M reorient reorientation repacked repairable repairmen repartee repatriations repayment repeatability repelled repellent/Y repelling repentant/Y repertory repetitious/PY replenishment/S repopulate/DGRS reportage reportorial/Y reprehensible/P representativity reprimand/D reprise/DG reproachful/PY reprobate/GMNV reps reptilian republicanism repugnance repugnant/Y resale rescaling rescind/DR researchable resemblant resettlement reshuffle/DGS residency residual/SY residuary residuum resilience resiliency/M resilient/Y resinlike resonate/DGS resonator/S respawn/DGS respirator/S respiratory respire/G restaurateur restitution restock restorability restorative/PY restructurability restudy/DS resupply/DGMS resurgence resurgent resuscitate/DGNSV resuspension retaliate/DGSV retaliatory retardant/MS retardation retch/G retell/G retest rethink/GR rethought reticulum retiree retitle/S retouching retrenching retrenchment retribution retroactive retrofit retrofitting retroflection retroflex/D retroflexion retrogradations retrograde/GY retrogressive/Y retrorocket retrovision Reuben/M Reuters Reuther/M Rev revaluation revelatory reverberate/DNVX reverent reverie/S reversibility revet revetments revisable revisionary revisionist/S revivalism/M revolutionists revue/S revulsion/M revved revving Rex/M Reynolds RFC RFI rhapsodic rhapsody Rhea/M Rheims Rheinholdt/M Rhenish rhenium rheology rheostat/S rhetorical/PY rhetorician/S rheum rheumatic/S Rhine Rhineland/MRS rhinestone/S rhino/S rhinotracheitis rho Rhodes Rhodesia rhodium rhododendron/S rhodolite rhodonite rhombic rhombus/S Rhonda/M ribald riboflavin ribonucleic ribosomal ribosome/S Rican/S Richard/MS Richardson/M Richey/M Richfield/M Richland/M Richmond/M Richter/M Rickenbaugh rickets rickety ricochet/DGS ridable riddance ridding Ridgefield/M ridgepole Riemann/M riflemen rigamarole rigger/S Riggs rightist rigmarole/S Riley/M Rilke rimless rimmed rimming Rinehart/M ringlet/MS ringside/Z ringtone/MS rink/R Rio/M riparian Ripley/M ripoff/MS RISC risible/S risky/PRT Ritter/M Ritz riverbank/S riverboat riverfront riverine Riverview/M Riviera/M Riyadh RMS roach/S roadbed/S roadblock/S roadhouse/S Rob/M Robbie/M Robbins Roberta/M Roberto/M Robertson/S Robinsonville/M roboticist/MS robotism/M Rochester/M rockabye Rockaway/S rockbound Rockefeller/M Rockford/M Rockland/M Rockville/M Rockwell/M rodder rodding rodent/S rodeo/S Rodgers Rodney/M Rodriguez roebuck/S roentgen Roger/MS roguish/PY roil/G roistering Roland/M rollback/MS rollicking/Y Rollie/M Rollins Romania Romanian/S Romano/M romanticism Rome/M Romeo/MS Romulus Ron/M Ronald/M rondo/S Ronnie/M rood rooftop/MS rookie/MS roomful roommate/MS roomy/PR Rooney/M Roosevelt/MS Rooseveltian rootless/P Rorschach/M Rosa/M Rosabelle/M Rosalie/M rosary/MS roseate/Y rosebush Roseland/M Rosella/M rosemary Rosen/M Rosenberg/M Rosenthal/M Rosetta/M rosette/MS Rosie/M Ross Rossi/M Rossini/M roster/MS rostrum/M Roswell/M Rotarian/MS ROTC Roth/M rotogravure/S rotor/S rototill rotted rotting rotund/PY rotunda rotundity roughish roughneck roughshod roulette/DGS roundhead/D roundheaded/P roundhouse roundtable roundworm Rousseau/M roustabout rowboat/S rowdy/PRSY rowel Rowena/M Rowland/M Rowley/M Roxy/M Rozelle/M RPC RPM RSVP rubbery rubdown rube/S rubella rubicund rubidium rubric/MS ruckus rudderless Rudolph/M Rudy rueful/P Rufus rugby/M Rumford ruminant/SY rummage/DGR Rummel rummy/RS rumpus runabout/S rundown rune/S runic Runnymede runoff/S runt/S runty/P runway/S Runyon rupee/S Ruppert rurality ruse Rushmore rusk Russ Russell Russia/M rustproof rutabaga/S Rutgers Ruth ruthenium Rutherford Rutland Rutledge rutted rutting rutty/R Ryan/M Ryder sabbath sabbatical/MS Sabine sabras Sacajawea/M sacral sacrament/S Sacramento sacrilege sacrilegious/Y sacrosanct saddlebag/S Sadie safari/MS safekeeping saffron saga sagebrush sagged sagging Saginaw Sahara Saigon sailboat/GRSZ sailfish sailmaker/MS sainthood Sal/M salaam salacious/PY salamander salami/S Salem Salerno salesgirl saleslady salesmanship saleswoman/M saleswomen/M salience saliency salinger Salisbury salivary salivate/DGNS Salk saloonkeeper salsa/MS salsify saltwater salubrious/PY Salvador Salvadoran salvageable Salvatore salvo/S Sammy/M Samoa Samoan samovar Sampson Samson Samsung/M Samuel/S Samuelson sanatoria sanatorium Sanchez Sancho sanctimonious/PY sandalwood sandbag sandbars sandblast/DGRS sandbox/DGS Sandburg/M Sanderson/M sandhill Sandia/M sandman/M sandpile/MS sandpiper/MS Sandusky/M Sanford/M sanguinary/Y sanguineous Sanhedrin sanitate/X Sanskrit/M Sanskritic Santa/M Santayana/M Santiago/M sapped sapping sappy/PR sapsucker Sara/M Sarasota/M Saratoga/M sarcastically sarcoma/MS sarcophagi/M sarcophagus/M sardine/S sardonic Sarge/M Sargent/M sari/MS sartorius Sartre/M sashay/D Saskatchewan/M sassafras sassing sassy/RT Satan/M satanic satiable/I satiate/DGNS Satie/M satiric satirical/Y Saturn/MS saturnalia/S saturnine/Y Satya/M Satyanarayanan/M Saud/M Saudi/MS sauerkraut/M Saukville/M sauna/MS Saunders saute/S sauteed sauteing sauterne/S savagery/M Savannah/M Savonarola savoy savvy/DG sawdust/MS sawyer/MS sax/MS Saxon/MS Saxony/M saxophone/MS saxophonist/MS Saxton/M scab/S scabbed scabrous/PY scalability scalpel/MS scamp/MS Scandinavia/M Scandinavian/MS scandium scapegoat/GMS scapula/M scapular/S scarecrow/MS scarface/M scarify/NR scarred scarves scat/M scathing/Y scatterbrain/D scattergun scatting scavenge/DGS sceptic/MS sceptical scepticism/M Schaefer/M Schaeffer/M Schafer/M Schaffner/M Schapiro/M Scheherezade/M Schelling/M Schenectady/M Schiller/M schism/M schist schizoid schizomycetes schizophrenic Schlitz/M Schmidt/M Schmitt/M schmuck/MS schnapps Schneider/M schoolbag/MS schoolbook/MS schoolgirl/MS schoolgirlish schoolmarm/MS schoolmate/MS schoolteacher/MS schoolwork/M Schopenhauer/M Schroeder/M Schroedinger/M Schubert/M Schultz/M Schulz/M Schumacher/M Schuman/M Schumann/M Schuster/M Schwartz/M sciatica Scientology/M scimitar/MS scintillate/DGNS scion/MS sclerosis sclerotic scofflaw/MS scoot/DGRS scops scoreboard/MS scorecard/MS scoreless Scorpio/MS Scot/S scotch Scotchgard Scotchman Scotia Scotian Scotsman Scotsmen Scottish Scottsdale Scotty scrabble/DGRS scraggly scram scramming Scranton scrapbook/S scrapping scratchy/PR scrawny/PR screechy screed screenplay screenwriter/MS screwball screwdriver/S screwup Scribners scrim scrimmage/DGRS scrimp/DGS Scripps scriptural/Y scriven/R scrollbar/MS scrounge/DGRSZ scrubbed scrubber scrubbing scrumptious/Y scrupulosity scrutable/I SCSI scuba scuff/DGS scull/DGMRS sculptural/Y scurrilous/PY scurvy/PY Scylla Scythia Seaborg Seabrook seafare/GRZ seafood seagull/S seahorse sealant/S seamanship/S seamless/PY seamstress/S seamy/PR seance seaquake Seaquarium searchlight/S seasick/P seatmate/MS Seattle/M seawater/MS seaway Sebastian Sebring/M secant/S secession secessionist seclude/GS secretariat sectarian secularism secularist/S secularity sedan/S sedate/DGNPSVY sedentary Sedgwick sedimentary sedimentation sedition seditious/PY seduction/S sedulously seedbed/S seedless seedy/PRY Seeley seepage seersucker seesaw/DGS segmental/Y segregant segregationist segue/DMS segueing Segundo seismograph/RS seismography seismological seismology selectable selectional Selectric selenate selenite selenium selfless/PY Selfridge sellout Selma seltzer Seltzer's semen semi semiannual/Y semiarid semiautomatic semicircular semidefinite semidrying semilogarithmic seminarian/S Seminole semiprofessional/SY semipublic semiquantitative/Y semisecret semistructured Semite semitic/S Semitism/M semitrance semitropical senatorial sendmail/M Seneca Senegal senile/Y senioritis senor Senora senorita sensate/IY sensationalism sensual/Y sensuality sensuous/PY sentient/Y sentimentalists sentimentality Seoul separability/I sepia sept septate/N septennial/Y septic septillion septuagenarian septum sepulchral/Y sequestration sequin/DS sequitur/MS sequoia Serafin serape seraph/S seraphim Serbian Serbo serenade/DRS serfdom serge/G serological/Y serology Serra Service/M serviceability serviceman servicemen serviette/S servitor/S servo/S servomechanism/S sesame setback/S setscrew/S sevenfold severability severable severalfold severalty Seville sewage Seward sewerage sewn sextant/MS sextet sextillion sexton sextuple/DGMS sextuplet sexy/PRY Seymour SGML shag/S shagging shah shakeable/U shakedown shakeout/MS Shakespeare Shakespearean Shakespearian shalom shamble/DG shamefacedly Shamir/M shampoo/RS shamrock Shanghai/G shank/D Shannon/M Shapiro shards sharecrop sharecropping Sharon sharpshoot/GRZ Shasta shat shatterproof shaw Shawano Shawnee sheathe/U sheave/G Sheboygan shedding sheepskin Sheffield/RZ sheik Sheila Shelby/M Sheldon shellback/MS Shelley Shelton Shenandoah shenanigan/S Sheraton sherbet Sheri/M Sheridan sherlock Sherman sherry/S Sherwin Sherwood shibboleth/S shiftless/PY Shiite/MS shill/S Shillong Shiloh shim/S shimming shimmy/DGS shinbone shindig/MS Shinto Shintoism shipbuild/R shipman shipmate/S shipmen shipshape shipyard/S shire/S Shirley shirtmake/R shirttail shitter shitting shitty shivery shoddy/PRY shoelace/S shoemake/Z shoestring/S shoo/G shoofly shootout/MS shopkeep shoplifting/M shopworn shoreline/S Shorewood shortfall/S shortish shortsighted/PY shortstop Shostakovich/M showboat showcase/DGMS showdown showman showmanship showmen showoff/MS showpiece/S showplace showroom showy/PRY shrapnel shredded shredding Shreveport shrewish/PY shrift shrinkage shriver shrove shrugged shrugging shuck/RS shuddery shuffleboard shunned shunning shunt/DGRS shutoff shutout shuttlecock/S Shylock Shylockian Siamese Sibelius/M Siberia Siberian sibilant/Y sic Sicilian/S Siciliana Sicily sickish/PY sickroom sidearm/S sideband/S sidecar/S sideline/RS sidelong sideman sidemen sidereal sidesaddle sideshow/S sidestep/S sidestepping sidewall sideway sidewinder sidle/DGS Sidney Siegfried sienna siesta sightsee/RZ sightseeing sigma/S Sigmund signboard Signora signpost/DGS Sikh/MS Sikorsky silage Silas silica silicate/S silicide silkworm/S silo/S siltation silty Silverman silversmith/S silverware SIMD simian simile Simmons Simmonsville Simms Simon simpleminded/PY simpleton Simpson simulcast Sinai Sinatra Sinclair sinewy singe singlehanded/Y singlet singsonged sinistral/Y sinless/PY sinter/D sinuous/PY sinuousities sinus/S sinusoid Sioux sipped sippers sipping Sirius sis sisal Sistine Sisyphean Sisyphus situ/S Siva sixfold sixgun sizeable sizzle/DGR skat skeet/R skepticism sketchbook/S sketchpad skid/S skidded skidding skiff/S skillet skimpy/PRY skindive/G skinless skinny/PR Skippy skit/S skittish/PY skittle skullcap skullduggery skydive/DGRSZ skydove Skye skyhook skyjack/DGRZ skyline Skype/M skyrocket skyscrape skyward skywave skyway slag slake/DG slaked/U slalom/S slanderous/PY slapstick slatted slatting slaughterhouse/S Slav/S Slavic slavish/PY slaw sleazy/PRY sledding sleepwalk/R sleety sleight Slesinger sleuthing slimmer/S slingshot slink/DGS slipstream slither/DGS slitter/S slitting sliver/DGS slivery Sloan Sloane slob Slocum/M sloe slog sloganeer/G slogging sloop/S slosh/D slothful/PY slough/DGS sloven/Y slovenly/P slowdown/MS sludge/S slugged slugger/S slugging sluice/DGS slumming slunk slurp/DGS slurring slurry/DGS slush slyness smallish smalltime Smallwood smartphone/MS smattering/S smiley/M smilies smirk/DGS smithereens Smithfield Smithsonian Smithtown smokehouse smokescreen smokestack smooch/G SMS SMSA SMSA's SMSAs Smucker smudge/DG smudgy/PY smut/S smutty/PRY snafu snag/S snagged snagging snakebird snakelike snakeroot snapback snapdragon/S snappish/PY snazzy/R Snead Sneed snicker/DGR snide/PRTY sniffle/DGRS snifter snip/DGRSZ snipe/DGRSZ sniper/MS snipped snipper/MS snippet/MS snipping snippy/R snitch/MRS snivel snob/S snobbery snobbish/PY Snodgrass snook/RSZ snoopy/Y snorkel/DGR snotty snowball/DGS snowbank/MS Snowbelt/M snowblower/S snowfall snowflake/S snowmobile/GR snowstorm snub/PS snubbed snubbing snuffboxes snuffle/DGR snugged snugging snuggly Snyder soapbox/MS soapstone/S soapsud/S soapy/PRY sobbed sobbing/Y sobriety/I sobriquet socialistic sociality socio sociocultural/Y sociodemographic socioeconomic/S socioeconomically sociologist/S sociometric sociometry Socrates Socratic sodden/DGPY sodding Sofia softball softwood soggy/PRY soiree/S Sol/Y Solaris soldiery solecism solenoid/S solicitation solicitous/PY solicitude solidarity soliloquy solipsism soloist/S Solomon solstice solvating solvency/I soma Somali/S Somalian/MS somatic somebody'll someone'll somersault/GS Somerset Somerville sommelier/MS somnolence somnolent/Y sonata/S songbag songbook songful/PY songwriter/MS sonic sonny sonofabitch Sonoma Sonora sonority/S sonorous/PY sonuvabitch Sony/M soothsay/GRZ sop/S Sophia/S Sophie/M sophism sophist/R sophisticate/S sophistry Sophoclean Sophocles sophomoric soporific/MS sopping soprano/S Sorensen Sorenson sorghum sorority/S sorrel Sorrentine sortie SOSP soubriquet souffle soulful/PY soundbox/MS soundproof/DGS sourdough Sousa/M Southampton southbound southeast/R southeaster/Y southeastern southernisms southernmost Southfield southland southpaw/S southward/S southwest/R southwester/Y southwestern souvenir/S sovereignty sowbelly sown sox soy soya soybean/S spacecraft spacesuit/S spacious/PY Spahn Spalding spam/MS spammed spammer/MS spamminess spamming Spandex/M spandrels spangle/DGS Spaniard/S spaniel spar/S SPARC sparkle/DGRS Sparkman sparky/RY sparling/S sparring Sparta Spartan spasm/S spastic spatiality spatterdock spatula Spaulding/M spavined spay/DG speakership spearhead/DGS spearmint spec/S specie specifiability specious/PY spectral/PY spectrograph spectrographically spectrography spectrometer/MS spectrometric spectrometry spectrophotometer/MS spectrophotometric spectrophotometry spectroscope spectroscopic spectroscopy specular/Y specularity speedboat/GR speedometer/MS Speer speleological speleologist speleology spellbound spellcheck/DGRSZ spellchecker/MS Spencerian Spenglerian sperm/S spermatophyte Sperry spew/DGJRS spheric/S spheroid spheroidal/Y spherule/S sphinx/S spic spicebush Spiderman/M spiderwort spidery Spiegel spigot/S spiky/R spillage/MS spillover/MS spilt spineless/PY spinnability spinnaker/MS spinster spiny/PR spirituality spitfire spittle splashy/PRY splat splattered splay/D splenetic splint/DGS splintery splotch/DS splotchy splurge/GS splutter/R spoilables spoilage Spokane spokespersons spongy/PR spontaneity spoof/DGS spoonerism spoonful/S sporadic/Y sporadically sportsmanship sportsmen sportswear sportswriter sporty/PRTY spotty/PRY spousal Sprague/M sprain/DS springboard Springfield sprocket/DGS sprocketed/U sprue SPSS spud spume/G spumoni spunk spunky/PRTY spurge spurred spurring sputnik/S spyglass spyware/MS SQL sqrt squalid/PY squalor squamous/Y squander/DGRS Squaresville squashy/PRY squatted squatter/S squatting squaw squeaky squeamish/PY squeegee/DS squelch/DGRS Squibb/G squirehood squirmy squirt/DGRS squish/DGS squishy/PRT st stableman stablemen staccato/S stackable Stacy/M stadium/MS Stafford Staffordshire stagecraft/MS stagnate/DGNS stagy/PRY stairwell/S stakeholderMS stalactite/MS stalag stalemate Staley/M Stalin/MS Stalinist stallion Stallman/M Stamford staminate Stan/MS stanchion/DGS Standish/M standoff Stanford/M stank Stanley stannic stannous Stanton staphylococcus Stapleton starchy/PRY stardom stargaze/GRS Starkey starling/S Starr starship stash/DGS stasis statehood stateless/P Staten stateroom/MS statesmanlike statesmanship statesmen statewide stationarity stationery/S stationmaster Statler statuary statuette Stauffer steamy/PRY Stearns steelmaker steely/PRS steeplebush steeves stein/RZ Steinbecks Steinberg Stella stenography stenotype stepbrother stepchild stepchildren stepdaughter stepfather Stephan Stephanie/M Stephenson stepladders stepparent/MS steppe/S stepsister stepson stereography stereophonic stereoscopy stereotypic sterility sternal Sterno sternum steroid/S stethoscope Stetson/S Steuben Steve/M stevedore/S Steven/MS Stevenson Stevie stewardess/S stewardship Stewart/M stickle/DGR stickleback stickpin stigmata stiletto stillbirth/S stillborn Stillwell stilt/DS stilted/PY Stimson stimulatory stingy/PRY stinkpot stinky Stirling STL stochasticity stockbroker Stockholm stockpile/GR stockroom Stockton stocky/PRY stodgy/PRY stoic/S stoichiometric stoichiometry stoicism stoke/DGRS stolid/Y stomachs stomp/DGS stonecutter/S Stonehenge stonemason/S stonewall/DGS stoneware stonewort stooge/GS stopover/S stopwatch/S storefront/MS storekeep/RZ storeroom stormbound storyboard/S storyteller/S storytelling Stouffer stowage/S Stowe straddle/DGRSZ strafe/GRS straightaway straitjacket/MS stranglehold/MS strangulate/D strapped strapping Strasbourg strata strategically strategist/S Stratford stratigraphic stratigraphy stratosphere stratospheric Strauss Stravinsky/M strawflower/S streptococcus streptomycin stressful/Y stretchable striate/DGNSX striated/U striation/MS stricture/S stridency strident/Y strikebreak/GRZ striptease/R striven Stromberg Strongheart strongroom/S strontium strop/S strophe/S stropped stropping Stroustrup/M structuralist/S strum strumming strychnine Stuart Stubblefield/S stubby stucco studded Studebaker stultify/GN stumpage stumpy stunk stunned sturgeon/MS stutter/DGRS Stuttgart Stuyvesant Stygian styli stylist/MS stylites stylus/S stymie/DS styrene/S Styrofoam Styx suable suave/PY suavity subaltern subareas subassembly subbing subcaste subchain subclassifications subcommand/S subconcept subconstituent subcontinent subcontract/G subcontractor/MS subdirectory/S subdistrict subindex subjectivist/S subjugate/DGNS sublease sublimate/DGS subliminal/Y subliterary sublunary submachine submersible submissive/PY submittal submitter/MS subnational subnet/S subnormal/Y suboptimal subordinator subpage subparagraph subpart/S subpoena/DS subpopulation/S subquestion/MS subregion/S subregional/Y subrogation subsample/S subsentence subservience subservient/Y subsistent subsocietal subsoil/R subspecialty/MS subspecies substandard substation/MS substitutionary substratum subsurface subtable/S subtended subtends subterfuge/S subtest subtotals subtype/S suburbanite/S suburbia subversive/PSY successorship succubus Sudan Sudanese Sudanic Suez Suffolk suffragette/S suffuse/DGNSV suggestibility suitemate/MS Sukarno sullied/U Sullivan sully/DGS sultana Sulzberger sumac Sumatra Sumatran/M Sumerian Summerdale summertime summitry Sumter sunbaked sunbather/MS Sunbelt/M sunbonnet sunburnt sunder/DGS sundial/S sunfish sunflower sunlit Sunnyvale sunscreen/DGMS sunshade/S sunshiny sunspot superblock/MS supercilious/PY supercomputing/M superconcept supercritical superficiality superhighway/MS superlunary supermachine Superman/M supernatant supernatural/PY supernaturalism supernormal/Y supernova/MS superposable superposition/S superpredicate supersensitive/P supersonic/S superstructural superstructure/S supervene/D supine/PY supping supplementation supplicant/MSY supplicate/G supposable suppressible/I suppressor/S supra supranational supranationalism suprasegmental supremacist surcease/DG surcharge/DGS surfactant/S surfeit/DRS surreal surrealism surrealist/S surreptitious/PY surrey/S surtax surveillance/S surveillant survivability survivalist/S survivorship Susan/M Susanne/M susceptibility/I sushi Susie/M suspensor Susquehanna/M Sussex/M sustainable/U sustainment sustenance Sutherland/M Sutton/M SUV SUVs Suwanee/M Suzanne/M Suzuki/M svelte/PY swab/S swabbed swabbing swabby/S Swabian/MS swaddle/DG swag/G Swahili/M swami swampland/MS swank/R swanky/PRY swanlike Swanson swappable swart/P Swarthmore Swartz swash/R swastika swat/S swatch/S swath/DGJMRS swathe/DGJRS swatter swatting Swaziland sweatband sweatshirt sweatshops sweaty/PRY Swede/S Sweden Swedish Sweeney/S sweepstake/S sweetish/Y sweltering/Y Swenson swig swigging Swinburne swindle/DGRS swingable swingy/R swinish/PY swirly/R swishy/R swiss switchback/MS switchblade switchgear switchman switchmen/M Switzer Switzerland swivel/S swizzle/DGR swordfight/MS swordfish swordplay/R swordtail Sybil sycophant/SY sycophantic sycophantically Sydney syllabic syllabicity syllabify/N syllogistic sylvan Sylvania Sylvester Sylvia Sylvie symbiont symbolical symbolists Symington symlink/DGMS sympathetically symphonic symposia symptomatology synagogue/S synaptic sync/G synchronism synchrotron syncopate/DNV syndic/S synergy synod/S synonymy synoptic syphilitic Syracuse Syria Syrian/MS syrupy systemic systolic TA tabbing tabby/S tableland tabletop/MS tabloids tabula Tacitus tackiness taco/S Tacoma tactful/PY tactic tactical/Y tactlessness tactual/Y tadpoles taffeta taffy/S Taft Tahiti Tahoe tailback tailgate/DGR Taipei Tait/M Taiwan Taiwanese takeoff/S takeover/S Taliban/M talismanic talky Talladega Tallahassee Tallahatchie Tallahoosa Tallchief Talleyrand tally/DGS tallyho Talmud talon/DS tamable tamale tamarack tamarind tambourine Tammany Tammy/M tamp/DGS Tampa tampon Tanganyika/M tangency tangerine tango/S tankard tanned Tannenbaum tannery tannin tanning tantalum Tantalus Tanya Tanzania tao/S taoism taoist/S Tapdance tapeworm tapir/S tappet/S Tara tarantula/S tarnish/DGS tarpapered tarpaulin/S tarpon/S tarred tarring Tarrytown tartar Tartuffe Tarzan/M TAs taskmaster Tasmania tasty/PY Tate tater tatting tattle/DGRS tattletale tatty/R tawdry/PRY Tawney taxably taxiway/MS taxpaying Taylor/S tb Tchaikovsky/M TCP's teacart/MS teacup/MS teahouse/S teakettle/MS teakwood/M teal/S teammate/MS teamster/MS teamworkM teapot/MS teardrop/MS teasel teat/DS tech/D technetium tectonic/S Ted/M Teddy tee/S teeing teensy/R teetering Teheran Tehran tektite/S telecommunicate teleconverter/MS Teledyne Telefunken telegraphy telekinesis Telemann telemarket/DGRSZ telemarketer/MS telemeter/MS telemetric telemetry telepathic telepathically telepathy telephoto/MS telephotography teleport/DGRS teleprinter teleprocessing teleprompter telescopic Telex telltale/MS tellurium telnet/S telomeric temerity temp Templeman Templeton tempo/S temptress tenable/P tenacity tenancy/S tenderfoot tenderloin tendon/S tenebrous tenet/S Tenex tenfold Tenneco Tenney Tennyson tenon tensile tensional/I tensionless tensorial tenspot tenuous/PY tepees tepid/PY terabit/MS terabyte/MS teratogenic teratology/S terbium tercel Teresa terminable/P terminableness/I termini terminological/Y termite/S tern terpsichorean Terra terramycin Terran terrapin/S terry/S Terry's terse/PRTY tertian Tess tessellate/DNS Tessie testamentary testate/I testator/MS testbed/MS testes testicular testimonial/S testy/PRY tetanus tether/DGS tetrachloride tetracycline tetrafluoride tetragonal/Y tetrahalides tetrahedra tetrahedral/Y tetrahedron tetrameron tetrasodium tetravalent Teutonic Tex Texaco/M Texan/S Textron textural/Y th Thai Thailand thallium thallophyte Thames that'd that'll theatric/S Thebes theism theistic Thelma theocracy Theodore Theodosian Theodosius theoretician there'd there'll there're therefor therefrom Theresa theretofore thereunder thermal/SY thermionic/S thermistor/S thermite/M thermo/S thermocouple/S thermodynamically thermoelastic thermoelectric thermoformed thermoforming thermogravimetric thermometric thermometry thermonuclear thermopile thermoplastic thermopower thermosetting thermostable thermostatic/S thesaurus Theseus thespian/S theta/S thiamin thickish Thiensville thine thinned thinning thinnish thiocyanate thiouracil this'll thistledown thither Thomas Thompson/M Thomson Thor Thoreau thoriate/D thorium Thornburg Thornton thoroughbred thoroughgoing Thorpe thou/S thrall threadbare/P threefold threesome thresh/DGR throaty/PRY throes thrombi thromboses thrombosis thrombus Throneberry throwback thrum thrumming Thruway/S Thu thudding thuggee Thule thulium thumbnail/MS thumbtack/DGMS thunderclap/S thunderous/Y thunk Thurber Thurman thwack thy thyratron thyroglobulin thyroid/S thyroidal thyronine thyrotoxic thyrotrophic thyrotrophin thyrotropic thyrotropin thyroxine THz Tiber Tibet Tibetan tibia Tiburon tic Ticonderoga tidbit/S tideland/S tidewater Tieck tiff tiffany tigress Tigris Tijuana tillage Tillich Tillie tilth Tim/MS timberland/S timbral timbre timepiece timestamp/DGS timeworn Timex Timmy Timon timothy tincture/DG tinder tine/S tinfoil tinner tinplate tinsel/Y tinsmith/S tintable tintype tinware Tioga tipoff Tippecanoe Tipperary tipple/DGRS tippy/R tipster/MS tipsy/PRY tiptoeing tirade/S titan/S titanate titanic titanium titian titillate/GNV titillating/Y titmouse/M Tito titrate/DGNS titular/Y Titus TiVo/M TNT toady/DGS toadyism tobaggon/MS Tobago toccata/MS today'll Todd/M toddle/DGRSZ toenail/S toffee tofu tog/S togging Togo toiletries toilsome/PY tokamak Tokyo Toland Toledo Tolley tollgate tollhouse Tolstoy toluene Tomasulo/M Tombigbee tomblike tombstone/S tome/S tomfool Tommie tommy tonal/Y tonality/MS toneless/PY tong/R Toni Tonio tonk/S tonsillitis tony/R toodle toolbar toolbox/MS toolmake/GRZ toolsmith Toomey toot/DGRS toothpaste toothy/RY tootle/DGR tootsie/S tootsy/S topaz topcoat/S Topeka topgallant topnotch/R topocentric topographic topographical/Y topography/S topped toppers topping/S topside/S topsoil Topsy Torah tori toroid/S toroidal/Y Toronto torpid/Y torpor Torquemada/M torrence torsion/AI torsional/Y torso/S tort/N tortilla/MS tortoiseshell tortuous/Y tory/S Tosca/M Toscanini/M Toshiba/M tot/DGRS totalistic totalitarian totalitarianism tote/DGRS totem totemic totient/M Toto totted touchdown/S touchstone/S Toulouse tourism tousle/DGS tout/DGRS towboat/S towhead/D townhouse Townley Townsend townsman townsmen townspeople/M Towsley toxic Toynbee Toyota traceback/MS tracepoint/MS tracery/D trachea trackage trackless Tractarians traction Tracy tradesmen traditionalism traditionalistic traditionalists tragedian/S tragicomic trailhead/MS trailside traineeships trainman/M trainmen traipse/G traitorous/Y tram trammel/S tramway transactional transalpine transaminase transatlantic transcendence transcendental/Y transcendentalism transcendentalists transconductance transcultural transducer/S transduction transect/DGS transept/S transferee transferor/S transfix/DGS transfusable transfuse/DGNX transgender transgressor/S transliterate/N translucence translucency transmissible transmittable transmittance transmutation transmute/DGS transoceanic transom/S transpacific transpiration/S transplantable transplantation transponder/MS transportable transposable transship/S transshipment transshipping transversal/Y transverse/SY transvestite transvestitism Transylvania trapdoor/S trapezium trashy/PR trauma/S Travelift/MS traversable travertine Travis trawl/R treadle/DG treadmill Treadwell treasonable treasonous treelike trefoil trekked trekking trellis/DS trembly tremulous/PY trenchant/Y trencherman trenchermen trendy/PRY Trenton trepidation trestle/S Trevor/M triable/P triad triadic triage/DGMS triamcinolone triangulate/DNY Trianon triatomic tribesman tribesmen tribulate/NX tribulation/MS trichloroacetic trichloroethane trichromatic trickery/S trickster trident/S tridiagonal triennial/Y trifluoride trig trigonal/Y trigram/S trilobite trilogy Trimble trimester Trinidad trinitarian/S trinity trio/S triode/S trioxide tripartite/N tripe triphenylarsine triphenylphosphine triphenylstibine triphosphopyridine triplex triplicate tripod/S tripoli tripolyphosphate tripped tripping/Y triptych trisodium Tristan tristate trisyllable trite/PRTY tritium/M triton triumphant triune trivalent trivium trodden/U troglodyte troika trollop trombone/MS trombonist/MS troopship/S trope/MS Tropez trophic tropism/S tropocollagen tropospheric Trotsky trotted trotter trotting troubadour/MS trounce/DGS troupe/GRS Troutman troy truancy Truckee truculence truculent/Y Trudy Trujillo Truman/M Trumbull trumpery trundle/DGRS truss/GRS trusteeship TRW trypsin tsar/MS tsarevich tsarina tsarism tsarist tsunami/MS Tsunematsu TTL tuba tubular/Y tubule/S Tucson Tudor Tue Tufte/M tugged tugging Tulane tularemia tulle Tulsa tum tumbrels tumid/Y tummy/MS tun tuna/S tundra tuneful/PY tunelessly tung tungstate tungsten Tunis Tunisia Tunisian tupelo turbinate/DS turbine/S turbofan turbojet turgid/PY Turin turk/S Turkish turnabout turnaround/S turnoff turnout/S turnpike/S turnstone turntable turpitude turtleback/S turtleneck turvy Tuscaloosa Tuscan Tuscany tusk/RSZ Tuskegee tussle/DGS tut tutelage Tuttle tutu tuxedo/DMS TVA TVs TWA twaddle/DGRS tweedy/PR tweeze/DG twiddle/DGS twigged twigging twinge/GS twinning twirly twisty twitchy/Y twitting twosome tycoon tympani/MS tympanist/MS tympanum/M typeahead typeface typescript typeset/S typesetter/S typesetting typewrite/G typewritten Typhon typhoon typhus typicality typo typographer typological/Y typology/S tyrannic tyrannical/PY tyrannicide tyrosine Tyson UCD UCD's UCLA's UCR UCR's UCSB UCSB's UCSC UCSC's UCSD UCSD's Udall UDP Uganda UID Ukrainian/S ulcerate/DNSVX Ullman ulster ulterior/Y ultimatum ultra ultracentrifugally ultracentrifugation ultracentrifuge ultraconservative ultrafast ultramarine ultramodern ultrashort ultrasonic/S ultrasonically ultrasound ultrastructure ultraviolet Ulysses umber/DG umbilical umbilici umbilicus/S umbra umbrage umlaut/MS UN unaccountable unadventurous unaggressive unambiguity unamused unanimity unappeasable unappeasably unappreciative unasterisked unbalance unbeknownst unbend/G unbent unbind unbutton/G uncap uncharacteristic unchecking unchristian unclasping unclog uncodable uncoiling uncombable uncomment/GS uncommunicative unconcern unconscionable/P uncourageous uncousinly uncritical unction/I undedicated undeliverability undeliverable undependable underachievers underadjusting underarm underbedding underbelly underbracing underclassman underclassmen underclothes underclothing underconsumption undercooked undercount/S undercover undercurrent undercut/S undercutting underdeveloped underdevelopment underdog undereducated underemployed underemployment underenumerated underenumeration undergarments undergirding undergrowth underhanded/PY underheat underlay underpaid underperform/S underpins underpopulated underprivileged underrate/D underregistration underreported underreporting underrepresentation underrepresented undersea/S undersecretary/MS undershirt/MS undershoot/GS undershot underside/MS undersigned undersize/DGS understate/GS understatement/S understructure/MS understudy/MS undertow/MS undervalued underwater underwhelm/DGS underwood undeserved undock/DGS undulate/DGNSX unearth/DG unease uneconomic uneducated unencroachable unenviable UNESCO unfaded unfailing/PY unfathomable unfelt unfertile unfitting unfoldment unfrocking unfrozen ungallant ungodly/P ungracious unhand unharmonious unheated unhelpful unhesitant unhinge unholy/P unhook/DG unhurried unhurt Unibus unideal unidimensional unidiomatic unifilar unilateral/Y unimaginative unimodal unimpeachable unimpeachably unimposing unimpressive uninformative uninitiate uninominal uninterested unintuitive uninventive uninvolved unipolar uniprocessor/MS Uniroyal Unisys unitarian/S unitarianism unitary/Y Univac univalent univariate universalism universalistic unkempt unlacing unlearn/D unliterary unlovely/P unmake unmalicious unmanly/P unmask unmeasured unmeritorious unmet unmethodical unmindful unmoving unoriginal unorthodox unpaintable unpardonable unpartisan unpersuasive unphysical unpicturesque unplug unpremeditated unprepared unprocurable unproductive unprofessional unprovocative unquestionable unquestioning unquiet/PY unready/P unreality unreason/G unreasoning/Y unreceptive unredeemable unreeling unreflective unrelieved unremarkable unremitting/Y unrepentant unrepresentative unreviewable unreviewably unrewarding unripe/P unromantic unscalably unscathed unscrew/DG unseat unsee unselfconscious/P unservile unset unshackle/GS unshed unsightly unsinkable unsold/R unspeaking unspecific unspectacular unstilted unstore unstuffy unsubtle unsurmountable unsystematic unteach untellable untenable untenanted unthinking untraditional unutterably unviewably unwaivering unwarrantable unwary/P unwed unweighted unwire unwomanly unworkable uparrow upbeat upbring upcome/G upend upheaval/S upholstery upped uppercase/DGS upperclassman upperclassmen uppercut upraise/D uprise/R upriver uproarious/PY upsilon upslope upstanding/P upstate/R upsurge upswing/S uptake uptight/P uptime Upton uptown uptrend upwind uranium Uranus uranyl Urbana urbane/Y urbanism urbanite/S urea uremia urethane/S urethra urgency/S urinal/S urinary URL URL's URLs Ursa Ursula Ursuline Uruguay USA USAF USART USDA USPS USSR usurer usurious/PY usurpation usury uterine Utica utile/I utilitarian utopia/S utopianism Uzi/M vacationland vaccinating vaccination/S vaccine/S vaccinia vaccinial vacuity vacuolate/DGNS vacuolated/U vacuole/S vaginal/Y Vail vain/P vainglorious/PY valance/DS valedictory Valencia/M Valerie Valhalla Valkyrie/MS valuate/DGS valueless/P vamp/R vampire/S vanadium Vance Vancouver vandal/S vandalism Vandenberg Vanderbilt Vanderburgh vanguard vaporware/M Varian variate/DGS variegate/DN varistor Varityping varmint vascular vasectomy/S Vasily/M Vatican Vaudois Vaughn vectorial Vega/S velar Velasquez veldt/MS vellum velour/S velum velvety venal/Y vendetta vendible veneer/GR venerate/DGNSX venereal Venetian/MS Venezuela Venezuelan vengeful/APY venial/PY Venice/M Venn venous/Y ventilator venturesome/PY venturi/S venue/MS Venus Venusian/S Vera veracious/PY verandah/D verbatim verbiage verbosity verdant/Y Verdi/M Vergil veridical/Y verifiably verisimilitude verity Verizon Verlag vermiculite vermilion Vermont vermouth Vern vernacular/Y vernal/Y Verne vernier Vernon Verona Veronica Versailles vertebra vertebrae vertebral/Y vertigo verve vesicle/S vesicular/Y vesper/S vestal/Y vestibule/D vestments vestry/S vesture/DGS vet/MS vetch vetted/A vexatious/PY VGA VHF viaduct/S vibes vibrancy vibrant/Y vibrato vibrio vibrionic Vic/M vicar vicarious/PY Vichy/M Vickers Vickie/M Vicksburg/M Vicky/M Victoria/M Victorian/S Victrola/MS Vidal/M videoconference/DGS videographer/MS Vienna/M Viennese/M Viet Vietnam/M Vietnamese/M viewfinder/MS viewgraph/MS viewgraphMS viewless/Y vigil/MS vigilantism Viking/S Vince Vincent/M vindicate/DGNSV Vinson vintner vinyl viola/MS violist/MS violoncelli violoncellist/M violoncello/MS virginal/Y Virginian/S Virgo/MS virgule virile virility virtuosi virtuosic virtuosity virulence virulent/Y viscera visceral/Y viscid/Y viscoelastic viscoelasticity viscometer/MS vise/DGV viselike Vishnu Visigoth/S vitiate/DGNS vitreous/PY vitrify/N vitriol vitriolic vitro vituperative/Y Vitus viva vivace vivacious/PY vivacity Vivaldi vive/Z Vivian vivified/A vivify/DNR vivo vixen Vixie/M viz Vladimir Vladivostok VLSI VMware/M vocable/AI vocabularian vocabularianism vocalic vocalism vocalist/S vocative/Y vociferous/PY vocoded vocoder vodka/M Vogel voiceband voiceless/PY voila Vol volar volcanism volcanologist/MS volition volitional/Y volitionality Volkswagen/S Volstead Volta voltaic Voltaire voltmeter/MS voluble/P volumetric volumetrically voluminous/PY voluptuous/Y Volvo voodoo/S voracious/PY voracity vortices vorticity votary vouchsafe/DGS vs/A Vulcan vulpine vulturelike vying Wabash wacko/MS wacky/PRY Waco wad/S wadded waddle/DGRSZ waddler/MS Wade/M wagged wagging waggish/PY waggle/DGS Wagner/M wainscot/DGS Wainwright WAIS waistline Wakefield wakeful/PY wakeup Walbridge Walcott Walden Waldensian Waldo Waldorf wale/S Waler Walford Walgreen walkie walkover wallaby/MS Wallace wallboard Wallenstein wallop/DGRS wallpaper/S wally/S Wally's Walpole Walsh Walt/RZ Walton Walworth Wang/M wangle/DGRS Wansee Wansley wapiti/S wardroom/S warehouseman Warfield/M warhead/S warless warmhearted/PY warmish warmonger/GS warmup warren/RSZ Warsaw/M wartime/S warty Warwick/M washbasin washboard washbowl Washburn washcloths Washoe washout washy/R waspish/PY Wasserman wastebasket/S wasteland/S wastewater wastrel/S watchband watchmake/GRZ watchmen watchpoints waterbed/MS Waterbury watercourse waterfront Watergate Waterhouse waterline/S waterloo waterman watermelon watershed/S waterside/R watertight/P Watertown Watkins Watson/M watt/S wattage/S Wattenberg Watterson wattle/DGS Waukesha Waunona Waupaca Waupun Wausau Wauwatosa waveguide/S WaveLAN Waveland wavenumber wavy/PRY waxwork/S waylaid Wayne Waynesboro weaponless weaponry weatherbeaten Weatherford weatherman/M weathermen/M weatherproof/P weatherstrip Webber webbing Weber/M Webster/M Websterville wedlock weedy/P Weider Weidman weightlessness weighty/PRY Weinberg Weiner Weinstein weirdo/S weirs Weiss Weissman Weissmuller Welch/RS Weldon Weldwood wellbeing Wellesley wellhead/MS Wellington Wellman Wellsville Welmers welsh/R welt/RS welter/DG Wendell Wendy/M Wentworth werewolf/M werewolves Werner Wesley Wesleyan Wesson westbound Westbrook Westchester Westfield Westhampton Westinghouse Westminster Westmore Weston Westphalia Westport Westwood wetland/S Weyerhauser WFF wham whamming Wharton what'd what're whatnot Wheatland Wheaton Wheatstone whee wheedle/DGS wheelbarrow/MS wheelbase wheelchair/M wheelhouse wheelie Wheelock wheeze/DGS wheezy/PRY Whelan whelk Wheller where'd where're whereabout wherefore/S whereof whereon wheresoever wherewith whet/S whetted whetting whiff whiffle/DGRS whig/S whimsey/S whinny/DGS whiplash/S Whippany whippet Whipple whipsaw/D whir/Y whirligig whirly/S whistleable Whitcomb whiteboard/MS whiteface Whitehall whitehead Whiteleaf Whiteley whitetail Whitewater whitey Whitfield whither Whitlock Whitman Whitney Whittaker Whittier who'd who'll who're who've whoa whodunit/MS whomsoever whoosh whop whoppers whopping whosoever Wichita wicket/S widowhood widthwise Wieland wiener/S wigging Wiggins wiggle/DGRS wiggly wigmaker Wiki/MS Wilcox wildcard/DGS wildcatter wildfire/MS wildlife Wiley Wilfred wilful/Y Wilhelm Wilhelmina Wilkes Wilkinson Willamette Willard Willcox Willem William/S Williamsburg Williamson Willie/DS Willoughby willowy Willy/DS Wilma Wilmette Wilmington Wilshire Wilsonian wimp/MS wimpy/RT winch/DGRS Winchell winchester windbag/S windbreak/S windfall windless/PY windowless windowpane/S windowsill windshield Windsor windstorm windsurfer/MS windup windward/Y Winehead winemake winemaster winery/S wineskin Winfield wingback wingman wingmen wingspan wingtip Winifred winkle/DGS winless Winnebago Winnetka Winnie Winnipeg winnow/R wino/S Winograd Winooski Winsborough Winsett Winslow winsome/PY Winston wintertime Winthrop winy wireman wiremen Wisconsin/M wiseacre wisecrack/DMRS wisenheimer wishbone wishy wispy Witherspoon witter witting/Y wizen/D wobble/DGRS wobbly/P woebegone/P wok/N Wolcott Wolfgang wolfish/PY Wolverton won Woodard Woodberry Woodbury woodcarver woodchopper/S woodcut woodcutters woodgrain/G woodhen Woodlawn woodlot Woodrow woodruff woodshed woodside Woodward/S woodwind/MS woodyard woolgather/GR Woolworth Woonsocket Wooster wop/S Worcester Worcestershire/M wordless/PY Wordsworth workaholic/M workday workgroup/MS workhouses workingmen workmanlike workout/S workpiece/S workplace/MS worksheet/S workspace/S worktable wormy/R worsen/DGS Worthington/M would've wow wrack/DGS wraith/S wraparound wrathful/PY wreathe wright Wrigley wrinkly wristband writeup/MS wrongdoer wrongdoing wrongful/PY Wronskian wry/RTY WWW Wyman Wyoming WYSIWYG Xandie/M Xanthus Xavier Xenia xenon xenophobia xerography Xerox/M Xerxes XML XOR xterm/M xylem xylene xylophone/S yacht/GSZ yachtsman yachtsmen Yakima yaks Yale Yalies Yalta yang Yankee/S yap yapping Yaqui yardage yarmulke yarrow Yates yaw/DGS yawl Yeager/M yearbook yeasty/PRY Yeats Yellowstone/M Yemen yen yeomanry yeshiva yesteryear Yiddish yin yip yipping YMCA yodel/S yoga yogi yogurt/M yokel/S Yoknapatawpha Yokohama yolk/S Yonkers yore Yorick Yorktown Yosemite youngish Youngstown YouTube/M yow yowl Ypsilanti yr ytterbium yttrium Yuba Yucatan yucca yucky/PRT Yugoslav Yugoslavia Yukon yule yup Yuri Yves Yvette Yvonne/M YWCA Zach/M Zachary Zadok/M zag/S zagging Zaire Zanzibar zealot/MS Zeffirelli Zeiss zeitgeist Zellerbach Zen Zennist zestful/PY zesty/R zeta/S Zeus/M Ziegfeld/MS Ziegler/M zig zigged zigging Ziggy zigzagged zigzagging zilch zillion/MS Zimmerman/M zing/DGRS Zion/MS Zionism Zionist/MS zip/S Zipf/M zipped zipper/DS zipping zircon zirconium/M zloty zlotys zodiacal zombienet/MS zoologist/S zoology Zoroaster Zoroastrian/S zounds Zurich/M zymurgy ispell-3.4.00/languages/english/PaxHeaders.19408/altamer.00000644000000000000000000000013212465612623017744 xustar0030 mtime=1423381907.563149363 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/altamer.00000444003214100001440000000372112465612623021014 0ustar00geofffaculty00000000000000abridgement acknowledgement/AMS analogue/MS appal/S apparelled archeological/Y archeologist/MS archeology autodialler/S barrelled barrelling bevelled bevelling/S canalled canalling cancelled/U canceller cancelling channelled channeller/MS channelling chiselled chiseller/S councilor/MS counselled counselling counsellor/MS crystaline crystalize/DGRSZ crystalized/AU crystalizes/A crystalizing/A dialled/A dialler/AS dialling/AS draught/MS duelled dueller/S duelling/S enamelled enameller/S enamelling/S enrol/S equalled/U equalling eviller evillest focussable focussed/AU focusser focusses/A focussing/A fuelled/A fueller/S fuelling/A fulfil/S funnelled funnelling glamor/DGS glamourize/DGRSZ gospeller/S gravelled gravelling grovelled groveller/S grovelling/Y imperilled initialled initialler initialling jewelled jeweller/S jewelling judgement/MS kidnapped kidnapper/MS kidnapping/MS labelled/AU labeller/MS labellers/A labelling/A laurelled levelled/U leveller/S levellest levelling/U marshalled marshaller marshalling marvelled marvelling marvellous/PY medalled medalling metalled metalling misjudgement/MS modelled/A modeller/S modelling/S multilevelled nickelled nickelling panelled panelling panellist/MS parametrizable parametrization/MS parametrize/DGS parametrized/U parcelled/U parcelling pencilled pencilling/S petalled pretence/NSVX quarrelled quarreller/S quarrelling queueing relabeller/S remodelling revelled reveller/S revelling/S rivalled/U rivalling shovelled shoveller/S shovelling shrivelled shrivelling signalled signaller/S signalling spiralled spiralling squirrelled squirrelling stencilled stenciller/S stencilling symbolled symbolling syphon/DGMS syphons/U totalled totaller/MS totalling towelled towelling/S tranquillity tranquillize/ADGJRSZ tranquillized/AU tranquillizer/AMS tranquillizing/AMSY travelled traveller/MS travelling/S troweller/S tunnelled tunneller/S tunnelling/S unravelled unravelling victualler/S woollen/S woolly/PRS worshipped worshipper/MS worshipping ispell-3.4.00/languages/english/PaxHeaders.19408/british.20000644000000000000000000000013212465612625017767 xustar0030 mtime=1423381909.434192232 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/british.20000444003214100001440000012035412465612625021041 0ustar00geofffaculty00000000000000abnormalise/S abolitionise/S absolutisation/MS absolutise/S accessorise acclimatisable/MS accoutre/DGS acculturise acetonisation/MS acetonise/S achromatisation achromatise/DGS acidise/S acronymise/S actionise/S activise/S adrenalise/S adulterise/S adverbialise/S aegyptus aeon/MS aeonian aeonic aeonism/MS aerosolisation aesthesia aesthesis aesthetical aesthetician aestheticise/S aestival aestivate/N aetiology/MS aetna Africanisation/MS Africanise/DGS Afrikanerisation Afrikanerise/DGS agatise/S agenise aggrandisable/MS aggrandisation aggrandise/DGRSZ agnise/DGS agrarianise/S alarum albumenisation albumenise/DGS albuminisation/MS albuminise/S alchemise alcoholisable/MS alcoholisation/MS alcoholise/S algebraisation/MS algebraise/S alienise/S alkalinisation/MS alkalinise/S alkalisation alkalise/DGS allegorisation allegorise/DGRS alphabetisation/MS alternise/S aluminisation aluminise/DGS amalgamatise/S amalgamisation/MS amalgamise/S Americanisation/MS Americanise/GRSZ amoralise/S amorphisation amorphise amortisable/MS amortisement/MS amourism/MS amouristic/S anaemically anaesthesiologist anaesthesiology anaesthetisation/MS anaesthetist anaesthetization/MS anagrammatisation anagrammatise analogise/S analysation anarchise/S anathematisation anathematise/DGS anatomise angelicise/S angelise/S Anglicanise/S anglicisation/MS anglicise/DS angularisation/MS angularise/S anhydridisation/MS anhydridise/S animalisation/MS animalise/DGS animalises/A annalise/S annualisation annualise/GS anodisation antagonisation/MS anthologisation anthologise/DGRS anthracitisation/MS anthropomorphisation anthropomorphise/DGS anticatalyser/MS anticentralisation/MS anticise/S antiepicentre/MS antifertiliser/MS antilabour/MS antimediaeval/MS antioxidiser/MS antioxidising/MS antipathise/S antiquarianise/S antirumour/MS antisensitise/RSZ antisensitiser/MS antisepticise/S antiseptise/S antisyphon/MS antithesise anvilled anvilling aphorise/DGRSZ apostatisation apostatise/DGS apostrophise/DGS apotheosise apparelling appetise/DSZ appetisement/MS Arabianise/S Arabicise/S arabisation arabise/DGS arborisation arborise/DGS arboures arcticise/S arithmetisation/MS armourless aromatisation aromatise/DGS arsenicise/S arterialisation/MS arterialise/DGS artificialise/S Aryanisation Aryanise/DGS asafoetida asepticise/S Asiaticisation/MS Asiaticise/S Assyrianise/S astigmatiser/MS asynchronise/DGS atomisability atomisable atticise/S attitudinisation attitudinise/DGS Australianise/S Austrianise/S autoimmunisation autoionisation automatisation/MS automatise/S autotomise avianise azotisation azotise/DGS Babelise/S Babylonise/S bachelorise/S baconise/S bacterise balladise/S balsamise/S bantamise/S baptisable/MS baptisement/MS barbarianise/S barbarisation barbarise/DGS baronise/S barycentre bastardisation/MS beaverise/S beclamour/DGS becudgelled becudgelling bedlamise/S bedrivelled bedrivelling bejewelled bejewelling bemedalled Berlinise/S Bessemerise/S bestialise/DGS beveller/S bichromatise/S bicolour/D bimetallist bimetallistic biographise/S biologise/S bipolarisation bipolarise/S Birminghamise/S bistre/D bisulphate bisulphide bisulphite bituminisation bituminise/DGS bolshevise bonderise borise/S Boswellise/S botanise/DGS boulevardise/S bourbonise/AS bowdlerisation bowelled bowelling brominise/S brutalisation/MS bureaucratise/DS busheller/S Byronise/S Byzantinise/S cadaverise/S cadmiumise/S Caesarise/S Calvinise/S Canadianisation/MS Canadianise/S canalisation/MS canalise/DGS canaller/S cancellable cancellous cannibalisation/MS canonisation/MS canonise/GRSZ canonises/U capitalisable/MS Caponisation caponise/DGS capsulisation capsulise/DGS caracolled caracolling caramelisation/MS caramelise/DGS carbolisation carbolise/DGS carbonatisation/MS carbonisable/MS carburisation carburise/DGS carnalise/S carolled caroller/S carolling cartelisation/MS cartelise/S castorised/MS catabolise cataloguise/S catalyse/RSZ catalyser/MS catechisable/MS catechisation/MS catechise/DGRSZ catheterisation/MS catheterise/S Catholicisation catholicise/RSZ Catholicised catholicises/U Catholicising causticisation/MS causticise/RSZ causticises/A cauterisation/MS cavillation cavilled cavilling/S celestialise/S Celticise/S centigramme/MS centilitre centreboard centrefold centrifugalisation/MS centrifugalise/S cephalisation cerebralisation/MS cerebralise/S ceremonialise/S chameleonise/S championise/S channelisation/MS channelise/S chattelisation/MS chattelise/S cheerfulise/S chemicalisation/MS chemicalise/S chequerboard chiselling/S chloridise/S chlorinise/S chloroformisation/MS chloroformise/S chorisation/MS Christianisation/MS Christianise/RSZ chromatise/S chromicise/S chromise/DGS chronologise/S Ciceronianise/S cinchonise cinematise circularisation/MS circularise/DGRSZ citizenise/S civilianisation/S civilianise/DGS civilisable/MSU clangour/DGMS classicalise/S classicisation classicise/DGS clericalise/SU climatise/S coalise/RSZ cocainisation/MS cocainise/S coeducationalise/S coenamour/DGS coequalise/S cognisably cognise/DGRSZ collateralise collectivisation/MS collectivise/DS colloquialise/S colonialise/S colonisability/MS colonisable/MS colonisationist/MS colourability/MS colourable/MPSU colourably/SU colourama colourcast/RZ colourfast/P colourific colourisation/MS colourise/S colourism/S colourist/MS colouristic/S colouristically colourman colourmap/MS colourmen coloury columnisation/MS commercialise/DGS commonise/S communalisation/MS communalise/DGRSZ communisation/MS companionise/S compartmentalisation/MS compartmentise/S complementiser computerisable concentre concertise/RSZ concretisation/S concretise/DGS confederatise/S congenialise/S congregationalise/S connexion conservatise/DGS consonantise/S constitutionalisation/MS constitutionalise/S containerisation containerise/DGS contemporisation contemporise/DGS Continentalise/S controversialise/S conundrumise/S conventionalisation/MS conventionalise/GS conventionalises/U conventionise/S conversationise/S conveyorise/DGS convivialise/S copolymerisation/MS copolymerise/DGS copperisation/MS copperise/S coralled corbelled corbelling/S cordialise/S Corinthianise/S corporealisation/MS corporealise/S cosmopolitanisation/MS cosmopolitanise/S cottonisation/MS cottonise/S counsellee counsellorship crawlerise/S creaturise/S Creolisation Creolise/DGS cretinisation/MS cretinise/S criminalisation/M criticisable/MSU crofterisation/MS crofterise/S cruelise/S crystallisability/MSU crystallisable/MSU Cubanise/S cudgelled cudgeller/S cudgelling/S culturisation/MS culturise/S cupellation cupelled cupeller/S cupelling curarise/DGS curatise/S curricularisation/MS curricularise/S cutinise/DGS cutisation/MS cyclisation/MS cyclise/DGS Czechisation/MS dandyise/S Danisation/MS Danise/S Darwinise/S dastardise/S deaconise/S deaminise decagramme/MS decalitre/S decametre/MS decarbonisation decarbonise/DGRS decarburisation decarburise/DGS decasualisation decentralisationist decentralise/S decigramme/MS decilitre/S decimalisation/MS decimalise/DGS decimetre/MS decolonisation decolonised decolonises decolonising decolour/DGS decolourisation decolourise/DRS decriminalisation/M decriminalise deemphasisation/M deenergise/DGRS defeminise/DGS defenceman definitisation/MS definitise/DGS deflectionisation/MS deflectionise/S deformalise defunctionalisation/MS defunctionalise/S dehumanisation/MS dehypnotisation dehypnotise/DGS deindustrialisation deindustrialise deionisation deionise/S delimitise/S delocalisation delocalise delustre demagnetisable/MSU demagnetisation/MS demagnetise/DGRSZ dematerialisation dematerialise/DGS demilitarisation demilitarise/DGS demineralise/DGRS demobilisation demobilise/DGS demonetisation demonetise/DGS demonisation denationalisation denationalise/DGS denaturalisation denaturalise/DGS denaturisation/MS denaturise/RSZ denicotinise denizenise/S denominationalise/SU denormalise dentalisation/MS dentalise/S denuclearisation denuclearise/DGS deodorise/DGS deoxidiser departmentalisation/MS departmentalise/S departmentisation/MS departmentise/S depersonalise/GS depolarisation/MS depolarise/DGRSZ depoliticisation depoliticise/DGS depolymerisation depolymerise/DGS depressurisation depressurise/DGS deputationise/S deputisation deputise/GS derationalisation/MS derationalise/S deratisation/MS derealisation deregulationise/S desalinisation desalinise desensitisation/MS desensitise/DGRSZ desexualisation desexualise/DGS despiritualisation despiritualise despotise/S destabilisation destalinise/DGS desterilise desulphurisation desulphurise/DGS desynchronisation detribalisation/MS develled develling devilise/S devilled devilling devitalisation devitalise/DGS devocalise devolatilisation devolatilise/DGS diabolisation diabolise/DGS diagonalisation diagonalise/S dialecticise/S diallist/S dialysability/MS dialysable/S dialyse/RSZ dialyser/MS diamondise/S diarrhoeic diarrhoetic dieselisation/MS dieselise/S differentialise/S digitalise/DGS dimensionalisation dimensionalise/DGS dimerisation/MS dimerise/DGS dimethylsulphoxide diminutivise/S diphthongisation/MS diphthongise/SU diplomatise/S disangularise/S disauthorise/S disbowelled disbowelling discanonisation/MS discanonise/S discolour/GM discolourisation/MS discolourment/MS discretisation discretise/DGS disdenominationalise/S disdiplomatise/S disembowelled disembowelling disenamour/MS disenthral/S disequalise/RSZ disharmonise/S disheveller dishevelling dishonourable/MPS dishonourably/S dishumanise/S dishumour/DS disillusionise/RSZ disindividualise/S disinsectisation dismalise/S disnaturalisation/MS disnaturalise/S disorganise/GRSZ disozonise/S dispapalise/S dispauperise/S dispersonalise/S dispopularise/S disrealise/S dissceptre/MS dissensualise/S dissocialise dissympathise/S disulphate disulphiram disulphuric disutilise/S divinisation/MS divinise/DGS dockisation/MS dockise/S doctorisation/MS doctorise/S doctrinisation/MS doctrinise/S documentise/S dogmatisation dogmatise/R dognapped dognapping dolomitisation/MS dolomitise/S dolour domesticise/S Doricise/S dowelled doweller dragonise/S dramatisable/MSU draughtboard draughtsmanship drivelled driveller/S drivelling dualisation/MS dualise/SU ductilise/S easternise ebonisation ebonise/DGS ecclesiasticise/S echoise/S eclecticise/S economisation/MS ecstaticise/S Edenisation/MS Edenise/S editorialisation effectualise/S effeminatise/S egoise/RSZ Egyptianisation/MS Egyptianise/S Egyptise/S elasticisation elasticise/DGRSZ electricalise/S electricise/S electroanaesthesia/MS electrocauterisation/MS electrodialyse/RSZ electrodialyser/MS electrogalvanise/S electrohomoeopathy/MS electrolyse/DGS electromagnetisable/MS electrotonise/S elegise/DGS elementalise/S Elizabethanise/S emblematicise/S emblematisation emblematise/DGS emblemise/S embolisation embowelled embowelling emotionalisation/MS emotionalise/DGS emotionise/S empanelled empanelling empathise/DGS emphasisation/AM emulsionise/S enamellist/S enamour/DGMS enamoured/MPS enamourment/MS enarbour/MS encarnalisation encarnalise/DGS encolour/DGMS encyclopaedic encyclopaedically encyclopaedism encyclopaedist energisation energise/GRZ Englishise/S engramme/MS engrandise/S engrandisement/MS enhypostatise/S enolisation/MS enolise/S ensepulchre/MS ensorcelled ensorcells enthralment/MS enthronisation/MS enthronise/S entomologise/DGS envapour/MS envenomisation Epicurise/S epigrammatisation epigrammatise/DGRS Episcopalianise/S epitaphise/S epithetise/S epitomisation/MS equestrianise/S ergotised ergotises eroticisation eroticise/DGS Eskimoised/MS Essenise/S essentialise/S esterisation/MS esterise/S eternalisation/MS eternalise/DGS eternise/DGS etherealisation/MS etherealise/DGS etherisation/MS etherise/DGRSZ ethicisation ethicise/DGS ethnicise/S etymologisation etymologise/DGS euhemerise eulogisation/MS euphemise/DGRS euphonisation euphonise/DGS Europeanise/GS evangelisation/MS evangelise/DGRSZ eventualise/S evolutionise/S excursionise/S exhibitionise/S existentialise/S experimentalise/S experimentise/S extemporisation/MS exteriorisation/MS exteriorise/DGS externalise/DGS facsimilise/S factorise/DGS fanaticise/DGS faradisation/MS faradise/DGRSZ fascisticisation/MS fascisticise/S fascistisation/MS fascistise/DGS fashionise/S fatalise/S favourless/S fecundise/S federalisation/MS femalise/S feminisation/S feminise/DGS ferrelled ferrelling ferritisation/MS fertilisable/MSU fertilisational/MS fervourless/S fetishisation/MS fetishise/DGS feudalisable/MS feudalisation/MS feudalise/DGS fibreless/S fibrisation fibrise/DGRSZ fictionalisation fictionalise/DGS fictionisation/MS fictionise/S figurise/S filmise/S fiscalisation/MS fiscalise/S flamboyantise/S flannelled flannelling flavourful/Y flavourless/S flavoursome flavoury Fletcherise/S floralise/S fluidisation/MS fluidise/DGRS fluoridisation/MS fluoridise/S fluorosulphuric focalisation/MS focalise/DGS foetalisation/MS foreignisation/MS foreignise/S forejudgement/MS formalisable formularisation/S formularise/DGRS formulisation/S formulise/DGS forumise/S fossilisable/MS fossilisation/MS fossilise/GS fossilled fractionalisation fractionalise/DGS fractionisation/MS fractionise/S fragmentise/DGRS Francise/S Franklinisation/MS fraternisation/MS Frenchise/S frictionise/S frivolled frivoller frivolling fueliser/MS functionalise/S functionise/S funeralise/S funneller futilise/S futurise/S Gaelicisation/MS Gaelicise/S gallantise/S Gallicisation Gallicise/DGS gambolled gambolling gangplough gardenise/S gavelled gaveller gavelling gelatinisability/MS gelatinisable/MSU gelatinisation/MS gelatinise/DGRSZ generalisability generalisational genialise/S genteelise/S gentilisation/MS gentilise/SU gentlemanise/SU geologise/DGS geometricise/S geometrise/DGS germanisation/MS germanise/GRSZ ghettoisation/MS ghettoise/DGS giantise/S gimballing glacialise/S glamorisation/S globalisation/S globalise/DGS glottalise/S gluttonise/S glycerinise/S glycerolise/S glycogenise/S gnosticise/RSZ goddise/S goitre/S gonorrhoea gonorrhoeal gorgonise/DGS gospelise/S Gothicise/DGRSZ gourmandise/DGRS governmentalise/DGS grammaticise/S grangerise/DGRS granitisation/MS granitise/S granulise/S graphitisable graphitisation/MS graphitise/S Grecianise/S grecise/DG Greekise/S gruelled grueller/S gutturalisation/MS gutturalise/DGS gynaecocrat gynaecocratic gynaecologic/S gynaecology/MS gyrostabiliser habitualise/S hamletisation/MS hamletise/S handselled handselling Hanoverianise/S Hanoverise/S hanselled hanselling harbourage/S harbourful harbourless/S harmonisable/MS Harvardise/S Harveyise/S hatchelled hatchelling Hattise/S hazardise/S heathenisation heathenise/DGS heavenise/S Hebraicise/S hebraisation/S hebraise/DGS hectogramme/MS hectolitre hectometre/MS Hegelianise/S Hellenisation/S Hellenise/DGS heparinise hepatise/DGS heraldise/S hereticise/S heroinise/S heroisation/MS heroise/DGS heroises/U hiccough/DGMS hirselled hirselling Hispanicisation Hispanicise/DGS historicise/DGS Hollywoodise/S hominisation hominised homoeopathic homoeopathically homoeopathy/MS homoeostasis homoeostatic homoeotypic homologisation homologise/DGRS honourability/MS honourableship/MS honourless/S hoodlumise/S hooliganise/S Hoosierise/S Hooverise/S horizontalisation/MS horizontalise/S hormonise/S horrorise/S hostilise/S hotelisation/MS hotelise/S houselled/U houselling/S hovelled hoveller/S hovelling hucksterise/S humanisation/MS humanitarianise/S humorise/S humoural humourless/PS humoursome hurricanise/S hyalinisation/MS hyalinise/S hybridisable/MS hybridisation/MS hybridise/DGRSZ hybridises/A hydrogenisation/MS hydrogenise/DGS hydrolyse/MS hydrosulphate hydrosulphide hydrosulphite hydrosulphurous hydroxylisation/MS hydroxylise/S hygienisation/MS hygienise/S hyperaesthesia hyperaesthetic hyperbolise/DGS hypercivilisation/MS hypercivilised/MS hypercriticise/S hyperemphasise/S hyperimmunisation/MS hyperimmunise/S hyperinsulinisation/MS hyperinsulinise/S hyperoxygenise/S hyperparasitise/S hyperrealise/S hypersensitisation/MS hypersensitise/DGS hyperspiritualising/MS hyperthyroidisation/MS hyperthyroidise/S hypervitalisation/MS hypervitalise/S hyphenisation/MS hyphenise/S hypnotisability/MS hypnotisable/MSU hypnotisation/MS hypocentre hyposensitisation hyposensitise hypostatisation/MS hypostatise/S hyposulphite hyposulphurous hysterectomise/DGS ichneumonised/MS idiotise/S idolatrise/DGS idolisation/MS Iliadise/S illegalisation illegalise/DGS illegitimatise/S Illuminise/S immaterialisation immaterialise/DGS immobilisation/MS immoralise/S immortalisable/MS immortalisation/MS immortalise/GRSZ immortalises/U immunise/DGS impactionise/S impanelled impanelling imperialisation/MS imperialise/S imperilling impersonalisation/MS impersonalise/GS improvisatorise/S individualisation/MS indraught industrialise/S inferiorise/S infernalise/S infidelise/S infinitise/S informalise inhumanise initialisable/U insolubilise institutionise/S instrumentalise/S insularise/S insurrectionise/S integralisation/MS integralise/S intellectualisation/MS intellectualise/DGRSZ intercivilisation/MS intercolonisation/MS intercrystallisation/MS intercrystallise/S interhybridise/S interiorisation interiorise/DGS interjectionalise/S interjectionise/S interjudgement/MS internationalise/GS interorganisational intraorganisation/MS iodisation iodise/DGRSZ Ionicisation/MS Ionicise/S ionisable/MS ionisation/MS ionisation's/U ionisations/U Iranise/S Irishise/S ironise/S irrationalise/S irregularise/S Islamisation/MS Islamise/DGS isochronisation isochronise/DGS isoimmunisation/MS isoimmunise/S isomerisation/MS isomerise/DGS Israelitise/S Italianisation/MS Italianise/DGRSZ italicisation/MS Jacobinise Japanisation/MS Japanise/DGS jargonisation/MS jargonise/DGS jasperise/S jeopardisation Jesuitise/DGS jewellery/S jobcentre/S Jonathanisation/MS journalisation/MS jovialise/S judgemental judgementalism judicialise/S juvenilise/S kaolinisation/MS kaolinise/S kennelled/U kennelling/U keratinisation keratinise/DGS kernelled kernelling ketonisation/MS ketonise/S kilolitre/MS kinaesthesia kyanise/DGS labellable labialisation/MS labialise/DGS labialises/U labilisation/MS labilise/S labourability/MS labourable/MSU labourhood/MS labourism/MS labourist/MS labourite/MS labourless/S laconise/DGS lactonised laicisation/S laicise/DGS lapelled latentise/S lateralisation/MS lateralise/S laterisation/MS Latinisation/MS Latinise/DGRSZ laurelling leatherise/S legitimatise/DGS legitimisation/MS lethalise/S leukaemia lexiconise/S libellant/S libelled libellee/S libelling libellist licenceless/S lichenisation/MS lichenise/S lignitise/S Lilliputianise/S linearisation/MS linenise/RSZ lingualise/S lionisable/MS lionisation/MS liquidisation liquidise/DGRSZ Listerise/S literalisation/MS literalise/DRSZ lithographise/S localisable/MSU logicalisation/MS logicalise/S logicise/DGS logorrhoea/MS Londonisation/MS Londonise/S louvre/DS loyalise/S lumbarisation/MS lunatise/S lustreless lustreware luteinisation luteinise Lutheranise/RSZ lyophilisation lyophilise/DR lyricise/DGS lysogenisation lysogenise macadamisation macadamise/DGS macarise/DGS machinisation/MS machinise/S magicalise/S magnetisability/MS magnetisable/MS magnetise/GRSZ magnetises/A mahoganise/DGS majorise/S Malayise/S malleablise/S malodour mandarinise/S Manhattanise/S mannerise/S marbleise/S marginalisation marginalise/DGS marsupialisation/MS marsupialise/S martialisation/MS martialise/S martyrisation/MS martyrise/DGRSZ marveller masculinisation/MS masculinise/DGS materialisation/MS maternalise/S mathematicise/S mathematisation matronise/DGS maudlinise/S mechanicalisation/MS mechanicalise/S mechanisable medalise/S medallist/S mediaevalise/S mediaevalism/MS mediaevalistic/S medialisation/MS medialise/S mediatisation/MS mediatise/DGS Mediterraneanisation/MS Mediterraneanise/S mediumisation/MS mediumise/S melanisation melanise/DGS melodisation melodise/DGRS melodramatisation melodramatise/DGS memorialisation/MS memorialise/GRSZ memorisable/MS Mendelise/S mentalisation/MS mentalise/S mercerisation/MS mercerise/DGRSZ mercurialisation/MS mercurialise/S mesmerisability/MS mesmerisable/MS mesmerisation/MS mesmerise/GRSZ mesmerises/U metabolisable/MS metabolise/GS metacentre/S metallicise/S metallise/DGS metamerisation/MS metamerised/MS metaphonise/S metaphorise/S metaphysicise/S metastasise/DGS meteorisation/MS meteorise/S methodisation/MS methodise/DGRSZ metricise/DGS metropolitanise/S Mexicanise/S miaow/DGS microgramme/MS microlitre/MS micrometre/MS micromillimetre/MS microminiaturisation microminiaturise/DGRSZ micronisation/MS micronise/S micropolarisation/MS microscopise/S Midlandise/S militarisation/S militarise/DGS millionise/S Miltonise/DGS mineralisable/MS mineralisation/AMS mineralise/GRSZ mineralises/A miraculise/DGS mirrorise/S misalphabetise/S misanthropise/DGS misauthorisation/MS misauthorise/S misbaptise/S miscanonise/S miscolour/DGMS misemphasisation misemphasise/DGS misendeavour/MS mislabelled mislabelling mislabour/DGMS misorganisation/MS misorganise/S misprise/DGS misrealise/S misrecognise/S missionarise/S missionisation missionise/DGRSZ mobilisable/MS modalise/S modernisable/MS Mohammedanisation/MS Mohammedanise/DGS moisturisation moisturise/DGRSZ molarisation/S Molochise/S monarchise/RSZ monasticise/S mongrelisation/S mongrelise/DGRS monochordise/S monologise/DGS monometallism monometallist monopolisable/MS monotonise/S monumentalisation/MS monumentalise/DGS moralisation/MS moralise/DGRSZ moralising/Y moralisingly/S Moravianised/S morbidise/S morphinisation/MS morphinise/S morselisation/MS morselise/S morselled morselling mortalise/S mortarise/S Moslemise/S motorisation/MS multifibred/MS municipalisation/MS municipalise/DGRSZ muscularise/S museumise/S musicalisation/MS musicalise/S mutualisation/MS mutualise/DGS myelinisation/MS mysticise/SU mythicisation mythicise/DGRSZ mythise/S mythologisation mythologise/DGRS nakedise/S nanogramme/MS nanometre/MS Napoleonise/S narcotisation narcotise/DG nasalise/GS naturalise/GRSZ naturalises/U naturise/S nebularisation/MS nebularise/S nebulisation/S nebulise/DGRS necrotise/DGS nectarise/S Negroisation/MS Negroise/S neighbourless/S neighbourlike/MSU neighbourship/MS neologisation neologise/DGS neuroticise/S Newmanise/S newspaperised/MS nickelisation/MS nickelise/S nicotinise/S nightingalise/S Nipponise/S nitre nitridisation/MS nitridise/S nitrogenisation/MS nitrogenise/DGS nodulise/S nomadisation/MS nomadise/DGS nominalise/GS nonacknowledgement/MS nonanaesthetised nonapostatising/MS noncanonisation/MS noncartelised/MS noncatechisable/MS noncivilised/MS noncolouring/MS noncrystallisable/MS noncrystallised/MS noncrystallising/MS nondefence/MS nondemobilisation/MS nondialysing/MS nondimensionalise/D nonfavourite/MS nonfulfilment/MS nongalvanised/MS nongelatinising/MS nonhydrolysable/S nonimmunised/MS nonionised/MS nonionising/MS nonlocalised/MS nonmagnetisable/MS nonnitrogenised/MS nonorganisation/MS nonoxidisable/MS nonoxidising/MS nonparlour/MS nonpenalised/MS nonphosphorised/MS nonpolarisable/MS nonpolarised nonpolarising/MS nonrationalised/MS nonrealisation/MS nonrecognised/MS nonschematised/MS nonsensitised/MS nonspecialised/MS nonstandardised/MS nonstylised/MS nonsympathiser/MS nonsynthesised/MS nontemporising/MS nonutilised/MS nonvisualised/MS nonvolatilised/MS nonvulcanisable/MS normalisable Normanisation/MS Normanise/DGRSZ northernise/S nosise notarisation/S nothingise/S nounise/S novelisation/MS novelise/GRSZ nuptialise/S obelise/DGS objectisation/MS objectise/S objectivise/AS oblivionise/S Occidentalisation/MS Occidentalise/DGS ochreous odorise/DGRS odourful odourless/S oesophagus offenceless/SY officialisation/MS officialise/S Olympianise/S onionised/MS opalise/S opalled operatise/S optionalise/S oralisation/MS oralise/S orangise/S oratorise/S organisability/MS organisationist/AMS orientalisation/MS orientalise/DGS orientisation/MS orientise/S ornamentalise/S orphanise/S orthocentre orthogonalise/GS orthopaedically orthopaedist ostracisable/MS ostracisation/MS ostracise/GRSZ Ottomanisation/MS Ottomanise/S outcavilled outcavilling outclamour/MS outhumour/DGMS outhyperbolise/S outlabour/MS outrivalled outrivalling outsavour/GMS outsplendour/MS outtyrannise/S ovalisation/MS ovalise/S ovariectomised overagonise/S overbrutalise/S overcapitalisation/MS overcapitalise/DGS overcentralisation/MS overcentralise/S overcivilisation/MS overcivilise/S overclamour/MS overcolour/MS overcriticise/S overdoctrinise/S overemotionalise/S overemphasisation/MS overfavour/MS overfavourable/MS overfavourably/S overfertilisation overgeneralise/DGS overhonour/MS overhumanise/S overindustrialisation/MS overindustrialise/S overjudgement/MS overlabour/MS overnationalisation/MS overrapturise/S overrationalise/S oversentimentalise/S overspecialisation/MS overspecialise/DS oversystematise/S overunionised/MS overurbanisation/MS overwomanise/S oxidisability/MS oxidisable/MSU oxidisation/MS oxidisement/MS oxygenisable/MS oxygenise/RSZ oxygenisement/MS oxygenises/A oxysulphide ozonisation/MS ozonise/DGRSZ paeanise/S paganisation/AMS paganise/DGRSZ paganiser/AS paganises/AU palatisation/MS palatise/S palladiumise/S palletisation/S palletise/GRS pamperise/S pamphletise/S panderise/S pantheonisation/MS pantheonise/S papalisation/MS papalise/RSZ parabolisation parabolise/DGS paraffinise/S paragraphise/S paralysation parasitisation parasitise/DGS parathyroidectomise/DGS parceller parchmentise/S parenthesisation parfocalisation parfocalise Parisianisation/MS Parisianise/S parochialisation/MS parochialise/S parrotise/S parsonise/S partialise/S particularisation/MS partisanise/S pasteurise/DGRS Pasteurisers pastoralise/S pastorise/S paternalise/S patronisable/MSU patronisation/MS patternise/S Paulinise/S pauperisation/MS pauperise/DGRSZ paviour Paynise/S pearlisation pearlise/DGS peasantise/S pectisation pectise/DGS peculiarise/S pedaller/S pedantise/S pedestalled pedestalling pedestrianisation pedestrianise/DGS pelletisation/S pelletise/DGRS pemmicanisation/MS pemmicanise/S penalisable/MS penalisation/MS penciller/S peptisable/MS peptisation/MS peptise/DRSZ peptonisation peptonise/DGS percussionise/S perennialise/S perfectivise/S perilled perilling periodicalise/S periodisation/S periodise/DGS peroxidise/S peroxidisement/MS peroxysulphuric Persianisation/MS Persianise/S personisation/MS personise/S persulphate persulphuric Peruvianise/S petrolisation/MS petrolise/S phagocytise/S phantomise/RSZ phenolisation/MS phenolise/S phenomenalisation/MS phenomenalise/S philanthropise/S Philistinise/S philosophisation/MS phlebotomisation phlebotomise/DGS phoneticisation/MS phoneticise/S phosphatisation/MS phosphatise/DGS phosphorise/AS photocatalyser/MS photographise/S photoionisation/MS photoisomerisation/MS photolabelled photolabeller photolabelling photolysable photolyse/DGS photopolymerisation/MS photosensitisation/MS photosensitise/DGRSZ photosynthesise/DGS piastre picogramme/MS picometre/MS pictorialisation/MS pictorialise/DGS picturisation/MS picturise/DGS pidginisation pidginise/DGS pigmentise/S pilgrimise/S pillarise/S piratise/S pistolled pistolling plagiarisation/MS plasmolyse plasticisation/MS plasticise/DGRSZ platinisation/MS platitudinisation platitudinise/DGS platonisation platonise/DGS plebeianise/S ploughable ploughboy/S ploughhead ploughmen/M ploughstaff poeticisation poeticise/DGS poetisation/MS poetise/DGRSZ pogromise/S polarisability/MS polarisable/MSU polemicise/DGS polemise/DGS policise/RSZ politicalise/S politicisation politicise/GRSZ politise/S polleniser pollinise/DGRS polychromatise/S polychromise/S polygamise/S polymerisation/AM polymerise/AS polysulphide polysulphurisation/MS pommelled pommelling porcelainisation/MS porcelainise/S portionise/S positivise/S posterise/S postsynchronisation posturise/S potentialisation/MS potentialise/S potentise/S powderisation/MS powderise/RSZ practicalisation/MS practicalise/RSZ preacherise/S preacknowledgement/MS preanaesthetic/S prebaptise/S precancellation precisionise/S precivilisation/MS precolour/GJMS precolourable/MS preconisation/MS preconise/RSZ precriticise/S predefence/MS preemphasisation/M preemphasise/DGRSZ prefavour/MS prefavourable/MS prefavourably/S prefavourite/MS prefertilisation/MS prefertilise/S preflavour/GJMS pregalvanise/S prehumour/MS prejudgement/MS prelabour/MS prelatise/S prelocalisation/MS preludise/S premediaeval/MS premediaevalism/MS premonopolise/S preoffence/MS preorganisation/MS preorganise/S preoxidise/DGS preprogramme prerealisation/MS prerealise/S prerecognise/S Presbyterianise/S prespecialise/S presplendour/MS pressurisation prestandardisation/MS prestandardise/S presympathise/S preutilisable/MS preutilisation/MS preutilise/S priorisation/S priorise/DGS privatisation/A privatise/DG problemise/S processionise/S Procrusteanise/S proctorisation/MS proctorise/S prodigalise/S profanise/S professionalisation/MS professionalise/DGS professionise/S programmist/MS programmistic/S proletarianise/GS prologise prologuise/RSZ prolusionise/S propagandise/DGS prophetise/S propositionise/S propraetor proselytisation/MS protectionise/S Protestantise/S protocolisation/MS protocolise/S protocolled protocolling proverbialise/S proverbise/S provincialisation/MS provincialise/S Prussianisation/MS Prussianise/DGRSZ pseudoanaemia/MS pseudoanaemic/S pseudographise/S pseudomediaeval/MS pseudooedema/MS psychoanalyse/RZ psychoanalyser/MS psychologisation psychologise/DGS puebloisation/MS puebloise/S Pullmanise/S pulpitise/S pulverisable/MS pulverisation/MS pummeller pummelling pupilise/S puppetise/S Puritanise/RSZ pyorrhoeal pyramidise/S pyridinise/S pyritisation/MS pyritise/S pyrolysable pyrolysate pyrosulphate pyrosulphuric Pythagoreanise/S pythonise/S Quakerisation/MS Quakerise/S quarrellous quarterisation/MS quininise/S racemisation racemise/DGS racialisation/MS racialise/S radialisation/MS radialise/S radicalisation/MS radicalise/DGS radicalises/U radiosterilise/GS radiumisation/MS radiumise/S rapturise/S rascalise/S rationalisable/MS ravelled raveller/SU ravelling/S reacclimatise reactualise realisticise/S reanimalise/S reapologise reauthorise rebaptisation/MS rebrutalise recanalisation recapitalise recarbonise recausticise/S recentralise reciprocalise/S recivilise recognisee recolonise recolour/GM reconnoitre/DGMRSZ reconnoitrer/MS recriticise refavour/M refertilise reflectorise/DGS reforestisation/M reforestise/S regalise/S regalvanise regionalisation/MS regionalise/DGS regularisation/MS regularise/DRSZ reharmonise rehonour/M rehumanisation rehumanise rehybridise/S reinitialisation reitemise relativisation/MS relativise/DGS religionise/S remagnetise/S rematerialise rememorise remilitarisation remilitarise remineralise/S remobilise rencontre renormalisation renormalise/G reobjectivisation/MS reorganisational reoxidise reoxygenise/S repaganise/RSZ repatronise repersonalise rephosphorisation/MS repolymerisation/MS reprivatisation/MS reprivatise/S republicanisation/MS republicanise/DGRSZ repulverise resensitise/S resepulchre resinise/S resolemnise/S restandardise resterilise restigmatise/S resurrectionise/S resymbolise resynchronisation resynchronise/G resynthesise retinise/S reutilise revaporise/S revelationise/SU revisualise revivalise/S revolatilise/S revolutionisement/MS rhapsodise/DGS rhythmicise/S rhythmisable/MS rhythmisation/MS rhythmise/S ridiculise/S ritualisation ritualise/GS rivalise/S rivalless/S robotisation/MS robotise/S roentgenise Romanisation/MS Romanise/DGRSZ romanticisation routinisation/MS routinise/S rowelled rowelling royalisation/MS royalise/AS rubberisation rubberise/GS rubricise/S ruffianise/S ruggedisation ruggedise/DGS rumourmonger/MS ruralisation/MS ruralise/DGS russianisation Russianisation's Russianisations russianise Russianised Russianises Russianising rusticise/S Sabbathise/S sabrelike/MS sabretooth sacralisation/MS sacramentise/S sailorising/MS salinisation salinise/S saltpetre/MS sandalled sandalling Sanforised sapientise/S satanise/S satinise/S satirisable/MS savagise/S saviourhood/MS saviourship/MS savourless/S savourous Saxonisation/MS Saxonise/S scandalisation/MS scandalise/RSZ scandalises/U scandalled scandalling scenarioisation/MS scenarioise/S scenarisation/MS scenarise/S sceptreless/S schedulise/S schematisation/MS schematise/DGRSZ schismatise/DGS sclerotisation sclerotised scripturalise/S scrutinisation/MS seborrhoea seborrhoeic sectarianisation sectarianise/DGS sectarianises/U sectionalisation/MS sectionalise/GS sectionise/S secularise/GRSZ secularises/U semicarbonise/S semicivilisation/MS semicivilised/MS semifossilised/MS semihonour/MS semihumanised/MS semimercerised/MS semimineralised/MS seminarise/S seminationalisation/MS semiorganised/MS semioxidised/MS semioxygenised/MS semiprofessionalised/MS Semiticise/S Semitisation/MS Semitise/S semivulcanised/MS senilise/S sensise/S sensitisation/AMS sensitise/GRSZ sensitises/AU sensualisation/MS sensualise/DGS sentimentalisation/MS sentinelled sentinelling sepalled septicisation/MS sepulchralise/S serenise/S sermonise/DGRSZ serpentinisation/MS serpentinise/S serpentise/S servilise/S severalise/S severisation/MS severise/S sexualisation/MS sexualise/S Shakespearise/S shepherdise/S Shintoise/S siderealise/S signalisation signalise/DG silicatisation/MS silicidise/S siliconise/S silverise/RSZ similarise/S similise/S simonise singularisation/MS singularise/S sinicise/DGS sirenise/S sisterise/S skeletonisation/MS skeletonise/DGRSZ skepticise/S Slavicise/S Slavisation/MS Slavise/S Slavonicise/S slenderise/DGS sloganise/S snobsnivelling snowplough soberise/DGS sockdologising solarisation/MS solarise/DGS soldierise/S solecise/DGS solemnisation/MS solemnise/DGRSZ solemnises/AU soliloquisation soliloquise/DGJRSZ soliloquising/MSY solmisation solubilisation/I solubilise/DGS solutise/RSZ sonantised/MS sonnetise/S southernise/S sovietisation/MS sovietise/S Sovietised Sovietising Spaniardisation/MS Spaniardise/S Spanishise/S Spartanise/S spatialisation/MS spatialise/S specificise/S specimenise/S spectrelike/MSU spheroidise/S spiralisation/MS spiralise/S spiritise/S spiritualisation/MS spiritualise/DGRSZ spirochaetal spirochaete/MS spirochaetosis splenectomised stabilisable stallionise/S stalwartise/S standardisable/MS stapedectomised statisticise/S stencilise sterilisability/MS sterilisable/MS stigmatise/GRSZ stigmatises/A strobilisation structuralisation/MS structuralise/S strychninisation/MS strychninise/S stylise/GRSZ subarmour/MS subcentre suberisation/MS suberise/DGS subflavour/MS subjectivisation subjectivise/S sublimise/S subminiaturisation subminiaturise/DGS subpulveriser/MS subsidisable/MS subspecialise/S subspeciality/MS substandardise/S substantialise/SU substantivise/S subterraneanise/S subtilisation/MS subtilise/RSZ subtotalled subtotalling suburbanise/S subvitalised/MS succourable/SU succourless/S suggestionise/S sulpha sulphadiazine sulphanilamide sulphatase sulphathiazole sulphatide/S sulphatise/S sulphhydryl sulphinyl sulphisoxazole sulphitic sulphonate/DN sulphone sulphonic sulphonium sulphonmethane sulphonyl sulphonylurea sulphoxide sulphurate sulphureous/PY sulphuret sulphuretted sulphurisation/MS sulphurise/S sulphuryl sultanise/S summerise/S superacknowledgement/MS supercanonisation/MS supercarbonisation/MS supercarbonise/S supercivilisation/MS supercivilised/MS superemphasise/S superficialise/S superhumanise/S supernaturalise/SU superorganisation/MS superorganise/S supersensitisation/MS superspecialise/S supersubtilised/MS supersulphurise/S surgerise/S sycophantise/S syllogise sylvanise/S symmetrisation/MS symmetrise/DGS symptomise/S synaesthesia/M synaesthete/MS synaesthetic synchronisable/MS syncretise/DGS syndicalise/S synonymise/S synopsise synthesisation/MS syphonless/S syphonlike/MS syphonophore syphonostele syphonostelic syphonostely Syrianise/S systemisable/MSU systemise/RSZ tabouret/S tabularisation/MS tabularise/S taffetised tailorisation/MS tailorise/S Talmudisation/MS Talmudise/S tamboura Tammanyise/S tandemise/S tantalisation/MS tariffise/S tartarisation/MS tartarise/DS tasselled tasselling tassells tavernise/S Taylorise/S teaseller/S teazelled teazelling technicalisation technicalise/SU technologise teetotalled teetotalling telaesthesia telaesthetic tellurise/DGS templise/S temporalise/DGS temporisation/MS tenderisation tenderise/DGRS tendrilled tenementisation/MS tenementise/S terminalisation/MS terminalised/MS ternise/S terrestrialise/S territorialisation/MS territorialise/S terrorisation/MS testimonialisation/MS testimonialise/RSZ tetanisation tetanise/DGS teutonise texturised theatreless/S theatrelike/MS theatricalisation/MS theatricalise/DGS theatricise/S theologisation theologise/DGRS thermalisation thermalise/DGS thermoanaesthesia/MS thermometerise/S thermopolymerisation/MS thermosyphon/MS thiosulphate thiosulphuric thronise/S thymectomise thyroidectomised thyroidisation/MS Timonise/S tined tinsellier tinselliest tonicise/S torporise/S Toryise/S totalisation/MS totalisator totalise/DGRSZ totalitarianise totemisation/MS tourise/S tractorisation/MS tractorise/S traditionalise/S traditionise/S tragicise/S traitorise/S trammelled trammeller/S trammelling tranquillisation/AMS transcendentalise/S transistorisation transparentise/S traumatisation traumatise/DGS triangularise/DGS trichinise trillionise/S trimerisation/MS trisulphide trivialisation tropicalisation/MS tropicalise/DGS trowelled trowelling trypsinise/S tuberculinisation/MS tuberculinise/S tuberisation/MS tuberise/S tubulisation/MS Turkise/S Tuscanise/S tutorisation/MS tutorise/S Tylerise/S ultracentraliser/MS ultrahonourable/MS ultraspecialisation/MS ultrastandardisation/MS unagonise unalcoholised/MS unanimalised/MS unantagonisable/MS unapostatised/MS unauthorise unbaptise unbrutalise unbrutise/S uncanonise/S uncantonised/MS uncatechised/MPS uncatholicise/S uncelestialised/MS unchloridised/MS unchristianise/DS uncircularised/MS uncivilise uncolonise unconventionalise/S uncurricularised/MS undefence/M undemocratise undercapitalisation/MS undercapitalise/DGS undercolour/DGJMS underemphasise/DGS underlabourer/MS underorganisation/MS underoxidise/S underrealise/S undersaviour/MS underutilise undervitalised/MS undiscoloured/M unenamoured/MS unequalise unevangelised/MS unfavouring/M unfeudalise/DS ungalvanised/MS ungelatinised/MS ungospelised/MS ungraphitised/MS unharbour/DM unharmonise unheroise/S unhonourable/M unhypnotise uniformisation/MS uniformise/S unilateralisation/MS unilateralise/S unimmortalise/S unindividualise Unitarianise/S unitisation unitise/GS universalisation/MS unlabialise/S unlabouring/M unlocalise unmechanise unmediatised/MS unmercerised/MS unmesmerise/S unmetallised/MS unmethodised/MS unmethodising/MS unmissionised/MS unmodernise unmonopolise/GJ unmoralise/DGJS unmunicipalised/MS unmutualised/MS unnaturalisable/MS unnaturalise/S unnitrogenised/MS unnormalise/G unoptimise/G unoxygenised/MS unpaganise/S unparagonised/MS unparalysed/MS unparticularised/MS unparticularising/MS unpauperised/MS unphilosophise unphosphatised/MS unplagiarised/MS unpoeticised/MS unpoetise/DS unpolymerised/MS unpopularise unprotestantise/S unpulverise unradicalise/S unrancoured/MS unrealisable/M unrealise/GJ unreconnoitred/MS unromanticised/MS unroyalised/MS unsatirise/D unscandalise/S unsceptre unschematised/MS unsectarianise/S unsecularise/S unsensitise/S unsensualise/DS unsentimentalise unsepulchre unsignalised/MS unsolemnise/DS unspiritualise/DS unstoicise/S unsulphurised/MS unsupernaturalise/DS unsymmetrised/MS unsympathisability/MS unsympathisable/MS unsyphon/M untantalising/MS untartarised/MS untemporising/M untheorisable/MS unvaporised/MS unvitalised/MS unvitriolised/MS unvolatilise/DS unvulgarise/DS unwesternised/MS unwomanise urbanise/GS utilisability/S utilisable/MSU utilitarianise/S Utopianise/S utopianiser/MS vaccinisation/MS vacuumise/DGS vagabondise/RSZ vagrantise/S valorisation/AMS valorise/ADGS vampirise/S vandalisation/MS vaporisable/S vaporise/DGRSZ vaporises/A vapourish/P vapourless vapourlike vapoury/RT vascularisation/MS vascularise/DGS vassalisation vassalise/DGS Vaticanisation/MS Vaticanise/S vectorisable/U vectorise/DRSZ vegetablise/S velarisation venalisation/MS venalise/S venomisation/MS venomise/S ventriloquise/DGS verbalisation/MS vermeilled vermeilles vermeilling vermilionise/S vernacularisation/MS vernacularise/S vernalisation/MS vernalise/DGS versicolour/D versionise/S vestryise/S veteranise/S vialled vialling victimisable/MS victimisation/MS Victorianise/S victuallage victualled victualless victualling Vietnamisation Vietnamise/DGS vigourless visionise/S vitalisation/MS vitalisation's/A vitalisations/A vitalise/DGJRSZ vitalising/MSY vitaminisation vitaminise/S vitriolisable/MS vitriolisation/MS vitriolise/RSZ vocationalisation/MS vocationalise/S volatilisable/MS volatilise/GRSZ volatilises/AU voltise/S vowelisation/MS vowelise/DGS vulcanisable/MS vulcanisate/NX vulcanisation/MS vulcanise/GRSZ vulgarisation/MS vulgarise/DGRSZ waggonette Wagnerise/S weevilled westernisation/MS westernise/DGS Whitmanise/S winterisation/MS winterise/DGS womanisation/MS woodcockise/S woollenisation/MS woollenise/S woollie woollybutt zeroise/DGS ispell-3.4.00/languages/english/PaxHeaders.19408/altamer.10000644000000000000000000000013212465612623017745 xustar0030 mtime=1423381907.612150497 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/altamer.10000444003214100001440000000110412465612623021006 0ustar00geofffaculty00000000000000autofocussed autofocusser autofocusses autofocussing cancellate/D caviller/S cigaret crystalization/AMS defocussing dishevelled dislodgement dowelling downdraught draughty/PRY duellist/S enthral/S gimballed glamourous/PY gruelling/Y libeller/S libellous/Y lodgement nonprogramer/MS pedalled pedalling polycrystaline programability programable programed/A programer/AMS programing/A pummelled recrystalize snivelled sniveller/S snivelling/S swivelled swivelling teaselled teaselling teetotaller tinselled tinselling travelogue/MS untrammelled updraught yodelled yodeller yodelling ispell-3.4.00/languages/english/PaxHeaders.19408/english.20000644000000000000000000000013112465612632017751 xustar0029 mtime=1423381914.89231303 30 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/english.20000444003214100001440000113674112465612632021034 0ustar00geofffaculty00000000000000AAA/S Aarhus ab abacterial abacus/S abandonee/M abashment/M abatis/S abattoir abaxial abbacy abbas abberations Abbott/M abbreviator abdicable abdicator abduce/DG abducens abducent abducentes abeam abecedarian Abel Abelian Abelson/M Aberdeen/M Abernathy/M aberrance aberrancy aberrated aberrational abetment abhorrence abidance Abidjan abiogenesis abiogenetic abiogenetical/Y abiogenist abiological/Y abiotic abiotically abjuration ablaut abloom abluted ablutionary abnegate/NS abnegator aboil abolishable abolitionary abolitionism abomasal abominably abominator/S aboral/Y abortifacient abortionist/S Abos abovementioned abracadabra abradable abradant Abram/M abreact abrin abroach abruption abscise/DG abscisin abscission absinth absolutism absolutist absolutistic absorbability absorbable absorbance absorbancy absorbant absorbtions absorptance absorptional abstemious abstentious abstractable abstractional abstrict abstriction/S abstrusity absurdism absurdist absurdum abubble abuilding abutilon abuttals abuzz abyssal Abyssinia Abyssinians AC/S academe academical academicism academism Acadia acanthocephalan acanthopterygian acanthus/S acarpellous acarpelous acatalectic acaulescence acaulescent accelerando accentless acceptation accessary accessibleness accessional accessorial acciaccatura accidence accidentalism accidentalist accipiter acclivity accommodational accommodator/S accompanyist/S accomplishable accordionist/S accostable accountantship Accra accreditable accrete/DGV accretionary accruable accruement acculturational acculturationist accumbency accumbent accumulable accurses accursing accurst accusatory accusor accustomation acedia acellular acentric acephalous acerb acerbate acerbic acerbically acerbity acervate/NY acetal acetaldehyde acetamide acetaminophen acetify/NR acetonic acetous acetyl acetylate/NV acetylenic Achaean achromat achromatically achromaticity achromatism achy/PRT acidhead acidiferous acidifiable acidify/NR acidimeter/MS acidimetric acidimetry acidulant acidulate/N acidulent acinus Ackley acock acold acquaintanceship acquirement acquisitional acquisitionist acquisititious acquitment acquittance acridity acrobacy acrobatically acrocentric acrodont acronymic acronymically acropetal/Y acrophobia acrophobic acrostic acrostical/Y actability actable Actaeon actinolite actionable actionably actionless activistic Acton/M actorish actuary aculeate acuminate/N acupuncture acyl acylate/DS Adair/M adamance adamancy adamantine adaptaplex adaptational/Y adaptitude adaxial addable addible Addis addlepated addressor adducible Adelaide/M Adele/M Adelia/M Aden/M adenine adenoid/S adenoidal adenoma adenomatous adenosine adherend adhesional adieux adipic adipose adiposity adject adjudicator adjudicatory adjunction adjuration adjuratory adjustability adjustmental adjutancy adjuvant Adkins adle Adler/M Adlerian adman admeasure admeasurement administrant administrational administrationist admirability admissive admitter/S admonitory/Y Adolph/M Adolphus adoptability adoptable adoptee/S adoptianism adoptianist adoptionism adoptionist adorability adorably adoze adposition adrenalin adrenergic adrenocortical Adrian/M Adrienne/M adscititious adsorbability adsorbable adsorbent adulator adulatory adulterant adulterator adulteress/S adulterine adultlike adust advection/S advective adventuresome/P adventuress/S adventurism adventurist/S adventuristic adversative/Y advertence advertency/I advertent/Y advocator adynamic adz adze Aeneas aeolotropic aeolotropy Aeolus aerialist aerie/R aero Aerobacter aeroballistic/S aerobatic/S aerobe aerobically aerobiological/Y aerobiology aerobiosis aerobiotic aerobiotically aerobrake aerodonetics aerodrome aerodynamical/Y aerodynamicist aerodyne aeroembolism aerogel aerogene/S aerogram/MS aerographer aerography aerolite aerolith aerolitic aerological aerologist aerology aeromagnetic aeromechanic/S aeromedical aeromedicine aerometeorograph aerometer/MS aerometry aeronaut aeroneurosis aeronomer aeronomic/S aeronomical aeronomist aeropause aerophagia aerophobia aerophyte aeropropulsion aerosphere aerostat aerostatics aerostation aerothermodynamics aery/RY Aeschylus Aesop aesthesiometer/MS afeard afeared affability affably affaire/S affectability affectable affectate affectional/Y affectionless affectivity affectless/P affiance affiant affine/DY affirmable affirmance affixable affixal affixation affixial affixment affluency afflux affray affusion aficionada/MS aflatoxin aflutter afreet Afrikaner afterburner/S aftercare afterclap afterdamp afterdeck afterimage afterpiece aftertaste aftertax aftertime afterword afterworld Agamemnon agamete agamic agamically agapeic agapeically agave agaze Agee/M ageing/U agelong agendaless agendum agene agenesis agentry aggie/S agglutinability agglutinogen agglutinogenic aggradation aggrade aggregational aggregator/MS aggress aggressivity agio/S agitational agitato agitprop aglare aglitter agnate/N agnatic agnatically Agnew/M agnomen agnosticism agon agone agonic agonist/S agonistic agonistical/Y agoraphobia agoraphobic agouti agrarianism agreeability Agricola agriculturalist agriculturist agrimony agriology agrobiological/Y agrobiology agrologic agrological/Y agrologist agrology agronomic/S agronomical/Y agronomist agronomy aground aguish/Y Agway ahistoric ahistorical Ahmedabad ahold Aida/M aidman aigrette Aiken/M ailanthus aile Ainu airbrush airburst airbus aircrew airdrome airfreight airglow airmanship airmobile airpost airscrew airsick/P airstream airwave/S airworthy/P aitch Aitken/M AK Akers AL alabastrine alack alacritous Aladdin alai alamogordo alarmism alary Alastair alate/DN alb albedo Alberich albinic albinism albino albinotic Albrecht/M Albright/M albuminoid albuminous alcaic alcazar Alcestis alchemic alchemical/Y alchemist alchemistic alchemistical Alcmena alcoholically alcoholometer/MS alcoholometry Alcott/M Aldebaran aldermanic Aldrich/M aldrin aleatoric aleatory alehouse alembic Aleutian alexandrine alexandrite Alexei/M alexia Alexis alfa Alfonso/M Alfred/M Alfredo/M algal algebraist Algenib Alger/M algicidal algicide algid algidity algin Algonquian Algonquin/M algophobia Ali alia alicyclic alidade alienability/I alienable alienage alienator alienee alienism alienist alienor aliform alightment alimentary alimentation alimentative aline alinement aliphatic aliquot/MS Alison/M alizarin alk alkahest alkahestic alkalescence alkalescent alkalify alkalimeter/MS alkalimetry alkalinity alkaloidal alkalosis alla allan allegate allegorist Allegra allelic allelism allelomorph alleluia allemand allergen allergenic allergist allery alleviatory allheal alliaceous Allis allium allocatable allocution allogamous allogamy allogeneic allograft allograph allographic allomerism allomerous allometric allometry allomorph allomorphic allomorphism allonge allons allopath allopathic allopathically allopathy allopatric allopatrically allopatry allophane allopurinol allosteric allosterically allotee allotransplant allotransplantation allotrope allotropically allotropy allottee/S allotype allotypic allotypically allotypy allover allseed alluvion allyl allylic Allyn/M Almaden/M almandine almandite almsgiver almsgiving almshouse alogical/Y aloin alongshore alpaca alpenglow alpenstock Alpert/M alpestrine alphameric/S alphamerical alphanumerical/Y Alpheratz Alphonse/M alpinism alpinist alright Alsop/M Altair/M altarpiece altazimuth alterability/IU alterably/I alterate/V alterman altern althea altimetry altitudinal altitudinous altocumulus Alton/M altricial alumina aluminate aluminosilicate aluminous alunite Alva/M Alvarado/M alveolate/N alyssum alytical amah amalgamator amanita amanuenses amaranth amassment amative/PY amaurosis amaurotic amazonite ambage/S ambagious ambassadorial ambassadorship ambassadress ambergris ambidexterity ambience/S ambit ambitionless ambiversion ambiversive ambivert ambrotype ambsace ambulacral ambulacrum ambulate/N ambushment Amelang ameliorator amelioratory amenability/S amenably amendable amendatory amende ament amentia Amerada amerce/G amercement amerciable ametropia ametropic Amharic ami/SX amiability amiably amicability amidships amine amitosis amitotic amitotically amitrole Amman Ammerman/M ammino ammoniacal ammoniate/N ammonify/NR ammonite/S ammonitic ammonoid amnesia amnesiac amnesic amnestic amnia amniocentesis amnion amniote amniotic amoeban amoebiasis amoebic amoebocyte amoeboid Amontillado amoralism amoretto amorphism amort amphibia amphibole amphibolite amphibolitic amphioxis amphioxus amphipathic amphiploid amphipod amphitheatric amphitheatrical/Y amphitropous amplexicaul amplexus amplidyne ampul ampule amputator amputee amra amuck amygdaloid amylolytic ana anabaptism anabasis anabatic Anabel/M anabiosis anabiotic anabolic anabolism anachronic anachronous/Y anaclitic anacoluthic anacoluthically Anacreon anaculture anadiplosis anaerobe anaerobically anaerobiosis anaglyphic anagrammatic anagrammatical/Y Analects analemma/MS analeptic analgesia analgetic analogic analogism/MS analogist analphabet analphabetic analphabetism analysand anaphase anaphasic anaphylaxis anaplasia anaplastic anarch anarchism anarchistic anarcho anastasia anastigmat anastrophe Anatole/M Anatolian anatomist anatoxin anatropous ancestress anchoress anchoret anchoritic anchoritically anchorless anchorman ancientry Andalusia andalusite andante andantino andesine andesite andesitic andiron andradite Andrea/M Andrei/M androgen androgenic androgyny android Andromache anecdotage anecdotalist/S anecdotic anecdotical/Y anecdotist anemograph anemographic anemometric anemometrical anent aneroid aneurism aneurysm aneurysmal anfractuosity anfractuous angary Angelica/M angelical/Y angerless angina anginal anginose angiocardiographic angiocardiography anglesite angleworm anglia anglice anglicism Anglophile Anglophiliac Anglophilic Anglophilism Anglophily Anglophobe Anglophobic angularity angulation ani anile animalcular animalcule animalculum animalism animalist animalistic animality animallike animist animistic animus aniseed aniseikonia anisette anisotropically anisotropism ankerite ankh anklebone/S anklet Annale Annalen Annalist Annalistic annelid Annette annexational annexationist annexe annihilator annihilatory annuary annuitant annularity annulate/DNY annulet annuli annunciatory annunicates anodal/Y anodically anodyne anodynic anointment anomalistic anomalistical anomer anomeric anonym anorectic anoretic anorexigenic anorthic anorthite anorthitic anorthosite anosmia anosmic anovulant anovulatory anoxemia anoxemic anoxia anoxic Anselm/M Anselmo/M anserine Antaeus antecede antecedence antecessor antechamber/S antechoir antediluvian antefix antefixal anteing antemortem antenatal antennal antennule anteroom/S anthelion anthesis anthill anthologist anthracitic anthracnose anthrax anthrop anthropic anthropical anthropocentric anthropocentrically anthropocentricity anthropogenesis anthropogenetic anthropography anthropoid anthropometrical/Y anthropomorphism anthropomorphist anthropopathism anthropophagous anthropophagus anthropophagy anthroposophy antiaircraft antianxiety antibiosis antibiotically antiblack antiblackism antically anticancer anticancerous anticatalyst anticholinergic anticipant/S anticipatable anticipator anticlerical anticlericalism anticlimactical/Y anticlimax/S anticlinal anticline anticlockwise anticoagulant anticoagulate anticodon anticonvulsant anticonvulsive antidepressant antiderivative antidiuretic antidotal/Y antienzyme antiestablishment antifertility antiform antifouling antifriction antifungal antigenic antigenically antigenicity antiglobulin antigorite antigravity antihemophilic antihistamine antihistaminic antihypertensive antiknock antileukemic antilitter Antilles antilog antilogarithm/S antimacassar/S antimagnetic antimalarial/S antimedieval/MS antimetabolite antimitotic antimonial antimonic antimonious antineoplastic antineutrino antineutron antinodal antinode antinovel antinovelist antinucleon antioxidant antiparasitic antiparticle antipathetic antipathetically antiperiodic antiperiplanar antipersonnel antiphlogistic antiphon antiphonary antiphony antiphrasis antipodal antipodean antipoetic antipollution antipope antiproton antipyretic antipyrine antiquarianism antirheumatic antirrhinum antisemite/MS antisepsis antiseptically antisiphon/MS antispasmodic antistrophe antistrophic antistrophically antitank antitoxic antitrades antitubercular antituberculous antitumor antitumoral antitussive antivenin antiviral antivitamin Anton/M Antonio/M antonymic antonymous antonymy antrorse/Y Antwerp anywise aortal aortic aortographic aortography apalachicola apartmental apathetically apatite apeak apelike aperient aperiodically aperitif Apetalous aphaeresis aphaeretic aphanite aphanitic aphasiac aphelion aphetic aphetically aphides aphorist aphoristic aphoristically aphotic aphrodisiac aphrodisiacal aphyllous aphylly API API's apian apiarian apiarist apices apiculate apicultural apiculture apiculturist APIs aplacental aplanatic aplasia aplastic apocalyptical/Y apocalypticism apocalyptism apocalyptist apocarpous apocarpy apochromatic apocope apocrine apodal apodeictic apodictic apodictically apodosis apodous apogamic apogamous apogean apolitical/Y apollinaire apologie apologue apolune apomixis apomorphine aponeurosis aponeurotic apoplectic apoplectically apoplexy aport aposematic aposematically apostasy apostleship apostolate apostolicity apostrophic apothecial apothecium apothegm apothegmatic apothegmatical/Y apothem apotropaic apotropaically appaloosas apparitional appealability appealable/U appeasable appellee appendant appendectomy appendicular apperceive apperception apperceptive appestat appetence/I appetency appetent applaudable applaudably Appleby/M applicatory appointe appomattox apport appose/DG appositional/Y appraisement appreciator appreciatory apprehensibly appressed approbatory approvable approvably approx approximable approximant appurtenant Apr apractic apraxia apraxic apriority apsidal apsides apterous apteryx aptitudinal/Y apyrase aquacade aquaculture aquafortis aqualunger aquamarine aquanaut aquaplane/R aquarelle aquarellist aquarist aquatically aquatint/R aquatintist aquavit aquicultural aquiculture aquidneck aquiferous Aquila/M aquilegia aquiline aquilinity aquiver AR arability Arachne/M arachnoid Arapaho arbitrable arbitrageur arbitral arbitrament arbitrational arboreous arborescence arborescent/Y arboriculture arboriculturist arborist/MS arborvitae arbovirus arbutus Arcadian arcanum arccos arccosine archae archaist archaistic archangelic archbishopric archdeacon archdeaconate archdeaconry archdiocesan archducal archduchess archduchy archduke archdukedom archegonial archetypal/Y archfiend archipelagic architectonically architrave archivolt archon archpriest arclength arco arcsin arctan arctically arcuate/NY Arden/M areal/Y areaway areola areolar areolate/N areole Arequipa argent argentic argentiferous argentine Argentinian argentite argentous arger argillaceous arginine Argive argos argosy argufy/R argumentum argyle argyll arhat arianist/S arithmetician Arlen armamentarium Armata Armco Armenia armentieres armillaria armless armlet armlike armoire armorial/Y armorist/MS armrest armsful aromatically aromaticity arpanet Arragon arras arrearage arrestant arrestment Arrhenius arrhythmia arrhythmic arrhythmical/Y arris/S arriviste arrondissement arrowwood arrowworm arrowy arsenical arsenious arsenite arsis arsonous arte artefact/S Artemia artemisia arteriogram/MS arteriographic arteriography arteriolosclerosis arteritis arthritic arthritically arthropathy arthrosis arthrospore arthrosporic articular Artie/M artilleryman artiodactyl artiste artmobile Arturo/M arum aryl asap asbestosis asbestus ascendable ascendance ascendence ascendible ascensional ascensive ascertainment ascesis ascetical/Y ascidian ascidium ascites ascitic ascomycetes ascorbate ascospore ascosporic ascosporous ascus asdic asepsis aseptically asexual/Y Ashby/M ashcan/S ashless ashmen Ashmolean ashram Asilomar/M asininity askant askesis aslant aslope asparagine aspartate aspartic aspartokinase aspectual aspencade/S asperges asperse/DG asphaltic asphaltite asphaltum aspheric aspherical asphodel asphyxiator aspiate aspidistra assagai assai assailable Assam assassinator assegai assemblagist assemblyman assemblywoman assentation assentor assessable asseverate/NV assignability assignat assignational assignor assimilability assimilable assimilationism assimilator assimilatory assize/RSZ associateship assoil assoilment assortative assuagement assuasive assumable assumably assumpsit assumptive assurgent assuror astaires astarboard Astarte astatic astatically astaticism asteriated asteriskless asterism/S astern asthenia asthenic asthenosphere asthmatic asthmatically astigmat astigmatically astir ASTM Aston/M astonied astrachan astragal astragalus astrakhan astrobiological astrobiology astrocyte astrocytic astrocytoma astrodome astrol astrolabe astrologer/MS astrological/Y astrology astron astronautical/Y astronavigation astrophotography astrosphere Asuncion aswarm aswirl aswoon asymptomatic asynapsis async asyndetic asyndetically asyndeton ataractic ataraxic atari atavism atavist atavistically ataxia ataxic Atchison/M atelectasis atelier Athabascan atheistical/Y athenaeum atheneum athirst athletically athwartship/S atilt atinate atingle atlantes Atlantica atman atment atmometer/MS atmospherically atmospherium atomicity atomism atomist atomistic/S atomistically atonalism atonalist atonalistic atonality atonic atonicity atony atopic atopy atremble atresia atrial atrioventricular atrip atrium/S atropine Atropos attachable attackman attainability attainder attaint attar attemptable atticism attis Attlee attorn attorneyship attornment attractable attractant attractivity attrited attritional attunement atune Atwater/M atwitter Atwood/M atypic atypicality Auberge/M Aubrey/M auctorial aud/GN audient audile audiofrequency/S audiogenic audiophile auditable audivi Audrey/M Auerbach/M Aug augend augite augitic augmentable augmentative augmentor augury auk auld aunthood auntlike aurar aureate aureola auricle auricula auricular auriculate Auriga aurochs aurorae auroral aurorean aurous auscultatory auslander auspicate austenite austral australite australopithecine authoress authorial autoantibody autobahn autobiographer autobus autocade autocatalysis autocatalytic autocephalous autochthonous autoclave/D autocoder autocratical autocross autocueing autodidact autodidactic autodyne autoecious/Y autoecism autoerotic autoerotically autoeroticism autoerotism autogamous autogamy autogenesis autogenetic autogenetically autogenic autogenous/Y autogiro autograft autographic autographically autography autogyro autohypnosis autohypnotic autoimmune autoimmunity autoinfection autoinoculation autointoxication autoloading autologous autolysate autolysin autolysis autolytic automaker automanipulation automanipulative automat automatable automaticity automatism automatist automobil automobilist automorphism autonomically autonomist autoparagraph autophyte autophytic autophytically autoplastic autoplastically autoplasty autoradiogram/MS autoradiograph/S autoradiographic autoradiography autorotate/N autorotational autosexing autosomal/Y autosome autosuggest autosuggestible autosuggestion autotable autotelic autotetraploid autotetraploidy autotomic autotomous autotomy autotransplant autotransplantation autotroph autotrophic autotrophically autotrophy autunite aux auxesis auxetic auxetically auxil auxin auxinic auxinically auxotroph auxotrophic auxotrophy avaliable avast avatar avaunt avec avellan avellane aventail aventine aventino aventurine averment Avernus Avery/M avesta aviarist aviatress aviculture aviculturist avidin avifauna avifaunal/Y avifaunistic avigation Avignon avirulent avitaminosis avitaminotic avocate avocational/Y avocet avoirdupois avouchment avowal avulse/GN avuncular awardable aweary aweather aweigh aweless awestricken awestruck awhirl awless awn awnless awoken axal axel axenic axenically axiality axil axile axilla axillar axillary axisymmetric axisymmetrical/Y axisymmetry axletree axman ayin Aylesbury AZ azathioprine azeotropic Azerbaijan/M azide azido azine azonal Azores azote azurite azusa Babbage/M babblement baboonish babushka babysat baccate bacchanal bacchanalia bacchanalian bacchant bacchante/S bacchantic bacchic bacciferous baci bacillar bacillary bacitracin backbite/R backcountry backcourt backcourtman backcross backfield backgammon/M backhoe backhouse backless backpedal backrest backsaw backseat backset backslap backslapper backslide/R backspin backstay backstretch backstroke backswept backswing backsword backwash backwoodsman bactericidal/Y bactericide bacterin badinage Baffin bafflement bagful bagley bagman baguette Bahrein/M bailable bailee baileefe bailie bailiffship bailiwick bailment bailor bailsman bainite Baird/M bairn baize Baja bakeshop Bakhtiari Baku Balboa balderdash baldhead/D baldish baldpate balefire balenciaga Balfour balkline ballade balladeer balladic balladist balladry ballcarrier balletic balletomane balletomania ballfield/M ballgown/M ballista ballistically balloonist ballottement ballyhooey baloney balsamic Baltimorean baluster bam Bamako bambino Banach banality banausic Banbury/M bancroft bandana bandanna bandbox bandeau bandeaux bandgap banditry banditti bandleader bandmaster bandoleer bandolier bandsman baneberry bangish bangtail Bangui banjoes banjoist bankable bankbook/S bankroll/R bankside banneret bannerette bannister/S bannock banns banquette bantamweight bantling banyan banzai baobab barbarianism barbarically barbarism barbate barbe barberry barbershop barbitone Barbour/M barbudo/S barbwire bareback/D bareheaded/P bareknuckle/D bargeboard bargeman Barhop bariatrician bariatrics baric baritonal barkless barky/R barleycorn Barlow/M barmaid barman barmy/R Barnes Barnet Barnett/M Barnhard/M Barnum barny barogram/MS barograph barographic barometrical/Y barometry baronage baronetage baronetcy Barr/M barramunda barramundi barranca barranco barrater barrator barratry barre barrelful barrelhouse barrelsful Barrett/M Barrington/M barrio barrister/S barron barroom/S Barton/M barware barycentric baryon/MS baryonic basaltic bascom bascule baseborn Basel baselevel basementless basepoint baserunning bashaw basicity basidial basidiomycete/S basidiomycetous basidiospore basidiosporous basidium basie basify/N basilary basileis basilica basilican basinal basinet basipetal/Y basketful basketlike basketry basketwork basler baslot basophil basophile basophilia Basque/M bassi/S bassoonist/MS bast bastardy bastile bastille batboy Batchelder/M bate bateau Bateman/M batfish batfowl bathhouse/S bathometer/MS bathtubful Bathurst/M bathwater batista batiste batman Bator batrachian batrachotoxin batsman batt battailous battalia batteau Battelle/M battement battlewagon battu battue batty/PR batwing baubee baudrons baulk/DGS baum Bausch bauxitic bawcock bawd/N bawdry bayadere bayaderka bayanihan Bayda Bayport/M Bayreuth bazon bazooka/S bea beachboy/S beachcomb beachfront beachside beachwear beachy beadroll beadwork beale beall beame beamish/Y beamy beanball beanie bearability bearbaiting bearberry beardown Beardsley/M bearskin beastie beatie beatifically beatless beauchamps beauclerk beaverboard beaverton bebopper bechance becket beckett Beckman/M becloud bedabble bedaub/G bedchamber bedclothes bede bedeck bedevilment bedew bedfellow bedim bedimmed bedimming bedlamite bedouin bedplate bedrid bedroll bedsore beduin/S Beebe/M beebread Beecham/M beefcake beefeater beefwood beekeeper beekeeping beelike beeline beery/R beestings beeswax beeves befoh befool beforehandedness beforetime begat begetter begone begrime/DG beguilement beguine behaviorist/MS behavioristically behemoth behemothic behindhand behoof beigy Beijing bel/V Bela/M belaud beldam beldame beleaguer belge belike belittlement Belize Bellamy/M bellbird belligerency Bellingham/M Bellini/M bellpull bellum bellwood bellwort bellyband belowground Belshazzar/M beltless belton beltway beluga/M BEMA bemadden/G bemire bemock bemusement Benares benchmar benday benedictory benefaction benefactress benefic beneficiate/N benefitted benefitting Benelux/M benight benignancy benignant/Y benignity benthal benthic benthonic benthos Benton/M bentonite bentonitic benumb Beograd bepaint beplaster bequeathal berberine berceuse/S Berea/M Berenices Beresford/M bergamot Bergen/M Bergland/M Berglund/M Bergman/M Bergstrom/M beringer Berman/M bernardine Bernardino/M Bernardo/M berne Bernet/M Bernhard Berniece Bernini berrylike berteros Bertie berto Bertram/M Berwick/M beseem besetment beshrew besmear besom besot besotter bespatter bespoken besprent besprinkle bestead/DG bestiality bestiary bestrew bestride/GS bestsellerdom betaine betake betel bethink betimes betony Betsey/M Bette/M betted betweenbrain betweentimes betweenwhiles bewigged bewitchery bewitchment bewray bey Bhagavadgita Bialystok biassed biassin biassing biathlon bibb/R bibbery bibcock bibelot/S bibless biblicism biblicist bibliographer bibliolater bibliolatrous bibliolatry bibliology bibliomania bibliomaniac bibliomaniacal bibliopegic bibliopegically bibliopegist bibliopegistic bibliopegy bibliophilic bibliophilism bibliophilist bibliophily bibliopole bibliopolic bibliopolist bibliotheca bibliothecal bibliotic/S bibliotist BibTeX bibulous/PY bicameralism bicapsular bicentenary bicentric bicentricity bichloride bichrome bicipital biconcavity biconditional biconvexity bicorne bicornuate bicultural biculturalism bicuspid bicuspidate bicyclic biddability biddably bidet bidialectal bidialectalism bierce bietnar bifacial biff bifid/Y bifidity bifilar/Y biflagellate biform bigamist bigamous/Y bigamy bigeminal bigeminy bigeneric bigeye biggety biggin bigging biggish biggity Biggs bighead/D bighearted/PY bighorn/MS bigmouthed bignonia bigwig bijou bijouterie bikeway bilabiate bilateralism Bilbao bilbo bilboa bilgy/R bilharziasis biliary bilious/PY billable billfold/MS billhead billhook Billiken/S billon billowy billposter billposting billycock bilobal bilobed bilocular biloculate Biltmore/M bimanual/Y bimester bimestrial bimetal bimillenary bimillenial bimodality bimorphemic binational bindweed bine bingle Bini binnacle binned binning binocularity bint binucleate/D bio bioactive bioassay bioastronautical bioastronautics biocatalyst biocatalytic biocenology biocenosis biocenotic biochemic Biochimica biocidal biocide bioclean bioclimatic biocoenosis biocoenotic biodegradability biodegradable biodegradation biodegrade bioecological bioecologist bioecology bioelectric bioelectrical bioelectricity bioengineering bioenvironmental bioflavonoid biog/N biogenesis biogenetic biogenetically biogenic biogeochemical biogeochemistry biogeographic biogeographical biogeography biographee bioinstrumentation biologism biologistic bioluminescence bioluminescent biomacromolecule/S biomaterial biome biometrical/Y Biometrika biomolecular bionic/S bionomic/S bionomical/Y Biophysica biopolymer/S biosatellite bioscientific bioscientist biosynthesis biosynthetic biosynthetically biosystematic biosystematist biosystematy biota biotechnological biotechnology biotelemetric biotelemetry biotin biotite biotitic biotope biotransformation biotron biotype biotypic biovular bipack biparental/Y bipartisanism bipartisanship bipedal biphenyl bipinnate/Y bipod bipolarity bipropellant biquadratic biracialism biradial biramous birchbark birdbrain/D birdcage/MS birdcall birdhouse birdieback birdieing birdlime birdman birdyback bireme biretta Birgit birgitta birk birkhead birkie birl/R Birmingham birr birse birthmark birthroot birthstone birthwort BIS biscayne bisectional/Y bisexuality Bismark/M Bissau bistort bistro/S bistroic bitartrate bitchery bitchy/PRY BitCoin BITNET bitstock bitsy bitt/DG bitted/U bitterish bitterweed bittock BitTorrent bitty bituminoid bivalent biyearly biz Bizet/M blabber/DG blabby blackamoor/S blackcap blackcock blackdamp blackface blackfin blackfish blackfly Blackfoot/MS blackguard/MSY blackguardism blackhander blackhead blackheart blackish blackland blackleg blackmer blackpoll blacksnake blacktail blackthorn blacktop/MS blackwash blackwater bladderlike Blaine/M blakey blamably blameful/Y Blanchard/M blancmange blandish/R blandishment/S blanketflower blanketlike blanton blarney blasingame blastema blastematic blastemic blastie blastment blastula/MS blastular blastulation blat blate blatted blatter blazonry bleachable bleakish Bleeker blench blende Blenheim blether blevins blimpishly blimpishness blindfish blindworm Blinn/M blintz blintze blipping blique blistery blithesome/Y blizzardy blobbing blockbuster/S blockbusting blockhead/S blockish/Y Blomberg/M Blomquist/M blondish bloodcurdling/Y bloodfin bloodguilt bloodguilty/P bloodletting bloodline/MS bloodmobile bloodred bloodstock bloodstone bloodsucker bloodsucking bloodthirsty/PY bloodworm bloodwort bloomy bloop/RS blossomy blotchy/Y blotter blotty blouson bloviate/DGNRS bloviator/MS blowfly blowgun blowhard blowout blowpipe blowsy blowtube blowy blowzy blubbery blucher bluebeard bluebell bluebottle bluecoat bluefin blueing bluejack bluenose bluepoint bluesman bluestem bluestone bluesy bluet bluetongue blueweed bluey Blum blume Blumenthal/M blunderbuss blushful blusterous blutwurst blyth Blythe/M BMW boardlike boardman boardmanship boardroom boardsmanship boardwalk Boarsh boart boatel/S boatmanship boatsmanship boaz bobber bobbery bobbinet bobbsey bobeche bobrow bobsledder bobstay bobtail/D Boca/M bocaccio bocci boccie bod bodacious/Y bodega bodement bodenheim bodiless bodkin Bodleian bodysurf/R bodywork boehmer boehmite Boeotia Boeotian boer boff boffin boffo/S boffola bogartian bogeyman/M boggs bogie bogle boheme Bohemianism bohlen boies Bois boite/S bola/S boland bolas/S bole bolero bolet boletus boliou bollard bollix bollworm bolometric bolometrically boloney boltrope bolus bombardier/S bombardon bombastically bombazine bombe bombinate/N bombsight bombus bon bonbon bondable bondholder bondmaid bondman bondstone bondwoman bonefish bonehead/D boneset bonesetter boney boneyard bonfiglio bongoes bongoist bonham bonheur bonhomie bonkers bonne/R bonnor bonsai bonspiel bontempo bonze/R boobify boodle booger boogerman boogeyman bookbindery bookful booklist bookmaker/S bookmaking bookman bookmobile/S bookselling bookstall bookworm/MS booky boomlet boomy/R boondocks boondoggle/GR boonies Boonton bootee Bootes bootie bootjack bootlace bootle bootless/PY bootlick/R bootprint boozy/Y bopper bora borage borak borane borazon bordel bordereau boreal boresight/S borglum boride Boris borland borneol boronic bort Bosch bosomy bosonic bosphorus Bosporus bosque bosquet bossdom bossism bostitch bot/S botan botchwork botchy botel botheration botnet/MS bottlecap/MS bottleful bottomland bottomry botulinal botulinum Boucher boucle boudoir bouffe bougainvillaea bougainvillea bougie bouillabaisse bouldery boule boulevardier bouleversement boulez boulle bounderish/Y Bourbaki bourbonism bourdon bourg bourgeoise bourgeoisify bourgeon bourguiba bourn bourse bouse/G boustrophedon bouton boutonniere bouvardier bouvier bouzouki bovinity bowan Bowditch/M Bowdoin bowelless Bowen/M bowerbird/MS bowery bowes bowfin bowfront bowhead bowknot bowlder bowleg bowlegged bowlful bowmen bowse bowsprit bowwow bowyer Boxford boxful boxhaul boxlike boxthorn boyar/S boyard Boyd/M Boyle/M Boylston/M Bozeman/M bozo/S BP brabble/DG brachial brachiate bract bradded bradding Bragg braggart braggest braggy brahma Brahmaputra Brahmsian brail braillewriter braincase brainish brainless/PY brainpan brainpower brainsick/Y brainstem/MS brainteaser braise/DGRS brakeless braky branchia branchial branchiate branchless branchlet branchy brandel brandin brandling Brandt/M brank/S brannon brant/S branum braque/S brassard brassbound brasserie brassica Brasstown brattice brattish/G brattle/DG bratty/P brava bravoes braw/Y braweling brawle brawly/R brawny/PRY brazos Brazzaville breadbasket/S breadroot breadstuff breadthways breadthwise breadwinning breakfront breakoff breakout bream/S breastbone breaststroke/R breathability breccia/S brecciate/N breechblock breechcloth breechclout breechloader breeks breezeless breezeway bregma bregmatic Bremen/M Brendan/M Brennan/M Brenner/M Brent Brest/M Breton Brett/M breviary/S brewage Brewster/M briard bribable bricating Brice brickbat brickle bricktop brickwork bridewell bridgeboard bridgeless Bridget/M Brie briefless brien briery brigadoon brigand/MS brigandage brigandine brigandism Briggs/M Brighton/M brightwork brill brilliantine Brillouin brimless brimmer brinded Brindisi bringdown brinkley brinksmanship brio brioche briolette briquet briquette brisance brisant brisket brisling brist bristlecone/MS bristlelike bristletail brit broadax broadcloth broadleaf broadminded broadsheet broadsword broadtail broadwife brocatelle brochette brockage brocket brockle brocoli Broglie/M brogue broider broidery brokenhearted brolly/S bromate/DG bromegrass bromeliad bromelin Bromfield/M bromic bromidic brominate/N bromism Bromley/M bromo/S bronchialy broncobuster brontosaur brontosaurus bronzy Brookline/M broomball/R broomcorn broome broomrape brougham/S broun brownnose/R brownout brownshirt brownstone/S browny browsability broxodent Bruckner/M Bruegel/M bruit Brumidi/M brunet Brunswick/M brushability brushback brushcut brushland brushstroke/MS brushup brushwood brusk brusquerie brut bruxelles bruxism bryophyta bryophyte bryozoa bs/A bubby buccal buccaneer/MS buccaneerish bucer Buchenwald/M buckbean buckeroo bucketsful buckhead Buckley/M buckman Bucknell/M bucko buckoes bucksaw buckshee bucktail buckthorn bucktooth bucky bucolically budder buddle budgeteer budgie budlong Buena Buenos bufferred buffi buffo/S buffoonery buffoonish bugatti bugbear bugeye buggery bughouse bugleweed bugloss bugseed builtin Bujumbura bulba bulbaceous bulbar bulbil bulbous/Y bulbul bulgur bulgy/P bulla bullace bullae bullbaiting bullbat bulldogger bullfight/GR bullhorn bullnecked bulloch bullock bullocky bullous bullpout bullring bullrush/MS bullterrier bullwhack bullwhip bullyrag bumbershoot bumboat bumbry bumkin bumpkin/MSY bumpkinish bumpy/PRY bunchy/Y bunco bund bundist bundoora bundy bung/R bunghole bunglesome bunko/S bunkum buntline buoyance burbank burbly burdock bureaucratically bureaux buret burette/S burgage burgee burglarious/Y burgonet burgoo/S burin Burke/S burking burladero burle burlingame Burlington/M burnable burne/S Burnham burnoose burnous burnout burrstone burry/R bursae bursal bursar bursary burse burseed bursty burthen Burtt/M burweed busby/S bushbuck/S bushelage bushelman bushfire bushland/M bushman businesswomen busk/R buskin busload/MS busty busybody busywork butadiene butanol buteo butterfingered butterfingers butterfish butterflyer butterless butterscotch butterweed butterwort buttinski buttinsky buttonball buttonbush buttonhook buttonless buttonwood buttony Buttrick buttstock butty/S butut butylate/N butylene butyraceous butyral butyraldehyde butyric Buxtehude/M Buxton bwana byelaw/S byinge bylot byname bypast byplay Byrd byre bystreet CA cabala cabalism cabalist cabalistic caballed caballero caballing cabbala cabby cabinetmaking cabinetwork cablegram/MS cablet cableway cabman caboodle caboose Cabot/M cabotage cabriole cabriolet cabstand cachalot cachectic cachepot cachet cachou cacodemon cacodemonic cacogenesis cacogenic/S cacographical cacography cacophonous/Y cacuminal cadastral/Y cadastre cadaveric cadaverine caddie caddis caddish/PY cade cadency cadential cadetship caducean caduceus caducity caducous Cady Caesarian/M caffeinic caftan cageling cagy/PRY cahier Cahill caiman caisson caitiff cajolement cajolery Cajun/MS cakewalk/R calabash calaboose Calais calamine calamint calamite calamus calash calcaneal calcaneum calcaneus calcic calcific calcifuge calcifugous calcimine calcination calcine/DG calcinosis calcitic calcomp calculably/I calculatingly/U calculous caldera caldron Caldwell/M Caleb/M caleche calender/R calendric calendrical calends calendula calenture calflike Calhoun/M calif caliginous caliphal calk/R Calkins calla Callaghan/M Callahan/M Callan/M callant callboy calligraphic calligraphically calligraphist callose callosity callus/S calmative calomel calorically calorific calorimetrically calory calotte calque caltech calthrop caltrop/S calumniator calumnious/Y Calvert/M Calvin/M calypsonian calyx camarilla cambial cambium Cambrian cambric Camden/M camelback cameleer camelia camellia camelopard Camembert cameralism cameralist Cameron/M Cameroon Cameroun/M Camilla camise camisole caml camlet camomile camorra camorrista camouflageable camouflagic Campagnolo/M campanile campanologist campanology campanula campanulate campcraft campership camphene camphine camphor camphoraceous camphorate/D camphoric campion campobello camporee campos campstool campy/PY camshaft/S Canaan/M canalboat canaliculate canard canasta cancan cancroid candela candelabra candelabrum candent candescence/I candescent candida candidature candleholder candlepin/S candlepower/S candlesnuffer candlewick canebrake canescent caneware Canfield/M canful canicular cankerous cankerworm canna cannel cannibalic cannonade cannoneer cannonry canoeing canoeist/MS canoness canonicity Canopus canorous/PY canst cantabile Cantabrigian cantata/S canterelle canthi canthus cantillate/N cantina cantle/S cantonal cantonment cantus canty canute canvaslike capelet capella capeskin capet capework capful capias capillarity capitalistically capitan capitate/NS Capitoline capitular capitulary capitulum capo capon caporal capper/S cappy capriccio caprification caprine capriole capsular capsulate/D capt captainship captan captionless captivator capuchin Caputo capybara carabao carabid carabineer carabiner carabinero carabinier carabiniere caracole carafe carapace/MS carat caravanner caravansary caravel carbarn carbaryl carbazole carbolated carboline Carboloy Carbone carboniferous carbonium carbonless carbonous carbonylic carboxy carboxyl carboxylate/N carboxylic carbuncular carburet carburetion carburetor/S carcase carcinogenesis carcinogenicity carcinoid cardamom cardialgia Cardiff/M cardigan/MS cardinalship cardiogram/MS cardiograph/RS cardiographic cardiography cardioid/MS cardiological cardiologist cardiopathy cardiopulmonary cardiorespiratory cardiotonic cardiovasculatory cardplayer cardsharp/R careerist/S carefuller carefullest Carey/M carfare carful Cargill/M carhop Carib caribe caricatural carioca cariole carious carle/G Carlin/M Carlisle/M Carlo carmaker Carmela Carmen/M carnallite carne carnelian carney carnivore caroche Carolingian carom carotene carousal carpal Carpathia Carpathians carpellary carpetbag/MS carpetbagged carpetbagger/MS carpetbaggery carpetbagging carpi carpospore carposporic carpus Carr/M Carrara carrefour carriageway/S carriole Carroll/M carronade carroty carrousel Carruthers carryall carryout carsick cartage cartilaginous cartload/S cartogram/MS cartographical cartomancy cartop carty caruncular carunculate/D casa casaba/MS Casanova/M cascara caseate/N casebearer casemate caseous casern caserne cashable cashbook cashless casque cassaba cassava cassino cassite castaway casteism castigator/S Castillo/M castoff/S castrato castrator/S castratory Castroism casuistic casuistical casuistry catabolic catabolically catabolism catabolite catachresis catachresti catachrestic catachrestical cataclysm cataclysmal catacomb catacombic catadioptric catadromous catafalque catalatic catalectic catalepsy cataleptic cataleptically Catalonia catalpa catamaran catamount cataplasm cataplastic cataplexy cataractal catarrh catarrhal/Y catastasis catawba catboat catchall catchee catchment catchpenny catchpole catchpoll catchup cate/NSX catechesis catechetical catechin catechismal catechist catechistic catena catenary catenulate cateran catercorner cateress caterwaul catface/G catgut catharses cathartic cathead cathect cathectic cathedra Catherwood/M catheti/MS cathexes cathexis cathodically catholically catholicate catholicity cathouse cationic cationically catkin catnap/S catoptric/S catoptrically catted catting caudal/Y caudate/DN caudillo caudle caul cauldron/S caulescent caulicle/S cauline causeless causerie causey/S caustically causticity cautery cavalierism cavalryman cavernicolous caviare cavies Caviness cavitary cavitate/N cay Cayley/M cayman Cayuga/M CBS cc CDR ceasefire/M Cecropia cedarn cedarwood Cedric ceil ceilometer/MS ceinture celandine Celebes celebrator/S celeriac Celia/M celiac celibacy cellarage/S cellaret/S cellarette/S cellularity cellule celluloid/M cellulosic Celt cementation cementite cementitious cenobite cenobitic cenobitical cenogenetic cenogenetically cenospecies cenotaph cense/GR censorious/PY censurable cental centare centaurea centaury centavo centenarian centesimal centesimo centiare centigram/MS centillion centime centimo centner cento centones centra centrale centralism centralist/S centralistic Centrex centric centrically centricity centriole centrism centroidal centromere centromeric centrosome centrosomic centrosphere centrosymmetric centrum centum centurion cephalad cephalic cephalically cephalometric cephalometry Cepheus cepstrum ceraceous ceramicist ceramist ceramium cere/GS cerebellar cerebroside/S cerebrovascular cerebrum cerement ceremonialism ceremonialist/S cereus CERN cernuous certes certifiably certificatory cerumen ceruminous ceruse cervices cervine cervix/S Cesare/M cesarean cesarian cesspit cesspool cesta cesti cetacean/MS cf Chadwick/M chaffey chaffy chainomatic chalcedonic chalcedony chalcid chalcocite chaldron chalet chalkboard chalone chambray/S chameleon/S chameleonic chamfron/S chammy chamoix chamomile champak champertous champerty champlainian chanceful chancel/S chancellery chancellorship/S chancellory chancre/S chancroid chancroidal chancrous chandelle Chandigarh chandler chandlery changeful/PY changeless/PY changeling channing chanson chanteuse/S chanty/RS Chao/M chaotically chapati chapbook chape chapeau/S chapeaux chapelles chaperonage chapfallen chapiter chaplaincy/S chaplet/DS chaplinesque charabanc characin characterful characterless characterological/Y charactery charade/S charcuterie chard chare charioteer/S charism/S charismata charlatanism charlatanry Charlemagne/MS charmless charnel charnock Charon/M charring Charta Chartres chartulary/S charwoman chary/PRY chassepot chasseur chasten/DGR chateaubriand chatelain/S chatelaine/S Chatham/M chatoyance chatoyancy chatoyant Chatsworth/M chattahoochee chatterbox/S chauffers Chauncey/M chaussure/S chauvinistically cheapie cheapish/Y cheapskate/S checkerberry checkless checkmark/S checkmate/DGS checkoff checkrein checkroom/S checkrow cheddar cheekful cheep/S cheerio cheesecake/MS cheesemaker/S cheesemaking cheeseparer cheeseparing/S chefdom chekhov chelatable chelonian Chelsea/M chemiluminescence chemiluminescent chemische chemism chemisorb chemisorption chemoautotrophic chemoautotrophically chemoautotrophy chemoprophylaxis chemoreception chemoreceptive chemoreceptivity chemoreceptor/S cheng chenille Cherie/M cherishable cheroot cherrylike cherrystone chert cherubic cherubically cherublike chervil/S chessboard/S chessman chessmen chestful chesty/R cheveron cheviot chevrotain chewable chewy chi Chiang/M chiaroscurist chiaroscuro chiasma chiasmatic chiasmus chiaus chicalote chicaning chichi chickasaws chickenhearted chickpea/MS chickweed/S chicle chicos chidden chieftaincy/S chieftainship chiffonier chignon childbed chilies chimaera chimere chimerical/Y chimerism Chimique chimneypiece Chinatown/M chinaware chinbone chinch chine/S chinoiserie chinos chinquapin chintzy/R chirographer chirographic chirographical chirography chiromancer chiromancy chiropodist/S chiropody chiropractic chiropter chiropteran chirpy/Y chirrup/DGS chit/S chitchat chitin chitinous chitlings chiton chitterlings chivalric chivvy/DG chivy/D Chloe chloral chlordane chloric chlorinity chlorite chloritic chlorobenzene chlorohydrin chlorophyllose chlorophyllous chloroplatinate chockablock chocolaty choky choler choleraic choleric choline cholinergic chondrite choosey chopfallen chophouse choreman choreographically choric chorically chorine chorizo chorographic chorography choryza Chou/M chowderhead/D chowhound chowtime chrestomathy Christensen/M Christiana/M Christianson/M Christina/M Christmastime Christoffel Christoph/M christsake chromatically chromaticism chromaticity chromatid chromatin chromatographically chromatolytic chromide chrominance chromo chromosomal chromosome/MS chromosomic chromospheric chronical chronicity chronogram/MS chronogrammatic chronogrammatical chronographic chronologer/S chronologic chronologist/S chronometer/MS chronometric chronometrical/Y chronometry chronoscope/S chrysolite chuckhole chucklehead/DS chucklesome chuckwalla chuff/DG chuffy/R chugalug chugger chumship Chungking Chunnel/M churchgoer churchianity churchless churchmanship churchy churlish/PY chutist/S chutzpa chutzpah cigarillo/S ciliary cincture cindery Cindy/M cinemagoer/S cinematically cinematograph/RS cinematographic cinematographical/Y cinematography cinquefoil ciphertext ciphony circadian circinate/Y circuital circuity circulatable circulator/S circumambient/Y circumambulate/S circumcircle circumfluent circumfluous circumfuse/DGNSX circumjacent circumlocutory circumlunar circumnavigator/S circumscissile circumscription circumstantiality circumstantiate/DGS circumvallate/DGNSX circumvolution/S circusy cirque/S cirrhoses cirrhosis cirrhotic cirrous cirrus cislunar cist cit citable citational citify/D citizeness citral citronella civically civie/S civilists civvy clabber clack/RSZ cladophora clamant/Y clambake/S clamorist/MS clampdown clangorous/Y clansman clansmen Clapeyron clapper/S claptrap claque/S Clarendon/M clarinettist clarridge classicalism classicalist classicality classicism classicistic clausal Clausius claustral clavichord clavichordist clavicular clavier clavierist clavieristic claybank clayey clayish Clayton/M clayware cleanable cleanhanded clearable clef/MS clemens clemente clepe/DGS clericalism clericalist clerkship cleverish clevis clientage cliental cliffy Clifton/M climacteric climactically climatologist/S climbable/U cline/S clingy clinometric clinometry clipsheet cliquey cliquish/PY clitoral clitoric clitoris cloaca cloacal cloche clocklike cloddy clodhopping cloistral cloistress clonal/Y clonic clonicity clonk/DGS clop/S clopped clopping closable/A closeable closefisted closemouthed closeout closetful clotheshorse clothespin clothespress Clotho cloudland cloudlet/S cloven cloverleaf cloverleaves clownery clownish/PY clubable clubbable clubber clubby/PR clubfoot/D clueing clumpy clunk/DGRS clustery clutchy Co coact/V coaction coadapted coadjutrices coadjutrix coadunate/DGNS coagulability coagulant/S coagulase coalify/N coalitionist coapt/DGS coaptation/M coarctate/N coarticulation coarticulatory coastguard coastguardman coastguardsman coastland coastward/S coastwise coatrack coatroom cob/MS cobaltic Cobb/M cobby cobelligerent cobia cobwebbed cobwebby coca cocainism cocci coccidiosis cochairman cochairmen cochise Cochran/M Cochrane/M cockade/D cockamamie cockatrice cockerel cockfight/GMS cockhorse cockney/S cockneyish cockneyism cockshy coco/S coconscious/P coconspirator/S cocurricular codable Coddington/M codeclination codefendant codeine codeless codeposit codetermination codex codger codices codicillary codifiability codling codomain codominant codon codpiece/S Cody/M coeducational/Y coenzyme coequality coercivity coeternal/Y coeternity coeval coevality coevolution cofeature coffeehouse Coffey/M coffle/S cofunction cogency cogged cogging cogitable/I cogito cognitional cognitivity cognomen cognoscenti cogwheel/S cohabitant/S coheir coheiress cohesionless coho cohomology cohosh coidentity coif coiffeur coiffeuse coiffing coign coilability coinsurance coinsure/R coition coitional col/Y colasanto coldblood coldhearted/PY coldish Cole/M coleslaw Colette/M coli colic colitis coll collaborationism collaborationist/S collage/S collagist/S collarless collaterality colleagueship colleaguesmanship collectable collectivism collectivist/S collectivistic collectivistically collectivity collectorate/S collectorship collegial/Y collegiality collegium collet colliery/S colligate/NV collimator Collins collisional/Y collocational collodion collogue/DG colloq colloquiality colloquist colloquoy colloquy collusive/Y colluvial colog cologarithm Colombo/M colonelcy colonialistic colonic colonoscope/MS colonoscopy/MS colophon colophony colorant/S colorate/DS colorimetric colorimetrically colossi colossus/S colostomy colostral colostrum coltsfoot columbine columniation columnistic colza com comae comaker combinability combinate/V combinatory comblike combust/GRV combustibility/I combustibly combustor/S comedie comedienne/S comedown cometic comfit/S comfortless comfy/R comicality Cominform comique comity commandable commandership commandery commemorator/S commendably commensal/Y commensalism commensurability/I commensurably/I commentate/S commercialist commercialistic commie commination comminatory comminute/DN commissar commissariat commissionaire commissionership commissural commissure commix commixture commode/S commonage commonalty commonsense commonsensible commonsensibly commonsensical commonweal commove/DGS communalism communalist/S communality/S communard/S communese communicability/I communicableness communicably/I communicatee communicatory communistically communitarian communitarianism commutator/S comoving compactible compactify Compagnie companionably companionate companionway/S comparatist comparativist compart compartmental compartmentation/S compassable compassionless compatability compatriotic compeer compellation compeller compend compendious/PY compensability compensational compensator/S compere/DG competitory complacence compleat complected complemental comples complexation complexional complexometric complexometry compliancy complicacy complice compline complot compo/S componential componentry compoundable comprehendible comprehensibly compressional comprisable comprisal/S Compton/M comptrollership compunctious compurgation/S compurgator computerite computerlike computernik comradery comsat comsummatively Conakry Conant/M concavity concealable conceivability/I conceivableness concentrically concentricity conceptacle conceptional conceptualism conceptualist conceptualistic conceptualistically conceptus concernment concertante concerti concertmeister concessional concessionary concessive/Y conciliar/Y concinnity/I concoction concomitance concordat concorde concrescence/S concrescent concretionary concretism concretist concretistic concubinage concupiscence concupiscent concupiscible concuss/DGSV concussive/Y condemnable condemnor condensable condensational condescendence condign/Y condimental conditionable conditionality condolatory condole/DG condom condominial condonable condonation conductibility conductible conductimetric conductometric conductorial conductress conduplicate/N confab confabbed confabbing confabulator confabulatory confection/RSZ confectionary confederal confederalist/S conferential conferment/S conferral/S confessable confessionalism confessionalist confetti confidante/S configural configurate/DGSV configurational/Y confirmability confirmable confirmational confiscable confiscatable confiscator/S conflagrant conflagrate/DS conflagrator/S conflagratory conflate/DGNSX conflatrate/G conflictful confliction/S conflictless conflictual confluence/S conflux/S confocal conformable/U conformably/U conformism confraternity/S confrere/S confrontal confrontationism confrontationist confusional confutation/S confutative confutator/S cong/R conga congealment congelation/S congener congeries conglomeratic conglomerator conglutinate/DGNS Congolese congratulator congregant congregational congregator congretants congruency conicity conjugacy conjugality conjugant/S conjugational/Y conjunctional/Y conjunctiva conjunctival conjunctivitis conjuration/S conjuror Conklin/M Conley/M Connally/M connate/Y connatural/Y connaturality connectable connectible connectional connelly conniption connivent connivery connoisseurship Connors connotational connubialism connubiality conscienceless conscribe/DGS consecrator consecratory consecution consentaneous/Y conservancy conservational conservatorial consignable consignation consignee consignment consignor consistorial consistory consociate/N consociational consol/S consolatory consolette consolidator/S consonancy conspecific conspectus/S conspicuity conspiration/S conspirational constabulary Constantine/M constellate constellatory constipate/DGNS constitutionalism constitutionalist constitutionless constringe/DGS constringent construable construal constructionist/A constructivism constructivist consubstantial consubstantiate/N consuetude consuetudinary consulship consultancy/S consultantship consultor consumerism consumerist consumership consummator consummatory contagium containerboard contaminator contemplator contemporaneity contemptibly contendere conterminous/Y contestation contexture contingence continua continuate/DGSV continuative/Y continuator continuo contortionist/S contortionistic contrabandist contrabassist contractibility contractible contractile contractility contractional contracture contradictable contradictious contradictor contradistinct/V contradistinctive/Y contradistinguish contralateral contralto contraoctave contraposition contrapuntal/Y contrapuntist contrariety/S contrarious contrariwise contrastable contrasty contravariant contretemps controllership/S controlment/S controversialism controversialist controvert/DGRS contumacious/Y contumelious/Y contuse/DGS conurbation/S Convair/M convect/DGSV convectional convector/S conveniency/I conventicle/R conventionalism conventionalist conventioneer conventual/Y convergency conversable conversance conversancy conversional convertibly/I convertiplane convertor conviviality convocate convocational convolutional convulsant convulsionary Conway/M cony cooch Cooke/M cookout/S cookshack cookshop cookware Cooley/M coolish coomb/S coonskin cooperage cooperationist coot cootie copacetic coparcenary coparcener copartner copartnership copeck copemate Copernican copesetic copesmate copestone copilot coplanarity copliots copperas copperplate coppice copping copra coprinus coprocessor/MS coproduct/MS coprolite coprolitic copula/S copulate/DGNSV copulative/Y copulatory copyboy copycat/S copycatted copycatting copydesk copyhold/R copyreader coquet coquetry coquettish/PY coquina coralberry coralline corbel Corbett/M Corcoran/M cordate/Y cordiality cordiform cordwain/R cordwainery cordwood corecipient corelate/N coreligionist corequisite corespondent Corey/M Corinth Coriolanus corkboard/S corky/R cornball corncob corncrib corneal Cornelia/M Cornelian Cornelius corneous cornerman cornerways cornerwise cornetist cornettist cornhusking cornice/DGS corniche cornification cornstalk cornucopian cornwallis corolla corollate Coronado coronagraph coronograph corpocracy/S corpora corporality corporatism corporatist corporativism corporator/I corporeity/I corporis corposant corpulency/S corpuscle/MS corpusculated corpuscule/S corrade/DG corrasion/S corrasive correctional correctitude correlatable correlational correspondency corresponsive corrigenda corrigibility/I corrigibly/I corroborant corroborator/S corroboratory corroboree corruptibility corruptibly/I corruptionist corsair corse cortege/S Cortez corticate/D cortices corticoid corvallis Corvus Corydoras cos cosec coset Cosgrove/M cosh/R cosigner cosmetician/S cosmetologist/S cosmetology cosmo cosmochemical cosmochemistry cosmogenic cosmogonic cosmogonical cosmogonist cosmogony cosmographer cosmographic cosmographical/Y cosmography cosmologic cosmonaut cosmopolite cosmopolitism cosponsorship cosset/DGS costa costal costless/Y costmary costumery costumey costumier cote coterie/S cotillon cotman cotoneaster cotta cottagey cottontail/MS Cottrell/M cotty couldst Coulter/M councillorship councilmanic countability countdown/MS counteraction counterblow counterchallenge counterchange countercheck countercurrent/Y counterespionage counterfoil counterintelligence counterirritant countermarch countermove countermovement counteroffensive counteroffer counterpane counterplan counterplea counterplot counterpose/DGS counterpunch/R counterreformation counterrevolutionary/MS counterrevolutionist countershaft/S countersign countersignature counterspy counterstatement countertenor/S counterterrorism counterterrorist counterthreat/MS countertrend counterview countryfied countryish countryseat countrywoman countywide coupal couplement courtmartial Courtney/M couscous cousinage cousinhood cousinship couth couture couturier couturiere covalence covalency covenantal covenantee covenantor covent coventry coverless coverture/S covetable covey/S cowage Cowan/M cowbane cowcatcher cowman cowmen cowpea cowry cox coypu cpr crabber crabby/R crabwise crackajack crackdown crackerjack craftsmanlike craftsperson craftswoman craftswomen cragged cragsman crammer crampon/MS craneman cranemen cranial/Y craniate crape crapper crapping crappy crapshooter crapulous crashworthy/P crassitude craterlet crayonist creaseless creatural creaturehood creche/S creditability cree creepage creese creighton crematorium crenate/DNY crenellate/DNS crenelle/DG crenulate/DN creosol creosote crepey crepitant crepitate/N crepuscle crepuscular crepuscule crepy crescentic crescive/Y cresol cresset crestal crestless cretinism cretonne crevasse crewelwork crewless crewmember/S cribbage/M cribber cribriform crick crimeware/MS criminate/GN criminological/Y criminologist criminology criminous crimpy/R crinoid crinoline Crispin/M crispy/PR criticaster croaky Croatia croatian crocket/D crocodilian croissant/S cronyism crookback/D cropland/MS croquet croquette crore crossability crossbearer crossbill crossbones crossbow crossbowman crossbred/I crossbreed crosscurrent/S crosscut crosslet crosslink/MS crosspatch crosspiece crosstown crosstree crosswind crotchet/DGS croton croup croupous croupy crouse crouton crowberry crowfeet crowkeeper crownet Croydon/M cruciate/Y crucifer cruciferous cruciform/Y crudded crudding crueller cruellest cruet Cruickshank/M cruller crumby/R crumpet crupper crustacea crustaceous crustal crustification crustose crusty/PRY Cruz crybaby crymotherapy cryobiological/Y cryobiologist/S cryobiology cryogen cryogenically cryogeny cryolite cryonic/S cryophilic cryoscope cryoscopic cryoscopy cryosurgery cryotherapy cryotron cryptal cryptical/Y crypto/S cryptogenic cryptogrammic cryptograph cryst crystallographical/Y CSNET CT cubage cubature cubby/S cubical/Y cubicle cubiform cubistic cubit cuboid cuboidal cuckold cuckoldry cucullate/DS cucurbit cuddleback cuddlesome cuddy cueing cuffless cuke culation Culbertson/M cullender culminant culotte/S culpably cultch cultic cultigen cultism cultivability cultivar/S cultivatable cumbrous/PY Cummings Cummins cumulous cunctation cunctative cuneate/Y cuneiform cunner cunnilinctus cunnilingus CUNY cupbearer cupcake cuplike cupola cuppy/R cupreous cupriferous cuprite cupsful cupular cupulate cupule curability/I curatorial curatorship curbstone cureless curet curettage curette/DG curettement curite curium curlew curmudgeon/Y Curran/M curricle currie curriery currish/Y cursorial curst curtailment curtal curtesy curtilage Curtis curule curvacious curveball CURVET curvilineal Cushing/M cushionless cushiony cuspate/D cuspid cuspidate/DN cuspidor cussword/S Custer/M custodianship/S customshouse cutability cutaround cutaway cutch cutesy cutey/S cuticle/S cuticular cutie cutler cutlery cutline cutover cutpurse cutset cuttable cutup/S cutwater cutwork Cuvier Cuzco cybernated cybernation cybernetical/Y cybernetician cyberneticist cyborg cycad Cyclades cyclamate cyclitol cyclo/S cycloaddition cyclometer/MS cyclonic cyclonically cyclorama cyclotomic cyclotron cygnet/MS cymbalist/S cynosure cypher/S Cyrillic cystamine cysteine cystic cytaster cytokinin cytologic cytological/Y cytologist cytolysin cytolytic cytopathogenicity cytophilic cytoplasmic cytoplasmically cytosine cytostatic cytostatically cytotoxicity cytotoxin cytotropic CZ Czerniak/M dabber/S Dacca/M dachshunde dactylus Dada Dadaistic daedal daff daft/PRTY daggerman daguerreotype/MS daguerreotypic daguerreotypy Dahl/M dahlia/S Dahomey/M Dailey/M daimon/S daimones daimonic daiquiri/S Dairylea dairymaid daishiki Daley/M Dalhousie dali dalliance dalloway dallyes dalmatian/S dalmatic Dalzell/M damnable/P damnably damnatory damndest damnify Damocles Damon/M dampish damselfly/S Dana/M danceability danceable dander dandiacal/Y dandify/N dandle/DG dandruff dandruffy dandyish/Y dandyism dandys danseur Danubian daphnia daredevil/S daredevilry daredeviltry dareful daresay Darius darkish darkle darkroom/S darksome darlington darrow darry Darwinistic datable Datamation datamedia dataswitch/S datcap dateable dateless datetime datura Daugherty/M daughterless dauphin dauphine Davison/M davit daybook daydreamlike daylong daymare dayroom/S daystar Daytona/M db DC de/N deacidify/N deactivator deadbeat deadeye deadfall deadlight deadpan deadpanner deaerate/NS dealate/DNS dealership deaminate/N Deane/M deanery Deanna/M deanship deathblow deathless/PY deathsman deathwatch debark/S debarkation debarment debasement debatement debator/S debauchee debone/GRS debouch debouchment debouchure debtless debutant decadency decagon/U decagram/MS decahedron decalcify/N decalcomania decalescence decalogue/S decametric decamp/S decampment decanol decantation decapitate/GNS decapitator decapod/MS decarbonate/DGNS decarbonator decasyllabic decasyllable Decatur/M deceivable/P decelerator decennium deceptional decerebrate/DGNS deciare decidua decidual deciduate decigram/MS decillion/U decipherable decipherment decistere deckhand deckhouse deckle declarable declarant declass declasse declensional/Y declinable/I declinate declinational declivitous decoct/DGS decoction/S decollate/DGNSX decolonise decolorant/S decolorate/DS decompensate/N decompensatory deconcentrate deconcentrator decondition decongest/V decongestant decongestion deconsecrate/N decontaminate/GNSX deconvolution deconvolve decorticator/S decoupage/S decremental decrepid decrepit/Y decrepitate/N decrepitude decrescendo decrescent decretal/S decretive decretory decrial/S decryptograph decsystem dectape decumbent decuple decurved decussate/NY decwriter dedicator dedicatory dedifferentiate/DN Dee/M deedless deejay defalcate/N defalcator defamation defamatory defat defeasance defeasibility/I defeasible/I defeature/DGS defector/MS defendable defensibility/I defensibly/I deferential/Y deferral defervescence/S defervescent defial defibrillation defibrillator defilement definably/I definement definitude deflagrate/DGNS deflationary deflator deflexed defloration/S deflower defoamer/S defoe defoliant defoliate/DGNS defoliator deforce deforcement deforciant deformative defraudation defrayable defrayal/S defrock defuse/DG defyed defys degas degassing degauss/DGS degeneracy degranulation degressive/Y dehydrase dehydrator Deimos Deirdre/MS deism deist deistic deistical/Y dejeuner/S DeKastere Del delaminate/N Delaney/M Delano/M delate/DGNS delator delectability delectably delectate delegacy delft Delia/M delict delightsome/Y delimitate/V delineament/S delineator deliquesce deliquescent delist deliverability Della/M dellwood Delmarva Delphically delphine delphinium Delphinus deltaic delusional delusionary delusory demagogic demagogical/Y demagogism demagoguery demagogy demandable demandant demantoid demark demarkation dementia demential Demeter demi demigoddess demijohn demission demitasse demiurge democratique demographiques demolishment demolitionist demoniacal/Y demonian demonical/Y demonology demonstrability demonstrational demonstrationist demotic demount/DGS demulcent demure/PY demurrage demurral demystify/DGS denaturant denaturation denaturational denazify/N dendriform dendrite/MS dendritic dendroid dendrologic dendrological dendrologist dendrology Deneb/M Denebola deneen denegation denervate/DGNS denigrator denigratory denitrify/N denominational denominationalism denominationalist denotement denouncement densify/N densimeter/MS densimetric dentate/DNY denticle denticulate/DNY dentiform dentifrice dentigerous dentil dentin dentinal dentine dentition Denton/M dentulous denudation denudational denudement denumerably denunciatory denys deontological deontologist deontology deoxidation deoxycholate deoxygenation deoxyribose Dependance depigmentation depilate/DGNS depilatory deplane/DGS depletable depone/DGS deponent depopulate/N depopulator deportable depositional depravation/S depravement depreciator/S depreciatory depredate/DGNS depredator/S depredatory depressily depressor depthless derailment derate/GN Derek/M derisory derivational derma dermal dermatoid dermatologic dermatological dermatologist dermatology dermatosis derrickman derrickmen desalination desalting descendible descension descrating desecrator desertic desex deshabille desiccant desiccate/DNSV desiccator desiderate/NV designatory designee designment desistance deskman desolator desorb/D desorbable despisement despiteful/PY despiteous/Y despoilment despondence/S despotically destructibility/I destructible destructionist destructivity detab detachability detachably detainee detainment detectability/U detectaphone detent determent/S determinably/I determinantal determinator determinist/I deterrer detestably dethrone dethronement detinue detonability/S detonatable detonational detoxicant/S detoxicate/DGNS detoxicator detoxify/DGNS detraction/S detrain/DGS detrainment detritus Detroit detumescence/S detumescent deuterate/DGNSX deuteron/M devaluate/X devastator/S developable deverbative devest deviancy/S deviationism deviationist deviator/S devilkin devilment/S devilry deviltry devisability devisable devisal devisee devisor devitrify/N devoir/S devolution devolutionary devolutionist devotement dewater/DGRS deworm dexedrine dexterous/PY dextral/Y dextrality dextrine dextro dextrose/M dey DFL Dhabi dharma DHCP diabolism diabolist diachronically diachrony diaconal diaconate diacritic/MS diadromous diagnoseable diagnostical/Y diagrammatical diakinesis diakinetic dialectician/S dialectological/Y dialectologist dialectology dialogic dialogical/Y dialogist dialogistic dialup/MS dialytic diamagnet/S diamagnetism diametral diametrical dianne diapason diapause/G diaphaneity diaphone diaphragmatic diaphragmatically diaphragmic diapositive diarchy diarist diaspora diaspore diastole diastolic diastrophic diastrophically diastrophism diathermic diathetic diation diatomaceous diatomite diatonically diatropic diatropism/S dibble dibs dicarboxylic dicey dichondra dichotic dichotically dichotomist dichroic dichroism dichroitic dichromat/S dichromate dichromatic dichromatism dicier dickcissel Dickerson/M dicta dictionally dicyclic didact didactical/Y didacticism Dido/M Diebold/M dieing diel dieldrin dieresis dietetically diety Dietz dieu dieux diffeomorphic diffeomorphism differentia diffusional difluoride digamma digenesis digenetic digestibility/I digitalin digitate/DNY digitigrade digitonin digressional digressionary dihybrid dihydroxy dijon dilapidator dilatability dilatable dilatational dilatometer/MS dilatometric dilatometry dildo/S dilemmatic dilemmatical dilettanti dilettantish dilettantism dilettantist dillydally diluent dilutor diluvial dimaggio dimeric dimerism dimerous dimeter/MS dimethoxymethane diminishable diminishment diminuendo/MS diminutional dimmable dimorphic dimorphism dimorphous dimout dimply dimwit/S dimyristoyl dingbat/S dingdong dingle dinkey dinnerless dinning dinosaurian dinosauric Diocletian diogenes dioptometer/MS dioptometry dioptric/S dioramic diorite diphase diphasic diphenyl diphtherial diphtherian diphtheritic diphtheroid diphthongal diplex diploid/MS diploidy diplomate diplomatically/U diplomatist dipod dipolar dipperful dipropellant dipsomania dipsomaniac dipsomaniacal dipstick diptych directionless directorial Dirichlet dirigible/S disaccharide/S disaccord disaccustom disadvantageous/PY disaffect disaffirm disaffirmance disaffirmation disagreeability disagreeably disallowance disannul disapprovative disarrange/S disarrangement disarticulate/N disassociate/DGNS disavowable disbandment disbarment disburden disburdenment discardable discernable dischargeable dischargee disciform disciplinable/I disciplinal disciplinarian disciplinarity disclamation discographer discographic discographical/Y discography discoid discoidal discoidin discombobulate discomfiture/S discomfortable discomfortably discommend discommendable discommendation discommode/GS discompose/D discomposed/Y discomposure disconfirm disconfirmation disconform disconformable disconformity disconsolate/NPY discontentment discophile discordance/S discordancy discountenance discourageable discourtesy discoverable discreditable discreditably discriminability discriminably discriminational discriminator/S discussable discussible/I disembark disembarkation disembarrass disembodiment disembody disembowelment disenchant/GR disenchanting/Y disencumber disencumbrance disendow/R disendowment disentanglement disenthralled disenthralling disequilibrate/N disestablish/D disestablishment disestablishmentarian disesteem disestimation disfeature disfeaturement disfigurement/S disfranchise/DGS disfranchisement disfrock disfunction disfurnish disfurnishment disgorgement disgruntlement disguisement dishabille disharmonic disharmonious dishcloth disheartenment/S dishrack/S dishy disincentive disincline/DGS disinfection disinfest/DGS disinfestant disinfestation disinflation disinflationary disinhibition disinhibitory disintegrator/S disinter/DGS disintermediate/DGNS disinterment disintoxication disinvest disinvestment disjuncture disklike dislicense/DGRS dislikable dislikably dislikeable dislimn dismantlement dismast dismember/G dismission disoblige/R disoblingingly disorient disorientate/DGNS disownment dispart dispassion dispensability dispensable dispensational dispensatory dispeople dispersant dispirit/DGS dispirited/PY dispiteous displaceable displant displode/DGS displosion disport disportment disporves disposability dispositive dispossess/GS dispossessor disposure/S dispraise/R dispraisingly dispread disprize disproof disprovable disputation disputatious/PY disquantity disraeli disrate disregardful disrelate/DN disrelish disremember disremembrance disreputability disreputably disrespectability disrespectable disrespectful/PY dissatisfactory dissatisfy/GS dissector disseise/DGS disseisin/S disseisor/S disseize/DGS disseizin/S disseizor/S disseminator/S dissentient dissention dissert dissertate dissertator disserve dissever disseverance disseverment dissidence dissimilate/DGNSV dissimilatory dissimilitude dissimulate dissimulator dissociability dissocial dissociant dissolubility/I dissoluble dissolute/PY dissolvable dissolvent dissuasion dissuasive/PY dissyllable dissymmetric dissymmetry distemperate distemperature distensibility distensible distent distention distinguishability/I distinguishably/I distortional distractibility distractible distrain/R distrainable distrainor distraint distrait distressful/PY distributary distributee distrustful/PY disubstituted disunionist disunite disutility disvalue disyllabic dithery divagate/N divaricate/N divergency/S diversionist divertissement/S divestment dividable divinatory divisibility divisionism divisionist divorcement divot divulgence divulsion divvy dixiecrats Dixon/M Dnieper/M dobbin Dobbs doberman dobson doc docent docetic docility/I dockage dockhand dockworker doctorless doctorship doctrinairism documental documentale documentalist documentarian documentarist documentational DOD Dodd/M dodder/DGRS doddery dodecyl dodgery dodgy dodington dodo/MS Dodson/M dogbane dogberry dogcart dogcatcher doge dogface dogfight/S dogfish doggerel doggery doggie/RS doggish/PY doggy/RS doglike dogmatical/P dogmatist/MS dogwatch Doherty/M doily/S doit/D Dolan/M dolce dolesome dollhouse dollish/PY dollop/DGMS dolorous/PY Domenico/M domical domicil domiciliary domiciliate/N dominical Dominick/M Dominique/M dona donator Doneck/M donee doneness dong donner donut doodad doodlebug doohickey Dooley/M doomful/Y doomsayer doomster doorjamb doorless doormat doornail doorplate doorpost doorsill doorstop dooryard dopester dopey doppelganger dopy/PR Dorcas Doreen/M Doria/M Doric/M dormancy dormice dormie dormouse/M dormy Dorothea/M Dorset/M Dortmund/M dosimetric doss/R dossal dotal dotter dotterel dotty/PRY doublethink doubletree douce Douceur/M douche doughboy doughface doughlike doughnuttery doughty/PRY doughy/R dovecot dovecote dovekie dovish/P dowdyish dowitcher Dowling/M downcourt downhaul downhearted/PY downrange downriver downshift downstage downstate/R downstroke downswing downtime dozy/PR drabber drabbest drabbing drabble/DG Draco/M draftable draggle/DG draggy/R dragline dragonet dragonish dragster drainpipe/S Drakopoulos dramalogue dramamine dramaturge dramaturgic dramaturgical/Y dramshop drapability drapable drapeability drapeable drat dratted dratting Dravidian drawable drawbar drawdown drawee drawerful drawknife drawnwork drawplate drawstring/MS drawtube dray drayage drayman/M draymen/M dreamful/PY dreamland dreamworld drear dreck dressage dressmake driblet driftage driftweed drifty/R drillability drillable drillmaster drinkability dripless dripper Driscoll/M drivable driveable drivel driveline driverless drollery/S drolly dropkick/R droplight droppage dropperful dropshot dropsy drossy droughty/P drouth drownd/DG drubber drugget drugmaker druidess druidic druidical druidism drumbeat/GR drumfire drumlike drumlin Drummond/M drumroll drunkometer/MS drupe dryable dryad dryasdust drylot drypoint drys drysalter drysaltery du dualist dualistic dualistically dubber dubbing Dubhe/M dubiety dubiosity dubitable dubitation dubuque ducal/Y Duchamp/M duckbill/D duckboard duckfooted duckpin duckweed/MS ducky/R duclos ductility ductless ductule dudgeon dudish/Y Dudley/M duende duenna duennaship duetted duetting duffle Dugan/M dugong DUI dulcimer dulcimore dulgence dulles dullish/Y dullsville dulness dulse Duma/M dumbstruck dumbwaiter/S dumdum dumka dumpish dumpling/MS dumpo Dunbar/M Dundee/M dunderhead/D Dunedin/M duneland dunelike dungaree dunghill dungy dunkel Dunlop/M Dunn/M dunne duo/S duodecimal duodecimo duodenal duodenum duologue duomo/S duopolistic dupery duple duplicitous/Y dupont/S Duquesne durance Durango/M Durer durian Durkin/M durometer/MS duros Durrell/M Durward/M Dusenbury/M dustcover dustheap dustin dustless dustlike dustman dustpan/S dustup dutchess duteous Dutton/M duverger dwarfishly dwarfishness dwarfism dwarflike Dwyer/M dyadically dyarchy dyeability dyeable dyerear dyestuff dyewood dynamist dynamistic dynamitic dynamometer/MS dynamometric dynamometry dynamotor dynapolis dynast/S dynastically dynatron dyne dynode/S dysenteric dysfunction dysgenesis dysgenic/S dyslexic dyslogistic dyslogistically dyspepsia dyspeptically dysphagia dysphagic dysphasia dysphasic dysphonia dysphonic dysphoria dysphoric dysplasia dysplastic dystrophic Eagan/M eaglet eagre earache eardrop/S earflap earful earldom earlobe earlock earmuff/S earp earpiece earplug earthborn earthbound earthlike earthling Earthman/M Earthmen/M earthshaker earthshaking/Y earthshine earthstar earthward/S earthwork/S earwax earwig earwigged earwigging earwitness easeful/Y easthampton eastwick easure eatery Eaton/M Eben/M Ebenezer/M ebulliency ebullition eccentrically Eccles ecclesial ecclesiasticism ecclesiological ecclesiology ecdysiast ecdysis ecesis ECG ech echidna echinulate/N echoey echoic echolocation eclat eclogue eclosion ecol Ecole ecologic ecologist econometrically econometrician econometrist ecophysiological ecophysiology ecospecies ecospecific ecosphere ecotone ecotype ecotypic ecotypically ecru ecstatically ectoblast ectoblastic ectoderm ectodermal ectodermic ectogenic ectogenous ectomere ectomeric ectomorph ectomorphic ectoparasite ectoparasitic ectopic ectoplasm ectoplasmic ectotherm ectothermic ectotrophic ectotropic ecumenicalism ecumenicism ecumenicity ecumenism eczema eczematous edacious edacity edaphic edaphically edentate edentulous edgeless edgewater edgeways edgewood edibility edictal edificatory editable editress Edmonds Edmondson/M Edmonton/M EDT eduard Eduardo/M educability/I educable/I educationalist/S educationist educible eduction eductor/S edulcorate edwardine eeg eellike eely EEOC eery/P EFF EFF's effacement effectivity effectuality/I effeminacy effervesce effervescence effervescent/Y efficacity Effie/M efflorescence efflrescent effluence effortful/Y effrontery effulgence effulgent eft egad/S Egan/M egerton egestion egestive eggcup eggnog eglantine egocentrically egocentricity egocentrism egoism egoist/S egoistic egoistical/Y egomania egomaniac/S egomaniacal/Y egression Egyptology Ehrlich/M eichmann eiderdown eidetically eidolon eigenfunction/S eigenspace eightyfold ein eine Eire/M Eisner/M ejaculatory ejecta ejectable ejectment ekistic/S Ekstrom/M elapid elastase elastin elastomeric elaterite elbowroom elderberry eldership Eldon/M Eleazar/M elecroencephalographic electability electable electioneer/R electret electriques electroacoustic/S electroacoustically electroanalysis electroanalytic electroanalytical electrocardiographic electrocardiographically electrocardiography electrochemical/Y electrochemistry electroconvulsive electrocorticogram/MS electrodeposit electrodeposition electrodialysis electrodialytic electrodynamometer/MS electroencephalograph electroencephalography electroform electrogenesis electrogenic electrogram/MS electrohydraulic electrohydraulically electrojet electrokinetic/S electroless electrologist electroluminescence electroluminescent electrolytically electromagnetically electrometallurgy electrometer/MS electromotive electromyogram/MS electromyographical electronegative electronegativity electronography electrooculogram/MS electrophilic electrophoretic electrophoretically electrophoretogram/MS electrophotographic electrophotography electrophysiologic electrophysiological/Y electrophysiologist electrophysiology electroplate/R electropositive electroretinogram/MS electroretinograph electroretinographic electroretinography electroscope electrostatically electrosurgery electrosurgical electrothermal/Y electrothermic electrotonic electrotonically electrotype/R electrovalence electrovalent electrowinning electrum electuary elegancy elegiacal/Y elegit Elena/M elephantiasis elevenfold elfish/Y Elgin/M elicitation elicitor eligibly eliminable/I Elinor/M Elisha/M elisp elitist/S elixir ell elle ellie Ellington/M elliot Ellwood/M elocutionary elocutionist/S elopement elroy Elsevier/M Elton/M eluant elucidator elucubrate/DGNS eluent elutriate elutriator eluvial eluviate/N eluvium elver elvis elvish Ely/M Elysee/M elysium elytron elytrum em/S emanational emancipationist emancipator emarginate/DN emasculator embalmment embarkation embarkment embarrassable embassage embattlement embay embayment embeddable embedment embitter/S embitterment emblaze/DGS emblazonment emblazonry emblematical/Y emblements embolic embolism embolismic embosom embossable embossment embouchure embowed embowel embracement embraceor embracery embranchment embrangle embranglement embrasure embrittlement embrocate/DGNS embroglio embroilment embrown embrue embryogenesis embryogenetic embryogenic embryogeny embryol embryologic embryological/Y embryologist embryonal/Y embryonated embryonically embryotic emceeing emendate/N emendator emendatory emeriti emersed emerses emersion emetic emetically emigre/M emigree Emil/M Emile/M Emilio/M eminency emir emissive Emmett/M emollient/S emote/DGSV emotionalist emotionalistic emotionless/P emotive/Y emotivity empanel/S empathetic empennage emperorship empery/S emplane empoison empoisonment empowerment empressement emprise emptyhanded empurple/DG emu emulous/PY emulsible emulsifiable emulsive emunctory en/S enactor enamelware enamine encage encapsule/S encasement encash encashment encaustic enceinte encephalic encephalitic encephalitogenic encephalogram/MS encephalon enchainment enchase/DG enchilada encipherment encirclement enclasp enclitic encomia encompassment encrimson encrustation encyst encystation encystment endamage endangerment endarch endarchy endbrain endemically endergonic endermic endermically endexine endite endleaf endlong endmost endobiotic endoblast endoblastic endocardial endochondral endocrine endocrinologic endocrinological endocrinologist endocrinology endocytic endocytosis endocytotic endoderm endodermal endodermis endodontia endodontic/S endodontically endodontist endoenzyme endoergic endoerythrocytic endogamic endogen endogenic endogeny endolymph endolymphatic endometrial endometriosis endometrium endomitosis endomorph endomorphic endomorphism endomorphy endonuclease endoparasite endoparasitism endophyte endophytic endoplasm endoplasmic endorsable endorsee endoscope endoscopic endoscopically endoscopy endoskeletal endoskeleton endosmosis endosmotic endosmotically endospermic endospermous endospore endosporic endosporous endosteal/Y endosternite endosteum endostyle endosymbiosis endotherm endothermal endotoxic endotoxin endotracheal endotrophic endotropic endozoic endpaper endue/DG endways endwise enemata enfant/S enfeeblement enfetter enfever enflame/DGS enfold Engels engild engineroom/S enginery engird engirdle englacial Engle/M englut englutted engluttin engorgement engr engraft engrailed engrain engrammic engrossment engulf engulfment enhalo enharmonic enharmonically Enid/M enigmatical/Y enisle enjambement enjambment enkindle enlace enlacement enlistee enmeshment ennoblement enol enolase enolic enologist enology enplane enrapt enregister enrobe enroot ensample ensanguine ensconce/GS enscroll enserf enserfment ensheathe enshrine/GS enshrinement ensiform ensilage ensile/DG ensional ensnarl ensolite ensoul ensphere enswathe entablature entablement/S ente entendre entente enterable enteral/Y enteric enthronement enticement entoderm entodermal entodermic entoil/D entombment entomological entomophagous entomophilous entomophily entrail/S entrainment entrancement entreatment entrustment entwinement entwist enucleate/DGN enunciator/S envelopment/S environmentalism environmentalist/S envisionin envoi/S enwheel enwind/G enwrap enwreathe enzymic enzymically enzymologist eon/MS eonism/MS eosine epaulette ephemerality Ephesus epical/Y epicardial epicardium epicarp epicene epicenism epicentral epicureanism epicurism epicurus epidemical/Y epidemicity epidemiologic epidemiologist epidermal epigrammatical/Y epigrammatism epigrammatist epigraphic epigraphical/Y epigraphist epigraphy epileptically epimorphism epiphanous epiphenomenal/Y epiphyseal epiphysis epiphyte epiphytic episcope episiotomy episodical/Y episomal/Y episome epistasy epistatic epistemic epistemically epistemologist epistolary epistoler epistrophe epitaphial epitaphic epithetic epithetical epode/S eponymous equability equably equalitarian equalitarianism equational/Y equatorward equerry/S equestrienne equiangular equiangularity equicaloric equilibrator/S equilibratory equilibrist equilibristic equimolal equimolar equinoctial equipage equipoise equipollence equipollent/Y equiponderant equiponderate equipotential equiprobable equitability equitant equitation equivalency equivocality equivocate/DGS equivocator equivoke equivoque eradicably/I eradicator/S eradictions erasability/S Erastus Erato/M ERDA erectable erectile erectility erelong erenow erewhile/S erg ergative ergograph ergometer/MS ergometric ergonomic/S ergonomist ergonovine ergosterol ergot ergotamine ergotic ergotism ergotropic Erlenmeyer/M erodibility erogenic erogenous erose/Y erosional/Y erosivity erotical eroticism eroticist erotism erotogenic erratical erraticism errorless Erskine/M eruptible ESC escalade/RS escalatory escallop/S escapement/S escapism escapologist escapology escargot escarp eschatological eschatologist/MS escheat escherichia eschewal escot esculent esemplastic esker Esmark/M esophageal esoterica esoterically esotericism esp espadrille espagnol espanol esperance espial Esposito/M espresso/S essayist essayistic Essen/M essentialism essentialist essentiality EST establishable establishmentarian establishmentarianism esteemable Estella/M ester Estes Estonia/M estop estopped estopping estral estray estrogen estrogenic estrogenically estrone estrous estrum estrus estuarial esurience esuriency esurient/Y etagere etatism etatist etch/GRS ether/MS ethereality etheric etherish etherlike ethicality ethician/S ethnical ethnobiological ethnobiology ethnocentric ethnocentrically ethnocentricity ethnocentrism ethnographer ethnographical/Y ethnol ethnologic ethnological/Y ethnologist ethnomusicology ethological ethologist ethoxy ethylate/N ethylenic ethylenically ethylic ethynyl Etna Etruria etude/S etui etymologist/S eucaryotic eucharistic euchre euclidian eucre eugenically eugenicist euglena euhemerism euhemerist euhemeristic euhemeristically eukaryote eukaryotic eulogist eulogistic eulogistically eulogium Eumenides eumorphic eunuchism euphemistic euphemistically euphonically euphonious/PY euphonium euphorbia euphorically euphotic euphuism euphuist euphuistic euphuistically euplastic eurhythmic/S Euridyce/M europeanish eurythmic/S eurythmy eurytopic eurytopicity eustatic eutectic Euterpe/M euthanasic euthenics euthenist eutherian euthyroid eutrophic eutrophy/N eux eV evacuator evacuee/S evadable evagination evaluable evanesce/DGS evanescence evangel evangeline evangelistically evanishment evaporativity evaporator/S evaporite evaporitic evapotranspiration evection evenfall Evensen eventless everblooming Everglade Everhart/M eversible eversion/S evert everyplace evictee/S evictor/S evidentiary evildoing evincible eviscerate/DGNS evitable evocator/S evolutionism evolutionist evolvable evolvement evulsion/S evzone ewen exacta exactable exactor/S exaggerator/S exagitates examinant/S examinational examinatorial examinee/S exanimate/DGS excavational excavator/S exceptionability exceptionable/U exceptionably/U exceptionality excerption/S excerptor/S exchangeability exchangee/S excide/DGS excipient exciseman excitant/S excitative exciton excitor exclave/S exclosure/S excludability excludable excludible exclusionist/S excogitate/NV excommunicator excrement/MS excremental excrementitious excrescency excrescent/Y excreta excretal exculpate/DGNSX excurrent excursionist/S excursive/PY excusatory execrably execrator/S executant executorial executory executrices exegetic/S exegetical/Y exegetist exemplarity exenterate/DGNSX exercitation exergonic exeunt exfoliate/DGNSV exhalant/S exhalation/S exhalent/S exhaustibility/I exhaustivity exhaustless/PY exhibitionism exhibitionist exhibitionistic exhibitory exhilarant exhortative exhortatory EXIF exigence exiguity exiguous/PY exilic existentialistic existentialistically exobiological exobiologist exobiology exocrine exocyclic exodermis exodontia exodontist exoergic exogamic exonuclease exorbitance/S exorcistic exorcistical exordial exordium exoskeleta exoskeletal exosmosis exosmotic exosphere exospheric exospore exostosis exoteric exotericaly exothermal exothermically exotically exoticism exotism expansibility expansile expansional expansionary expansionistic expansivity expatiate/DGNS expatriate/DGNS expecially expectably expectance expectative expedience/I expediential expeditionary expeditor expellee expeller/S expendability expertism expiator expiatory expiratory expiry explanative/Y explant/S explantation expletory explicably explicator explicatory explodent exploitative/Y explorational explorative/Y explosibility explosible expo/S exportability exportable expositional expositor expostulate/N expostulatory expressage expressional expressionistically expropriator/S expulsive expunction expurgator expurgatorial expurgatory exsanguinate/N exscind exsert/D exsertile exsertion/S exsiccate/N exstipulate ext extemporal/Y extemporaneity extemporary/Y extendable extensile extensionality extensity extensometer/MS extenuator extenuatory exteriority exterminatory extermine externalism externality externship exteroceptive exteroceptor exterritorial exterritoriality extinguishable extinguishment extoll extolment extortionary extortionate/Y extrachromosomal extracorporeal/Y extracranial extractability extractable extractible extradite/NS extradoses extragalactic extrajudicial/Y extralimital extralinguistic extralinguistically extrality extramundane extramural/Y extranuclear extrapolator extrasensory extrasystole extrasystolic extraterritorial extraterritoriality extrauterine extravagancy extravagate extravasate/N extravascular extravehicular extraversion extraversive extravert/D extremis extremum extrinsically extrorse/Y extrudability extrudable exuberate exudate/V exultance exultancy exurban exurbanite exurbia exuviation eyebolt eyebright eyecup eyedropper eyedropperful eyehole eyelike eyeliner eyepatch eyepoint eyepopper eyeshade eyeshot eyespot eyestalk eyestrain eyestrings eyetooth eyewash eyewink eyre eyrie FAA Faber/M Fabian/M fabricant fabricator/S fabular fabulist facedown facement facepiece/S facetted faceup facies facilitator facticity factional/Y factionalism factitious/PY factitive/Y factorable factorage factorship factotum factualism factualist/S facture/S facula facultative/Y faddish/P faddism faddist/S fadeaway fadeless/Y Fafnir/M fagging faggot/GS Fahey/M faience failsoft fainthearted/PY faintish/P fairground fairish/Y fairlead/R fairview fairylike faitour fakir falcate/D falciform falconet falderal falk Falkland/S fallibly Fallopian Falmouth/M falsetto/S familism famishment fancywork fandango fane/N fanlight fanlike fanner fantastical/P fantasticality fantasticate/DGNS fantod fanwise farad farceur farcicality Farkas farmhand/S farmstead/G Farnsworth/M faro farrow farseeing farthermost fasces fascia fascial fasciated fasciation fascicular/Y fascicule fasciculus fascinator/S fascistic fascistically fashionability/S fashionmonger fastuous/Y fatalism fatalist fatalistically fatback fathead/D fatheaded/P fatherlike fathomable fathomless/PY fatigability fatigable fatling fatted fatting fattish faulknerian faultfinder faultfinding faunal/Y faunistic faunistically fauntleroy fauvism fauvist faux favonian fawkes fawny fay Fayette/M featherhead/D featherless featherman febrific fecal feckless/PY feckly feculence feculent fecundate/DGNSX feebleminded/PY feedlot feedstock feedstuff feeing Feeney/M feetfirst feist feisty/R feldspathic felicific felicitate/DGNS felicitator felinity fellable fellah fellatio fellation/S fellini fellowman felones felonry felsite felsitic felspar feministic feminity femoral fenceless/P fenestral fenestrate/DNS fennec fenny Fenton/M fenugreek feral Ferber/M ferdinando Ferguson/M ferial ferine fering ferity Fermat/M fermentable fermentative fernlike ferny FERPA/M ferrate Ferreira Ferrer/M ferrety ferriage ferriferous ferrimagnet ferrimagnetic ferrimagnetically ferrimagnetism ferritic ferromagnetism ferrotype ferruginous ferrule ferryboat ferryman fervency fescue fess festinate/NY festoon/S festoonery feta fetation feterita fetishism fetishist fetishistic fetlock/S fetologist fetology fetor fettuccine feudalist feudality feudist feverous/Y fey/P Feynman/M fez/S fezzes fibber fibration fibriallating fibril/S fibrillar fibrillate/DNS fibrilliform fibrillose fibronectin fibrovascular fibula fibular fichu fictile fictioneer/G fictionist fiddleback fiddlehead fideism fideist fideistic fidel fidgety/P fidging fie fieldfare fieldstrip fiftyfold figaro figurable figurate/NX figurehead Fiji/M Fijian/MS filamentous filar filaria filarial filature filiation filiform filigreeing filippo fille/S fillip/S fillment filmcard filmic filmically filmmake/G filmography fils filterability filterable filtrable filum fimbria fimbrial fimbriate/DNS finback finery finespun fingerboard fingerlike fingerling fingerpost finical/PY finicking finis finitude Finley/M finlike finning fiord fiori firebird firebox firebrick fireclay firedamp fireguard fireless firelock fireplug/S fireroom firetrap firma firmamental firstborn firstfruits firstling/S fisc Fischbein/M fishability fishable fishbowl fishhook fishkill fishnet fishplate/S fishtail fishway fishwife fishyback Fiske/M fissility fissionability fissionable fissional fissiparous/PY fistfight fistful fistic fistnote fitment fixable/U fixity fixups Fizeau/M fizzy FL flabellate flaccid/Y flaccidity flack flacon flagellant/S flagellantism flagellar flageolet flagger flagitious/PY Flagler/M flagon flagrance flagrancy/S flamb flamboyance flamboyancy flamenco flameout flameproof flammability/I flan/M flapdoodle flapjack flappy flareback flashboard flashgun/S flashover/S flashtube flatboat flatcap flatcar flatfeet flatfoot/DS flatted flatting flattish flattop flatulency flatus flatware flatwise flatwork flaunty flaxy/R flay fleabag fleabane flection flective fledermaus fleeringly fleischman fleisher fleshment fleshpot/S flexile flexion/AI flexographic flexographically flexography flexor flexuous/Y flibbertigibbet flibbertigibbety flickery flightless flighty/PRY flimflam flimflammed flimflammer flimflamming flintlike flippancy flipper flirty flitted flitter flivver Flo/M floatage floatation floatplane floaty floc flogger floodlit floodplain floodwall floodwater/MS floodway flooey floorage floorwalker floozie/S floozy/S flophouse flopover/S flopper/S florescence/AI florescent/AI floret floriate/DNX florican floricultural/Y floriculture floriculturist floridity floriferous/PY florigen florigenic floristic/S floristically floristry floruit flossy/R flotage flouncy flowage flowerage floweret flowerlike fluctuant fluegelhorn fluidal/Y fluidextract fluidic/S fluidounce fluidram flukey flume/DGS flummery flummox flump/DGS flunkeys flunky fluor fluorescein fluorimeter/MS fluorimetry fluorinate/GNSX fluoroscopic fluorspar flutelike flutterboard fluttery fluvial fluviatile fluxion fluxional flyblown flyboat/S flyby flybys flyleaf flyman flyover/S flypaper flypast/S flyspeck flyswatter flytier flyting flyway flyweight FM FMC foamflower foamless fobbing focusless fodgel foeman Fogarty fogbound fogey/S fogger foggest foghorn/S fogless fogy/S fogyish fogyism foilsman foldable foldaway foldboat/GR folderol Foley/M folia foliaceous folic folkish/P folkloric folklorish folklorist folkloristic folksinger/MS folksinging folktale/MS folkway/S folliculate/D followership followeth Fomalhaut/M fomentation/S fondue/S Fontaine/M fontal fontana foodless/P foolery foolscap/M footboard/S footboy/S footcandle footcloth footgear footle/DGRS footless/PY footlike footlocker footmark footpace footrace footrest/S footrope/S footslog/S footslogger footsore/P footstall footwall footway/S footy foozle/D fopping fora foraminifera forbiddance forbidder forbode forborne forbye forceless forceps forcepslike fordable fordo forebear forebode/DRS forebrain foreclose/S foreclosure forefeel forefoot foregather forehand/D forehanded/PY foreignism forejudge forejudgment/MS foreknow forelady foreland forelimb forelock foremanship foremast/S foremother forename/DS forensical/Y foreordain/DGS foreordination forepassed forepast forepaw forepeak foreplay forequarter/S forereach forerun foresaid foresail foreshank foresheet foreshore foreshorten/S foreshow foreside foresightful foreskin forespeak forestage forestal forestation forestay forestial foreswear foresworn foretaste foretellable forethoughtfully forethoughtfulness forethougtful foretime foretoken forevermore forewoman foreworn foreyard forfeitable forgather forgeability forgeable forgetter forgiveable/U forgiveably/U forgoes forgone forjudge forkful forklike forky/R forma formable formalin formalist formalistic formalistically formational/A formfitting formful formidability formulaically formulary formyl fornicate/DGSX fornicator/S forrader forrarder forsooth forspent forswore forsworn Forsythe/M fortalice Fortescue/M fortin fortman fortuity fortyfold forwent forworn Foss fossate fossorial fosterage fosterite fosterling/S fou foudroyant foundational/Y foundationless founderous foundress foundrous fourdrinier foxtrot/MS FPC fracas fracted fractionate/GSX fractionator/S fragmental/Y fragmentate/DGSX fragrancy framable frambesia frameable franca francaise francesca francesco franchisee franchisor francie Francine/M francois Francoise/M frangibility/AI frangible/AI frangipani Frankel/M frankincense frankpledge franny frap frappe/G Fraser/M frat/R fraternalism fratricidal fratricide fraudulence frayne freaky/R freckly Fredericksburg/M Fredericton/M Fredholm/M fredrick freeboard freedwoman freehearted/Y freeload/R Freemason freemasonry freestanding freestyle freethink/GR Freetown/M freewill freida freightage frenchify/N frenetically frequence/I frequentation/S frequentative/S freshet fretwork Freya/M friability friary fribble/DGS fricassee fridge/MS Friedrich/M Friesland/M frig frigging frigidity frigorific frillery fringy/R frippery Frisian frisson/S frit fritillary frito fritted fritting frivol frizz/Y frizzly/R frizzy/PRY frogman frogmen frolick/DS frolicsome/PY frond/DMS frondeur frondose/Y frontality frontispiece/S frontless fronton frostwork frottage froufrou froward/PY frowsty/R frowsy/R fructify/NX fructose/MS fructuous/Y Fruehauf/M fruitage fruitcake fruitlet fruity/R frump/S frumpish frumpy/R Frye/M fryer FSF/M FTC fucose fucus fuddle/DGS fugacity fugal/Y fuguist Fujitsu/M fulbright Fulbright's Fulbrights fulcra fulgent/Y fulgurant fulgurate/DGNSX fulgurous fuliginous/Y fullmouthed fulminant fulminator/S fulness Fulton/M fum fumarate fumarole fumigator/S fumy funambulist functionalistic functionless functorial fundament fundamentalistic fundraiser/MS fundraising funerary fungibility fungicidal/Y fungicide fungiform fungo fungoes fungous funicular funiculus funigating funky/PR funnelform funning funnyman furbearer furbelow furcate/DGNSXY furcula furcular furfural furless Furman/M furmity furore/MS furriery furtherance furuncle furuncular furunculosis furunculous furze fusee/MS fusibility/I fusil fusile fusileer fusilier fusionist fussbudget fussbudgety fusspot fustian/S fustigate/DGNSX futilitarian futilitarianism futureless futurism futuristic futuristically futurity GA gabber gabble/DGRS gabbro gabby/R gaberdine Gaberones gabfest/S Gabon/M Gabriola/M gadabout/S gadded gadder gadding gadgeteer/S gadgety gadolinium gadwall gadzooks gaff/S gaga gage/S gagger gagman gagmen gagster/S gaillardia Gaines gaingiving gainless/P gainsay/R galactopyranose galactopyranoside/S galactopyranosyl galactose galahad Galatia/M galavant Galen/M Galilean Galileo's Gallagher/M gallberry gallbladder galleon/S gallet gallied gallinule gallopade gallow gallus/S galore galosh/DGS Galt/M galumph galvanically galvanometric Galway/M gam Gambia/M gamekeeper/S gamesmanship gamesome/PY gamester gamete/MS gametic gametically gamey gamic gamin gamine gamming gammon gamy/PRY Gandhi/M Gandhian ganglioside/S gangrenous gangsterism gannet Gannett/M gantlet GAO gapping gappy gar/H garageman garagemen garde gardenful garlicky garnett garnishable garnishee/S garnishment/S garniture/S garotte Garrisonian garrots garrulity Garth's gasbag gasholder gashouse gaslit gasogene gasolene gasolier gasolinic gasometer/MS Gaspee/M gasses gasset gast/P gastight/P gastral gastrectomy gastrin gastritis gastrogenic gastrogenous gastronomic gastronomical/Y gastronomist gastrulate/N gasworker gasworks gat gatefold gatepost gatsby gaucherie/S gaud/DGS gaudery gaugeably Gaulle/M gaum/S gauntley gaur Gautama gauzelike gauzy/PY gavotte/S gawkish/PY gayety gazebo/MS gazpacho/M GCD GE gearbox gearless gearshift geary gecko geegaw Gegenschein gehrig Geigy/M gelant gelate/DGNS gelation/A gelid/Y gelidity gelin geminal/Y geminate/NY Geminid Gemma gemmate/DGNS gemming gemsbok gemstone/MS gendarme gendarmerie genealogical/Y genealogist generable/A generale generalship/S generatrix Genesco genetical geniality genic genically geniculate/DY genii genitalia genitalic Genoa/M genocidal genocide/S genome/MS genotypic genotypical/Y genotypicity genteelism gentilesse gentlefolk/S gentlemanlike/P gentrice genuflect/DGS genuflection genuflectory geocentrically geochemist geochronologic geochronological/Y geochronologist geochronometric geochronometry geode/MS geodesist geodesy geodetical/Y geoduck geohydrologic geohydrology geomagnetic geomagnetically geomagnetism geomancy geomantic geomorphic geophyte geopolitician geoponic/S georgic geoscience geostrategic geostrategist geostrategy geostrophic geostrophically geothermal/Y geothermic geotropic geotropically geotropism geriatrician/S geriatrist germania germfree germinability germproof germy/R gerome gerontic gerontocracy gerrymander/D gerundial gestational gesticulator/S gesticulatory gestural getatable getup/S gewgaw Ghanian ghastful/Y ghazal/S ghee ghostwrite/R ghosty gianthood/S giantism/S giantlike gib gibberellin gibbing gibbosity gibby giddings gigantesque gigantically gigantism/S gigapixel/M gigapixelsGPL/M giggly gigolo gigot/S Gil/M Gilchrist/M gildas Gilead/M Gilmore/M gimcrackery gimlet/MS gimmal gimmickry gimmicky gimp Gina/M gingersnap gingery gingko Gino/M Ginsberg/M Ginsburg/M gioconda giraffish girlhood/S girly girn giro gismo/S Giuliano/M Giuseppe/M givable gizzard/MS glaciologic glaciological glaciologist glaciology glacis gladded gladding gladiatorial gladiola gladsome/PY glady glamourless glandered glandless glans glary/R glassblower glassblowing glassful glasshouse glassine glassmaker glassmaking glasswork/RS Glaswegian glazier glaziery gleamy gleanable gleesome glibber glibbest Glidden/M glioma glissade glittery gloam/DGS globalism globalist/S glom/S glomerular glomerulate glomming Gloriana/M glossarial glossarist glossographer glossolalia gluconyl glucopyranosyl glucosamine glueing gluily glumaceous glummer glummest glutamate glutamic glutamine gluteal gluttonous/PY gluttony glyceryl glycine glycocholate/S glycoconjugate/S glycodeoxycholate/S glycogen glycolipid/S glycopeptide/S glycoprotein/S glycosidase/S glycosidic glycosphingolipid/S glycosyl glycosylate/DNS glynn GMT gnarly gnatty gneissic gnomic gnomish gnomon gnosticism goalie goalkeeper goalpost goaltender goaltending goatish goatlike gobbledegook Gobi/M godchild Goddard/M goddaughter godded godding godforsaken Godfrey/M godhood godkin godling godot Godwin/M godwit goethite Goff/M gog goggly gogo goitrogen goitrogenic golda goldbeater goldbeating goldbrick goldbug goldeneye Goldfield Goldstine/M golem Goleta/M gomez gonad/MS gonadal gonadotropic gondolier/S Gonzalez goo Goode/M goodish goodnight goodwife goofball googol googolplex goon gooseflesh gooseneck/D goosey GOP Goren/M gorget gorgonian gorgously gormandise gorse Gorton/M gory/R gossamery gossipry gossipy Gothically Gottfried/M goucher gouda Gouda's goulash Gould/M gourde gourmandism gouty governable/U governessy governmentalism governmentalist governorate/S governorship goyish goys GPO grabble/DGRS grabby/R graceless/PY gracie gracileness gracility grackle gradable gradational/Y gradeless gradiometer/MS gradualism graduator Graff/M graftage grafton grainy/PR gramicidin gramophone/MS gramps Granada/M grandad grandaddy grandam grandame granddad grande grandee grandiloquence grandiosity grandioso grandparental grandparenthood grandsire/S grangerism granitic granivorous grantable grantsman grantsmanship granulator granulite granulitic granulocyte/S grapeshot graphemic/S graphemically graphitic graphological graphologist graphology graphophone grapnel grapy/R gras grasslike grata graticule gratin gratulating graveless gravesend gravidity gravimeter/MS gravimetrically gravimetry gravitometer/MS graviton/MS gravure grayish grayling/S graywacke grazable grazeable grazier/S greaseless greasepaint/S greaseproof greasewood greathearted/PY greave/S grebe greenback/R greenbackism Greene/M greengrocery greenhorn greenlet greenling greenroom greensward greentree greenware greeny Greer/M gregarine gregarinian gremlin/MS gremmie/S gremmy/S grenadier grenadine grenier grep Gresham/M grewsome greylag gridlock/M griefless grievant grillage grille grillroom Grimaldi/M grimines grimmest Grimsrud/M grimy/R gringo/S grinner grippe grippy gris gristle Griswold/M grith gritted gritting grog grogshop groomsman groot groovy/R grosse grossular grossularite grotesquerie grotesquery grouch/DGMS groundling groundmass groundnut groundout groundsel groundsheet groundskeep groundwater groupable groupie/MS groupoid grubber grubstake/R gruel grumbly grummet grump/DGS grunion gruntle/DGS grusky Gruyere gryphon gtad GU guacamole guadalupe guanidine guanine guarantor guardant Guardia guardrail guardroom guardsman guava guck gudgeon Guelph Guenther/M guerdon Guerin guesstimate guff guggle/DGS guhleman guidable guideway guignol guildship guildsman guileful/PY Guilford/M guillemot guillotine/DGMS guimet guimpe Guinevere/M guisard Gujarat Gujarati gul gules gullable Gullah gullibly gulosity gumboil gumdrop/MS gummatous gummed gummer guncotton gundog gunlock gunmetal gunnar gunnysack gunplay gunpoint gunpowdery gunrunner gunrunning gunsel gunship gunsmith Gunther/M guppy/S Gurkha/M gurney/S gushy/PRY Gustafson/M gustation gustative/P gustatorial/Y gustatory/Y Gustav/M Gustave/M Gustavus gustoes gutless/P guttate/N guttersnipe guttersnipish gutturalism gutty/R Gwyn/M gymkhana gymnastically gymnosophist gypseous gyral gyrational gyrator/S gyratory gyre gyrene gyrfalcon gyrofrequency gyromagnetic gyron gyroplane gyroscopically gyrostat Haag/M Haas haberdasher Haberman/M Habib/M habiles habiliment habilitate/DGNSX habitability habitably habitude/S habitus hac hackberry hackmatack hackstaff hadal Hadamard Haddad/M haddix hade/S Hadley/M Hadrian hadst hafiz haft Hagen/M Hager/M haggadic haggadist haggadistic haggis haggish hagiography/MS Hagstrom/M hah Hahn/M Haines hairbreadth hairbrush haircloth haircutter haircutting hairlike hairpiece hairsbreadth hairsplitter hairsplitting hairspring/MS hairstreak halberdier Haley/M halfpenny/S halftone halidom halitosis Halley/M halliard/S hallinan hallo halloo/S halluces hallucinational hallucinatory hallucinogen/S hallucinogenic hallucinosis halma halocline haloes halogenate/N halogenous halomorphic halomorphism halpern Halsey/M Halstead/M haltere halvah Halverson/M Hamal/M hamate Hamburg hamey Hamlin/M hammerlock hammertoe hammett hammy/PRY hamstring hamstrung handball handbill handbreadth handcar handcart handcraft handcraftman handcraftsman handcrank/S Handel/M handfast/G handleless handline handlist handmaid handpick/D handpress handprint/MS handsaw handsbreadth handsful handshook handspring/S handwaving handwheel/S handwork/R handwoven handwrought Haney/M Hanford/M hangdog hangnail/MS hangtag Hankel/M hankie/S hanky/S Hanley/M Hanlon/M Hanna/M hant/R haole hapchance hapgood haphazardry haploid haploidy haplology happenchance happing Hapsburg/M Harbin/M hardback hardbake hardball hardboot hardbound hardcase hardcopy/S hardcover/S hardfisted/P hardhanded/P hardhead/D hardheaded/PY hardhearted/PY hardihood hardiment hardmouthed hardpan hardstand/G harebrain/D harelipped Harlan/M harlequin harlequinade Harley/M harlotry Harmon/M harmonica/MS harmonical/PY Harmonist Harmonistic Harmonistically harmonium harridan Harriman/M Harrington/M harvestable harvesttime haskell Haskell's haskins hassock/S hast hastate/Y hatband hatbox hatchability hatchable hatcheck hatchling hatchment/S hatchure Hathaway/M hatter Hatteras Hattiesburg/M hatting Haugen/M haulageway haulaway haulier Hausa/M Hausdorff/M hauser hausfrau hautboy/S haute hauteur haversack/MS Havilland/M havocked havocking hawkish/PY haycock Hayden/M hayfork haymaker haymaking haymow hayrack hayrick hayride hayseed/S haywire haywood HDD HDD's HDDs HDL headachy headband headcount headfirst headforemost headgroup/MS headhunter headlock headman/M headmastership headmen/M headmistress headmost headnote headpiece headpin headrest headsail headshrinker headspring headstall headstock headstream headstrong headwaiter headwind/MS headword headwork Healey/M Healy/M heartbroken hearthstone heartrending/Y heartsease heartsick/P heartsome/Y heartsore heartstring/S heartwarming heartwood heathendom heathenism heathenry heathery heathless heathlike heathman heatless heatstroke heavyhearted/PY heavyset hebdomad hebdomadal/Y Hebe hebetation hebetude hebetudinous Hebrides/M Hecate/M Heckman/M hectically hectogram/MS hectograph hectographic hedda heddle/R hedgehop hedgehopper hedgepig hedgerow hedonic/S hedonically hedonistically hee heelball heelless heelpiece heeltap hegel heidegger Heidegger's heigh Heine/M Heinrich/M heinze heirless heirloom heirship heiser heldentenor Helga/M heliacal/Y helicoid helicoidal helicopt/DG heliochrome heliogram/MS heliograph/R heliographic heliography heliogravure heliolatrous heliolatry heliometer/MS heliometric heliometrically heliophyte heliopolis heliostat heliotaxis heliotropic heliotropically heliotropism heliozoan heliozoic helipad heliport helistop hellbox hellbroth hellcat hellebore Hellespont hellgrammite hellhole hellhound hellion helmetlike helmsmanship helot helotism helotry helpmeet helve/DGS Helvetica hemacytometer/MS hemal hematic hematin hematinic hematoblast hematoblastic hematocrit hematogenous hematologic hematological hematologist hematology hematoma hematophagous hemihedral/Y hemihydrate/D hemimetabolic hemimetabolism hemimetabolous hemimorphic hemimorphism hemimorphite hemiparasite hemiparasitic hemiplegia hemiplegic hemispheral hemline hemmer hemoblast hemodynamically hemodynamics hemoflagellate hemoglobinic hemoglobinopathy hemoglobinous hemolymph hemolysin hemophilia hemophiliac hemophilic hemoprotein hemoptysis hemorrhagic hemorrhoid hemorrhoidal hemosiderin hemostasis hemostatic hempel Hempstead/M hemus henae henbane henceforward hendecasyllabic hendecasyllable hendiadys hendrix henequen Henley/M henna hennery Hennessy henotheism henotheist henotheistic Henri/M hent hep heparin hepatic hepatica hepatocellular hepatocyte/MS hepatoma heptagon heptagonal heptameter/MS heraldic heraldically heraldry herbaceous herbage herbalist herbarium herbicidal/Y herbicide/MS herblike herdic herdlike herdsmen hereaway/S hereditament hereditarian hereditarianism hereinabove hereinbefore hereinbelow hereon heretical/PY hereto hereunder hereupon heritability/I Hermann/M hermaphrodite/MS hermaphroditic hermaphroditically hermaphroditism hermatypic hermeneutic hermeneutical/Y hermetical/Y hermeticism hermetism hermetist hermitage/MS hermitism hern hernandez Hernandez's hernia/MS hernial herniate/DGNSX heroical heroicomic heroicomical heroinism heronry herpesvirus herpetic herpetologic herpetological/Y herrington hersey herty Hertzog/M hesiometer/MS Hesse/M Hester/M heterarchy heterecious hetero heteroatom heteroautotrophic heterocycle heterocyclic heterocyst heterodox heterodoxy heteroecious heteroecism heterogamete heterogametic heterogenesis heterogenetic heterogeny heterogonic heterogony heterograft heterologously heterology heterolysis heterolytic heteromorphic heteromorphism heteromorphous heteronomous/Y heteronomy heterophil heterophile heterophony heterophyllous heterophylly heterophyte heterophytic heteroploid heteroploidy heteropolar heteropolarity heteropterous heteroscedasticity heterosexuality heterosis heterotic heterotopic heterotroph heterotrophic heterotrophically heterotypic heterotypical heterozygosis heterozygosity heterozygote Hetman/M Hettie/M Hetty/M Heusen/M Heuser/M Hewett/M Hewitt/M hexad hexade hexadic hexagram hexahedron hexahydrate/D hexahydrite hexamethonium hexane hexaploid hexaploidy hexapod heywood Hiatt/M Hibbard/M hibernal hibernator hibiscus Hickman/M hickok hidalgo hidebound hidrosis hidrotic hie hieing hierarch hieratically hieroglyph hieroglyphical/Y Higgins higgle/DGRS highbinder highborn highbred highbrow/D highbrowism highline/S Hildebrand/M hilding hillary hillocky hillyer hilum Himalaya/M himation hindbrain hindquarter Hindustan/M Hines hingism hinkle Hinman/M hipbone hipped hipper hippest hippie hippocampal hippocampus hippocras Hippocrates Hippocratic hippogriff hipsterism hirey Hiroshi/M Hirsch hirsute/P hirsutism hirsutulous hist histaminase histamine histaminergic histaminic histidine histologic histological/Y histologist histolysis histolytic histopathologic histopathological/Y histopathologist histopathology histophysiologic histophysiological histophysiology histoplasmosis historicist historiographer historiographic historiographical/Y histrionically hithermost hitherward Hitlerian Hitlerism Hitlerite/S hiveless HMC's hmm Hoagland/M hoarsen/DG Hobart/M hobbledehoy hobday hobnail/D hobnob/S hobnobbed hobnobber hobnobbing hockaday hocus/DG hocussed hocussing hod hodad hodaddy Hodge/M Hodgkin/M hodoscope hoecake hoedown hoeing Hoff/M Hogan/M hogback hoggish/PY hogshead hogwash hoi hoising hoistman hoistmen hokan hoke/G hokeypokey hokum holabird holandric holandry Holcomb/M holdall/S holdback holdfast holdout/S holeable holey holidaymaker holism holistically hollas Hollingsworth/M hollo holloa holloware Holloway/M Holm/M Holman/M Holmdel/M holoblastic holoblastically hologamous hologamy holograph holographic holographically hologynic hologyny holohedral holometabolism holometabolous holomyarian holophrastic holophytic holotype holotypic holozoic holt holzman hombre homburg homebody homebred homegrown homelike homeobox homeroom homesite homestretch hometown homey/P homiletic/S homiletical/Y hominid hominoid hominy homocercal homochromatic homoerotic homoeroticism homogametic homogamic homogamous homogeny homograft homograph homographic homoiotherm homoiothermal homoiothermic homologate/N homological/Y homolographic homolysis homolytic homomorphy homonuclear homonymic homonymous/Y homonymy homoousian homophile homophone homophonic homophonous homophony homophyly homoplastic homoplastically homoplasy homopolar homopolymer homopteran homopterous homorganic homoscedastic homoscedasticity homosporous homospory homothallic homothallism homotopy homotransplant homotransplantation homozygosis homozygosity homozygote homozygotic homunculi homunculus homy/PR honcho/S hondo honied honkeys honkie honoraria honorarium honorific/MS honorifically Honshu/M hoodlike hoodlumish hoodlumism hoodoo/S hoodooism hooey hoofbeat hoofprint/MS hookah hookey/S hooklet hooky hootch hootenanny hophead hopi Hopi's hoplite hopple hora horary hord horehound horizonal hormonal/Y hormonelike hornbeam/S hornbill/S hornblende hornless/P hornlike hornmouth hornpipe/MS hornswoggle/DGS horntail hornwort horologer horologic horological horologist/S horology horrent horrific horrifically horsecar horsehide horselaugh horsemint horseradish/S horseshit horsewhip horsewomen horsey horsy/PRY hortative/Y hortatory horticultural/Y horticulturist Horus hosanna hostel/RS hostler hotblood hotchpot hotchpotch hotelier hotfeet hotfoot/MS hotshot Hottentot/M hottish Houdaille/M Houghton/M houri housebound houseboy/S houseclean/GR housecoat housedress housefather/S housefront houseful houseguest houseless/P houselights housemaid/S houseman housemate/MS housemother/S houseplant houseroom houseward housewarming housewifery howbeit howsoever howsomever hoyden hoydenish hoyle Hoyt/M Hrothgar/M Hubbard/M Hubbell/M Huber/M hubristic hubristically huck huckaback hucksterism hud huey huff huffish Huffman/M huffy/PR hugeous/Y huggable hugger/S Huggins hullabaloo/DGS hullo humanistically humanitarianism humanlike humanoid humbug humbugged humbuggery humbugging humdinger humdrum humectant humeral humeri humerus humic humidor humification/S humified hummable Hummel/M hummer hummocky humoresque humorism/MS humoristic/S humoristical/MS humph humpty humpy/R Hun hunchback/DMS hundredweight/S Huntington/M Huntley/M hup Hurd/M Hurdies hurley hurly hurtless hurty Hurwitz hussar hussy/S hustings hutzpah Huxtable/M huzzah hyacinthine Hyades hyaena/S hyalin hyaline hyalite hyaloid hyaloplasm hybridism hybridity hybris Hyde/M hydra hydrangea hydranth hydrator hydraulical hydrazide hydrazine hydric hydrically hydrobiological hydrobiologist hydrobiology hydrocarbonaceous hydrocarbonic hydrocarbonous hydrocaryaceous/S hydrocephalic hydrocephalus hydrocephaly hydrocyanic hydrodynamical/Y hydrodynamicist hydroelectrically hydroelectricity hydrofoil hydroformer hydroforming hydrographer hydrographic hydrographically hydrography hydroid hydrokinetic/S hydrolase hydrologic hydrologist hydrolysate hydrolytic hydrolytically hydromagnetic/S hydromancy hydromechanical hydromechanics hydrometric hydrometrical hydrometry hydromorphic hydronic hydronically hydronium hydropathic hydropathically hydropathy hydroperoxide hydrophane hydrophile hydrophobicity hydrophone hydrophyte hydrophytic hydroplane/R hydroponic/S hydroponically hydroscope hydrosere hydrosol hydrosolic hydrospace hydrospheric hydrostatical/Y hydrotactic hydrotherapy hydrothorax hydrotropic hydrotropically hydrotropism hydroxylic hydroxyproline hydrozoan hyenic hyenoid hygienically hygienist/S hygrograph hygrometric hygrometry hygrophyte hygrophytic hygroscope hygroscopically hygroscopicity hyla Hyman hymenal hymeneal/Y hymenial hymenium hymnary hymnbook hymnody hymnology hyperacid hyperacidity hyperactive hyperactivity hyperbaric hyperbarically hyperbolical hyperbolist hyperborean hypercatharses hypercharge hypercritic hypercritical/Y hypercriticism hypereutectic hyperglycemia hyperglycemic hyperirritability hyperirritable hyperkeratosis hyperkeratotic hyperkinesis hyperkinetic hypermeter/MS hypermetric hypermetrical hypermetropia hypermetropic hypermetropical hypermetropy hypermnesia hypermnesic hypermorph hypermorphic hypermorphism hyperon hyperope hyperopia hyperopic hyperostosis hyperostotic hyperparasite hyperparasitic hyperparasitism hyperphagia hyperphysical/Y hyperpituitarism hyperpituitary hyperplane/S hyperplastic hyperploid hyperploidy hypersensitive/P hypersensitivity hypersonic hypersonically hypersurface hypertension hyperthermia hyperthermic hyperthyroid hyperthyroidism hypertonic hypertonicity hypertrophic hyperventilation hypha hyphal hyphenless hypnagogic hypnoanalysis hypnogenesis hypnogenetic hypnogenetically hypnogogic hypnoid hypnoidal hypnoses hypnotherapy hypnotism hypo/S hypocaust hypocentral hypochlorite hypochlorous hypochondria hypochondriac hypochondriacal/Y hypocoristic hypocoristical/Y hypocritic hypocycloid hypodermically hypodermis hypoglycemia hypoglycemic hypoiodite hypomorphic hypotension hypotensive hypothalmus hypothecate/N hypothecator hypothenuse hypothermal hypothermic hypotonic hypotonically hypotonicity hypotrophy hypoxemia hypoxemic hypoxia hypoxic hypsography hypsometer/MS hypsometric hypsometry hysteretic hysteron IA iambus/S iatrogenic ibero ibidem Ibn iceblink icebound icebreaker icecap/MS icefall icehouse iceless iceman/MS ichneumon ichorous icky/R ICL iconically iconicity iconoclastically iconographer iconographic iconographical/Y iconography iconolatry iconological iconology iconoscope icosahedra Ida/M idealess idealistically ideality idealless idealogy ideational/Y idem identic ideogram/MS ideogramic ideogrammatic ideogrammic ideograph ideographic ideographically ideography ideolect ideologic ideologue/S ideomotor ides idetic idiographic idiolectal idiomatically idiomorphic idiomorphically idiopathic idiopathically idioplasm idioplasmatic idioplasmic idiotical/P idiotism idolater idolatrous/PY idyllically idyllist ie IEE Ifni IGN ignescent ignitable ignitible ignitor ignitron ignobility ignobly ignominiosness ignominy ignorable igor Igor's iguana Ike/M ikon IL ilial illation illative/Y illaudable illaudably illegibility illegibly illiberal/PY illiberalism illiberality illimitability illimitably illiquid illiquidity illite illitic illogicality illon illuminable illuminance illuminant illuminati illuminator/S illuminism illuminist illus illusional illusionism illusionist illusionistic illust illustrational illutation/MS illuvial illuviate/N illuvium ilmenite Ilona Ilyushin im iMac/MS Imagen/M imaginal imaginate imagism imagist imagistic imagistically imago imam imamate imaret imbecilic imbecility imbed imbibition imbibitional imbitter imbosom imbricate/NY imbrown imbrue/D imbrute/DG imdtly ime imidazole imide imidic imido imine imino imipramine imit imitational imitator immaculacy immane immanence immanency immanentism immanentist immanentistic immaterialism immaterialist immateriality immaturel immedicable immedicably immensurable immerge/DG immergence immersible immesh immethodical/Y immigrational imminency immingle immiscibility immiscible immiscibly immitigable/P immitigably immittance immix immixture immoderacy immolate/N immolator immoralist immotile immotility immunochemical/Y immunochemistry immunoelectrophoresis immunofluorescence immunofluorescent immunogenesis immunogenetic/S immunogenetically immunogenic immunogenically immunogenicity immunohematological immunohematology immunologic immunologist immunopathologic immunopathological immunopathologist immunopathology immunosuppression immunosuppressive immunotherapy immunotoxin/S immure/DGS immurement immutability immutably impala impalement impalpability impalpably impanel imparadised imparity impartable impartible impartibly impartment impassability impassably impassibility impassible impassibly impassivity impeachable impeachment impeccability impecuniosity impecunious/PY impellor impendent impenitence impenitent/Y imperate imperator imperatorial imperceptibility imperceptive/P imperceptivity imperfectivity imperforate/DS imperialistic imperialistically imperilment imperishability imperishably impermanency impermeability impermeably impermissibility impermissibly impersonality impersonator impertinence impertinency imperturbably impetrate/DGNSX impetuosity impingement implacability implantable implausibility implead implemental implosion/S implosive/Y impolitical/Y imponderability imponderably importable importancy importunity imposthume imposture impoundment impracticability impracticably imprecatory impregnability impregnably impregnator/S impressibility impressibly impressionability impressionably impressional impressionistically imprimis imprisonable improbability improvability improvable improvably improvidence improvisator improvisatorial improvisatory improvisor imprudence impudicity impugnable impuissance impuissant imputability imputable imputative/Y inadmissibly inalienably inamorata inanition inapparent inapplicably inapposite/PY inaptitude inaugurator/S inbreathe incalescence/S incalescent incandesce/DGS incantational incantatory incapability incapacitator incardination incarnadine incase incaution incendiarism incertitude incessancy inchoate/PVY inchoative/Y inchworm/MS incitant/S incitation inclinable inclinational inclip includable includible incog incogitant incognita incognito incommode incommodity incommunicative incommutably incompliant incompressibly incomputably incondite inconscient inconsecutive inconsequence inconsequent inconsequentiality inconsolably inconsonant inconsumable inconsumably incontestability incontestably incontinency incontinent incontrovertibly inconvincible incoordinate/N incorporeal incorrupt/DPY increate incrementalism incrementalist/S increscent incriminate/DNS incriminatory incross incrust incrustation incubational incubatory incudes inculcator inculpate/NV inculpatory incult incumbency incumber incunabulum incuriosity incurious/PY incurrence incurrent incurrer incurvate/DGNS incurvature incurve incus incuse indagate/N indagator indamine indecency indecorum indefatigability indefatigably indefeasibly indefectibility indefectible indefectibly indefinability indefinity indehiscence indehiscent indelibility indelicacy indemonstrable indention independency indescribably indestructibly indexical indican indicational indicatory indicia indictable indiction indictor indifferency indifferentism indifferentist indigen indigence indigene/S indign indigotin indiscrete indissociably indissolubly indite/DGR indivertible indivertibly individualistically indivisibly Indo Indochinese indocile indoctrinator Indoeuropean indole indomitability indomitably indrawn indubitability indubitably inducibility indue indult indurate/NV Indus indwell/GR inebriant inebriety inedible ineffability ineffably ineffaceability ineffaceably inelasticity inelegance ineluctability ineluctably ineludible inenarrable ineptitude inequivalve/D ineradicability inerrancy inerrant inertance inestimably inexhaustibly inexistence inexorability inexpiably inexplicability inexpugnable/P inexpugnably inexpungible inextinguishably inextricability infall infanta infantilism infantility infarct/D infarction infatuate/DX infaunal infectivity infector infecundibility inferrer inferrible infestant infiltrator/S Infiniband'M infinitival inflammably inflationism inflationist inflator inflictor inflorescence/S Informatica informatics informatory infract infractor infrahuman infrangible/P infrangibly infrasonic infraspecific infrastructural infrequency infundibular infundibulate infusoria infusorial infusorian ingather/G ingenue ingle ingratiatory ingress/V ingression ingressive/P ingrowing inguinal ingurgitate/N inhabitancy inhalational inhalator inharmonic inharmony inherence inhumanity inhumation inhume/DGS inimitably initialism initiatory initio injectant injector/S injunct inkhorn inkle inkstand inkwell inky/P Inman/M inmost innard innersole innerspring innervate/DGNS innervational innerve innkeeper/MS innocency innominate innovational innovatory innumerous inobservance inobservant inoculant inoculativity inoculator inoculum inoffensive/PY inoperculate inosculate/DGNS inositol inotropic inpatient inphase inpour inquisitional inquisitorial/Y inrush insalubrious insanitation insatiability insatiably insatiate/PY inscriptional inscriptive/Y inscroll inscrutably insculp inseam insectan insecticidal/Y insectifuge insectivore/MS insectivorous insectivory inseminator insentient insertional insessorial insetted inshore insinuator insipidity insistency insolate/N insole insolvably insoul inspan inspectorate inspectorship insphere inspirator inspiratory inspirit inspissate/DN inspissator instalment/S instancy instantaneity instar instate/G instauration instil/S instillment institutionalism institutor instructorship instructress instrumentalism instrumentality insufficience insufflate/DGNS insufflator insugently insulant insularism insuppressibly insurability insurable insurgency insurmountably insuror insurrectional insurrectionary insurrectionist insusceptibly intaglio integrability integrality integrationist integrator intellection intellectualism intellectualist intellectualistic intellectus intelligential intendment intenerate/N intentionality intepupillary interactant interactional INTERAMA interatomic interbrain interbreed intercalary intercellular/Y intercession intercessional intercessor intercessory interclavicle interclavicular intercolumniation intercommunion intercomputer interconversion interconvert interconvertibility interconvertible intercooler intercostal/Y intercrisis intercrop intercross intercultural/Y intercurrent/Y intercut interdenominationalism interdental/Y interdepend interdiction interdictor interdictory interdiffuse/N interdigitate/N interfacial interfascicular interferential interferogram/MS interferometrically interfertile interfertility interfile interframe interfuse/N intergeneric intergradation intergradational intergrade intergrowth interhemispheric interionic interiority interjectional/Y interjector interjectory interjudgment/MS interlacement interlaminate/N interlard interleaf interline interlinear/Y interlineation interlocal interlocution interlocutory interlope/DGRS interlunar interlunary intermarry intermeddle/R intermediacy intermediator/MS intermembrane intermetallic intermezzo intermit intermittence intermitter intermixture internality interne internecine internee internescine interneuron interneuronal internist internment internodal internode internuclear internuncial/Y internuncio interoceptive interoceptor interoffice interoperate/DGS interpellate/N interpellator interpenetrate/N interphase interplant interplead/R interpolator interpolatory interpretability interpretational interreligious interring interrogational interrogee/S interscholastic intersectoral interservice intersession intersex intersexual/Y intersexuality interspace interspecific interstadial intersterile intersterility intersubjective/Y intersubjectivity intertestamental intertidal/Y intertie intertill intertillage intertropical intertwinement intertwist interurban intervale intervalometer/MS interventionism intervertebral/Y interwar interweave/S interzonal interzone intima intimidator intimidatory intinction intine intitule intl intnl intonational intraarterial/Y intracardiac intracardial/Y intracellular/Y intracranial/Y intracutaneous/Y intradermal/Y intrados intraepithelial intragalactic intramolecular/Y intrans intransigeance intransigeant/Y intrant intraperitoneal/Y intrapersonal intrapopulation intrapsychic intrapsychically intraspecies intraspecific intraspecifically intrauterine intravascular intravital/Y intravitam intrazonal intreat intrench intrepidity intrigant intriguant intrinsical/P introgressant introgression introgressive introit introjection intromission intromit intromittent intromitter introrse/Y introspectional introspectionism introspectionist introspectionistic introversive/Y intrvascularly intsv intuit/G intuitionism intumesce intussuscept/V intussusception inulin inundator inundatory inurement inurn inutility inv invaginate/DGNS invaginated/U invalidator inveiglement invenit inventorial/Y inventress invercalt invertase investable investigational investiture inveteracy invictus invigorator/A inviible invincibility invincibly inviolacy inviscid invitatory invocational invocatory involucral involucrate involucre/D involucrum involutional involutionary inweave iodic iodin iodoamino iodocompounds iodoform iodophor iodoprotein iodopsin iodothyronines iodotyrosines iodous ione ionicity ionium ionospherically iOS iosola IOT iotacism iPad/M ipecacuanha iPhone/MS iPod/MS iproniazid ipsilateral/Y IQ IR/S Ira IRAF Iranian/MS iraqi Iraqi's Iraqis irascibility irascibly ireful irenaeus irenic/S irenically irid iridaceous irides iridescence iridescent/Y iridic iridosmine irina ironbound ironclad ironfisted ironhanded/PY ironhearted ironist ironmaster ironmonger ironmongery ironware ironweed irradiance irradiator irradicable irradicably irrationalism irrationalist irrationalistic Irrawaddy irreal irreality irreclaimable irreclaimably irreconcilability irreconcilably irreconciliable irrecoverably irrecusable irrecusably irred irredenta irreducibility irreformability irreformable irrefragability irrefragable irrefragably irrefrangible irrefutability irrefutably irreg irregardless irrelative/Y irreligion irreligionist irreligious/Y irremeable irremediably irremovability irremovably irrepealability irrepealable irreplaceability irreplaceably irrepressibility irrepressibly irreproachability irreproachably irresoluble irrespirable irresponsive/P irretrievability irretrievably irreversibility irrevocability irrigational irrigationists irrigator/S irrotational/Y irrupt/DGSV irruptive/Y Irvin/M Isaacson/M Isabella/M Isadore/M Isaiah/M isentropic Isis Islamabad/M islandia ism isoagglutination isoagglutinative isoagglutinin isoagglutinogen isoalloxazine isoantibody isoantigen isoantigenic isoantigenicity isobar isobaric isobutylene isochromatic isochron isochrone isochronism isoclinal/Y isoclinic isoclinically isogram/MS isolationist isolator Isolde/M isologue isomagnetic isomerase isomeric isomerism isomerous isometrical/Y isometry isomorphous isoniazid isonomy isooctane isophotal isophote isopiestic isotonically isotonicity isotopically isotopy isozyme isozymic issuable issuably issueless isthmic Istvan/M italianate Italianism itchy/P iterance iterant itineracy itinerancy itinerate/DGNS Ito/M itsy iud/S Iverson/M izaak jabber/DRS jabberwocky Jablonsky/M jabot jackal/MS jackanapes jackassery jacketted jacketting jackhammer jackscrew JACM Jacobi/M jacobite Jacobson/M Jacobus jacoby jacquerie jactitation Jaeger/M jagger jaggery jaggy jai jailbait jailbreak jailor Jaime/M jalousie jamb jambalaya jammer janis janitress Janos Jansenist/M japanned japanner japanning jape/GRS japery japonica jardiniere jarful jargonistic Jarvin/M java javanese jawbreaker jawline jaybird jazzman jeanne Jed/M jeepable jeeringly jell/DGS jello jellylike Jensen/M Jeres jerkin jerkwater jeroboam jessy jesuitic jesuitical/Y Jesuitism jesuitry jetbead jetport jetsam jettisonable jetty/DGS jeunes Jewell/M Jewett/M jib jibber/S jibbing jibboom jiff jigged jiggly/R Jimenez jimjams jingly jingo jingoes jingoish jingoism jingoist jingoistic jingoistically jink/S jinn jinni jinny jitney/S jiujutsu Jo/M jobbed jobber/S jobrel jocosity jocularity jocundity jodhpur/S jogger/S jogging Johanna/M Johnston/M joinable joinder joinery jointress jointure/DGS jointworm Jolla/M jollification/S jolty jouncy/R jour journalistically journeywork jow/Y jowly/R joyance jubilarian Judaica Judd/MRZ Judder/DGS judgmatic judgmatical/Y judgmentalism judoist Judson/M jugful jugged juggernaut/DGMS jugglery Jugoslavia jugular jugulum juiceless jujitsu jujutsu Jul julienne Julissa/M Jun junco junctional junctor Jung/M jungian jungly junkyard junto/S Jura/MS jural/Y jurassic jurat jure jurel juridic jurisconsult/S juristic juristically jussive/S juste justiciability justiciar justifiability justificative justificatory justment Jutland/M jutted jutty/DGS juvenescence/A juvenescent/A juvenilia juvenility juvenocracy juxtapositional kaftan Kahn/M kaiser Kajar/M kale kaleidoscope/DGS kaleidoscopic kaleidoscopical/Y kalmia Kalmuk/M Kamchatka Kamikaze/M Kampala/M Kampuchea/M Kane/M Kannada Kaplan/M kapok kaput Karachi/M Karamazov/M karateist Karlsruhe/M karma karmic Karp/M Karplus/M karyatid Kashmir Kaskaskia Katharine/M Katowice/M Kauffman/M Kaufman/M kava kayak/RS kayo/DG kebab/S Keck/M keddah keegan keelboat keelhaul keelless keelson keepsake/S keeshond kegful kegsful Kelsey/M kelts Kemp Ken/M Kendall/M Kennan/M Kenney/M Kenton/M Kenyon/M kerchieves kern kerne kernite kerosine Kerouac/M Kerr/M kerry kerygma Kessler/M kestrel ketch/S ketene keto ketogenesis ketogenic ketonic ketose ketosteroid ketotic kettledrum kewaskum kewaunee keybutton Keyes keyless keylogger/MS keyway/S Khartoum/M khrush kibble/DGS kibbutz kibbutznik kibe kibosh kickapoo kickshaw/S kickstand kickup/S Kidde/M kiddish kiddush kiddy kidskin Kieffer/M kiel kielbasa Kiewit/M Kigali/M Kikuyu/M Kilgore/M Kilimanjaro/M killdeer killebrew kiln kilo/S kilobar kilocalorie/S kilocurie kilocycle/S kilooersted kiloparsec kilorad kilt/R Kimball/M Kimberly/M kindergartner kindless/Y kine kinematical/Y kinescope/DS kineses kinesic kinesiology kinesis kineticist kinetin kinetochore kinetonucleus kinetoplast kinetoplastic kinetoscope kinetosome kinfolk/S kingfish kingmaker kingship kingside kingwood kinkajou/M Kinney/M kinnickinnic kinsey kinsfolk Kinshasha/M kinswoman Kiowa kip/S kipper/DGS Kirchner/M kirk kirkwood Kirov/M kirsch kismet kissable Kistler/M Kitakyushu/M kitchenware/S kith/G kithe/G kitschy kittle/DGRS kiva kivu kiwi/MS kiz kizzie klatch klatsch klauber Klawe/M kleptomania kleptomaniac kline Klux knackery Knapp/M Knauer/M knavery knavish/Y kneadable kneehole/S knickknack knifelike Knightsbridge/M knish knitter knitwear knobbed knobeloch knockabout/S Knossos knothole Knott/M knotter knotweed knout knoweth knowily knowledgeability knowledgeably Knowlton/M knucklebone/S knucklehead/D Kobayashi Kochab/M koine koinonia kola kolkhoz kombu konga konrad Konrad's kook kookaburra kookie/R kooky/PR kooning kopeck kopek Koppers Koran/M Kovacs Kovic/M Kowalewski/M Kowalski/M Kowloon kowtow kpc kraemer kraken Krebs kremlinologist kremlinology kretchmer Krieger/M Kristin/M Kronecker/M krummholz Kruse/M KS kudo kudu Kuhn/M kulak kultur Kumar/M kurdish kwashiorkor KY L'vov Laban/M labdanum labellate labellum labia labiate lability labium laborsaving labradorite labyrinthian labyrinthine laceless lacelike lacemaker Lacerta/M lacewing lacework lacey laches Lachesis lachrymal lachrymator lachrymose/Y laciniate/DN lackaday laconic/S laconically laconism/S lacrimal lacrimation lacrimator lactase lacteal lactic lactiferousness lactobionamide/S lactobionic lactobionyl lactogenic lactoglobulin lactone lactonic lacunal lacunar lacunaria lacunary lacunate lacustrine lacy/R ladanum laddie lade/U ladybird/MS ladybug/MS ladyfern ladyfinger ladykin ladylove ladyship lage lagger lagniappe lagomorph lagomorphic lagomorphous lagoonal Lagos Laguerre laguna Lahore/M laic laical/Y laicism Laidlaw/M laird/Y laitance/S lakefront lakeshore lakewood lakh laky lallygag lallygagged lam lama Lamar/M Lamarck lamasery lambast lambaste lambency lambent/Y lambert lambertian lambeth lambkill lambskin lamebrain/D lamella/S lamellae lamellar/Y lamellate/NY lamelliform lametedly lamia laminal laminaria laminarian laminarin laminator laminin lampoonery lamster Lana/M lanai lancelet Lancelot/M lanceolate/Y lancet/D lancinate/DGNSX landaulet landes landform landlocked landlordism landmass/S landowning landside landslip/S landsman landward/S lanesmanship Lang/M langeland Langmuir/M languishment languorous/Y langur Lanka/M lanolin lanuginous/P lanyard Lao laodicean laparotomy lapboard lapdog lapful lapidarian lapper lappet lapstrake lapstreak lapwing larcener larcenist larcenous/Y lardy lares largehearted largess larghetto largo/S Larkin/M larkspur larky/R larvicidal larvicide larynges laryngitis laryngology laryngoscope laryngoscopic lasagna lasagne lascar lase lassie/S lassitude/S lassoes Laszlo/M latchet latchkey latchstring lateen/R lateiner latened latening latensify/DNSX latera Lateran/M laterite lathery latices laticiferous Latinity latish latitudinarian latitudinarianism Latrobe/M latten latticework lattimer latus Latvia/M laudability laudable/P laudation/S laudative Laue/M Laughlin/M laughterful launderability launderette/S laundress laundryman laundrywoman laurate laureateship Laurent/M Lausanne/M lavabo lavage/D lavalava lavaliere lavalike lavallade lavalliere lavation lavational lavato lave/GR laveer laverock Lavoisier/M lawmaker lawny laxation layabout/S layaway layerage layette layover/S laypeople Layton/M laywoman laywomen laze/S lazyish LDL lea leachable leadeth leadless leadoff leadwork leady/R leafage leaflike leafstalk/S Leander/M leant leapfrogged leapfrogging Lear learnable leary leastways leastwise leasure leatherback leatherlike leatherwork lecherous/PY lecithin lecithinase lectern/MS lectin/MS lection/A lectionary lectureship lederhosen ledgy leeboard leeds Leeuwenhoek/M leftism legalese legalism legalist legalistic legalistically legateship legatine legator Legendre/M legendry legerity leges legionary legionnaire/S legis legislatorial legislatorship legislatress legislatrix legist legit legitimism legitimist legless legman legroom legwork Lehman/M lei/H Leibniz Leipzig/M lemke lemony Lemuel lemur lemures Len/M Lena/M lengthways lenience lenis lenitive/Y lenity Lennox/M Lenore/M lense lensless lenticulate/N lentissimo lento Leonid/M leopardess leotard/S lepidolite leprechaun/S leprotic leprous/PY lepton/MS leptospiral les lesbianism Lesotho/M lessee letch lethargic lethargically Lethe/M Letitia/M letted letterpress letup leu leucine leucite leucitic leucoma leukemoid leukocyte leukocytic lev/N levanter levator/S levatores leveeing levelheaded/P leveret Leviable leviathan/M levigate/DGNS levirate leviratic levitational Levitt/M levorotation levorotatory levulose Lew/M lewellyn lewisite lexica lexicality lexicographer/MS lexicography lexicostatistic/S ley liaise/DGS liana lib/R libationary liberace liberalist liberalistic liberationist/S libertarianism libertie libertinage libertinism libidinal/Y libra librae librarianship librate/N librational libratory Libreville/M libriform licating licensure licentiate licentiateship lichee lichenous licht/R lichtenstein lickerish/PY lickspittle lictor lidded lido/S lidocaine lieberman Lieberman's lief lierne lieutenancy lieve lifeful lifeline/S lifemanship lifesaver lifeway lifework liftable liftman ligamentary ligamentous ligate/DGNSX Ligget/M Liggett/M lighterage lightface/D lightfooted/PY lightful lighthanded/P lightheaded lightish lightless lightship lightsome/PY lightyear/S ligneous lignify/DGNS lignin lignitic lignocellulose ligulate ligule ligure likability likable/P Lila/M Lilian/M Lillian/M lilliput lilliputian Lilly Liman limba limbless limbus limeade limekiln limen limey liminal limitable limitary limitational limitative limitrophe limmer limn/GR limnetic limnic limnological/Y limnology limonene limonite limonitic limpet limpidity limpkin limpsy limulus limy/R Lin/M linac linage linate/DN linchpin/MS Lind/M Lindbergh/M Lindholm/M Lindquist/M Lindsay/M Lindsey/M Lindstrom/M lindy lineality lineament lineamental lineation linebacking linebreed linecaster linecasting lineolate/D lineprinter/MS linerless linesman linga lingoes lingonberry linguae linguine linguistical linguistician lingulate linin linkboy linkman linksman linkup Linnaeus linoleate linoleic linolenate linos lintel Linton linty linum lionhearted lionlike lipide lipidic lipless liplike lipolysis lipolytic lipped lippen Lippincott/M lipping lippy/R lipread/G Lipschitz Lipscomb/M liquate/DGNSX liquefactive/MS liquefiability liquefiable liquescent liquidator liquorice lira/S lire Lise/M lisle liss Lissajous lissom lissome/PY liste listel listenable listeriosis liston literalist literalistic literality literati literatim literator literatus litharge lithesome lithia lithiasis lithic lithically litho/S lithographic lithographically lithologic lithological/Y lithophane lithophyte lithophytic lithopone lithosol lithotomy Lithuania lithuanian litigable litotes litterateur litterbag littermate/MS littery liturgiologist liturgiology liturgist litz liveability liveable livelong liverish/P Liverpudlian liveryman lividity livlihood lixiviate/DGNS lizzy llama/MS llano/S lo/HS loach/S loanable loanword/MS lobar lobate/DNY lobbing lobbyer lobbyism lobbyist lobectomy lobelia lobeline loblolly lobo/S lobscouse lobsterman lobstermen lobulate/DN lobulose localism localite locatable loch lockable lockage lockbox locket lockies lockjaw lockstep lockstitch loco locoes locofoco locoism locomote/DGS locular loculate/DN locule/D loculus locution locutor lode loden lodestar Lodowick/M Loeb/M loess logbook loggets loggia loggie loggy logia logicality logistician lognormal/Y lognormality logogram/MS logogrammatic logograph logographic logographically logogriph logomachy logorrheic logotype logroll/GR logwood logy Loire Loki/M lollipop lollop lollygag lollypop Lomb/M Lombardy/M Lome londonderry longanimity longanimous longboat/S longbow longbowman longeron longevous longhair/D longhead/D longheaded/P longhouse longlegs longline longshoreman longshoring longsome/PY longspur longstreet longue longwinded loo looby/S Loomis looney loony/PR loosestrife lopper loppy/R lopseed loquat loran/S lorca lordling lordosis lordotic loreal Loren/M lorgnette/S lorgnon/S loricate/D Lorinda/M loris lorn/P lory losable/P losel lotharios lotos Lotte/M lotted lotting lotto Lou/M loudmouth/D lough Lounsbury/M loup/G loupe/G Lourdes lout/S loutish/PY Louvre loveable lovejoy lovelock/S lovemaking lovesick/P lovesome lowborn lowbred lowbrow Lowe/M lowermost lowery lowlihead lown Lowry/M lox/S loxodrome loxodromic/S loxodromically loy loyola LSI LTV lubber/SY lubberland/Z lubberly/P lube Lubell/M lubric lubrical lubricator lubricous lubritorium lucency lucien luciferous lucubrate/DGNSX lucubrator luculent/Y Ludlow/M ludmilla lues luetic luetically luggageless lugger lugubrious/PY Luis lukemia lum/X lumbago lumberjack/MS lumbian lumenal lumina luminaire luminal luminance luminesce/DG luminiferous luminist lummus Lumpur luncheonette Lund/M Lundberg/M Lundquist/M lune/S lunette lungfish lunisolar lunitidal lunker lunkhead/D lunt lunule luny lupanar lupulin lupus Lura lurdane Lusaka/M lusion lustihood lustra lustral lustrate/DGNSX lustrum luteal lutenist luteous lutetium lutihaw Lutz lux luxate/DGNSX Luzon/M lycanthropic lycanthropy lycee lyceum lychee lychnis lycidas Lykes Lyman/M lymphadenitis lymphatic lymphatically lymphoblast lymphoblastic lymphocytic lymphocytosis lymphoid lymphomatoid lymphomatosis lymphomatous lymphopoiesis lyndon lyonnaise lyophile lyophilic lyophobic lyotropic Lyra/M lyrate/DY lyrebird/MS lyrism lyrist lysate lyse/GS Lysenko/M lysergic lysimeter/MS lysimetric lysin lysine lysis lysogen lysogenic lysogenicity lysogeny lysolecithin lysosomal/Y lysosome lysozyme lytically Mabel/M macadam Macadamia macaque macaronic macaronically macaronies macaroon Macassar Macaulayan Macaulayism/S macaw/MS MacDougall/M Macdougall/M macerate/DGNSX macerator/S machete machicolate/N machinability machinate/DGS machinator machineable mackerel/S Mackey/M mackle/DGS macklin macle/D MacMahon/M macrame macroaggregate/D macrobiotic/S macrocephalic macrocephalous macrocephaly macrocosm macrocosmic macrocosmically macrocyte macrocytic macrocytosis macroeconomic macroevolution macroevolutionary macrofossil macrogamete macroinstruction macron macronucleus macronutrient macropathological macropathology macrophagic macrophyte macrophytic macroscale macroscopical macrostructural macrostructure/M maculate/DGNSX macule madded maddish Maddox Madeira Madhya madrigalian madrigalist madrilene madrona madrone Madsen/M madstone/S madwoman madwomen Mae/M maelstrom/MS maenadic maeterlinck mafia Mafiosi mafioso magazinism magazinist/S mage/MS Magellanic maggotry/S magicked magicking magill magisterium magistracy magistral/Y magistrateship magistratical/Y magistrature magma magmatic magna magnesian magnetitic magnetodynamo magnetoelectric magnetoelectrical magnetoelectricity magnetofluidmechanic/S magnetogasdynamic/S magnetogram/MS magnetograph magnetohydrodynamic/S magnetometer/MS magnetometric magnetometry magnetomotive magneton magnetooptic/S magnetooptical magnetoscope magnetosphere magnetospheric magnetostatic magnetostriction magnetostrictive/Y magnetron/S magnific magnifical/Y magnifico magniloquence magniloquent/Y Magnuson/M Magog/M magtape/S maguire/S magus maharaja/M maharajah maharanee maharani Maharashtra maharishi mahatma mahatmaism Mahayana Mahayanist mahler mahlstick Mahoney/M mahout maidenhead maidenhood maidhood maidish maieutic/S maieutical mailability mailbag/S mailboat/S maillot mailplane/S mailsack/S mainsail mainsheet maintop maisonette/S maitre/S maize/RSZ majestical majolica Majorca/M majordomo/S majorette/S majuscular majuscule makeable makebate makefast makepeace makeshifty makeweight mako/S mal Malabar/M malachite malacologic malacological malacologist malacology malacostracan maladaptation maladminister maladministration Malagasy/M malamud malamute malapert/PY malapportioned malapportionment malappropriate/DGS malapropian malapropos malar malarian malariated malariologist malariology malarkey malate malathion Malawi/M malaxate/DGS malconduct malconformation Malden/M maldevelopment maldistribute/N Maldive/MS maledictory malefaction malefic maleficence maleficent malemute malentendu malfeasance malgovernment Mali/M malic maliferous malignance malignity malinger/DR malism malleability mallemuck malleus mallow malmsey malolactic Maloney/M malposition malpractitioner Malraux maltase Malthus maltobionic Malton/M maltose maltreatment maltster malty malvasia malvasian malversation malvoisie mammalogist mammalogy mammary mammer mammillar mammillary mammillate/D mammock mammography mammon mammonism mammonist mammonite mammy/S mana manacle/DGS manageability manageably managemental manageress managership manchet Manchuria mancipation mancipatory manciple/S mandala mandamus mandarinate/S mandarinic mandarinism mandatary/S mandator mandatorial mandibular mandibulate mandola mandolinist/S mandorla mandragora mandrel mandril mandrill manducate/DGS manege manful/PY manganate manganesian manganic manganite manganous mange mangel mango/MS mangrove mangy/PRY manhandle/DGS manhunt/S manically manicotti manifestant manifesto/DGMS manifestoes manioc manipular manitowoc mankowski manless Manley/M manlike Mann/M mannerist manneristic mannerless mannikin mannish/PY mannitic mannitol mannopyranosyl mannosyl manometric manometrical/Y manometry manorialism manque manrope/S mansard/D manse manship manslayer mansuete mansuetude mantelet mantelpiece mantelshelf mantic mantis/S mantra mantua manubrium manuduction manuductory Manuel/M manufactory manumission manumit manumitted manumitting manurial manuscriptal manward/S manwise manyfold manzanita maplecrest mapmaker/S mapmaking mapper mappery mappist/S maquillage maquis Mar marabou maraschino marasmic marasmus maraud/GS marbly Marbury Marc/M Marceau/M Marcel marcelled marcelling Marcello/M marchesa marchese marchioness marchpane Marcia/M Marco/M marconigram/MS marcotte margarita Margery/M marginate/DGNSX mariachi marimba marish marjoram Marjory/M markdown marketwise Markham/M Markism/M markovitz markswoman markswomen markup/S marl marline marmoreal/Y marmorean marmoset/MS marmot marplot marque/A marquet marquisate marquise marquisette marrowfat marrowless marrowy marse marshalcy marshalship marshmallowy marshy/PR marsupial/MS marsupium martensite martensitic martensitically martinet martlet Martonosi martyrologist/S martyrology/S martyry Marxian marzipam marzipan maskable masochism masochistic masochistically massbus masseter masseteric masseur/S masseuse massicot massif/S massy mastectomy/S mastership mastersinger/S masterstroke/S masterwork masthead mastic masticate/DGNSX masticator/S masticatory mastitic mastodonic mastodont mastoid mastoidectomy mastoideus mastoiditis masturbational masturbatory matador matchboard/G matchlock matchwood matelote Mateo/M materfamilias materialist materialistically materiality materiel/M matey matinal matins matriarchate matriarchy matric matricidal matricide matriculant matrilineal/Y matroid matronymic Matson/M Matsumoto/M matt matte mattei mattery mattie mattock Mattson/M matutinal/Y matzo/S maude maudlinism/S maugre mauricio Maurine/M Mavis maxi maxilla/S maxillae maxillary maxilliped maxillipede maximalist May mayapple mayflower mayfly Mayo/M mayoralty mayoress maypole mayst mazy mazzard Mcadams Mcallister/M Mcbride/M Mccabe/M Mccall/M McCallum/M Mccallum/M McCann/M Mccann/M Mccarthy/M McCarty/M Mccarty/M Mccauley/M Mcclain/M Mcclellan/M Mcclure/M Mccluskey/M McConnel/M Mcconnel/M Mcconnell/M McCormick/M Mccormick/M Mccoy/M Mccracken/M McCullough/M Mccullough/M Mcdaniel/M Mcdermott/M Mcdonald/M Mcdonnell/M Mcdougall/M Mcdowell/M McElroy/M Mcelroy/M Mcfadden/M Mcfarland/M Mcgee/M Mcgill/M McGinnis Mcginnis Mcgovern/M McGowan/M Mcgowan/M Mcgrath/M Mcgraw/M Mcgregor/M Mcguire/M McHugh/M Mchugh/M Mcintosh/M Mcintyre/M Mckay/M Mckee/M McKenna/M Mckenna/M Mckenzie/M McKeon/M Mckeon/M Mckesson/M Mckinley/M Mckinney/M Mcknight/M McKusick/M Mclaughlin/M Mclean/M Mcleod/M McMahon/M Mcmahon/M Mcmillan/M McMullen/M Mcmullen/M McNally/M Mcnally/M Mcnaughton/M Mcneil/M McNulty/M Mcnulty/M Mcpherson/M MDs mea/H meadowlark/MS meagre mealie mealymouth/D mealymouthed/PY mealymouthedness/S meandrous measurability measureless meatball/S meatman meatmen mech mechanician mechanistically mechanoreceptor mecholyl mecum medallic Medford/M mediacy mediad mediae medial/Y mediant mediational mediatorial mediatorship mediatory mediatress/S mediatrice mediatrix medicable medicably medicaid medicament/DGS medicamentous medicare medicinable medicolegal medievalise/S medievalism/MS medievalistic/S meditator mediumship medlar/S medulla medullary medullated medusae Medusan medusoid meerschaum megabuck megacycle megagamete megagametophyte megakaryocyte megakaryocytic megalith megalithic megaloblast megaloblastic megalomaniacal/Y megalomanic megalopolis megalopolistic megalopolitan megalopolitanism megalopteran megalopterous megaparsec megaphonic megapolis megapolitan megarians megascopic megascopically megasporangium megaspore megasporic megasporogenesis megasporophyll megillah megrim/S Meier/M Meiji meiosis meiotic meiotically meister Melampus melancholia melancholiac melancholic melancholically melanic melanism melanist melanistic melanite melanitic melanoblast melanoblastic melanoblastoma melanochroic melanocyte melanogenesis melanoid melanophore melanosis melanotic melatonin Melcher/M melic melies meliorator meliorism meliorist melioristic mell melliferous mellifluent/Y mellifluous/PY mellitin mellophone melodist melodramatically melodramatist Melpomene/M meltability meltable meltdown/M meltwater/S membranal membraneless membranous/Y meme memorably/U memorialist memoriter menarcheal mencken menckenese mendable Mendel/M Mendelian mendicancy/S mendicant/S mendicity/S mendoza menhaden menhir meningeal meninges meningitic meningococcal meningococcic meninx menisci meniscus/S menominee menopausal menorah Menorca menorrhagia menorrhagic mensal mensch mense menseful menseless menservants menstruous menstruum mensurability mensural mensurational menswear mentalist mentation/S menthol mentholated mentorship mentum Menzies meow/DGMS mephitic mephitis mercantilism mercantilist mercantilistic mercery merchantable merchantman merchantmen Merck/M mercurate/DGNSX mercurous merganser mergence/S meridional/Y merino meristically meriwether meroblastic meroblastically merocrine meromorphic meromyosin merrick merrimac Merritt/M merrymaker merryman merrythought Mersenne/M Mervin/M mescal mesdames mesdemoiselles meseems mesenteric mesenteron meshwork meshy mesial/Y mesic mesically mesmerically mesmerism/S mesmerist/S mesne mesoblast mesoblastic mesocarp mesoderm mesodermal mesodermic mesomerism mesomorph mesomorphic mesomorphism mesomorphy mesonephric mesonephros mesonic mesopause mesopelagic mesophase/S Mesopotamia mesosome mesosphere mesospheric mesothoracic mesothorax mesothorium mesotron mesotronic mesotrophic messaline messiahship messianic messianism messuage/S mestizo metabole metabolically metacarpal metacarpus metacentric metachromatic metadata/M metaethical metaethics metagalactic metagalaxy/S metagenesis metagenetic metagenetically metagram/MS metalicity/MS metallically metallike metallist/S metallographer metallographic metallographically metallographist metalloidal metallurgist metalware metamathematician metamathematics metamere metameric metamerically metamerism metamorphically metanephric metanephros metaph metaphase metaphysician metaplasia metaplasm metaplasmic metaplastic metaprotein metapsychological metapsychology metasomatic metasomatically metasomatism metastability metastable metastably metastasis metastatic metastatically metatarsal/Y metatarsus metate metathesis metathetic metathetical/Y metathoracic metazoa metazoal metazoan Metcalf/M metempsychosis metencephalic metencephalon meteorically meteoritical meteorograph meteorographic meteoroidal meteorol meteorologic meteorologicaly methacrylate methadon methadone methamphetamine methanolic metheglin methinks methionine methodic methodistic methodologist methought Methuen/M methylal methylamine methylase methylate/DN methylator methylcholanthrene methylic methylnaphthalene methylphenidate meticulosity metier metis metonym metonymic metonymical/Y metonymy metope metopon metrazol Metrecal metrication metrist metrological/Y metrologist metrology metronomic metronomical/Y Mets Metzler/M mewl mezuza mezuzah mezzanine/S mezzotint miasmatic miasmic micaceous micellar micelle/MS Michel/M Michele/M micra microampere/S microanalyst microanalytical microanatomical microanatomy microbarograph/S microbe/MS microbeless microbic microbiologic microbiological/Y microbiologist microbiology microbus microcalorimetric microcephalic microcephaly microcircuit/S microcircuitry microcirculation microcirculatory microclimate/S microclimatic microclimatological microclimatologist microclimatology microcline/S micrococcal micrococcus microconsumer microcontroller microcopy/R microcosmic microcosmically microcrystal microcrystalline microcrystallinity microcyte microcytic microdensitometer/MS microdensitometric microdensitometry microdissection microdomain/S microelectrode microelectronic/S microelectronically microelectrophoresis microelectrophoretic microelectrophoretical/Y microelement microencapsulate/N microenvironment microenvironmental microevolution microevolutionary microfarad/S microfauna microfaunal microfibril microfibrillar microfiche/S microfilaria microfilarial microfine microflash microflora microfloral microform microfossil microfungal microfungus microgamete microgametocyte microgram/MS micrograph/RSZ microgroove microhabitat microhardness microinch microinjection microlith microlithic micromania micromanipulation micromanipulator micromere micrometeorite micrometeoroid micrometeorological micrometeorologist micrometeorology micromethod micrometric micrometry micromicrofarad/S micromicron microminiature micronuclear micronucleate micronucleus micronutrient/S microorganic micropaleontologic micropaleontological micropaleontologist micropaleontology microparasite/S microparasitic microphage microphonic/S microphotograph/R microphotographic microphotography microphotometer/MS microphotometric microphotometrically microphotometry microphyll microphyllous microphysical/Y microphysics micropipet micropipette microplankton micropore microporosity microporous microprint microprobe microprogrammable microprojection microprojector micropulsation micropump micropylar micropyle microradiograph microradiographic microradiography microreader microrelief microreproduction microscale microscopist microsection microseism microseismic microseismicity microsome/S microspectrophotometer/MS microspectrophotometric microspectrophotometrical/Y microspectrophotometry microsphere microspheric microsporangium microspore microsporic microstate microstructural/Y microstructure/S microsurgery microsurgical microtechnic microtechnique microtome/S microtonal/Y microtonality microtone/S microtubular microtubule/S micturate/DGS micturition/S midafternoon midbrain midcapacity midcourse midden/S middlebrow/S middlebrowism middorsal middy/S midfield/R midget midgut midline midmost midplane midportion midrash midrashic midrashim midrib midribbed midsemester midsole midsummery midtown midwatch/S midwifery midwing midwintry midwived midwiving mig/S mightless mignonette migraine/S migrainous migrancy migratetic/S migrational migrationist/S migrator migratorial mikado mikhail mikoyan mila milacre milady milanese milch mildewcide mildewproof mildewy mildhearted mildish milepost milesian milfoil/S milia miliaria/S miliarial miliary milieux milinch militance/S militancy/S militaristic militaristically militaryism/S militiaman milium milkless milklike milkman milkmen milksop milksopping milksoppy milkstone millable millage millboard millcourse milldam millenary/S millennial millerite millesimal/Y millhouse milliammeter/MS milliard milliary millibar millibarn millicron millicurie millicycle millidarcy millieme/S milliequivalent millifarad milligal millihenry millihertz millihg Millikan millilambert millilux millime millimetric millimicrofarad/S millimicron millimicrosecond millimolar millimolarity millimole milline/R Millington millionairedom millionairess millionary millionfold milliphot millipoise millirad milliroentgen millman millmen millowner millpond/S millrace/S millsite millstream/S Milne milord milquetoast/S milt/R Miltonian Miltonism Miltonist mim MIME mimetism mimical mimicry mimosa min minable minaret/DS minatory mincy Mindanao/M mineable minestrone minesweeping mingy miniaturist/S miniaturistic minibus/S minicam minicamera minicar minicartridge minikin minim minimalism ministrable ministrant ministration minitrack minium Minos minot Minot's Minotaur/M minous Minsk/M Minsky/M minster minstrelsy mintage minuscular minutia minutial minx/S miocrystalline mioses miosis miotic MIPS mirabilite miracular miraculism/S miraculist/S mirate/DGNSX Mirfak/M mirky mirrorlike mirrory mirthful/PY miry misaddress/D misadjustment misadventurous misadvise misaim misalliance misally misandry misanthropically misanthropism misanthropist/S misanthropy misappreciate/N misapprehend/DGS misapprehending/Y misapprehensive/PY misappropriate/NS misarranged misarrangement misarray misascription misassignment misattribution misbecome/G misbeget misbehadden misbeholden misbelief misbelieve/GR misbelieving/Y misbeseem misbestow misbirth misc miscalculate/GS miscalculator miscall/R miscast/GS miscegenational miscellanea miscellaneity miscellanist/S mischance mischiefful miscibility miscible misclassify/X miscomprehend miscomprehension misconceit misconceive/DGRS miscontent miscontentment miscook miscopy miscorrect/D miscounsel/D miscreance/S miscreate/NV miscreator misdate misdeal/G misdeem/S misdeliver/D misdelivery misdemean misdescribe misdescription misdescriptive misdo/GR misdoubt miseducated miseducation misemphases misemphasis misemploy misemployment misericorde mises misesteem misfeasance misfeasor misfeed misfile/DGS misgive/S misgovern misgovernment misguidance mishandle/DGS mishear mishmash misimpression misimprove misinformative misintelligence misinterpretable misjoinder misknow/S misknowledge mislabel mislay/GS misleared mislike mismachine mismanagement mismarriage mismate misogamic misogamist/S misogamy misogynic misogynistic misologist misology misoneism misorder misperception/S misplay mispleading mispoint mispraise misprision/S misprize/DGS mispunctuate/N misquotation misreckon misrecollect misrecollection misregister misregistration misreport misrepresentative misrule/DGRS missend misshape/S missileer/S missileman missilemen missilery missilry missionate missort missout misspeak misspend/DGRS misstrike misterm mistful misthink mistime/D mistrain mistranslate/N mistrustful/PY misusage misvalue misventure miswrite/GS mitch miterwort mitigator/S mitigatory mitochondria mitochondrion mitogenesis mitogenetic mitogenic mitoinhibitory mitosis mitotic mitotically mitral mitt/DS mittimus mixable mixologist/S mixology Mizar/M mizzenmast mizzle/DGS mizzly mlea MN MO moanful/Y mobbish/PY mobbism mobocracy mobocrat mobocratic mocha mockernut moderationist moderatism moderato moderatorship modicity modificative modiste modulability modulatory moduli Moe/M Moen/M Mogadiscio Moghul mogul mohair Mohammedanism mohm Mohr moil/GR moiling/Y Moiseyev/M moistureless molality molarity moldable Moldavia molecularity moleskin/S molestation/S molluscan molluskan Moloch molotov molto molucca Moluccas moly molybdate molybdic molybdous momental momentaneous Mona/M monachal monachism monadism monandrous monandry monarchal monarchial monarchical/Y monarchism monarchist/S monarchistic Monash monasterial monastical/Y monatomic monde mondrian monel moner monestrous monet moneybags moneylender moneylending moneyless moneymake/R moneywort monger/DGS Mongolianism mongolism mongoloid mongrel/PY mongrelism monic monicker monied moniker monilia monish monism monist monistic monistical monition/S monitorial/Y monitorship monitory monitress monkery/S monkeyflower monkeyshine monkhood Monmouth/M monoacid monoacidic monoamine Monoceros monochasial monochromat monochromatically monochromaticity monochromatism monochromic monochromist monocline monocoque monocracy monocrat monocratic monocultural monoculture monocycle monocyclic monocycly monocyte monocytic monodisperse monodist monodrama monodramatic monoecious/Y monoecism monoenergetic monoester monofilament monofuel monogamic monogamist/S monogastric monogenean monogenesis monogenetic monogenic monogenically monogerm monogram/MS monogrammatic monographic monographical monography monogynous monogyny monohybrid monoid monolayer monologuist monomania monomaniac monometallic monometer/MS monomolecular/Y monomorphemic monomorphic monomorphism monomorphous Monongahela/M monophonically monophony monophthong monophthongal monophyletic monophyletism monoplane monoploid monopodial/Y monopolist monopolistically monopropellant monopsony monopulse monosaccharide/S monosomic monostat monostatic monosyllabically monosyllabicity monosymmetric monosymmetry monosynaptic monosynaptically monotheist monotheistical/Y monotint monotrematous monotreme monotrichous monotype monotypic monovalent monovular monoxide monozygotic monsoonal monstrance/S montaigne monte Montenegrin/M Monteverdi/M monticule Montmartre/M Montrachet/M monumentless mooch/GRS moola moolah moonbeam/MS moonbow mooncalf mooneye moonish/Y moonless moonlet moonquake moonrise moonscape moonseed moonset moonstone moonstruck moonward moony moorage mopper moppet morainal morainic moralism moralistically Moran/M morassy moray mordacious/Y mordacity mordancy mordent morehouse morel Moresby/M moresque morganatic morganatically morganite moribundity Morley/M moron moronically moronism moronity morosity morph morphinic morphinism morpho Morrill/M Morris Morrissey/M mort mortarboard mortem mortgagor/S mortimer mortise/G mortmain mortuary/MS mosaically mosaicism mosaicist moscone Moser/M mosey/DG mosquitoey mossback/D mosslike mot/S motet mothball motherhouse motherless/P mothproof/R motile motility motivic motivity motoneuron motorbike motorboat/GR motorcade/MS motorcyclist motordrome motoric motorically motorless motortruck motorway moulage moulin/S moult Moulton/M mountaintop/MS mountainy mountebank mountebankery mousetrap mousey moussaka mousse mouthlike mouthpart mouthy/R Mouton movability/A movably/A moveless/PY moviedom moviegoer moviemaker mown moxie Moyer/M Mozillian/MS mozzarella MPAA MPAA's Mpc MRI Mt MTU mu muciferous mucilaginous/Y muckrake/GR mucosa mucous Mudd/M mudded mudhole/MS mudsill mudstone/S Mueller/M Muenster muezzin mufti/S mugged mugger mugho mugwump muhammad Mukden/M mukluk muley muliebrity mullein mullet/S mullion mullite multiaperture multicavity multicellularity multichip multicollector multicompletion multicoupler multicycle multideck multielectrode multiengine multifactorial multifactrially multifarious/PY multifold multiform multiformity multihued multilane/D multilayer/DS multilingualist multimeter/MS multinucleate/D multipactor multiparous multipartite multiphase multiphasic multiphastic multiplicable multiplicate/S multipolar multipolarity multipronged multiracial multiracialism multisectoral multisegment multistatic multistory multithread/DGS multivalence multivalued multivolume/D mummer mummery mumming mump/RS mundt mung munificence munist munroe Muong/M muonic muralist murderee murderess muriate murmurous/Y murrain murre murrey murrow muscadine muscatel muscly muscularity musculoskeletal musee musette/S musicale musketeer musketry muskie/RS musky/PRS mussy/PRY mutably mutafacient mutagen mutagenesis mutagenic mutagenically mutagenicity mutandis mutase mutatis muticous mutilator mutine/DG mutinous/PY muttonchops muttony mutualism mutualist mutualistic mutuel muumuu Muzo/M muzzy/PRY mycobacteria mycoplasma mycorrhiza mycosis mycotic myel myeline myeloid Mynheer myocarditis myofibril myoglobin myopically myosin myosotis myotic myotome myotonia Myra/M myriameter/MS myriapod myriopod myristate myrmecological myrrh Mysore mystagogy mythmaker mythmaking mythologer mythologic mythologist mythomania mythomaniac mythopoeic mythopoetic mythopoetical mythos nacelle nacreous Nadine/M nagger Nagoya/M Nagy/M naiad Nair/M naivety nakamura Nakayama nakoma namable nanny/S nanogram/MS nanook napalm nape/S napery naphthalene naphthalenic naphthene naphthenic naphthol napless napper nappy/RS Narbonne/M narc narcism narcissi narcissism narcist narcolepsy narcoleptic narcos narcotically Narragansett/M narrational narrowminded narwal narwhal/MS nascence/A nascency nastic natant natation/S natatorial natatorium natatory nate/S Nate's nationalistically nativism nativist nativistic naturalistically naturam naturopath nauseant nauseous/PY nauseum naut navaho nave/S navicular navigability navigably navona navtas naw nawab nazify/DGNSX NC NCO NE neath nebbish Nebuchadnezzar/M nebulosity necessitarian necessitarianism necessitous/PY neckerchief necrological necrologist/S necrology necromantically necrophagia necrophagous necrophagy necrophilia necrophilic necrophilism necropolis necroses nectareous nectarine Ned/M needlelike needlewoman needlewomen nefarious/PY Neff/M negational negativist/S negativistic negaton negatron neglectful/PY negligibility negligibly negotiability negotiator/S negotiatory negrophile negrophilism Nehru/M Neil/M Nell/M Nellie/M Nelsen/M nematicidal nematicide nematocyst nemeses nemophila neo neoanthropic neoclassicism neoclassicist neocosmic neofascism neogenesis neogenetic neoglycolipid/S neoliberalism neolith neological neologistic neology neonate neoorthodox neoorthodoxy neoplasia neoplasm neoplastic neoplasticism neoplasticist/S neostigmine neotenic neoteny neoteric neotype nepenthe nepenthean nephanalysis nepheline nephelinic nephelinite nephelinitic nephelite nephelometer/MS nephelometric nephelometry nephometer/MS nephoscope nephrectomy nepotism nepotist/S nepotistic nereid nervation/S nervosity nescience/S nescient Ness NetApp nethermost netkeeper netless netlike netter netty neumatic neuralgic neuritic neuroanatomic neuroanotomy neuroblastoma neurochemistry neurocirculatory neuroendocrine neuroepithelial neurofibril neurofibrillary neurogenic neurogenically neuroglia neuroglial neuronic neuropathic neuropathically neuropathy neuroscience/M neurospora neurosurgeon neurosurgery neurosurgical neurotically neuroticism neurotoxic neurotoxicity neurotoxin neurotropic neutercane neutralistic neutronium neutrophil/S neutrophile neutrophilic neutrophilis Neva/M neve/Z nevermore Nevins nevus Newbold/M newbury newfangled/P newish newsagent/S newsbreak newsless newsmagazine newsmonger newsprint newsroom newsy/PR Nguyen/M NH niacin Niamey/M nib/S Nibelung nibelungenlied niccolo Nicholls nickelic nickeliferous nickelodeon nickelous nicklaus nicknameless Nicosia/M nicotinamide nicotinic nidification nidifugous nietzschean Niger/M nigger nightclothes nightclubber nightglow nightie/S nightlong nightshade nightside nightstand nightstick nighttide nightwalker nighty/S NIH nihilianism nihilistically nihility nijinsky Nikko/M Nikolai/M nill nilmanifold nimbostratus NIMH nimiety nimming nincompoop nincompoopery ninebark ninepin/S ninetyfold Nineveh ninny/S ninnyhammer nipper/S nippy/PRY nisei/S nite nitid nitrator nitrify/NX nitrile nitro/S nitrobenzene nitrocellulose nitrocellulosic nitrofuran nitroglycerin nitroparaffin nitrosamine nitrosoamine nitty nitwit nitwitted NJ NM NMR NNE NNW nobble/DG nobby/R noblewoman nocent noces nociceptive nock/G noctambulation noctambulism noctambulist nocturn nocuous/Y nodality nodder noddle noddy/S nodi nodical nodose nodosity nodulation nodus noes Noetherian noetic nog noggin nogging nohow noisome/PY Nolan/M Noll/M nolo noma nomadism nomenclator nomenclatorial nomenclatural nomic nomina nominalism nominalist nominalistic nominator/S nomogram/MS nomograph/R nomographic nomographically nomography/S nomological nomology nomothetic nonacknowledgment/MS nonage nonagenarian nonagon nonallelic nonbank nonbook noncalcareous nonce nonchalance noncharitable noncom nonconcurrence nonconcurrency noncondensing nonconducting nonconductor/S nonconfidence nonconform/GR nonconformable nonconformably nonconformance nonconformism nonconformity noncooperation noncooperationist noncooperative noncooperator noncrossing noncurrent nondeductibility nondeductible nondeforming nondegenerate nondemocratic nondestructive nondirectional nondirective nondisjunction nondisjunctional nondistinctive nondivided nondormant nondramatic nondrying noneconomist nonelectrolyte nonentity/S nonesuch noneuclidean nonfat nonfeasance nonfictional nonfigurative nonflammable nonflowering nonfragmenting nongovernment nongovernmental nonillion nonimpact nonimpinging noninductive nonintersecting nonintervention noninterventionist noninverting noninvolvement nonjoinder nonjuring nonjuror nonlinguist nonliterate nonloaded nonmatching nonmetal nonmoral nonmultiple nonnucleated nonobjective nonobjectivism nonobjectivist nonobjectivity nonobservance nonoccurrence nonparallel nonparametric/S nonpareil nonparticipant nonparticipating nonparticipation nonpartisanship nonpast nonpaternity nonpathogenic nonpermanent nonpersonal nonplus/S nonpolar nonporous nonpositive nonpossession nonpossessor nonprint/G nonproducer nonproductive/PY nonprofessional/Y nonprofitable nonprogressive nonpros nonprossed nonprossing nonprotein nonreactive nonreader nonrealistic nonreclosing nonrecording nonregulation nonreimbursable nonrelativistic nonreligious nonremovable nonrenewable nonrepresentational nonrepresentationalism nonrepresentative nonresidence nonresidency nonresistant nonrestraint nonrestricted nonrestrictive nonretractable nonreturnable nonrigid nonscheduled nonscientific nonseasonal nonsecretor nonsegregated nonsegregation nonsignificant/Y nonskid nonslip nonsocial nonspecific nonsporting nonsupport nonsyllabic nonsynchronous nontemporal nontenure nonunion nonuse/R nonviable nonviolence nonvolatile nonworker Nora/M Nordhoff/M Nordic Nordstrom/M Noreen/M Norgay/M normotensive northeasternmost northeastward/S Northridge/M Northrop/M Northrup/M northwestward/S nosebag/MS nosegay nosepiece nosey/G nosh/R nosologic nosological/Y nosology Nostrand/M nostrum nota notability notarial/Y notarius notecase noteless notepaper notional/Y notionality notocord nougat nouncing nous Nov novaculite novae Novak/M novelette novelettish novelistic novella novelle novemdecillion novena novocaine Novosibirsk/M nowaday noway/S nowhither nowise noyes NRC NTFS NTIS nu nub nubbin nubble/S nubbly Nubia/M nubility nucellar nucelli nucellus nuchal nucleant nuclease nucleator nuclein nucleocapsid nucleolar nucleon/MS nucleonic/S nucleophile nucleophilic nucleophilically nucleophilicity nucleoplasm nucleoplasmatic nucleoplasmic nucleoprotein nucleoside nucleosynthesis nucleotidase nuclidic nudibranch nugent nullificationist nulliparous numberable numbskull numia numis numismatically nummular numskull nunciation nunciature nuncupate/NV nunes nunnery nuovo nuptiality nursemaid nurserymaid nurseryman nursling nurtural nurturant nutational nuthatch nutlike nutria nutriment nutted nutting nux NV NVRAM NW NY NYC nymphal nymphalid nymphet nymphette nympholepsy nympholept nymphomaniacal Nyquist/M nystagmic nystagmus NYT NYU o'er O'Neill/M oafish/PY oarsman oarsmanship oatcake/MS obbligato obcordate obeah obeisance obi objectionably objectivism objectivist objectivistic objectless/P objurgate/DGNSX objurgatory oblast obligator obligee obligor/S obliquity obliterator obliviated obliviates obliviating oblongatal oblongated oblongish obloquious obloquy obnubilate/DGNSX obovate obovoid obscurant obscurantic obscurantism obscurantist obscuration/S obsessional/Y obsolesce obstetric/S obstetrical/Y obstetrician/MS obstreperous/PY obstructionism obstructionistic obstructor obstruent obtainability obtainment obtect/D obtest obtestation obtrusion obtund obturate/DGNS obturator obvert occas occiput occludent occlusal occultation/S occultism occultist occurrent oceana oceanarium oceanfront oceangoing Oceania oceanographer/MS oceanographical/Y oceanologic oceanological/Y oceanologist oceanology ocellar ocellate/DN ocelli ocellus och ochlocracy ochlocrat ochlocratic ochlocratical oconomowoc ocotillo Oct octadecyl octahedra octahedral/Y octameter/MS octandrious octant/MS octodecillion octodecimo octoploid octoploidy octopod octopodan octopodous octosyllabic octosyllable octroi oculomotor odalisque oddball/MS oddment odea odeum odic odilo Odin odograph odontologst odontology odorant oedipal oeillade oenology oenomel oersted oeuvre/S offcast officialese officialism officiant officiary offish/PY offprint/S offsaddle offscour/G offscreen offside ofttimes ogeographically ogle/GRS ogre ogreish ogress ohmage ohmically oilcan oilskin oilstone oink Ojibwa okamoto okapi okra olasticism Olav/M oldfangled oldie oldish Olduvai oleaginous/PY oleaster oleate olefin oleg oleophilic oleophobic olfaction/S olfactive olfactology olfactometer/MS olfactory/Y oligarch oligarchical Oligocene oligochaete oligoclase oligomer/MS oligosaccharide/MS Olin/M Olivier/M olivine olympiad om/R ombudsman/M ombudsperson omelette omental omentum omissible ommatidial ommission omnidirectional omnifarious/PY omnificence/S omnificent omnify omnipotency omnipresence omnirange omnisciency omnist omnivorous/PY onanistic oncogene/MS oncogenic onefold oneiric oneirocritic oneirocritical/Y oneiromancy onionskin onium onload onlooking onomastic/S onomatology onomatopoeia/M onomatopoeic Onondaga/M onsetting onshore onside ontically ontogenesis ontogenetic ontogenetically ontologist oocyte oomph oozy/R op/GS opalescence/S opaline openability openable/U openendedness openhanded/PY openhearted/PY openmouthed/PY openwork operability operably operatically operationalism operationalist operationalistic operationism operationist opercular operculate/D operculum operettist operon ophidian ophiology ophiophagous ophite ophitic Ophiucus ophthalmologically ophthalmoscope ophthalmoscopic ophthalmoscopical ophthalmoscopy opinionate/V opinionative/PY opportunist opposability opposeless oppositional opprobrious/PY oppugn/R opsonic opsonin optative/Y optician optima optimistical optimo optoacoustic optoisolate optokinetic optometrical opuntia opuscule opusculum ora orach orache oracular/Y oracularity orality orangeade orangeroot orangery orangewood orangey orangish orangoutan orangy oratio oratoric orbicular/Y orbicularity orbiculate/Y orca/MS orch orchardist orchardman orchesis orchestrational orchestrator orchestre orchis ordainment orderless ordinand ordines ordure Oresteia/M Orestes organdie organelle organicism organicist organismal organismically orgasmic orgastic orgiastically orgulous orientable orientalism orientalist orientate/DGS orientational/Y orienteering orificial oriflamme origanum Orin Orinoco Orion/M orismological orismology orison Orkney/M Orly orney ornith ornithic ornithine ornithology/M orogenic orogeny orographical/Y Orono/M orotund orotundity Orphically Orr/M ort/S orthant orthicon ortho orthocephalic orthocephalous orthocephaly orthochromatic orthoclase orthoclastic orthodontia orthoepic orthoepical/Y orthoepist orthoepy orthogenesis orthogenetic orthogenetically orthogenic orthognathism orthognathous orthognathy orthograde orthographical/Y orthopsychiatric orthopsychiatrist orthopsychiatry orthopteran orthopterist orthopteroid orthopteron orthorhombic orthoscope/S orthoscopic orthotic/S orthotist orthotropic orthotropically orthotropism orthotropous ortolan Orville/M oryx/S orzae oscillational oscillogram/MS oscillograph oscillographic oscillographically oscillography oscilloscopic oscilloscopically oscine osculate/DGNSX osculatory osculum OSF/M Osgood/M osier Osiris osmatic osmeterium osmic osmiridium osmolal osmolality osmolar osmolarity osmometer/MS osmometric osmometry osmoregulation osmoregulatory osmose/DG osmotically osmous osmunda oso osram osric ossicle ossicular ossiculate/D ossificatory ossifrage ossuary osteitis ostensive/Y ostensorium ostentation/S osteoarthritic osteoarthritis osteoblast osteoblastic osteoclast osteoclastic osteocyte osteoid osteological/Y osteologist osteoma osteopathically osteophyte osteophytic osteoplastic osteoplasty ostracod otherguess otherwhere otherwhile/S otiose Otis Ott/M ouabain Ouagadougou ouan oubliette ough oui outbalance outbid outbound outbrave outbreed/G outby outbye outcaste outcross outdazzle outdistance outdoorsman outdoorsmanship outdoorsy outdraw outercoat outfall outfight/G outfitter outfitting outflank/R outfoot outgas outgeneral outgiving outgo outgoes outguess outgun outhaul outlier outmatch outmode/G outmost outpace/D outplay outpoint outport/R outpull outputted outrace outrance outrange outrank outride/R outrival outscore outsell outsert outshine outshoot outshout outsight outsit outsize outskirt outsleep outsmell outsoar outsole outspeak outspeed outspend outspent outspin outstand outstare outstart outstay outstretch outtalk outthink outturn outwear outwork ouvre ouzel ovarial ovarian ovariectomy ovariole ovariotomy ovaritis ovenbird/S overabundant overact overaction overactivity overarm overawe overbalance overbear overbearance overbid overbite overblew overblow/GS overbought overbuild overbuy overcall/DGS overcapacity overcareful/Y overcautious overcharge overcompensate/N overcompensatory overconfidence overcurrent/S overdetermination overdetermined overdevelop overdevelopment overdominance overdominant overdress overdrive overet overexcite overexcitement overexposure overfastidious overfed overfish overfleshed overflight overflown overfly overgarment overglaze overgraze overgrow/H overily overindulge overindulgence overindulgent overissue/DGS overjudgment/MS overleap overlearn overlie overlong overlord overlordship overman overmaster overmatch overmuch overoptimism overoptimist overoptimistic overoptimistically overpay overpersuade overpersuasion overplay overplus overpopulate overpraise overprize overproduce/DGS overpronounce overproof overproportion overprotect overrate overreact overreaction overrefine overrefinement overrepresent overripe oversanguine oversea overseen oversell/GS oversensitive/P oversexed overshoe overskirt overslaugh overslip oversold oversoul overspeculate/N overspeed overspend/GRS overspread oversteepen oversteer overstep/S overstock overstory overstrain overstrew overstride overstrung overstuff/DGS oversubscribe/GS oversubscription oversubtle oversubtlety overtaxation overthrust overtop overtrade overtrain overtrick overtrump overvalue overvoltage/S overwatch overwear overweary overween/G overweigh overwind overwinter overword overwrought ovicidal ovicide oviduct oviductal ovine oviparous/PY oviposit oviposition ovipositional ovipositor ovoid ovoidal ovonic ovotestis ovoviviparous/PY ovular ovulate/DGNSX ovule ow owerless owlet oxacillin oxalacetate oxalacetic oxalis oxaloacetate oxazine oxblood oxbow oxeye oxheart oxidase oxidasic oxidic oxonian oxtail oxygenator oxygenic oxygenicity oxygenless oxyhemoglobin oxyhydrogen oxyphil oxyphile oxyphilic oxysome oystchers oysterman oystermen oz ozagen ozagenians ozocerite ozokerite ozonic ozonide ozoniferous ozonosphere ozonous ozzie pacem pacemaking pacesetter pachyderm pachydermal pachydermatous/Y pachysandra pachytene pacifiable pacifically pacificator/S pacificatory pacificist pacifistically packability packable packboard packhorse packinghouse packman packsack packsaddle packthread packwood paddleboard padrone paella paeon paestum paganini paganish pageboy paginal pailful painfuller painfullest paisley paix paladin palaeoanthropic palaeontology/M palaestra palanquin palasts palatably palatial/PY palatinate palaver/DG palazzo/S paleface paleoanthropology/M paleoecologic paleoecological paleoecologist paleoecology paleogeographic paleogeographical/Y paleogeography paleographer paleographic paleographical/Y paleography paleolith/S paleologist/S paleomagnetics paleontologic paleontological paleontology paleozoological paleozoology palingenesis palingenetic palinode palish palladia Palladian pallbearer pallette pallial palliasse palliator pallium pallor/MS palmar palmary palmate/DNY palmistry palmitate palmlike palmy/R Palo palomino palp palpability palpal palpate/DGNSX palpebral palpi palpitant palpitate/DGS palter/DGR paludal paludism palynologic palynological/Y palynologist palynology pampa/S pamphleteer/S panacean panache Panamanian panatela panchromatic pancratium Pandanus pandect/S pandied pandit panegyric panegyrical/Y panegyrist panetela panetella panful Pangaea pangenesis pangenetic pangolin panhandle/DGRS panhuman panicking panicle pannier panoramically panpipe/S pantalets pantalettes pantaloon/S pantas pantheistic pantheistical/Y pantie pantile/D pantisocracy/S pantisocratic pantisocratical pantisocratist pantograph pantographic pantomimic pantomimist pantothenate pantothenic pantropic pantryman pantrymen pantsuit pantywaist panza panzer Paoli/M papacy papaw paperbound paperboy/S paperhanger paperhanging papermaker/S papermaking papiers papilla papillae papillate/D papilloma papillomatous papillon papillose papillote papist papistry pappose Papua/M para parabiosis parabiotic parabiotically parabolically parachutic parachutist paradigmatical paradisaic paradisaical/Y paradisal paradisiac paradisiacal/Y paraffinic paragenesis paragenetic paragenetically paraginase paragonite paragraphic Paraguayan/MS paralinguistic parallactic paralogism paralytic paramagnetically paramagnetism paramecium paramedic parament parametrical paramnesia paramountcy paramour Paramus paranormality paranymph paraoxon paraph paraphrasable paraphrastic paraphrastically paraphysis paraplegia parapodial parapodium paraquat pararosaniline parasang paraselene paraselenic parasexual parasexuality parasitical/Y parasiticidal parasiticide parasitism parasympathomimetic parasynthesis parasynthetic paratactic paratactical/Y parataxis parathion parathyroid parathyroidectomy paratyphoid paravane paraxial parbuckle/DG parcenary parcener pard pardner/S paregoric parella parenchyma parenchymal parenteral/Y Pareto/M parfait parian paries parietal parietes parioli parisina parisology Parke/M Parkinsonian parkinsonism parkour/M parlante parle/G parlous/Y Parmesan parmigiana parmigiano parodic parodist parodistic parol paronomasia paronomastic paronym paronymous parotid parotitis parous paroxysm paroxysmal paroxytone parquetry Parr/MS parrakeet parricidal parricide parrillo parring parris Parsi Parsifal/M partan parterre parthenocarpic parthenocarpically parthenocarpy parthenogenesis parthenogenetic parthenogenetically Parthia parti partible participator particularism particularist partisanship partite/V partitionist partitive/Y partizan parturient parturition partway parure parve parvenue parvis parvise paschal pasha Paso passably passarine passavant passbook/MS passel passementerie passerine passible passim passional passionless passivate/DGNSX passivism passivist/S passkey pastelist pastellist pastern/S pasternak pastil pastilles pastlle pastorale pastoralism pastoralist pastorate pastorium pastorship pastrami pasturage pastureland patagonians patchboard patchouli patchouly pate patella/S patellae patellar patelliform patency patentability patentor paterfamilias paternalist Paterson/M pathbreaking pathetical/Y pathfinder pathfinding pathogenetic pathogenically pathogenicity pathognomonic pathol pathometer/MS pathomorphologic pathomorphological pathomorphology pathophysiologic pathophysiological pathophysiology patible patil patinae patine/DG patisseries patois patresfamilias patriarchate patriciate/S patricidal patricide patrilineage patrilineal patriotically patristical patroller patronal patronne patronymic patroon patten Patti/M pattie patulous/PY Paulo/M paulownia Paulus pauperism pavanne pavese pavid Pavlovian pawl pawnbroker/MS pawnbroking pawnor pawpaw pax paxam paxton payee paygrade/S payola payor Paz PDF peaceably peacekeeper peacekeeping peacemake peachy/R peacockish peafowl peahen Peale/M pealike pearlescence pearlescent pearlite pearlitic pearlstone peascod Pease peasecod peashooter peaty pebbly peccable peccadillo peccancy peccant/Y peccavi pecky pectate pectic pectin pectinaceous pectinate/DN pectines pectoralis peculator pedalfer pedalferic pedantically peddlery peden pederast/S pederastic pederasty pedestrianism pediatrist pedicab pedicel pedicellate pedicle/D pediculate pediculosis pediculous pedicure pedicurist pedimental pedipalp pedlar pedlary pedocal pedocalic pedogenesis pedogenetic pedogenic pedologic pedological pedologist pedology pedometer/MS pedophile pedophilia pedophiliac pedophilic pee peekaboo peelable peeress peeter peewee peignoir Peiping pekoe pelage pelagic pellagrin pellagrous pelletal pellitory pellucid/PY pellucidity Peloponnese peloria peloric pelorus pelota/S peloton/MS peltate/Y peltry/S pemberton Pembroke/M pemican penates pendency pendent/VY pendleton pendular pendulous/PY Penelope/M penetrability penetrable/P penetrably penetralia penetrance/S penetrant/S penetrometer/MS pengally Penh penholder penicillate/NY penicillium penile peninsular penis/S penitence/S penitency penlight penmanship penna pennaceous pennae pennate pennis pennyroyal penological penologist penology Penrose pensile pensionable pensionary pensionless pentacle/S pentad pentadactyl pentadactylism pentagram/MS pentagraph pentahedral pentahedron pentamerous pentameter pentane pentangle/S pentapeptide pentaploid pentaploidy pentaquin pentaquine pentarchy Pentateuch pentathlete pentathlon pentatonic pentavalent pentazocine pentobarbital pentobarbitone pentode/S pentomic pentosan penuche penult penultima penumbra penumbral peonage peones peoplehood peopleless pepperminty peppertree pepsico pepsin pepsinogen peptic peptone peradventure perambulate/DGNSX perambulator perambulatory percale percaline perceptibility perceptional perceptivity perchlorate percipience percipient Percival/M percoidean percptibly percuss perdurability perdurable perdurably pere peregrinate/DGNSX peregrine perennate/DGNSX perfecta perfectivity perfecto perfervid perfoliate/N perforator performable performative performatory perfuse/DGV pergola pericardial pericarditis pericardium pericarp perichondral perichondrial perichondrium Periclean pericranial pericranium pericycle pericyclic pericynthion periderm peridermal peridermic peridia peridium peridot peridotic peridotite peridotitic perigean perigee/M perigynous perigyny perihelial perikaryal perikaryon Perilla perilune perilymph perimorph perimysium perinatal perineum periodontics periodontist perioneum periotic peripatecically peripatetically peripateticism peripatus peripety peripherad periphrasis periphrastically periphytic periphyton periplast periscopic perishability peritectic peritonitis peritrichous/Y perjurious/Y Perle/M perlite perlitic perlocutionary perm permafrost permeability permeably permeance permease Permian permissable permitter permittivity permutational peroneal peroral/Y perorate/N perorational peroxidase peroxidic peroxisomal peroxisome perpend perpendicularity perpetuator Perseid Persephone/M perseverant perseveration/S persistency persnickety personalism personalist personalistic personate/DGNSV personator personhood perspicacity perspiratory persuasible pertinacity pertinency perturbable perturbational perturbative perversity pervious/P peso/S pessary pessimal pessimistically pessimum peste pestiferous/PY petallike petaloid petalous petard petasos petasus Peters petiolate/D petiole/D petiolule petit petitionary petrarchan petrel petrifaction petrochemistry petrogenesis petrogenetic petrographer petrographic petrographical/Y petrography petrolatum petrologic petrological/Y petrologist petronel petrosal petrous pettibone pettifog pettifogger pettifoggery petulancy pewaukee pewee PFD's PFDs ph phaeton phage phagocytosis phalanges phalanstery phalarope phalli phallic phallically phallicism phallus/S phanerogam phanerogamic phanerogamous phantasm phantasma phantasmagoria phantasmagoric phantasmal phantasmic phantomlike pharaoh pharaonic pharisaic pharisaical/PY pharisaism pharisee pharmacodynamic/S pharmacodynamically pharmacogenetic/S pharmacognostic pharmacognostical pharmacognosy pharmacokinetic/S pharmacologic pharmacologist pharmacopoeia pharnges pharos pharyngitis phasic phasmid PHB/M PHBs phd Phelps phenetics phenetidine phenetole phenobarbital phenobarbitone phenocain phenocopy phenocryst phenolate phenological/Y phenology phenomenalism phenomenalist phenomenalistic phenomenalistically phenomenologist phenothiazine phenotypic phenotypical/Y phenoxide phentolamine phenylalanine phenylene phenylephrine phenylic pheromone/MS phial philanthropical/Y philatelic philatelically philatelist philately philco philippe philippians Phillip/M philogyny philol philologist philoprogenitive/P philter philtre Phipps phlebitis phlebotomist/MS phlebotomy phlegmatic phlegmatically phlegmy phloem phlogistic phlogiston phobia Phobos Phoenicia/M phon phonate/DGNS phonematic phonemically phonetical phonetician phoney/S phonically phonocardiogram/MS phonocardiograph phonocardiographic phonocardiography phonogram/MS phonogramic phonogramically phonogrammic phonogrammically phonographic phonographically phonography phonolite phonolitic phonologial phonologist phonon/MS phonoreception phonoreceptor phonorecord phonos phosgene phosphatic phosphatide phosphatidic phosphatidyl phosphene phosphite phosphocreatine phospholipid/S phosphore phosphorescence phosphoreted phosphoretted phosphorism phosphorite phosphoritic phosphorolysis phosphorolytic phosphorous phosphoryl phosphorylase phosphorylate/NV photic photically photoautotrophic photoautotrophically photobiologic photobiological photobiologist photobiology photobiotic photocathode/S photocell photochemist photochemistry photochromic photochromism photocoagulation photocompose/R photocomposition photoconductive photoconductivity photocurrent photodecomposition photodetector photodiode/S photodisintegrate/N photodissociation photodissociative photodrama photoduplicate/N photodynamic/S photodynamically photoelectric photoelectrically photoelectron photoemission photoemissive photoengrave/GR photoflash photoflood photofluorogram/MS photofluorographic photofluorography photogene photogenically photogeologic photogeological photogeology photogram/MS photogrammetric photogrammetrist photogrammetry photogravure photoheliograph photoinduced photoinduction photoinductive photojournalism photojournalistic photokinesis photokinetic photolithograph/R photolithographic photolithographically photolithography photolytically photomap photomechanical/Y photometer/MS photometrically photomicrgraphical photomicrogram/MS photomicrographic photomicroscope photomicroscopic photomontage photomorphogenesis photomorphogenic photomultiplier photomural photonegative photonic photonuclear photooxidation photooxidative photoperiod photoperiodic photoperiodically photoperiodism photophilic photophilous photophily photophobia photophobic photophore photopia photoplay photopositive photoprint photoproduct photoproduction photoreaction photoreception photoreceptive photoreceptor photoreconnaissance photorecord/R photoreduction photoresistance photorespiration photosensitivity photoset photosetter photosphere photospheric photostat photostatic photosynthesis photosynthetic photosynthetically phototactic phototactically phototaxis phototelegraphy phototropic phototropically phototropism phototube phototypesetter phototypesetting phototypographic phototypography photovoltaic PHP/M phrasally phrasemaker phrasemonger/G phraseogram/MS phraseograph phraseological/Y phraseologist phratry/S phreatic phreatophyte phreatophytic phrenetic phrenic phrenological/Y phrenologist phrenology phrensy phthalate phycologist phycology phycomycete/S phylactery phylae phylar phyle phylesis phyletic phyllary phylloclade phyllode phyllodium phylloid phyllome phyllomic phyllophagous phyllopod phylogenetic physiatrics physiatrist physicalism physicalist physicalistic physicality physicked physicking physicochemically physiocratic physiognomic physiognomical/Y physiographer physiographic physiographical physiography physiol physiopathologic physiopathological physiopathology physostigmine phytane phytoalexin phytochemical/Y phytochemist phytochemistry phytochrome phytoflagellate phytogenic phytogeographic phytogeographical/Y phytogeography phytography phytological/Y phytology phyton phytonic phytopathogen phytopathogenic phytopathologic phytopathological phytopathology phytophagous phytophagy phytoplanktonic phytosociological/Y phytosociologist phytosociology phytosterol phytotoxic phytotoxicity pial pianistically pianoforte/MS pias piassava piazze pibroch pic picador picadores picaninny picara picaresque picaro picaroon picayunish piccalilli piccoloist pice piceous pickaback pickaninny pickaroon pickax pickeer picketboat Pickett/M picklock pickproof pickthank picnicky picnometer/MS picogram/MS picoline picon Pict pictograph pictographic pictography pictorialism picturegoer piebald piecework/R piecrust Piedfort Piedmont piefort pieing pieta pietism pietist pietistic pietistical/Y pietro piezoelectrically piezometer/MS piezometric piezometry piffle/DGS pigboat pigeonberry pigeonfoot pigeonhearted pigeonwing pigged piggery/S piggyback/DG pigheaded/P piglet/S pigmentary pigmy pigstick/GR pikeman pikestaff pilaf pilaff pilaster Pilate pilchard pilea pileate/D pilei pileum pileup pileus pilewort pilgarlic pillbox/S pillion/S piloerection pilotage/S pilothouse pilotless pilsener pilsner pilular pilule pilus pinar pinaster pinata pinbone pincer/MS pincerlike pinchbeck pinchcock pindling pineal pinecone pinedrops pinene pinery pinesap pineta pinetum pinewood piney pinfold pingo pinkeye pinko/S pinkoes pinkroot pinky pinna/S pinnace pinnae pinnal pinnate/Y pinner pinniped/MS pinnula pinnular pinnulate/D pinnule pinprick/S pinscher pinsetter Pinsky/M pinspotter pinstripe pinta pintle pintoes pinup pinxter pionic Piotr/M pipage pipal pipeage pipefish pipeful pipeless pipelike piperazine piperidine piperine piperonal pipestone pipgras pipit pipkin pippin pipping pipsissewa piquancy piquet Piraeus piranha piraro piratical/Y pirogue piroplasm piroplasma piroplasmata Piscataway/M piscicultural pisciculture pisciculturist piscina piscine piscivorous pisiform pismire pisolite pisolitic pissoir pistillate pistoleer pita pitchman pitchout pitchy pithead pitiably Pitzer/M pivotable pivotman pixie pixieish pixilated pixilates pixilation Pizarro pizazz pizz pizzazz pizzeria PKI/M Pl placability placable placably placatory placebo placeman placemat/MS placency placent placentation/S placentia placket plagal plage plagiaristic plagiary plagioclase plaguesome plaguey plaguy/Y plaice plainclothesman plainsman plainspoken/P plaint plaintext plaintful plainview plaister planarian planation planchet planetoidal planetological planetologist planetology plangency plangent/Y planimeter/MS planimetric planish/R planisphere planispheric planktonic planless/PY planograph planographic planography planosol plantable plantar plantlike planula planular planuloid plasmagel plasmagene plasmagenic plasmalemma plasmapheresis plasmasol plasmatic plasmid/MS plasmin plasminogen plasmodesm plasmodium plasmogamy plasmolysis plasmolytic plasmolytically plasmon plasodesma plasterboard plasterwork plastery plastid plastidial plastisol/S plastogene plastral plastron plat plateaux plateful platelike platemaker platemaking plateresque platies platina platinic platinous platipi/M platitudinal platitudinarian platonically platterful platting platypus/MS plauded plauding plaudit plause/V playa playability playact playbill/S playbook playgirl playgoer/S playland playmaker playpen/MS playsuit pleadable pleasantry pleasurability pleasurably pleasureless pleatless plebe/S plebeianism plebian plebiscitary plebs plectrum/MS pledgee pledget pledgor plenipotent plenish plenitudinous plentitude plethoric pleurae pleuritic pleurodont plex plexiform plexiglass plexus pliability pliably Plimmerton plimsoll plinth/MS plodder plosion plotless/P plottage plotty/R plugboard/MS plugger plumbaginous plumbago plumbate plumbeous plumbic plumbiferous plumbism plumbous plumelet plumlike plummy/R plumose/Y plumpish plumulate plumule plumulose plumy/R plunderable plunderage plunderous pluperfect pluralistically pluriaxial pluripotent plussage plusses plutocracy plutocrat plutocratic plutocratically pluton plutonian plutonic pluvial plyscore pneumatically pneumaticity pneumatology pneumatolysis pneumatolytic pneumatometer/MS pneumatophore pneumatophoric pneumectomy pneumococcus pneumonic pocahontas pockmark pocky poco podagra podagral podded podding podgy/R podiatric podiatrist podiatry podite poditic poetaster poetess poeticism pogromist poi poikilotherm poikilothermic poikilothermism poilu poinciana pointe pointillism pointillist pointilliste pointillistic pointwise poirot poitrine pokey/S poky/PRY polarimetric polariscopic polariton polarographic polarographically polaron polder poleax poleless polemicism/M polemicist polemist polemonium polestar poleward policewoman/M policewomen policyholder/S poliomyelitic poliomyelitis poliovirus politesse politick/R polity polkadot/S Pollard/M pollee pollenate/DGNS pollenosis pollex pollical pollices pollinate/DGNS pollinator pollinic polliniferous pollinium polloi pollster pollywog/MS poloist poltroon poltroonery poltroonish/Y Poly polyandrous polyandry polyanka polyantha polyanthus polybasite polycarbonate polycarpellary polycarpic polycarpous polycarpy polycentrism polychaete polychaetous polychasium polychotomous polychotomy polychromatic polychrome polychromy polycistronic polyclinic polycondensation polycot polycotyl polycotyledon polycotyledonous polycrystal polycyclic polycythemia polycythemic polydactyl polydactylous polydactyly polydipsi polygala polygamic polygamical/Y polygamist polygene polygenesis polygenesist polygenetic polygenetically polygenic polyglandular polyglot polyglotism polyglottism polygonum polygram/MS polygraph polygraphic polygynoecial polygyny polyhedrosis polyhistor polyhistoric polyhydroxy Polyhymnia polymath polymathic polymathy polymerically polymerism polymorphically polymorphism polymorphonuclear polymorphous/Y polymyxin polyneuritis polynuclear polynucleotide polynya polyonymous polyp polypary polypeptide polypeptidic polypetalous polyphagia polyphagous polyphagy polyphase polyphasic polyphenol polyphenolic polyphone polyphonically polyphonous/Y polyphyletic polyphyletically polyphyleticism polypide polyploid polyploidy polypnea polypneic polypody polypoid polypous polyptych polyrhythm polyrhythmic polyrhythmically polyribonucleotide polyribosomal polyribosome Polys polysaccharide/S polysaprobic polysemous polysemy polysepalous polysilicon polysiloxanes polysome polysomic polysorbate polystichous polysyllabic polysyllabically polysyllable polysynaptic polysynaptically polysyndeton polytene polyteny polytheism polytheist polytheistic polytheistical polythene polytocous polytonality polytope polytrophic polytype polytypic polytypism polytypy polyurethane polyuria polyvalence polyvalent polyvinyl polywater polyzoan polyzoarium polyzoic pomace pomaceous pomade/DS pomander pomatum pome pomelo pomerania pomeranian pomiferous pommel pomological/Y pomologist pomology pompey pompon pon Ponce Ponchartrain/M ponderable ponderosa/MS pong pont pontific pontificaly pontificator pontifices pontine pontius ponton pontonier ponytail pood Poole/M poolroom poorhouse poorish popery popgun popinjay popish/Y popliteal popover poppa poppet popple poppycock poppyhead populaire/S populism populist populistic porcelainlike porcelaneous porcellaneous poriferal poriferan porky/S pornographically porphyria porphyrin porphyritic porphyroid porphyropsin porphyry porrect porringer portance portative portcullis Porte/M porterage Portia portico portiere portionless Porto portraitist portress portulaca posable posada posey positivistic positivity positronium Posner/M posseman possemen possessory posset/S postaxial/Y postbag/S postbellum postbox/S postboy/S postbreeding postclassic postclassical postcolonial postdental postdiluvian postdoctorate postembryonal postembryonic postemergence posteriad posteriority postern postexilic postface postform postglacial posthaste posthole posthypnotic postiche postilion postillion postmastership postmenopausal postmillenarian postmillenarianism postmillennial postmillennialism postmillennialist postmistress postmodern postmultiply postnasal postnatal/Y postnuptial/Y postorbital postpaid postpituitary postponable postposition postpositional/Y postpositive/Y postprandial/Y postprocess postprocessor/S postschool postsynaptic postsynaptically posttension posttraumatic postulancy postulant postulational postulator postural posy/S potability potassic potation potboy poteen potemkin potence potentiate/N potentiator potentiometric potful pothead potheen pother/DG pothook pothouse pothunter pothunting potpie potsdam potsherd potshot potshotting potstone pottage pottawatomie potteringly pottle potto/S potty/RS pouchy/R pouf pouff/D poulard poularde poult poulterer poultryman poundage poundal pourable pourboire pourparler pourpoint poussette/DG poussin/S pouty powderman powdermen powerboat powwow poxvirus Poynting/M poza ppm PR practicum Pradesh Prado praecox praedial pragmatical pragmaticism pragmaticist pragmatistic praline prandial prase pratfall pratincole pratique prawn/RS praxeological praxeology pre/T preachify/S preachment preachy/PRY preacknowledgment/MS preadapt/DV preadaptation preadolescence preadolescent preamplifier/S prearrangement preatomic preaxial/Y prebend prebendal prebendary prebind prebiologic prebiological prebiotic precancel precancerous precast precautious precedency preceeded preceeding precensor precentor precentorial precentorship preceptor preceptorial preceptorship preceptory preceptress precessional preciosity precipitance precipitancy precipitant/PY precipitator precipitin precipitinogen precipitinogenic precisian precisianism precisionist preclinical preclusion preclusive/Y precoat/G precocial precognition precognitive precombustion precompact precompose precomputation preconceptual preconcert/D preconcerted/PY preconsonantal precook precritical precursory predaceous/P predacious predacity predawn predecease predesignate/N predestinarian predestinarianism predestinate/N predestinator predestine predicable predicatable predicatory predigest predigestion predominancy preemergence preemergent preemie preexchange/D preexist preexistence prefatorial/Y prefectural preferability preferrer prefigurative/PY prefigure/DGS prefigurement prefixal/Y prefocus/DGS preform/DS preformation prefrontal pregnability pregnable pregnenolone preheat/DR prehensile prehensility prehension/A prehistorian prehistorical/Y prehistory prehominid preignition preinduction prejudgment/MS prejudicious/Y prelature prelection prelibation prelicense/DGRS prelusion prelusive/Y prelusory premalignant preman premed premedial premedian premedical premedieval/MS premedievalism/MS premeditator premeiotic premenstrual/Y premership premie premillenarian premillenarianism premillennial/Y premillennialism premillennialist premiss premolar premonish premorse premune premunition prename prenatal/Y prenominate/N prenotion preoccupancy preoperative/Y preorbital preordain/DGS preordination preoviposition preovulatory prepackage preparator prepausal prepense/Y preplan preponderancy prepositive/Y prepossess/G prepossessing/PY prepossession prepotency prepotent/Y preppie preprandial preprocess/DS preprofessional prepuberal/Y prepubertal/Y prepuberty prepubescence prepuce prepunch prepupal preputial prerecord presageful presanctified presbyope presbyopia presbyopic presbyter presbyterate presbyterial/Y presbytery prescientific prescind prescore prese preselection presell presentability presentably presentative presentee presentient presentiment presentimental presentment preservable presettable presetting preshrunk presidentship presidial presidiary presidio presidium presignify presley presoak pressboard pressmark pressor/A pressroom pressrun presswork prest/R presternum prestigeful prestissimo prestress/D presumptive/Y presynaptic presynaptically pretax preteen pretensionless preterit/V preterite/NV preterminal pretermission pretermit preternatural/PY Pretorian pretreat pretreatment prettify/N prettyish pretubercular pretuberculous pretzel prevaricate/DGS prevaricator prevenient/Y preventability preventative preventible preverbal previsional previsionary prevocalic prevocational prevue prexy Priam priapic pricey pricket pricky/R pricy/R prideful/PY priesthood prieur priggery priggism prima primality primateship primatial primatological primatologist primatology primero primipara primiparity primiparous primitivist primitivistic primitivity primmer primmest primming primo/S primogenitor primogeniture primrdium primula primus princedom princekin princelet princeling princeship princesse principalship principial principium princox prink/R printability printemps printery printless priorate prioress/S priorship pripet prise prisere prismatically prismatoid prismatoidal prismoid prismoidal pristane Pritchard/M prithee privatdocent privatdozent privatism privet privity prix prizefight/GR prizewinner proa proach/G proactive probabilism proband probang probational/Y probationary probatory/A probenecid probit probosces proboscidean proboscidian proboscis procambial procambium procaryote procaryotic procathedral procephalic procercoid processability processable/A processibility processible proclimax proclitic proconsul proconsular proconsulate proconsulship procreant procreator procryptic Procter/M proctodaeum proctologic proctological proctologist proctology proctorial proctorship procumbent procurable procurance procuration procurator procuratorial procuress prodder prodigality prodromal prodromata prodrome/S prodromic productional proemial proenzyme proestrus profanation profanatory professeur professorate professoriat professoriate profili profitless profitted profitting profligacy profluent prog progamete progestational progesterone progestin progestogen progging proglottid proglottidean proglottis prognathic prognathism prognathous prognostic prograde programmatic programmatically progressional progressionist progressist progressivist progressivistic prohibitionist projectable projectional projet/S prokaryote prokaryotic prolactin prolamin prolamine prolan prolapse/DG prole proleptic proletarian proliferous/Y prolificacy prolificity proline prolocutor prolotherapy prolusion/S prolusory prom promazine promisee promisor promissory promotability promotable promptbook/S promulgator pronatalism pronatalist pronate/DGN pronator pronephric pronephros pronghorn/S pronominal/Y pronuclear pronucleus pronunciamento pronunciational prooflike proofread proofroom propaedeutic propagable propagandism propagandistically propagational propagator propagule proparoxytone propellent propellor propend propense properdin propertyless prophage prophase prophasic prophetess prophetical prophylactic prophylactically prophylaxis propine/DG propionibacteria propitiable propitiator propitiatory proplastid propman propolis propone/DG proportionable proportionably propos propositus propranolol proprietress proprioceptor proptosis propulsive propyl prorogate/N prorogue/DG prosaically prosaism prosaist prosateur prosciutto proscriptive/Y prosector prosectorial prosecutable proselyte proselytism proseminar prosencephalic prosencephalon prosenchyma/S prosenchymata prosenchymatous Proserpine/M prosit proso prosobranch prosodical/Y prosodist prosoma prosomal prosopographical prosopography prosopopoeia prossed prosser prost prostaglandin prostatectomy prostatic prostatism prostatitis prosthesis prosthetically prosthodontics prosthodontist prostitutor prostomial prostomium prosy/PRY protamine protasis protatic protea protectant protectionism protectoral protectorship protectory proteid proteide proteinaceous proteinase proteinate proteinuria proteinuric protend protensive/Y proteoclastic proteose proteranthous proteranthy protestor proteus prothalamion prothalamium prothallial prothallium prothallus prothesis prothetelic prothetely prothetic prothonotarial prothonotary prothoracic prothorax prothrombin protist Protista protistan protitch protium proto protoderm protodermal protogalaxy protogeometric protohistorian protohistoric protohistory protohuman protolanguage protolithic protomartyr protonate/DN protonema protonemal protonematal protonic protonotary protonymph protonymphal protopathic protophloem protophyta protoplanet protoplast protoplastic protoporphyrin protostar protostele protostelic prototroph prototrophic prototrophy prototypal protoxylem protozoal protozoic protozoological protozoologist protozoology protozoon protractile protraction protractor protreptic protrusible protuberatly proudful proudhearted provascular provement Provence provender provenience provincialist provinciality proviral provirus provisionary provisons provisory provitamin provolone proxemic/S proximo proxmire prude/MS prudery prudish/PY pruinose prurience pruriency pruriginous prurigo pruritic pruritus prussiate prussic prutot pryer psalmbook psalmody psalter psalterium psaltery psaltry psephological psephologist psephology pseud pseudepigraph pseudepigraphon pseudepigraphy pseudoallele pseudoallelic pseudoallelism pseudoclassic pseudoclassicism pseudoenergy pseudomedieval/MS pseudonymity pseudonymous/PY pseudopotential pseudorandom pseudoscience pseudoscientific pseudoscientist pseudoscorpion pseudosophisticated pseudosophistication pseudotuberculosis psychedelia psychedelically psychiatrically psychoanalytical/Y psychobiographical psychobiography psychobiologic psychobiological psychobiologist psychochemical psychodrama psychodramatic psychodynamic/S psychodynamically psychogenesis psychogenetic psychogenic psychogenically psychognosis psychognosy psychograph psychokinesis psychokinetic psycholinguist psychologic psychologism psychometrically psychomotor psychoneurosis psychoneurotic psychopathically psychopathologic psychopathological/Y psychopathologist psychopathology psychopathy psychopharmaceutical psychopharmacologic psychopharmacological psychopharmacologist psychopharmacology psychophysicist psychophysiologic psychophysiological/Y psychophysiologist psychopomp psychosexual/Y psychosexuality psychosomatically psychosurgery psychosurgical psychotherapeutically psychotherapist psychotically psychotogen psychotogenic psychotomimetic psychotomimetically psychotropic psychrometer/MS psychrometric psychrometry psychrophilic psyllium ptolemaists ptomaine puberal pubertal puberulent pubes pubescence pubic pubis publican/S publicist publick publique puccoon puce pucka puckery pud puddingstone pudency pudendal pudendum puerperal puerperium pug pugaree puggaree pugging Pugh pugilism pugilist pugilistic pugmark pugnacious/PY pugnacity puisne puissance pukka pul/GR pulchritude pulchritudinous pule/GR puli/S pulicide pulik pullback pullet pullout pullulate/N pulmonate pulmonic pulmotor pulpal/Y pulpwood pulpy/P pulque pulsant pulsator pulsatory pulsimeter/MS pulsometer/MS pulverulent pulvillus pulvinus pumiceous pumicite pumpernickel pumpkinseed/S puna punchball/S punchboard puncheon punchinello punchless punchy/R punctate/N punctilio punctilious/PY punctuator pung Punic punishability punition Punjab/M Punjabi punkah punkie punkin punning punny/R punty/S pupae puparia puparial puparium pupfish pupilage pupilar pupillage pupillary pupiparous puppetry pupping purblind/PY purdah purdew pureblood purebred puree/DMS pureeing purfle/DG purgatorial purificator purificatory purifing purine puristic puritanism purl/DGRZ purlieu purlin puromycin purplish purply purpura purpure purpuric purselike pursewarden purslane pursuance pursuivant pursy/PR purtenance purulence purulent purveyance purvis Pusan/M Pusey/M pushball pushcart pushchair/S pushful/P pushout pushover/MS pushpin/MS pusillanimity pusillanimous/Y pussyfoot/GR pussytoes pustulant pustular pustulate/DN pustule/S putains putas putdown/MS Putnam/M putout putrefaction putrefactive putrescence putrescent putrescible putrescine putridity putsch putschist puttana puttee/S puttyroot puzzleheaded/P PVC pycnidium pycnogonid pycnometer/MS pyelitis pyelonephritic pyelonephritis pyemia pyemic pygidial pygidium pygmaean pygmean pygmoid pygmyish pygmyism pyknic Pyle/M pylon/S pylori pyloric pylorus pyocanea pyoderma pyodermic pyogenic Pyongyang/M pyracanth pyracantha pyralid pyralidid pyramidical pyran pyranoid pyranose pyranoside pyrargyrite pyrene pyrenoid pyrethrin pyrethroid pyrethrum pyretic pyrexia pyrexial pyrexic pyrheliometer/MS pyrheliometric pyric pyridoxal pyridoxamine pyridoxin pyridoxine pyriform pyrimethamine pyrimidine/S pyrite/S pyritic pyrocatechol pyrocellulose pyrochemical/Y pyroclastic pyroelectric pyroelectricity pyrogallol pyrogen pyrogenic pyrogenicity pyrogenous pyrola pyroligneous pyrolusite pyrolytic pyrolytically pyromancy pyromaniacal pyrometallurgical pyrometallurgy pyrometric pyrometrically pyromorphite pyronine pyroninophilic pyrope pyrophoric pyrophosphatic pyrophyllte pyrosis pyrotechnical/Y pyrotechnist pyroxenic pyroxenitic pyroxenoid pyroxylin pyrrhic pyrrhotite pyrrhuloxia pyrrol pyrrole pyrrolic pyruvate pyschiatrist pythoness pythonic pythonine pyuria pyx pyxides pyxidium pyxie pyxis Qatar/M QED Qian/M QM qua quackish quadded quadding quadrantal quadraphonic/S quadraphony quadrat/DG quadrate/DGS quadrennium quadricentennial quadricipital quadrifid quadripuntal quadrisect/DGS quadrisyllabic quadrivalent quadrivial quadroon/S quadrumvir quadrumvirate quadruped/S quadrupedal quadruplet/S quadruplicity quadruply quadrupolar quadrupole quaestor quag quai quaich qualmish/PY qualmy quant quantal quantasome quantic quantifiably quantificational/Y quantifys quantitate/DGNSX quarantinable quark/S quartan quarterage quarterdeck/S quarterfinal quarterfinalist quartern quarternary quarterstaff quartette quartic/S quarto/S quartziferous quartzitic quartzose quasimodo quasiparticle quatercentenary quaternion quaternity quatrefoil quattrocento quattuordecillion quavery quayage quayside quean queazy queenship queerish quenchable quenchless querilla querist quern/S questionary questionless questor/A quetzal quetzales Quezon/M quib/S Quichua quickset quid/MS quiddity quiescence quietism quietist quietus quiff/DS quillwort quince/S quincuncial/Y quincunx/S quincunxial quindecillion quinidine quiniela quinoa quinoid quinoidine quinoline quinquennium quinquevalent quinquivalent quintain quintal quintessence quintette quintic quintuplet/MS quintuplicate/DGS quintus quipped quipster Quirinal quirky/PY quisling quislingism quitch quitclaim Quito/M quitrent quittance quitted quittor quixotical/Y Quixotism quixotry quizmaster quizzer quizzicality quod quodlibet quoin quoit/S quondam quot quotable quotidian Rabat/M rabbet/DGS rabbinate rabbinic rabbinism rabbitry rabbity rabblement rabic rabidity Rabin/M racecourse/S racemate racemic racemose rachet rachides rachiodont rachis/S rachitic rachitis racialism racialist racialistic racine rackle racon raconteur racoon rad/S radarscope/S raddle/DGS radiale radiancy radiational radiationless radic radicand radicate radicle radicular radioautograph radioautographic radioautography radiobiologic radiobiological/Y radiobiologist radiobiology radiobroadcast/GR radiocast/R radiochemist radiochlorine radioecological radioecologist radioecology radioelement radiogenic radiogram/MS radiograph radiographically radioimmunoassay radioisotope radioisotopic radioisotopically radiolarian radiolocation radiologist radiolucency radiolucent radiolysis radiolytic radiometeorograph radiometrically radiomimetic radionuclide radiopaque radiophone radiophoto radiophotograph radioscopic radioscopy radiosensitive radiosensitivity radiosonde radiostrontium radiosymmetrical radiotelegraph radiotelegraphic radiotelegraphy radiotelephone radiotelephony radiotherapist radiothorium radiotracer radome radula radular Rae/M raff Rafferty/M raffia raffinose raftsman raga ragamuffin ragbag raggedy raggle ragi raglan ragman ragpicker ragtag ragtime Ragusan rah rainmaker rainmaking rainproof rainspout rainsquall rainwash rainwear raj raja rale rallye rallyist rallymaster Raman/M ramate rambunctious/PY ramekin ramentum ramequin rami ramie ramiform ramillies ramirez rammer Ramo/M ramose/Y ramous rampageous/PY rampancy rampion ramshackle ramus ranchman ranian Ranier/M Rankin/M Rankine rantry ranunculus rapacity rapine Rappaport rappee rappen rapporteur rapscallion raptor raptorial rapunzel rarebit rarefaction rarefactional rarefactive rarify Raritan/M rasa rascality rasing rasorial raspy Rastus rasure rata ratably ratafia rataplan ratch ratel ratemeter/MS ratepayer/S Ratfor rathe rathskeller raticide ratificationist ratiocinator rationalistically ratlike ratline Ratner/M raton ratoon rattan ratted ratteen ratter ratting rattlebrain/D rattletrap rattly rattrap Raul/M raunchy/PRY ravagement ravel/S ravelment ravioli ravishment rawinsonde rawlings rawlins rayless/P rayon razeed razeeing razorbill razz razzmatazz reabsorb reabsorption reacquaint reacquisition reactance/S reactional/Y reactionaryism reaggregate/N realpolitik reapportion rearhorse rearm/G rearmament rearmost rearward/SY reasonability reasonless/Y reave/GR reb/S rebarbative/Y reboant rebus rebuttable rebutter recalcitrance recalcitrancy recalescence recallability recantation recap recatory receivership recension receptaculum recertifier/MS recertify/GRSZ recessional recessionary rechargeable recheat recidivism recidivist recidivistic Recife/M reciprocator recision recitalist recitativo reck reclinate recoin recombinant recommit recommitment recompence recompose reconcilability reconcilable/P reconcilement reconfirm reconfirmation reconstructionism reconstructor recontaminate reconversion reconvert/D reconvey reconveyance recordable recordation recordist recoupable recoupment recreant recreatable recreationist recriminatory recrudesce recrudescence recrudescent rectal/Y rectangularity recti rectifiability rectifiable recting rection rectitudinous rective recto/S rectorate rectorial rectorship rectrices rectrix rectus recumbency recusancy redaction redactional redargue redbone redcap redded reddy rede redear redecorate redecorator redeemable redemptional redemptory redeploy/D redeployment redescribe redescription redetermine/DG redhook redhorse redia/S rediae redial redintegrate/NV rediscount rediscountable redistributory redistrict redivivus redleg redolence redolent/Y redondo Redondo's redoubt redoubtably redout redox redpoll redroot redshank redshift/DGS redshirt redskin redstart redtop reductant reductase reductio reductional reductionist reductionistic reduplicate/NV reduplicative/Y reduviid redwing ree/TV reedbuck reedify reeducate/V reeky reelable reembroider reemploy reemployment reenforce reenlist/D reenlistment reentrance reestablishment ref reface/G refect refection referable refit reflation reflationary reflectional reflectometer/MS reflectometry reflexology reflow refluence reforest reforge reformate refractile refractivity/S refractometric refractometry refractor refrainment refrangible/P refrigerant refringent refugeeism refugium refulgence refulgent refundability refundable refurbishment refutably regality regardant regardful/PY regeneracy regenerator regental regicidal regicide regimental/SY regionalist regionalistic Regis regisseur regius reglet regna regnal regnant regnum regolith regorge/DG regosol regrant regreet regressor regretless regretter regrid regridded regridding regrow regurgitate/DGNSV rehabilitant rehabilitationist rehabilitator rehear rehouse/G rehydratable rehydrate/N reichsmark Reid/M reify/DGN reimpression reincarnationist reinfection reinforceable reinhard reinhardt reinless reinsman reinsurance reinsure/R reintegrate/V reinvigorate reiterator reive/GR rejectee rejuvenate/DGNS rejuvenator relatable relator relaxant relaxin releasability releasably reliction relievable relievo religionist religiose reline relinquishment reliquary relique reliquiae relishable relocatee relucent reluctancy reluctate/DN reluctivity relume/DG relumine remaines reman remanence remanent remanufacture/R remediably remediate/N remediless/Y rememberability rememberable remigial remindful reminiscential remint remise/DG remissible remissibly remitment remittable remittal remittent/Y remitter remonstrance remonstrant/Y remonstrator remunerator remuneratory remus Remy Rena/M renderable Rene/M renegade/S renege/DGRS renewability renewably reniform renig renigged renigging renin renitency renitent rennet rennin renographic renography renominate/GN renouncement renovator Rensselaer/M rentability rentable rente rentier renunciatory reoccupy reoccur reoccurrence rep repack/GR repairability repand reparative repass repassage repatriate/DGNS repealable repellant repellency repeller repercussive repetend repetitional replant repleviable replevied replevies replevin reportable reposal reposeful/PY reposit/DG repossession repower reprehend reprehensibility reprehensibly reprehensive representationalism representationalist repressibility repressible repressionist reprieval repristinate/N repro/S reproachable reprobance reprocess/S repudiationist repudiator repugn repugnancy reputability req requestioner requiescat requin requital reradiate/N reredos reremouse rereward resail rescale rescindment rescissory rescript researchist resect resectability resectable resection reseed resend/G reserpine reservist/S resettable reship reshipment reshipper residua resile/DG resinate resinify resinoid resinous resiny resistable resistibility resistless/PY resitting resojet resole resolvent resorb resorcinol respell respirable respirational resplendence resplendency responsory responsum ressentiment resses restage restartable restauranteur restitute restoral restrainable restrictionism restrictionist restrike resultful/P resultless resupine resurgam resurge/G resurrectional resurrectionist resuscitator/S resvering ret/S retable retake retardate retentivity retenue retia retiarius reticency reticule reticulocyte reticulocytic reticulose retiform retinacular retinaculum retinae retinene retinitis retinol retinopathy retinoscopy retinospora retinula retinular retirant retool retortion retot retouch/R retractile retractility retrainee retral/Y retread/DG retreatant retrench retrial retributive/Y retributory retrievability retroaction retroactivity retrocede retrocession retrofire retrofitted retrogradation retrogress retrogression retrolental retrolingual retropack retroperitoneal/Y retroreflection retroreflective retroreflector retrorse/Y retroserrate retroversion retsina retted retting returnee/MS retuse REU Reub/M reunify/N reunionist reunionistic rev/RTZ revalidate/G revaluate revalue revanche revanchist revealable revealment revegetate/N revehent reveille/S revelator revenant reverb reverberant/Y reverberatory reverential/Y reversibly reversionary revertible revery revetment revictual revilement revisal revisionism revisor revisory revivable revivalist/S revivalistic revivify/N reviviscence reviviscent revokable revoluable revolute revolutionibus revolutionist revolvable revulsed revulsive rew rewake rewaken rewardable rexroth rey Reykjavik/M reynard rezone rhabdom rhabdomancy rhabdome rhabdomere rhadamanthine rhamnaceous rhamnose rhamnus rhaphe rhapsodical/Y rhapsodist rhatany rhebok rheims rheinholdt rheological/Y rheologist rheometer/MS rheophile rheophilic rheostatic rhesus rhet rhetor rheumatically rheumatiz rheumatoid rheumatological rheumatologist/MS rheumatology/M rheumy rhinal rhinelander rhinencephalic rhinencephalon rhinitis rhinocerotic rhinolaryngology rhinopharyngitis rhinoscopy rhinosporidium rhinovirus rhizanthous rhizobium rhizocarpic rhizocarpous rhizocephalan rhizocephalid rhizoctonia rhizogenesis rhizogenetic rhizogenic rhizoid rhizoidal rhizomatous rhizome rhizomic rhizomorphous rhizoplane rhizopod rhizopodal rhizopodous rhizopus rhizosphere rhizotomy Rhoda/M rhodamine Rhode rhodochrosite rhodomontade rhodoplast rhodopsin rhodora rhomb/S rhombencephalon rhombi rhombohedral rhombohedron rhomboid rhomboidal rhomboideus rhonchi rhonchus rhumb/S rhumba rhus/S rhymester rhyolite rhyolitic rhythmicity rhythmist rhytidome ri/NR RIAA RIAA's rial rialto riant/Y riata ribaldry riband ribas ribband ribber ribbonlike ribby ribgrass riblet ribonuclease ribonucleoprotein ribonucleoside ribonucleotide ribose Rica Ricanism ricci ricebird ricercar richert richey richland richment rici ricin ricinus rickards rickenbaugh rickettsia rickey/S rickrack ricksha Rico ricotta rictal rictus ridded ridder rideable riderless ridgeling ridgling ridgy ridotto ridpath riegger riel Riemannian rife/Y riff/DGMS riffle/DGRS riffraff rification rifice/R riflebird riflery riflescope rifying Riga rigadoon rigatoni rigaudon Rigel/M rightism rigidify/N rigorism/MS rigorist/MS rigoristic/S rile/G rilke rille rillet rilly rimbaud rimland rimose rimous rimrock rimy/R rin rinascimento rinderpest ringbark ringbolt/S ringbone/D ringdove ringel ringent ringleader/S ringlike ringmaster/S ringneck ringolade ringstraked ringtail ringtaw ringtoss ringworm/S Riordan/M ripieno riposte ripper riprap ripsaw ripsnorter ripsnorting riptide risibility risorgimento risotto rit ritard ritualism ritualist ritualistic ritualistically ritzy/PR rivalrous riverbed riverview riverward/S riverweed Rivest/M riyal RNA roadability roadless roadrunner/S roadstead roadwork/S roadworthy/P roan robalo roband robbie roble robustious/PY roc rocambole Rocco rochet Rochford rockabilly rockaway/S rocketeer rocketry rockettes rockfish rocklike rockling rockoon rockrose rockshaft rockskipper rococo rodenticide rodeph rodless rodlike roemer roentgenogram/MS roentgenograph roentgenographic roentgenographically roentgenography roentgenologic roentgenological/Y roentgenologist roentgenology roentgenoscope roentgenoscopic roentgenoscopy roentgenotherapy roff rogation rogueing roguery roi/Y roic roister/DR roisterous rolamite rollick rollie rollout rollover rolnick romaine Romanesque romanticist romanza romaunt Romeldale romulo rondeau rondeaux rondel rondelet rondelle rondure ronnel ronyon roofhouse roofless rooflike roofline rooftree rookery rooky roomette rooney roorback roos roose rootage roothold rootkit/MS rootlet rootlike rootstalk rootstock rooty ropean ropedancer ropedancing ropery ropewalk/R ropeway ropework ropy/PR roque roquelaure Roquemore rorqual rosabelle rosaceous rosaniline rosarian rosebay rosefish roselike rosella rosemaling Rosenblum/M Rosenzweig/M roseola roseolar rosery roset rosewater rosewood rosie rosin/DG rosinous rosinweed roslev rossi rossoff rostagno/S rostellar rostellate rostellum rostra rostral rostrate rosulate roswell rota/D rotameter/MS rotatable rotatory rote rotenone rotgut rothko Rothschild/M rotifer rotisserie rotonda rotorcraft rotos rottenstone rotter rottosei rottweiler roturier rou/HNS roughage roughcast roughhouse/DG roughleg roughrider/S roulade rouleau rouleaux roundel roundelay roundish roundlet roundsman roundwood roup Rourke rouseabout rousement roust/R routeman routeway roux roven rowdyish rowdyism Rowe/M rowlock Roxbury/M roxy royalism royaux Royce royster rozella rozelle rozzer rpt rRNA RSA Rubaiyat rubasse rubato rubberlike rubberneck/R rubbishy rubblework rubefacient rubellite Ruben/M rubeola rubeolar rubicundity rubiginous Rubin/M rubious rubrical/Y rubricate/N rubricator rubus rubythroat rucellai ruche/G ruck rucksack ruction rudbeckia rudd rudderpost rudderstock ruddle/DG ruddleman ruddock ruderal rudesby/S rudimental Rudolf/M Rudyard/M rufescent ruff/DY ruffe/D ruffianism rufous ruga rugae rugal rugate rugger ruggiero rugose/Y rugosity rugulose ruh ruidoso ruinate ruleless rulership rumba rumbly rumbustious rumdum rumina ruminal ruminate/NV ruminative/Y ruminator rummel rummer rummest rumrunner runagate runaround runback runcinate rundle rundlet Runge runless runlet runnel/S runneth runny runout/S runover runtm rupiah/S rupicoline rupicolous ruppert ruralist rurban rushall rushee rushlight rushy russetting russify/N Russo/M russula rustical/Y rusticator rusticity ruthenic ruthenious Ruthful/PY rutilant rutile ruttish/PY Rwanda/M Rydberg/M ryegrass saba sabadilla sabbat sabbatic sabin Sabina/M sabol sabot saboteur/S sabra sac sacahuiste sacaton saccade saccadic saccate saccharase saccharate saccharide/S saccharify/N saccharimeter/MS saccharimetry saccharin saccharine saccharinity saccharoidal saccharometer/MS saccharomyces saccharose saccular sacculate/DNS saccule sacculus sacerdotal/Y sacerdotalism sacerdotalist sachem/S sachemic sachet/D sacheverell Sachs/N sackbut sackcloth sackful saclike sacque sacra sacramental/Y sacramentalism sacramentalist sacrarium sacre/G sacrestia sacrilegiousnes sacristan sacristy sacroiliac sacrosanctity sacrum saddhu saddlebow saddlecloth saddleless saddlery saddletree Sadler/M sadomasochism sadomasochist sadomasochistic safecracker safecracking safelight safetyman safflower Safier/M safranin safranine safrole sagami saggar sagger sagittal/Y Sagittarius sagittate sago/S saguaro sahib sailable sailboard sailcloth sailon sailplane/R sain sainfoin saintdom saintlike saintsbury saintship Saipan/M saith saithe saki sako salability salamandrine salariat saleable saledo saleratus saleroom salesclerk Salesian salesroom salic salicin salicylate salida salientian salimeter/MS Salina/M salinity salinometer/MS Salish Salle sallet sallowish salmagundi salmi salmonberry/S salmonella salmonellosis salmonid salmonoid salometer/MS saloonkeep saltarello saltation saltatorial saltatory saltbox saltbush saltcellar saltern saltine saltire saltless saltlike Salton saltonstall saltshaker saltworks saltwort salubrity/I saluki salutaris salutational salutatorian salutatory salutiferous salutory salvable salvageability salvational salvationism salvationist salverform salvific salvoes salvor samar samara Samaritan samarium samarskite samba sambar sambur samisen samite samlet samp sampan samphire samurai/MS San Sana sanatarium sanative sanbenito Sanborn/M sancta sanctimony sanctum sandarac sandbagger sandbank sandbar sandbur Sanderling sandglass sandhog sandling sandlot sandlotter sandpapery sandsoap sandstorm/S sandworm/S sangaree sangfroid sanguinaria sanguineum sanguinity sanguinolent sanicle sanious sanipractor sanitaire sanitarian sanitarily sanitorium sannyasi sans sansei/S sanserif sansevieria sanskritic sansom sansome sant Santo/S santolina santonica santonin santour saphead/D saphenous sapid sapidity sapience sapiens sapient/Y sapio sapless/P sapodilla sapogenin saponaceous/P saponifiable saponify/NR saponin/S saponite sapor saporous sapota sapper sapphic sapphirine sapphism Sappho/M sapremia sapremic saprobe saprobic saprobically saprogenic saprogenicity saprolite sapropelic saprophagous saprophyte saprophytic saprophytically saprozoic sapsago saraband sarabande Saracen/MS Saran sarape sarasate sarcenet sarcoid sarcoidosis sarcolemma sarcolemmal sarcomatosis sarcomatous sarcomere sarcomeric sarcophagic sarcophagous sarcophagy sarcoplasm sarcoplasma sarcoplasmatic sarcoplasmic sarcosomal sarcosome Sardinia/M sardonically sardonicism sardonyx sargasso sargassum sarge sarmi sarod sarode sarodist sarong/MS sarpsis sarsaparilla sarsenet sarsparilla sarti sartorial/Y sashimi saskatoon sass sasswood SATA satang/S satanically Satanism Satanist satchelful sateen satem sati satiety satinet satinwood satiny satori saturable saturant saturator saturnali saturnalian/Y saturniid Saturnism satyriasis satyric satyrid saucebox saucerlike sauch sauerbraten sauger Saul/M Sault saurel saurian sauries sauropod savable savagism savanna/MS savant/S savate saveable Savoy Savoyard/S sawbelly sawbones/S sawbuck sawfish sawfly sawlike sawtimber saxhorn saxifrage saxophonic saxton sayable/U SC scabbing scabble/DGS scabby/R scabies scabietic scabiosa scabious scad/MS scag scagliola Scala/M scalade scalado scalage scalare scalariform/Y scalation scalawag scaleless scalelike scalene scalepan scallion scallopini scallywag/S scalogram/MS scammed scamming scammony scampi scampini scampish scandalmonger scandent scannable scansion scantling scape/G scapegoatism scapegrace scaphoid scapin scapolite scapose scarab scarabaeid scaramouch scaramouche Scarborough scarecrowish scarehead scaremonger scarey scarfpin scarfskin scarious scarlatinal Scarlatti/M scarless scarp/DGRSZ scarper/DGS scarph scarring scarry Scarsdale/M scatback scathe/DS scatheless scatological scatology scatted scatteration scattershot scatty/R scaup/RS scc scena scenarist scenical/Y scenographic scenographically scenography scentless sceptibly Schantz Scheherazade/M schelling schematism scherzi scherzo schismatic schismatical/Y schismatist schistose schistosity schistosomal schistosome schistosomiasis schistous schizo/S schizocarp schizogonic schizogonous schizogony schizomycete schizomycetous schizont schizophrene schizophrenically schizophyte schizophytic schizothymic schlemiel schlepp Schlesinger/M schlieren schlieric schlock Schloss schmaltz schmaltzy schmalz Schnabel/M schnauzer schnitzel Schoenberg/M Schofield/M scholastica scholasticate scholasticism scholiast scholiastic scholium schoolchild schoolfellow schoolman schoolmistress schooltime schopenhauer schorlaceous Schottky/M schuman Schuyler/M Schuylkill Schwab schwada Schweitzer/M sciaenoid sciatic sciential scientifique scientism scientologist scientology scilicet scilla scintigraphic scintigraphy scintilla scintillant/Y scintillator scintillometer/MS sciolism sciolist sciolistic sciomancy sciomantic scirocco scirrhi scirrhous scirrhus scissile scission/A scissortail sclerose/D sclerotial sclerotin sclerotium SCM scolecite scolex scolices scoliosis scoliotic scollop scolopendra scombroid sconce scone scoopful scopic scopolamine scopula scopulate scorbutic scorbutically scorekeeper scoria scoriaceous scorpaenid scorpioid scotchgard scotchman scoter scotoma scotomatous scotopic scottie scouse/R scoutcraft scoutmaster scrabbly scrag scragging scraggy/R scrannel scrapie scrapper scrapple scrappy/PR scrawly screak screaky scree screenable screenful screvane screwbean screwlike screwworm screwy/PR scrieve scrimpy scrimshaw scrip scriptal scription scriptorium scriptwriter/MS scrod scrofula scrofulous scrollwork scrota scrotal scrotum/MS scrouge/G scrubby/R scrubland scrubwoman scruff scruffy/PR scrum scrummage scrunch scrutator scrutin scrutineer scud/S scudded scudding scullery/S scullion/S sculpin sculpsit sculptress sculpturesque/Y scumble/DGS scumming scummy scunner scup/S scupper/DGS scuppernong scurf scurfy scurril scurrile scurrility scuttlebutt scutum SD SE seabag seabeach seabed/M seabird seaboot seaborne seacraft seadog seadrome seafloor seafowl seafront seagirt seagoing Seagram/M sealery sealskin seamanlike seamark seamlike seamount seamster Sean/M seaplane seaquarium searchable/U searchless seascape sease seashell/MS seastrand seawall seaware seaworthy/P sebaceous sebum sec secateur/S secco secessionism seclusive/PY secobarbital secondo secretaryship secretin secretionary secretor secretory sectarianism sectary/I sectile/I sectility sectionalism sectorial secularistic secund securement seder sedgwick sedgy sedilia sedimentologic sedimentological/Y sedimentologist sedimentology seducement seductress sedulity sedulous/P sedum seeable seedcake/S seedlike seedpod seedsman seedtime seel seeley seepy seeress seerey segetal segmentary segno/S Segovia seguidilla segur segura sei seicento seiche Seidel seigneur seigneurial seigneury seignior seigniorage seigniory seignorage seignorial seignory seine/GR seisin/S seism seismicity seismogram/MS seismographic seismologist seismometric seismometry selachian selaginella selden selectee selectman selectmen Selena/M selenic selenide seleniferous selenious selenocentric selenographer selenographic selenographist selenography selenological selenologist/MS selenology selenosis selfadjoint selfdom selfhood Selkirk/M sellable selle selvage/D selvedge/D Selwyn/M semasiological semasiologist semasiology sematic semblable semblably semeiology sement semestral semestrial semiabstract semiabstraction semiaquatic semiarboreal semiaridity semiautomatically semiautonomous semibasement semibreve semicentenary semicentennial semicircle/S semiclassic semiclassical semicolonial semicolonialism semicolony semicommercial semiconducting semiconscious/PY semiconservative/Y semicrystalline semicylindrical semidarkness semidesert semidetached semidiameter semidiurnal semidivine semidocumentary semidome/D semidomestic semidomesticated semidomestication semidominant semidouble semidry semiellipse semielliptic semielliptical semiempirical semierect semievergreen semifinal semifinalist semifinished semifitted semiflexible semifluid semiformal semifossil semigloss semigovernmental semigroup semilegendary semilethal semiliquid semiliterate semilog semilunar semilustrous semimanufactures semimetal semimetallic semimicro semimoist semimonastic semimonthly semimystical seminarist seminiferous semiofficial/Y semiological semiology semiopaque semiosis semiotic/S semiotical semiotician semipalmated semiparasitic semipermeability semipermeable semiphore semipolitical semiporcelain semipostal semiprecious semiprivate semipro semiquaver semiramis semireligious semiretired semiretirement semirigid semisacred semisedentary semishrub semishrubby semiskilled semisoft semisolid semisweet semisynthetic semiterrestrial semitonal/Y semitone semitonic semitonically semitrailer semitranslucent semitransparent semitropic/S semivowel semiweekly semiworks semiyearly semmes semolina semper sempervivum sempiternal/Y sempiternity semple semplice sempre sempstress semra sen/S senarii senarius senary senatorian senatorship sendable senecio senectitude senega senesac senescence senescent seneschal sengi senhor senhora senhores senhorita senilis senility senioritatis seniti senna sennet sennight sennit sensa sensationalist sensationalistic senseful sensibilia sensillum sensitometer/MS sensitometric sensitometry sensorial/Y sensorimotor sensorineural sensorium sensualism sensualist sensualistic sensum sensuosity sententia sententious/PY senti sentience/I sentimentalism sentimentalist Sep sepal separably separationist separatism separatist separatistic sepiolite Sepoy sepses sepsis septa septal septenarius septendecillion septentrion septentrional septicemia septicemic septicidal septifragal sepuchral sepulture sequacious/Y sequacity sequela sequelae sequency sequent sequestrate sequestrum sequinned ser sera serac serafin seraglio serai seral seraphic seraphically serbantian Serbia/M serbian sere serfage sergeancy sergeanty Sergei/M serialism serialist seriate/Y seriatim sericeous sericin sericultural sericulture sericulturist serieuses serif serigraph/R serigraphy serin serine seriocomic seriocomically serjeants serjeanty sermonic serodiagnosis serodiagnostic serologic serologist seropurulent serosa serosal serotinal serotinous serotonin serotype serous serow Serpens serpiginous/Y serra serranid serranoid serrate/DGNS serratus serried/PY serry/DG serting sertive sertularian serval servanda servation servatius serviceably serviceberry servility servomotor servosystem/S sesamoid sesquicarbonate sesquicentenary sesquicentennial sesquipedalian sessed sesshu sessile sessility sessional sesterce sestertium sestet sestina seta setaceous/Y setae setal Seth/M setline setnm seto setoff setom Seton setose setout setpoint/S settee/S settlor setz setzb setzm seurat sevec seventyfold Severn/M severna sevigli sewickley sexagenarian sexagesimal sexdecillion sexless/PY sexology sexpot sext Sextans sextic sexto/S sextodecimo sextuor sextuplicate sey Seychelles sforzando shacklebone shad shadberry shadblow shadbush shaddock shadeless shadflower shadoof shadowbox shadowgraph shadowless shadowlike Shafer/M Shaffer/M shagbark shaggymane shagreen shahdom shahn shaitan shako shakoes shakya shalloon shallop shallot shalt shaman shamanism shamanist shamanistic shamefaced/P shamefast shammer shammes shamming shammosim shammy shamus shan shandrydan shandy/S shandygaff shanghaied shanghaier shankpiece shansi shantey Shantung shantyman shantytown shapable shapeable shapen/U shard shareability shareable Shari/M sharkskin Sharpe sharpie/S sharpy/S shashlick shashlik shatilov Shattuck/M shaveling shavetail shavie shawano shawm shawomet shay/S shayne shayol Shea sheaflike sheahe shearn shearwater sheatfish sheathbill shebang shebeen sheboygan shedded shedder Shedir Sheehan/M sheen sheeny sheepfold sheepherder sheepherding sheepish/PY sheepshank sheepshead sheepshearer sheepshearing sheeran sheetfed sheetlike sheikdom sheikh sheikhdom shekel shelagh shelfful shelflike shellac shellacked shellacking shellcracker shellfire shellfish shellproof shellwork shelly shelterbelt shelterless sheltie/S shelty/S shend/G shensi shep Shepard shepherdess Sheppard/M sherbert sherd sherif sheriffdom Sherrill/M sherris shevelling shew/S shewe shh shiel/G shietz shiflett shiftable shigella shih shikar shikari shikarred shikarring shiksa shikse shilingi shillalah shillelagh shillong Shimano/M shimmery shindy/S shingly shinleaf/S shinnery shinney shinning shinny/DG shinplaster shinsplints shipborne shipfitter shiplap Shipley shipload shipmaster shipowner shipside shipway shipworm shipwright shirr/G shirtwaist/R shirty shish shitepoke shiv Shiva/M shivaree shlemiehl shlock Shmuel sho shoat Shockley/M shockproof shoebill shoeblack shoepac shoepack shogun shogunate sholom shoon shoplift/DRZ shoppe shoptalk shoran shorebird/MS shorefront shoreside shoreward/S shortbread shortcake shortchange/R shorthorn shortie/S shortliffe shorty/S Shoshone/M shotbush shotline/S shotten shouldst shoup shovelful shovelhead shovelman shovelnose shovelsful showbread showery showstopper shrievalty shrieve shrike shrimpy shrive/D shriven shroff shrubby/R shtetel shtetl shtetlach shtg shtick Shu/M shuiski shul shulde Shulman/M shunner shunpike/GR shush shute shutterbug shutterless shuz shyer shyes shyest shylockian shyster si/H sialagogue SIAM siamang Sian/M sib/Y sibe sibilate/N Sibley sibyl/S sibylic sibylla sibyllic sibylline siccative siccing siciliana sickbed/MS sicklebill sicklemia sicklewort sid siddo siddur siddurim sideburned sidedress sidehill sidekick/S sideling sidency sident sidepiece siderite sideritic siderolite sideslip/S sidespin sidesplitting sidestepped sidestepper sidestroke sideswipe sideward/S SIDS sie sieben siebern siecle/S Siegel/M Sieglinda/M Siegmund/M Siemens Siena siepi sierran sieux Sifford sig SIGABRT SIGALRM SIGBUS SIGCHLD SIGCLD SIGCONT SIGEMT SIGFPE Siggraph sightless/P SIGHUP Sigil SIGILL SIGINT SIGIO SIGIOT SIGKILL sigmoid sigmoidal/Y signalman signalmen signalment signatory/S signifiable significancy/I significative/PY significs signior signiory/S signori signorina signorino signory/S SIGPIPE SIGPROF SIGQUIT SIGSEGV SIGSTOP SIGSYS SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR SIGVTALRM SIGWINCH SIGXCPU SIGXFSZ sike/G silane sild/S silenus silesia silex siliceous silicic silicicolous silicify/N silicious silicle silicosis silicothermic silicotic silique silkaline silke silkoline silkweed sillabub sillimanite silone siloxane siltstone/S siluroid silva/S silvan silverfish silvern silverside/S silverweed silvical silvicolous silvics silvicultural/Y silviculture silviculturist simazine simba simca Simla simmel simms simnel simoleon Simonson/M simony simoom simoon simp/RZ simpatico simper/DGRS simplices simplicial/Y simplifiction simplism simplistically Sims simulacre simulacrum simular sinan sinapism Sinatra's Sinbad/M sincipita sincipital sinciput sind sinecure sinfonia sinfonietta Singborg singeing singleminded singlestick singletree singsong singsongy singspiel sinh siniboia sinistrorse sinistrous sinkable sinkage Sino sinoatrial sinological sinologist sinologue sinology sinopia sinsyne sinterability sinton sinuate/Y sinuatrial sinuosity sinusitis sion SIP's siphonless/S siphonlike/MS siphonophore siphonostele siphonostelic siphonostely sipper sippet siree sirenian sirloin sirocco sirra sirrah sirree sirupy sirvente/S siskin sissified sissy/S sisterhood sistrum Sitar Sitarist sitosterol siva/S sixmo/S sixpenny sixteenmo sixtyfold sizably sizar sizova skag/N skald skaldic skateboard/GMRS skedaddle/DGRS skeg skeigh skein/MS skeleta skellum skelp/G skelpit skelter/DG skene skep skepsis skerries skers skery skewback skewbald skiable skiagram/MS skiagraph skiagraphy skiascope skiascopy skidder skiddoo skiddy/R skidoo skiffle skilful/Y skilless skimobile skinflint/MS skinful skinhead skink/R skint skintight skipjack skirl skirr skitter skittery skive/GR skivvy/S skiway skiwear skoal Skopje skulduggery skyborne skycap skyey skylounge skyphoi skyphos skyros skysail skywrite/GR slabber/DG slabbing slangy/PY slantways slantwise slapdash slaphappy slapjack slatelike slather/DGS slattern/Y slatternly/P slaty slaughterous/Y slaveholder/S slaveholding slavey/S slavocracy Slavonic sledded sledder sleekit sleeplessess sleeplike sleepyhead sleeveless sleevelet slesinger sleuth sleuthhound slidden slideway slimmest slimming slimpsy slimsy slinky/PRY slipcase slipcover slipform slipknot slipover slippy/R slipshod slipslop slipsole slipstick slipup slithery slitless slivovitz slobber/DGRS slobbery slobbish slogger slopwork/R slotback slotting slouchy/PRY sloughy Slovakia/M Slovenia/M Slovenian/M slowish slowpoke slub slubber/DG slubbing sludgy/R slue/G sluff slugabed slugfest sluggard/PY sluiceway sluicy slumberous slumbery slumbrous slumgullion slumlord slummer slummy/R slungshot slushy/PR slut sluttish/PY slyboots Smalley/M smartie/S smartweed smarty/S smashup smatter/R smearcase smeary smectic smegma smeltery smidgen smidgeon smileless/Y smirch smirky smithery Smithson/M smithsonite smoggy/R smogless smokeable smokechaser smokeless smokelike smokeproof smokey smolt smoochy smoothbore smoothie/S smoothy/S smorgasbord smothery smoulder SMP smsa/MS smugger smuggest smutch smutchy smutted smutting Smyrna/M Smythe snaffle/DG snaggletooth/D snaggy snaillike snakebite/MS snakemouth snakeskin snakestrike snakeweed snaky/Y snappe snapshoot/R snark/S snarly snash snatchy snath snathe sndmsg snead sneap sneck sneed sneesh sneezeweed sneezewort sneezy snell/G SNIA/M snick snickersnee snickery sniffish/PY sniffy/PY snigger/DGR sniggle/DG sniperscope snippety snit snobbism snobby snodgrass snollygoster snood snooperscope snoot snooty/PRY snooze/GRS snoozle/DGS snopes snot snoutish snouty snowbound snowbrush snowcap snowcapped snowdrift snowdrop snowfield snowless snowmaker snowmaking snowmelt snowpack snowscape snowshed snowshoeing snowslide snowsuit snubber snubby/P snuffbox snuffy snugger snuggery snuggest soakage soapbark soapless soapmaking soapwort soba sobe sobersided sobersides sobf sobibor Soc socage/R socal soccage sochi sociableness socialistically socialite Societe socinianism sociolinguistic/S sociologic sociopath sociopathic sociopolitical sociosexual sociosexuality sockdolager sockdologer sockeye socle socola soconoco sodalist sodalite sodality sodbuster sodded Soddy sodic sodomite soeren soever soffit softback softbound softcover softhead/D softheaded/PY softhearted/PY softie/S softish softy/S sohn soign soignee soilborne soilge soilless soilure soir soke sokeman sokol sokolev sokolov sokolsky sola solacement solanaceous solanin solanine solanum solarium solate/DG solatium soldan solderability soldi soldiership solecistic solemnify solenoidal soleplate soleprint solesmes solfatara solicitant solicitorship solidago solidarism solidarist solidaristic solidus solifluction soliloquist solipsist solipsistic soliton solitudinarian solitudinem solleret soln Solon solonets solonetz solonetzic Soloviev solstitial solubleness solubly/I solus solute solvability solvate/DN solventless solvolysis solvolytic Somalia somatically somatogenic somatological somatology somatoplasm somatoplastic somatopleure somatopleuric somatosensory somatotrophin somatotropin somatotype somatotypic somatotypically sombre sombrero sombrous somedeal someway/S somewhen somewhither somite somitic Sommerfeld/M somnambulant somnambular somnambulate/N somnambulator somnambulism somnambulist somnambulistic somnambulistically somnifacient somniferous/Y somnolency sonambula sonance sonant sonarman sonatina sonde sone Sonenberg songau songbird songfest songless/Y songsmith songster songtress songwriting sonically sonicate/DN sonicator/S sonless sonneteer sonnobuoy sonogram/MS sonorant sonovox sonship sonsie sonsy soomed soothfast sooty/PRY sophistic sophistical/Y sophy sopite/DG sopor soporiferous/P soppy/R sopranino sopsaisana sora sorb/D sorbability sorbable sorbate sorbent sorceress sorcerous sordino sorehead/D sorgo sori soricine sorites sororal sororate sorption/A sorptive/A sorrentine sorrentino sortable sortilege sortition sorus SOS SOSP's sostenuto sot soteriological soteriology sotol sottish/PY sotun sou soubise soubrette souchong sough soukhouma soule soulless/PY soundable soundboard soundless/Y soupspoon soupy/R sourberry sourceless sourish sourpuss soursop sourwood sousaphone souse/G sout/R soutache soutane Souter's southeasternmost southeastward/S Southernwood Southey southwesternmost southwestward/S sovietism sovkhoz/S sovran sovranty sowbug/MS soxhlet spa/S spaceband spaceflight spaceless spaceman spaceport spacetime spacewalker spacewalking Spacewar spacial spackle/DG spacs spacward spada spadeful spadework spadices spadille spadix spaeing spahi spahn spake spalding spall/DG spallable spallation spandrel spandril spang spanworm SPARC's SPARCs spareable spareribs sparge/GR sparkish sparkplug sparred sparrowgrass sparsity spartan sparteine spasmodic spasmodical/Y spasmolytic spasmolytically spastically spasticity spathe spathic spathulate spatiotemporal/Y spatlum spatted spatting spatulate spavin speakeasy Speakerphone spean spearfish spearman specialism/S specialistic speciate/N speciational speciosity specsartine spect spectate/DG spectatress spector Spector's spectrality spectrofluorimeter/MS spectrofluorometer/MS spectrofluorometric spectrofluorometry spectrographic spectroheliogram/MS spectroheliograph spectroheliography spectrohelioscope spectrophotometrical/Y spectroscopical spectroscopist speculum speechify speedball speedlight speedster speedway speedwell speel speir speiss speleogenesis speleogenetic spellbind/R spelldown spelt/R spelunker spelunking spendable spendthrift spenglerian spermaceti spermagonium spermary spermatheca spermathecal spermatial spermatic spermatid spermatium spermatocidal spermatocide spermatocyte spermatogenesis spermatogenetic spermatogenic spermatogonial spermatogonium spermatophore spermatophytic spermatozoa spermatozoal spermatozoan spermatozoid spermatozoon spermicidal spermicide spermidine spermiogenesis spermophile sperrylite spessartite sphagnous sphagnum sphalerite sphene sphenodon sphenodont sphenoid sphenoidal sphenopsid spheral sphericity spherometer/MS spheroplast spherulite spherulitic sphery sphincter sphincteral sphinges sphingid sphingosine sphygmograph sphygmographic sphygmography sphygmomanometer/MS sphygmomanometric sphygmomanometrically sphygmomanometry Spica/S spicae spicate spiccato spiceberry spicery spicula spicular spiculate/N spicule spiculiferous spiculum spiderweb spiegeleisen spiel/R spiffy/R spikelet spikelike spikenard spile/DGS spillable spillikin/S spillway spilosite spilth spinco spindly spindrift spinel spinelle spinescent spinet spinifex spinless spinneret spinnerette spinney/S spinodal spinoff spinor spinosely spinosity spinous spinout spinrad spinse spinsterhood spinsterish spinthariscope spinule spinulose spiracle spiracular spiraea spirant spirea spireme spirillum spiritism spiritist spiritistic spiritless/PY spiritoso spiritous spiritualism spiritualist spiritualistic spiritualty spirituel spirituelle spirituous Spiro/M spirograph spirographic spirography spirogyra spirometer/AMS spirometric/A spirometry/A spirt spirula spiry spital spitball spitted spitter spittoon/S Spitz splashboard splashdown/S splatter splayfoot/D spleenful spleenwort spleeny splendent splendiferous/PY splendorous splendrous splenectomy splenetically splenic splenius splenomegaly splent spleuchan splore spluttery spodumene spoilable spoilsman spoilsport spoilt spokeshave spokespeople spokesperson/M spokeswoman spoliate/N spoliator spondaic spondee spondylitis sponson sponsorial spontoon spookish spoondrift spooney spoonsful spoony/R spoor sporangial sporangiophore sporangium sporicidal sporicide sporiferous sporocarp sporocyst sporocystic sporogenesis sporogenic sporogenous sporogonic sporogonium sporogonos sporogony sporophore sporophyll sporophyte sporophytic sporopollenin sporotrichosis sporozoan sporozoite sportful/PY sportsmanlike/U sportswoman sportswriting sporulate/NV Sposato spottable sprat spreadability spreadable sprent sprigging sprightful/PY sprigtail springal springald springbok/S springe springtail/S springtide springwood sprit spritsail Sproul/M sprucy/R spry/RTY spryer spryest spryness spss spudded spudding spumone spumous spumy spunkie spurrey/S spurry/R spurtle sputa sputum spuyten SQL's squab/S squadded squadding squalene squally/R squama squamae squamate/N squamosal squamose squamulose squaresville squarish/PY squark squashberry squattest squatty/R squawbush squawroot squeegeeing squeezability squeezable squelchy squib/S squidded squidding squiffed squiffy squiggle/DGS squiggly squilgee squill/S squilla squillae squinch squinny/DG squinty squirarchy squirearchy squirish squoosh Sri/M SSD SSD's SSDs SSE SST SSW stabat stabber stabile stablemate stablish stablishment staddle stade stadia stadtholder stadtholderate stadtholdership stagestruck stagey staggerbush staggery stagging staggy staghound stagnancy Stahl/M stainability stainable stakeholder stakeout stalactitic stalagmite/MS stalagmitic stalkless stalky stallard stalworth staminal staminodium staminody stammel standardbred standaway standbys standee standeth standoffish/PY standout standpat standpatter standpattism standpipe stang Stanhope/M stanite stannard stannary/S stanzaic stapedectomy stapedes stapedial stapelia stapes staph staphylinid staphylococcal staphylococcic starbird stardust starets Stargate/M starless starlike starlit starre starveling stases statable statant stateable statecraft statedly statehouse stateside statical statice stational statism statist stato statoblast statocyst statolatry statolith stator/S statoscope statutable statz Staunton staurolite staurolitic stavesacre stavropoulos steamroll/R steapsin stearate stearic stearin stearine steatite steatitic steatolysis steatopygia steatopygic Steele/M steelhead steelie steelwork/RS steelyard Steen/M steenbok steeplechase/R steeplejack steerable steerage steerageway steersman steeve/G Stefan/M steffens stegosaur stegosaurus steichen steinbecks stela stelae stelar stele stellate stelliform stellify stemless stemma stemmata stemmer stemmy/R stemson stemware stenchful stenchy Stendhal Stendler steno/S stenobathic stenograph stenographic stenographically stenohaline stenophagous stenos/D stenosis stenotherm stenothermal stenothermy stenotic stenotopic stenotypist stenotypy stentor stentorian stentorophonic stephan stephanotis stepladder steplike steprelation steradian stercoraceous stere stereobate stereochemical/Y stereochemistry stereogram/MS stereograph stereographic stereographically stereoisomer/S stereoisomeric stereoisomerism stereological/Y stereology stereometric stereomicroscope stereomicroscopic stereomicroscopically stereophonically stereophony stereophotographic stereophotography stereopsis stereopticon stereoregular stereoregularity stereoscope stereoscopic stereoscopically stereospecific stereospecifically stereospecificity stereotape stereotaxic stereotaxically stereotropism stereotypy steric/S sterically sterigma sterilant sterios sterlet sterna Sternberg/M sternforemost sternite sternmost sternocostal sternpost sternson sternutation sternutator sternutatory sternward/S sternway steroidal steroidogenesis steroidogenic sterol stertor stertorous/Y stet stethoscopic stethoscopically stetted stettin stetting stevie stewpan stibine stibnite stichomythia stichomythic stichomythy stickball stickful stickhandler stickit stickseed sticktight stickum stickup stickweed stickwork sticle sticy stidger stiffish stigmal stigmasterol stigmatic stigmatically stigmatism stigmatist stilbene stilbestrol stilbite stillman stillroom stillwater stillwell stilly stime stimulator/S stingaree stingless stingray/MS stinkard stinkbug/MS stinkhorn stinkpotters stinkstone stinkweed stinkwood stion/G stipe/DS stipel stipellate stipendiary stipitate stipites stipular stipulator stipulatory stipule/D stirabout stirk stirp/S stirpes stitchery stithy/S stoat/MS stockbreeder stockbrokerage stockbroking stockcar stockinet stockinette stockish stockist stockkeeper stockman stockpot stockproof stocktaking stockyard stockynges stodge/G stogie/S stogy/S stoical/Y stoichiometrically stokehold stokehole stokesia stolidity stoll/NX stolon stolonate stoloniferous/Y stolzenbach stoma/S stomachache stomachic stomachically stomachy stomal stomata stomatal stomate stomatitis stomatologic stomatological stomatologist stomatology stomatopod stomodaeal stomodaeum stomodeal stomodeum Stone/M stonecrop stonecutting stonemasonry stonework/R stoney Stonybrook/M stonyhearted/P stoolie stoopball stopband stope/S stoplight/S stopple/DG storable/A storax storeria storeship storewide Storey/DS storksbill storybook/S storywriter stouthearted/PY stoutish stovepipe/S stowaway/MS stowe stowey strabismic strabismus strafaci straggly/R straightbred straightedge straightish straightjacket straightlaced strainometer/MS straitlaced/PY strake stram stramash stramonium stranahan strandline strangury straphang/R strapless strappado strapper strategical strath strathspey/S strati straticulate stratiform stratocracy stratocumulus Stratton/M stratus stravage stravinsky strawboard strawman streaky/PR streambed streamlet streamside streek streetwalker streetwalking strengthless/P strenuosity strep streptobacillus streptococcal streptococcic streptokinase streptolysin streptomyces streptomycete streptothricin stressless/P stressor stretchability stretta stretti stretto/S strewment stria striae strick Strickland/M strickle/DG stridden stridence stridor stridulate/N stridulatory stridulous/Y strifeless strigil strigose strikebound strikeless strikeout strikeover Strindberg stringboard stringcourse stringency stringendo stringhalt/D stringless stringpiece stripeless stripfilm stripling strippable stript stripy/R strobila strobilar strobilation strobile strobilus stroboscope stroboscopically strobotron Strom/M stroma stromal stromata stromatal stromatic stromatolite stromatolitic stromeyerite strongbox strongheart strongish strontia strontianite strontic strophanthin strophic strophoid stroud/G strow/G structuralism structureless/P strudel struma/S strumae strummer strumose strumpet strunt struthious strychninism stubblefield/S stubbly stuccoes stuccowork studbook/S studding studentship/S studhorse stuffless stull stum/R stumblebum stumming stunner stunsail stupa stupe stupefacient stupefaction stuporous Sturbridge/M sturch sturley Sturm/M sturt stye/GS styka Stylar stylebook styleless/P stylet styliform stylite stylitic stylobate stylograph stylographic stylographical/Y stylography styloid stylolite stylopodium stymieing styptic styrax suability suably suasion suasive/PY subacid/PY subacute/Y subadar subadult subaerial/Y subagency subagent subahdar subalpine subalternate/NY subantarctic subapical Subapically subaquatic subaqueous subarctic subarea subatmospheric subaudible subaudition subaverage subbase subbasement subcabinet subcapsular subcelestial subcellular subcentral/Y subchaser subchloride subclavian subclimax subclinical/Y subcollegiate subcommunity subcompact subcontinental subcontraoctave subcontrariety subcontrary subcool subcordate subcortex subcortical subcritical subcrustal subcultural subcutaneous/Y subdeacon subdeb subdebutante subdepot subdiaconate subdividable subdominance subdominant subedit subeditor subeditorial subemployed subemployment subentry/S subepidermal/Y suberect subfamily/S subfix subfossil subfreezing subgenus subglacial/Y subglottal subgrade subgrammar subgross subhead/G subhuman subhumanity subi subic subinfeud subinfeudate/N subinfeudatory subirrigate/N subito subj subjacency subjacent/Y subjectivism subjectivistic subjectless subjoin subjugator subjunction subjunctive subkingdom sublate/DGN sublet sublethal/Y sublevel sublicense/DGRS sublieutenant sublimable sublimity sublingual subliterature sublittoral sublunar subluxation submandibular submarginal/Y submaxilla submaxillary submediant submergence submergible submerse/DGN submicrogram/MS submicron submicroscopic submicroscopically subminiature submiss submitochondrial submontane submucosa submucosal/Y submucous submultiple subnormality suboceanic subopposite suboptimum suborbicular suborbital suborder suborn/DGRS subornation subovate suboxide/S subpar subparallel subphylum subplot/S subpolar subpotency subpotent subprincipal subprofessional subreption subreptitious/Y subring subrogate subsaline subsatellite subsaturated subsaturation subsectio subserve subserviency subshrub subshrubby subsidence subsonic subsonically subspecific substage substanceless substantiality/IU substantival/Y substituent/S substitutional/Y substratosphere substratospheric substructural subsumption subteen subtemperate subtenancy subtenant subtend subterminal subterraneous subtetanic subthreshold subtile/PRTY subtilis subtilisin subtilty subtonic subtotal subtropic/S subtropical subulate subvention subventionary subversionary subviral subvocal/Y succedaneous succedaneum succedent successional/Y succinate succinyl succinylcholine succory succotash succuba succubi succulence succulent/Y suchlike sucrase sucre sucrose suctional suctorial suctorian sudanic sudatorium sudatory sudoriferous sudorific sudsless sudsy/R suede suet suey suff sufferable/P sufferableness/I sufferably/I suffixation suffragan suffragist/S sugarcane sugarcoat sugarhouse sugarloaf sugarplum sugary suint sukarno sukiyaki sulamite sulamith sulcate sulci sulcus sullage sultanate sultaness sulzberger sumach Sumeria summa summability summable summae summated summates summating summational summerhouse summersault summerwood summery Sumner/M sumptuary sunay sunbath sunbathe sunbird sunbow sunburst/S sundae/S sundew sundrops sunfast sunlamp sunless sunn sunna sunroof sunscald sunstroke sunstruck sunsuit sunup sunward/S sunwise SUNY superable/P superably superabound superabundance superabundant/Y superacknowledgment/MS superadd superaddition superagency superaltern superannuate/DN supercalender supercargo supercharge/R superciliary supercity superconduct/GV superconductivity superconductor/S supercool superdominant superelevate/N supereminence supereminent/Y superempirical superencipher superencipherment supererogation supererogatory superfamily superfecundation superfetation superficies superfine superfix superfluid superfluidity supergalaxy supergene supergiant superheat/RS superheterodyne superhumanity superieure superimposable superimposition superincumbent/Y superindividual superinduce superinduction superinfection superintendence superintendency superjacent superjet superliner superluminal superlunar superman supernal/Y supernaturalist supernaturalistic supernormality supernovae supernumerary superorder superordinate superorganism superovulation superparasitism superpatriot superpatriotic superpatriotism superphosphate superphysical superpower/DS supersaturate/DN superscribe superscription supersedeas supersedure supersensible supersensory superserviceable supersession supersessive supersonically superstar superstratum supersubstantial supersubtle supersubtlety supersystem supertanker supertax supertonic supervenience supervenient supervention supervisee supinate/AN supinator suppl supplantation supplejack suppletion suppletive suppletory suppliance suppliant/Y supplicatory supportability supportableness supportably/I supposably supposal suppositional/Y suppositious supposititious/PY suppositive/Y suppository/S suppressant suppressibility suppurate/NV supr supraglottal supralaryngeal supraliminal/Y supramolecular supranationalist supranationality supraorbital supraprotest suprarational suprarenal supravital/Y supremum surah surbase/D surcingle surcliffe surcoat/S surefire surefooted/PY suretyship surfable surfboard/RS surfboat/S surficial surfperch surg surjection surjective surmountable surmullet surpassable surplice surplusage surprint surprisal surra surrealistic surrealistically surrebutter surrejoinder surroyal surtout surveil survivable survivance Sus susceptance susceptive/P susceptivity suspenseful suspensoid suspensory suspiration suspire/DG susquehanna sustentacular sustentation sustentative sustention susurrant susurration susurrous susurrus sutra suttee sutural/Y SUV's suzerain suzerainty Svetlana/M SW swabber swabbie swadesh swage swagging swagman swainish/P swale swallowable swallowtail swallowwort swang swanherd swannery swanning swansdown Swansea/M swanskin Swarthout/M swartz swashbuckle/GR swayback/D swearword sweatbox sweatpants sweatshop/M sweatsocks sweazey sweepback sweepy/R sweetbread/MS sweetbrier sweetmeat sweetshop sweetsop swellhead/D swellheaded/P swelter/D swidden swigger swill/R swimmable swimmeret swimmy/PRY swinburne swineherd swingably swinge swingeing swingletree Swink swishingly switchable switcheroo switchgrass switchyard swith/R swivet swoosh swop swordlike swordsman swordsmanship swot/S swotted swotting sybarite sybaritically sybert sycamine syce sycee syconium sycophancy sycophantish/Y sycophantism sycosis syenite syenitic Sykes syllabarium syllabary syllabically syllabicate/N syllabub syllepsis sylleptic syllogist syllogistically Sylow sylph sylphid sylphlike sylvanite sylvatic sylviculture sylvie Sylvie's sylvine sylvite sym symbiontic symbiote symbiotically symbolist symbolistic symbology symington symmetallism symonds sympathin sympatholytic sympathomimetic sympatric sympatrically sympatry sympetalous sympetaly symphonically symphonious/Y symphonist symphyseal symphysial symphysis symplectic sympodial/Y symposiarch symposiast symptomatically symptomatologic symptomatological/Y symptomless synaeresis synaesthesis synagogal synalepha synaloepha synapsis synaptically synaptosomal synaptosome synarthrodial/Y synarthrosis syncarpous syncarpy synch/G synchro/S synchroflash synchromesh synchronal synchroneity synchronic synchronical/Y synchronistic synchroscope synclinal syncline syncopal syncopator syncope syncretic syncretism syncretist syncretistic syncytial syncytium syndactylism syndactyly syndesis syndesmosis syndesmotic syndetic syndetically syndical syndicalism syndicalist syndicator syne synecdoche synecdochic synecdochical/Y synecologic synecological/Y synecology synectic/S synectically synephrine syneresis synergetic synergic synergically synergid synergist synergistically synesis syngamy Synge syngeneic synizesis synkaryon synodal synodic synodical synonymic synonymical synonymist synonymity synoptical/Y synostosis synovial synovitis synsepalous synthesist synthetase synthetical/Y syntonic syntonically syphilis syphilologist syphilology syren syringa syringomyelia syringomyelic syrinx/S syrphid sysgt syst systaltic systat systematical systematism systematist systemically systemless systemwide systole syzygial syzygy Szilard tabac tabanid tabard tabbed tabellen tabernacular tabes tabetic tabla tablature tableaux tableful tablespoonsful tableware tabloid tabor/DGRSZ taborin/S tabu tace tacet tach tachinid tachism tachist tachiste tachistoscope tachistoscopic tachistosopically tachs tachycardia tachygraphic tachygraphical tachygraphy tachylite tachymeter/MS tachyon/MS taciturn taciturnity tackboard tackify/R tacky/RSY tacloban taconite tactician tactility taction tactless/Y tad tadpole taeniacide taeniasis tagalong tagboard tagine/S taiga tailboard tailbone tailcoat/D taille tailless taillight/MS taillike tailorbird tailoress tailpiece tailrace tailspin/MS tailwater tailwind/MS taintless taipan taiwanese takedown takeout talc talcose talcum talebearer talebearing talentless talesman taleysim tali talipes talipot talisman talismanically talkathon talladega tallage tallahatchie tallahoosa tallboy tallchief talleyrand tallish tallith tallithim tallowy tallyman talmudic talmudical Talmudism talus tam tamandua tamarau tamarin tamarisk tambala tambour/R tamburitza tameable tameless Tamil tampala tamperproof tampion Tamron/M tanager Tanaka/M Tananarive tanbark tance tangelo tangere tangibility/I tanglement tangram tanh tanka tankage tankful tannage tannate tannenbaum tannest tannic tannish tansy/S tantalate tantalic tantalite tantara tantivy tantra tantric tapa tapeline tapeta tapetum taphole tapioca tapis tapley tappa taproom/S tapster/S tara/S taraday tarantara tarantism taraxacum Tarbell/M tarboosh tarbush tardigrade tardo tare targe targo tarheelia tarlatan tarmac tarmacadam tarn tarnishable taro/S tarok tarot tarpaper tarragon tarrant tarre tarriance tarsal tarsi/R tarsus tartan tartarughe Tartary tartish/Y tartlet/S tartrate/DS tartuffe taruffi Taser/M taskmistress taskwork Tass tasse tassel/M tasso tastemaker tat tatami tate tatian tatler tatras tatted tatterdemalion tattersall tattooist taui taupe taurine taurocholate taurocholic taurog Taurus taussig tautog tautologous/Y tautomer tautomeric tautomerism tautonym tautonymic tautonymous tautonymy taverna taw/S tawes tawie tawpie tawse taxa taxability taxeme taxemic taxidermic taxidermist/MS taxidermy taxies taximan taximeter/MS taxon/S taxonomist/MS taxus taxying tazza tchaikovsky teachability teachably teachership teacupful teak/MS teapoy teardown teargas tearjerker tearle tearless/Y tearlessnss tearoom/S tearstain/D teary/RY teaspoonsful teatime teatro teazel teazle/D technetronic technic/S technion technocracy technocrat technocratic technol technologic technostructure techy tecta tectal tectonism tectum tecum ted/S tedded tedding teenie/R teentsy/R teeny/R teenybopper teepee teeter teeterboard teetotal teetotalism teetotalist teetotum tegmen tegmental tegmentum Tegucigalpa/M tegument tegumental/I tegumentary/I teiid tektitic tel/Y telamon telamones telangiectasia telangiectasis telangiectatic tele telecamera telecast/R telecourse teledu telefacsimile telefilm teleg telegony telegraphese telegraphically telegraphist telekinetic telekinetically teleman telemann telemark telemetrically telencephalic telencephalon teleologic teleologist teleost teleostean teleostome telephonically telephonist/S telephotographic teleplay teleportation teleran telescopically telesis telethermoscope telethon teletypesetting teletypewrite/R teletypist teleutospore teleutosporic teleview/R televisionally televisionary televisual telia telial telic telically teliospore teliosporic telium telli tellurian telluric telluride tellurite tellurometer/MS tellurous telocentric teloic telome telophase telos telotaxis telpher telson temblor temerarious/PY tempeh tempera temperable tempi templeman templet temporality temptable tempura tenability/U tenably tenace tenaculum tenantable tenantless tenantry tench/S tenda tendance/I tendencious tendentious/PY tenderhearted/PY tenderometer/MS tendinous tendresse tendril/S tendrilous tenebrific tenebrionid tenebrious tenebrism tenebrist tenementary tenenbaum tenesmus tenex tenia teniacide teniasis tennist tenosynovitis tenour tenpenny tenpin/S tenpounder tenrec tensility tensimeter/MS tensiometer/MS tensiometric tensiometry tensity tensometer/MS tentacular tentage tenterhook/S tentie tentless tentmaker tenty tenuis tenuity tenurial/Y tenuto teocalli teonanacatl teosinte tepa tepee tephra tepidity ter/DT terai teraph teraphim teratogen teratogenesis teratogenicity teratologic teratological teratologist teratoma teratomatous terce tercentenary tercentennial tercept tercet terebene terebic terebinth terebinthine teredines teredo terephthalate terete terga tergal tergite tergiversate/N tergiversator tergum teriyaki termagant/Y terminably terminational termined termining terminism termitarium termless termtime ternate/Y terneplate terpene terpeneless terpenic terpenoid terpineol terpolymer Terpsichore/M terr terrae terram terrane terraqueous terrarium terrazzo Terre/M terrene terreplein terret terricolous terrifically terrigenous territorialism territorialist territoriality terrorless tertre tervalent tery tessera Tesseract tessie tessitura testa testacean testaceous testacy/I testae testatrix testcross testis teston testoon testosterone testudo tetanal tetanic tetanically tetany tetartohedral tetched tetchy/R tete/R teth tetherball tetra tetrabasic tetrabasicity tetracaine tetrachord tetracid tetrad tetradecyl tetradic tetradrachm tetradymite tetradynamous tetraethyl tetraethyllead tetragonolobus tetragrammaton tetrahedrite tetrahydrate/D tetrahydrocannabinol tetrahydrofuran tetrahydroxy tetrahymena tetralogy tetramer/MS tetrameric tetramerous tetrameter tetramethyl tetramethyllead tetraploid tetraploidy tetrapod tetrapyrrole tetrarch tetrarchic tetrarchy tetraspore tetrasporic tetratomic tetrazolium tetrode/S tetrodotoxin tetrxide tetryl tetter tewfik textbookish textuary thalamencephalon thalamic thalamically thalamus thalassemia thalassemic thalassic thalassocracy thalassocrat thaler Thalia/M thalidomide thalli thallic thalloid thallophytic thallous thallus/S thames thane thaneship thankworthy thar Thatcherism/M thaumaturge thaumaturgic thaumaturgist thaumaturgy Thayer/M Thea/M theast theat theatricalism theatricality theca thecae thecal thecate thecodont thee theelin theelol theist/MS theistical/Y thematically thenar thenceforward/S theobromine theocentric theocentricity theocentrism theocrat theocratic theocratical/Y theodicy theodolite theodolitic theodosius theogonic theogony theol theologic theologue theonomous/Y theonomy theophanic theophany theophylline theorematic theosophical/Y theosophist theosophy therapeusis therapeutically therapeutist therapsid thereabout thereat thereinafter thereinto thereunto therewithal theriac theriaca theriacal theriomorphic therm thermae thermic thermically thermion thermochemical thermochemist thermochemistry thermocline thermocoagulation thermoduric thermodynamical thermodynamicist thermoelectron thermoelement Thermofax thermoform thermoformable thermogram/MS thermograph thermographic thermographically thermography thermohaline thermojunction thermolabile thermolability thermoluminescence thermoluminescent thermolysis thermolytic thermomagnetic thermomagnetically thermometrically thermoperiodicity thermoperiodism thermophile thermophilic thermophilous thermoplasticity thermopylae thermoreceptor thermoregulation thermoregulator thermoregulatory thermoremanence thermoremanent thermoscope thermoset thermosiphon/MS thermosphere thermospheric thermostability thermostatically thermotactic thermotaxis thermotropic thermotropism theroelectricity thesaural Thessalonian/S Thessaly thetic thetically Thetis theurgic theurgical theurgist theurgy thew thiabendazole thiaminase thiamine thiazide thiazine thiazole thickety thickhead/D thickset thievery thievish/PY thighbone thigmotaxis thigmotropism thill/S thimbleberry thimbleful/M thimblerig thimblerigger thimblesful thimbleweed thimerosal thinclad thingamabob thingumajig thingummy thiocarbamide thiocyanic thioguanine thiol thiolic thionate thionic thiopental thiophene thiophosphate thiotepa thiouracid thiourea thir thiram thirdhand thirl thirtyfold thistly thitherto thitherward thixotropic thixotropy tho/H thod tholdy thole/DGRS tholeiite tholeiitic tholepin Thomistic/M thoraces thoracic thoracically thoracotomy thorax/S thoria thorianite thoric thorite thornback thornbush thornless thornlike thoroughpin thoroughwort Thorstein thoughtway thousandfold Thrace/M Thracian thraldom thralldom thrasonical/Y thraw thrawart thrawn/Y threadfin threadless threadlike thready/P threepence/S threepenny thremmatology threnode threnodic threnodist threnody threonine thriftless/PY thrips thriven thro throatlatch throbber throe thrombin thrombocyte thrombocytic thrombocytopenia thrombocytopenic thromboembolic thromboembolism thrombokinase thrombophlebitis thromboplastic thromboplastically thromboplastin thrombosed thrombospondin thrombotic throneberry throstle throttleable throttlehold throughither throughother throughway throve throwaway throwster thrustful/P thrustor Thuban/M thudded thumbhole thumbprint/MS thumbscrew thunderbird thundercloud/MS thunderflower thunderhead thunderpeal thundershower/MS thunderstone thunderstrike thunderstroke thurber thurible thurifer thurl thwartwise thwump thylacine thylakoid thyme/MS thymectomy thymey thymic thymidine thymine thymocyte thymol thymus thymy thyrglobulin thyrocalcitonin thyroidectomy thyroiditis thyrotoxicosis thyroxin thyrse thyrsi thyrsus thysanopteran thysanuran ti/N tial tiality tian tiara tiated tibial tiburon tical ticism tickicide ticklebrush tickseed ticktack ticktacktoe ticktock ticonderoga tictac tiddledywinks tiddlywinks tideless tidemark tideway tieback tieck tieing tieless tiemannite Tientsin/M tiepin tierce tiercel tigerish/PY tigerlike tightfisted tightrope tightwad/MS tightwire tiglon tigon tijuana tike tiki til/Y tilapia tilefish tillandsia tillerman tillich tillie tiltable tiltmeter/MS tiltyard timbal timbale timberhead timberline timberman timberwork timbrel timbrelled timekeeper timekeeping timeous/Y timepleaser timesaving timeserver/S timeserving timework/R timmy timocracy timocratic timocratical timorous/PY timpani/M timpanist Tina/M tinamou tinc tincal tinct tinctorial/Y tinderbox tinea tineal tineau tinful ting/NY tingeing tinhorn tinkly tinman tinnitus tinstone tintinnabulary tintinnabulation tintless tintoretto tinwork/S tipcart tipi tippecanoe tippet tipstaff tipstaves tipstock Tirana/M tirewoman tisane tissuey titaness titania titanically titaniferous titanism titanous titbit tithable tithonia titi titivate/N titlark titleholder/S titlist titmice tito Tito's titrant titratable titrator titrimetric titrimetrically tittie tittivate tittle tittup/DG tittupy TN toadstool toastmaster/MS toastmistress tobacconist/MS tobies toboggan/GMRS tobogganist Toby/M tocher tocopherol tocsin tod toddy/MS tody/S TOEFL toehold/MS toeing toeless toepiece toeplate toff toffy/S toft toga/D toggery togue toile toiletry toilette toilful/Y toilworn toke tokenism tokonoma tola toland tolbooth tolbutamide tole/G tolerator tolidine tollbooth/MS tolley tollman tollway tolu toluate toluic toluidine toluol tolyl tolylene Tom/M tombac tombigbee tombless tombolo tomboy tomboyish/P tomcat tomcod tomentose tomentum tomfoolery Tomlinson/M tommyrot tomogram/MS tompion Tompkins tomtit tondi tondo toneme tonemic tonetic/S tonetically tonette tonga tongueless tonguelike tonically tonicity tonio tonn/R tonne/RS tonneau/S tonometer/MS tonometric tonometry tonoplast tonsillar tonsillectomy tonsorial tonsure/DG tontine tonus toolhead toolholder toolhouse toolroom toolshed toom toomey toon toothache/MS toothless toothlike toothsome/PY toothwort topcross topdressing tope/S topee topflight topful topfull topheavy tophi tophus topi topiary topicality topkick topknot topless toploftical toplofty/PY topmast topminnow topograph/R topoi topologise topologist toponym toponymic toponymical toponymy topos topper topsail topstitch topwork toque tor torchbearer torchlight torchon torchwood toreador torero toreutic/S tormentil tormentor tornadic tornillo torpidity torquate torr/X Torrance/M torrential/Y torridity torsade torsi torte/S torticollis tortious/Y tortoni tortricid tortrix tortuosity torturous/Y torula Tory/S tosh tosspot totalism totaquina totaquine totemically totemism totemist totemistic totemite tother totipotency totipotent toto tottery totting toucan touchback touchhole touchline touchmark touchwood toughie/S toughy/S toulouse toupee touraco tourbillion tourbillon touristic touristically tourmaline tournedos tourney/DGS tourniquet/S touse/G tovarich tovarish towage towerlike towhee towie towline towmond townee townlet townley townsfolk townswoman townwear towny/S towpath towrope towsley toxaphene toxemia toxemic toxicant toxicogenic toxicologic toxicological/Y toxicologist toxicology toxicosis toxigenic toxigenicity toxoid toxophilite/S toxophily toxoplasma toxoplasmic toxoplasmosis toylike toynbee toyon trabeate/DN trabecula trabecular trabeculate traceability/U traceably tracheae tracheal tracheary tracheate/D tracheid tracheidal tracheitis tracheobronchial tracheolar tracheole tracheophyte tracheotomy trachoma trachomatous trachyte trachytic tracklayer tracklaying trackman trackside trackwalker tractableness tractably tractarians tractate tractional tradable tradeable tradescantia tradespeople tradevman traditionary traditionless tradtionalist traduce/DGR traducement trafficable tragacanth tragedienne tragi tragical tragicomedy tragicomical tragopan tragus trailblazer/MS trailblazing trailbreaker trailerable trailerist trailerite trailership trailless trainability trainable/A trainband trainbearer traineeship trainferry trainful trainload/MS trainsick traitoress traitress traject trajection tral/A tramcar tramline tramming tramontane trampoline/GR trampolinist tramroad trancelike trangam transactinide transactor transamination transaxle transcendency transcendentalist transcriptional/Y transcutaneous transduced transducing transductional transection transeptal transferase transferential transfiguration transfigure transfixion transformant/S transformationalist transformative transfusible transfusional transglottal tranship transhumance transhumant transilluminate/N transilluminator Transite/M transitio translatory translocate/N transmarine transmembrane transmigrate/N transmigrator transmigratory transmissibility transmissive transmissivity transmissometer/MS transmontane transmountain transmutable transmutative transnational transnatural transonic transparence transpersonal transpicuous transpierce transplacental/Y transplantability transpolar transpontine transportational transpositional Transputer transsexual transsexualism transshape transthoracic transthoracically transubstantial transubstantiate/N transudate/N transude/DG transuranic transuranium Transvaal/M transvaluate/N transvalue transvestism transylvania Transylvania's trapeze trapezist trapezius trapezohedron trapnest traprock trapshooter trapshooting trapunto trashman trass trattoria traumata traumatically traumatism trave travois/S trawlerman trayal trayful treacle treacly treadless treadwell treasonably treasurable treasurership treatability treatable trebly trebuchet trebucket trecento tred tredecillion treece treehopper treeing treeless treenail trehalase trehalose treillage trekker trelliswork trematode tremolant tremolite tremolitic tremolo tremulant trenail trenchancy trepan/S trepanation trepang trepanned trepanning trephination trephine/DG trepid trepidant treponema treponemal treponematosis treponematous treponeme tressel trestletree trestlework Trevelyan trews trey/S tri/S triacetate triacid triadically trialogue triangularity Triangulum triarchy Triassic triaxial triaxiality triazine/S trib tribalism tribasic triboelectric triboelectricity tribological tribologist tribology triboluminescence triboluminescent tribophysics tribrach tribrachic tribromide tribunate tribuneship tricarboxylic tricarpellary tricarpellate trice/G triceps/S triceratops trichiasis trichina trichinal Trichinella/M trichinosis trichinous trichite trichlorfon trichloride trichocyst trichocystic trichogyne trichoid trichome trichomic trichomonacidal trichomonacide trichomonad trichomonadal trichomonal trichomoniasis trichopteran trichotomous/Y trichromat trichromatism trichrome trichuriasis trickish/PY tricksy/PR triclad triclinic triclinium tricolette tricorn tricorne tricornered tricot tricotine tricotyledonous trictrac tricuspid tricycle/S tricyclic tridimensional tridimensionality triduum triene triennium trierarch trierarchy triethyl trifacial trifid trifluralin trifocal trifoliate trifoliolate trifolium triforium triform trifurcate/N trigeminal triggerfish triggerman trigging triglyceride/S triglyph triglyphic triglyphical trigon trigonometrical/Y trigonous trigraph trigraphic trihybrid trihydroxy triiodothyronine trijet trilateral/Y trilaterality trilby/S trilinear trilingual/Y triliteral triliteralism trillium trilobate/N trilobed trilocular triloculate trimaran trimble trimeric trimerous trimestral trimestrial trimeter trimetrogon trimonthly trimorph trimorphic trimorphism trimorphous trimotor trinal trinary trindle/DG trine trinitrotoluene trinketry trinkums trinocular trinomial trinucleotide triol triolet triose tripack triphammer/MS triphenylmethane triphibian triphibious triphosphate triphthong triphthongal tripinnate/Y triplane tripletail Triplett/M triplicity triplite triploblastic triploid triploidy tripodal tripos tripper trippet triptane triquetrous triradiate trireme trisaccharide trisect trisection trisector triskele/N trismus trisoctahedron trisome trisomic trisomy triste tristearin tristeza tristful/PY tristimulus trisubstituted trisyllabic trisyllabicall trit tritheism tritheist tritheistic tritheistical trithing tritiated triticale tritoma tritone triturable triturate/N triturator triumvir triumviral triumvirate trivalve trivet triweekly Trobriand trochaic trochal trochanter trochanteral trochanteric trochar troche trochee trochilus trochlea trochlear trochoid trochoidal trochophore troglodytic trogon trograd troilite trolleybus trolly/DS trombidiasis trommel tromp trona trone troostite trop tropaeolum tropez trophallaxis trophically trophoblast trophoblastic trophozoite tropidoclonion tropistic tropologic tropological/Y tropology tropomyosin tropopause tropophilous troposphere tropotaxis troth trothplight trotline trotsky trotskyism troubleshot troublous/PY troupial trousseau/S trousseaux trouty/R trove/R trow Troy truantry truckage truckee truckle/DGR truckline truckload/MS truckman truckmaster truculency trueborn truehearted/P trueing truelove truepenny truffle/DMS truistic trujillo Truk trull trumpetlike trumpetweed truncheon/S trunkfish trunkful trunnel trunnion/S trustability trustable trustbuster trusteeing trustless tryout trypanosome trypanosomiasis tryparsamide trypsinogen tryptamine tryptic tryptophan tryptophane trysail tryst trytophan tryworks tset tsetse/S tsunamic tsunematsu TTY tubal tubbable tubbed tubber tubbing tubby/R tubeless tubelike tubercle/D tubercular/Y tuberculate/DN tuberculin tuberculoid tuberculous/Y tuberose tuberosity tuberous tubful tubifex/S tubificid tubocurarine tubularity tubulous tuchun tuckahoe tucket tuebor tuel tufa tufaceous tuff tuffaceous tuffet tufty tugboat tugger tui tuille tuitional/I tularemic tulation tulatory tule tulipwood tullibee tumblebug tumbledown tumblerful tumbleweed tumbrel tumbril tumefaciens tumefaction tumefactive tumescence/I tumescent/I tumidity tumoral tumorigenic tumorigenicity tumorlike/MS tumorous tump tumpline tumultuary tumulus tunability tunably tundish tuneable tuneless tunesmith tungstic tungstite tunica tunicae tunicate/D tunicle tunnellike tunny tup tuppence tupping tuque tural turbanned turbellarian turbid/PY turbidimeter/MS turbidimetric turbidimetrically turbidimetry turbidite turbidity turbinal turbit turbjet turbo/S turbocar turbocharge/R turboelectric turboprop turboshaft turbosupercharged turbosupercharger turbot/S turbulency turd ture/DN tureen turfman turfski/G turfy turgescence turgescent turgidity turgor turmeric turnbuckle turncoat turndown turnery turnsole turnspit turnstile turnup turnverein turpentinic turpentinous turps turquois turtledove turtlehead turves tusche tush tusklike tussah tussive tussock/S tussocky tussore Tutankhamen tutee/S tutelar tutelary Tutenkhamon tutorage tutoress tutorship tutoyer tutti tux tuyere twae twangy tween tweet/R twelvefold twelvemonth twentyfold twerp twiggy twilit twinberry twinborn twinflower twingeing twinkly twinship twiny twirp twitted twittery twixt twofer twohandedness Twombly/M twopence/S twopenny TWX TX Tyburn/M tyke/MS tymbal tympan tympanic tympanites tympanitic tympany typal typeable typecase typecast typefounder typefounding typefoundry typeout typey typhlosole typic typograph typologist typy/R tyramine tyrannosaur tyrannosaurus Tyrannosaurus's tyrannous/Y tyro/S tyrocidin tyrocidine tyrosinase tyrothricin tzaddik tzaddikim tzar Tzeltal tzigane tzimmes tzitzis udall udder uglify/N UK Ukraine/M ukulele ulama Ulan ulcerogenic ulcerous uldered ulema ulexite ullage ulna/M ulnar ulotrichous ulotrichy ultima ultimacy ultimo ultimogeniture ultrabasic ultracentrifugal ultrafashionable ultrafiche ultrafilter ultrafiltration ultrahigh ultraism ultraist ultraistic ultramafic ultramicro ultramicroscope/S ultramicrotome/S ultramicrotomy ultramodernist ultramontane ultramontanism ultranationalism ultranationalist ultrapure/Y ultrasecret ultrasonicate/DGS ultrastructural/Y ululant ululate/N ulva umbel umbellate umbellifer umbelliferous umbilicate/DN umbonate umbones umbos umbrae umbrageous/PY umbral ump umpirage umpteen/H un unaccountability unamazed unamusing unanchor unanswerably unapologetic unappreciation unapproachably unarm unassailability unassailably unassertive unassuageable unattach unaverage unballasted unbandage unbar unbeautiful unbecome unbeknown unbelief unbeliever unbeseeming unbiblical unbid unblenched unblessed unbolt unbosom unbox unbrace unbraid unbridle unbroke unbuckle unbudgeable unbudgeably unbuild unbundle unburden uncage uncalculated uncandid uncelebrated unchain unchallengeable unchancy unchangealeness uncharge unchaste/PY uncheck/S unchivalrous unchoke uncial/Y unciform uncil uncinaria uncinariasis uncinate uncinus uncircumcision unclamp unclasp unclassical unclench unclimbable/P unclinch uncloak unclose unclothe unclutter uncock uncoffin/D uncoil uncommercial uncompassionate uncompetitive/P uncomplicated uncompromisable uncongenial unconquerably unconscionability unconscionably unconstraint uncork uncorseted uncouple/R uncross uncrown uncrumple unctuous/PY uncurl uncus uncut undauntable undebatably undeceive underact underactivity underage underbid underbidder underbody underbred underbrim undercarriage undercharge underclass undercoat/G undercook undercool underdo underdrawers underdress/D undereducation underexpose underexposure underfeed undergarment undergird underglaze underhand underinsurance underlaid underlayment underlet underlip undermanned undermost undernourished undernourishment undernutrition underpants underpart underpass/S underpin underplot/S underpowered underproduction underproductive underproof underreport underripe underrun undersaturated undersecretariat undersell undersexed undershorts undershrub underskirt underslung undersong underspin understaffed understeer understory understrapper understrength undersupply undersurface undertenant undertone undertrick underused undervaluation undervalue/G underwaist underweight underwing underwool undine undogmatic undouble undramatic undrape undraw undrunk undulant undulatory une unequivocably unexceptionable/P unexceptional unexpressive unfancy unfasten unfeeling/PY unfetter unfix unflappability unflappable unforgettability unfreeze unfriended unfrock unfussy ungenerosity ungenerous ungird unglue ungrudging ungual unguard unguent ungulate unhair unhandsome unhandy/P unharness unhitch/GS unhood unhorse/D unialgal uniaxial/Y unibuss unicameral/Y unicellular unicellularity Unicode/M unifactorial unifiable unifoliate unifoliolate uniformitarian uniformitarianism unijugate unilinear unilingual unillusioned unilocular unintelligence uninucleate unionism unionist/S uniparental/Y uniparous uniplanar uniplex UniPlus/M unipolarity uniramous unisex unisexual/Y unisexuality UniSoft/M unitage unital unitarity universalist univocal/Y unkenned unkennel unlace unlash unlatch unlay unlimber/DG unlive unloose unloosen unman unmate/G unmeaning unmeet unmemorable unmitigatd unmoor unmoral unmorality unmuffle unmuzzle unmyelinated unnail uno unpackage/G unpalatable unpeg unpeople unperfect unperson unpick unpile unpin unpolitical unpregnant unprofessed unpronounced unquote unreel unreeve unregenerate unreserve unrestraint unriddle unrig unrip unrobe unroof unroot unrotate unround/D unsaddle unsafety unsaturate unsay unseal/G unseam unsearchably unsel unselective unserviceable unsettle unsettlement unsew unsex unshell unshift unship unshockability unshockable unshped unsight/D unsiphon/M unsling/DG unsnarl unspeak unspeakably unsphere unstate unstep unstick unstop unstoppably unstrap unstring unstudied unsubstantial unsuccess unswathe unswear unsymmetrical unter untether unthaw unthink unthinkability unthought unthread unthrone untimeous untouchability untread untruss untuck untune untwine untwist unvocal unvoice unweave unweeting/Y unweight unwell unwisdom unwish/D unwreathe unyoke unzio unzip upas upbuild/R upcast upchuck updo/S upgrowth upheave/R uphoster upmanship upmost upperpart upping uppish/PY uppity uppityness uprear uprush upsetter upshift upspring upstage/DGS upstart upstroke upsweep upswept upthrow upthrust uptilt upwell uracil uraei uraemia uraeus uralite uralitic Urania uranic uranide uraninite uranographic uranographical uranography uranological uranology uranometry uranous urate uratic urbanist urbanistic urbanistically urbanity urbanologist urbanology urbiculture urceolate Urdu ure urease uredinial uredinium urediospore uredium uredostage ureide uremic ureotelic ureotelism ureter ureteral ureteric urethan urethral urethritis urethroscope Uri/S uric uricosuric uricotelic uricotelism uridine urinalysis urinogenital urinometer/MS urinous urochord urochordal urochordate urochrome urodele urogenital urokinase urol urolith urolithiasis urologic urological urologist urology uropod uropygial uropygium urostyle Urquhart ursine urticaria urticarial urticate/N urus urushiol usableness usance USB USB's useably usernames useway usherette USIA USN usnea usrio usufruct usufructuary UT UTC UTC's ute uteca utep uterus/S UTF utilitarianism utiny utopism utopist utopistic Utrecht/M utricle utricular utricularia utriculus utterable/U uttium UV uvarovite uvea uveal uveitis uvula uvular/Y uxorial uxoricide uxorious/PY VA vacationist vacationless vaccinal vaccinate/DS vaccinator/S vacua vacuolar Vaduz vagabondage vagabondish vagabondism vagally vagarious/Y vagile vagility vagotomy vagotonic vagotropic vagrancy vainglory valediction valerian Valery/M valetudinarian valetudinarianism valetudinary valiance valiancy valine valise/S valle vallecular Valletta/M Valois valorous/Y Valparaiso valuational/Y valvular vamoose/DGS vampirism vampish Vancement vandalistic vanderburgh Vanderpoel/M vandyked vanguardism vanguardist vanillic vanillin vanquishable vanquishment vanward vapid/PY vapidity vaporous/PY vaquero variac variational/Y varices varicose/D varicosity variegator varietal/Y variform variocoupler varioloid variolous variometer/MS variorum varisized Varitype/M varix varlet varletry varnishy varsity varus varve/D vasal vascularity vasculature vasculum vaselike vasiform vasoactive vasoactivity vasoconstriction vasoconstrictive vasoconstrictor vasodilatation vasodilation vasodilator vasomotor vasopressin vasopressor vasospasm vasospastic vasotocin Vasquez/M vassalage Vassar/M vastitude vastity vasty vatic vaticinal vaticinate/N vaticinator vatted vatting vaudevillian Vaughan/M vaulty vauntful vauntingly vaunty vaward VAX vealy vectograph vectographic vectorcardiogram/MS vectorcardiographic vectorcardiography Veda/M vee veep veery/S Veganism vegetably vegetal vegetarianism vegetational/Y vegete/V veinal veinlet veiny velamen velamentous velamina velarium veld velitation Vella/M velleity veloce velocimeter/MS velocipede velodrome velopment velure velutinous velveteen venae venality venatic venation venational vendable vendace/S vendee vendibility vendibly vendition vendue veneeal venenate/N venerability venerably venerator venereological venereologist venereology venerology venery venesection venetian Veneto/M venge/G venin venipuncture venire venireman venisection venography ventage ventail ventilatory ventless ventricose ventricular ventriculus ventriloquial/Y ventriloquism ventriloquist/MS ventriloquistic ventriloquy ventrolateral/Y ventromedial ventura venturous/PY venule veratrine veratrum verbalism verbalist verbalistic verbena/S verbicide verbid verbify verbigeration verbile verdancy Verde/M Verderer verderor verdigris verdin verdurous/P vergil veridic veridicality verisimilar/Y verisimilitudinous verism verismo verist veristic veritably verjuice vermeil vermian vermicelli vermicide vermicular vermiculate/DN vermiform vermifuge vermillion verminosis verminous/Y vern Verna/M vernacle vernacularism vernation vernicle vernissage versal Versatec/M verseman verset versicle versicular versify/NR versine versional/A verso/S verticality verticil verticillte vertiginous/Y vesical vesicant vesicate/N vesicularity vesiculate/N vesperal vespertinal vespertine vespiary vespid vespine vesta vestee vestiary vestibular vestlike vestment vestmental vestryman vesuvian vesuvianite Vesuvius vetchling vexillary vexillologic vexillological vexillologist vexillology vexillum VFAT VFAT's viand/S viaticum vibist vibraharp vibraharpist vibrance vibraphone vibraphonist vibratile vibratility vibrational vibrationless vibrator vibratory vibrion vibriosis vibrissa vibrissae viburnum vic vicarage vicarate vicarial vicariate vicarship vicegerency vicegerent vicennial viceregal/Y vicereine viceroyalty viceroyship vichyssoise vicinage vicinal vicissitudinous vickers victress vicuna Vida/M vidal vide videophone vidette vidicon viduity Vientiane/M viewy vigesimal vigintillion vignettist vigorish vigorist/MS vigoroso Vikram vilipend villadom villagery villainess villanella villanelle villatic villein villenage villi villiform villosity villus vim/N vinaceous vinaigrette vinal vinblastine vinca Vinci/M vincible vincristine vinculum vindicable vindicator/S vindicatory vineal vinedresser/S vinegarish vinegarroon vinegary vinery vineyardist vinic viniculture viniferous vinification vino vinosity vinous/Y viny/R vinylic vinylidene viol violability violable/P violableness/I violably/I violaceous/Y viomycin viosterol viperine viperish viperous/Y viraginous virago virelay viremia viremic vireo vires virescence virescent virga virgate Virgil/M virginium virgulate viricidal viricide virid viridescent viridian viridity virilism virion virologic virological/Y virologist virology viroses virosis virtuality virtueless virtuosa virucidal virucide virulency viruliferous virustatic viscacha viscerogenic visceromotor viscidity viscometric viscometry viscose viscosimeter/MS viscosimetric viscountcy viscountess viscounty viscus visional/Y visionless visitable visitant visitational visitatorial visorless vitalism vitalist vitalistic vitamer vitameric vitellin vitelline vitellogenesis vitellus vitiator viticultural viticulture viticulturist vitiligo vitiosity vitite Vito/M vitrifiable vitrine vittae vittate vittles vituperate/N vituperator vituperatory vitus vivarium viverrid vivific viviparity viviparous/PY vivisect vivisection vivisectional/Y vivisectionist vivisector vixenish/PY vizard vizierate vizierial viziership vizor VM VM's VMs vms vocabular vocalically vocality vocationalism vocationalist vociferant vociferate/N vociferator voguish/P voicedness voiceful/P voiceprint voidable/P voidance voile volant volante volcanically volcanicity volcanoes volcanologic volcanological volcanology vole/S volitive volkslied/R volplane/DG voltameter/MS voltametric Volterra/M volubility volubly volumeter/MS voluminosity voluntarism voluntarist voluntaristic voluntaryism voluntaryist volunteerism voluptuary volute/DN volutin volva volvement volvox vomerine vomitory vomiturition vomitus von voodooism voodooist voodooistic vored vortical/Y vorticella vorticism vorticist vorticose vortiginous Voss votaress votarist voteless votress vouchee vouchsafement Vought/M voussoir voyageur/S voyeur/S voyeurism voyeuristic voyeuristically Vreeland/M vroom VT vulcanian vulcanicity Vulcanism vulcanologist vulcanology vulgarian vulgarism vulgarity vulgate vulgus vulnerably/I vulnerary vulterine vulturine vulturous vulva vulvae vulval vulvar vulviform vulvitis WA Waals WAC wadable wadder waddie/DS wadding waddy/DGS wadeable wadi Wadsworth/M waftage wafture wageless wageworker wagger waggery waggly Wagnerian wagoneer/MS wagonette/MS wagonload/MS wah wahine Wahl/M wahoo/S waif wailful/Y wain/D wainscotting waistband Waite/M wakeless wakerobin Waldron/M walkabout walkaway walkingstick walkout wallaroo wallenstein walleye/D wallflower Wallis Waltham/M wamble/DG wampum wanderlust waney wanner wannest wanning wansee wansley wany/R Wappinger/M warbonnet Warburton wardenship wardership wardress wardship warehousemen wareroom warlock warlord/S warlordism warpage warpath warplane/MS warrantable/P warrantably/U warrantee/S warrantless warrantor/S washability washable washcloth washerman washerwoman washhouse washoe washrag washroom/S washstand/S washtub/S washwoman wasplike wassail/R wast wastage/S wastepaper Watanabe/M watchcase watcheye watchtower watchworks waterborne watercraft watercress waterflood waterfowl/MR waterhole/MS waterish/P waterless/PY waterlog waterlogged watermanship watermark waterpower waterscape waterweed waterwheel waterworks waterworn wattmeter/MS waught waukesha waunona waupaca waupun wausau wauwatosa waveland waveless/Y wavelet/S wavelike wavery waxlike waxwing/MS waybill wayfarer wayfaring waygoing waylay wayless wayworn weakhearted weakish weakling weal weanling wearability weariful/PY weariless/Y weatherability weatherboard/G weatherglass weatherstripping weatherworn weathery Webb/M webbed webber webby webfoot weblike wedder wedgy weedless weeknight/S weepy weet weever weevil/Y weevily weft/S Wehr/M Wei/M weider weidman Weierstrass weighable weightless/Y weimaraner weiner weir weirdie/S Weisenheimer weldable weldment weldor weldwood welfarism welfarist welkin wellaway wellborn Weller Welles wellington wellman wellwisher/MS welmers Welton weltschmerz wen wend wert Werther/M weskit westernmost wetback wettable wettish wff whacky whaleback whaleboat whalebone/MS Whalen/M whang whangee whap wharfage wharfinger wharfmaster Whatley/M wheal wheatear wheatland wheaton wheelhorse wheelless wheelman wheelock wheelsman wheelwork wheelwright wheen whelm whencesoever whensoever whereat wherefrom whereinto wheresomever wherethrough whereto whereunto wherewithal wherry/S whetstone whetter whichsoever whicker/DG whidding whiffletree whigmaleerie whilom whilst whimsicality whiney whinstone whipcord whiplike whippersnapper whippletree whippoorwill whippy/R whipstitch whipstock whirlybird whirry/DG whish whisht whiskery whispery whist Whitaker/M whitebait whitebeard whitecap whitefish Whitehorse/M whiteleaf whiteley whiteout whitesmith whitethroat whitewall whitewater whitewing whithersoever whitherward whitish whity whizbang whizz/R whizzbang whomp whoopee whoopla whopper whoredom whorehouse whoremaster whoremonger whoreson whorish whort whortle whosesoever whoso whump whup whys WI wickerwork wickiup widemouthed widgeon/S widish widowerhood widthways wieland wieldy wienerwurst wienie wifehood wifeless wifelike WiFi wigan wigeon/S wigged wight Wightman/M wiglet wigwag Wikipedia/M wilco wildcatted wildcatting wildebeest/M wilderment wildflower/MS wildfowl/GR wildish wildling wildwood Wilkie/M Wilkins Willa/M willable willemite willet Willis williwaw willowlike willowware willpower willy/GS wilmette Wiltshire/M wimble/DGS wimple/DG winchell Winchester windage windblown windburn/D windflaw windjammer windlass/DGSY windpipe windproof windscreen windsurf/DGS windswept windway wineglass winegrower winehead winepress wineshop winey wingbeat/MS wingding wingless/P winglet winglike wingover wingspread/MS wingy winism winnable/U winnebago winned winooski winsett wintergreen winterkill wintertide wintery wintle winze wirable wiredraw/R wiredrawn wirehair/D wirelike wiretapper wireway wirework/S wireworm Wisenheimer wisent wisewoman wisha wispish wistaria wisteria witchery witchlike witchy withdrawable withe witherite witherspoon withindoors withoutdoors withy/S witless witling Witt/M witted Wittgenstein/M witticism wiz wizardry Wolfe/M Wolff/M wolfhound wolflike wolverine/MS wolverton womanish/PY womankind womanless womanlike womanpower wombat/MS womenfolk/S womenkind wonderwork Wong/M wonky wonning wonton woodberry woodcraft woodcutter woodcutting woodenhead/D woodenware woodlore woodnote woodpile woodsman Woodstock/M woodsy Woody/M woolpack woolsack woolshed woolskin woozy/PRY wordage/S wordbook wordmonger wordplay workability workbasket workboat workbox workfolk/S workforce/MS workhouse workless/P workpeople workroom/S workweek workwoman worldling wormhole wormlike worriment worrywart worshipless wort worthful Wotan/M wotted wouldst woundless woundwort wowser wrapup wrasse wrathy wreathy wriggly wristlet wristlock wristy writhen wrongheaded/PY Wu/M wunderkind WV WY Wyatt/M Wyeth/M Wylie/M Wynn/M wysiwyg xanthate xanthene xanthic xanthin xanthine Xenakis xenia xenomania xenophile xenophilous xenophobe xenophobic xerarch xeric xerically xerographic xerographically xerophile xerophilous xerophily XFS XFS's Xhosa xylophonist xylose xylotomic xylotomical xylotomous xylotomy yack/G yah yak yakking yalies yam/N Yankton/M Yaounde/M yardarm yardbird yardman yardmaster yare/Y yarmelke Yarmouth/M ycleped yclept ye yearling yearlong yellerish Yellowknife/M yep yester yeuk yew yoghurt/M yogic yogin yoknapatawpha yolky yond Yorkshire/M Yost/M youngling yuba yuletide yuri zabaglione zagged Zagreb/M Zambia/M Zan/M zany/PRSY zazen zealotry zenithal zeolite zeolitic zephyr zeppelin zeptosecond/S zettabyte/MS ziggy zincate zincic zinfandel zingy/R zinnia zippy/R zirconia zirconic zither/S zitherist zizith zoantharian zoarial zoarium zobrist Zoe/M zombiism zonate/DN zonked zoogenic zoogenous zoogeographer zoogeographic zoogeography zooks zoologic zoomorphic zoonosis zoonotic zooparasite zooparasitic zoophagous zoophilic zoophilous zoophyte zoophytic zooplankton zoosporal zoospore zoosterol zootechnics zori Zorn zucchini zwitterion/S zwitterionic zygote/MS ispell-3.4.00/languages/english/PaxHeaders.19408/british.00000644000000000000000000000013212465616723017770 xustar0030 mtime=1423384019.970876214 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/british.00000444003214100001440000002244112465616723021040 0ustar00geofffaculty00000000000000abridgement acclimatisation/AMS acclimatised/U accoutrement/MS acknowledgement/AMS actualisation/AMS aerosolise/D aesthetic/MS aesthetically/U agonise/DGRSZ agonised/Y agonising/Y alphabetise/DGRSZ aluminium/MS amenorrhoea amortise/DGS amortised/U amphitheatre/MS anaemia/MS anaemic/S anaesthesia/MS anaesthetic/MS anaesthetically anaesthetise/DGRSZ analogue/MS analysable/U analyse/ADGRZ analysed/AU anodise/DGS anonymise/DGS antagonise/DGRSZ antagonised/U antagonising/U apologise/DGRSZ apologises/A apologising/U appal/S apparelled appetiser appetising/UY arbour/DMS archaise/DGRSZ ardour/MS arithmetise/DS armour/DGMRSZ armoured/U armourer/MS armoury/DMS atomisation/MS atomise/DGRSZ authorisation/AMS authorise/DGRSZ authorises/AU autodialler axiomatisation/MS axiomatise/DGS Balkanise/DGS baptise/DGRSZ baptised/U baptises/U barrelled barrelling bastardise/DGS bastardised/U bedevilled bedevilling behaviour/DMS behavioural/Y behaviourism/MS behaviouristic/S behove/DGJS behoving/MSY belabour/DGMS bevelled bevelling/S bowdlerise/DGRS brutalise/DGS brutalised/U brutalises/AU burglarise/DGS bushelled bushelling/S calibre/S canalled canalling cancelled/U canceller cancelling candour/MS cannibalise/DGS canonicalisation canonicalise/DGS capitalisation/AMS capitalise/DGRSZ capitalised/AU capitalises/A carbonisation/AMS carbonise/DGRSZ carboniser/AS carbonises/A catalogue/DGMRS categorisation/MS categorise/DGRSZ categorised/AU centimetre/MS centralisation/AMS centralise/DGRSZ centralises/A centre/DGJMRSZ centrepiece/MS channelled channeller/MS channelling characterisable/MS characterisation/MS characterise/DGRSZ characterised/U cheque/MRSZ chequebook/MS chequer/DS chiselled chiseller/S civilisation/AMS civilise/DGRSZ civilised/PU civilises/AU clamour/DGRSZ clamourer/MS cognisance/AI cognisant/I colonisation/AMS colonise/DGRSZ colonised/U colonises/AU colour/DGJMRSZ coloured/AU coloureds/U colourer/MS colourful/PY colourless/PY colours/A columnise/DGS compartmentalise/DGS computerise/DGS conceptualisation/MS conceptualise/DGRS conceptualising/A counselled counselling counsellor/MS criticise/DGRSZ criticised/U criticises/A criticising/UY criticisingly/S crystallise/DGRSZ crystallised/AU crystallises/A customisable customisation/MS customise/DGRSZ decentralisation/MS decentralised defence/DGMSV defenceless/PY defences/U demeanour/MS demoralise/DGRSZ demoralising/Y dialled/A dialler/AS dialling/AS dichotomise/DGS digitise/DGRSZ digitiser/MS dishonour/DGRSZ dishonoured/U dishonourer/MS disorganised/U draught/MS draughtsman duelled dueller/S duelling/S economise/DGRSZ economising/U editorialise/DGRS enamelled enameller/S enamelling/S encyclopaedia/MS endeavour/DGMRSZ endeavoured/U endeavourer/MS enrol/S enrolment/MS epitomise/DGRSZ epitomised/U equalisation/MS equalise/DGJRSZ equalised/U equaliser/MS equalises/U equalled/U equalling eviller evillest factorisation/MS familiarisation/MS familiarise/DGRSZ familiarised/U familiarising/Y fantasise/DGRS favour/DGJRSZ favourable/PSU favourably/U favoured/MPSY favoured's/U favourer/MS favouring/MSY favourings/U favourite/MSU favours/A fertilisation/AMS fertilise/DGRSZ fertilised/U fertilises/A fervour/MS fibre/DMS fibreglass finalisation/S finalise/DGS flavour/DGJMRSZ flavoured/U flavourer/MS formalisation/MS formalise/DGRSZ formalised/U formalises/I fuelled/A fueller/S fuelling/A fulfil/S fulfilment/MS funnelled funnelling gaol generalisation/MS generalise/DGRSZ generalised/U glamorise/DGRSZ gospeller/S gramme/MS gravelled gravelling grovelled groveller/S grovelling/Y harbour/DGMRSZ harbourer/MS harmonise/DGRSZ harmonised/U harmonises/AU honour/DGRSZ honourable/MPS honourables/U honourably/SU honoured/U honourer/MS honours/A hospitalise/DGS humour/DGMRSZ humoured/U hypothesise/DGRSZ idealisation/MS idealise/DGRSZ idealised/U imperilled individualise/DGRSZ individualised/U individualises/U individualising/Y industrialisation/MS initialisation/MS initialise/DGRSZ initialised/AU initialled initialler initialling institutionalise/DGS internalisation/MS internalise/DGS italicise/DGS italicised/U itemisation/MS itemise/DGRSZ itemised/U itemises/A jeopardise/DGS jewelled jeweller/S jewelling journalise/DGRSZ journalised/U judgement/MS kidnapped kidnapper/MS kidnapping/MS kilogramme/MS kilometre/MS labelled/AU labeller/MS labellers/A labelling/A labour/DGJRSZ laboured/MPY laboured's/U labourer/MS labouring/MSY labourings/U laurelled legalisation/MS legalise/DGS legalised/U levelled/U leveller/S levellest levelling/U liberalise/DGRSZ liberalised/U licence/MS linearisable linearise/DGNS litre/S localisation/MS localise/DGRSZ localised/U localises/U lustre/DGS magnetisation/AMS manoeuvre/DGRS marshalled marshaller marshalling marvelled marvelling marvellous/PY materialise/DGRSZ materialises/A maximise/DGRSZ mechanisation/MS mechanise/DGRSZ mechanised/U mechanises/U medalled medalling mediaeval/MSY memorisation/MS memorise/DGRSZ memorised/U memorises/A metalled metalling metallisation/MS metre/MS millimetre/MS miniaturisation/S miniaturise/DGS minimisation/MS minimise/DGRSZ minimised/U misjudgement/MS mitre/DGR modelled/A modeller/S modelling/S modernise/DGRSZ modernised/U modernises/U modularisation modularise/DGS motorise/DGS motorised/U moustache/DS multilevelled nationalisation/MS nationalise/ADGRSZ nationalised/AU naturalisation/MS neighbour/DGJMRSYZ neighboured/U neighbourer/MS neighbourhood/MS neighbourly/PU neutralise/DGRSZ neutralised/U nickelled nickelling normalisation/MS normalise/DGRSZ normalised/AU normalises/AU notarise/DGS nought/S odour/DMS offence/MS optimisation/MS optimise/DGRSZ optimised/U optimiser/MS optimises/U organisable/MSU organisation/AMS organisational/MSY organise/ADGRSZ organised/AU oxidise/DGJRSZ oxidised/U oxidises/A panelled panelling/S panellist/MS parallelisation/MS parallelise/DGRSZ parallelled/U parallelling paralyse/DGRSZ paralysed/Y paralysedly/S paralyser/MS paralysing/Y paralysingly/S parameterisable parameterisation/MS parameterise/DGS parameterised/U parametrisable parametrisation/MS parametrise/DGS parametrised/U parcelled/U parcelling parenthesised parlour/MS patronise/DGJRSZ patronised/U patronises/A patronising/MSY penalise/DGS penalised/U pencilled pencilling/S personalisation/MS personalise/DGS petalled philosophise/DGRSZ philosophised/U philosophises/U plough/DGRS ploughed/U ploughman pluralisation/MS pluralise/DGRSZ polarisation/MS popularisation/MS popularise/DGRSZ popularises/U practise/DGRS practised/U preinitialise/DGS pressurise/DGRSZ pretence/NSVX prioritise/DGJRSZ productise/DGRSZ programme/MS programmes/A proselytise/DGRSZ publicise/DGS pulverise/DGRSZ pulverised/U pulverises/AU pyjama/S quantisation/MS quantise/DGRSZ quantiser/MS quarrelled quarreller/S quarrelling queueing randomise/DGRS rationalise/DGRSZ realisable/MPS realisables/U realisably/S realisation/MS realise/DGJRSZ realised/U realising/MSY recognisability recognisable/U recognisably recognise/DGRSZ recognised/Y recognisedly/S recognising/UY recognisingly/S reinitialise/DGS relabeller/S remodelling reorganised/U reprogramme/S revelled reveller/S revelling/S revolutionise/DGRSZ rigour/MS rivalled/U rivalling rouble/MS routeing rumour/DGMRSZ rumoured/U rumourer/MS sabre/DGMS sabred/U sanitise/DGRS saviour/MS savour/DGRSZ savourer/MS savourily/SU savouring/Y savouringly/S savoury/MPRSTY sceptre/DGMS sceptred/U sceptres/U scrutinise/DGRSZ scrutinised/U scrutinising/UY scrutinisingly/S sepulchre/DMS sepulchred/U sepulchres/AU sequentialise/DGS serialisation/MS serialise/DGRSZ serialiser/MS shovelled shoveller/S shovelling shrivelled shrivelling signalled signaller/S signalling socialise/DGRS socialised/U specialisation/MS specialise/DGRSZ specialised/U specialising/U speciality/MS spectre/DMS spiralled spiralling splendour/MS squirrelled squirrelling stabilise/DGRSZ standardisation/AMS standardise/DGRSZ standardised/U standardises/A stencilled stenciller/S stencilling sterilisation/MS sterilise/DGRSZ sterilised/U sterilises/A stylised subsidise/DGRSZ subsidised/U succour/DGRSZ succoured/U succourer/MS sulphate/DGS sulphur/DG sulphuric summarisation/MS summarise/DGRSZ summarised/U symbolisation/AMS symbolise/DGRSZ symbolised/U symbolises/A symbolled symbolling sympathise/DGJRSZ sympathised/U sympathising/MSUY synchronisation/MS synchronisations/A synchronise/DGRSZ synchronised/AU synchronises/A synthesise/DGRSZ synthesised/U synthesises/A syphon/DGMS syphons/U systematise/DGRSZ systematised/U systematising/U tantalise/DGRSZ tantalised/U tantalising/PY tantalisingly/S tantalisingness/S terrorise/DGRSZ terrorised/U theatre/MS theorisation/MS theorise/DGRSZ titre/S totalled totaller/MS totalling towelled towelling/S tranquillise/ADGJRSZ tranquillised/AU tranquilliser/AMS tranquillising/AMSY tranquillity transistorise/DGS travelled traveller/MS travelling/S trivialise/DGS troweller/S tumour/DMS tunnelled tunneller/S tunnelling/S tyre/MS unauthorised/PY uncivilised/PY uncoloured/PSY unfavoured/M unionisation unionise/DGRSZ unlaboured/M unpatronising/MY unravelled unravelling unrecognised unsavoured/PY unsystematised/Y utilisation/A utilise/DGRSZ utilises/A valour/MS vandalise/DGS vapour/DGJMRSZ vapouring/SY vectorisation vectorising verbalise/DGRSZ verbalised/U victimise/DGRSZ victimised/U victualler/S vigour/MS visualise/DGRSZ visualised/U visualises/A waggon/MRSZ waggoner/MS weaselled weaselling whisky/MS womanise/DGRSZ womanised/U womanises/U woollen/S woolly/PRS worshipped worshipper/MS worshipping ispell-3.4.00/languages/english/PaxHeaders.19408/american.10000644000000000000000000000013212465612624020100 xustar0030 mtime=1423381908.272165704 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/american.10000444003214100001440000001133712465612624021152 0ustar00geofffaculty00000000000000acclimatize/GRSZ acclimatizes/A actualize/DGS actualizes/A aggrandizement/MS americanized amortization/MSU animized annualized anonymization Balkanization/MS biosynthesized bureaucratization/MS caliper/S cancelate/D canonized/U cauterize/DGS caviler/S centerline/S cesium Christianizing civilizational/MS cognizable commercialization/MS communize/DGS computerization conditionalize/DGS conventionalized criminalize/DGS crystallization/AMS decentralizing deemphasize/DGRSZ deglycerolized dehumanize/DGS demineralization/MS democratization/MS democratize/DGRS democratizes/U demonize/DGS demoralization/MS demythologization demythologize/DGRS depersonalization/MS depersonalized deputized destabilize/DGS destigmatization desynchronize/DGS detribalize/DGS diagonalizable dialyzed/U diarrhea/MS diarrheal dichotomization digitalization/MS digitization diopter/MS discolored/MPS discoloreds/U discolors disfavor/DGRSZ disfavorer/MS disheveled disorganization/MS disulfide doweling downdraft draftsperson drafty/PRY dramatization/MS dramatize/DGRSZ duelist/S dynamized edema/MS edematous emphasize/ADGRSZ energized/U energizes enthrall/S epicenter/MS esthete/S eulogize/DGRSZ Europeanization/MS Europeanized exorcize/DGS extemporize/DGRSZ externalization/MS favoritism/MS federalize/DGS fetid/PY fetus/MS fiberboard fossilized/U fraternize/DGRSZ galvanization/AMS galvanize/DGRSZ galvanizes/A generalizable/MS germanized gimbaled glottalization glycerolized grueling/Y gynecological/MS gynecologist/MS harmonization/MS homeomorph homeopath homogenization/MS homogenize/DGRSZ honoree/MS hospitalization/MS humanize/DGRSZ humanizes/AI hydrolyzed/U hypnotize/DGRSZ hypnotizer/MS hypnotizes/U hypophysectomized idolize/DGRSZ immobilize/DGRS immortalized/U immunization/MS impersonalized industrialized/U industrializing institutionalization/MS internationalization/MS internationalized ionize/DGJNRSXZ kinesthesis kinesthetic/S kinesthetically lackluster legitimize/DGRS libeler/S libelous/Y liberalization/MS lionize/DGRSZ magnetized/U maneuverability maneuverable marbleized marbleizing maximization/MS mazurka/MS memorialized/U mesmerized/U metabolized metalization/MS metropolitanization milliliter/MS mineralized/U misbehavior/MS mischaracterization/MS mischaracterize/DGS misdemeanor/MS mobilization/AMS mobilize/DGRS mobilizes/A modernization/MS monetization/A monetize/ADGS monopolization/MS monopolize/DGRSZ monopolized/U monopolizes/U multicolor/DMS narcotizes nasalization/MS nasalized naturalized/U neutralization/MS nominalized novelized ocher/MS operationalization/S operationalize/D orthogonalization orthogonalized orthopedic/S ostracized outmaneuver/DGS overemphasize/DGRSZ packetize/DGRSZ packetizer/MS palatalization palatalize/DGS palletized panelization panelized parenthesize/GS particularize/DGS pasteurization/S pedaled pedaling peptizing plagiarize/DGRSZ platinize/DGS plowshare/MS polarize/DGRSZ politicized polymerizations prioritization/M proletarianization proletarianized pronominalization pronominalize pummeled pyorrhea/MS pyrolyze/MRS radiopasteurization radiosterilization radiosterilized rancor/MS randomization/MS rationalization/MS realizability/MS reconceptualization recrystallize/G regularizing reharmonization repopularize revitalization revitalize/DGRSZ ritualized romanticize/GS rubberized sanitization/M Sanskritize satirize/DGRSZ satirizes/U scandalized/U scandalizing sectionalized secularization/MS secularized/U sensationalize/DGS sensitized/U sentimentalize/DGRSZ sentimentalizes/U serializability/M serializable sexualized signalizes sniveled sniveler/S sniveling/S socialization/MS stabilization/MS stigmatization/MS stigmatized/U stylization/MS subcategorizing subsidization/MS substerilization suburbanization/MS suburbanized suburbanizing sulfaquinoxaline sulfide sulfite sulfonamide/S sulfurous/PY swiveled swiveling synergize/DGS systematization/MS systemization/MS teaseled teaseling teetotaler temporize/DGJRSZ temporizer/MS temporizing/MSY temporizings/U theatergoer/MS theatergoing/MS thru tine's tinseled tinseling traditionalized travelog/MS trialization triangularization/S tricolor/DMS tyrannize/DGJRSZ tyrannizing/MSY uncauterized/MS underutilization underutilized undialyzed/MS undramatized/MS unenergized/MS uneulogized/MS unfossilized/MS unfraternizing/MS unhydrolyzed/MS unidolized/MS unindustrialized/MS unitized universalize/DGRSZ unmagnetized/MS unmemorialized/MS unmineralized/MS unmobilized/MS unpolarized/MS unpreemphasized unsavory/MPS unstigmatized/MS untrammeled unvocalized/MS unvulcanized/MS updraft/MS urbanization/MS urbanized vacuolization/MS vaporization/AMS varicolored/MS velarize/DGS virtualization/M virtualize/DGS visualization/AMS vocalization/MS vocalize/DGRSZ volatilization/MS vulcanized/U watercolor/DGMS watercolorist/S yodeled yodeler yodeling ispell-3.4.00/languages/english/PaxHeaders.19408/english.aff0000644000000000000000000000013212465620666020353 xustar0030 mtime=1423385014.768889357 30 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/english.aff0000444003214100001440000005703712465620666021434 0ustar00geofffaculty00000000000000# # $Id: english.aff,v 1.24 2015-02-07 23:59:51-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2000, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Affix table for English # # $Log: english.aff,v $ # Revision 1.24 2015-02-07 23:59:51-08 geoff # Correct the suffix generation for words ending in TH. # # Revision 1.23 2005/04/21 14:06:40 geoff # Add UTF-8 as an encoding option. # # Revision 1.22 2005/04/13 22:52:37 geoff # Update the license. Add expanded rules for LY and ES. # # Revision 1.21 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.20 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.19 2000/08/22 11:03:59 geoff # Fix a typo in the previous checkin. Provide dummy definitions for eth # and thorn for tex/nroff, since ispell insists on having them. # # Revision 1.18 2000/08/22 10:52:25 geoff # *** empty log message *** # # Revision 1.17 1999/01/07 01:58:15 geoff # Update the copyright. # # Revision 1.16 1995/01/08 23:23:59 geoff # Add a NeXT to the defstringtype statement so that nextispell can # select it. # # Revision 1.15 1994/01/25 07:12:40 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # nroffchars ().\\* texchars ()\[]{}<\>\\$*.% # First we declare the character set. Since it's English, it would be # easy, except that English likes to borrow accents (notably # acute/grave) from other languages. To be safe, we'll declare a majority # of ISO Latin-1. However, we do not declare the German "ess-zed" in # capitalized form, because doing so would cause troubles with certain # other misspellings; see the German affix files for more information. # # In keeping with the march of progress, ISO Latin-1 is the default # encoding. This helps us avoid some of the more obviously difficult # problems involving encoding acute and grave accents as apostrophes. # # We also declare the apostrophe, so that possessives can # be handled. We declare it as a boundary character, so that quoting with # single quotes doesn't confuse things. The apostrophe is the only # character that gets such treatment. # # We declare the apostrophe first so that "Jon's" collates before "Jonas". # (This is the way ASCII does it). defstringtype "list" "nroff" ".list" ".txt" ".man" boundarychars ' wordchars a A stringchar \xE0 \xC0 # àÀ Latin letter A with grave stringchar \xE1 \xC1 # áÁ Latin letter A with acute stringchar \xE2 \xC2 # â Latin letter A with circumflex stringchar \xE3 \xC3 # ãà Latin letter A with tilde stringchar \xE4 \xC4 # äÄ Latin letter A with diaeresis stringchar \xE5 \xC5 # åÅ Latin letter A with ring above stringchar \xE6 \xC6 # æÆ Latin letter AE wordchars [bc] [BC] stringchar \xE7 \xC7 # çÇ Latin letter C with cedilla wordchars [de] [DE] stringchar \xE8 \xC8 # èÈ Latin letter E with grave stringchar \xE9 \xC9 # éÉ Latin letter E with acute stringchar \xEA \xCA # êÊ Latin letter E with circumflex stringchar \xEB \xCB # ëË Latin letter E with diaeresis wordchars [f-i] [F-I] stringchar \xEC \xCC # ìÌ Latin letter I with grave stringchar \xED \xCD # íÍ Latin letter I with acute stringchar \xEE \xCE # îÎ Latin letter I with circumflex stringchar \xEF \xCF # ïÏ Latin letter I with diaeresis stringchar \xF0 \xD0 # ðÐ Latin letter eth wordchars [j-n] [J-N] stringchar \xF1 \xD1 # ñÑ Latin letter N with tilde wordchars o O stringchar \xF2 \xD2 # òÒ Latin letter O with grave stringchar \xF3 \xD3 # óÓ Latin letter O with acute stringchar \xF4 \xD4 # ôÔ Latin letter O with circumflex stringchar \xF5 \xD5 # õÕ Latin letter O with tilde stringchar \xF6 \xD6 # öÖ Latin letter O with diaeresis stringchar \xF8 \xD8 # øØ Latin letter O with stroke wordchars [p-s] [P-S] # stringchar \xDF SS # ß Latin small letter sharp s stringchar \xDF # ß Latin small letter sharp s wordchars [tu] [TU] stringchar \xF9 \xD9 # ùÙ Latin letter U with grave stringchar \xFA \xDA # úÚ Latin letter U with acute stringchar \xFB \xDB # ûÛ Latin letter U with circumflex stringchar \xFC \xDC # üÜ Latin letter U with diaeresis wordchars [v-y] [V-Y] stringchar \xFD \xDD # ýÝ Latin letter Y with acute stringchar \xFF # ÿ Latin small letter Y with diaeresis wordchars z Z stringchar \xFE \xDE # þÞ Latin letter thorn # # UTF-8 # altstringtype "utf8" "TeX" ".txt" altstringchar \xC3\xA0 \xE0 # à Latin letter a with grave altstringchar \xC3\x80 \xC0 # À Latin letter A with grave altstringchar \xC3\xA1 \xE1 # á Latin letter a with acute altstringchar \xC3\x81 \xC1 # Á Latin letter A with acute altstringchar \xC3\xA2 \xE2 # â Latin letter a with circumflex altstringchar \xC3\x82 \xC2 #  Latin letter A with circumflex altstringchar \xC3\xA3 \xE3 # ã Latin letter a with tilde altstringchar \xC3\x83 \xC3 # à Latin letter A with tilde altstringchar \xC3\xA4 \xE4 # ä Latin letter a with diaeresis altstringchar \xC3\x84 \xC4 # Ä Latin letter A with diaeresis altstringchar \xC3\xA5 \xE5 # å Latin letter a with ring above altstringchar \xC3\x85 \xC5 # Å Latin letter A with ring above altstringchar \xC3\xA6 \xE6 # æ Latin letter ae altstringchar \xC3\x86 \xC6 # Æ Latin letter AE altstringchar \xC3\xA7 \xE7 # ç Latin letter c with cedilla altstringchar \xC3\x87 \xC7 # Ç Latin letter C with cedilla altstringchar \xC3\xA8 \xE8 # è Latin letter e with grave altstringchar \xC3\x88 \xC8 # È Latin letter E with grave altstringchar \xC3\xA9 \xE9 # é Latin letter e with acute altstringchar \xC3\x89 \xC9 # É Latin letter E with acute altstringchar \xC3\xAA \xEA # ê Latin letter e with circumflex altstringchar \xC3\x8A \xCA # Ê Latin letter E with circumflex altstringchar \xC3\xAB \xEB # ë Latin letter e with diaeresis altstringchar \xC3\x8B \xCB # Ë Latin letter E with diaeresis altstringchar \xC3\xAC \xEC # ì Latin letter i with grave altstringchar \xC3\x8C \xCC # Ì Latin letter I with grave altstringchar \xC3\xAD \xED # í Latin letter i with acute altstringchar \xC3\x8D \xCD # Í Latin letter I with acute altstringchar \xC3\xAE \xEE # î Latin letter i with circumflex altstringchar \xC3\x8E \xCE # Î Latin letter I with circumflex altstringchar \xC3\xAF \xEF # ï Latin letter i with diaeresis altstringchar \xC3\x8F \xCF # Ï Latin letter I with diaeresis altstringchar \xC3\xB0 \xF0 # ð Latin letter eth altstringchar \xC3\x90 \xD0 # Ð Latin letter eth altstringchar \xC3\xB1 \xF1 # ñ Latin letter n with tilde altstringchar \xC3\x91 \xD1 # Ñ Latin letter N with tilde altstringchar \xC3\xB2 \xF2 # ò Latin letter o with grave altstringchar \xC3\x92 \xD2 # Ò Latin letter O with grave altstringchar \xC3\xB3 \xF3 # ó Latin letter o with acute altstringchar \xC3\x93 \xD3 # Ó Latin letter O with acute altstringchar \xC3\xB4 \xF4 # ô Latin letter o with circumflex altstringchar \xC3\x94 \xD4 # Ô Latin letter O with circumflex altstringchar \xC3\xB5 \xF5 # õ Latin letter o with tilde altstringchar \xC3\x95 \xD5 # Õ Latin letter O with tilde altstringchar \xC3\xB6 \xF6 # ö Latin letter o with diaeresis altstringchar \xC3\x96 \xD6 # Ö Latin letter O with diaeresis altstringchar \xC3\xB8 \xF8 # ø Latin letter o with stroke altstringchar \xC3\x98 \xD8 # Ø Latin letter O with stroke altstringchar \xC3\xB9 \xF9 # ù Latin letter u with grave altstringchar \xC3\x99 \xD9 # Ù Latin letter U with grave altstringchar \xC3\xBA \xFA # ú Latin letter u with acute altstringchar \xC3\x9A \xDA # Ú Latin letter U with acute altstringchar \xC3\xBB \xFB # û Latin letter u with circumflex altstringchar \xC3\x9B \xDB # Û Latin letter U with circumflex altstringchar \xC3\xBC \xFC # ü Latin letter u with diaeresis altstringchar \xC3\x9C \xDC # Ü Latin letter U with diaeresis altstringchar \xC3\xBD \xFD # ý Latin letter y with acute altstringchar \xC3\x9D \xDD # Ý Latin letter Y with acute altstringchar \xC3\xBE \xFE # þ Latin letter thorn altstringchar \xC3\x9E \xDE # Þ Latin letter Thorn altstringchar \xC3\x9F \xDF # ß Latin small letter sharp s # altstringchar SS SS # SS Latin capital letter sharp s altstringchar \xC3\xBF \xFF # ÿ Latin small letter Y with diaeresis # # TeX/LaTeX # altstringtype "tex" "TeX" ".tex" ".bib" altstringchar \\`a \xE0 altstringchar \\`A \xC0 # àÀ Latin letter A with grave altstringchar \\'a \xE1 altstringchar \\'A \xC1 # áÁ Latin letter A with acute altstringchar \\^a \xE2 altstringchar \\^A \xC2 # â Latin letter A with circumflex altstringchar \\~a \xE3 altstringchar \\~A \xC3 # ãà Latin letter A with tilde altstringchar \\\"a \xE4 altstringchar \\\"A \xC4 # äÄ Latin letter A with diaeresis altstringchar {\\aa} \xE5 altstringchar {\\AA} \xC5 # åÅ Latin letter A with ring above altstringchar {\\ae} \xE6 altstringchar {\\AE} \xC6 # æÆ Latin letter AE altstringchar \\c{c} \xE7 altstringchar \\c{C} \xC7 # çÇ Latin letter C with cedilla altstringchar \\`e \xE8 altstringchar \\`E \xC8 # èÈ Latin letter E with grave altstringchar \\'e \xE9 altstringchar \\'E \xC9 # éÉ Latin letter E with acute altstringchar \\^e \xEA altstringchar \\^E \xCA # êÊ Latin letter E with circumflex altstringchar \\\"e \xEB altstringchar \\\"E \xCB # ëË Latin letter E with diaeresis altstringchar \\`{\\i} \xEC altstringchar \\`I \xCC # ìÌ Latin letter I with grave altstringchar \\'{\\i} \xED altstringchar \\'I \xCD # íÍ Latin letter I with acute altstringchar \\^{\\i} \xEE altstringchar \\^I \xCE # îÎ Latin letter I with circumflex altstringchar \\\"{\\i} \xEF altstringchar \\\"I \xCF # ïÏ Latin letter I with diaeresis altstringchar \\~n \xF1 # (not listed) Latin letter eth # TeX doesn't define it, but ispell requires us to provide *something*. altstringchar {\\eth} \xF0 altstringchar {\\eth} \xD0 altstringchar \\~N \xD1 # ñÑ Latin letter N with tilde altstringchar \\`o \xF2 altstringchar \\`O \xD2 # òÒ Latin letter O with grave altstringchar \\'o \xF3 altstringchar \\'O \xD3 # óÓ Latin letter O with acute altstringchar \\^o \xF4 altstringchar \\^O \xD4 # ôÔ Latin letter O with circumflex altstringchar \\~o \xF5 altstringchar \\~O \xD5 # õÕ Latin letter O with tilde altstringchar \\\"o \xF6 altstringchar \\\"O \xD6 # öÖ Latin letter O with diaeresis altstringchar {\\o} \xF8 altstringchar {\\O} \xD8 # øØ Latin letter O with stroke altstringchar {\\ss} \xDF # ß Latin small letter sharp s altstringchar \\`u \xF9 altstringchar \\`U \xD9 # ùÙ Latin letter U with grave altstringchar \\'u \xFA altstringchar \\'U \xDA # úÚ Latin letter U with acute altstringchar \\^u \xFB altstringchar \\^U \xDB # ûÛ Latin letter U with circumflex altstringchar \\\"u \xFC altstringchar \\\"U \xDC # üÜ Latin letter U with diaeresis altstringchar \\'y \xFD altstringchar \\'Y \xDD # ýÝ Latin letter Y with acute altstringchar \\\"y \xFF # ÿ Latin small letter Y with diaeresis # (not listed) Latin letter thorn # TeX doesn't define it, but ispell requires us to provide *something*. altstringchar {\\thorn} \xFE altstringchar {\\thorn} \xDE # # N/Troff with -ms/-me/man macro packages. Some of these are only # supported by the FSF versions of the packages. # altstringtype "nroff" "nroff" ".nr" ".ms" ".me" altstringchar a\\*` \xE0 altstringchar A\\*` \xC0 # àÀ Latin letter A with grave altstringchar a\\*' \xE1 altstringchar A\\*' \xC1 # áÁ Latin letter A with acute altstringchar a\\*^ \xE2 altstringchar A\\*^ \xC2 # â Latin letter A with circumflex altstringchar a\\*~ \xE3 altstringchar A\\*~ \xC3 # ãà Latin letter A with tilde altstringchar a\\*\: \xE4 altstringchar A\\*\: \xC4 # äÄ Latin letter A with diaeresis altstringchar a\\*o \xE5 altstringchar A\\*o \xC5 # åÅ Latin letter A with ring above altstringchar \\(ae \xE6 altstringchar \\(AE \xC6 # æÆ Latin letter AE altstringchar c\\*\, \xE7 altstringchar C\\*\, \xC7 # çÇ Latin letter C with cedilla altstringchar e\\*` \xE8 altstringchar E\\*` \xC8 # èÈ Latin letter E with grave altstringchar e\\*' \xE9 altstringchar E\\*' \xC9 # éÉ Latin letter E with acute altstringchar e\\*^ \xEA altstringchar E\\*^ \xCA # êÊ Latin letter E with circumflex altstringchar e\\*\: \xEB altstringchar E\\*\: \xCB # ëË Latin letter E with diaeresis altstringchar i\\*` \xEC altstringchar I\\*` \xCC # ìÌ Latin letter I with grave altstringchar i\\*' \xED altstringchar I\\*' \xCD # íÍ Latin letter I with acute altstringchar i\\*^ \xEE altstringchar I\\*^ \xCE # îÎ Latin letter I with circumflex altstringchar i\\*\: \xEF altstringchar I\\*\: \xCF # ïÏ Latin letter I with diaeresis # (not listed) Latin letter eth # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(et \xF0 altstringchar \*(ET \xD0 altstringchar n\\*~ \xF1 altstringchar N\\*~ \xD1 # ñÑ Latin letter N with tilde altstringchar o\\*` \xF2 altstringchar O\\*` \xD2 # òÒ Latin letter O with grave altstringchar o\\*' \xF3 altstringchar O\\*' \xD3 # óÓ Latin letter O with acute altstringchar o\\*^ \xF4 altstringchar O\\*^ \xD4 # ôÔ Latin letter O with circumflex altstringchar o\\*~ \xF5 altstringchar O\\*~ \xD5 # õÕ Latin letter O with tilde altstringchar o\\*\: \xF6 altstringchar O\\*\: \xD6 # öÖ Latin letter O with diaeresis altstringchar o\\*/ \xF8 altstringchar O\\*/ \xD8 # øØ Latin letter O with stroke altstringchar \\*8 \xDF # ß Latin small letter sharp s altstringchar u\\*` \xF9 altstringchar U\\*` \xD9 # ùÙ Latin letter U with grave altstringchar u\\*' \xFA altstringchar U\\*' \xDA # úÚ Latin letter U with acute altstringchar u\\*^ \xFB altstringchar U\\*^ \xDB # ûÛ Latin letter U with circumflex altstringchar u\\*\: \xFC altstringchar U\\*\: \xDC # üÜ Latin letter U with diaeresis altstringchar y\\*' \xFD altstringchar Y\\*' \xDD # ýÝ Latin letter Y with acute altstringchar y\\*\: \xFF # ÿ Latin small letter Y with diaeresis # (not listed) Latin letter thorn # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(th \xFE altstringchar \*(TH \xDE # # N/Troff with -mm macros. Some of these are not actually supported # by nroff. # altstringtype "-mm" "nroff" ".mm" altstringchar a\\*` \xE0 altstringchar A\\*` \xC0 # àÀ Latin letter A with grave altstringchar a\\*' \xE1 altstringchar A\\*' \xC1 # áÁ Latin letter A with acute altstringchar a\\*^ \xE2 altstringchar A\\*^ \xC2 # â Latin letter A with circumflex altstringchar a\\*~ \xE3 altstringchar A\\*~ \xC3 # ãà Latin letter A with tilde altstringchar a\\*\: \xE4 altstringchar A\\*; \xC4 # äÄ Latin letter A with diaeresis altstringchar a\\*o \xE5 altstringchar A\\*o \xC5 # åÅ Latin letter A with ring above altstringchar \\(ae \xE6 altstringchar \\(AE \xC6 # æÆ Latin letter AE altstringchar c\\*\, \xE7 altstringchar C\\*\, \xC7 # çÇ Latin letter C with cedilla altstringchar e\\*` \xE8 altstringchar E\\*` \xC8 # èÈ Latin letter E with grave altstringchar e\\*' \xE9 altstringchar E\\*' \xC9 # éÉ Latin letter E with acute altstringchar e\\*^ \xEA altstringchar E\\*^ \xCA # êÊ Latin letter E with circumflex altstringchar e\\*\: \xEB altstringchar E\\*; \xCB # ëË Latin letter E with diaeresis altstringchar i\\*` \xEC altstringchar I\\*` \xCC # ìÌ Latin letter I with grave altstringchar i\\*' \xED altstringchar I\\*' \xCD # íÍ Latin letter I with acute altstringchar i\\*^ \xEE altstringchar I\\*^ \xCE # îÎ Latin letter I with circumflex altstringchar i\\*\: \xEF altstringchar I\\*; \xCF # ïÏ Latin letter I with diaeresis # (not listed) Latin letter eth # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(et \xF0 altstringchar \*(ET \xD0 altstringchar n\\*~ \xF1 altstringchar N\\*~ \xD1 # ñÑ Latin letter N with tilde altstringchar o\\*` \xF2 altstringchar O\\*` \xD2 # òÒ Latin letter O with grave altstringchar o\\*' \xF3 altstringchar O\\*' \xD3 # óÓ Latin letter O with acute altstringchar o\\*^ \xF4 altstringchar O\\*^ \xD4 # ôÔ Latin letter O with circumflex altstringchar o\\*~ \xF5 altstringchar O\\*~ \xD5 # õÕ Latin letter O with tilde altstringchar o\\*\: \xF6 altstringchar O\\*; \xD6 # öÖ Latin letter O with diaeresis altstringchar o\\*/ \xF8 altstringchar O\\*/ \xD8 # øØ Latin letter O with stroke altstringchar \\*(ss \xDF # ß Latin small letter sharp s altstringchar u\\*` \xF9 altstringchar U\\*` \xD9 # ùÙ Latin letter U with grave altstringchar u\\*' \xFA altstringchar U\\*' \xDA # úÚ Latin letter U with acute altstringchar u\\*^ \xFB altstringchar U\\*^ \xDB # ûÛ Latin letter U with circumflex altstringchar u\\*\: \xFC altstringchar U\\*; \xDC # üÜ Latin letter U with diaeresis altstringchar y\\*' \xFD altstringchar Y\\*' \xDD # ýÝ Latin letter Y with acute altstringchar y\\*\: \xFF # ÿ Latin small letter Y with diaeresis # (not listed) Latin letter thorn # nroff doesn't define it, but ispell requires us to provide *something*. altstringchar \*(th \xFE altstringchar \*(TH \xDE # # HTML/SGML/XML # altstringtype "html" "html" ".html" ".htm" ".shtml" altstringchar à \xE0 altstringchar À \xC0 # àÀ Latin letter A with grave altstringchar á \xE1 altstringchar Á \xC1 # áÁ Latin letter A with acute altstringchar â \xE2 altstringchar  \xC2 # â Latin letter A with circumflex altstringchar ã \xE3 altstringchar à \xC3 # ãà Latin letter A with tilde altstringchar ä \xE4 altstringchar Ä \xC4 # äÄ Latin letter A with diaeresis altstringchar â \xE5 altstringchar  \xC5 # åÅ Latin letter A with ring above altstringchar æ \xE6 altstringchar Æ \xC6 # æÆ Latin letter AE altstringchar ç \xE7 altstringchar Ç \xC7 # çÇ Latin letter C with cedilla altstringchar è \xE8 altstringchar È \xC8 # èÈ Latin letter E with grave altstringchar é \xE9 altstringchar É \xC9 # éÉ Latin letter E with acute altstringchar ê \xEA altstringchar Ê \xCA # êÊ Latin letter E with circumflex altstringchar ë \xEB altstringchar Ë \xCB # ëË Latin letter E with diaeresis altstringchar ì \xEC altstringchar Ì \xCC # ìÌ Latin letter I with grave altstringchar í \xED altstringchar Í \xCD # íÍ Latin letter I with acute altstringchar î \xEE altstringchar Î \xCE # îÎ Latin letter I with circumflex altstringchar ï \xEF altstringchar Ï \xCF # ïÏ Latin letter I with diaeresis altstringchar ð \xF0 altstringchar Ð \xD0 # ðÐ Latin letter eth altstringchar ñ \xF1 altstringchar Ñ \xD1 # ñÑ Latin letter N with tilde altstringchar ò \xF2 altstringchar Ò \xD2 # òÒ Latin letter O with grave altstringchar ó \xF3 altstringchar Ó \xD3 # óÓ Latin letter O with acute altstringchar ô \xF4 altstringchar Ô \xD4 # ôÔ Latin letter O with circumflex altstringchar õ \xF5 altstringchar Õ \xD5 # õÕ Latin letter O with tilde altstringchar ö \xF6 altstringchar Ö \xD6 # öÖ Latin letter O with diaeresis altstringchar ø \xF8 altstringchar Ø \xD8 # øØ Latin letter O with stroke altstringchar ß \xDF # ß Latin small letter sharp s altstringchar ù \xF9 altstringchar Ù \xD9 # ùÙ Latin letter U with grave altstringchar ú \xFA altstringchar Ú \xDA # úÚ Latin letter U with acute altstringchar û \xFB altstringchar Û \xDB # ûÛ Latin letter U with circumflex altstringchar ü \xFC altstringchar Ü \xDC # üÜ Latin letter U with diaeresis altstringchar ý \xFD altstringchar Ý \xDD # ýÝ Latin letter Y with acute altstringchar ÿ \xFF # ÿ Latin small letter Y with diaeresis altstringchar þ \xFE altstringchar Þ \xDE # þÞ Latin letter thorn # Here's a record of flags used, in case you want to add new ones. # Right now, we fit within the minimal MASKBITS definition. # # ABCDEFGHIJKLMNOPQRSTUVWXYZ # Used: * * **** ** * ***** *** # A D GHIJ MN P RSTUV XYZ # Available: -- -- -- - - - # BC EF KL O Q W # Now the prefix table. There are only three prefixes that are truly # frequent in English, and none of them seem to need conditional variations. # prefixes flag *A: . > RE # As in enter > reenter flag *I: . > IN # As in disposed > indisposed flag *U: . > UN # As in natural > unnatural # Finally, the suffixes. These are exactly the suffixes that came out # with the original "ispell"; I haven't tried to improve them. The only # thing I did besides translate them was to add selected cross-product flags. # suffixes flag V: E > -E,IVE # As in create > creative [^E] > IVE # As in prevent > preventive flag *N: E > -E,ION # As in create > creation Y > -Y,ICATION # As in multiply > multiplication [^EY] > EN # As in fall > fallen flag *X: E > -E,IONS # As in create > creations Y > -Y,ICATIONS # As in multiply > multiplications [^EY] > ENS # As in weak > weakens flag H: Y > -Y,IETH # As in twenty > twentieth [^Y] > TH # As in hundred > hundredth flag *Y: Y > -Y,ILY # As in messy > messily [^Y] > LY # As in quick > quickly flag *G: E > -E,ING # As in file > filing [^E] > ING # As in cross > crossing flag *J: E > -E,INGS # As in file > filings [^E] > INGS # As in cross > crossings flag *D: E > D # As in create > created [^AEIOU]Y > -Y,IED # As in imply > implied [^EY] > ED # As in cross > crossed [AEIOU]Y > ED # As in convey > conveyed flag T: E > ST # As in late > latest [^AEIOU]Y > -Y,IEST # As in dirty > dirtiest [AEIOU]Y > EST # As in gray > grayest [^EY] > EST # As in small > smallest flag *R: E > R # As in skate > skater [^AEIOU]Y > -Y,IER # As in multiply > multiplier [AEIOU]Y > ER # As in convey > conveyer [^EY] > ER # As in build > builder flag *Z: E > RS # As in skate > skaters [^AEIOU]Y > -Y,IERS # As in multiply > multipliers [AEIOU]Y > ERS # As in convey > conveyers [^EY] > ERS # As in build > builders flag *S: [^AEIOU]Y > -Y,IES # As in imply > implies [AEIOU]Y > S # As in convey > conveys [CS]H > ES # As in lash > lashes [^CS]H > S # As in cough > coughs [SXZ] > ES # As in fix > fixes [^SXZHY] > S # As in bat > bats flag *P: [^AEIOU]Y > -Y,INESS # As in cloudy > cloudiness [AEIOU]Y > NESS # As in gray > grayness [^Y] > NESS # As in late > lateness flag *M: . > 'S # As in dog > dog's ispell-3.4.00/languages/english/PaxHeaders.19408/Makefile0000644000000000000000000000013212466001033017662 xustar0030 mtime=1423442459.569090321 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/Makefile0000444003214100001440000004001612466001033020730 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.33 2015-02-08 16:40:59-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This Makefile is an example of how to build dictionaries for a # complex language with many variants. It supports both American and # British English and four dictionary source files, and will build up # to 8 dictionares from those 4 files by combining them with an # optional installation-specific file. # # If you are building a new Makefile for your own language, this is # probably not the right place to start. Instead, you should select # the "deutsch" Makefile, which is moderately complex, or one of the # simple Makefiles for another language distributed with ispell. # # $Log: Makefile,v $ # Revision 1.33 2015-02-08 16:40:59-08 geoff # Get rid of the old munchlist-suppressing code and of references to english.5. # # Revision 1.32 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.31 2015-02-08 00:53:31-08 geoff # Remove english.5 from the distribution # # Revision 1.30 2008-02-21 22:19:19-08 geoff # Use munchlist to build all dictionaries, to avoid locale problems. # (We used to avoid munchlist because of performance, but 20 years of # hardware advances have turned a multi-hour process into a 15-second # one. Yay for Moore's law!) # # Revision 1.29 2005/04/26 22:55:07 geoff # Add code to protect against POSIX's astoundingly stupid decision to break # backwards compatibility for the sort command. # # Revision 1.28 2005/04/13 22:58:43 geoff # Update license. Allow section-5 manuals to go into section 4 on # systems that prefer it that way. # # Revision 1.27 2002/06/06 23:21:30 geoff # Don't assume munchlist is in the PATH # # Revision 1.26 2001/07/25 21:51:47 geoff # *** empty log message *** # # Revision 1.25 2001/07/23 20:43:37 geoff # *** empty log message *** # # Revision 1.24 1999/01/07 01:23:16 geoff # Update the copyright. Get rid of the old shar-based dictioary building. # # Revision 1.23 1995/08/05 23:19:50 geoff # Add tests to detect and suppress accidentally-generated zero-length # dictionaries. # # Revision 1.22 1994/08/31 05:58:43 geoff # Create directories before installing into them, and be sure to set the # proper modes on manual pages. # # Revision 1.21 1994/05/25 04:29:30 geoff # Get rid of all references to DEFHASH and defhash. # # Revision 1.20 1994/05/24 04:47:33 geoff # Work around an RS-6000 shell deficiency in environment setting # # Revision 1.19 1994/05/17 06:37:36 geoff # Fix the remove-on-abort code for the derived dictionaries to be more # robust. # # Revision 1.18 1994/02/23 04:52:30 geoff # Remove dictionaries being built if make is aborted early. # # Revision 1.17 1994/02/22 06:09:06 geoff # Add SHELLDEBUG. # # Revision 1.16 1994/02/13 23:55:20 geoff # Get rid of the temporary line that zapped "english..4" for people who # had 3.1.00. # # Revision 1.15 1994/02/07 08:01:57 geoff # Allow multiple variants and extradicts # # Revision 1.14 1994/02/07 07:08:10 geoff # Install english.4 with the right name, removing the wrong one if it exists # # Revision 1.13 1994/02/07 06:18:18 geoff # Add dummy else clauses to shell tests to handle Ultrix problems. Add an # eval to all sort commands to make sure that MAKE_SORTTMP is handled # correctly on all systems. # # Revision 1.12 1994/01/25 08:50:34 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash MUNCHLIST = ../../munchlist # The following variables should be set by the superior Makefile, # based on the LANGUAGES variable in config.X. # # There are four progressively-larger English dictionaries distributed # with ispell. These are named english.sml, english.med, english.lrg, # and english.xlg. For each of these, you can also build a "plus" # version (english.sml+, etc.) which is created by combining the # distributed version with an "extra" dictionary defined by EXTRADICT, # usually /usr/share/dict/words. The "plus" versions of dictionaries # require lots of time and temporary file space; make sure you have # set TMPDIR appropriately. # # The dictionaries to be built are listed in the MASTERDICTS variable, # separated by spaces. The hash files to be built (and installed) are # listed in the HASHFILES variable. Hash files are named by taking # the suffix of the dictionary (e.g., "med+"), and adding ".hash". As # a general rule, the dictionaries needed to build the HASHFILES must # be listed in the MASTERDICTS variable. # # British/American variants are supported by the VARIANTS variable. # You should set VARIANTS to one of "american", "british", or # "altamer". The latter is a file of alternate American spellings, # often British-derived. I recommend against its use. I also # recommend against selecting more than one variant, because it tends # to cause inconsistent or incorrect spellings to be hidden, although # there is nothing to prevent such an unwise decision. # # If you change AFFIXES for english, you should consider also changing # DEFLANG (in config.X) to match. # MASTERDICTS = Use_LANGUAGES_from_config.X HASHFILES = Use_LANGUAGES_from_config.X VARIANTS = Use_LANGUAGES_from_config.X EXTRADICT = Use_LANGUAGES_from_config.X # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = english.aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(CONFIG) @set $(SHELLDEBUG); \ if [ ! -r english.0 ]; \ then \ $(MAKE) SHELLDEBUG=$(SHELLDEBUG) dictcomponents; \ else \ : ; \ fi @set $(SHELLDEBUG); \ for dict in $(MASTERDICTS); do \ if [ ! -r $$dict ]; \ then \ $(MAKE) 'VARIANTS=$(VARIANTS)' \ 'EXTRADICT=$(EXTRADICT)' \ SHELLDEBUG=$(SHELLDEBUG) $$dict; \ else \ : ; \ fi; \ done $(MAKE) SHELLDEBUG=$(SHELLDEBUG) $(HASHFILES) # Note the fooling around with LIBDIR. It might be a relative path, # relative to the top of the ispell source tree. So we have to cd to # ../.. before referring to $LIBDIR. There must be a better way... # install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f english.aff $(HASHFILES) @. $(CONFIG); \ set -x; \ cp english.aff $(HASHFILES) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 english.aff $(HASHFILES) # # Dependencies to build extra hash files # allhashes: normhashes plushashes normhashes: sml.hash med.hash lrg.hash xlg.hash plushashes: sml+.hash med+.hash lrg+.hash xlg+.hash # # Note that we don't use $(MAKE) in the following dependencies. There # is a good reason for this -- if we did, "make -n" would still run # buildhash. # sml.hash: $(CONFIG) $(BUILDHASH) sml.hash: $(AFFIXES) sml.hash: english.sml rm -f sml.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.sml $(AFFIXES) $@ sml+.hash: $(CONFIG) $(BUILDHASH) sml+.hash: $(AFFIXES) sml+.hash: english.sml+ rm -f sml+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.sml+ $(AFFIXES) $@ med.hash: $(BUILDHASH) $(CONFIG) med.hash: $(AFFIXES) med.hash: english.med rm -f med.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.med $(AFFIXES) $@ med+.hash: $(BUILDHASH) $(CONFIG) med+.hash: $(AFFIXES) med+.hash: english.med+ rm -f med+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.med+ $(AFFIXES) $@ lrg.hash: $(BUILDHASH) $(CONFIG) lrg.hash: $(AFFIXES) lrg.hash: english.lrg rm -f lrg.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.lrg $(AFFIXES) $@ lrg+.hash: $(BUILDHASH) $(CONFIG) lrg+.hash: $(AFFIXES) lrg+.hash: english.lrg+ rm -f lrg+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.lrg+ $(AFFIXES) $@ xlg.hash: $(BUILDHASH) $(CONFIG) xlg.hash: $(AFFIXES) xlg.hash: english.xlg rm -f xlg.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.xlg $(AFFIXES) $@ xlg+.hash: $(BUILDHASH) $(CONFIG) xlg+.hash: $(AFFIXES) xlg+.hash: english.xlg+ rm -f xlg+.hash @set +e; \ . $(CONFIG); \ set -ex; \ $(BUILDHASH) english.xlg+ $(AFFIXES) $@ # # The eight dictionaries, english.sml through english.xlg+, are # built by the following dependencies. We used to use some # Makefile tricks to avoid running munchlist unnecessarily, but # that leads to mistakes, and modern machines run munchlist fast # enough that it's no longer worth suppressing. # alldicts: normdicts plusdicts normdicts: english.sml normdicts: english.med normdicts: english.lrg normdicts: english.xlg plusdicts: english.sml+ plusdicts: english.med+ plusdicts: english.lrg+ plusdicts: english.xlg+ dictcomponents: english.sml: $(CONFIG) english.sml: english.0 english.sml: american.0 english.sml: altamer.0 english.sml: british.0 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.0"; \ done; \ trap "rm -f english.sml" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.sml \ || rm -f english.sml test -s english.sml \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.sml; exit 1) english.sml+: $(CONFIG) $(EXTRADICT) english.sml+: english.0 english.sml+: american.0 english.sml+: altamer.0 english.sml+: british.0 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.0"; \ done; \ trap "rm -f english.sml+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.sml+ \ || rm -f english.sml+ test -s english.sml+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.sml+; exit 1) english.med: $(CONFIG) english.med: english.0 english.med: american.0 english.med: altamer.0 english.med: british.0 english.med: english.1 english.med: american.1 english.med: altamer.1 english.med: british.1 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[01]"; \ done; \ trap "rm -f english.med" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.med \ || rm -f english.med test -s english.med \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.med; exit 1) english.med+: $(CONFIG) $(EXTRADICT) english.med+: english.0 english.med+: american.0 english.med+: altamer.0 english.med+: british.0 english.med+: english.1 english.med+: american.1 english.med+: altamer.1 english.med+: british.1 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[01]"; \ done; \ trap "rm -f english.med+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.med+ \ || rm -f english.med+ test -s english.med+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.med+; exit 1) english.lrg: $(CONFIG) english.lrg: english.0 english.lrg: american.0 english.lrg: altamer.0 english.lrg: british.0 english.lrg: english.1 english.lrg: american.1 english.lrg: altamer.1 english.lrg: british.1 english.lrg: english.2 english.lrg: american.2 english.lrg: altamer.2 english.lrg: british.2 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[012]"; \ done; \ trap "rm -f english.lrg" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.lrg \ || rm -f english.lrg test -s english.lrg \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.lrg; exit 1) english.lrg+: $(CONFIG) $(EXTRADICT) english.lrg+: english.0 english.lrg+: american.0 english.lrg+: altamer.0 english.lrg+: british.0 english.lrg+: english.1 english.lrg+: american.1 english.lrg+: altamer.1 english.lrg+: british.1 english.lrg+: english.2 english.lrg+: american.2 english.lrg+: altamer.2 english.lrg+: british.2 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[012]"; \ done; \ trap "rm -f english.lrg+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.lrg+ \ || rm -f english.lrg+ test -s english.lrg+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.lrg+; exit 1) english.xlg: $(CONFIG) english.xlg: english.0 english.xlg: american.0 english.xlg: altamer.0 english.xlg: british.0 english.xlg: english.1 english.xlg: american.1 english.xlg: altamer.1 english.xlg: british.1 english.xlg: english.2 english.xlg: american.2 english.xlg: altamer.2 english.xlg: british.2 english.xlg: english.3 @dicts=""; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[0123]"; \ done; \ trap "rm -f english.xlg" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.xlg \ || rm -f english.xlg test -s english.xlg \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.xlg; exit 1) english.xlg+: $(CONFIG) $(EXTRADICT) english.xlg+: english.0 english.xlg+: american.0 english.xlg+: altamer.0 english.xlg+: british.0 english.xlg+: english.1 english.xlg+: american.1 english.xlg+: altamer.1 english.xlg+: british.1 english.xlg+: english.2 english.xlg+: american.2 english.xlg+: altamer.2 english.xlg+: british.2 english.xlg+: english.3 @dicts="$(EXTRADICT)"; \ set $(SHELLDEBUG); \ for i in english $(VARIANTS); do \ dicts="$$dicts $$i.[0123]"; \ done; \ trap "rm -f english.xlg+" 1 2 15; \ set -x; \ PATH=$(PATHADDER):$$PATH; \ export PATH; \ $(MUNCHLIST) -v -l $(AFFIXES) $$dicts \ > english.xlg+ \ || rm -f english.xlg+ test -s english.xlg+ \ || (echo 'error: zero-length dictionary generated'; \ rm -f english.xlg+; exit 1) clean: rm -f core *.hash *.stat *.cnt *.words # # The following target allows you to clean out the combined # dictionary files. # dictclean: rm -f english.sml english.sml+ english.med english.med+ rm -f english.lrg english.lrg+ english.xlg english.xlg+ ispell-3.4.00/languages/english/PaxHeaders.19408/american.20000644000000000000000000000013212465612624020101 xustar0030 mtime=1423381908.532171661 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/american.20000444003214100001440000011642212465612624021154 0ustar00geofffaculty00000000000000abnormalize/S abolitionize/S absolutization/MS absolutize/S accessorize acclimatizable/MS accouter/DGS acculturize acetonization/MS acetonize/S achromatization achromatize/DGS acidize/S acronymize/S actionize/S activize/S adrenalize/S adulterize/S adverbialize/S aerosolization aestheticize/S Africanization/MS Africanize/DGS Afrikanerization Afrikanerize/DGS agatize/S agenize aggrandizable/MS aggrandization aggrandize/DGRSZ agnize/DGS agrarianize/S albumenization albumenize/DGS albuminization/MS albuminize/S alchemize alcoholizable/MS alcoholization/MS alcoholize/S algebraization/MS algebraize/S alienize/S alkalinization/MS alkalinize/S alkalization alkalize/DGS allegorization allegorize/DGRS alphabetization/MS alternize/S aluminization aluminize/DGS amalgamatize/S amalgamization/MS amalgamize/S Americanization/MS Americanize/GRSZ amor/MS amoralize/S amorism/MS amoristic/S amorphization amorphize amortizable/MS amortizement/MS anagrammatization anagrammatize analogize/S analyzation anarchize/S anathematization anathematize/DGS anatomize anemically anesthesiologist anesthesiology anesthetist anesthetization/MS angelicize/S angelize/S Anglicanize/S anglicization/MS anglicize/DS angularization/MS angularize/S anhydridization/MS anhydridize/S animalization/MS animalize/DGS animalizes/A annalize/S annualization annualize/GS anodization antagonization/MS anthologization anthologize/DGRS anthracitization/MS anthropomorphization anthropomorphize/DGS anticatalyzer/MS anticentralization/MS anticize/S antiepicenter/MS antifertilizer/MS antilabor/MS antioxidizer/MS antioxidizing/MS antipathize/S antiquarianize/S antirumor/MS antisensitize/RSZ antisensitizer/MS antisepticize/S antiseptize/S antithesize/S anviled anviling aphorize/DGRSZ apostatization apostatize/DGS apostrophize/DGS apotheosize appareling appetize/DSZ appetizement/MS Arabianize/S Arabicize/S arabization arabize/DGS arbores arborization arborize/DGS arcticize/S arithmetization/MS armorless aromatization aromatize/DGS arsenicize/S arterialization/MS arterialize/DGS artificialize/S Aryanization Aryanize/DGS asafetida asepticize/S Asiaticization/MS Asiaticize/S Assyrianize/S astigmatizer/MS asynchronize/DGS atomizability atomizable atticize/S attitudinization attitudinize/DGS Australianize/S Austrianize/S autoimmunization autoionization automatization/MS automatize/S autotomize avianize azotization azotize/DGS Babelize/S Babylonize/S bachelorize/S baconize/S bacterize balladize/S balsamize/S bantamize/S baptizable/MS baptizement/MS barbarianize/S barbarization barbarize/DGS baronize/S barycenter bastardization/MS beaverize/S beclamor/DGS becudgeled becudgeling bedlamize/S bedriveled bedriveling bejeweled bejeweling bemedaled Berlinize/S Bessemerize/S bestialize/DGS beveler/S bichromatize/S bicolor/D bimetalist bimetalistic biographize/S biologize/S bipolarization bipolarize/S Birminghamize/S bister/D bisulfate bisulfide bisulfite bituminization bituminize/DGS bolshevize bonderize borize/S Boswellize/S botanize/DGS boulevardize/S bourbonize/AS bowdlerization boweled boweling brominize/S brutalization/MS bureaucratize/DS busheler/S Byronize/S Byzantinize/S cadaverize/S cadmiumize/S Caesarize/S Calvinize/S Canadianization/MS Canadianize/S canaler/S canalization/MS canalize/DGS cancelable cancelous cannibalization/MS canonization/MS canonize/GRSZ canonizes/U capitalizable/MS Caponization caponize/DGS capsulization capsulize/DGS caracoled caracoling caramelization/MS caramelize/DGS carbolization carbolize/DGS carbonatization/MS carbonizable/MS carburization carburize/DGS carnalize/S caroled caroler/S caroling cartelization/MS cartelize/S castorized/MS catabolize cataloguize/S catalyze/RSZ catalyzer/MS catechizable/MS catechization/MS catechize/DGRSZ catheterization/MS catheterize/S Catholicization catholicize/RSZ Catholicized catholicizes/U Catholicizing causticization/MS causticize/RSZ causticizes/A cauterization/MS cavilation caviled caviling/S celestialize/S Celticize/S centerable/MS centerboard centerfold centerless centiliter centrifugalization/MS centrifugalize/S cephalization cerebralization/MS cerebralize/S ceremonialize/S chameleonize/S championize/S channelization/MS channelize/S chattelization/MS chattelize/S cheerfulize/S chemicalization/MS chemicalize/S chiseling/S chloridize/S chlorinize/S chloroformization/MS chloroformize/S chorization/MS Christianization/MS Christianize/RSZ chromatize/S chromicize/S chromize/DGS chronologize/S Ciceronianize/S cinchonize cinematize circularization/MS circularize/DGRSZ citizenize/S civilianization/S civilianize/DGS civilizable/MSU clangor/DGMS classicalize/S classicization classicize/DGS clericalize/SU climatize/S coalize/RSZ cocainization/MS cocainize/S coeducationalize/S coenamor/DGS coequalize/S cognizably cognize/DGRSZ collateralize collectivization/MS collectivize/DS colloquialize/S colonialize/S colonizability/MS colonizable/MS colonizationist/MS colorability/MS colorable/MPSU colorably/SU colorama colorcast/RZ colorfast/P colorific colorism/S colorist/MS coloristic/S coloristically colorization/MS colorize/S colorman colormap/MS colormen columnization/MS commercialize/DGS commonize/S communalization/MS communalize/DGRSZ communization/MS companionize/S compartmentalization/MS compartmentize/S complementizer computerizable concenter concertize/RSZ concretization/S concretize/DGS confederatize/S congenialize/S congregationalize/S conservatize/DGS consonantize/S constitutionalization/MS constitutionalize/S containerization containerize/DGS contemporization contemporize/DGS Continentalize/S controversialize/S conundrumize/S conventionalization/MS conventionalize/GS conventionalizes/U conventionize/S conversationize/S conveyorize/DGS convivialize/S copolymerization/MS copolymerize/DGS copperization/MS copperize/S coraled corbeled corbeling/S cordialize/S Corinthianize/S corporealization/MS corporealize/S cosmopolitanization/MS cosmopolitanize/S cottonization/MS cottonize/S counselee counselorship crawlerize/S creaturize/S crenelate/DNS creneled creneling Creolization Creolize/DGS cretinization/MS cretinize/S criminalization/M criticizable/MSU crofterization/MS crofterize/S cruelize/S crystallizability/MSU crystallizable/MSU Cubanize/S cudgeled cudgeler/S cudgeling/S culturization/MS culturize/S cupelation cupeled cupeler/S cupeling curarize/DGS curatize/S curricularization/MS curricularize/S cutinize/DGS cutization/MS cyclization/MS cyclize/DGS Czechization/MS dandyize/S Danization/MS Danize/S Darwinize/S dastardize/S deaconize/S deaminize decaliter/S decameter/MS decarbonization decarbonize/DGRS decarburization decarburize/DGS decasualization decentralizationist decentralize/S deciliter/S decimalization/MS decimalize/DGS decimeter/MS decolonization decolonize/DGS decolor/DGS decolorization decolorize/DRS decriminalization/M decriminalize deemphasization/M deenergize/DGRS defeminize/DGS defenseman definitization/MS definitize/DGS deflectionization/MS deflectionize/S deformalize defunctionalization/MS defunctionalize/S dehumanization/MS dehypnotization dehypnotize/DGS deindustrialization deindustrialize deionization deionize/S delimitize/S delocalization delocalize deluster demagnetizable/MSU demagnetization/MS demagnetize/DGRSZ demagog dematerialization dematerialize/DGS demilitarization demilitarize/DGS demineralize/DGRS demobilization demobilize/DGS demonetization demonetize/DGS demonization denationalization denationalize/DGS denaturalization denaturalize/DGS denaturization/MS denaturize/RSZ denicotinize denizenize/S denominationalize/SU denormalize dentalization/MS dentalize/S denuclearization denuclearize/DGS deodorize/DGS deoxidizer departmentalization/MS departmentalize/S departmentization/MS departmentize/S depersonalize/GS depolarization/MS depolarize/DGRSZ depoliticization depoliticize/DGS depolymerization depolymerize/DGS depressurization depressurize/DGS deputationize/S deputization deputize/GS derationalization/MS derationalize/S deratization/MS derealization deregulationize/S desalinization desalinize desensitization/MS desensitize/DGRSZ desexualization desexualize/DGS despiritualization despiritualize despotize/S destabilization destalinize/DGS desterilize desulfurization desulfurize/DGS desynchronization detribalization/MS develed develing deviled deviling devilize/S devitalization devitalize/DGS devocalize devolatilization devolatilize/DGS diabolization diabolize/DGS diagonalization diagonalize/S dialecticize/S dialist/S dialyzability/MS dialyzable/MS dialyze/RSZ dialyzer/MS diamondize/S diarrheic diarrhetic dieselization/MS dieselize/S differentialize/S digitalize/DGS dimensionalization dimensionalize/DGS dimerization/MS dimerize/DGS dimethylsulfoxide diminutivize/S diphthongization/MS diphthongize/SU diplomatize/S disangularize/S disauthorize/S disboweled disboweling discanonization/MS discanonize/S discolor/GM discolorization/MS discolorment/MS discretization discretize/DGS disdenominationalize/S disdiplomatize/S disemboweled disemboweling disenamor/MS disenthrall/S disequalize/MRSZ disharmonize/S disheveler disheveling dishonorable/MPS dishonorably/S dishumanize/S dishumor/DS disillusionize/RSZ disindividualize/S disinsectization dismalize/S disnaturalization/MS disnaturalize/S disorganize/GRSZ disozonize/S dispapalize/S dispauperize/S dispersonalize/S dispopularize/S disrealize/S disscepter/MS dissensualize/S dissocialize dissympathize/S disulfate disulfiram disulfuric disutilize/S divinization/MS divinize/DGS dockization/MS dockize/S doctorization/MS doctorize/S doctrinization/MS doctrinize/S documentize/S dogmatization dogmatize/R dognaped dognaping dolomitization/MS dolomitize/S dolor domesticize/S Doricize/S doweled doweler draftboard draftsmanship dragonize/S dramatizable/MSU driveled driveler/S driveling dualization/MS dualize/SU ductilize/S easternize ebonization ebonize/DGS ecclesiasticize/S echoize/S eclecticize/S economization/MS ecstaticize/S Edenization/MS Edenize/S editorialization effectualize/S effeminatize/S egoize/RSZ Egyptianization/MS Egyptianize/S Egyptize/S egyptus elasticization elasticize/DGRSZ electricalize/S electricize/S electroanesthesia/MS electrocauterization/MS electrodialyze/RSZ electrodialyzer/MS electrogalvanize/S electrohomeopathy/MS electrolyze/DGS electromagnetizable/MS electrotonize/S elegize/DGS elementalize/S Elizabethanize/S emblematicize/S emblematization emblematize/DGS emblemize/S embolization emboweled emboweling emotionalization/MS emotionalize/DGS emotionize/S empaneled empaneling empathize/DGS emphasization/AM emulsionize/S enamelist/S enamor/DGMS enamored/MPS enamorment/MS enarbor/MS encarnalization encarnalize/DGS encolor/DGMS energization energize/GRZ Englishize/S engram/MS engrandize/S engrandizement/MS enhypostatize/S enolization/MS enolize/S ensepulcher/MS ensorceled ensorcels enthrallment/MS enthronization/MS enthronize/S entomologize/DGS envapor/MS envenomization Epicurize/S epigrammatization epigrammatize/DGRS Episcopalianize/S epitaphize/S epithetize/S epitomization/MS equestrianize/S ergotized ergotizes eroticization eroticize/DGS Eskimoized/MS esophagus Essenize/S essentialize/S esterization/MS esterize/S esthesia esthesiometer/MS esthesis eternalization/MS eternalize/DGS eternize/DGS etherealization/MS etherealize/DGS etherization/MS etherize/DGRSZ ethicization ethicize/DGS ethnicize/S etiology/MS etymologization etymologize/DGS euhemerize eulogization/MS euphemize/DGRS euphonization euphonize/DGS Europeanize/GS evangelization/MS evangelize/DGRSZ eventualize/S evolutionize/S excursionize/S exhibitionize/S existentialize/S experimentalize/S experimentize/S extemporization/MS exteriorization/MS exteriorize/DGS externalize/DGS facsimilize/S factorize/DGS fanaticize/DGS faradization/MS faradize/DGRSZ fascisticization/MS fascisticize/S fascistization/MS fascistize/DGS fashionize/S fatalize/S favorless/S fecundize/S federalization/MS femalize/S feminization/S feminize/DGS ferreled ferreling ferritization/MS fertilizable/MSU fertilizational/MS fervorless/S fetalization/MS fetishization/MS fetishize/DGS feudalizable/MS feudalization/MS feudalize/DGS fiberization fiberize/DGRSZ fiberizer/MS fiberless/S fibrize/DGRSZ fictionalization fictionalize/DGS fictionization/MS fictionize/S figurize/S filmize/S fiscalization/MS fiscalize/S flamboyantize/S flanneled flanneling flavorful/Y flavorless/S flavorsome flavory Fletcherize/S floralize/S fluidization/MS fluidize/DGRS fluoridization/MS fluoridize/S fluorosulfuric focalization/MS focalize/DGS foreignization/MS foreignize/S formalizable formularization/S formularize/DGRS formulization/S formulize/DGS forumize/S fossiled fossilizable/MS fossilization/MS fossilize/GS fractionalization fractionalize/DGS fractionization/MS fractionize/S fragmentize/DGRS Francize/S Franklinization/MS fraternization/MS Frenchize/S frictionize/S frivoled frivoler frivoling fuelizer/MS functionalize/S functionize/S funeralize/S funneler futilize/S futurize/S Gaelicization/MS Gaelicize/S gallantize/S Gallicization Gallicize/DGS gamboled gamboling gangplow gardenize/S gaveled gaveler gaveling gelatinizability/MS gelatinizable/MSU gelatinization/MS gelatinize/DGRSZ generalizability generalizational genialize/S genteelize/S gentilization/MS gentilize/SU gentlemanize/SU geologize/DGS geometricize/S geometrize/DGS germanization/MS germanize/GRSZ ghettoization/MS ghettoize/DGS giantize/S gimbaling glacialize/S glamorization/S globalization/S globalize/DGS glottalize/S gluttonize/S glycerinize/S glycerolize/S glycogenize/S gnosticize/RSZ goddize/S goiter/S gonorrhea gonorrheal gorgonize/DGS gormandize/DGRS gospelize/S Gothicize/DGRSZ gourmandize/DGS governmentalize/DGS grammaticize/S grangerize/DGRS granitization/MS granitize/S granulize/S graphitizable graphitization/MS graphitize/S Grecianize/S grecize/DG Greekize/S grueled grueler/S gutturalization/MS gutturalize/DGS gynecocrat gynecocratic gynecologic/S gynecology/MS gyrostabilizer habitualize/S hamletization/MS hamletize/S handseled handseling Hanoverianize/S Hanoverize/S hanseled hanseling harborage/S harborful harborless/S harmonizable/MS Harvardize/S Harveyize/S hatcheled hatcheling Hattize/S hazardize/S heathenization heathenize/DGS heavenize/S Hebraicize/S hebraization/S hebraize/DGS hectoliter hectometer/MS Hegelianize/S Hellenization/S Hellenize/DGS heparinize hepatize/DGS heraldize/S hereticize/S heroinize/S heroization/MS heroize/DGS heroizes/U hiccup/DGMS hirseled hirseling Hispanicization Hispanicize/DGS historicize/DGS Hollywoodize/S homeopathic homeopathically homeopathy/MS homeostasis homeostatic homeotypic hominization hominized homolog homologization homologize/DGRS honorability/MS honorableship/MS honorless/S hoodlumize/S hooliganize/S Hoosierize/S Hooverize/S horizontalization/MS horizontalize/S hormonize/S horrorize/S hostilize/S hotelization/MS hotelize/S houseled/U houseling/S hoveled hoveler/S hoveling hucksterize/S humanitarianize/S humanization/MS humoral humorize/S humorless/PS humorsome hurricanize/S hyalinization/MS hyalinize/S hybridizable/MS hybridization/MS hybridize/DGRSZ hybridizes/A hydrogenization/MS hydrogenize/DGS hydrolyzable/MS hydrolyze/MS hydrosulfate hydrosulfide hydrosulfite hydrosulfurous hydroxylization/MS hydroxylize/S hygienization/MS hygienize/S hyperbolize/DGS hypercatharsises hypercivilization/MS hypercivilized/MS hypercriticize/S hyperemphasize/S hyperesthesia hyperesthetic hyperimmunization/MS hyperimmunize/S hyperinsulinization/MS hyperinsulinize/S hyperoxygenize/S hyperparasitize/S hyperrealize/S hypersensitization/MS hypersensitize/DGS hyperspiritualizing/MS hyperthyroidization/MS hyperthyroidize/S hypervitalization/MS hypervitalize/S hyphenization/MS hyphenize/S hypnotizability/MS hypnotizable/MSU hypnotization/MS hypocenter hyposensitization hyposensitize hypostatization/MS hypostatize/S hyposulfite hyposulfurous hysterectomize/DGS ichneumonized/MS idiotize/S idolatrize/DGS idolization/MS Iliadize/S illegalization illegalize/DGS illegitimatize/S Illuminize/S immaterialization immaterialize/DGS immobilization/MS immoralize/S immortalizable/MS immortalization/MS immortalize/GRSZ immortalizes/U immunize/DGS impactionize/S impaneled impaneling imperialization/MS imperialize/S imperiling impersonalization/MS impersonalize/GS individualization/MS indraft industrialize/S inferiorize/S infernalize/S infidelize/S infinitize/S informalize inhumanize initializable/U insolubilize institutionize/S instrumentalize/S insularize/S insurrectionize/S integralization/MS integralize/S intellectualization/MS intellectualize/DGRSZ intercivilization/MS intercolonization/MS intercrystallization/MS intercrystallize/S interhybridize/S interiorization interiorize/DGS interjectionalize/S interjectionize/S internationalize/GS interorganizational intraorganization/MS iodization iodize/DGRSZ Ionicization/MS Ionicize/S ionizable/MS ionization/MS ionization's/U ionizations/U Iranize/S Irishize/S ironize/S irrationalize/S irregularize/S Islamization/MS Islamize/DGS isochronization isochronize/DGS isoimmunization/MS isoimmunize/S isomerization/MS isomerize/DGS isomerizeparabolization Israelitize/S Italianization/MS Italianize/DGRSZ italicization/MS Jacobinize Japanization/MS Japanize/DGS jargonization/MS jargonize/DGS jasperize/S jeopardization Jesuitize/DGS jewelery/S jobcenter/S Jonathanization/MS journalization/MS jovialize/S judicialize/S juvenilize/S kaolinization/MS kaolinize/S kenneled/U kenneling/U keratinization keratinize/DGS kerneled kerneling ketonization/MS ketonize/S kiloliter/MS kinesthesia kyanize/DGS labelable labialization/MS labialize/DGS labializes/U labilization/MS labilize/S laborability/MS laborable/MSU laborhood/MS laborism/MS laborist/MS laborite/MS laborless/S laconize/DGS lactonized laicization/S laicize/DGS lapeled latentize/S lateralization/MS lateralize/S laterization/MS Latinization/MS Latinize/DGRSZ laureling leatherize/S legitimatize/DGS legitimization/MS lethalize/S leukemia lexiconize/S libelant/S libeled libelee/S libeling libelist licenseless/S lichenization/MS lichenize/S lignitize/S Lilliputianize/S linearization/MS linenize/RSZ lingualize/S lionizable/MS lionization/MS liquidization liquidize/DGRSZ Listerize/S literalization/MS literalize/DRSZ lithographize/S localizable/MSU logicalization/MS logicalize/S logicize/DGS logorrhea/MS Londonization/MS Londonize/S louver/DS loyalize/S lumbarization/MS lunatize/S lusterless lusterware luteinization luteinize Lutheranize/RSZ lyophilization lyophilize/DR lyricize/DGS lysogenization lysogenize macadamization macadamize/DGS macarize/DGS machinization/MS machinize/S magicalize/S magnetizability/MS magnetizable/MS magnetize/GRSZ magnetizes/A mahoganize/DGS majorize/S Malayize/S malleablize/S malodor mandarinize/S Manhattanize/S mannerize/S marbleize/S marginalization marginalize/DGS marsupialization/MS marsupialize/S martialization/MS martialize/S martyrization/MS martyrize/DGRSZ marveler masculinization/MS masculinize/DGS materialization/MS maternalize/S mathematicize/S mathematization matronize/DGS maudlinize/S mechanicalization/MS mechanicalize/S mechanizable medalist/S medalize/S medialization/MS medialize/S mediatization/MS mediatize/DGS medievalize/S Mediterraneanization/MS Mediterraneanize/S mediumization/MS mediumize/S melanization melanize/DGS melodization melodize/DGRS melodramatization melodramatize/DGS memorialization/MS memorialize/GRSZ memorizable/MS Mendelize/S mentalization/MS mentalize/S mercerization/MS mercerize/DGRSZ mercurialization/MS mercurialize/S mesmerizability/MS mesmerizable/MS mesmerization/MS mesmerize/GRSZ mesmerizes/U metabolizable/MS metabolize/GS metacenter/S metalize/DGS metallicize/S metamerization/MS metamerized/MS metaphonize/S metaphorize/S metaphysicize/S metastasize/DGS meteorization/MS meteorize/S methodization/MS methodize/DGRSZ metricize/DGS metropolitanize/S Mexicanize/S microliter/MS micromillimeter/MS microminiaturization microminiaturize/DGRSZ micronization/MS micronize/S micropolarization/MS microscopize/S Midlandize/S militarization/S militarize/DGS millionize/S Miltonize/DGS mineralizable/MS mineralization/AMS mineralize/GRSZ mineralizes/A miraculize/DGS mirrorize/S misalphabetize/S misanthropize/DGS misauthorization/MS misauthorize/S misbaptize/S miscanonize/S miscolor/DGMS misemphasization misemphasize/DGS misendeavor/MS mislabeled mislabeling mislabor/DGMS misorganization/MS misorganize/S misrealize/S misrecognize/S missionarize/S missionization missionize/DGRSZ mobilizable/MS modalize/S modernizable/MS Mohammedanization/MS Mohammedanize/DGS moisturization moisturize/DGRSZ molarization/S Molochize/S monarchize/RSZ monasticize/S mongrelization/S mongrelize/DGRS monochordize/S monologize/DGS monometalism monometalist monopolizable/MS monotonize/S monumentalization/MS monumentalize/DGS moralization/MS moralize/DGRSZ moralizing/Y moralizingly/S Moravianized/MS morbidize/S morphinization/MS morphinize/S morseled morseling morselization/MS morselize/S mortalize/S mortarize/S Moslemize/S motorization/MS multifibered/MS municipalization/MS municipalize/DGRSZ muscularize/S museumize/S musicalization/MS musicalize/S mutualization/MS mutualize/DGS myelinization/MS mysticize/SU mythicization mythicize/DGRSZ mythize/S mythologization mythologize/DGRS nakedize/S nanometer/MS Napoleonize/S narcotization narcotize/DG nasalize/GS naturalize/GRSZ naturalizes/U naturize/S nebularization/MS nebularize/S nebulization/S nebulize/DGRS necrotize/DGS nectarize/S Negroization/MS Negroize/S neighborless/S neighborlike/MSU neighborship/MS neologization neologize/DGS neuroticize/S Newmanize/S newspaperized/MS nickelization/MS nickelize/S nicotinize/S nightingalize/S Nipponize/S niter nitridization/MS nitridize/S nitrogenization/MS nitrogenize/DGS nodulize/S nomadization/MS nomadize/DGS nominalize/GS nonanesthetized nonapostatizing/MS noncanonization/MS noncartelized/MS noncatechizable/MS noncivilized/MS noncoloring/MS noncrystallizable/MS noncrystallized/MS noncrystallizing/MS nondefense/MS nondemobilization/MS nondialyzing/MS nondimensionalize/D nonfavorite/MS nonfulfillment/MS nongalvanized/MS nongelatinizing/MS nonhydrolyzable/MS nonimmunized/MS nonionized/MS nonionizing/MS nonlocalized/MS nonmagnetizable/MS nonnitrogenized/MS nonorganization/MS nonoxidizable/MS nonoxidizing/MS nonparlor/MS nonpenalized/MS nonphosphorized/MS nonpolarizable/MS nonpolarized nonpolarizing/MS nonrationalized/MS nonrealization/MS nonrecognized/MS nonschematized/MS nonsensitized/MS nonspecialized/MS nonstandardized/MS nonstylized/MS nonsympathizer/MS nonsynthesized/MS nontemporizing/MS nonutilized/MS nonvisualized/MS nonvolatilized/MS nonvulcanizable/MS normalizable Normanization/MS Normanize/DGRSZ northernize/S nosize notarization/S nothingize/S nounize/S novelization/MS novelize/GRSZ nuptialize/S obelize/DGS objectivize/AS objectization/MS objectize/S oblivionize/S Occidentalization/MS Occidentalize/DGS ocherous odorful odorize/DGRS odorless/S offenseless/SY officialization/MS officialize/S Olympianize/S onionized/MS opaled opalize/S operatize/S optionalize/S oralization/MS oralize/S orangize/S oratorize/S organizability/MS organizationist/AMS orientalization/MS orientalize/DGS orientization/MS orientize/S ornamentalize/S orphanize/S orthocenter orthogonalize/GS orthopedically orthopedist ostracizable/MS ostracization/MS ostracize/GRSZ Ottomanization/MS Ottomanize/S outcaviled outcaviling outclamor/MS outhumor/DGMS outhyperbolize/S outlabor/MS outrivaled outrivaling outsavor/GMS outsplendor/MS outtyrannize/S ovalization/MS ovalize/S ovariectomized overagonize/S overbrutalize/S overcapitalization/MS overcapitalize/DGS overcentralization/MS overcentralize/S overcivilization/MS overcivilize/S overclamor/MS overcolor/MS overcriticize/S overdoctrinize/S overemotionalize/S overemphasization/MS overfavor/MS overfavorable/MS overfavorably/S overfertilization overgeneralize/DGS overhonor/MS overhumanize/S overindustrialization/MS overindustrialize/S overlabor/MS overnationalization/MS overrapturize/S overrationalize/S oversentimentalize/S overspecialization/MS overspecialize/DS oversystematize/S overunionized/MS overurbanization/MS overwomanize/S oxidizability/MS oxidizable/MSU oxidization/MS oxidizement/MS oxygenizable/MS oxygenize/RSZ oxygenizement/MS oxygenizes/A oxysulfide ozonization/MS ozonize/DGRSZ packetization paeanize/S paganization/AMS paganize/DGRSZ paganizer/AS paganizes/AU palatization/MS palatize/S palladiumize/S palletization/S palletize/GRS pamperize/S pamphletize/S panderize/S pantheonization/MS pantheonize/S papalization/MS papalize/RSZ parabolization parabolize/DGS paraffinize/S paragraphize/S paralyzation parasitization parasitize/DGS parathyroidectomize/DGS parceler parchmentize/S parenthesization parfocalization parfocalize Parisianization/MS Parisianize/S parochialization/MS parochialize/S parrotize/S parsonize/S partialize/S particularization/MS partisanize/S pasteurize/DGRS Pasteurizers pastoralize/S pastorize/S paternalize/S patronizable/MSU patronization/MS patternize/S Paulinize/S pauperization/MS pauperize/DGRSZ pavior Paynize/S pearlization pearlize/DGS peasantize/S pectization pectize/DGS peculiarize/S pedagog pedaler/S pedantize/S pedestaled pedestaling pedestrianization pedestrianize/DGS pelletization/S pelletize/DGRS pemmicanization/MS pemmicanize/S penalizable/MS penalization/MS penciler/S peptizable/MS peptization/MS peptize/DRSZ peptonization peptonize/DGS percussionize/S perennialize/S perfectivize/S periled periling periodicalize/S periodization/S periodize/DGS peroxidize/S peroxidizement/MS peroxysulfuric Persianization/MS Persianize/S personization/MS personize/S persulfate persulfuric Peruvianize/S petrolization/MS petrolize/S phagocytize/S phantomize/RSZ phenolization/MS phenolize/S phenomenalization/MS phenomenalize/S philanthropize/S Philistinize/S philosophization/MS phlebotomization phlebotomize/DGS phoneticization/MS phoneticize/S phosphatization/MS phosphatize/DGS phosphorize/AS photocatalyzer/MS photographize/S photoionization/MS photoisomerization/MS photolabeled photolabeler photolabeling photolyzable photolyze/DGS photopolymerization/MS photosensitization/MS photosensitize/DGRSZ photosynthesize/DGS piaster picometer/MS pictorialization/MS pictorialize/DGS picturization/MS picturize/DGS pidginization pidginize/DGS pigmentize/S pilgrimize/S pillarize/S piratize/S pistoled pistoling plagiarization/MS plasmolyze plasticization/MS plasticize/DGRSZ platinization/MS platitudinization platitudinize/DGS platonization platonize/DGS plebeianize/S plowable plowboy/S plowhead plowmen/M plowstaff poeticization poeticize/DGS poetization/MS poetize/DGRSZ pogromize/S polarizability/MS polarizable/MSU polemicize/DGS polemize/DGS policize/RSZ politicalize/S politicization politicize/GRSZ politize/S pollenizer pollinize/DGRS polychromatize/S polychromize/S polygamize/S polymerization/AM polymerize/AS polysulfide polysulfurization/MS pommeled pommeling porcelainization/MS porcelainize/S portionize/S positivize/S posterize/S postsynchronization posturize/S potentialization/MS potentialize/S potentize/S powderization/MS powderize/RSZ practicalization/MS practicalize/RSZ preacherize/S preanesthetic/S prebaptize/S precancelation precisionize/S precivilization/MS precolor/GJMS precolorable/MS preconization/MS preconize/RSZ precriticize/S predefense/MS preemphasization/M preemphasize/DGRSZ prefavor/MS prefavorable/MS prefavorably/S prefavorite/MS prefertilization/MS prefertilize/S preflavor/GJMS pregalvanize/S prehumor/MS prelabor/MS prelatize/S prelocalization/MS preludize/S premonopolize/S preoffense/MS preorganization/MS preorganize/S preoxidize/DGS preprogram prerealization/MS prerealize/S prerecognize/S Presbyterianize/S prespecialize/S presplendor/MS pressurization prestandardization/MS prestandardize/S presympathize/S preutilizable/MS preutilization/MS preutilize/S priorization/S priorize/DGS privatization/A privatize/DG problemize/S processionize/S Procrusteanize/S proctorization/MS proctorize/S prodigalize/S profanize/S professionalization/MS professionalize/DGS professionize/S programist/MS programistic/S proletarianize/GS prologize prologuize/RSZ prolusionize/S propagandize/DGS prophetize/S propositionize/S propretor proselytization/MS protectionize/S Protestantize/S protocoled protocoling protocolization/MS protocolize/S proverbialize/S proverbize/S provincialization/MS provincialize/S Prussianization/MS Prussianize/DGRSZ pseudoanemia/MS pseudoanemic/S pseudoedema/MS pseudographize/S psychoanalyze/RSZ psychoanalyzer/MS psychologization psychologize/DGS puebloization/MS puebloize/S Pullmanize/S pulpitize/S pulverizable/MS pulverization/MS pummeler pummeling pupilize/S puppetize/S Puritanize/RSZ pyorrheal pyramidize/S pyridinize/S pyritization/MS pyritize/S pyrolyzable pyrolyzate pyrosulfate pyrosulfuric Pythagoreanize/S pythonize/S Quakerization/MS Quakerize/S quarrelous quarterization/MS quininize/S racemization racemize/DGS racialization/MS racialize/S radialization/MS radialize/S radicalization/MS radicalize/DGS radicalizes/U radiosterilize/GS radiumization/MS radiumize/S rapturize/S rascalize/S rationalizable/MS raveled raveler/SU raveling/S reacclimatize reactualize realisticize/S reanimalize/S reapologize reauthorize rebaptization/MS rebrutalize recanalization recapitalize recarbonize recausticize/S recentralize reciprocalize/S recivilize recognizee recolonize recolor/GM reconnoiter/DGMRSZ reconnoiterer/MS recriticize refavor/M refertilize reflectorize/DGS reforestization/M reforestize/S regalize/S regalvanize regionalization/MS regionalize/DGS regularization/MS regularize/DRSZ reharmonize rehonor/M rehumanization rehumanize rehybridize/S reinitialization reitemize relativization/MS relativize/DGS religionize/S remagnetize/S rematerialize rememorize remilitarization remilitarize remineralize/S remobilize rencounter renormalization renormalize/G reobjectivization/MS reorganizational reoxidize reoxygenize/S repaganize/RSZ repatronize repersonalize rephosphorization/MS repolymerization/MS reprivatization/MS reprivatize/S republicanization/MS republicanize/DGRSZ repulverize resensitize/S resepulcher resinize/S resolemnize/S restandardize resterilize restigmatize/S resurrectionize/S resymbolize resynchronization resynchronize/G resynthesize retinize/S reutilize revaporize/S revelationize/SU revisualize revivalize/S revolatilize/S revolutionizement/MS rhapsodize/DGS rhythmicize/S rhythmizable/MS rhythmization/MS rhythmize/S ridiculize/S ritualization ritualize/GS rivaless/S rivalize/S robotization/MS robotize/S roentgenize Romanization/MS Romanize/DGRSZ romanticization routinization/MS routinize/S roweled roweling royalization/MS royalize/AS rubberization rubberize/GS rubricize/S ruffianize/S ruggedization ruggedize/DGS rumormonger/MS ruralization/MS ruralize/DGS russianization Russianization's Russianizations russianize Russianized Russianizes Russianizing rusticize/S Sabbathize/S saberlike/MS sabertooth sacralization/MS sacramentize/S sailorizing/MS salinization salinize/S saltpeter/MS sandaled sandaling Sanforized sapientize/S satanize/S satinize/S satirizable/MS savagize/S saviorhood/MS saviorship/MS savorless/S savorous Saxonization/MS Saxonize/S scandaled scandaling scandalization/MS scandalize/RSZ scandalizes/U scenarioization/MS scenarioize/S scenarization/MS scenarize/S scepterless/S schedulize/S schematization/MS schematize/DGRSZ schismatize/DGS sclerotization sclerotized scripturalize/S scrutinization/MS seborrhea seborrheic sectarianization sectarianize/DGS sectarianizes/U sectionalization/MS sectionalize/GS sectionize/S secularize/GRSZ secularizes/U semicarbonize/S semicivilization/MS semicivilized/MS semifossilized/MS semihonor/MS semihumanized/MS semimercerized/MS semimineralized/MS seminarize/S seminationalization/MS semiorganized/MS semioxidized/MS semioxygenized/MS semiprofessionalized/MS Semiticize/S Semitization/MS Semitize/S semivulcanized/MS senilize/S sensitization/AMS sensitize/GRSZ sensitizes/AU sensize/S sensualization/MS sensualize/DGS sentimentalization/MS sentineled sentineling sepaled septicization/MS sepulchralize/S serenize/S sermonize/DGRSZ serpentinization/MS serpentinize/S serpentize/S servilize/S severalize/S severization/MS severize/S sexualization/MS sexualize/S Shakespearize/S shepherdize/S Shintoize/S siderealize/S signalization signalize/DG silicatization/MS silicidize/S siliconize/S silverize/RSZ similarize/S similize/S simonize singularization/MS singularize/S sinicize/DGS sirenize/S sisterize/S skeletonization/MS skeletonize/DGRSZ skepticize/S Slavicize/S Slavization/MS Slavize/S Slavonicize/S slenderize/DGS sloganize/S snobsniveling snowplow soberize/DGS sockdologizing solarization/MS solarize/DGS soldierize/S solecize/DGS solemnization/MS solemnize/DGRSZ solemnizes/AU soliloquization soliloquize/DGJRSZ soliloquizing/MSY solmization solubilization/I solubilize/DGS solutize/RSZ sonantized/MS sonnetize/S southernize/S sovietization/MS sovietize/S Sovietized Sovietizing Spaniardization/MS Spaniardize/S Spanishize/S Spartanize/S spatialization/MS spatialize/S specificize/S specimenize/S specterlike/MSU spheroidize/S spiralization/MS spiralize/S spiritize/S spiritualization/MS spiritualize/DGRSZ spirochetal spirochete/MS spirochetosis splenectomized stabilizable stallionize/S stalwartize/S standardizable/MS stapedectomized statisticize/S stencilize sterilizability/MS sterilizable/MS stigmatize/GRSZ stigmatizes/A strobilization structuralization/MS structuralize/S strychninization/MS strychninize/S stylize/GRSZ subarmor/MS subcenter suberization/MS suberize/DGS subflavor/MS subjectivization subjectivize/S sublimize/S subminiaturization subminiaturize/DGS subpulverizer/MS subsidizable/MS subspecialize/S substandardize/S substantialize/SU substantivize/S subterraneanize/S subtilization/MS subtilize/RSZ subtotaled subtotaling suburbanize/S subvitalized/MS succorable/MSU succorless/S suggestionize/S sulfa sulfadiazine sulfanilamide sulfatase sulfathiazole sulfatide/S sulfatize/S sulfhydryl sulfinyl sulfitic sulfizoxazole sulfonate/DN sulfone sulfonic sulfonium sulfonmethane sulfonyl sulfonylurea sulfoxide sulfurate sulfureous/PY sulfuret sulfuretted sulfurization/MS sulfurize/S sulfuryl sultanize/S summerize/S supercanonization/MS supercarbonization/MS supercarbonize/S supercivilization/MS supercivilized/MS superemphasize/S superficialize/S superhumanize/S supernaturalize/SU superorganization/MS superorganize/S supersensitization/MS superspecialize/S supersubtilized/MS supersulfurize/S surgerize/S sycophantize/S syllogize sylvanize/S symmetrization/MS symmetrize/DGS symptomize/S synagog synchronizable/MS syncretize/DGS syndicalize/S synesthesia/M synesthete/MS synesthetic synonymize/S synopsize synthesization/MS Syrianize/S systemizable/MSU systemize/RSZ taboret/S tabularization/MS tabularize/S taffetized tailorization/MS tailorize/S Talmudization/MS Talmudize/S tambura Tammanyize/S tandemize/S tantalization/MS tariffize/S tartarization/MS tartarize/DS tasseled tasseling tassels tavernize/S Taylorize/S teaseler/S teazeled teazeling technicalization technicalize/SU technologize teetotaled teetotaling telesthesia telesthetic tellurize/DGS templize/S temporalize/DGS temporization/MS tenderization tenderize/DGRS tendriled tenementization/MS tenementize/S terminalization/MS terminalized/MS ternize/S terrestrialize/S territorialization/MS territorialize/S terrorization/MS testimonialization/MS testimonialize/RSZ tetanization tetanize/DGS teutonize texturized theaterless/S theaterlike/MS theatricalization/MS theatricalize/DGS theatricize/S theolog theologization theologize/DGRS thermalization thermalize/DGS thermoanesthesia/MS thermometerize/S thermopolymerization/MS thiosulfate thiosulfuric thronize/S thymectomize thyroidectomized thyroidization/MS Timonize/S tinselier tinseliest tonicize/S torporize/S Toryize/S totalitarianize totalization/MS totalizator totalize/DGRSZ totemization/MS tourize/S tractorization/MS tractorize/S traditionalize/S traditionize/S tragicize/S traitorize/S trammeled trammeler/S trammeling tranquilization/AMS transcendentalize/S transistorization transparentize/S traumatization traumatize/DGS triangularize/DGS trichinize trillionize/S trimerization/MS trisulfide trivialization tropicalization/MS tropicalize/DGS troweled troweling trypsinize/S tuberculinization/MS tuberculinize/S tuberization/MS tuberize/S tubulization/MS Turkize/S Tuscanize/S tutorization/MS tutorize/S Tylerize/S ultracentralizer/MS ultrahonorable/MS ultraspecialization/MS ultrastandardization/MS unagonize unalcoholized/MS unanimalized/MS unantagonizable/MS unapostatized/MS unauthorize unbaptize unbrutalize unbrutize/S uncanonize/S uncantonized/MS uncatechized/MPS uncatholicize/S uncelestialized/MS unchloridized/MS unchristianize/DS uncircularized/MS uncivilize uncolonize unconventionalize/S uncurricularized/MS undemocratize undercapitalization/MS undercapitalize/DGS undercolor/DGJMS underemphasize/DGS underlaborer/MS underorganization/MS underoxidize/S underrealize/S undersavior/MS underutilize undervitalized/MS undiscolored/M unenamored/MS unequalize unevangelized/MS unfavoring/M unfeudalize/DS ungalvanized/MS ungelatinized/MS ungospelized/MS ungraphitized/MS unharbor/DM unharmonize unheroize/S unhonorable/M unhypnotize uniformization/MS uniformize/S unilateralization/MS unilateralize/S unimmortalize/S unindividualize Unitarianize/S unitization unitize/GS universalization/MS unlabialize/S unlaboring/M unlocalize unmechanize unmediatized/MS unmercerized/MS unmesmerize/S unmetalized/MS unmethodized/MS unmethodizing/MS unmissionized/MS unmodernize unmonopolize/GJ unmoralize/DGJS unmunicipalized/MS unmutualized/MS unnaturalizable/MS unnaturalize/S unnitrogenized/MS unnormalize/G unoptimize/G unoxygenized/MS unpaganize/S unparagonized/MS unparalyzed/MS unparticularized/MS unparticularizing/MS unpauperized/MS unphilosophize unphosphatized/MS unplagiarized/MS unpoeticized/MS unpoetize/DS unpolymerized/MS unpopularize unprotestantize/S unpulverize unradicalize/S unrancored/MS unrealizable/MS unrealize/GJ unreconnoitered/MS unromanticized/MS unroyalized/MS unsatirize/D unscandalize/S unscepter/D unschematized/MS unsectarianize/S unsecularize/S unsensitize/S unsensualize/DS unsentimentalize unsepulcher/D unsignalized/MS unsolemnize/DS unspiritualize/DS unstoicize/S unsulfurized/MS unsupernaturalize/DS unsymmetrized/MS unsympathizability/MS unsympathizable/MS untantalizing/MS untartarized/MS untemporizing/M untheorizable/MS unvaporized/MS unvitalized/MS unvitriolized/MS unvolatilize/DS unvulgarize/DS unwesternized/MS unwomanize urbanize/GS utilitarianize/S utilizability/S utilizable/MSU Utopianize/S utopianizer/MS vaccinization/MS vacuumize/DGS vagabondize/RSZ vagrantize/S valorization/AMS valorize/ADGS vampirize/S vandalization/MS vaporability/MS vaporable/MS vaporish/P vaporizable/MS vaporize/DGRSZ vaporizes/A vaporless/S vaporlike/MS vapory/RT vascularization/MS vascularize/DGS vassalization vassalize/DGS Vaticanization/MS Vaticanize/S vectorizable/U vectorize/DRSZ vegetablize/S velarization venalization/MS venalize/S venomization/MS venomize/S ventriloquize/DGS verbalization/MS vermeiled vermeiles vermeiling vermilionize/S vernacularization/MS vernacularize/S vernalization/MS vernalize/DGS versicolor/D versionize/S vestryize/S veteranize/S vialed vialing victimizable/MS victimization/MS Victorianize/S victualage victualed victualess victualing Vietnamization Vietnamize/DGS vigorless visionize/S vitalization/MS vitalization's/A vitalizations/A vitalize/DGJRSZ vitalizing/MSY vitaminization vitaminize/S vitriolizable/MS vitriolization/MS vitriolize/RSZ vocationalization/MS vocationalize/S volatilizable/MS volatilize/DGRSZ volatilizes/AU voltize/S vowelization/MS vowelize/DGS vulcanizable/MS vulcanizate/NX vulcanization/MS vulcanize/GRSZ vulgarization/MS vulgarize/DGRSZ Wagnerize/S weeviled westernization/MS westernize/DGS Whitmanize/S winterization/MS winterize/DGS womanization/MS woodcockize/S woolenization/MS woolenize/S woolie woolybutt zeroize/DGS ispell-3.4.00/languages/english/PaxHeaders.19408/english.00000644000000000000000000000013212466000642017741 xustar0030 mtime=1423442338.451952098 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/english.00000444003214100001440000055765012466000642021030 0ustar00geofffaculty00000000000000aback abaft abandon/DGRS abandonment/S abase/DGRS abasement/S abash/DGS abashed/U abate/DGRS abated/U abatement/S abbe abbey/MS abbot/MS abbreviate/DGNSX abbreviated/AU abdomen/MS abdominal/Y abduct/DGS abduction/MS abductor/MS abed aberrant/Y aberration/S abet/S abetted abetter abetting abettor abeyance abhor/S abhorred abhorrent/Y abhorrer abhorring abide/DGRS abiding/Y abilities/I ability/MS abject/PY abjection/S abjure/DGRS ablate/DGNSV ablative/Y ablaze able/RT ablution/S ably abnormal/Y abnormality/S aboard abode/MS abolish/DGRSZ abolishment/MS abolition abolitionist/S abominable aboriginal/Y aborigine/MS abort/DGRSV abortion/MS abortive/PY abound/DGS about above aboveground abrade/DGRS abrasion/MS abreaction/MS abreast abridge/DGRS abridged/U abridgment abroad abrogate/DGNS abrupt/PY abscess/DS abscissa/MS abscond/DGRS absence/MS absent/DGSY absentee/MS absenteeism absentia absentminded/PY absinthe absolute/NPSY absolve/DGRS absorb/DGRS absorbency absorbent/MS absorbing/Y absorption/MS absorptive abstain/DGRS abstention/S abstinence abstract/DGPRSVY abstracted/PY abstraction/MS abstractionism abstractionist/S abstractor/MS abstruse/PY abstruseness/S absurd/PY absurdity/MS abundance/S abundant/Y abuse/DGRSVZ abusive/PY abut/S abutment/S abutted abutter/MS abutting abysmal/Y abyss/MS acacia academia academic/S academically academy/MS accede/DGS accelerate/DGNSVX accelerated/U accelerating/Y accelerator/S accelerometer/MS accent/DGS accentual/Y accentuate/DGNS accept/DGRSVZ acceptability/U acceptable/P acceptably/U acceptance/MS accepted/Y accepting/PY acceptor/MS access/DGS accessibility/I accessible/IU accessibly/I accession/MS accessory/MS accident/MSY accidental/PY acclaim/DGRS acclamation acclimate/DGNS accolade/S accommodate/DGNSVX accommodated/U accommodating/Y accommodative/P accompanied/U accompaniment/MS accompanist/MS accompany/DGRS accomplice/S accomplish/DGRSZ accomplished/U accomplishment/MS accord/DGRSZ accordance/S according/Y accordion/MS accost/DGS account/DGJS accountability/S accountable/P accountably/U accountancy accountant/MS accounted/U accredit/D accreditation/S accretion/MS accrue/DGS acculturate/DGNSV accumulate/DGNSVX accumulative/PY accumulator/MS accuracy/IS accurate/PY accurately/I accursed/PY accusal accusation/MS accusative accuse/DGRSZ accusing/Y accustom/DGS accustomed/P ace/DGMRS acetate acetone acetylene ache/DGS achievable/U achieve/DGRSZ achieved/U achievement/MS Achilles aching/Y acid/PSY acidic acidity/S acidulous acknowledge/DGRSZ acknowledged/Y acknowledgment/AMS ACM acme acne/D acolyte/S acorn/MS acoustic/S acoustical/Y acoustician acquaint/DGS acquaintance/MS acquainted/AU acquiesce/DGS acquiescence acquirable acquire/ADGS acquisition/MS acquisitiveness acquit/S acquittal/S acquitted acquitter acquitting acre/MS acreage acrid/PY acrimonious/Y acrimony acrobat/MS acrobatic/S acronym/MS acropolis across acrylic act/DGMSV actinium actinometer/MS action/AMS actions/AI activate/DGNSX activation/AI activator/MS active/APY actively/AI activism activist/MS activity/MS actor/AMS actress/MS actual/SY actuality/S actuarial/Y actuate/DGNSX actuation/MS actuator/MS acuity acumen acute/PRTY acyclic acyclically ad/AS Ada/M adage/S adagio/S adamant/Y adapt/DGRSVZ adaptability adaptable/U adaptation/MS adaptation's/A adapted/AU adaptedness adapting/A adaption adaptive/PY adaptor/S add/DGRSZ addenda addendum addict/DGSV addiction/MS addition/MS additional/Y additive/MSY additivity address/DGRSZ addressability addressable addressed/U addressee/MS adduce/DGRS adduct/DGSV adduction adductor adept/PSY adequacy/IS adequate/IPY adhere/DGRSZ adherence/S adherent/MSY adhesion/S adhesive/MPSY adiabatic adiabatically adieu adjacency adjacent/Y adjective/MSY adjoin/DGS adjourn/DGS adjournment adjudge/DGS adjudicate/DGNSVX adjudication/MS adjunct/MSVY adjure/DGS adjust/DGRSVZ adjustable/AU adjustably adjusted/AU adjustment/MS adjustments/A adjustor/MS adjusts/A adjutant/S administer/DGJS administration/MS administrative/Y administrator/MS admirable/P admirably admiral/MS admiralty admiration/S admire/DGRSZ admiring/Y admissibility/I admissible/I admission/MS admit/S admittance admitted/Y admitting admix/DS admixture admonish/DGRS admonishing/Y admonishment/MS admonition/MS ado adobe adolescence adolescent/MSY adopt/DGRSVZ adopted/U adoption/MS adoptive/Y adorable/P adoration adore/DGRS adorn/DGS adorned/U adornment/MS adrenal/Y adrenaline adrift adroit/PY adsorb/DGS adsorption adulate/GNX adult/MPSY adulterate/DGNS adulterated/U adulterer/MS adulterous/Y adultery adulthood adumbrate/DGNSV adumbrative/Y advance/DGRSZ advancement/MS advantage/DGS advantageous/PY advent/V adventist/S adventitious/PY adventive/Y adventure/DGRSZ adventurous/PY adverb/MS adverbial/Y adversary/MS adverse/DGSY adversity/S advertise/DGRSZ advertised/U advertisement/MS advice advisability/I advisable/P advisably advise/DGRSZ advised/UY advisee/MS advisement/S adviser/MS advisor/MS advisory advocacy advocate/DGNSV aegis aerate/DGNS aerator/S aerial/MSY aeroacoustic aerobic/S aerodynamic/S aerofoil/S aeronautic/S aeronautical/Y aeroplane/MS aerosol/S aerospace afar/S affable affair/MS affect/DGRSV affectation/MS affected/PUY affecting/Y affection/DMS affectionate/UY affective/Y afferent/Y affianced affidavit/MS affiliate/DGNSX affiliated/U affinity/MS affirm/ADGS affirmation/MS affirmative/Y affix/DGS afflict/DGSV affliction/MS afflictive/Y affluence affluent/Y afford/DGS affordable affricate/NSV affright affront/DGS afghan/S Afghanistan/M aficionado/MS afield afire aflame afloat afoot afore aforementioned aforesaid aforethought afoul afraid/U afresh Africa/M African/MS aft/RZ aftereffect/S aftermath aftermost afternoon/MS aftershock/MS afterthought/S afterward/S again against agape agar agate/S age/DGRSZ aged/PY ageless/PY agency/MS agenda/MS agent/MSV agents/A agglomerate/DNSV agglutinate/DGNSV agglutinin/S aggravate/DGNSX aggregate/DGNPSVXY aggregated/U aggregative/Y aggression/MS aggressive/PY aggressor/S aggrieve/DGS aggrieved/Y aghast agile/Y agility agitate/DGNSVX agitated/Y agitator/MS agleam aglow agnostic/MS ago agog agony/S agrarian agree/DRSZ agreeable/P agreeably agreeing agreement/MS agricultural/Y agriculture ague ah ahead aid/DGRS aide/DGRS aided/U ail/DGS aileron/S ailment/MS aim/DGRSZ aimless/PY air/DGJRSZ airbag/MS airborne aircraft/S airdrop/S Airedale/MS airfield/MS airflow airfoil/S airframe/MS airhead airless/P airlift/MS airline/MRSZ airliner/MS airlock/MS airmail/S airman airmen airplane/MS airport/MS airship/MS airspace airspeed/S airstrip/MS airway/MS airy/PRTY aisle/S ajar akimbo akin Alabama/M Alabamian/M alabaster alacrity alarm/DGS alarming/Y alarmist alas Alaska/M alba albacore Albania/M Albanian/MS albeit album/NS albumin alchemy Alcibiades alcohol/MS alcoholic/MS alcoholism/S alcove/DMS Alden/M alder alderman/M aldermen ale/V alee alert/DGPRSYZ alerted/Y Alex/M alfalfa alfresco alga algae algaecide algebra/MS algebraic algebraically Algeria/M Algerian/M alginate/S Algol/M algorithm/MS algorithmic algorithmically alias/DGS alibi/MS Alice/M alien/MS alienate/DGNS alight/DGS align/DGRS aligned/AU alignment/AS alike/P aliment/S alimony alive/P alkali/MS alkaline alkaloid/MS alkyl all Allah/M allay/DGS allegation/MS allege/DGS alleged/Y allegiance/MS allegoric allegorical/PY allegory/MS allegretto/MS allegro/MS allele/S allemande allergic allergy/MS alleviate/DGNSV alleviator/MS alley/MS alleyway/MS alliance/MS alligator/DMS alliteration/MS alliterative/Y allocate/ADGNSVX allocated/AU allocation/AMS allocator/AMS allophone/S allophonic allot/AS allotment/MS allotments/A allotted/A allotter allotting/A allow/DGS allowable/P allowably allowance/DGMS allowed/Y alloy/DGMS alloyed/U allude/DGS allure/DGS allurement allusion/MS allusive/PY ally/DGRS alma almanac/MS almighty/P almond/MS almoner almost alms/A almsman alnico aloe/S aloft aloha alone/P along alongside aloof/PY aloud alpha alphabet/MS alphabetic/S alphabetical/Y alphanumeric/S alpine Alps already also altar/MS alter/DGRSZ alterable/IU alteration/MS altercation/MS altered/U alternate/DGNSVXY alternative/PSY alternator/MS although altitude/S alto/MS altogether altruism altruist/S altruistic altruistically alum alumna/M alumnae alumni alumnus alundum alveolar/Y alveoli alveolus always Alyssa/M am/N amain amalgam/MS amalgamate/DGNSVX Amanda/M amanuensis amass/DGRS amateur/MS amateurish/PY amateurism amatory amaze/DGRSZ amazed/Y amazement amazing/Y amazon/MS ambassador/MS amber ambiance/S ambidextrous/Y ambient ambiguity/MS ambiguous/PY ambiguously/U ambition/MS ambitious/PY ambivalence ambivalent/Y amble/DGRS ambrosial/Y ambulance/MS ambulatory/Y ambuscade/R ambush/DRS Amdahl/M Amelia/M ameliorate/DGNV amenable amend/DGRS amendment/MS amenity/S America/MS American/MS Americana americium Ames amiable/PRT amicable/P amicably amid amide amidst amigo amino amiss amity ammo ammonia/S ammoniac ammonium ammunition/S amnesty amoeba/MS amok among amongst amoral/Y amorality amorist/MS amorous/PY amorphous/PY amount/DGRSZ amour/MS amp/SY ampere/S ampersand/MS amphetamine/S amphibian/MS amphibious/PY amphibology ample/PRT amplify/DGNRSXZ amplitude/MS ampoule/MS amputate/DGNS Amsterdam/M Amtrak/M amulet/S amuse/DGRSVZ amused/Y amusement/MS amusing/PY amyl an Anabaptist/MS anachronism/MS anachronistically anaconda/S anaerobic anagram/MS anal/Y analogical/Y analogous/PY analogy/MS analyses analysis/A analyst/MS analytic/S analytical/Y analyticity/S anaphora anaphoric anaphorically anaplasmosis anarchic anarchical anarchist/MS anarchy anastomoses anastomosis anastomotic anathema anatomic anatomical/SY anatomy ancestor/MS ancestral/Y ancestry anchor/DGS anchorage/MS anchored/U anchorite anchoritism anchovy/S ancient/PSY ancillary/S and/DGSZ Andorra/M anecdotal/Y anecdote/MS anechoic anemometer/MS anemometry anemone/S anew angel/MS Angela/M Angeleno/MS angelic anger/DGS angiography angle/DGRSZ Anglican/MS Anglicanism/M Anglophilia/M Anglophobia/M Angola/M angry/PRTY angst angstrom/S anguish/D angular/Y anhydrous/Y aniline animal/MPSY animate/DGNPSXY animated/Y animator/MS animism animosity anion/MS anionic/S anise aniseikonic anisotropic anisotropy/MS ankle/MS annal/NS annex/DGS annexation/S Annie/M annihilate/DGNSV anniversary/MS annotate/DGNSVX announce/DGRSZ announced/U announcement/MS annoy/DGRSZ annoyance/MS annoying/Y annual/SY annul/S annulled annulling annulment/MS annum annunciate/DGNS annunciator/S anode/MS anoint/DGRS anomalous/PY anomaly/MS anomic anomie anon anonymity anonymous/PY anorexia another/M ANSI answer/DGRSZ answerable/U answered/U ant/DGMS antagonism/S antagonist/MS antagonistic antagonistically antarctic Antarctica/M ante/DG anteater/MS antecedent/MSY antedate/DGS antelope/MS antenna/MS antennae anterior/SY anthem/MS anther anthology/S anthracite anthropological/Y anthropologist/MS anthropology anthropomorphic anthropomorphically anti antibacterial antibiotic/S antibody/S antic/MS anticipate/DGNSVX anticipated/U anticipative/Y anticipatory anticoagulation anticompetitive antidisestablishmentarianism antidote/MS antiformant antifundamentalist antigen/MS antihistorical antimicrobial antimony antinomian antinomy antipathy antiphonal/Y antipode/MS antiquarian/MS antiquate/DN antique/MS antiquity/S antiredeposition antiresonance antiresonator antiseptic antisera antiserum antislavery antisocial/Y antisubmarine antisymmetric antisymmetry antithesis antithetical/Y antithyroid antitoxin/MS antitrust/R antler/D anus anvil/MS anxiety/S anxious/PY any anybody/MS anyhow anymore anyone/MS anyplace anything/S anyway/S anywhere/S aorta apace apart/P apartheid apartment/MS apathetic apathy ape/DGRS aperiodic aperiodicity aperture/D apex/S aphasia aphasic aphid/MS aphonic aphorism/MS Aphrodite/M apiary/S apical/Y apiece apish/PY aplenty aplomb apocalypse apocalyptic apocrypha apocryphal/PY apogee/S Apollo/M Apollonian apologetic/S apologetically/U apologia apologist/MS apology/MS apostate/S apostle/MS apostolic apostrophe/S apothecary apotheoses apotheosis Appalachia/M Appalachian/MS appalled appalling/Y appanage apparatus/S apparel/S apparent/PY apparently/I apparition/MS appeal/DGRSZ appealing/UY appear/DGRSZ appearance/S appease/DGRS appeasement appellant/MS appellate/NV appellative/Y append/DGRSZ appendage/MS appendices appendicitis appendix/MS appertain/DGS appetite/MSV applaud/DGRS applause apple/MS applejack appliance/MS applicability/I applicable/I applicant/MS application/MS applicative/Y applicator/MS applique/S apply/DGNRSXZ applying/A appoint/DGRSVZ appointee/MS appointment/MS appointment's/A apportion/DGS apportioned/A apportionment/S appraisal/MS appraisals/A appraise/DGRSZ appraised/A appraises/A appraising/Y appreciable/I appreciably/I appreciate/DGNSVX appreciated/U appreciative/IPY apprehend/DGRS apprehensible apprehension/MS apprehensive/PY apprentice/DS apprenticeship/S apprise/DGJRSZ apprize/DGJRSZ apprizing/SY approach/DGMRSZ approachability/U approachable/IU approbate/N appropriate/DGNPSTVXY appropriated/U appropriator/MS approval/MS approve/DGRSZ approving/Y approximate/DGNSVXY approximative/Y appurtenance/S apricot/MS April/MS apron/MS apropos apse/S apsis apt/IPUY aptitude/S aqua/S aquaria aquarium Aquarius aquatic/S aqueduct/MS aqueous/Y aquifer/S Arab/MS arabesque Arabia/M Arabian/MS Arabic/M arable arachnid/MS arbiter/MS arbitrary/PY arbitrate/DGNSV arbitrator/MS arboreal/Y arc/DGS arcade/DGMS arcane arch/DGPRSVYZ archaeological/Y archaeologist/MS archaeology archaic/P archaically archaism archangel/MS archbishop archdiocese/S archenemy archer/MS archery archetype/S archfool Archie/M archipelago archipelagoes architect/MS architectonic/S architectural/Y architecture/MS archival archive/DGRSZ archivist/S arclike arctic ardent/Y arduous/PY are/S area/MS aren't arena/MS Argentina/M Argo/MS argon argonaut/S argot arguable/IU arguably/IU argue/DGRSZ argument/MS argumentation argumentative/Y Arianism/M Arianist/MS arid/P aridity Aries aright arise/GJRS arisen aristocracy aristocrat/MS aristocratic aristocratically Aristotelian/M Aristotle/M arithmetic/S arithmetical/Y Arizona/M ark Arkansas/M arm/DGMRSZ armadillo/S Armageddon/M armament/MS armchair/MS armed/AU Armenian/M armful/S armhole armistice armload armpit/MS arms/A Armstrong/M army/MS aroma/S aromatic/P arose around arousal arouse/DGS arpeggio/MS arrack arraign/DGS arraignment/MS arrange/DGRSZ arrangement/AMS arrant/Y array/DGRS arrears arrest/DGRSZ arrested/A arresting/Y arrestor/MS arrival/MS arrive/DGRS arrogance arrogant/Y arrogate/DGNS arrow/DGS arrowhead/MS arroyo/S arsenal/MS arsenic arsine/S arson art/MS Artemis arterial/Y arteriolar arteriole/MS arteriosclerosis artery/MS artful/PY arthritis arthrogram/MS arthropod/MS artichoke/MS article/DGMS articulate/DGNPSVXY articulated/U articulator/S articulatory artifact/MS artifice/RS artificial/PY artificiality/S artillerist artillery/S artisan/MS artist/MS artistic/I artistically/I artistry artless/Y artwork/MS Aryan/MS as ASAP asbestos ascend/DGRSZ ascendancy ascendant/Y ascendency ascendent ascension/S ascent ascertain/DGS ascertainable ascetic/MS asceticism ASCII ascot ascribable ascribe/DGS ascription aseptic ash/NRS ashamed/UY ashman ashore ashtray/MS Asia/M Asian/MS Asiatic/MS aside/S asinine/Y ask/DGRSZ askance asked/U askew/P asleep asocial asp/NR asparagus aspect/MS aspersion/MS asphalt/D asphyxia aspic aspirant/MS aspirate/DGNSX aspiration/MS aspirator/S aspire/DGRS aspirin/S ass/MS assail/DGS assailant/MS assassin/MS assassinate/DGNSX assault/DGRSV assaultive/PY assay/DGRZ assemblage/MS assemble/DGRSZ assembled/AU assembly/MS assent/DGRS assert/DGRSVZ assertion/MS assertive/PY asserts/A assess/ADGS assessment/AMS assessor/MS asset/MS assiduity assiduous/PY assign/DGRSZ assignable/A assigned/AU assignee/MS assignment/AMS assigns/AU assimilate/DGNSVX assist/DGRS assistance/S assistant/MS assistantship/S assisted/U associate/DGNSVX association/MS associational associative/Y associativity/S associator/MS assonance assonant assort/DGRS assortment/MS assuage/DGS assume/DGRS assumption/MS assurance/MS assurances/A assure/DGRSZ assured/PY assuring/AY Assyrian/M Assyriology/M astatine aster/MS asterisk/MS asteroid/MS asteroidal asthma astonish/DGS astonishing/Y astonishment astound/DGS astounding/Y astral/Y astray astride astringency astringent/Y astronaut/MS astronautics astronomer/MS astronomical/Y astronomy astrophysical astrophysics astute/PY asunder asylum/S asymmetric asymmetrical/Y asymmetry/S asymptomatically asymptote/MS asymptotic asymptotically asynchronism asynchronous/Y asynchrony at atavistic ate atemporal atheism atheist/MS atheistic Athena/M Athenian/MS Athens atherosclerosis athlete/MS athletic/S athleticism Atlantic/M atlas ATM ATM's atmosphere/DMS atmospheric/S atoll/MS atom/MS atomic/S atomically atonal/Y atone/DGS atonement atop atrocious/PY atrocity/MS atrophic atrophy/DGS attach/DGRSZ attache/DGRSZ attached/U attachment/MS attack/DGRSZ attackable attacker/MS attain/DGRSZ attainable/P attainably attainment/MS attempt/DGRSZ attend/DGRSZ attendance/MS attendant/MS attended/U attendee/MS attention/MS attentional attentionality attentive/IPY attenuate/DGNS attenuated/U attenuator/MS attest/DGRS attic/MS attire/DGS attitude/MS attitudinal/Y attorney/MS attract/DGSV attraction/MS attractive/PUY attractor/MS attributable attribute/DGNRSVX attributed/U attributive/Y attrition attune/DGS atypical/Y auburn Auckland/M auction/DGMS auctioneer/MS audacious/PY audacity audible/I audibly/I audience/MS audio audiogram/MS audiological audiologist/MS audiology audiometer/MS audiometric audiometry audit/DGSV audition/DGMS auditor/MS auditorium/S auditory Audubon/M auger/MS aught augment/DGRS augmentation/S augur/S august/PY Augusta/M Augusts aunt/MSY aura/MS aural/Y aureole aureomycin aurora auscultate/DGNSX auspice/S auspicious/IPY austere/PY austerity Austin/M Australia/M Australian/MS Austria/M Austrian/M authentic/IU authentically authenticate/DGNSX authenticated/U authenticator/S authenticity/I author/DGMS authoritarian authoritarianism authoritative/PY authority/MS authorship autism autistic auto/MS autobiographic autobiographical/Y autobiography/MS autocollimator autocorrelate/DGNSX autocracy/S autocrat/MS autocratic autocratically autodial autofluorescence autofocus/DGRS autograph/DGS automata automate/DGNS automatic/S automatically automaton/S automobile/MS automotive autonavigator/MS autonomic autonomous/Y autonomy autopilot/MS autopsy/DS autoregressive autorepeat/GS autosuggestibility autotransformer autumn/MS autumnal/Y auxiliary/S avail/DGRSZ availability/S available/P availably avalanche/DGS avant avarice avaricious/PY Ave avenge/DGRS avenue/MS aver/S average/DGPSY averred averrer averring avers/V averse/NPVXY aversion/MS avert/DGS avian aviary/S aviation aviator/MS avid/PY avidity avionic/S avocado/S avocation/MS avoid/DGRSZ avoidable/U avoidably/U avoidance avouch avow/DRS avowed/Y await/DGS awake/DGS awaken/DGRS award/DGRSZ aware/PU awash away/P awe/DG awesome/PY awful/PY awhile/S awkward/PY awl/MS awning/DMS awoke awry ax/DGRSZ axe/DGNRSXZ axial/Y axiological/Y axiom/MS axiomatic/S axiomatically axion/MS axis axle/MS axolotl/MS axon/MS aye/RSZ azalea/MS azimuth/MS azure babble/DGRS babe/MS Babel/M baby/DGMS babyhood babyish babysit/S babysitter/S baccalaureate Bach/M bachelor/MS bacilli bacillus back/DGRSZ backache/MS backbone/MS backdrop/MS backed/U background/MS backlash/R backlog/MS backpack/DGMRSZ backplane/MS backscatter/DGS backslash/DGS backspace/DGS backstabber backstabbing backstage backstairs backstitch/DGS backtrack/DGRSZ backup/S backward/PSY backwater/MS backwoods backyard/MS bacon/R bacteria bacterial/Y bacterium bad/PSY bade Baden/M badge/DGMRSZ badger/DGMS badlands badminton baffle/DGRSZ baffling/Y bag/MS bagatelle/MS bagel/MS baggage bagged bagger/MS bagging baggy/PRSY bagpipe/MRS Bagrodia/MS bah bail/DGRSY Bailey/MS bailiff/MS bait/DGRS bake/DGJRSZ baker/MS bakery/MS baklava balalaika/MS balance/DGRSZ balanced/PU balcony/DMS bald/GPRY bale/DGRSZ baleful/PY balk/DGRS Balkan/MS balky/PR ball/DGRSZ ballad/MS ballast/MS ballerina/MS ballet/MS ballistic/S balloon/DGRSZ ballot/DGMRS ballplayer/MS ballroom/MS ballyhoo/DGS balm/MS balmy/PRY balsa balsam/S Baltic/M balustrade/MS bamboo/S ban/GMS banal/Y banana/MS band/DGRS bandage/DGRS bandit/MS bandpass bandstand/MS bandwagon/MS bandwidth/S bandy/DGS bane/G baneful/Y bang/DGRS Bangladesh/M bangle/MS banish/DGRS banishment banister/MS banjo/MS bank/DGMRSZ bankrupt/DGS bankruptcy/MS banned/U banner/MS banning/U banquet/DGJRS bans/U banshee/MS bantam banter/DGRS bantering/Y Bantu/MS baptism/MS baptismal/Y baptist/MS baptistery baptistry/MS bar/DGMRST barb/DRSZ Barbados barbarian/MS barbaric barbarity/S barbarous/PY barbecue/DGRS barbed/P barbell/MS barber/DGMS barbered/U barbital barbiturate/S bard/MS bare/DGPRSTY barefoot/D barfly/MS bargain/DGRS barge/DGS baritone/MS barium bark/DGRSZ barley barn/MS barnstorm/DGRS barnyard/MS barometer/MS barometric baron/MS baroness baronial barony/MS baroque/PY barrack/RS barracuda/MS barrage/DGMS barred/U barrel/MS barren/PS barricade/MS barrier/MS barring/R barrow/S bartender/MS barter/DGRS bas/DGRST basal/Y basalt base/DGPRSTY baseball/MS baseboard/MS baseless baseline/MS baseman basement/MS bash/DGRS bashful/PY basic/S basically basil basin/DMS basis bask/DGS basket/MS basketball/MS bass/MS basset bassinet/MS basso bastard/MSY baste/DGNRSX bastion/DMS bat/DGMRS batch/DGRS bated/AU bath/DGRSZ bathe/DGRSZ bathos bathrobe/MS bathroom/DMS bathtub/MS baton/MS battalion/MS batted batten/DGS batter/DGS battery/MS batting battle/DGRSZ battlefield/MS battlefront/MS battleground/MS battlement/DMS battleship/MS bauble/MS baud/S bauxite bawdy/PRY bawl/DGRS Baxter/M bay/DGSY bayonet/DGMS bayou/MS bazaar/MS be/DGHSTY beach/DGS beachhead/MS beacon/DGMS bead/DGS beadle/MS beady beagle/MS beak/DRSZ beam/DGRSZ bean/DGRSZ beanbag/MS bear/GJRSZ bearable/U bearably/U beard/DS bearded/P beardless bearish/PY beast/JMSY beastly/PR beat/GJNRSZ beatable/U beatably/U beaten/U beatific beatify/N beatitude/MS beatnik/MS beau/MS beauteous/PY beautiful/PY beautifully/U beautify/DGNRSXZ beauty/MS beaver/MS becalm/DGS became because beck beckon/DGS become/GS becoming/UY bed/MS bedazzle/DGS bedazzlement bedbug/MS bedded bedder/MS bedding bedevil/S bedfast bedlam bedpost/MS bedraggle/D bedridden bedrock/M bedroom/DMS bedside bedspread/MS bedspring/MS bedstead/MS bedtime bee/GJRSZ beech/NR beef/DGRSZ beefsteak beefy/R beehive/MS been/S beep/DGRS beet/MS Beethoven/M beetle/DGMS befall/GNS befell befit/MS befitted befitting/Y befog/S befogged befogging before beforehand befoul/DGS befriend/DGS befuddle/DGS beg/S began beget/S begetting beggar/DGSY beggarly/P beggary begged begging begin/S beginner/MS beginning/MS begot begotten begrudge/DGRS begrudging/Y beguile/DGRS beguiling/Y begun behalf behave/DGRS behead/G beheld behest behind behold/GNRSZ beige belated/PY belay/DGS belch/DGS belfry/MS Belgian/MS Belgium/M belie/DRS belief/MS believability believable/U believably/U believe/DGRSZ believing/U belittle/DGRS bell/MS bellboy/MS belle/MS bellhop/MS bellicose/PY bellicosity belligerence belligerent/MSY bellman bellmen Bellovin/M bellow/DGS bells/A bellwether/MS belly/DGMS bellyful belong/DGJS belonging/PS beloved below belt/DGS belted/U Belushi/M bely/DGRS bemoan/DGS bench/DGRS benchmark/DGMS bend/DGRSZ bendable/U beneath Benedict/M Benedictine/M benediction/MS benefactor/MS beneficence/S beneficial/PY beneficiary/S benefit/DGRSZ benevolence benevolent/PY Bengal/M Bengali/M benighted/PY benign/Y bent/S Benzedrine/M benzene bequeath/DGS bequest/MS berate/DGS bereave/DGS bereavement/S bereft beret/MS Bergsten/M beribboned beriberi Berkeley/M berkelium Berlin/MRZ Bermuda/M berry/DGMS berth/DGJS beryl beryllium beseech/GS beseeching/Y beset/S besetting beside/S besiege/DGRZ besmirch/DGS besotted besotting besought bespeak/S bespectacled Bessel/M best/DGRS bestial/Y bestow/D bestowal bestseller/MS bestselling bet/MS beta/S betide betray/DGRS betrayal betroth/D betrothal/S betrothed/U Betsy/M better/DGS betterment/S betting between/P betwixt bevel/S beverage/MS Beverly/M bevy/S bewail/DGS beware bewhiskered bewilder/DGS bewildered/PY bewildering/Y bewilderment bewitch/DGS bewitching/Y beyond biannual bias/DGPS bib/MS bibbed bibbing bible/MS biblical/Y bibliographic/S bibliographical/Y bibliography/MS bibliophile/S bicameral bicarbonate bicentennial biceps bicker/DGRS biconcave biconvex bicycle/DGRSZ bid/DGMRS biddable bidden/U bidder/MS bidding/A biddy/S bide/DGRS bidirectional bids/A biennial/Y biennium bifocal/S bifurcate/DGNSXY big/PY bigger biggest bight/MS bigot/DGMS bigoted/Y bigotry bijection/MS bijective/Y bike/DGMRSZ biker/MS bikini/DMS bilabial bilateral/PY Bilbo/M bile bilge/DGMS bilinear bilingual/SY bilk/DGRS bill/DGJMRSZ billboard/MS billet/DGS billiard/S billion/HS billow/DGS bimodal bimolecular/Y bimonthly/S bin/MS binary/S binaural/Y bind/DGJRSZ binding/PSY bing/N binge/S bingo/S binocular/SY binomial/Y binuclear biochemical/Y biochemistry biofeedback biographer/MS biographic biographical/Y biography/MS biological/SY biologist/MS biology biomedical biomedicine biopsy/S bipartisan bipartite/NY biped/S biplane/MS bipolar biracial birch/NRS bird/MRS birdbath/MS birdie/DS birdlike birefringence birefringent birth/DMS birth's/A birthday/MS birthplace/S birthright/MS biscuit/MS bisect/DGS bisection/MS bisector/MS bishop/MS bismuth bison/MS bisque/S bit/GMRSZ bitblt/S bitch/MS bite/GRSZ biting/Y bitmap/MS bits/R bitten bitter/PRSTY bittersweet/PY bituminous bitwise bivalve/DMS bivariate bivouac/S biweekly bizarre/PY blab/S blabbed blabbermouth/S blabbing black/DGNPRSTXY blackberry/MS blackbird/MRS blackboard/MS blacken/DGRS blackjack/MS blacklist/DGRS blackmail/DGRSZ blackout/MS blacksmith/GMS bladder/MS blade/DMS blamable blame/DGRSZ blameless/PY blanch/DGRS bland/PY blank/DGPRSTY blanket/DGRSZ blare/DGS blase blaspheme/DGRS blasphemous/PY blasphemy/S blast/DGRSZ blatant/PY blaze/DGRSZ blazing/Y bleach/DGRSZ bleak/PY blear bleary/PY bleat/GRS bled bleed/GJRSZ blemish/DGMS blemished/U blend/DGRSZ bless/DGJS blessed/PY blew blight/DR blimp/MS blind/DGPRSYZ blinded/U blindfold/DGS blinding/Y blink/DGRSZ blinker/DGS blinking/U blip/MS bliss blissful/PY blister/DGS blistering/Y blithe/RTY blitz/MS blitzkrieg blizzard/MS bloat/DGRSZ blob/MS bloc/MS block/DGMRSZ blockade/DGRS blockage/MS blockhouse/S bloke/MS blond/MS blonde/MS blood/DS bloodhound/MS bloodless/PY bloodshed bloodshot bloodstain/DMS bloodstream bloody/DGPTY bloom/DGRSZ blossom/DS blot/MS blotted blotting blouse/GMS blow/DGRSZ blower/MS blowfish blown/U blowup blubber/DG bludgeon/DGS blue/DGPRSTY blueberry/MS bluebird/MS bluebonnet/MS bluefish blueprint/DGMS bluestocking bluff/DGPRSY bluish/P blunder/DGJRS blundering/SY blunt/DGPRSTY blur/MS blurb/MS blurred/Y blurring/Y blurry/PRY blurt/DGRS blush/DGRS blushing/UY bluster/DGRS blustering/Y blustery boar board/DGMRSZ boardinghouse/MS boards/I boast/DGJRSZ boastful/PY boat/DGMRSZ boathouse/MS boatload/MS boatman boatmen boatswain/MS boatyard/MS bob/MS bobbed bobbin/MS bobbing bobby/S bobolink/MS bobwhite/MS bode/DGS bodice bodied/U body/DGSY bodybuilder/MS bodybuilding bodyguard/MS bog/MS bogged boggle/DGS bogus boil/DGRSZ boilerplate boisterous/PY bold/PRTY boldface/DGS Bolivia/M boll Bologna/M Bolosky/M Bolshevik/MS Bolshevism/M bolster/DGRS bolt/DGRS bolted/U bomb/DGJRSZ bombard/DGS bombardment/S bombast/R bombastic bombproof bonanza/MS bond/DGRSZ bondage bonds/A bondsman bondsmen bone/DGRSZ boned/U bonfire/MS bong bonnet/DS bonneted/U bonny/RY bonus/MS bony/R boo/HS boob booboo booby/S book/DGJMRSZ bookcase/MS bookie/MS bookish/PY bookkeeper/MS bookkeeping booklet/MS bookseller/MS bookshelf/M bookshelves bookstore/MS boolean/S boom/DGRS boomerang/MS boon boor/MS boorish/PY boost/DGRSZ booster/MS boot/ADGS booth/S bootleg/S bootlegged bootlegger/MS bootlegging bootstrap/MS bootstrapped bootstrapping booty/S booze/GR borate/DS borax bordello/MS border/DGJRS borderland/MS borderline bore/DGRSZ boredom boric boring/PY born/AIU borne Borneo/M boron borough/S borrow/DGJRSZ bosom/MS boss/DS Boston/M Bostonian/MS bosun botanical/Y botanist/MS botany botch/DGRSZ both/RZ bother/DGS bothered/U bothersome Botswana/M bottle/DGRSZ bottleneck/MS bottom/DGRS bottomless/PY botulinus botulism bouffant bough/DMS bought/N boulder/DMS boulevard/MS bounce/DGRSZ bouncing/Y bouncy/RY bound/DGNRS boundary/MS bounded/AU boundless/PY bounds/AI bounteous/PY bounty/DMS bouquet/MS bourbon/S bourgeois bourgeoisie Bourne/M bout/MS bovine/SY bow/DGNRSZ bowed/U bowel/MS bowl/DGRSZ bowline/MS bowman bows/R bowstring/MS box/DGRSZ boxcar/MS boxwood boy/MRS boycott/DGRS boyfriend/MS boyhood boyish/PY Bozman/M bra/MS brace/DGRS bracelet/MS bracket/DGS brackish/P Brad/M brae/MS brag/S bragged bragger bragging braid/DGRS braille brain/DGS brainchild/M brainstorm/GMRS brainwash/DGRS brainy/PR brake/DGS bramble/GMS brambly bran branch/DGJS branched/U brand/DGRS brandish/GS brandy/DGS brash/PY brass/DS brassiere brassy/PRY brat/MS bravado brave/DGPRSTY bravery bravo/DGS bravura brawl/DGRS brawn bray/DGRS braze/DGRS brazen/DGPY brazier/MS Brazil/M Brazilian/M breach/DGRSZ bread/DGHS breadboard/MS breadwinner/MS break/GRSZ breakable/S breakage breakaway breakdown/MS breakfast/DGRSZ breakpoint/DGMS breakthrough/MS breakup/S breakwater/MS breast/DGS breastwork/MS breath/DGRSZ breathable/U breathe/DGRSZ breathless/PY breathtaking/Y breathy/R bred/IU breech/GMS breed/GRS breeze/DGMS breezy/PRY bremsstrahlung Bresenham/M brethren breve/S brevet/DGS brevity brew/DGRSZ brewery/MS briar/MS bribe/DGRSZ brick/DGRS bricklayer/MS bricklaying bridal bride/MS bridegroom bridesmaid/MS bridge/DGS bridgeable bridgehead/MS bridgework/M bridle/DGS bridled/U brief/DGJPRSTY briefcase/MS briefing/MS brier brig/MS brigade/DGMS brigadier/MS brigantine bright/GNPRSTXY brighten/DGRSZ brightness/S brilliance brilliancy brilliant/PY brim brimful brimmed brindle/D brine/GR bring/GRSZ brink brinkmanship brisk/PRY bristle/DGS Britain/M britches British/RY Briton/MS brittle/DGPRTY broach/DGRS broad/NPRSTXY broadband broadcast/DGJRSZ broadcasts/A broaden/DGJRSZ broadside/DGS brocade/D broccoli brochure/MS broil/DGRSZ broke/RZ broken/PY broker/MS brokerage bromide/MS bromine/S bronchi bronchial bronchiole/MS bronchitis bronchus bronze/DGRS brooch/MS brood/DGRS brooding/Y brook/DS broom/DGMS broomstick/MS broth/RSZ brothel/MS brother/MSY brotherhood brotherly/P brought brow/MS browbeat/GNS brown/DGJPRSTY Brown's brownie/MS brownish brows/DGRSZ browse/DGRSZ browser/MS bruise/DGRSZ brunch/S brunette/S brunt brush/DGRS brushfire/MS brushlike brushy/R brusque/PY brutal/Y brutality/S brute/MS brutish/PY BSD bubble/DGRS bubbly/R buck/DGRS buckboard/MS bucket/DGMS buckle/DGRS buckshot buckskin/S buckwheat bucolic bud/MS budded budding buddy/MS budge/DGS budget/DGRSZ budgetary budging/U Buehring/M buff/GMRSZ buffalo buffaloes buffer/DGMRSZ buffered/U bufferer/MS buffet/DGJS buffoon/MS bug/MS bugged bugger/DGMS bugging buggy/MS bugle/DGRS build/DGJRSZ building/MS buildup/MS built/AIU bulb/DMS bulge/DGS bulk/DS bulkhead/DMS bulky/PRY bull/DGS bulldog/MS bulldoze/DGRSZ bullet/MS bulletin/MS bulletproof/DGS bullion bullish/PY bully/DGS bulwark bum/MS bumble/DGRSZ bumblebee/MS bumbling/Y bummed bummer/S bumming bump/DGRSZ bumptious/PY bun/MS bunch/DGS bundle/DGRS bundled/U bungalow/MS bungle/DGRSZ bungling/Y bunion/MS bunk/DGRSZ bunker/DGMS bunkhouse/MS bunkmate/MS bunny/MS bunt/DGRSZ buoy/DGS buoyancy buoyant/Y burden/DGMS burdened/U burdensome/PY bureau/MS bureaucracy/MS bureaucrat/MS bureaucratic/U burgeon/DGS burger burgess/MS burgher/MS burglar/MS burglarproof/DGS burglary/MS burgle/DGS burial buried/U burl/DR burlesque/DGRSY burly/PRY burn/DGJRSZ burned/U burning/SY burnish/DGRS burnt/PY burp/DGS burr/DMRS burro/MS burrow/DGRS bursa/S bursitis burst/DGRS bury/DGRS bus/DGS busboy/MS bush/DGJS bushel/MS bushwhack/DGRS bushy/PRY business/MS businesslike businessman/M businessmen buss/DGS bust/DGRS bustard/MS bustle/DG bustling/Y busy/DGPRSTY but/A butane butcher/DGMRSY butchery butler/MS butt/DGMRSZ butte/DGRSZ butted/A butter/DGRSZ buttered/U butterfat butterfly/MS butternut butting/A buttock/MS button/DGRS buttoned/U buttonhole/MRS buttons/U buttress/DGS butyl butyrate buxom/PY buy/GRSZ buyer/MS buzz/DGRS buzzard/MS buzzword/MS buzzy by/R bye/SZ bygone/S bylaw/MS byline/MRS bypass/DGS byproduct/MS bystander/MS byte/MS byway/S byword/MS cab/MRS cabbage/DGMS cabin/MS cabinet/MS cable/DGMS cache/DGMRS cackle/DGRS cacti cactus/S cad cadence/DGS cafe/MS cafeteria/MS cage/DGMRSZ caged/U cajole/DGRS cake/DGS calamity/MS calcium calculate/ADGNSVX calculated/PY calculating/AU calculator/MS calculus calendar/DGMS calf/S calibrate/DGNRSX calibrator/S calico California/M Californian/MS caliph/S call/DGRSZ called/AU caller/MS callous/DPY calm/DGPRSTY calming/Y calorie/MS calves Cambridge/M came/N camel/MS camera/MS camouflage/DGS camp/DGRSZ campaign/DGRSZ campus/MS can/DGMRS can't Canada/M canal/MS canary/MS cancel/S cancellation/MS cancer/MS candid/MPSY candidate/MS candidly/U candle/DGRS candlestick/MS candy/DGS cane/DGRS canker/DG canned canner/MS cannibal/MS canning cannister/MS cannon/DGMS cannot canoe/DMS canon/MS canonical/SY canopy cantankerous/PY canto/S canton/MS cantor/MS canvas/MRS canvass/DGRSZ canyon/MS cap/MRSZ capability/MS capable/IP capably/I capacious/PY capacitance/S capacitive/Y capacitor/MS capacity/S cape/RSZ caper/DGS capillary capita capital/SY capitalism capitalist/MS capitol/MS capped/A capping/A capricious/PY captain/DGMS caption/DGMRS captioned/U captivate/DGNS captive/MS captivity captor/MS capture/DGRSZ car/DGMRSZ caravan/MRS carbohydrate/MS carbolic carbon/MS carbonate/DNS carbonic carcass/MS card/DGMRS cardboard/S cardiac cardinal/MSY cardinality/MS care/DGRSZ cared/U career/DGMS carefree careful/PY careless/PY caress/DGRSV caressing/Y caressive/Y caret/S cargo/S cargoes caribou/S caring/U carnation/IS carnival/MS carnivorous/PY carol/MS Carolina/MS Carolyn/M carpenter/DGMS carpet/DGS carriage/MS carrier/MS carrot/MS carry/DGRSZ carryover/S cart/DGRSZ Cartesian cartography carton/MS cartoon/MS cartridge/MS carve/DGJRSZ cascade/DGS case/DGJS casement/MS cash/DGRSZ cashier/MS cask/MS casket/MS casserole/MS cast/DGJMRSZ caste/DGHJMRSZ castle/DGS casual/PSY casualty/MS cat/MRSZ catalyst/MS cataract/S catastrophe/MS catastrophic catch/GRSZ catchable/U catcher/MS categorical/Y category/MS cater/DGRS caterpillar/MS cathedral/MS catheter/S cathode/MS catholic/MS catsup cattle caught/U causal/Y causality causation/MS cause/DGRS caused/U causeway/MS caustic/SY caution/DGJRSZ cautious/IPY cavalier/PY cavalry cave/DGRS caveat/MS cavern/MS cavity/MS caw/DGS CDC CDC's cease/DGS ceaseless/PY ceasing/U Cecily/M cedar ceiling/DMS celebrate/DGNSX celebrated/P celebratory celebrity/MS celery celestial/Y celibate/S cell/DMS cellar/DGMRS cellist/MS cellular/Y cement/DGRS cemetery/MS censor/DGMS censored/U censorship censure/DGRS census/MS cent/S centipede/MS central/SY centrifuge/DGMS centripetal/Y century/MS CEO cereal/MS cerebral/Y ceremonial/PY ceremony/MS certain/UY certainty/SU certifiable certificate/DGNSX certified/AU certify/DGNRSXZ cessation/MS chafe/GR chaff/GR chaffer/DGR chagrin/DGS chain/DGMS chair/DGMS chairman/M chairmanship/S chairmen chairperson/MS chalice/DMS chalk/DGS challenge/DGRSZ challenged/U challenging/Y chamber/DGRSZ chamberlain/MS champagne champaign champion/DGS championship/MS chance/DGS chancellor/MS chandelier/MS change/DGRSZ changeability/U changeable/P changeably/U changed/U changeover/MS channel/MS chant/DGRS chanticleer/MS chaos chaotic chap/MS chapel/MS chaperon/D chaplain/MS chapter/DGMS char/GS character/DGMS characteristic/MS characteristically/U charcoal/DS charge/DGRSZ chargeable/P charged/AU charges/A chariot/MS charitable/PU charity/MS charm/DGRSZ charming/Y chart/DGJMRSZ chartable charted/U charter/DGRSZ chartered/U chartering/A chase/DGRSZ Chase's chasm/MS chaste/PRTY chastise/DGRSZ chat/S chateau/MS chatter/DGRSYZ chauffeur/DGS chauvinism/M chauvinist/MS chauvinistic cheap/NPRTXY cheapen/DGS cheat/DGRSZ check/DGRSZ checkable/U checked/AU checker/DGS checkout/S checkpoint/DGMS checks/A checksum/MS cheek/MS cheer/DGRSYZ cheerful/PY cheerless/PY cheery/PRY cheese/DGMS chef/MS chemical/SY chemise/S chemist/MS chemistry/S cherish/DGRS cherry/MS cherub/MS cherubim chess chest/RS chestnut/MS chew/DGRSZ chick/NSX chickadee/MS chicken/DGS chide/DGS chief/MSY chieftain/MS chiffon child/MY childhood/S childish/PY children/M chill/DGPRSZ chilling/Y chilly/PRSY chime/DGMRS chimney/DMS chin/MS Chinese/M chink/DS chinned chinner/S chinning chintz chip/MS chipmunk/MS chirp/DGS chisel/MS chivalrous/PY chivalrously/U chivalry chlorine chloroplast/MS chock/DGMRS chocolate/MS choice/PRSTY choir/MS choke/DGRSZ choking/Y cholera choose/GRSZ chop/S chopped chopper/MS chopping choral/Y chord/DGMS chore/GNS chorister/MS chorus/DS chose chosen/U christen/DGS Christian/MS Christians/N Christmas chronic chronicle/DRSZ chronological/Y chronology/MS chubby/PRTY chuck/DGMS chuckle/DGS chuckling/Y chum/S chump/GMS chunk/MS church/DGSY churchly/P churchman churchyard/MS churn/DGRSZ chute/DGMS cider/S cigar/MS cigarette/MS cinder/MS cinnamon cipher/DGMS circle/DGRS circuit/DGMS circuitous/PY circuitry circular/MPSY circularity/S circulate/DGNSVX circumference/S circumflex/S circumlocution/MS circumspect/Y circumstance/DGMS circumstantial/Y circumvent/DGS circumventable circus/MS cistern/MS citadel/MS citation/AMS citations/AI cite/ADGIS cited/AIU citizen/MSY citizenship city/DMS civic/S civil/UY civilian/MS civility/S clad/S claim/ADGRS claimable/A claimant/MS claimed/AU clairvoyant/SY clam/MS clamber/DGRS clamorous/PUY clamp/DGRS clan/S clang/DGRSZ clap/S clarify/DGNRSX clarity/U clash/DGRS clasp/DGRS class/DGRS classic/S classical/Y classifiable classified/AU classifieds classify/DGNRSXZ classmate/MS classroom/MS classwork clatter/DGRS clattering/Y clause/MS claw/DGRS clay/DGMS clean/DGPRSTYZ cleaner/MS cleanly/PR cleans/DGRSZ cleanse/DGRSZ cleanup/MS clear/DGJPRSTY clearance/MS clearing/MS cleavage/S cleave/DGRSZ cleft/MS clench/DGS clenched/U clergy clergyman clerical/SY clerk/DGMSY clever/PRTY cliche/MS click/DGRSZ client/MS cliff/MS climate/MS climatic climatically climax/DGS climb/DGRSZ clime/MS clinch/DGRS clinching/Y cling/GS clinic/MS clinical/Y clink/DRZ clinker/DGS clip/MS clipped/U clipper/MS clipping/MS clique/MS cloak/DGMS clobber/DGS clock/DGJRSZ clockwise clockwork clod/MS clog/MS clogged/U clogging/U clogs/U cloister/DGMS clone/DGMRSZ close/DGJPRSTYZ closed/IU closeness/S closet/DS closure/DGMS cloth/DGS clothe/DGS clothed/U cloud/DGS clouded/U cloudless/PY cloudy/PRTY clout clove/RS clown/GMS club/MS clubbed clubbing cluck/DGS clue/GMS clump/DGS clumsy/PRTY clung cluster/DGJMS clustered/AU clusters/A clutch/DGS clutter/DGS cluttered/U CMOS coach/DGMRS coachman coagulate/DGNS coal/DGRS coalesce/DGS coalition coarse/PRTY coarsen/DG coast/DGRSZ coastal coat/DGJRSZ coated/U coax/DGRS coaxial/Y cobbler/MS Cobol/M cobweb/MS cock/DGRS cockroach/S cocktail/MS cocoa coconut/MS cocoon/MS cod/DGJRSZ code/DGJMRSZ coded/AU coder/MS codeword/MS codification/MS codifier/MS codify/DGNRSXZ coefficient/MSY coerce/DGNSVX coercive/PY coexist/DGS coexistence coffee/MS coffer/MS coffin/MS cogent/Y cogitate/DGNSV cognition/AS cognitive/SY cohabit/DGS cohabitation/S cohere/DGRS coherence/I coherent/IY cohesion cohesive/PY coil/ADGS coiled/AU coin/DGRS coinage/A coincide/DGS coincidence/MS coincidental/Y coined/U coke/GS cold/PRSTY Coleman/M collaborate/DGNSVX collaborative/Y collaborator/MS collapse/DGS collar/DGS collate/DGNSVX collateral/Y collator/S colleague/MS collect/ADGSV collected/PY collectible collection/AMS collective/SY collector/MS college/MS collegiate/Y collide/DGS collie/DRS collision/MS collocate/DGMNS cologne/D colon/MS colonel/MS colonial/PSY colonist/MS colony/MS Colorado/M colossal/Y colt/MRS column/DMS columnar comb/DGJRSZ combat/DGSV combatant/MS combative/PY combination/AMS combinational/A combinator/MS combinatorial/Y combinatoric/S combine/DGRSZ combustion/S Comdex/M come/GHJRSTYZ comedian/MS comedic comedy/MS comely/PR comestible/S comet/MS comfort/DGRSZ comfortability/S comfortable/P comfortably/U comforted/U comforting/Y comic/MS comical/Y comma/MS command/DGMRSZ commandant/MS commandeer/DGS commanding/Y commandment/MS commemorate/DGNSVX commemorative/SY commence/DGRS commenced/A commencement/MS commences/A commend/ADGRS commendation/AMS commensurate/NSXY comment/DGMRS commentary/MS commentator/MS commented/U commerce/DG commercial/PSY commission/DGMRSZ commissioner/MS commit/S commitment/MS committed/U committee/MS committing commodity/MS commodore/MS common/PRSTYZ commonality/S commoner/MS commonplace/PS commonwealth/S commotion/S communal/Y commune/DGNS communicant/MS communicate/DGNSVX communicative/PY communicator/MS communist/MS community/MS commutative/Y commutativity commute/DGRSZ compact/DGPRSTYZ compactor/MS companion/MS companionable/P companionship company/MS comparability/I comparable/P comparably/I comparative/PSY comparator/MS compare/DGRS comparison/MS compartment/DGS compass/DGS compassion compassionate/PY compatibility/IMS compatible/PS compatibly/I compel/S compelled compelling/Y compendium compensate/DGNSVX compensated/U compensatory compete/DGS competence/S competent/IY competition/MS competitive/PY competitor/MS compilable compilation/AMS compile/DGRSZ compiler/MS complain/DGRSZ complaining/UY complaint/MS complement/DGRSZ complementary/PY complete/DGNPRSVXY completed/U complex/PSY complexion/D complexity/S compliance/S complicate/DGNSX complicated/PY complicator/MS complicity compliment/DGRSZ complimentary/Y comply/DGNRSXZ component/MS compose/DGRSZ composed/PY composer/MS composite/NSXY compositional/Y composure compound/DGRS comprehend/DGS comprehending/U comprehensibility/I comprehensible/IP comprehension/MS comprehensive/PY compress/DGSUV compressed/Y compressible/I compression/S compressive/Y comprise/DGS compromise/DGRSZ compromising/UY comptroller/MS compulsion/MS compulsory/Y compunction/S computability/U computable/IU computation/MS computational/Y compute/DGRSZ computer/MS computerese comrade/SY comradely/P comradeship concatenate/DGNSX conceal/DGRSZ concealing/Y concealment concede/DGRS conceded/Y conceit/DS conceited/PY conceivable/IU conceivably/I conceive/DGRS concentrate/DGNSVX concentrator/S concentric concept/MSV conception/MS conceptual/Y concern/DGS concerned/UY concert/DS concerted/PY concession/MRS concise/NPXY conclude/DGRS conclusion/MS conclusive/IPY concomitant/SY concord concrete/DGNPSY concur/S concurred concurrence concurrency/S concurrent/Y concurring condemn/DGRSZ condemnation/S condensation condense/DGRSZ condescend/DGS condescending/Y condition/DGRSZ conditional/SY conditionally/U conditioned/AU condone/DGRS conducive/P conduct/DGSV conduction conductive/Y conductivity/S conductor/MS conduit/S cone/DGMS confederacy confederate/NSVX confer/S conference/GMS conferred conferrer/MS conferring confess/DGS confessed/Y confession/MS confessor/MS confidant/MS confide/DGRS confidence/S confident/Y confidential/PY confidentiality confiding/PY configurable/A configuration/AMS configure/ADGS confine/DGRS confined/U confinement/MS confirm/DGS confirmation/MS confirmed/PY confiscate/DGNSX conflict/DGSV conflicting/Y conform/DGRSZ conformity/IU confound/DGJRS confounded/Y confounding/MS confront/DGRSZ confrontation/MS confuse/DGNRSXZ confused/PY confusing/Y congenial/Y congested congestion congratulate/DNSX congregate/DGNSX congress/DGMS congressional/Y congressman congruence/I congruent/IY conjecture/DGRS conjoined conjunct/DSV conjunction/MS conjunctive/Y conjure/DGRSZ connect/DGRSVZ connected/PY connection/AMS connective/MSY connectivity/S connector/MS Connie/M connoisseur/MS connote/DGS conquer/DGRSZ conquerable/U conqueror/MS conquest/MS cons conscience/MS conscientious/PY conscious/PSY consecrate/DGNSVX consecutive/PY consensus consent/DGRSZ consenting/Y consequence/MS consequent/PSY consequential/PY consequentiality/S consequentially/I consequently/I conservation/MS conservationist/MS conservatism conservative/PSY conservatory/S conserve/DGRS consider/DGRS considerable/I considerably/I considerate/NPXY consideration/AI considered/AU consign/DGS consist/DGS consistency/IS consistent/IY consolable/I consolation/MS console/DGRSZ consolidate/DGNSX consolidated/AU consolidates/A consoling/Y consonant/MSY consort/DGS consortium conspicuous/IPY conspiracy/MS conspirator/MS conspire/DGS constable/MS constancy/I constant/SY constantly/I constellation/MS consternation constituency/MS constituent/MSY constitute/DGNSVX constituted/A constitutes/A constitution/MS constitutional/UY constitutionality/U constitutive/Y constrain/DGS constrained/Y constraint/MS construct/ADGSV constructibility constructible/A construction/MS constructions/A constructive/PY constructor/MS construe/DGS consul/MS consulate/MS consult/DGRSV consultant/MS consultation/MS consultative consumable/S consume/DGRSZ consumed/Y consumer/MS consuming/Y consummate/DGNSVXY consummated/U consumption/MS consumptive/Y contact/DGS contacted/A contagion contagious/PY contain/DGRSZ containable container/MS containment/MS contaminate/DGNSVX contaminated/U contemplate/DGNSVX contemplative/PY contemporaneous/PY contemporary/PSY contempt contemptible/P contemptuous/PY contend/DGRSZ content/DGSY contented/PY contention/MS contentment contest/DGRSZ contestable/I contested/U context/MS contextual/Y contiguity contiguous/PY continent/MSY continental/Y continently/I contingency/MS contingent/MSY continual/Y continuance/MS continuation/MS continue/DGRS continuity/S continuous/PY continuum contour/DGMS contract/DGSV contracted/U contraction/MS contractor/MS contractual/Y contradict/DGS contradiction/MS contradictory/PY contradistinction/S contrapositive/S contraption/MS contrary/PY contrast/DGRSVZ contrasting/Y contrastive/Y contribute/DGNRSVXZ contributive/Y contributor/MS contributory/Y contrivance/MS contrive/DGRS contrived/U control/MS controllability/U controllable/IU controllably/U controlled/U controller/MS controlling controversial/Y controversy/MS conundrum/MS convalescence convene/DGRSZ convened/A convenes/A convenience/MS convenient/IY convent/MS convention/MS conventional/UY converge/DGS convergence/S convergent conversant/Y conversation/MS conversational/Y converse/DGNSXY conversion/GS convert/DGRSZ convertibility/I convertible/IU convertibleness converts/A convex convey/DGRSZ conveyance/DGMRSZ convict/DGSV conviction/MS convince/DGRSZ convinced/U convincing/PUY convoluted convoy/DGS convulsion/MS coo/G cook/DGMRSZ cooked/U cookery cookie/MS cooky/S cool/DGJPRSTYZ cooled/U cooler/MS coolie/MS coolness/S coon/MS coop/DRSZ cooper/DGS cooperate/DGNSVX cooperative/PSY cooperator/MS coordinate/DGNPSVXY coordinated/U coordinator/MS cop/DGJMRS cope/DGJRS copious/PY copper/DGMS cops/S copse/S copy/DGRSZ copyright/DGMRSZ coral cord/ADGRS cordial/PY core/DGMRSZ cored/A cork/DGRSZ corked/U cormorant/S corn/DGRSZ corner/DGS cornerstone/MS cornfield/MS corollary/MS coronary/S coronation coronet/DMS coroutine/MS corporal/MSY corporate/NVXY corporation/MS corps/S corpse/MS corpus correct/DGPSVY correctable/U corrected/U correction/S corrective/PSY corrector correlate/DGNSVX correlated/U correlative/Y correspond/DGS correspondence/MS correspondent/MS corresponding/Y corridor/MS corroborate/DGNSVX corroborative/Y corrosion/S corrupt/DGRSVY corruption/I corruptive/Y corset/S cosine/S cosmetic/S cosmology cosmopolitan cost/DGSVY costive/PY costly/PRT costume/DGRSZ cot/MS cottage/RSZ cotton/DGS cotyledon/MS couch/DGS cough/DGRS could/T couldn't council/MS councillor/MS counsel/MS count/DGRSZ countable/U countably/U counted/AU countenance/R counter/DGS counteract/DGSV counterclockwise counterexample/S counterfeit/DGRSZ counterfeiter/MS countermeasure/MS counterpart/MS counterpoint/G counterproductive counterrevolution countess countless/Y country/MS countryman countryside county/MS couple/DGJMRSZ coupled/U coupon/MS courage courageous/PY courier/MS course/DGMRS courses/A court/DGMRSYZ courteous/PY courtesy/MS courthouse/MS courtier/MS courtly/P courtroom/MS courtship courtyard/MS cousin/MS cove/GRSZ covenant/DGMRS covenanted/U cover/DGJRS coverable/A coverage coverlet/MS covert/PY covet/DGRS coveting/Y covetous/PY cow/DGRSZ coward/SY cowardice cowardly/P cowboy/MS cowed/Y cower/DGRSZ cowering/Y cowgirl/MS cowl/DGS cowslip/MS coyote/MS cozy/PRSY CPU CPU's CPUs crab/MS crack/DGRSYZ crackle/DGS cradle/DGRS craft/DGRS craftsman crafty/PRY crag/MS cram/S cramp/DMRS cranberry/MS Crandall/M crane/DGMS crank/DGS cranky/PRTY crap/GS crash/DGRSZ crate/GRSZ crater/DS cravat/MS crave/DGRS craven/PY crawl/DGRSZ Cray/MS craze/DGS crazy/PRSTY creak/DGS cream/DGRSZ creamy/PY crease/DGIRS create/ADGNSVX created/AU creative/PY creativity creator/MS creature/MSY creaturely/P credence credibility/I credible/I credibly/I credit/DGS creditable/P creditably creditor/MS credulity/I credulous/PY credulously/I creed/MS creek/MS creep/GRSZ cremate/DGNSX crepe crept crescent/MS crest/DGS cretin/S crevice/MS crew/DGS crib/MS cricket/GMRS crime/MS criminal/SY crimson/G cringe/DGRS cripple/DGRS crises crisis crisp/PRSY criteria criterion critic/MS critical/PY critically/U criticism/MS critique/DGS critter/MS croak/DGRSZ crochet/DGRS crook/DS crooked/PY crop/MS cropped/U cropper/MS cropping cross/DGJRSYZ crossable crossbar/MS crossover/MS crossword/MS crouch/DGS crow/DGMS crowd/DGRS crowded/P crown/DGRS crowned/U crucial/Y crucify/DGNS crude/PRTY cruel/PRTY cruelty cruise/DGRSZ crumb/SY crumble/DGJS crumbly/PR crumple/DGS crunch/DGRSZ crunchy/PRT crusade/DGRSZ crush/DGRSZ crushable/U crushing/Y crust/DGMS crustacean/MS crutch/DMS crux/MS cry/DGRSZ cryptanalysis cryptic cryptographic cryptography/M cryptology crystal/MS crystalline cub/DGMRS cube/DGRS cubic/SY cuckoo/MS cucumber/MS cuddle/DGS cudgel/MS cue/DGS cuff/DGMS cull/DGRS culminate/DGNS culpability culprit/MS cult/MS cultivate/DGNSX cultivator/MS cultural/Y culture/DGS cultured/U cumbersome/PY cumulative/Y cunning/PY cup/MS cupboard/MS Cupertino/M cupful/S cupped cupping cur/DGRSY curable/IP curably/I curb/DGS curds cure/DGRS cured/U curfew/MS curiosity/MS curious/PRTY curl/DGRSZ curled/U curly/PRS currant/MS currency/MS current/PSY currently/A curricular curriculum/MS curry/DGRS curs/ADGSV curse/ADGSV cursed/PY cursive/APY cursor/MS cursory/PY curt/PY curtail/DGRS curtain/DGS curtsy/DGMS curvature/S curve/DGS curved/A cushion/DGS cusp/MS cuss/DRS cussed/PY custard custodian/MS custody/S custom/RSZ customary/PY customer/MS cut/MRST cute/PRSTY cutoff/S cutter/MS cutting/SY cybernetic/S cycle/DGRS cyclic/Y cyclically cycloid/MS cycloidal cyclone/MS cylinder/DGMS cylindrical/Y cymbal/MS cynical/UY cypress cyst/S cytology czar Czechoslovakian dabble/DGRSZ dad/MS daddy/MS daemon/MS daffodil/MS dagger/S daily/S dainty/PRSY dairy/GS daisy/MS dale/HMS dam/DMS damage/DGRSZ damaged/U damaging/Y damask dame/D damn/DGS damnation damned/RT damning/Y damp/DGNPRSXYZ damped/U dampen/DGRS damsel/MS Dan/M dance/DGRSZ dandelion/MS dandy/RSY danger/MS dangerous/PY dangle/DGRSZ dangler/MS dangling/Y dare/DGRSZ daring/PY dark/NPRSTY darken/DGRZ darling/MPSY darn/DGRS DARPA DARPA's dart/DGRSZ darter/MS dash/DGRSZ dashing/Y data/M database/MS date/DGRSV dated/PY datum/MS daughter/MSY daunt/DGS daunted/U dauntless/PY dawn/DGS day/MSY daybreak/S daydream/DGRSZ daylight/MS daytime/S daze/DGS dazed/P dazzle/DGRSZ dazzling/Y deacon/MS dead/NPXY deaden/DGRS deadening/Y deadline/MS deadlock/DGS deadly/PRT deaf/NPRTXY deafen/DGS deafening/Y deal/GJRSZ deallocate/DGNSX deallocation/MS deallocator dealt dean/MS dear/HPRSTY dearth/S death/MSY debatable/U debate/DGRSZ Debbie/M debilitate/DGNS debris debt/MS debtor/S debug/S debugged debugger/MS debugging decade/MS decadence decadent/Y decay/DGRS decease/DGS deceit deceitful/PY deceive/DGRSZ deceiving/Y decelerate/DGNSX December/MS decency/MS decent/IY deception/MS deceptive/PY decidability decidable/U decide/DGRS decided/PY decimal/SY decimate/DGNS decipher/DGRSZ decision/MS decisive/IPY deck/DGJRS declaration/MS declarative/SY declare/DGRSZ declared/AU declination/MS decline/DGRSZ DECNET decode/DGJRSZ decompile/DGRSZ decomposability decomposable/IU decompose/DGRS decomposition/MS decompression decorate/DGNSVX decorated/AU decorates/A decorative/PY decorum/S decouple/DGRS decoy/MS decrease/DGS decreasing/Y decree/DRS decreeing decrement/DGS dedicate/DGNSVX dedicated/Y dedication/AS deduce/DGRS deducible deduct/DGSV deduction/MS deductive/Y deed/DGS deem/ADGS deep/NPRSTXY deepen/DGS deer/S default/DGRS defeat/DGS defeatism defeatist/S defect/DGSV defection/MS defective/PSY defend/DGRSZ defendant/MS defended/U defender/MS defenestrate/DGNSX defensive/PY defer/S deference deferment/MS deferrable deferred deferrer/MS deferring defiance/S defiant/Y deficiency/S deficient/Y deficit/MS defile/DGRS definable/IU define/DGRSZ defined/AU definite/NPVXY definition/AMS definitional definitive/PY deformation/MS deformed/U deformity/MS deftly defy/DGRS defying/Y degenerate/DGNPSVY degradable degradation/MS degrade/DGRS degraded/PY degrading/Y degree/DMS deign/DGS deity/MS dejected/PY Delaware/M delay/DGRSZ delegate/DGNSX delete/DGNRSX deleted/U deliberate/DGNPSVXY deliberative/PY deliberator/MS delicacy/MS delicate/PSY delicious/PSY delight/DGRS delighted/PY delightful/PY delimit/DGRSZ delineate/DGNSVX delinquency delinquent/MSY delirious/PY deliver/DGRSZ deliverable/MS deliverance delivery/MS dell/MS delta/MS delude/DGRS deluding/Y deluge/DGS delusion/MS delve/DGRS demand/DGRS demanding/Y demise/DGS demo/PS democracy/MS democrat/MS democratic/U democratically/U demodulate/DGNSX demodulation/MS demodulator/MS demographic/S demolish/DGRS demolition/S demon/MS demonstrable/P demonstrate/DGNSVX demonstrative/PUY demonstrator/MS DeMorgan/M demur/S den/MS deniable/U denial/MS denigrate/DGNSV denizen/S Denmark/M Denny/M denomination/MS denominator/MS denotable denotation/MS denotational/Y denotative denote/DGS denounce/DGRSZ dens/RT dense/PRTY density/MS dent/DGIS dental/SY dentist/MS deny/DGRS denying/Y depart/DGS department/MS departmental/Y departure/MS depend/DGS dependability dependable/P dependably dependence/S dependency/S dependent/ISY depict/DGRS depicted/U deplete/DGNSVX deplorable/P deplore/DGRS deploring/Y deploy/DGS deployment/MS deploys/A deport/DGS deportation deportee/MS deportment depose/DGS deposit/ADGS deposition/MS depositor/AMS depot/MS deprave/DGRS depraved/PY depreciate/DGNSVX depreciating/Y depreciative/Y depress/DGSV depressing/Y depression/MS depressive/Y deprivation/MS deprive/DGS depth/S deputy/MS dequeue/DGS derail/DGS derby/S dereference/DGRSZ deride/DGRS deriding/Y derision derivable/U derivation/MS derivative/MPSY derive/DGRS derived/U descend/DGRSZ descendant/MS descended/U descent/MS describable/I describe/DGRSZ described/U description/MS descriptive/PSY descriptor/MS descry/DG desert/DGRSZ desertion/S deserve/DGJRS deserved/PY deserving/SY desiderata desideratum design/DGMRSZ designate/DGNSVX designated/U designator/MS designed/AU designedly designer/MS designing/AU desirability/U desirable/PU desirably/U desire/DGRS desired/U desirous/PY desk/MS desktop/MS desolate/DGNPRSXY desolating/Y despair/DGRS despairing/Y despatch/D desperate/NPY despise/DGRS despite/D despot/MS despotic dessert/MS destination/MS destine/DG destiny/MS destitute/NP destroy/DGRSZ destroyer/MS destruction/MS destructive/PY detach/DGRS detached/PY detachment/MS detail/DGRS detailed/PY detain/DGRS detangle/DGRS detect/DGSV detectable/U detectably detected/U detection/MS detective/S detector/MS detention deteriorate/DGNSV determinable/IP determinacy/I determinant/MS determinate/NPVXY determination/AI determinative/PY determine/DGRSZ determined/PY determines/A determinism/I deterministic/I deterministically detest/DGS detestable/P detonate/DGNSV detract/DGSV detractive/Y detractor/MS detriment/S devastate/DGNSVX devastating/Y develop/ADGRSZ developed/AU developer/MS development/MS developmental/Y deviant/MSY deviate/DGNSX deviated/U deviating/U device/MS devil/MS devilish/PY devise/DGJNRSX devoid devote/DGNSX devoted/Y devotee/MS devour/DGRS devout/PY dew/DGS dewdrop/MS dewy/PRY dexterity diabetes diadem diagnosable diagnose/DGS diagnosed/U diagnosis diagnostic/MS diagonal/SY diagram/DGMS diagrammable diagrammatic diagrammatically diagrammed diagrammer/MS diagramming dial/MS dialect/MS dialog/MS dialogue/MS dials/A diameter/MS diametrically diamond/MS diaper/DGMS diaphragm/MS diary/MS diatribe/MS dice/GRS dices/I dichotomy/S dickens dicky dictate/DGNSX dictator/MS dictatorship/S diction/S dictionary/MS dictum/MS did/U didn't die/DS dielectric/MS dies/U diet/RSZ dietitian/MS differ/DGRSZ difference/DGMS different/PY differential/MSY differentiate/DGNSX differentiated/U differentiators differently/I difficult/Y difficulty/MS diffuse/DGNPRSVXYZ diffusive/PY dig/ST digest/DGRSV digested/IU digestible/I digestion/S digestive/PY digger/MS digging/S digit/MS digital/Y dignified/U dignify/D dignity/IS digress/DGSV digression/MS digressive/PY Dijkstra/M dike/GMRS dilate/DGNSV dilated/PY dilemma/MS diligence/S diligent/PY dilute/DGNPRSVXY diluted/U dim/PRSYZ dime/MRSZ dimension/DGS dimensional/Y dimensionality diminish/DGS diminished/U diminution diminutive/PY dimmed/U dimmer/MS dimmest dimming dimple/DGS din/DGRZ dine/DGRSZ dingy/PRY dinner/MS dint diode/MS Diophantine dioxide/S dip/S diphtheria diploma/MS diplomacy diplomat/MS diplomatic/S dipped dipper/MS dipping/S dire/PRTY direct/DGPSVY directed/AIU direction/MS directional/Y directionality directions/AI directive/MS director/AMS directory/MS dirge/DGMS dirt/MS dirty/DGPRSTY disability/MS disable/DGRSZ disabuse disadvantage/DGMS disadvantaged/P disagree/DS disagreeable/P disagreeing disagreement/MS disallow/DGS disambiguate/DGNSX disappear/DGS disappearance/MS disappoint/DGS disappointed/Y disappointing/Y disappointment/MS disapproval disapprove/DGRS disapproving/Y disarm/DGRSZ disarmament disarming/Y disassemble/DGRSZ disassembler/MS disaster/MS disastrous/Y disband/DGS disbelieve/DGRSZ disburse/DGRS disbursement/MS disc/MS discard/DGRS discern/DGRS discernibility discernible/I discernibly discerning/Y discernment discharge/DGRS disciple/MS disciplinary/Y discipline/DGRS disciplined/IU disclaim/DGRSZ disclose/DGRS disclosed/U disclosure/MS discomfort/G discomforting/Y disconcert/DGS disconcerting/Y disconnect/DGRS disconnected/PY disconnection/S discontent/D discontented/Y discontinuance discontinue/DGS discontinuity/MS discontinuous/Y discord/S discount/DGRS discourage/DGRS discouragement discouraging/Y discourse/DGMRS discover/DGRSZ discovered/AU discovers/A discovery/MS discredit/DGS discreet/IPY discrepancy/MS discrete/NPXY discriminate/DGNSVX discriminating/IY discriminatory/Y discuss/DGRS discussed/U discussion/MS disdain/GS disease/DGS disenfranchise/DGRS disenfranchisement/MS disengage/DGS disentangle/DGRS disfigure/DGS disgorge/R disgrace/DGRS disgraceful/PY disgruntled disguise/DGRS disguised/UY disgust/DGS disgusted/Y disgusting/Y dish/DGS dishearten/DGS disheartening/Y dishonest/Y dishwasher/S disillusion/DG disillusionment/MS disinterested/PY disjoint/DPY disjointed/PY disjunct/SV disjunction/S disjunctive/Y disk/DGMS dislike/DGRS dislocate/DGNSX dislodge/DGS dismal/PY dismay/DGS dismayed/U dismaying/Y dismiss/DGRSVZ dismissal/MS dismount/DGS disobedience disobey/DGRS disorder/DSY disordered/PY disorderly/P disown/DGS disparate/PY disparity/MS dispatch/DGRSZ dispel/S dispelled dispelling dispensation dispense/DGRSZ disperse/DGNRSVX dispersed/Y dispersive/PY displace/DGRS displacement/MS display/DGRS displease/DGS displeased/Y displeasure disposable disposal/MS dispose/DGRS disposed/I disposes/I disposition/MS disprove/DGS dispute/DGRSZ disputed/U disqualify/DGNS disquiet/GY disquieting/Y disregard/DGS disrupt/DGRSV disrupted/U disruption/MS disruptive/PY dissatisfaction/MS dissatisfied disseminate/DGNS dissension/MS dissent/DGRSZ dissertation/MS disservice dissident/MS dissimilar/Y dissimilarity/MS dissipate/DGNRSVX dissipated/PY dissociate/DGNSV dissociated/U dissolution/MS dissolve/DGRS dissonance/MS distal/Y distance/DGS distant/PY distaste/S distasteful/PY distemper distill/DGRSZ distillation distinct/IPVY distinction/MS distinctive/PY distinguish/DGRS distinguishable/I distinguished/U distort/DGRS distorted/U distortion/MS distract/DGSV distracted/Y distracting/Y distraction/MS distraught/Y distress/DGS distressing/Y distribute/DGNRSVX distributed/AU distribution/AMS distributional distributive/PY distributivity distributor/MS district/DGMS distrust/DS disturb/DGRS disturbance/MS disturbed/U disturbing/Y ditch/DGMRS divan/MS dive/DGRSTZ diverge/DGS divergence/MS divergent/Y diverse/NPXY diversify/DGNRS diversity/S divert/DGS divest/DGS divide/DGRSZ divided/U dividend/MS divine/DGRSY divinity/MS division/MS divisor/MS divorce/DGS divulge/DGS dizzy/DGPRY dizzying/Y do/GHJRZ dock/DGMRS doctor/DGMS doctoral doctorate/MS doctrine/MS document/DGMRSZ documentary/MSY documentation/MS documented/U dodge/DGRSZ does/U doesn't dog/MS dogged/PY dogging dogma/MS dogmatism doing/AU dole/DGS doleful/PY doll/MS dollar/S dolly/DGMS dolphin/MS domain/MS dome/DGS domestic/MS domestically domesticate/DGNS domesticated/U dominance dominant/Y dominate/DGNSVX dominion/S don/S don't donate/DGNSVX done/AU donkey/MS doom/DGS door/MS doors/I doorstep/MS doorway/MS dope/DGRSZ dormant dormitory/MS dorsal/Y DOS dose/DGS dot/DGMRS dote/DGRS doting/Y dotted dotting double/DGPRSZ doubled/AU doublet/MS doubly doubt/DGRSZ doubtable/A doubted/U doubtful/PY doubting/Y doubtless/PY dough doughnut/MS douse/DGRS dove/RS down/DGRSZ downcast downfall/N downplay/DGS downright/PY downstairs downstream downtown/RS downward/PSY downy/R doze/DGRS dozen/HS drab/PSY draft/DGMRSZ draftsmen drag/S dragged dragging/Y dragon/MS dragoon/DS drain/DGRSZ drainage/S drained/U drake drama/MS dramatic/S dramatically/U dramatist/MS drank drape/DGRSZ drapery/MS drastic drastically draw/GJRSYZ drawback/MS drawbridge/MS drawl/DGRS drawling/Y drawn/PY dread/DGS dreadful/PY dream/DGRSZ dreamed/U dreaming/Y dreamy/PRY dreary/PRY dredge/DGMRSZ dregs drench/DGRS dress/DGJRSZ dressmaker/MS drew dried/U drier/MS drift/DGRSZ drifting/Y drill/DGRS drink/GRSZ drinkable/U drip/MS dripping/MS drive/GMRSZ driven/P driver/MS driveway/MS drone/GMRS droning/Y drool/DGRS droop/DGS drooping/Y drop/MS dropoff/MS dropped dropper/MS dropping/MS drought/MS drove/RSZ drown/DGJRS drowsy/PRTY drudgery drug/MS druggist/MS drum/MS drummed drummer/MS drumming drunk/MNRSY drunkard/MS drunken/PY dry/DGRSTYZ dual/SY duality/MS dub/S dubious/PY duchess/MS duchy/S duck/DGRS dude due/PS duel/S dug duke/MS dull/DGPRST dully duly/U dumb/PRTY dumbbell/MS dummy/DGMS dump/DGRSZ dunce/MS dune/MS dungeon/MS duplicate/DGNSVX duplicated/A duplicator/MS durability/S durable/PS durably duration/MS during dusk dusky/PRY dust/DGRSZ dusty/PRTY dutiful/PUY duty/MS DVD/M DVDs dwarf/DPS dwell/DGJRSZ dwindle/DGS dye/DGRSZ dyeing dying/U Dylan/M dynamic/S dynamically dynamite/DGRS dynasty/MS each eager/PY eagle/MS ear/DGHSY earl/MS early/PRT earmark/DGJS earn/DGJRSTZ earned/U earner/MS earnest/PY earring/MS earshot earth/DMNSY earthenware earthly/PU earthquake/MS earthworm/MS ease/DGRS easement/MS east/GRS easter/Y eastern/RZ eastward/S easy/PRTY eat/GJNRSZ eaten/U eaves eavesdrop/S eavesdropped eavesdropper/MS eavesdropping ebb/DGS ebony eccentric/MS eccentricity/S ecclesiastical/Y echo/DGS echoes eclipse/DGS ecology economic/S economical/Y economist/MS economy/MS ecstasy eddy/DGMS edge/DGRS edible/PS edict/MS edifice/MS edit/DGS edited/IU edition/MS editor/MS editorial/SY EDP Edsger/M educate/DGNSVX educated/PY education/MS educational/Y educator/MS eel/MS eerie/R effect/DGSV effective/PSY effector/MS effectually effeminate efficacy/I efficiency/IS efficient/IY effigy effort/MS effortless/PY EGA EGA's egg/DGRS ego/S eigenvalue/MS eight/S eighteen/HS eighth/MS eighty/HS either ejaculate/DGNSX eject/DGSV ejection/MS eke/DGS el/AS elaborate/DGNPSVXY elaborators elapse/DGS elastic/S elastically/I elasticity/S elate/DGNRS elated/PY elbow/DGS elder/SY elderly/P eldest elect/ADGSV elected/AU election/MS elective/PSY elector/MS electoral/Y electric/S electrical/PY electricity/S electrify/DGNS electrocute/DGNSX electrode/MS electrolyte/MS electrolytic electron/MS electronic/S electronically elegance/S elegant/IY element/MS elemental/SY elementary/PY elephant/MS elevate/DGNSX elevator/MS eleven/HS elevens/S elf Elgar/M elicit/DGS eligibility/S eligible/S eliminate/DGNSVXY eliminator/S elk/MS Ellen/M ellipse/MS ellipsis ellipsoid/MS ellipsoidal elliptic elliptical/Y elm/RS Elmer's elongate/DGNS eloquence eloquent/IY else/M elsewhere elucidate/DGNSV elude/DGS elusive/PY elves Elvis/M emaciated emacs/M email/DGMS emanating emancipation embark/DGS embarrass/DGS embarrassed/Y embarrassing/Y embarrassment embassy/MS embed/S embedded embedding embellish/DGRS embellished/U embellishment/MS ember/S embezzle/DGRSZ embezzler/MS emblem/S embodiment/MS embody/DGRS embrace/DGRSV embracing/Y embroider/DRS embroidery/S embryo/MS embryology emerald/MS emerge/DGS emerged/A emergence emergency/MS emergent emery/S emigrant/MS emigrate/DGNS eminence eminent/Y emit/S emitted emotion/MS emotional/UY empathy emperor/MS emphases emphasis emphatic/U emphatically/U empire/MS empirical/Y empiricist/MS employ/DGRSZ employable/U employed/U employee/MS employer/MS employment/MS empower/DGS empress empty/DGPRSTY emulate/DGNSVX emulative/Y emulator/MS enable/DGRSZ enact/DGS enactment/S enamel/S encamp/DGS encapsulate/DGNS enchant/DGRS enchanting/Y enchantment encipher/DGRS encircle/DGS enclose/DGS enclosure/MS encode/DGJRSZ encompass/DGS encounter/DGS encourage/DGRS encouragement/S encouraging/Y encrypt/DGS encrypted/U encryption/MS encumber/DGS encumbered/U encyclopedia/MS encyclopedic end/DGJRSVZ endanger/DGS endear/DGS endearing/Y endemic endless/PY endorse/DGRS endorsement/MS endow/DGS endowment/MS endurable/U endurably/U endurance endure/DGS enduring/PY enema/MS enemy/MS energetic/S energy/S enforce/DGRSZ enforced/Y enforcement/A enfranchise/DGRS enfranchisement engage/DGS engagement/MS engaging/Y engender/DGS engine/DGMS engineer/DGJMS engineering/SY england/RZ English/M engrave/DGJRSZ engross/DGR engrossed/Y engrossing/Y enhance/DGS enhancement/MS enigmatic enjoin/DGS enjoy/DGS enjoyable/P enjoyably enjoyment enlarge/DGRSZ enlargement/MS enlighten/DGS enlightening/U enlightenment enlist/DGRS enlistment/S enlists/A enliven/DGS enmity/S ennoble/DGRS ennui enormity/S enormous/PY enough enqueue/DS enquire/DGRSZ enrage/DGS enrich/DGRS enrolled enrolling ensemble/MS ensign/MS enslave/DGRSZ ensnare/DGS ensue/DGS ensure/DGRSZ entail/DGRS entangle/DGRS enter/DGRS enterprise/GRS enterprising/Y entertain/DGRSZ entertaining/Y entertainment/MS enthusiasm/S enthusiast/MS enthusiastic/U enthusiastically/U entice/DGRSZ entire/Y entirety/S entitle/DGS entity/MS entrance/DGS entreat/DGS entreating/Y entreaty/S entrench/DGS entrepreneur/MS entropy/S entrust/DGS entry/MS enumerable enumerate/DGNSVX enumerated/U enumerator/MS enunciation envelop/DGRS envelope/DGRS enviably envied/U envious/PY environ/DGS environment/MS environmental/Y envisage/DGS envision/DGS envoy/MS envy/DGRS envying/Y epaulet/MS ephemeral/SY epic/MS epidemic/MS episcopal/Y episode/MS episodic epistemological/Y epistemology epistle/MRS epitaph/DGS epitaxial/Y epithet/MS epoch epochs epsilon/S equal/SY equalities/I equality/MS equally/U equate/DGNSX equator/MS equatorial equilibrium/S equip/S equipment/S equipped equipping equitable/P equitably/I equity/IS equivalence/DGS equivalent/SY era/MS eradicate/DGNSV eras/DGRSZ erasable erase/DGNRSZ erasure ere erect/DGPSY erection/MS erector/MS ergo Erlang/M ermine/DMS err/DGS errand/S erratic erring/UY erroneous/PY error/MS eruption/S escalate/DGNS escapable/I escapade/MS escape/DGRS escapee/MS eschew/DGS escort/DGS esoteric especial/Y espionage espouse/DGRS esprit/S espy/DGS esquire/S essay/DRS essence/MS essential/PSY establish/DGRS establishment/MS estate/MS esteem/DGS estimate/DGNSVX estimating/A etc eternal/PY eternity/S Ethan/M ethereal/PY Ethernet/MS ethic/S ethical/PY ethically/U ethnic etiquette eunuch eunuchs euphemism/MS euphoria Euro/MS Europe/M European/MS evacuate/DGNSVX evade/DGRS evaluate/DGNSVX evaluated/AU evaluator/MS evaporate/DGNSVX evaporative/Y eve/RS even/DGJPRSY evenhanded/PY evening/MS event/MS eventful/PY eventfully/U eventual/Y eventuality/S ever/T evergreen everlasting/PY evermore every everybody/M everyday/P everyone/MS everything/M everywhere eves/A evict/DGS eviction/MS evidence/DGS evident/Y evil/PSY evince/DGS evoke/DGS evolute/MNSX evolution/MS evolutionary/Y evolve/DGS ewe/MRS exacerbate/DGNSX exact/DGPRSY exacting/PY exaction/MS exactitude/I exaggerate/DGNSVX exaggerated/PY exaggerative/Y exalt/DGRSZ exalted/Y exam/MNS examination/MS examine/DGRSZ examined/AU example/DGMS exampled/U exasperate/DGNSX exasperated/Y exasperating/Y excavate/DGNSX exceed/DGRS exceeding/Y excel/S excelled excellence/S excellency excellent/Y excelling except/DGSV exception/MS exceptional/PY exceptionally/U excerpt/DRS excess/SV excessive/PY exchange/DGRSZ exchangeable exchequer/MS excise/DGNSX excitable/P excitation/MS excite/DGRS excited/Y excitement exciting/Y exclaim/DGRSZ exclamation/MS exclude/DGRS exclusion/RSZ exclusive/PY exclusivity excommunicate/DGNSV excrete/DGNRSX excruciatingly excursion/MS excusable/IP excusably/I excuse/DGRS excused/U executable/MS execute/DGNRSVXZ executed/U execution/RSZ executional executioner/MS executive/MS executor/MS exemplar/S exemplary/PY exemplify/DGNRSZ exempt/DGS exercise/DGRSZ exert/DGS exertion/MS exhale/DGS exhaust/DGRSV exhausted/Y exhaustible/I exhausting/Y exhaustion exhaustive/PY exhibit/DGMSV exhibition/MRS exhibitor/MS exhortation/MS exigency/S exile/DGS exist/DGS existence/S existent/I existential/Y existentialism existentialist/MS exit/DGS exorbitant/Y exoskeletons exotic/P expand/DGRSZ expandable expanded/U expander/MS expanse/DGNSVX expansionism expansive/PY expect/DGS expectancy/S expectant/Y expectation/MS expected/PUY expecting/Y expedient/IY expedite/DGNRSX expedition/MS expeditious/PY expel/S expelled expelling expend/DGRS expendable expended/U expenditure/MS expense/DGSV expensive/IPY experience/DGS experienced/IU experiment/DGMRSZ experimental/Y experimentation/MS experimenter/MS expert/MPSY expertise expiration/MS expire/DGS expired/U explain/DGRSZ explainable/IU explained/U explanation/MS explanatory/Y explicit/PY explode/DGRS exploit/DGRSVZ exploitable exploitation/MS exploited/U exploration/MS exploratory explore/DGRSZ explored/U explosion/MS explosive/PSY exponent/MS exponential/SY exponentiate/DGNSX exponentiation/MS export/DGRSZ expose/DGRSZ exposition/MS expository exposure/MS expound/DGRS express/DGRSVY expressed/U expressibility/I expressible/I expressibly/I expression/MS expressive/IPY expropriate/DGNSX expulsion expunge/DGRS exquisite/PY extant extend/DGRS extended/PY extendible/S extensibility extensible/I extension/MS extensive/PY extent/MS extenuate/DGN exterior/MSY exterminate/DGNSX external/SY extinct/V extinction extinguish/DGRSZ extol/S extortion/R extortionist/MS extra/S extract/DGSV extraction/MS extractive/Y extractor/MS extracurricular extraneous/PY extraordinary/PY extrapolate/DGNSVX extravagance extravagant/Y extremal extreme/DPRSTY extremist/MS extremity/MS extrinsic exuberance exult/DGS exultation exulting/Y eye/DRSZ eyeball/S eyebrow/MS eyed/P eyeglass/S eyeing eyelid/MS eyepiece/MS eyesight eyewitness/MS fable/DGRS fabric/MS fabricate/DGNSX fabulous/PY facade/DGS face/DGJRS faced/A faceless/P faces/A facet/DGS facial/Y facile/PY facilitate/DGNSV facility/MS facsimile/DGMS fact/MS faction/MS factor/DGJMS factorial/MS factory/MS factual/PY faculty/MS fade/DGRSZ faded/Y fading/U fag/S fail/DGJS failing/SY failure/MS fain faint/DGPRSTY fair/DGPRSTY Fairbanks fairy/MS fairyland faith/S faithful/PSY faithless/PY fake/DGRS falcon/RS fall/GMNRS fallacious/PY fallacy/MS fallibility/I fallible/I false/PRTY falsehood/MS falsify/DGNRS falsity falter/DGRS faltering/UY fame/DGS familiar/PSY familiarity/S familiarly/U family/MS famine/MS famish/DGS famous/PY famously/I fan/MS fanatic/MS fanatically fancier/MS fanciful/PY fancy/DGPRSTYZ fang/DMS fanned fanning fantastic fantasy/DMS far/DGR faraway farce/GMS fare/DGRS farewell/S farm/DGRSZ farmer/MS farmhouse/MS farmyard/MS farther farthest farthing fascinate/DGNSX fascinating/Y fashion/DGRSZ fashionable/P fashionably/U fast/DGNPRSTX fasten/DGJRSZ fastened/U fat/DGPSY fatal/SY fatality/MS fate/DGS father/DGMSY fathered/U fatherland fatherly/P fathom/DGS fatigue/DGS fatiguing/Y fatten/DGRSZ fatter fattest fault/DGS faultless/PY faulty/PRY fawn/DGMRS fawning/Y fax/DGMRS FBI FBI's fear/DGRS fearful/PY fearless/PY feasibility feasible/P feast/DGRS feat/GMSY feather/DGRSZ feathered/U feature/DGS featureless February/MS fed/S federal/SY federation fee/DS feeble/PRT feebly feed/GJRSZ feedback/S feel/GJRSZ feeling/PSY feet feign/DGRS feigned/U Felder felicity/IS fell/DGPRSZ felled/A felling/A fellow/MSY fellowship/MS felt/DGS female/MPS feminine/PY femininity feminist/MS femur/MS fen fence/DGRSZ fenced/U ferment/DGRS fermentation/MS fern/MS ferocious/PY ferocity ferrite ferry/DGS fertile/PY fertility/S fervent/Y festival/MS festive/PY festivity/S fetch/DGRS fetching/Y fetter/DGS fettered/U feud/MS feudal/Y feudalism fever/DGS feverish/PY few/PRST fibrous/PY fickle/P fiction/MS fictional/Y fictitious/PY fiddle/DGRS fidelity/I field/DGMRSZ fields/I fiend/S fierce/PRTY fiery/PY fife FIFO fifteen/HS fifth/SY fifty/HS fig/MS fight/GRSZ fighter/IS fighting/I figurative/PY figure/DGJMRSZ filament/MS file/DGJMRSZ filename/MS filial/UY fill/DGJRSZ fillable/A filled/AU film/DGMS filter/DGMRS filtered/U filth filthy/PRTY filtration/M fin/DGMRST final/SY finality finance/DGS financial/SY financier/MS find/GJRSZ fine/DGPRSTY finger/DGJRS finish/DGJRSZ finished/AU finite/PSY Fiona/M fir/DGHJRZ fire/DGJRSZ firearm/MS fired/U firefly/MS firelight/G fireman/MS fireplace/MS fireside firewood fireworks firm/DGMPRSTY firmament firmware/S first/SY firsthand fiscal/SY fish/DGRSZ fisherman/M fishermen/M fishery/S fissure/DGS fist/DS fit/PSY fitful/PY fitted/U fitter/MS fitting/PSY five/RS fix/DGJRSZ fixate/DGNSVX fixed/PY fixture/MS flab flabby/PRY flag/MS flagged flagging/UY flagrant/Y flagship/MS flake/DGRS flame/DGRSZ flaming/Y flammable/S flank/DGRSZ flannel/MS flap/MS flapping flare/DGS flaring/Y flash/DGRSZ flashlight/MS flask flat/PSY flatness/S flatten/DGRS flatter/DGRS flattering/UY flattery flattest flaunt/DGS flaunting/Y flaw/DGS flawless/PY flax/N flea/MS fled fledged/U fledgling/MS flee/RS fleece/DMS fleecy/R fleeing fleet/GPSTY fleeting/PY flesh/DGJRSY fleshy/PR flew/S flexibility/S flexible/I flexibly/I flick/DGRS flicker/DG flickering/Y flight/MS flinch/DGRS flinching/U fling/GMRS flint/S flip/S flirt/DGRS flit/S float/DGRSZ flock/DGS flood/DGRS floor/DGJRS flop/MS floppy/MPRSY flora Florida/M florin floss/DGS flounder/DGS flour/DS flourish/DGRS flourishing/Y flow/DGRSZ flowchart/GMS flower/DGRS flowery/P flowing/Y flown flows/I fluctuate/DGNSX fluent/AI fluently fluffy/PRT fluid/PSY fluidity flung flunk/DGRS fluorescence flurry/DGS flush/DGPS flute/DGMRS flutter/DGRS fly/GMRSZ flyable flyer/MS foam/DGRS focal/Y foci focus/DGRS focusable focused/AU fodder foe/MS fog/MS fogged fogging foggy/PRTY foil/DGS fold/DGJRSZ folded/AU foliage/DS folk/MS folklore follow/DGJRSZ folly/S fond/PRSTY fondle/DGRS font/MS food/MS foodstuff/MS fool/DGS foolish/PY foolproof foot/DGJRSZ football/DMRSZ foothold/S footman footnote/DGMRS footprint/MS footstep/S for/HT forage/DGRS foray/MRS forbade forbear/GMRS forbearance forbid/S forbidden forbidding/PY force/DGMRS forced/Y forcefield/MS forceful/PY forcible/P forcibly ford/S fore/T forearm/DMS foreboding/PSY forecast/DGRSZ forecastle/S forefather/MS forefinger/MS forego/GR foregoes foregone foreground/S forehead/MS foreign/PRSYZ foreman foremost forenoon foresee/RS foreseeable/U foreseen/U foresight/D foresighted/PY forest/DRSZ forestall/DGRS forestallment foretell/GRS forethought/M foretold forever/P forewarn/DGJRS forfeit/DGRSZ forgave forge/DGRSVZ forgery/MS forget/SV forgetful/PY forgettable/U forgettably/U forgetting forgivable/U forgivably forgive/GPRS forgiven forgiving/PY forgot forgotten fork/DGRS forlorn/PY form/ADGIRSZ formal/PSY formalism/MS formality/S formally/I formant/IS format/ASV formation/MS formative/PY formatted/AU formatter/MS formatting/A formed/AIU former/MSY formidable/P formula/MS formulae formulate/DGNSX formulator/MS fornication forsake/GS forsaken fort/MS forte/S forthcoming/U forthwith fortify/DGNRSX fortitude fortnight/Y Fortran/M fortress/MS fortuitous/PY fortunate/PSY fortune/DGMS forty/HRS forum/MS forward/DGPRSYZ fossil/S foster/DGRS fought foul/DGPRSTY found/DGRSZ foundation/MS founded/U founder/DGS foundry/MS fount/MS fountain/MS four/HS Fourier/M fourscore fourteen/HRS fourth/SY fowl/GMRS fox/DGMS fractal/MS fraction/DGMS fractional/Y fractions/I fracture/DGS fragile/Y fragment/DGS fragmentary/PY fragrance/MS fragrant/Y frail/PRTY frailty/S frame/DGJMRSZ framework/MS franc/S France/MS franchise/DGMRS frank/DGPRSTY Frankfurt/M frantic/PY frantically fraternal/Y fraternity/MS fraud/MS fraudulently fraught/DGS fray/DGS freak/DGMS freckle/DGS free/DPRSTY freed/U freedom/MS freeing/S freeman freeway/MS freeze/GRSZ freight/DGRSZ French/M frenzied/Y frenzy/DGS frequency/S frequent/DGPRSYZ frequented/U frequently/I fresh/NPRTXYZ freshen/DGRSZ freshman freshmen fret/S fretful/PY friar/MSY fricative/S friction/MS frictionless/Y Friday/MS friend/MSY friendless/P friendly/PRSTY friendship/MS frieze/MS frigate/MS fright/NX frighten/DGS frightening/Y frightful/PY frill/DMS fringe/DGIS frisk/DGRS frivolous/PY frock/DGMS frog/MS frolic/S from front/DGS frontier/MS frost/DGS frosted/U frosty/PRY froth/GS frown/DGRS frowning/Y froze frozen/PY frugal/Y fruit/DMRS fruiter/R fruitful/PUY fruition fruitless/PY frustrate/DGNRSX frustrating/Y fry/DGNRS fuel/AS fugitive/MPSY fulfilled/U fulfiller fulfilling full/PRT fullword/MS fully fumble/DGRS fumbling/Y fume/DGS fun function/DGMS functional/SY functionality/S functor/MS fund/ADGRSZ fundamental/SY fundamentalist/MS funded/AU funeral/MS fungus/S funnel/S funnily/U funny/PRSTY fur/MPS furious/PRY furnace/DGMS furnish/DGJRSZ furnished/U furniture furrow/DGS further/DGRST furthermore furtive/PY fury/MS fuse/DGNSX fuss/GR futile/PY futility future/MS fuzzy/PRTY gabardine/S gable/DRS gad gadget/MS gag/DGRS gagged gagging gaiety/S gain/DGJRSYZ gait/DRSZ galaxy/MS gale/S gall/DGS gallant/SY gallantly/U gallantry gallery/DS galley/MS galling/Y gallon/MS gallop/DGRSZ gallows/S Galvin/M gamble/DGRSZ game/DGPSY gamma/S gang/MRSY gangly/R gangrene/DGS gangster/MS gap/DGMRS gape/DGRS gaping/Y garage/DGS garb/D garbage/DGMS garble/DGRS garden/DGRSZ Garfunkel gargle/DGS garland/DS garlic/S garment/DGMS garner/DGS garnish/DS garrison/DGS garter/DGMS gas/MS gaseous/PY gash/DGMS gasoline/S gasp/DGRSZ gasping/Y gassed gasser/S gassing/S gastric gastrointestinal gate/DGS gateway/DGMS gather/DGJRSZ gaudy/PRSTY gauge/DGRS gaunt/PY gauze/DGS gave gay/MPRSTY gaze/DGRSZ gear/DGS Geary/M geese gel/MS gelatin gelled gelling gem/MS gender/DGMS gene/MS general/MPSY generalist/MS generality/S generate/DGNSVX generative/AY generator/MS generators/A generic/P generically generosity/MS generous/PY generously/U genetic/S genetically genial/PY genius/MS genre/MS genteel/PRTY gentle/DGPRT gentleman/MY gentlemanly/P gentlewoman gently gentry/S genuine/PY genus Geoff/M Geoffrey/M geographic geographical/Y geography/S geological geologist/MS geometric geometry/S geranium germ/MNS German/MS germane Germany/M germinate/DGNSVX germinative/Y gestalt gesture/DGS get/S getter/DMS getting ghastly/PR ghost/DGSY ghostliness/S ghostly/PR giant/MS gibberish Gibson/M giddy/DGPRY gift/DS gifted/PY gig/MS gigantic/P giggle/DGRS giggling/Y gild/DGRS gill/DMRS gilt gimmick/MS gin/MS ginger/DGY gingerbread gingerly/P gingham/S Gipsy/MS giraffe/MS gird/DGRSZ girder/MS girdle/DGRS girl/MS girlfriend/MS girt/U girth give/GHRSZ given/PS giving/Y gizmo/MS glacial/Y glacier/MS glad/PY gladder gladdest glade/S glamour/DGS glance/DGS glancing/Y gland/MSZ glare/DGS glaring/PY glass/DS glassy/PRSY glaze/DGRSZ glazed/U gleam/DGS glean/DGJRS glee/DS gleeful/PY glen/MS glide/DGRSZ glimmer/DGS glimpse/DGRSZ glint/DGS glisten/DGS glitch/MS glitter/DGS glittering/Y global/SY globe/GMS globular/PY globularity gloom/S gloomy/PRY glorify/DNRSXZ glorious/IPY glory/DGS gloss/DGS glossary/MS glossy/PRSY glottal glove/DGRSZ glow/DGRSZ glower/DGS glowing/Y glucose glue/DGRSZ glued/U gnat/MS gnaw/DGRS go/GHJR goad/DGS goal/MS goat/MS goatee/MS gobble/DGRSZ goblet/MS goblin/MS god/MSY goddess/MS godlike/P godly/PR godmother/MS Godzilla/M goer/G goes gold/GNS golden/PY goldsmith/S golf/GRSZ gone/NR gong/MS good/PSY goodbye/MS goodie/MS goody/MS goose/DGMRS gore/DGS gorge/GRS gorgeous/PY gorilla/MS gosh gospel/S gossip/DGRSZ got/IU gotcha/MS Gothic goto gotten/U gouge/DGRS govern/DGS governed/U governess/S government/MS governmental/Y governor/MS gown/DS GPSS grab/S grabbed grabber/MS grabbing/S grace/DGS graceful/PUY gracious/PY graciously/U gradation/MS grade/DGJRSYZ graded/U grader/MS gradient/MS gradual/PY graduate/DGNSX graft/DGRS graham/MS grain/DGRS grained/I grains/I gram/MS grammar/MS grammatical/PY granary/MS grand/PRSTY grandeur grandfather/MSY grandiose/PY grandkid/MS grandma/M grandmother/MSY grandpa/MS grandparent/S grandson/MS grange/RS granite granny/S grant/DGMRS granularity/S granulate/DGNSVX grape/MS grapevine/MS graph/DGMS graphic/PS graphical/Y graphite grapple/DGRS grasp/DGRS graspable grasping/PY grass/DGSZ grassy/RT grate/DGJRS grateful/PUY gratified/U gratify/DGNX gratifying/Y grating/SY gratitude/I gratuitous/PY gratuity/MS grave/GPRSTYZ gravel/SY gravitation gravitational/Y gravity/S gravy/S gray/DGPRSTY graze/DGRS grease/DGRSZ greasy/PRY great/NPRSTY greaten/DG greed greedy/PRY Greek/MS green/DGPRSTY greenhouse/MS greenish/P greet/DGJRS greets/A Greg/M grenade/MS grew grey/GT grid/MS grids/A grief/MS grievance/MS grieve/DGRSZ grieving/Y grievous/PY grill/DGRS grim/DGPY grin/S grind/GJRSZ grinding/SY grindstone/MS grip/DGRS gripe/DGRS gripped gripper/MS gripping/Y grit/MS grizzly/R groan/DGRSZ grocer/MS grocery/S groom/DGMRS groove/DGRS grope/DGRS gross/DGPRSTY grotesque/PY grotto/MS ground/DGRSZ grounded/U groundwork group/DGJMRS grouse/DGRS grove/MRSZ grovel/S grow/GHRSYZ growing/Y growl/DGRS growling/Y growly/PR grown/I grownup/MS growth/IS grub/MS grudge/DGMRS grudging/Y gruesome/PY gruff/PY grumble/DGRS grumbling/Y grunt/DGRS guarantee/DRSZ guaranteeing guaranty guard/DGRS guarded/PUY guardian/MS guardianship guerrilla/MS guess/DGRS guessed/U guest/DGMS guidance/S guide/DGRS guidebook/MS guided/U guideline/MS guild/MRS guile guilt/S guiltless/PY guilty/PRTY guinea/S guise/DGMS guitar/MS gulch/MS gulf/MS gull/DGS gullibility gully/DGMS gulp/DRS gum/MS gun/MS gunfire/S gunned gunner/MS gunning gunpowder/S gurgle/DGS guru/MS gush/DGRS gust/MS gut/S guts/R gutter/DGS guy/DGMRSZ gym/S gymnasium/MS gymnast/MS gymnastic/S gypsy/DGMS gyration/S gyroscope/MS ha/HS habit/MS habitable/P habitat/MS habitation/MS habitual/PY hack/DGRSZ hacker/MS had hadn't hag haggard/PY hail/DGRS hair/DMS haircut/MS hairdresser/MS hairless/P hairy/PR hale/GIR half/P halfway halfword/MS hall/MRS hallmark/DGMS hallow/DGS hallowed/U hallway/MS halt/DGRSZ halter/DGS halting/Y halve/DGSZ ham/MS hamburger/MS hamlet/MS hammer/DGRS hammock/MS hamper/DGS hampered/U hand/DGRSZ handbag/MS handbook/MS handcuff/DGS handed/PY handful/S handicap/MS handicapped handily/U handiwork handkerchief/MS handle/DGRSZ handshake/GMRS handsome/PRTY handsomely/U handwriting handwritten handy/PRTY hang/DGRSZ hangar/MS hangover/MS hap/Y haphazard/PY hapless/PY happen/DGJS happy/PRTUY harass/DGRS harassment/S hard/GJNPRSTXY harden/DGRS hardness/S hardship/MS hardware/M hardy/PRY hare/MS hark/DGNS harlot/MS harm/DGRS harmed/U harmful/PY harmless/PY harmonious/IPY harmony/S harness/DGRS harp/DGJRSZ harrow/DGRS harry/DGR harsh/NPRTY harshen/DG hart harvest/DGRSZ hash/DGRS hasn't hassle/DGRS haste/DGJS hasten/DGRS hasty/PRTY hat/DGMRS hatch/DGRS hatched/U hatchery/MS hatchet/MS hate/DGRS hateful/PY hatred haughty/PRY haul/DGRSZ haunch/MS haunt/DGRS haunting/Y have/GRSZ haven/MS haven't haver/GS havoc/S Hawaiian/MS hawk/DGRSZ hay/GRS hazard/DGMS hazardous/PY haze/DGMRS hazel hazy/PRTY he/HMRTVZ he'd he'll head/DGJMRSZ headache/MS headgear heading/MS headland/MS headline/DGRS headlong headphone/MS headquarters headway heal/DGHRSZ health/S healthful/PY healthy/PRTY heap/DGS hear/GHJRSTZ heard/U hearken/DG hears/GS hearsay heart/DMNSX heartache/MS hearted/Y hearten/DGS heartening/Y hearth/S heartless/PY hearty/PRSTY heat/DGRSZ heatable heated/Y heath/NR heave/DGRSZ heaven/MSY heavenly/P heavy/PRSTY hedge/DGRS hedgehog/MS hedging/Y heed/DGS heeded/U heeding/U heedless/PY heel/DGRSZ heifer height/NSX heighten/DGS Heinlein/M heinous/PY heir/MS heiress/MS held hell/MRS hello/S helm/MS helmet/DMS help/DGRSZ helper/MS helpful/PY helpfully/U helpless/PY hem/MS hemisphere/DMS hemlock/MS hemostat/S hemp/N hen/MS hence henceforth henchman henchmen herald/DGS heralded/U herb/MS herbivore herbivorous/Y herd/DGRS here/M hereabout/S hereafter hereby hereditary/Y heredity herein hereinafter heresy heretic/MS heretofore herewith heritage/S hermit/MS hero/MS heroes heroic/S heroically heroin heroine/MS heroism heron/MS herring/MS herself hesitant/Y hesitate/DGNRSX hesitating/UY heterogeneous/PY heuristic/MS heuristically hew/DGRS Hewlett/M hex/R hexagonal/Y hey hickory/S hid/DGR hidden hide/DGRS hideous/PY hideout/MS hierarchical/Y hierarchy/MS high/PRSTY highland/RS highlight/DGRSZ highlighter/MS highness/MS highway/MS hijack/DGRSZ hike/DGRSZ hilarious/PY hill/DGMRS hillock/S hillside/MS hilltop/MS hilt/MS him/S himself hind/RSZ hinder/DGRS hindrance/S hindsight hinge/DGRS hinged/U hint/DGMRS hip/MPS hire/DGJRSZ his hiss/DGRS histogram/MS historian/MS historic historical/PY history/MS hit/MS hitch/DGRS hitched/U hitchhike/DGRSZ hither hitherto hitter/MS hitting hive/GS hoar hoard/DGJRS hoarded/U hoarding/MS hoarse/PRTY hoary/PR hoax/DGMRS hobble/DGRS hobby/MS hobbyist/MS hockey hoe/MRS hog/MS hoist/DGRS hold/GJNRSZ holding/IS hole/DGMS holiday/MRS holistic Holland/MRSZ hollow/DGPRSTY holly/S holocaust hologram/MS holy/PRSY homage/DGRS home/DGMRSYZ homebuilt homeless/P homely/PR homemade homemaker/MS homeomorphic homeomorphism/MS homesick/P homespun homestead/RSZ homeward/S homework/RZ homogeneity/IMS homogeneous/PY homomorphic homomorphism/MS Honda/M hone/DGRST honest/Y honesty honey/DGS honeycomb/D honeymoon/DGRSZ honeysuckle honorary/Y hood/DGMS hooded/P hoodwink/DGRS hoof/DMRS hook/DGRSZ hooked/P hooks/U hoop/DGRS hooray/MS hoot/DGRSZ hop/DGRS hope/DGRS hoped/U hopeful/PSY hopeless/PY hopped hopper/MS hopping horde/MS horizon/MS horizontal/MSY hormone/MS horn/DS horned/P hornet/MS horrendous/Y horrible/P horribly horrid/PY horrify/DGS horrifying/Y horror/MS horse/GMSY horseback horseman horsepower/S horseshoe/RS hose/DGMS hospitable/I hospitably/I hospital/MS hospitality/I host/DGMSY hostage/MS hostess/MS hostile/Y hostility/S hot/PY hotel/MS hotter hottest hound/DGRS hour/MSY house/DGJMRS housed/A housefly/MS household/MRSZ housekeeper/MS housekeeping houses/A housetop/MS housewife/MY housewifely/P housework/RZ hovel/MS hover/DGRS how/MS however howl/DGRS hrs hub/MS hubris huddle/DGRS hue/DMS hug/RST huge/PRTY huh hull/DGMRS hum/S human/MPSY humane/PY humanely/I humanities/I humanity/MS humble/DGPRST humbly humid/Y humidify/DGNRSXZ humidity/S humiliate/DGNSX humiliating/Y humility hummed humming humorous/PY hump/DGS hunch/DS hundred/HS hung/RZ hunger/DGS hungry/PRTY hunk/MRSZ hunker/DGS hunt/DGRSZ hunter/MS huntsman hurdle/DGRS hurl/DGRSZ hurrah hurricane/MS hurried/PY hurriedly/U hurry/DGRS hurt/GRS hurting/Y husband/MRSY husbandry hush/DGS husk/DGRS husky/PRSY hustle/DGRSZ hut/MS hyacinth/S hybrid/S hydraulic/S hydraulically hydrodynamic/S hydrogen/MS hygiene hymn/GMS hype/DMRS hyperbolic hypertext/MS hyphen/DGMS hypocrisy/S hypocrite/MS hypodermic/S hypotheses hypothesis hypothetical/Y hysteresis hysterical/UY Hz I'd I'll I'm I've IBM IBM's ice/DGJS iceberg/MS icon/MS icy/PRTY id/MY idea/MS ideal/SY idealism idealistic identical/PY identifiable/U identifiably identified/U identifier/MS identify/DGNRSXZ identity/MS ideological/Y ideology/S idiocy/S idiosyncrasy/MS idiosyncratic idiot/MS idiotic idle/DGPRSTZ idol/MS idolatry IEEE if ignition ignoble/P ignorance ignorant/PY ignore/DGRS ii iii ill/PS illegal/Y illegality/S illicit/Y Illinois illiterate/PSY illness/MS illogical/PY illuminate/DGNSVX illuminating/Y illusion/MS illusive/PY illustrate/DGNSVX illustrative/Y illustrator/MS illustrious/PY illy image/DGMS imaginable/P imaginably/U imaginary/PY imagination/MS imaginative/PY imaginatively/U imagine/DGJRS imbalance/S imitate/DGNSVX imitative/PY immaculate/PY immaterial/PY immature/PY immaturity immediacy/S immediate/PY immemorial/Y immense/PY immerse/DGNRSVX immigrant/MS immigrate/DGNS imminent/PY immoral/Y immorality/S immortal/SY immortality immovability immovable/P immovably immune immunity/MS immunology immutable/P imp/MSY impact/DGRSV impaction/S impactor/MS impair/DGRS impaired/U impart/DGS impartial/Y impasse/NSVX impassion/DGS impassioned/U impassive/PY impatience impatient/Y impeach/DGS impedance/MS impede/DGRS impeded/U impediment/MS impel/S impending impenetrability impenetrable/P impenetrably imperative/PSY imperfect/PVY imperfection/MS imperial/Y imperialism imperialist/MS imperil imperious/PY impermanence impermanent/Y impermissible impersonal/Y impersonate/DGNSX impertinent/Y imperturbability impervious/PY impetuous/PY impetus impinge/DGS impious/Y implant/DGRS implausible implement/DGRSZ implementable implementation/AMS implemented/AU implementor/MS implicant/MS implicate/DGNSVX implicative/PY implicit/PY implore/DGS imply/DGNSX import/DGRSZ importance/U important/Y importation/S impose/DGRS imposing/Y imposition/MS impossibility/S impossible/PS impossibly impostor/MS impotence impotent/Y impoverish/DGRS impoverishment impracticable/P impractical/PY impracticality imprecise/NPY impregnable/P impress/DGRSV impressed/U impression/MS impressionable/P impressionist/S impressionistic impressive/PY impressment imprint/DGS imprison/DGS imprisonment/MS improbable/P impromptu improper/PY improve/DGRS improved/U improvement/S improvisation/MS improvisational improvise/DGRSZ impudent/Y impulse/DGNSVX impulsive/PY impunity impure/PY impurity/MS impute/DGS in/SY inability/S inaccurate/Y inactive/Y inactivity inadvertent/Y inadvisable inalterable/P inane/PRTY inanimate/PY inappropriate/PY inarticulable inasmuch inaugural inaugurate/DGNX Inc incantation/S incapacitating incarnation/MS incendiary/S incense/DGS incentive/MSY inception/S incessant/Y inch/DGS incidence/S incident/MS incidental/SY incipient/Y incision/MS incite/DGRS incivility inclination/MS incline/DGRS inclose/DGS include/DGS inclusion/MS inclusive/PY incoherence/S income/GRSZ incommensurate incomparable incompatible incompetence incompetent/MSY incomplete/NPY incomprehensibly incomprehension inconceivable/P inconsequential/Y inconsiderable/P inconsiderate/NPY inconsistency/MS inconsolable/P inconvenience/DGS incorporate/DGNSV incorporated/U incorporating/A incorporation/A incorrect/PY increasing/Y incredible/P incredulous/Y increment/DGS incremental/Y incubate/DGNSV incubator/MS incur/S incurable/PS incurred incurring indebted/P indecision indeed indefinable/P indefinite/PY indemnity indent/DGRS indentation/MS indented/U independence indescribable/P indeterminacy/MS indeterminate/NPY index/DGRSZ indexable India/M Indian/MS Indiana/M indicate/DGNSVX indicative/SY indicator/MS indictment/MS indifference indifferent/Y indigenous/PY indigestion indignant/Y indignation indigo indirect/DGPSY indirection/S indiscipline/D indiscriminate/GNPY indispensability indispensable/P indispensably indistinct/PVY indistinguishable/P individual/MSY individualistic individuality indivisibility indivisible/P indoctrinate/DGNS indolent/Y indomitable/P indoor/S induce/DGRS inducement/MS induct/DGSV inductance/S induction/MS inductive/PY inductor/MS indulge/DGRS indulgence/MS industrial/SY industrialist/MS industrious/PY industry/MS ineffective/PY inequality/S inert/PY inertia/S inescapably inessential inestimable inevitability/S inevitable/P inevitably inexact/PY inexhaustible/P inexorable/P inexorably inexperience/D inexplicable/P inexplicably inexpressible/P infallibly infamous/Y infancy infant/MS infantry infeasible infect/DGSV infected/U infection/MS infectious/PY infer/S inference/GMRS inferential/Y inferior/MSY inferiority infernal/Y inferno/MS inferred inferring infertility infest/DGRS infested/U infidel/MS infighter/MS infiltrate/DGNSV infinite/PVY infinitesimal/Y infinitive/MSY infinitum infinity/S infirmity infix/MS inflame/DGR inflammable/P inflatable inflate/DGNRS inflationary inflexibility inflexible/P inflict/DGRSV influence/DGRS influenced/U influential/Y influenza informal/Y informality informant/MS information/MS informational informative/PY informatively/U informed/U infrastructure/MS infrequent/Y infringe/DGRSZ infringement/MS infringer/MS infuriate/DGNSY infuriating/Y infuse/DGNRSX ingenious/PY ingenuity/M ingrained/Y ingredient/MS ingrown/P inhabit/DGRS inhabitable inhabitance inhabitant/MS inhabited/U inhale/DGRS inhere/DGS inherent/Y inherit/DGS inheritable/P inheritance/MS inheritor/MS inheritress/MS inheritrices inheritrix/M inhibit/DGRSV inhibition/MS inhibitor/MS inhospitable/P inhuman/PY inhumane/Y inion iniquity/MS initial/MPSY initiate/DGNSVX initiated/U initiative/MS initiator/MS inject/DGSV injection/MS injure/DGRS injured/U injurious/PY ink/DGJMRSZ inkling/MS inland/R inly/GR inmate/MS inn/GJMRS innards innate/PY inner/Y innermost innocence innocent/SY innocuous/PY innovate/DGNSVX innovation/MS innovative/P innumerability innumerable/P innumerably inopportune/PY inordinate/PY inorganic input/DGMRS inquire/DGRSZ inquiring/Y inquiry/MS inquisition/MS inquisitive/PY inroad/S insane/PY inscribe/DGRS inscription/MS insecure/PY insecurity/MS insensitive/PY insensitivity insert/DGRS insertion/AMS inside/MRSZ insidious/PY insight/MS insightful/Y insignia/S insinuate/DGNSVX insinuating/Y insist/DGS insistence insistent/Y insofar insolence/M insolent/Y insoluble/P inspect/DGSV inspection/MS inspector/MS inspiration/MS inspire/DGRS inspired/U inspiring/U instability/S install/DGRSZ installation/MS installment/MS instance/DGS instant/PRSY instantaneous/PY instantiate/DGNSX instantiated/U instantiation/MS instead instigate/DGNSV instigator/MS instinct/MSV instinctive/Y institute/DGMNRSVXZ institution/MS institutional/Y instruct/DGSV instruction/MS instructional instructive/PY instructor/MS instrument/DGMS instrumental/SY instrumentalist/MS instrumentation/M insufficiency/MS insulate/DGNSX insulated/U insulator/MS insult/DGMRS insulting/Y insuperable insupportable/P insurance/MS insure/DGRSZ insured/U insurgent/MS insurmountable insurrection/MS intact/P intangible/MPS integer/MS integral/MSY integrate/DGNSVX integrated/A integrity Intel/M intellect/MSV intellective/Y intellectual/MPSY intelligence/MRS intelligent/UY intelligibility/U intelligible/PU intelligibly/U intend/DGRS intended/MPY intense/PVY intensify/DGNRSZ intensity/S intensive/PY intent/PSY intention/DMS intentional/UY interact/DGSV interaction/MS interactive/Y interactivity intercept/DGMRS interchange/DGJMRS interchangeability/M interchangeable/P interchangeably intercity/M intercommunicate/DGNS interconnect/DGS interconnected/P interconnection/MS interconnectivity/M intercourse/M interdependence/M interdependency/MS interdependent/Y interdisciplinary interest/DGMS interested/Y interesting/PY interestingly/U interface/DGMRS interfere/DGRS interference/MS interfering/Y interim interior/MSY interlace/DGS interleave/DGJS interleaving/MS interlink/DGS interlisp/M intermediary/S intermediate/DGMNPSY intermediation/M interminable intermingle/DGS intermittent/Y intermix/DGRS intermodule intern/DGMS internal/SY international/SY internationality Internet/MS interpersonal/Y interplay interpolate/DGNSVX interpose/DGRS interpret/DGRSVZ interpretable/U interpretation/MS interpretations/A interpreted/AU interpreter/MS interpretive/Y interprocess interrelate/DGNSX interrelated/PY interrelationship/MS interrogate/DGNSVX interrogative/SY interrupt/DGMRSVZ interruptible/U interruption/MS intersect/DGS intersection/MS intersperse/DGNSX interstage interstate intertask intertwine/DGS interval/MS intervene/DGRS intervention/MS interview/DGMRSZ interviewed/AU interviewee/MS interviewer/MS interwoven intestinal/Y intestine/MS intimacy intimate/DGNPRSXY intimidate/DGNS intolerable/P intolerance/M intolerant/PY intonation/MS intoxicate/DGN intoxicated/Y intractable/P intractably intramural/Y intransigent/SY intraprocess intricacy/S intricate/PY intrigue/DGRS intriguing/Y intrinsic/S intrinsically introduce/DGRS introduction/MS introductory/Y introspect/V introspection/MS introspective/PY introvert/D intrude/DGRSZ intruder/MS intrusion/MS intrusive/PY intubate/DGNS intuition/MS intuitive/PY invade/DGRSZ invalid/PSY invalidity/MS invaluable/P invariable/P invariance invasion/MS invent/ADGSV invention/MS inventive/PY inventor/MS inventory/MS inverse/MNSVXY invert/DGRSZ invertebrate/MS invertible invested/A investigate/DGNSVX investigator/MS investment/AMS investor/MS invincible/P invisibility invitation/MS invite/DGRS invited/U inviting/Y invocation/MS invoice/DGMS invokable invoke/DGRSZ invoked/A invokes/A involve/DGRS involved/Y involvement/MS inward/PSY ioctl/MS iodine/M ion/MS Iran/M Iraq/M irate/PY ire/MS Ireland/M iris/S irk/DGS irksome/PY iron/DGJPRS ironical/PY ironwork/MRS irony/MS irrational/PSY irrationality/M irrecoverable/P irreducible irreducibly irreflexive irrefutable irregular/SY irregularity/MS irrelevance/S irrelevant/Y irrepressible irresistible/P irrespective/Y irresponsible/P irresponsibly irreversible irrigate/DGNSX irritate/DGNSVX irritating/Y is island/MRSZ isle/GMS islet/MS isn't isolate/DGNSX isometric/S isomorphic isomorphically isomorphism/MS isotope/MS ispell/M Israel/M Israeli/MS issuance issue/ADGRSZ isthmus it/MSU it'd it'll Italian/MS italic/S itch/GS ITCorp/M ITcorp/M item/MS iterate/ADGNSVX iterative/AY iterator/MS itinerary/S itself iv ivory/MS ivy/DMS ix jab/MS jabbed jabbing jack/DGMRS jacket/DS jacketed/U jade/DGMS jaded/PY jail/DGMRSZ jam/MS James jammed/U jamming/U janitor/MS January/MS Japan/M Japanese/M jar/MS jargon/M jarred jarring/Y jaunt/DGMS jaunty/PRY javelin/MS jaw/DMS jay/MS jazz/DGMS jealous/PY jealousy/MS jean/MS jeep/DGMSZ jeer/MRS Jefferson/M jelly/DGMS jellyfish/M jenny/M jerk/DGJRS jerky/MPRY jersey/MS jest/DGMRS jet/MS jetted jetting jewel/MRSZ jeweler/MS jig/MS Jill/M jingle/DGMRS job/MS jock/MS jocund/Y jog/S john/MS Johnnie/M Johnson/M join/DGRSZ joined/AU joint/DGMPRSY jointed/PY joke/DGMRSZ joking/Y jolly/DGRS jolt/DGMRS Josh/M jostle/DGRS jot/S jotted jotting journal/DGMS journalism/M journalist/MS journalistic journey/DGJS joust/DGRS joy/MS joyful/PY joyous/PY Jr jubilee/M judge/DGMRS judgment/MS judicable judicial/Y judiciary/MS judicious/IPY jug/MS juggle/DGRSZ juice/DGMRSZ juicy/PRTY Julie/MS July/MS Julys jumble/DGMS jump/DGMRSZ jumpy/PR junction/IMS juncture/MS June/MS jungle/DMS junior/MS juniper junk/DGRSZ junkie/S junky/S jurisdiction/MS juror/MS jury/IMS just/GPRY justice/IMS justifiable/U justifiably/U justified/U justifier/MS justify/DGNRSXZ jut juvenile/MS juxtapose/DGS Katherine/M keel/DGRS keen/GPRTY keep/GRSZ keeper/MS ken kennel/MS kept kerchief/DMS kernel/MS kerosene ketchup kettle/MS key/DGS keyboard/GMRS keyclick/MS keypad/MS keystroke/MS keyword/MS kHz kick/DGRSZ kid/MS kidded kidding/Y kidnap/MS kidney/MS kill/DGJRSZ killing/SY kilobit/MS kilobyte/MS kilogram/MS kin kind/PRSTY kindergarten kindhearted/PY kindle/ADGRS kindly/PR kindness/S kindred king/MSY kingdom/MS kingly/PR kinky/PR kinship kinsman kiss/DGJRSZ kit/DGMRS kitchen/MRS kite/DGRS kitsch kitten/DGMS kitty/S Klein/M Kleinrock/M Kline/M kludge/DGMRSZ kludger/MS kludgey klutz/MS klutzy/P knack/RS knapsack/MS knave/MS knead/DGRS knee/DS kneeing kneel/DGRS knell/MS knelt knew knife/DGS knight/DGSY knighthood knightly/P knit/AU knits knives knob/MS knock/DGRSZ knoll/MS knot/MS knotted knotting know/GRS knowable/U knowhow knowing/UY knowledge/S knowledgeable/P known/U knuckle/DGS Knuth/M kudos Kuenning/M lab/MS label/MS labels/A laboratory/MS labyrinth/S lace/DGRS laced/U lacerate/DGNSVX lack/DGRS lackadaisical/Y lacquer/DGRSZ lad/DGNS ladder/S laden/DG lady/MS lag/RSZ lagged lagoon/MS Lagrangian/M laid/I lain lair/MS lake/GMRS lamb/MRS lambda/MS lame/DGPRSTY lament/DGS lamentable/P lamentation/MS lamented/U laminar lamp/MRS Lamport/M lance/DGRSZ land/DGJRSZ landlady/MS landlord/MS landmark/MS landowner/MS landscape/DGRSZ landscaper/MS lane/MS language/MS languid/PY languish/DGRS languishing/Y lantern/MS lap/MS lapel/MS laps/DGRS lapse/ADGRS lard/DGRS large/PRTY lark/MRS larva/S larvae laser/MS lash/DGJRS lashed/U lass/MS last/DGRSY lasting/PY latch/DGS late/DPRTY latency/MS latent/SY lateral/Y LaTeX latex/MS LaTeX's lath/GRS lather/DGR lathes Latin/M latitude/MS latrine/MS latter/MY lattice/DGMS laugh/DGRSZ laughable/P laughably laughing/Y laughter/S launch/DGJRSZ launder/DGJRS laundered/U laundry/S laurel/MS Laurie/M lava lavatory/MS lavender/DG lavish/DGPY law/MS lawful/PUY lawless/PY lawn/MS lawsuit/MS lawyer/MSY lay/GRSZ layer/DGS layman/M laymen layoffs layout/MS lazed lazing lazy/DGPRTY lead/DGJNRSZ leaded/U leaden/PY leader/MS leadership/MS leaf/DGS leafless leaflet/MS leafy/RT league/DGRSZ leak/DGRS leakage/MS lean/DGJPRSTY leap/DGRS leapt learn/DGJRSZ learned/PY learns/A lease/ADGS leash/MS least leather/DGS leathern leave/DGJRSZ leaven/DG leavened/U lecture/DGMRSZ led LED's ledge/RSZ LEDs lee/RSZ leech/MS leer/DGS left/S leftist/MS leftmost leftover/MS leftward/S leg/S legacy/MS legal/SY legality/S legend/MS legendary/Y legged leggings legibility legible legibly legion/MS legislate/DGNSVX legislative/Y legislator/MS legislature/MS legitimacy legitimate/DGNSY leisure/DY leisurely/P lemma/MS lemon/MS lemonade lend/GRSZ length/NSXY lengthen/DGRS lengthwise lengthy/PRY leniency lenient/Y lens/DGJMRSZ lent/A Lenten lentil/MS leopard/MS leprosy less/GNRSX lessen/DGS lesson/DGMS lest/R let/IMS letter/DGRS lettered/U letting lettuce levee/DMS level/PSY lever/DGMS leverage/DGS levy/DGRS lewd/PY lexical/Y lexicographic lexicographical/Y lexicon/MS liability/MS liable/AP liaison/MS liar/MS liberal/PSY liberate/DGNS liberator/MS liberty/MS libido librarian/MS library/MS libretti license/ADGRS licensed/AU licensee/MS lichen/DMS lick/DGRS licked/U lid/MS lie/DRS lied/R liege lien/MS lieu lieutenant/MS life/MRZ lifeless/PY lifelike/P lifelong lifestyle/S lifetime/MS lift/DGRSZ light/DGMNPRSTXYZ lighten/DGRS lighter/MS lighthouse/MS lightning/DMS lightweight/S like/DGJPRSTY likelihood/SU likely/PRT liken/DGS likeness/MS likewise lilac/MS lily/DMS limb/DRSZ limber/DGPSY limbers/U lime/DGMS limestone limit/DGRSZ limitability limitably limitation/MS limited/PSY limitedly/U limp/DGPRSY linden line/DGJMRSZ linear/Y linearity/S lined/U linen/MS linger/DGRS lingering/Y linguist/MS linguistic/S linguistically link/DGJRSZ linkage/MS linking/AU linoleum linseed lint/RS lion/MS lioness/MS lip/MS lipstick liquefy/DGRSZ liquid/MPSY liquidation/MS liquidity liquor/DGMS lisp/DGMRS list/DGJNRSXZ listed/U listen/DGRSZ listener/MS listing/MS lit/U literacy literal/PSY literary/PY literate/NPY literature/MS lithe/PY litigate/DGNS litigator litter/DGRS little/PRT livable/P livably live/DGHJPRSTYZ livelihood lively/PRTY liven/DG livery/D living/PSY Liz/M lizard/MS load/DGJRSZ loaf/DGRSZ loan/DGRS loath/DGR loathe/DGRS loathsome/PY loaves lobby/DGS lobe/DMS lobster/MS local/SY locality/MS locate/DGNRSVX locative/S locator/MS loci lock/DGJRSZ lockout/MS lockup/MS locomotion locomotive/MSY locus/M locust/MS lodge/DGJRSZ lodger/MS loft/MRS lofty/PRY log/MS logarithm/MS logarithmically logged/U logger/MS logging logic/MS logical/PSY logician/MS login/S logistic/S logout loin/MS loiter/DGRS lone/PRYZ lonely/PRTY lonesome/PY long/DGJPRSTY longing/SY longitude/MS longword/MS look/DGRSZ lookahead lookout/S lookup/MS loom/DGS loon loop/DGMRS loophole/DGMS loose/DGPRSTY loosen/DGRS loot/DGRS lord/GMSY lordly/PR lordship lore lorry/S lose/GJRSZ loss/MS lossy/RT lost/P lot/MS lottery/S lotus loud/NPRTY louden/DG loudspeaker/MS lounge/DGRSZ lousy/PRY lovable/P lovably love/DGMRSYZ loved/U lovely/PRSTY lover/GMSY loving/PY low/GPRSTYZ lower/DGS lowland/RS lowly/PRTY loyal/Y loyalty/MS lubricant/MS lubrication luck/DS luckless lucky/PRTY ludicrous/PY Ludwig/M luggage lukewarm/PY lull/DS lullaby/MS lumber/DGRS luminous/PY lump/DGNRS lunar lunatic/S lunch/DGRS luncheon/MS lung/DGRS lurch/DGRS lure/DGRS lurk/DGRSZ luscious/PY lust/DGS lustrous/PY lusty/PRY lute/DGMS luxuriant/Y luxurious/PY luxury/MS lying/SY Lyle/M lymph lynch/DRS Lynn/M lynx/MS lyre/MS lyric/S ma'am macaroni/M MacDraw/M mace/DGRS machine/DGMS machinery/S MacIntosh/M MacPaint/M macro/MS macroeconomics macromolecule/MS macroscopic mad/PY madam/S madden/DG maddening/Y madder maddest made/AU mademoiselle/S madman madras Mafia/M magazine/DGMS maggot/MS magic magical/Y magician/MS magistrate/MS magnesium/S magnet/MS magnetic/S magnetically magnetism/MS magnificence magnificent/Y magnified/U magnify/DGNRSXZ magnitude/MS mahogany maid/MNSX maiden/SY maidenly/P mail/DGJMRSZ mailable mailbox/MS mailer/AMS maim/DGMRSZ maimed/P maimer/MS main/SY mainframe/MS mainland/RZ mainstay maintain/DGRSZ maintainability maintainable/U maintained/U maintainer/MS maintenance/MS majestic majesty/MS major/DGS majority/MS makable make/GJRSZ makefile/S maker/MS makeshift/S makeup/S malady/MS malaria male/MPS malefactor/MS malfunction/DGS Malibu/M malice malicious/PY maliciously/U malignant/Y mall/MS mallet/MS malnutrition malt/DGS mama mamma/MS mammal/MS mammoth man/DMSY manage/DGRSZ manageable/P managed/U management/MS manager/MS managerial/Y mandate/DGS mandatory/SY Mandelbrot/M mandible mandolin/MS mane/DMS manger/MS mangle/DGRS Manhattan/M manhood maniac/MS manicure/DGS manifest/DGPSY manifestation/MS manifold/MPRSY Manila/M manipulability manipulable manipulatable manipulate/DGNSVX manipulative/P manipulator/MS manipulatory mankind manly/PRT manned/U manner/DSY mannered/U mannerly/PU manning manometer/MS manor/MS manpower mansion/MS mantel/MS mantissa/MS mantle/DGMS manual/MSY manufacture/DGRSZ manufacturer/MS manure/DGRSZ manuscript/MS many map/MS maple/MS mappable mapped/AU mapping/MS maps/AU mar/S marble/DGRS march/DGRSZ marcher/MS mare/MS margin/DGMS marginal/SY Marianne/M marigold/MS marijuana/M marinate/DGS marine/RSZ mariner/MS maritime/R mark/DGJMRSZ markable/A marked/AU markedly market/DGJRS marketability marketable marketplace/MS marquis/S marriage/MS marriages/A married/AU marrow/S marry/DGS marsh/MS marshal/SZ mart/NSX martial/DGSY martyr/MS martyrdom marvel/S Mary/M Maryland/MZ masculine/PY masculinity mash/DGJRSZ mask/DGJRS masked/U masochist/MS mason/DGMS masonry masquerade/GRS mass/DGSV Massachusetts massacre/DGRS massage/DGRS Massey/M massing/R massive/PY mast/DRSZ master/DGJMSY masterful/PY masterly/P masterpiece/MS mastery masturbate/DGNS mat/DGJMRS match/DGJRSZ matchable/U matched/U matchless/Y matchmaker/MS matchmaking/M mate/DGJMRS mated/U material/PSY materialism/M maternal/Y mates/IU math/S mathematical/Y mathematician/MS mathematics matrices matriculation matrimony matrix/S matron/Y Matt/M matted matter/DGS mattress/MS maturation mature/DGPRSY maturity/S max maxim/MS maximal/Y maximum/SY Maxtor/M may/T maybe mayhap mayhem mayonnaise mayor/MS mayoral maze/DGMRS mazed/PY mazedness/S McElhaney/M McKenzie/M McMartin/M me/D mead/S meadow/MS meager/PY meal/MS mean/GJPRSTY meander/DGJS meaning/MS meaningful/PY meaningless/PY meant/U meantime meanwhile measles measurable/U measurably measure/DGRS measured/Y measurement/MS meat/MS mechanic/MS mechanical/SY mechanism/MS medal/MS medallion/MS meddle/DGRS media/MS median/MSY mediate/DGNPSVXY medic/MS medical/Y medicinal/Y medicine/MS medieval/MSY meditate/DGNSVX meditative/PY medium/MS Medusa/M meek/PRTY meet/GJRSY megabit/MS megabyte/MS megaword/S melancholy meld/GS Melissa/M mellow/DGPSY melodious/PY melodrama/MS melody/MS melon/MS melt/DGRS melting/Y member/DMS membership/MS membrane/DMS memo/MS memoir/S memorability memorable/P memoranda memorandum/S memorial/SY memory/MS memoryless men/MS menace/DGS menacing/Y menagerie/S mend/DGRS menial/SY mens/DGS mental/Y mentality/S mention/DGRSZ mentionable/U mentioned/U mentor/DGMS menu/MS mercenary/MPSY merchandise/DGRS merchant/MS merciful/PY mercifully/U merciless/PY mercury/S mercy/S mere/TY merge/DGRSZ meridian/S merit/DGS meritorious/PY merriment/S merry/PRTY mesh/DGS meshed/U mess/DGS message/DGMS messenger/MS messiah/S messieurs messy/PRTY met/DGRZ meta metacircular metacircularity metal/MS metalanguage/S metallic metallurgy metamathematical metamorphosis metaphor/MS metaphorical/Y metaphysical/Y metaphysics metavariable mete/DGRSZ meteor/MS meteoric meteorology meter/DGMS method/MS methodical/PY methodist/MS methodological/Y methodologists methodology/MS metric/MS metrical/Y metropolis metropolitan mew/DS MHz mica mice Michigan/M microbicidal microbicide microcode/DGS microcomputer/MS microeconomics microfilm/DMRS microinstruction/MS microphone/GS Microport/M microprocessing microprocessor/MS microprogram/MS microprogrammed microprogramming microscope/MS microscopic microsecond/MS Microsoft/M microstore microwave/MS microword/S mid midday middle/DGJRS middling/SY midnight/SY midpoint/MS midst/S midsummer midway/S Midwest midwinter/Y mien/S miff/DGS might/S mighty/PRTY migrate/DGNSVX mild/NPRTY mildew/S mile/MRS mileage/S milestone/MS militant/PSY militarism/S military/MSY militia/S milk/DGRSZ milkmaid/MS milky/PRY mill/DGRSZ miller/MS millet million/DHS millionaire/MS millipede/MS millisecond/MS millstone/MS Mimi/M mimic/S mimicked mimicking mince/DGRSZ mincing/Y mind/ADGRSZ minded/P mindful/PY mindless/PY mine/DGNRSXZ mineral/MS Ming mingle/DGS miniature/DGMS minicomputer/MS minimal/Y minimum/S minister/DGMS ministry/MS mink/MS Minnesota/M minnow/MS minor/DGMS minority/MS minstrel/MS mint/DGRS minus/S minute/DGPRSTY miracle/MS miraculous/PY mire/DGS mirror/DGS mirth/S misapply/DGNRS misbehaving miscalculation/MS miscellaneous/PY mischief mischievous/PY miscommunicate/DNS misconception/MS misconstrue/DGS misdirect/DS misdirection miser/SY miserable/P miserably miserly/P misery/MS misfeature misfit/MS misfortune/MS misgiving/SY misguide/DGRS misguided/PY mishap/MS misinform/DGS misinformation/M misinterpret/DGRSZ misjudgment/MS mislead/GJRS misleading/SY misled mismatch/DGS misnomer/D misperceive/DS misplace/DGS misread/GRS misrepresentation/MS miss/DGSV missile/MS mission/DGRS missionary/MS missions/A missive/S misspell/DGJS misstate/DGRS mist/DGRSZ mistakable/U mistake/GRS mistaken/Y mistaking/Y mister/DGS mistreat/DGS mistress/MSY mistrust/DGRS misty/PRTY mistype/DGS misunderstand/GJRSZ misunderstanding/MS misunderstood misuse/DGRS MIT MIT's mite/S mitigate/DGNSVX mitigation/MS mitten/MS mix/DGRSZ mixed/AU mixture/MS ml mnemonic/MS mnemonically moan/DGS moat/MS mob/MS mobility moccasin/MS mock/DGRSZ mockery mocking/Y modal/Y modality/MS mode/ST model/MS models/A modem/S moderate/DGNPSXY moderated/U moderator/MS modern/PSY modernity modest/Y modesty modifiability modifiable/P modified/U modify/DGNRSXZ modular/Y modularity/S modulate/DGNSX modulator/AMS module/MS modulo modulus modus moist/NPY moisten/DGR moisture/S molasses mold/DGRSZ molder/DGS molding/A moldy/PR mole/ST molecular/Y molecule/MS molest/DGRSZ molested/U Molly/M molten mom/MS moment/MSY momentary/PY momentous/PY momentum/S monarch monarchs monarchy/MS monastery/MS monastic Monday/MS monetary/Y money/DMRS monitor/DGMS monk/MS monkey/DGS mono/M monochrome/S monograph/MS monolithic monopoly/MS monotheism monotone monotonic monotonically monotonicity monotonous/PY monotony monster/MS monstrous/PY Montana/M Montanan/M month/MSY monthly/S monument/MS monumental/Y mood/MS moody/PRY moon/DGMS moonlight/DGRS moonlit moonshine/R moor/DGJMS Moore/M moose moot/D mop/DGRS moral/MSY morale/S morality/S morass/S morbid/PY more/NS moreover morn/GJ morning/MS morphological/Y morphology morrow morsel/MS mortal/SY mortality mortar/DGS mortgage/DGMRS mortified/Y mortify/DGNRSX mosaic/MS Moslem/MS mosquito/S mosquitoes moss/MS mossy/R most/Y motel/MS moth/RSZ mother/DGMRSYZ motherboard/MS motherly/P motif/MS motion/DGRS motionless/PY motivate/DGNSVX motivated/U motivational/Y motive/DGS motley motor/DGS motorcar/MS motorcycle/MS motorist/MS Motorola/M motto/S mottoes mould/DGRS moulder/G moulds/A mound/DS mount/DGJRS mountain/MS mountaineer/GS mountainous/PY mourn/DGRSZ mournful/PY mourning/Y mouse/GRS mouth/DGRS mouthful movable/AP move/DGJRSZ moved/AU movement/MS movie/MS moving/SY mow/DGRSZ Mr/S Ms much/P muck/DGRS mud/S muddle/DGRSZ muddy/DGPRY muff/MS muffin/MS muffle/DGRSZ mug/MS mulberry/MS mule/GMS Multibus/M multicellular multicomponent Multics multidimensional multilevel multinational multiple/MS multiplex/DGRSZ multiplexor/MS multiplicand/MS multiplicative/SY multiplicity multiply/DGNRSXZ multiprocess/G multiprocessor/MS multiprogram multiprogrammed multiprogramming/S multistage multitasking multitude/MS multiuser multivariate mumble/DGJRSZ mummy/MS munch/DGRS mundane/PY municipal/Y municipality/MS munition/S Munsey/M mural/S murder/DGRSZ murderous/PY murky/PRY murmur/DGRS murmuring/U muscle/DGS muscular/Y muse/DGJRS museum/MS mushroom/DGS mushy/PRY music/MS musical/SY musician/SY musing/SY musk/S musket/MS muskrat/MS Muslim/MS muslin mussel/MS must/RSZ mustache/DS mustard/S muster/DGS musty/PRY mutability mutable/P mutate/DGNSVX mutator/S mute/DGPRSTY muted/Y mutilate/DGNSX mutiny/MS mutter/DGRSZ mutton mutual/Y muzzle/DGMRS my/S myriad myrtle myself mysterious/PY mystery/MS mystic/MS mystical/Y mysticism/S myth/MS mythical/Y mythology/MS nag/MS nail/DGRS naive/PRY naivete naked/PY name/DGMRSYZ nameable/U named/AU nameless/PY namesake/MS nanosecond/MS nap/MS napkin/MS narcissistic narcissus/S narcotic/S narrative/MSY narrow/DGPRSTY narrowing/P nasal/Y nasty/PRSTY nation/MS national/SY nationalist/MS nationality/MS nationwide native/PSY nativity natural/PSY naturalism naturalist nature/DMS natured/A natures/A naught/MS naughty/PRY naval/Y navigable/P navigate/DGNSX navigator/MS navy/MS nay Nazi/MS near/DGPRSTY nearby neat/NPRSTY Nebraska/M Nebraskan/M nebula necessarily/U necessary/SY necessitate/DGNSX necessity/S neck/DGRS necklace/MS necktie/MS need/DGRSY needed/U needful/PY needle/DGRSZ needless/PY needlework/R needn't needy/PR negate/DGNRSVX negated/U negative/DGPSY negator/S neglect/DGRS negligence negligible negotiable/A negotiate/DGNSX negotiated/A negotiates/A Negro/M Negroes neigh neither neophyte/S Nepal/M nephew/MS nerve/DGMS nervous/PY nest/DGRS nestle/DGRS net/MS nether Netherlands netted netting nettle/DGS network/DGMS neural/Y neurobiology/M neurological/Y neurologists neuron/MS neutral/PSY neutrality/S neutrino/MS never nevertheless new/PRSTY newborn/S newcomer/MS newline/MS newsgroup/MS newsletter/MS newsman newsmen newspaper/MS newswire newt/S Newtonian next NFS nibble/DGRSZ nice/PRTY nicety/S niche/GS nick/DGRS Nick's nickel/MS nicker/DG nickname/DRS nicotine niece/MS nifty/RS nigh night/DMSYZ nightfall nightgown nightingale/MS nightmare/MS nil/Y nimble/PRT nimbly nine/S nineteen/HS ninety/HS ninth nip/S nitrogen nix/DGRS no nobility/S noble/PRST nobleman nobly nobody/MS nocturnal/Y nod/MS nodded nodding node/MS noise/DGS noiseless/Y noisy/PRTY nomenclature/S nominal/Y nominate/DGNSVX nominated/A nominates/A nomination/MS nominative/Y non nonblocking nonconservative noncyclic nondecreasing nondescript/Y nondestructively nondeterminacy nondeterminate/Y nondeterminism nondeterministic nondeterministically nondisclosure/S none/S nonempty nonetheless nonexistence nonexistent nonextensible nonfunctional noninteracting noninterference nonintuitive nonlinear/Y nonlinearity/MS nonlocal nonnegative nonorthogonal nonorthogonality nonperishable nonprocedural/Y nonprogrammable nonprogrammer/MS nonsense nonsensical/PY nonspecialist/MS nonstandard nontechnical/Y nonterminal/MS nonterminating nontermination nontrivial/Y nonuniform nonzero nook/MS noon/GS noonday noontide nope nor/H norm/DMS normal/SY normalcy normality north/GMRSZ northeast/R northeaster/Y northeastern norther/SY northern/RYZ northward/S northwest/R northwester/Y northwestern nose/DGS nostril/MS not/DGR notable/PS notably notation/MS notational/Y notch/DGS note/DGNRSX notebook/MS noted/PY noteworthy/PY nothing/PS notice/DGS noticeable/U noticeably/U noticed/U notify/DGNRSXZ notorious/PY notwithstanding noun/MS nourish/DGRS nourished/U nourishment novel/MS novelist/MS novelty/MS November/MS novice/MS now/S nowadays nowhere/S nroff/M nuances nuclear nucleotide/MS nucleus/S nuisance/MS null/DS nullify/DGNRSZ numb/DGPRSYZ number/DGRS numbered/AU numberless numbing/Y numeral/MSY numerator/MS numeric/S numerical/Y numerous/PY nun/MS nuptial/S nurse/DGMRS nursery/MS nurture/DGRS nut/MS nutcracker/MS nutrition/M nymph/S o'clock oak/NS oar/DGMS oasis oat/NRS oath/S oatmeal Obama/M obedience/S obedient/Y obey/DGRS obfuscate/DGNRSX object/DGMSV objection/MS objectionable/P objective/PSY objector/MS oblate/NPXY obligate/DGNSXY obligation/MS obligatory/Y oblige/DGRS obliging/PY oblique/PY obliterate/DGNSVX obliterative/Y oblivion/S oblivious/PY oblong/PY obscene/Y obscure/DGPRSY obscurity/S observable/U observance/MS observant/Y observation/MS observatory/S observe/DGRSZ observed/U observer/MS observing/Y obsession/MS obsolescence obsolete/DGPSY obstacle/MS obstinacy obstinate/PY obstruct/DGRSV obstruction/MS obstructionist obstructive/PY obtain/DGRS obtainable/U obtainably obviate/DGNSX obvious/PY occasion/DGJS occasional/Y occlude/DGS occlusion/MS occupancy/S occupant/MS occupation/MS occupational/Y occupied/U occupy/DGRSZ occur/S occurred occurrence/MS occurring ocean/MS octal/S octave/S October/MS octopus odd/PRSTY oddity/MS ode/DMRS Oderberg/MS odious/PY odorous/PY Oedipus OEM/S OEM's of off/GRSZ offend/DGRSZ offender/MS offensive/PSY offer/DGJMRSZ office/MRSZ officer/DMS official/MSY officially/U officiate/DGNSX officio officious/PY offset/MS offspring/S oft/N often/R oftentimes oh/S Ohio/M oil/DGRSZ oilcloth oily/PRTY ointment/S OK okay/MS Oklahoma/M Oklahoman/M old/NPRT olive/MRS Oliver's omen/MS ominous/PY omission/MS omit/S omitted omitting omnipresent/Y omniscient/Y omnivore on/RSY onanism once/R one/MNPRSX onerous/PY oneself ongoing online only/P onset/MS onto onward/S oops ooze/DGS opacity/S opal/MS opaque/PY opcode/MS open/DGJPRSTYZ opened/AU opening/MS opera/MS operable/I operand/MS operandi operate/DGNSVX operational/Y operative/PSY operator/MS opiate/S opinion/MS opium opponent/MS opportune/IY opportunism opportunistic opportunistically opportunity/MS oppose/DGRSZ opposer/MS opposite/NPSXY oppress/DGSV oppression oppressive/PY oppressor/MS opt/DGS optic/S optical/Y optimal/Y optimality optimism optimistic optimistically optimum option/MS optional/Y or/M oracle/MS oral/SY orange/MS oration/MS orator/MS oratory/MS orb orbit/DGRSZ orbital/SY orchard/MS orchestra/MS orchid/MS ordain/DGRS ordeal/S order/DGJRSY ordered/AU orderly/PS ordinal/MS ordinance/MS ordinary/PSY ordinate/DGNSX ore/MNS organ/MS organic/S organism/MS organist/MS orgy/MS orient/DGS orientation/MS oriented/A orifice/MS origin/MS original/MSY originality originals/U originate/DGNSVX originative/Y originator/MS ornament/DGS ornamental/Y ornamentation/S orphan/DGS orthodox/SY orthodoxly/U orthogonal/Y orthogonality Orwell/M OS OS's oscillate/DGNSX oscillation/MS oscillator/MS oscillatory oscilloscope/MS ostrich/MS other/MPS otherwise otter/MS ought/S ounce/S our/S ourself ourselves out/DGJPRS outbreak/MS outburst/MS outcast/MS outcome/MS outcry/S outdoor/S outermost outfit/MS outgoing/PS outgrew outgrow/GHS outgrown outing/MS outlast/S outlaw/DGS outlay/MS outlet/MS outline/DGS outlive/DGS outlook outperform/DGS outpost/MS output/MS outputting outrage/DGS outrageous/PY outright/Y outrun/S outset outside/MRSZ outsider/MPS outskirts outstanding/Y outstretched outstrip/S outstripped outstripping outvote/DGS outward/PSY outweigh/DGS outwit/S outwitted outwitting oval/MPSY ovary/MS oven/MS over/GSY overall/MS overblown overboard overcame overcast/G overcoat/GMS overcome/GRS overcrowd/DGS overdone overdose/DGMS overdraft/MS overdraw/GS overdrawn overdrew overdue overemphasis overestimate/DGNSX overexpose/DGS overflow/DGS overhang/GS overhaul/DGJRS overhead/S overhear/GRS overheard overjoy/D overkill/M overlaid overland overlap/MS overlapped overlapping overlay/GS overload/DGS overlook/DGS overly/G overnight/RSZ overpower/DGS overpowering/Y overprint/DGS overproduction overridden override/GRS overrode overrule/DGS overrun/S overseas oversee/RSZ overseeing overshadow/DGS overshoot/GS overshot oversight/MS oversimplify/DGNSX overstate/DGS overstatement/MS overstocks overt/PY overtake/GRSZ overtaken overthrew overthrow/GS overthrown overtime overtip/S overtipped overtipping overtone/MS overtook overture/MS overturn/DGS overuse/DGS overview/MS overweight overwhelm/DGS overwhelming/Y overwork/DGS overwrite/GS overwritten overwrote overzealous/P ovum owe/DGS owl/MRS own/DGRSZ owner/MS ownership/S ox/N oxidation oxide/MS oxygen/S oyster/GMS pa/HS pace/DGMRSZ pacific pacify/DGNRSX pack/DGRSZ package/DGJMRSZ packaged/AU packages/AU Packard/MS packet/DGMS packs/AU pact/MS pad/MS padded/U padding/S paddle/DGRS paddy/S pagan/MS page/DGMRSZ pageant/MS paged/U pager/MS paginate/DGNSX paid/AU pail/MS pain/DGS painful/PY painless/PY painstaking/Y paint/DGJRSZ painted/AU painter/SY painterly/P pair/DGJMS paired/AU pairwise pal/DGMRSTY palace/MS palate/MS pale/DGPRSTY Palestinian palfrey pall/G palliate/NV palliative/SY pallid/PY palm/DGRS pamphlet/MS pan/MS panacea/MS pancake/DGMS pancreas panda/MS pandemonium pander/DGRS pane/MS panel/MS pang/MS panic/MS panned panning pansy/MS pant/DGS panther/MS pantry/MS panty/S papa papal/Y paper/DGJMRSZ paperback/MS paperwork paprika par/DGJRS parachute/DGMRS parade/DGRS paradigm/MS paradise paradox/MS paradoxical/PY paraffin/S paragon/MS paragraph/DGRS parallax/M parallel/S parallelism parallelogram/MS paralysis parameter/MS parameterless parametric paramilitary paramount paranoia paranoid parapet/DMS paraphrase/DGRS parasite/MS parasitic/S parcel/S parch/DGS parchment pardon/DGRSZ pardonable/P pardonably/U pare/DGJRS parent/GMS parentage parental/Y parentheses parenthesis parenthetical/Y parenthood parish/MS parity/S park/DGRSZ parliament/MS parliamentary/U parole/DGS parrot/DGMS parry/DG pars/DGJRSZ parse/DGJRSZ parsed/U parser/MS parsimony parsley parson/MS part/DGJRSYZ partake/GRS partial/SY partiality participant/MS participate/DGNSVX participatory particle/MS particular/SY partisan/MS partition/ADGRS partitioned/AU partner/DGMS partnership/S partridge/MS party/DGMS Pascal/M pass/DGRSVZ passage/DGMS passageway/MS passe/DGNRSVXZ passenger/MSY passionate/PY passive/PSY passivity passport/MS password/DMS past/DGMPS paste/DGS pastime/MS pastor/MS pastoral/PY pastry/S pasture/DGMRS pat/DMNRS patch/DGRS patchwork/RZ patent/DGMRSYZ patentable paternal/Y path/S pathetic pathname/MS pathological/Y pathologist/MS pathology/S pathos pathway/MS patience patient/MSY patriarch patriarchs patrician/MS Patrick/M patriot/MS patriotic/U patriotism patrol/MS patron/MSY patronage patter/DGJRS pattern/DGS patty/MS paucity pause/DGS pave/DGRS paved/U pavement/MS pavilion/MS paving/A paw/DGS pawn/DGMRS pay/GRSZ payable/A paycheck/MS payer/MS payment/MS payments/A payoff/MS payroll/S PC PC's PCs PDP pea/MS peace/S peaceable/P peaceful/PY peach/MS peacock/MS peak/DGS peaked/P peal/ADGS peanut/MS pear/SY pearl/MRS pearly/R Pearson/M peasant/MS peasantry peat/A pebble/DGMS peck/DGRS peculiar/SY peculiarity/MS pedagogic/S pedagogical/Y pedantic peddler/MS pedestal/S pedestrian/MS pediatric/S peek/DGS peel/DGRS peeler/M peep/DGRSZ peer/DGMS peerless/PY peeve/DGMSZ peg/MS pellet/DGMS pelt/GRS pen/S penalty/MS penance/DGS pence pencil/S pend/DGS pendulum/MS penetrate/DGNSVX penetrating/Y penetrative/PY penetrator/MS penguin/MS peninsula/MS penitent/Y penitentiary penned penniless penning Pennsylvania/M penny/MS pens/V pension/DGRSZ pensive/PY pent/A pentagon/MS penthouse/MS peon/MS people/DGMS pep pepper/DGRS peppercorn/MS per perceivable perceivably perceive/DGRSZ perceived/U percent/S percentage/S percentile/S perceptible perceptibly perception/S perceptive/PY perceptual/Y perch/DGS perchance percolate/DGNS percutaneous/Y peremptory/PY perennial/SY perfect/DGPRSVY perfection/S perfectionist/MS perfective/PY perforce perform/DGRSZ performance/MS performed/U performer/MS perfume/DGRS perhaps peril/MS perilous/PY period/MS periodic periodical/SY peripheral/SY periphery/MS perish/DGRSZ perishable/MS perishing/Y permanence permanent/PSY permeate/DGNSVX permissibility permissible/P permissibly permission/S permissive/PY permit/MS permitted permitting permutation/MS permute/DGS perpendicular/SY perpetrate/DGNSX perpetrator/MS perpetual/Y perpetuate/DGNS perplex/DGS perplexed/Y perplexity/S persecute/DGNSV persecutor/MS perseverance persevere/DGS persist/DGRS persistence persistent/Y person/MS personable/P personage/MS personal/SY personality/MS personify/DGNRSX personnel perspective/MSY perspicuous/PY perspiration/S persuadable persuade/DGRSZ persuaded/U persuasion/MS persuasive/PY persuasively/U pertain/DGS pertinent/Y perturb/DGS perturbation/MS perturbed/U perusal peruse/DGRSZ pervade/DGS pervasive/PY pervert/DGRS perverted/PY pessimistic pest/RSZ pester/DGS pestilence/S pet/RSZ petal/MS peter/DS Peter's petition/DGRSZ petitioner/MS Petkiewicz/M petroleum petted petter/MS petticoat/DMS pettiness/S petting petty/PRTY pew/MS pewter/R phantom/MS phase/DGRSZ PhD pheasant/MS phenomena phenomenal/Y phenomenological/Y phenomenology/S phenomenon philosopher/MS philosophic philosophical/Y philosophy/MS phone/DGMS phoneme/MS phonemic/S phonetic/S phonograph/RS phosphate/MS phosphoric photo/MS photocopier/MS photocopy/DGRSZ photograph/DGRSZ photographic photography phrase/ADGJS phyla phylum physic/S physical/PSY physician/MS physicist/MS physiological/Y physiology physique/D pi/DHRZ piano/MS piazza/MS picayune pick/DGJRSZ picker/GS picket/DGRSZ pickle/DGS pickup/MS picnic/MS pictorial/PY picture/DGS picturesque/PY pie/DRSZ piece/DGRS piecemeal piecewise pierce/DGJRSZ piercer/MS piercing/MSY piety/S pig/MS pigeon/MS pigment/DS pike/DGMRS pile/DGJSZ pilferage pilgrim/MS pilgrimage/MS pill/MS pillage/DGRS pillar/DS pillow/MS pilot/DGMS pin/DGMS pinch/DGRS pine/DGNSX pineapple/MS ping/DGMRS pinion/DS pink/DGPRSTY pinnacle/DGMS pinned pinning/S pinpoint/DGS pint/MRS pioneer/DGS pious/PY pipe/DGJRSZ pipeline/DGS piping/SY pique/DG pirate/DGMS piss/DGRS pistil/MS pistol/MS piston/MS pit/MS pitch/DGRSZ piteous/PY pitfall/MS pith/DGS pithy/PRTY pitiable/P pitiful/PY pitiless/PY pitted pity/DGMRSZ pitying/Y pivot/DGS pivotal/Y pixel/MS placard/MS place/ADGRS placed/AU placement/AMS placid/PY plague/DGRS plagued/U plaid/DMS plain/PRSTY plaintiff/MS plaintive/PY plait/GMRS plan/DGMRSZ planar planarity Planck/M plane/DGMRSZ planet/MS planetary plank/GS planned/U planner/MS planning plant/DGJRSZ plantation/MS planted/A plasma plaster/DGRSZ plastic/SY plasticity plate/DGJRSZ plateau/MS platelet/MS platen/MS platform/MS platinum platter/MS plausibility plausible/P play/DGRSZ playable/U player/MS playful/PY playground/MS playmate/MS plaything/MS playwright/MS plea/MS plead/DGJRS pleader/A pleading/SY pleas/DGRSZ pleasant/PUY please/DGRSYZ pleased/U pleaser/MS pleasing/PY pleasurable/P pleasure/DGS plebeian/Y plebiscite/MS pledge/DGRS plenary plenteous/PY plentiful/PY plenty/S pleurisy plight/R plod/S plot/MS plotted plotter/MS plotting ploy/MS pluck/DGR plucky/PRY plug/MS plugged/U plugging/U plugs/U plum/DGMS plumage/DS plumb/DGMRSZ plumbed/U plume/DGS plummeting plump/DNPRY plunder/DGRSZ plunge/DGRSZ plural/SY plurality plus/S plush/PY ply/DGNRSZ pneumonia poach/DGRSZ pocket/DGS pocketbook/MS pod/MS poem/MS poet/MS poetic/S poetical/PY poetry/MS point/DGRSZ pointed/PY pointer/MS pointless/PY pointy/RT poise/DGS poison/DGRS poisonous/PY poke/DGRS Poland/M polar polarity/MS pole/DGRS polemic/S police/DGMS policeman/M policemen/M policy/MS polish/DGRSZ polished/U polite/PRTY politic/S political/Y politician/MS poll/DGNRS polled/U pollute/DGNRSV polluted/U polo polygon/MS polymer/MS polynomial/MS polyphonic pomp pompous/PY pond/RSZ ponder/DGRS ponderous/PY pony/MS poof pool/DGS poor/PRTY pop/MS pope/MS Popek/MS poplar popped popping poppy/DMS populace/MS popular/Y popularity/U populate/DGNSX populous/PY porcelain porch/MS porcupine/MS pore/DGS pork/R porn pornographic porridge port/DGRSYZ portability portable/MS portably portal/MS portamento/M portend/DGS porter/GS portion/DGMS portly/PR portrait/MS portray/DGRS pose/DGRSZ posit/DGSV position/ADGS positional positive/PSY possess/ADGSV possessed/PY possession/MS possessional possessive/MPSY possessor/MS possibility/MS possible/S possibly possum/MS post/DGJRSZ postage postal postcard/MS postcondition/S poster/MS posterior/Y posterity postman postmaster/MS postpone/DGRS postscript/MS postulate/DGNSX posture/DGMRS pot/MS potash potassium potato potatoes potent/Y potentate/MS potential/SY potentiality/S potentiating potentiometer/MS potted potter/MRS pottery/S potting pouch/DMS poultry pounce/DGS pound/DGRSZ pour/DGRSZ pouring/Y pout/DGRS poverty powder/DGRS Powell/M power/DGS powerful/PY powerless/PY pox/S practicable/P practicably practical/PY practicality/S practice/MS practician practitioner/MS pragmatic/S pragmatically prairie/S praise/DGRSZ praising/Y prance/DGRS prancing/Y prank/MS prate/DGRS prating/Y pray/DGRSZ prayer/MS preach/DGRSZ preaching/Y preallocate/DGNSX preallocation/MS preallocator/S preassign/DGS precarious/PY precaution/DGMS precede/DGS precedence/MS precedent/DS precedented/U precept/MSV preceptive/Y precinct/MS precious/PY precipice precipitate/DGNPSVY precipitous/PY precise/NPXY preclude/DGS precocious/PY preconceive/D preconception/MS precondition/DS precursor/MS predate/DGNS predecessor/MS predefine/DGS predefinition/MS predetermine/DGRS predicament predicate/DGNSVX predict/DGSV predictability/U predictable/U predictably/U predicted/U prediction/MS predictive/Y predictor/S predominant/Y predominate/DGNSY preempt/DGSV preemption preemptive/Y preface/DGRS prefer/S preferable/P preferably preference/MS preferential/Y preferred preferring prefix/DGS pregnant/Y prehistoric prejudge/DR prejudice/DGS prejudiced/U prelate preliminary/SY prelude/DGMRS premature/PY prematurity premeditated/Y premier/DGMS premiere/DGS premise/DGMS premium/MS preoccupation/S preoccupy/DS preparation/MS preparative/MSY preparatory/Y prepare/DGRS prepared/PY prepend/DGRSZ preposition/MS prepositional/Y preposterous/PY preprint/DGS preprocessor/MS preproduction preprogrammed prerequisite/MS prerogative/DMS prescribe/DGRS prescribed/U prescription/MS prescriptive/Y preselect/DGS presence/MS present/DGPRSYZ presentation/AMS presenter/MS preservation/S preservative/MS preserve/DGRSZ preserved/U preset/S preside/DGRS presidency president/MS presidential/Y press/DGJRS pressing/SY pressure/DGS prestige presumably presume/DGRS presuming/Y presumption/MS presumptuous/PY presuppose/DGS pretend/DGRSZ pretended/Y pretending/U pretentious/PUY pretext/MS pretty/DGPRSTY prevail/DGS prevailing/Y prevalence prevalent/Y prevent/DGRSV preventable preventably prevention/S preventive/PSY preview/DGRSZ previous/PY prey/DGRS price/DGRSZ priced/U priceless prick/DGRSY prickly/PR pride/DGS priest/SY priestly/P primacy primary/MSY prime/DGPRSYZ Prime's primed/U primeval/Y primitive/PSY primrose prince/MSY princely/PR princess/MS principal/MSY principality/MS principle/DS print/DGRSZ printable/U printably printed/AU printer/MS printout/S prior/SY priori priority/MS priory prism/MS prison/RSZ prisoner/MS privacy/MS private/NPSVXY privative/Y privilege/DS privileged/U privy/MSY prize/DGRSZ pro/MS probabilistic probabilistically probability/S probable probably probate/DGNSV probates/A probation/RZ probe/DGJRS problem/MS problematic/U problematical/UY procedural/Y procedure/MS proceed/DGJRS process/DGMS processed/AU procession processor/MS proclaim/DGRSZ proclamation/MS proclivity/MS procrastinate/DGNS procrastinator/MS procure/DGRSZ procurement/MS prodigal/Y prodigious/PY produce/ADGRSZ producer/MS producible/A product/MSV production/AMS productive/PY productively/A productivity/S profane/DGPRY profess/DGS professed/Y profession/MS professional/SY professionalism/S professionally/U professor/MS proffer/DGS proficiency/S proficient/Y profile/DGRSZ profiler/MS profit/DGMRSZ profitability profitable/PU profitably/U profiteer/MS profound/PTY progeny program/MS programmability programmable programmed/A programmer/AMS programming/A progress/DGSV progression/MS progressive/PY prohibit/DGRSV prohibition/MS prohibitive/PY project/DGMSV projected/U projection/MS projective/Y projector/MS Prokofiev/M prolegomena proletariat proliferate/DGNSV prolific/P prolog/MS prologue/MS prolong/DGRS promenade/GMRS prominence prominent/Y promiscuity/M promiscuous/PY promise/DGRS promising/UY promontory/S promote/DGNRSVXZ promotional promotive/P prompt/DGJPRSTYZ prompted/U prompter/MS promulgate/DGNSX prone/PY prong/DS pronoun/MS pronounce/DGRS pronounceable/U pronounced/Y pronouncement/MS pronunciation/MS proof/DGMRS prop/RS propaganda propagate/DGNSVX propagated/U propel/S propelled propeller/MS propensity/S proper/PY propertied/U property/DS prophecy/MS prophesy/DGRS prophet/MS prophetic propitious/PY proponent/MS proportion/DGRS proportional/Y proportionately proportionment proposal/MS propose/DGRSZ proposition/DGS propositional/Y propound/DGRS proprietary proprietor/MS propriety propulsion/MS pros/GR prose/GR prosecute/DGNSX prosodic/S prospect/DGSV prospection/MS prospective/PSY prospector/MS prospectus prosper/DGS prosperity prosperous/PY prostitution prostrate/DN protect/DGSV protected/UY protection/MS protective/PY protector/MS protectorate protege/MS protein/MS protest/DGMRSZ protestants protestation/S protester/MS protesting/Y protocol/MS proton/MS protoplasm prototype/DGMS prototypical/Y protrude/DGS protrusion/MS proud/RTY provability/U provable/P provably prove/DGRSZ proved/AU proven/U proverb/MS provide/DGRSZ provided/U providence provider/MS province/MS provincial/Y provision/DGRS provisional/Y provocation provoke/DGS provoking/Y prow/MS prowess prowl/DGRSZ proximal/Y proximate/PY proximity prudence prudent/Y prune/DGRSZ pry/DGRST prying/Y psalm/MS pseudo psyche/MS psychiatrist/MS psychiatry psychological/Y psychologist/MS psychology psychosocial/Y pub/MS public/MPSY publication/MS publicity publish/ADGRSZ published/AU publisher/AMS pucker/DGS pudding/MS puddle/DGRS puff/DGRSZ pull/DGJRS pulley/MS pulp/GR pulpit/MS pulse/DGRS pump/DGRS pumpkin/MS pun/MS punch/DGJRSZ punched/U puncher/MS punctual/PY punctuation puncture/DGMS punish/DGRS punishable punished/U punishment/MS punitive/PY punt/DGRSZ puny/PRY pup/MS pupa/S pupil/MS puppet/MS puppy/MS purchasable purchase/DGRSZ purchaser/MS purchaser's/A pure/PRTY purge/DGRS purify/DGNRSXZ purity purple/DGRST purport/DGRSZ purported/Y purpose/DGSVY purposeful/PY purposive/PY purr/DGS purring/Y purse/DGRSZ pursue/DGRSZ pursuit/MS purview push/DGRSZ pushbutton/S pushdown puss pussy/RS put/IS putter/GRS putting/I puzzle/DGJRSZ puzzlement pygmy/MS pyramid/MS QA quack/DGRSZ quadrant/MS quadratic/S quadratical/Y quadrature/MS quadruple/DGS quadword/MS quagmire/MS quail/MS quaint/PY quake/DGRSZ qualified/UY qualify/DGNRSXZ qualitative/Y quality/MS qualm/S quandary/MS quanta quantifiable/U quantify/DGNRSXZ quantitative/PY quantity/MS quantum quarantine/DGMS quarrel/S quarrelsome/PY quarry/DGMRS quart/RSZ quarter/DGRSY quarterly/S quartet/MS quartz quash/DGS quasi quaver/DGS quavering/Y quay/S queen/MSY queer/PRSTY quell/DGRS quench/DGRS quenched/U query/DGRS quest/ADGRSZ question/DGJRSZ questionable/P questionably/U questioned/AU questioning/SY questioningly/U questionnaire/MS queue/DMRSZ queuer/MS quick/NPRTXY quicken/DGRS quicksilver quiet/DGNPRSTXY quieten/DGS quietude/I quill/S quilt/DGRS quinine quit/S quite/A quitter/MS quitting quiver/DGS quiz quizzed quizzes quizzing quo/H quota/MS quotation/MS quote/DGS quoted/U quotient/S rabbit/DGMRS rabble/DGR raccoon/MS race/DGRSZ racehorse/MS racial/Y rack/DGRS racket/MS racketeer/GS radar/MS radial/Y radiance radiant/Y radiate/DGNSVXY radiative/Y radiator/MS radical/PSY radio/DGS radiology radish/MS radius/S radix/S raft/DGMRSZ rafter/DS rafting/M rag/DGMS rage/DGS ragged/PY raid/DGRSZ rail/DGJMRSZ railing/MS railroad/DGRSZ railway/MS raiment rain/DGMS rainbow/S raincoat/MS raindrop/MS rainfall rainy/RT raise/DGRSZ raisin/S rake/DGRS rally/DGS ram/MS ramble/DGJRSZ rambling/SY ramification/MS ramp/DGMS rampart/S rams/S ran/A ranch/DGRSZ random/PY rang/DGRZ range/DGRSZ rank/DGJPRSTYZ ranked/U ranker/MS ranking/MS rankle/DGS ransack/DGRS ransom/GRS rant/DGJRSZ ranting/MSY rap/DGMRS rape/DGRS rapid/PSY rapidity rapt/PY rapture/DGMS rapturous/PY rare/GPRTY rarity/MS rascal/SY rash/PRSY rasp/DGJRS raspberry rasping/SY raster/S rat/DGJMRSZ rate/DGJNRSXZ rated/U rather ratify/DGNSX ratio/MS ration/DGS rational/PSY rationale/MS rationality/S rattle/DGRSZ rattlesnake/MS rattling/Y ravage/DGRSZ rave/DGJRS raven/DGRS ravenous/PY ravine/DMS raw/PRSTY ray/DMS razor/MS RCS re/DGJSTVY reabbreviate/DGS reach/DGRS reachable/U reachably react/DGSV reacted/U reactionary/MS reactivate/DGNS reactivity read/GJRSZ readability/U readable/P reader/MS readout/MS ready/DGPRSTY real/PSTY realign/DGS realism/U realist/MS realistic/U realistically/U reality/S realm/MS ream/DGMRS reap/DGRS reappear/DGS reappraisal/S rear/DGRS rearrange/DGS rearrangeable rearrest/D reason/DGJRS reasonable/PU reasonably/U reassemble/DGRS reassign/DGS reassure/DGS reassuringly/U reawaken/DGS rebate/DGMRS rebel/MS rebelled rebelling rebellion/MS rebellious/PY rebirth/M reboot/DGRSZ rebound/DGRS rebroadcast/S rebuff/DGS rebuild/GS rebuke/DGRS rebuttal/S recall/DGRS recapitulate/DGNS recapture/DGS recast/GS recede/DGS receipt/DGMS receivable/S receive/DGRSZ receiver/MS recent/PY receptacle/MS reception/MS receptive/PY receptivity receptor/MS recess/DGSV recession/MS recessive/PY recipe/MS recipient/MS reciprocal/SY reciprocate/DGNSV reciprocity recirculate/DGNS recital/MS recite/DGRS reckless/PY reckon/DGJRS reclaim/DGRSZ reclamation/S reclassify/DGNS recline/DGS recode/DGS recognition/MS recombine/DGS recommend/DGRSZ recommender/MS recommission/DGS recompense recompile/DGS recompute/DGS reconcile/DGRS reconciliation/MS reconfigure/DGRS reconnect/DGRS reconsider/DGS reconstruct/DGSV reconstructed/U reconstruction/S record/DGJRSZ recorded/U recount/DGRS recourse/S recover/DGRS recoverability recoverable/U recovery/MS recreate/DGNSVX recreational recruit/DGMRSZ recruiter/MS recta rectangle/MS rectangular/Y rector/MS rectum/MS recur/S recurrence/MS recurrent/Y recurring recurse/DGNSVX recursion/MS recyclable recycle/DGS red/PSY redbreast redden/DG redder reddest reddish/P redeclare/DGS rededication/MS redeem/DGRSZ redeemed/U redefine/DGS redemption/R redeposit/DGMS redesign/DGS redevelopment Redford/M redirect/DGS redirection/S redisplay/DGS redistribute/DGNSVX redouble/DGS redraw/GS redrawn redress/DGRS reduce/DGRSZ reducibility reducible reducibly reduction/MS redundancy/S redundant/Y reed/GMRS reeducation reef/GRS reel/DGRS reenactment reenter/DGS reentrant reestablish/DGS reevaluate/DGNS reexamine/DGS refer/S referee/DMS refereeing reference/DGRS referenced/U referendum referent/MS referential/Y referentiality referral/MS referred referrer referring refill/DGS refine/DGRS refined/U refinement/MS reflect/DGSV reflected/U reflection/MS reflective/PY reflectivity reflector/MS reflex/DMSVY reflexive/PY reflexivity refocus/DGS reformable reformat/SV reformation reformatter reformulate/DGNS refractory/PY refrain/DGS refresh/DGNRSZ refreshing/Y refreshment/MS refrigerator/MS refry/DGS refuge/DGS refugee/MS refund/DGMRSZ refusal/S refuse/DGRS refutable refutation refute/DGRS regain/DGS regal/DGY regard/DGS regardless/PY regenerate/DGNPSVY regent/MS regime/MS regimen regiment/DS region/MS regional/Y register/DGSU registration/MS regress/DGSV regression/MS regressive/PY regret/S regretful/PY regrettable regrettably regretted regretting regroup/DG regular/SY regularity/S regulate/DGNSVX regulated/U regulator/MS rehash/DGS rehearsal/MS rehearse/DGRS rehearsed/U reign/DGS reimbursed reimbursement/MS rein/DGS reincarnate/DN reindeer reinforce/DGRS reinforced/U reinforcement/MS reinsert/DGS reinstall/DGRS reinstate/DGS reinstatement reinterpret/DGS reintroduce/DGS reinvention reissuer/MS reiterate/DGNSVX reiterative/PY reject/DGRSV rejecting/Y rejection/MS rejector/MS rejoice/DGRS rejoicing/Y rejoin/DGS relabel/S relate/DGNRSVX related/PY relational/Y relationship/MS relative/MPSY relativism relativistic relativistically relativity/M relax/DGRS relaxation/MS relaxed/PY relay/DGS release/DGMRS released/U relegate/DGNS relent/DGS relenting/U relentless/PY relevance/S relevant/Y reliability/SU reliably/U reliance relic/MS relief/S relieve/DGRSZ relieved/Y religion/MS religious/PY relinquish/DGS relish/DGS relive/GS reload/DGRS relocate/DGNSX reluctance/S reluctant/Y rely/DGRS remain/DGS remainder/DGMS remark/DGS remarkable/P remarkably remarked/U remedy/DGS remember/DGRS remembrance/MRS reminiscence/MS reminiscent/Y remittance/S remnant/MS remodel/S remodulate/DGNS remonstrate/DGNSV remonstrative/Y remorse remote/MNPSTY removal/MS remove/DGRS renaissance renal rename/DGS rend/GRSZ render/DGJRS rendezvous/DGS rendition/MS renew/DGRS renewal/S renounce/DGRS renown/D rent/DGRSZ rental/MS renter/MS renumber/DGS reopen/DGS reorder/DGS repackage/DGRS repaint/DGRSZ repair/DGRSZ repairman reparable reparation/MS repartition/DGRSZ repast/MS repay/GS repeal/DGRS repeat/DGRSZ repeatable repeated/Y repel/S repent/DGRS repentance repercussion/MS repertoire repetition/MS repetitive/PY rephrasing/MS repine/DGR replaceable replay/DGRS replenish/DGRS replete/NP replica/MS replicate/DGNSVX reply/DGNRSX report/DGRSZ reported/Y reporter/MS repose/DGS repository/MS repost/DGJRS represent/DGRS representable/U representably representational/Y representative/MPSY represented/U repress/DGSV repression/MS repressive/PY reprieve/DGS reprint/DGRS reprisal/MS reproach/DGRS reproaching/Y reproducibility/S reproducibly reproductive/Y reproductivity reproof reprove/DGR reproving/Y reptile/MS republic/MS republican/MS republication repudiate/DGNSX repulse/DGNSVX repulsive/PY repurchase/DGRS reputable reputably reputation/MS repute/DGS reputed/Y request/DGMRSZ requested/U requiem/MS require/DGRS requirement/MS requisite/NPSX requisition/DGRS requite/DGR requited/U reread/GS reroute/DJRSZ rerun/S reschedule/DGRS rescue/DGRSZ research/DGRSZ reselect/DGS resemblance/MS resemble/DGS resent/DGS resentful/PY resentment reservation/MS reserve/DGMRS reserved/PUY reservoir/MS reset/DGRS reshape/DGRS reside/DGRS residence/MS resident/MS residential/Y residue/MS resign/DGRS resignation/MS resigned/PY resin/DGMS resist/DGRSV resistance/S resistant/Y resisted/U resistible resistibly resisting/U resistive/PY resistivity resistor/MS resize/DGS resold resolute/NPVXY resolved/U resonance/S resonant/Y resort/DGRS resound/GS resounding/Y resource/DGMS resourceful/PY respect/DGRSV respectability respectable/P respectably respectful/PY respective/PY respiration/S respite/DG resplendent/Y respond/DGRSZ respondent/MS response/RSVX responsibility/S responsible/P responsibly responsive/PUY rest/DGRSV restamp/DGS restart/DGRS restate/DGS restatement restaurant/MS restful/PY restive/PY restless/PY restoration/MS restore/DGRSZ restrained/UY restraint/MS restrict/DGSV restricted/UY restriction/MS restrictive/PY restroom/MS restructure/DGS result/DGS resultant/SY resumable resume/DGS resumption/MS resurface/DGRSZ resurfacer/MS resurrect/DGS resurrection/MS retail/DGRSZ retailer/MS retain/DGRSZ retainment retaliation retard/DGR retention/S retentive/PY reticence reticent/Y reticle/MS reticular reticulate/DGNSY retina/MS retinal retinue/S retirement/MS retiring/PY retort/DGS retrace/DGS retract/DGS retraction/S retrain/DGS retreat/DGRS retrievable retrieval/MS retrieve/DGRSZ retroactively retrospect/V retrospection retrospective/Y return/DGRSZ returned/U retype/DGS reunite/DG reuse/DGS revamp/DGS reveal/DGRS revealing/U revel/S revelation/MS revelry revenge/DGMRS revenue/RSZ revere/DGS reverence/R reverend/MS reverently reverify/DGS reversal/MS reverse/DGNRSXY reversible reversion/RS revert/DGRSV review/DGMRSZ revile/DGR revise/DGNRSX revision/MS revival/MS revive/DGRS revocation/S revoke/DGRS revolt/DGRS revolting/Y revolution/MS revolutionary/MPSY revolve/DGRSZ reward/DGRS rewarding/Y rewind/DGRS reword/DGJS rewording/MS rework/DGS rewound rewrite/GJRS rhetoric rheumatism rhinoceros rhubarb rhyme/DGRS rhythm/MS rhythmic/S rhythmical/Y rib/MS ribbed ribbing ribbon/MS rice/RS rich/NPRSTY richen/DG Rick/M rickshaw/MS rid/GJRSZ ridden riddle/DGRS ride/GJRSZ rider/MS ridge/DGMS ridicule/DGRS ridiculous/PY rifle/DGRS rifled/U rifleman rift rig/MS rigged rigging right/DGNPRSY righteous/PUY rightful/PY rightmost rightward/S rigid/PY rigidity/S rigorous/PY rill rim/GMRS rime/GR rind/DMS ring/DGJRSZ ringing/SY rinse/DGRS riot/DGRSZ riotous/PY rip/NRSTX ripe/PRTY ripen/DGRS ripped ripping ripple/DGRS rise/GJRSZ risen risk/DGRS Ritchie/M rite/DMS ritual/SY rival/S rivalry/MS rive/DGRZ riven river/MS riverside rivet/DGRS rivulet/MS road/MS roads/I roadside/S roadster/MS roadway/MS roam/DGRS roar/DGRS roaring/T roast/DGRS rob/DGS robbed robber/MS robbery/MS robbing robe/DGS Robert/MS robin/MS Robinson/M robot/MS robotic/S robust/PY rock/DGRSZ rocket/DGMS rocky/PRS rod/MS rode roe/S rogue/GMS role/MS roll/DGRSZ ROM Roman/MS romance/DGRSZ romantic/MS romantically/U romp/DGRSZ roof/DGRSZ rook/S room/DGRSZ roost/RZ root/DGMRS rooted/P rope/DGRSZ rose/MS rosebud/MS rosy/PRY rot/MS rotary rotate/DGNSVX rotated/U rotational/Y rotative/Y rotator/MS rotten/PY rouge/G rough/DNPRTXY roughen/DGS round/DGPRSTYZ roundabout/P rounded/P roundoff roundup/MS rouse/DGRS rout/DGJRZ route/DGJRSZ router/MS routine/MSY rove/DGRS row/DGNRSZ Roy/M royal/Y royalist/MS royalty/MS RSX rub/S rubbed rubber/MS rubbing rubbish/S rubble/DG Rubens rubout ruby/MS rudder/MS ruddy/PRY rude/PRTY rudiment/MS rudimentary/PY rue/GS ruefully ruffian/SY ruffle/DGRS ruffled/U rug/MS rugged/PY ruin/DGRS ruination/MS ruinous/PY rule/DGJMRSZ ruled/U rum/NX rumble/DGRS rump/SY rumple/DGS rumply/R run/MS runaway/S rung/MS runnable runner/MS running/A runs/A runtime rupture/DGS rural/Y rush/DGRS russet/DGS Russian/MS rust/DGS rustic rusticate/DGNS rustle/DGRSZ rusty/NPRY rut/MS ruthless/PY rye/M sable/MS sabotage/DGS sack/DGRS sacred/PY sacrifice/DGRSZ sacrificial/Y sad/PY sadden/DGS sadder saddest saddle/DGRS sadism sadist/MS sadistic sadistically safe/PRSTY safeguard/DGS safely/U safety/DGMS sag/S sagacious/PY sagacity sage/PSY said/U sail/DGRS sailing/M sailor/MSY saint/DSY saintly/P sake/RS salable/A salad/MS salary/DS sale/MS salesman/M salesmen/M salespeople/M salesperson/MS salient/Y saline saliva sallow/P sally/DGS Sally's salmon/S salon/MS saloon/MS salt/DGPRSZ salted/U salty/PRTY salutary/PY salutation/MS salute/DGRS salvage/DGRS salvation salve/GRS Salz/M Sam/M same/P sample/DGJMRSZ sanctify/DNR sanction/DGS sanctity/S sanctuary/MS sand/DGRSZ sandal/MS sandpaper Sandra/M sandstone/S sandwich/DGS sandy/PR sane/PRTY sang sanguine/PY sanitarium/S sanitary/IU sanitation sanity/I sank sap/MS sapling/MS sapphire/MS Sarah/M sarcasm/MS sarcastic sash/DS sat/DG satchel/MS sate/DGS satellite/MS satin satire/MS satirist/MS satisfaction/MS satisfactorily/U satisfactory/PY satisfiability/U satisfiable/U satisfied/U satisfy/DGRSZ satisfying/Y saturate/DGNRSX saturated/AU saturates/A Saturday/MS satyr sauce/GRSZ saucepan/MS saucy/PRY saunter/DGRS sausage/MS savage/DGPRSYZ save/DGJRSZ saved/U saw/DGRS sawmill/MS sawtooth Sawyer/M say/GJRSZ scabbard/MS scaffold/GJS scalable/U scalar/MS scald/DGS scale/DGJRSZ scaled/A scallop/DGRS scalp/GMRS scaly/PR scam/MS scamper/DGS scan/AS scandal/MS scandalous/PY scanned/A scanner/MS scanning/A scant/PY scanty/PRSTY scar/DGMRS scarce/PRTY scarcity scare/DGRS scarf/S scarlet scary/R scatter/DGRS scattering/Y scavenger/MS SCCS scenario/MS scene/MS scenery/S scenic/S scent/DS schedule/DGMRSZ scheduled/AU scheduler/MS schema/MS schemata schematic/S schematically scheme/DGMRSZ schizophrenia scholar/SY scholarship/MS scholastic/S scholastically school/DGMRSZ schoolboy/MS schooled/U schoolhouse/MS schoolmaster/MS schoolroom/MS schoolyard/MS schooner/MS science/MS scientific/U scientifically/U scientist/MS scissor/DGS scoff/DGRS scold/DGRS scoop/DGRS scope/DGMS scorch/DGRS scorching/Y score/DGJMRSZ scorn/DGRS scornful/PY scorpion/MS Scotland/M Scott/M scoundrel/MSY scour/DGJRS scourge/GR scout/DGRS scow scowl/DGRS scramble/DGRSU scrap/DGJMRSZ scrape/DGJRSZ scrapped scratch/DGRSZ scratched/U scrawl/DGRS scream/DGRSZ screaming/Y screech/DGRS screen/DGJRSZ screened/U screener/MS screw/DGRS screws/U scribble/DGRS scribe/GIRS script/DGMS scripted/U scripture/S scroll/DGS scrooge/MS scrub/S scruple/DGS scrupulous/PUY scrutiny scuffle/DGS sculpt/DGS sculptor/MS sculpture/DGS scum/MS scurry/DG scuttle/DGS scythe/GMS sea/SY seaboard seacoast/MS Seagate/M seal/DGRS sealed/AU seals/U seam/DGNRS seaman/Y seaport/MS sear/DGS search/DGJRSZ searcher/AMS searching/SY searing/Y seashore/MS seaside season/DGJMRSYZ seasonable/PU seasonably/U seasonal/Y seasoned/U seat/DGRS seaward/S seaweed/S secede/DGRS secluded/PY seclusion second/DGRSYZ secondary/PSY secondhand secrecy secret/DGSVY secretarial secretary/MS secrete/DGNSVX secretive/PY sect/IMS section/DGMS sectional/Y sector/DGMS secular/Y secure/DGJPRSY secured/U security/IS sedge sediment/MS seduce/DGRSZ seductive/PY see/DRSZ seed/DGJRSZ seeded/U seedling/MS seeing/U seek/GRSZ seeking/Y seem/DGSY seeming/Y seemly/PR seen/U seep/DGS seer/MS seethe/DGS segment/DGS segmentation/MS segmented/U segregate/DGNSV segregated/U seismic seizable seize/DGJRSZ seizin/S seizor/S seizure/MS seldom select/DGPSV selected/AU selection/MS selective/PY selectivity selector/MS self/P selfish/PUY selfsame/P sell/AGRSZ selves semantic/S semantical/Y semanticist/MS semaphore/MS semblance/A semester/MS semiautomated semicolon/MS semiconductor/MS seminal/Y seminar/MS seminary/MS semipermanent/Y senate/MS senator/MS send/GRSZ sender/MS sends/A senior/MS seniority sensation/MS sensational/Y sense/DGS senseless/PY sensibility/S sensible/IP sensibly/I sensitive/PSY sensitivity/S sensor/MS sensory sent/AU sentence/DGS sentential/Y sentiment/MS sentimental/Y sentinel/MS sentry/MS separable/IP separate/DGNPSVXY separator/MS September/MS sequel/MS sequence/DGJRSZ sequenced/A sequential/Y sequentiality sequester/DG serendipitous/Y serendipity serene/PY serenity serf/MS sergeant/MS serial/SY series serious/PY sermon/MS serpent/MS serpentine/Y serum/MS servant/MS serve/DGJRSZ served/AU server/MS service/DGMRS serviceable/P serviced/U servile/PY servitude session/MS set/MS sets/AIU setter/MS setting/AI settings/A settle/DGJRSZ settled/AU settlement/MS settles/A settling/AU setup/S seven/HS seventeen/HS seventh/S seventy/HS sever/DGRST several/SY severance severe/DGPRTY severity/MS sew/DGRSZ sex/DS sexism/M sexist/MS sexual/Y sexuality shabby/PRY shack/DS shackle/DGRS shackled/U shade/DGJRS shaded/U shadow/DGRS shadowy/PY shady/PRTY shaft/DGMS shaggy/PRY shakable/U shakably shake/GRSZ shaken/U shaky/PRY shale/S shall shallow/PRSTY sham/DGMS shambles shame/DGS shameful/PY shameless/PY shan't shanty/MS shape/DGRSYZ shapeless/PY shapely/PR sharable share/DGRSZ sharecropper/MS shared/U shareholder/MS shark/MS sharp/DGNPRSTXY sharpen/DGRS sharpened/U shatter/DGS shattering/Y shave/DGJRS shaved/U shaven/U shawl/MS she/DMRSV she'd she'll sheaf shear/DGRSZ sheath/GRS sheathing/U sheaves shed/S sheep sheer/DPY sheet/DGRS shelf/S shell/DGMRS shelled/U shelter/DGRS sheltered/U shelve/DGRS shepherd/DGMS sheriff/MS shield/DGRS shielded/U shift/DGRSZ shifty/PRTY shilling/S shimmer/DG shin/DGRZ shine/DGRSZ shingle/DGMRS shining/Y shiny/PR ship/MS shipboard/S shipbuilding shipment/MS shippable shipped shipper/MS shipping shipwreck/DS shirk/GRS shirt/GS shit/MS shiver/DGRS shoal/GMS shock/DGRSZ shocking/Y shod/U shoe/DRS shoehorn/DGMS shoeing shoemaker shone shook shoot/GJRSZ shop/MS shopkeeper/MS shopped shopper/MS shopping shore/DGMS shorn short/DGNPRSTXY shortage/MS shortcoming/MS shortcut/MS shorten/DGRS shorthand/DS shot/MS shotgun/MS should/RTZ shoulder/DGS shouldn't shout/DGRSZ shove/DGRS shovel/S show/DGJRSZ shower/DGS shown shrank shred/MS shredder/MS shrew/MS shrewd/PTY shriek/DGS shrill/DGP shrilly shrimp shrine/MS shrink/GRS shrinkable shrivel/S shroud/DGS shrub/MS shrubbery shrug/S shrunk/N shudder/DGS shuffle/DGRS shun/S shut/S shutdown/MS shutter/DGS shutting shuttle/DGS shy/DGRST shyly shyness sibling/MS sick/GNPRSTY sicken/DGR sickening/Y sicker/Y sickle/DG sickly/DGPY sickness/MS side/DGJS sideboard/MS sideburns sided/P sidelight/MS sidetrack/DGS sidewalk/MS sideways sidewise siege/GMS sierra/S sieve/GMSZ sift/DGJRS sifted/A sigh/DGRS sight/DGJRSY sightly/P sign/DGRSZ signal/SY signature/MS signed/AU signet significance/IM significant/IY signify/DGNRS Signor Sikkim/M Sikkimese silence/DGRSZ silent/PSY silhouette/DS silicon/S silicone silk/NS silky/PRTY sill/MS silly/PRTY silt/DGS silver/DGRSY Silverstein/M silvery/P similar/Y similarity/S similitude simmer/DGS simple/PRST simplex/S simplicity/MS simplified/U simplify/DGNRSXZ simplistic simply simulate/DGNSVX simulator/MS simultaneity simultaneous/PY sin/AGMS since sincere/PTY sincerity/I sine/GS sinew/MS sinful/PY sing/DGRSYZ singable Singapore/M singer/MS singing/Y single/DGPS singleton/MS singular/Y singularity/MS sinister/PY sink/DGRSZ sinkhole/S sinned sinner/MS sinning sinusoidal/Y sinusoids sip/S siphon/DGMS siphons/U sir/DGNSX sire/DGS sirup sister/DGMSY sit/DGS site/DGMS sitter/MS sitting/S situate/DGNSX situational/Y six/HS sixpence/S sixteen/HS sixth/SY sixty/HS sizable/P size/DGJRSZ sized/AU skate/DGRSZ skater/MS skeletal/Y skeleton/MS skeptic/MS skeptical/Y sketch/DGRS sketchy/PRTY skew/DGPRSZ skewer/DGS ski/DGRSZ skier/MS skill/DGS skilled/U skillful/PUY skim/MS skimmed skimmer/MS skimming/S skimp/DGS skin/MS skinned skinner/MS skinning skip/S skipped skipper/DGMS skipping skirmish/DGRSZ skirt/DGRS skulk/DGRS skull/DMS skunk/MS sky/DGMRSZ skylark/GRS skylight/MS skyscraper/MS slab/S slack/DGNPRSTXY slacken/DGS slain slam/S slammed slamming slander/DGRS slang/G slant/DGS slanting/Y slap/S slapped slapping slash/DGRS slashing/Y slat/DGMRSZ slate/DGRSZ slaughter/DGRS slave/DGMRS slaver/DG slavery slay/GRSZ sled/MS sledge/GMS sledgehammer/MS sleek/PY sleep/GRSZ sleepless/PY sleepy/PRY sleet sleeve/DGMS sleigh/S sleken/DG slender/PRY slept slew/DG slice/DGRSZ slick/PRSYZ slid/GRZ slide/GMRSZ slight/DGPRSTY slighting/Y slim/DGPY slime/DGS slimy/PRY sling/GRS slings/U slip/MS slippage slipped slipper/MS slippery/PR slipping slit/MS slogan/MS slop/DGRSZ slope/DGRSZ sloped/U slopped slopping sloppy/PRY slot/MS sloth/S slotted slouch/DGRS slow/DGPRSTY slug/S sluggish/PY slum/MS slumber/DGMRS slump/DS slung/U slur/MS sly/Y slyer slyest smack/DGRS small/PRT smallpox smart/DGNPRSTY smarten/DG smash/DGRSZ smashing/Y smear/DGRS smell/DGRS smelly/R smelt/RS smile/DGRS smiling/UY smite/GR smith/MS smithy/S smitten smock/GS smog smokable smoke/DGRSZ smoker/MS smoky/PRSY smolder/DGS smoldering/Y smooth/DGNPRSTYZ smoothen/DG smote smother/DGS SMTP smug/PY smuggle/DGRSZ snack/DGRS snail/MS snake/DGS snap/SU snapped/U snapper/MS snapping/U snappy/PRTY snapshot/MS snare/DGRS snarf/DGJS snarl/DGRS snatch/DGRSZ snatcher/MS sneak/DGRSZ sneaker/DS sneaking/Y sneaky/PRTY sneer/DGRS sneeze/DGRS sniff/DGRSZ sniffer/MS snoop/DGRSZ snooper/MS snore/DGRS snort/DGRS snout/DMS snow/DGS snowman snowmen snowshoe/DMRS snowy/PRTY snuff/DGRS snug/PSY snuggle/DGS so/S soak/DGRS soap/DGS soar/DGRS sob/RSZ sober/DGPRSTY soccer sociability/IU sociable/IU sociably/IU social/UY socialism socialist/MS societal/Y society/MS sociological/Y sociology sock/DGS socket/MS sod/MS soda/MS sodium sodomy sofa/MS soft/NPRTXY soften/DGRS software/M soil/DGS sojourn/RZ solace/DGR solar sold/RZ solder/DGRS soldier/DGMSY sole/DGPSY solemn/PY solemnity solicit/DGS solicited/U solicitor/S solid/PSY solidify/DGNS solidity soling/N solitaire solitary/PY solitude/MS solo/DGMS solubility/I soluble/AI solution/MS solvable/AIU solve/ADGRSZ solved/AU solvent/MSY somber/PY some/Z somebody/MS someday somehow someone/M someplace/M something/M sometime/S somewhat somewhere/S son/MSY sonar/S song/MS sonnet/MS soon/RT soot sooth/DGRY soothe/DGRS soothing/PY sophisticated/Y sophistication/U sophomore/MS sorcerer/MS sorcery sordid/PY sore/PRSTY sorrow/MRS sorrowful/PY sorry/PRTY sort/DGMRSZ sorted/AU sought/U soul/DMS sound/DGJPRSTY sounding/MSY soup/MS sour/DGPRSTY source/AMS south/GRS souther/Y southern/PRYZ sovereign/MSY soviet/MS sow/GMRSX sower/D space/DGJRSZ spaceship/MS spade/DGRS Spafford/M spaghetti Spain/M span/MS Spanish/M spank/DGRS spanned spanner/MS spanning spare/DGPRSTY sparing/UY spark/DGRS sparrow/MS sparse/PRTY spat/S spate/MS spatial/Y spatter/D spawn/DGRS speak/GRSZ speakable/U speaker/MS spear/DGRS special/PSY specialist/MS specialty/MS species specifiable specific/S specifically specificity/S specified/AU specify/DGNRSXZ specimen/MS speck/MS speckle/DGS spectacle/DS spectacular/Y spectator/MS spectra spectrogram/MS spectroscopically spectrum/S speculate/DGNSVX speculative/Y speculator/MS sped speech/MS speechless/PY speed/DGRSZ speedup/MS speedy/PRY spell/DGJRSZ Spencer/M spend/GRSZ spent/U sphere/GMS spherical/Y spice/DGS spicy/PRY spider/MS spike/DGRS spill/DGRS spin/S spinach spinal/Y spindle/DGRS spine/S spinner/MS spinning spiral/SY spire/DGMS spired/AI spires/AI spirit/DGS spirited/PY spiritual/PSY spit/DGS spite/DGS spiteful/PY spitting splash/DGRSZ spleen splendid/PY splice/DGJRSZ spline/DMS splinter/DGS split/MS splitter/MS splitting/S spoil/DGRSZ spoiled/U spoke/DGS spoken/U spokesman spokesmen sponge/DGRSZ sponsor/DGMS sponsorship spontaneous/PY spoofer/MS spook/DGMS spooky/PRY spool/DGRSZ spoon/DGS spore/DGMS sport/DGSV sporting/Y sportive/PY sportsman/Y spot/MS spotless/PY spotlight/DGMS spotted/U spotter/MS spotting spouse/GMS spout/DGRS sprang sprawl/DGS spray/DGRS sprayed/U spread/GJRSZ spreadsheet/MS spree/MS sprig sprightly/PR spring/GMRSZ springtime springy/PRTY sprinkle/DGRSZ sprinkler/DMS sprint/DGRSZ sprite sprout/DGS spruce/DGPRTY sprung/U Spuds spun spur/MS spurious/PY spurn/DGRS spurt/DGS sputter/DR spy/DGRS squabble/DGRS squad/MS squadron/MS squall/MRS square/DGMPRSTY squash/DGRS squat/PSY squawk/DGRS squeak/DGRS squeal/DGRS squeeze/DGRS squid/S squint/DGRS squinting/Y squire/GMS squirm/DGS squirrel/SY Sr stab/SY stabbed stabbing/MS stability/MS stable/DGPRST stably/U stack/DGMRS stacked/U stacks/U staff/DGMRSZ stag/DGMRSZ stage/DGRSZ stagecoach stagehand/MS stagger/DGRS staggering/Y stagnant/Y staid/PY stain/DGRS stained/U stainless/Y stair/MS staircase/MS stairway/MS stake/DGS stale/DGPRSTY stalk/DGRSZ stalker/MS stall/DGJS stalwart/PY stamen/MS stamina stammer/DGRS stamp/DGRSZ stampede/DGRS stance/MS stanch/RT stand/GJMRS standard/SY standby standpoint/MS standstill stanza/MS staple/DGRSZ stapled/U star/DGMRS starboard/DGS starch/DGS stare/DGRS starfish staring/U stark/PTY starlet/MS starlight starred starring starry/R start/DGRSZ startle/DGS startling/PY startup/MS starvation starve/DGRS state/DGMNRSVXY stated/AIU stately/PR statement/MS states/AI statesman/MY static/S statically station/DGMRS stationary/SY statistic/MS statistical/Y statistician/MS statue/DMS statuesque/PY stature status/S statute/MS statutory/PY staunch/PTY stave/DGS stay/DGRSZ stdio stead/G steadfast/PY steady/DGPRSTY steak/MS steal/GHRS stealthy/PRY steam/DGRSZ steamboat/MS steamship/MS steed/S steel/DGSZ steep/DGNPRSTY steepen/DG steeple/MS steer/DGRS stellar stem/MS stemmed/U stemming stench/MS stencil/MS stenographer/MS step/MS Stephen/MS stepmother/MS stepped stepper stepping steps/I stepwise stereo/MS stereotype/DGRSZ stereotypical/Y sterile sterling/PY stern/PSY stew/DGS steward/MS stick/DGRSZ sticky/PRTY stiff/NPRSTXY stiffen/DGRSZ stiffness/S stifle/DGRS stifling/Y stigma/S stile/MS still/DGPRST stills/I stimulant/MS stimulate/DGNSVX stimuli stimulus sting/GRS stinging/Y stink/GRSZ stinking/Y stint/DGMRS stinting/U stipend/MS stipple/DGRS stipulate/DGNSX stir/S stirred stirrer/MS stirring/SY stirrup/S stitch/DGRS stochastic stochastically stock/DGJRSZ stockade/DGMS stockholder/MS stocking/DS stole/DMS stolen stomach/DGRS stone/DGMRS stony/PRY stood stool/S stoop/DGS stop/MS stopcock/S stopgap/MS stoppable/U stoppage/S stopped/U stopper/DGMS stopping storage/MS store/DGMS stored/AU storehouse/MS stork/MS storm/DGMS stormy/PRTY story/DGMS stout/NPRTY stouten/DG stove/MRS stow/DGS straggle/DGRSZ straight/NPRTXY straighten/DGRSZ straightforward/PSY straightway strain/ADGRSZ strained/AU strait/NPSY straiten/DG strand/DGRS stranded/P strange/PRTYZ stranger/MS strangle/DGJRSZ strangulation/MS strap/MS stratagem/MS strategic/S strategy/MS stratified/U stratify/DGNSX stratum straw/MS strawberry/MS stray/DGMRS streak/DGS stream/DGMRSZ streamed/U streamline/DGRS street/SZ streetcar/MS strength/NSX strengthen/DGRS strenuous/PY stress/DGS stressed/U stretch/DGRSZ strew/GHS strewn stricken strict/PRTY stride/GRS strife strike/GRSZ striking/Y string/DGMRSZ stringent/Y stringy/PRT strip/DGMRS stripe/DGRS striped/U stripped/U stripper/MS stripping strive/GJRS strobe/DGMS stroboscopic strode stroke/DGRSZ stroll/DGRSZ stroller/MS strong/RTY stronghold strove struck structural/Y structure/DGRS structured/AU struggle/DGRS strung/U strut/S strutted strutter strutting stub/MS stubbed stubbing stubble stubborn/PY stuck/U stud/MS student/MS studied/PY studio/MS studious/PY study/DGMRS stuff/DGJRS stuffy/PRTY stumble/DGRS stumbling/Y stump/DGRS stun/S stung stunning/Y stunt/DGMS stunted/P stupefy/G stupendous/PY stupid/MPRSTY stupidity/S stupor sturdy/PRY style/DGRSZ stylish/PY stylistic/S stylistically sub/S subatomic subclass/MS subcommittee/MS subcomponent/MS subcomputation/MS subconscious/PY subculture/MS subdivide/DGRS subdivision/MS subdue/DGRS subdued/Y subexpression/MS subfield/MS subfile/MS subgoal/MS subgraph/S subgroup/GMS subinterval/MS subject/DGMSV subjection subjective/PY subjectivity sublimation/S sublime/DGPRY sublist/MS submarine/DGRSZ submerge/DGS submission/AMS submit/AS submitted/A submitting/A submode/S submodule/MS subnetwork/MS subordinate/DGNPSVY subproblem/MS subprocess/MS subprogram/MS subproject subproof/MS subrange/MS subroutine/MS subschema/MS subscribe/DGRSZ subscript/DGS subscripted/U subscription/MS subsection/MS subsegment/MS subsequence/MS subsequent/PY subset/MS subside/DGS subsidiary/MSY subsidy/MS subsist/DGS subsistence subspace/MS substance/MS substantial/PY substantially/U substantiate/DGNSVX substantiated/U substantive/PY substantivity substitutability substitutable substitute/DGNRSVX substituted/U substitutive/Y substrate/MS substring/S substructure/MS subsume/DGS subsystem/MS subtask/MS subterranean/Y subtitle/DGMS subtle/PRT subtlety/S subtly subtopic/MS subtract/DGRSVZ subtracter/MS subtraction/S subtrahend/MS subtree/MS subunit/MS suburb/MS suburban subversion subvert/DGRS subway/MS succeed/DGRS success/SV successful/PY successfully/U succession/MS successive/PY successor/MS succinct/PY succumb/DGS such suck/DGRSZ sucker/DGS suckle/DGS suction sudden/PY suds/GR sue/DGRS Sue's sued/DG suffer/DGJRSZ sufferance suffice/DGRS sufficiency/I sufficient/IY suffix/DGRS suffixed/U suffocate/DGNSV suffocating/Y suffrage sugar/DGJS suggest/DGRSV suggestible suggestion/MS suggestive/PY suicidal/Y suicide/DGMS suit/DGMSZ suitability/U suitable/P suitably/U suitcase/MS suite/DGSZ suited/U suitor/MS sulk/DGS sulky/PRSTY sullen/PY sultan/MS sultry/PRY sum/MS summand/MS summary/MSY summation/MS summed summer/DGMS summing summit summon/DGRSZ summons/S sumptuous/PY sun/MS sunbeam/MS sunburn/DGMS Sunday/MS sundown/RZ sundry/S sung/U sunglass/S sunk/N sunlight/S sunned sunning sunny/PRY sunrise/S sunset/MS sunshine/S suntan/DGMS suntanned suntanning sup/R super/DG superb/PY superclass/M supercomputer/MS superego/MS superficial/PY superfluity/MS superfluous/PY superhuman/PY superimpose/DGS superintend superintendent/MS superior/MSY superiority superlative/PSY supermarket/MS superpose/DGS superscript/DGS supersede/DGRS superset/MS superstition/MS superstitious/PY supertitle/DGMS superuser/MS supervise/DGNSX supervised/U supervisor/MS supervisory supper/MS supplant/DGRS supple/DGPRY supplement/DGRS supplemental supplementary/S supplier/AMS supply/DGMNRSZ support/DGRSVZ supportable/IU supported/U supporting/Y supportive/Y suppose/DGRS supposed/Y supposition/MS suppress/DGSV suppression/S suppressive/P supremacy supreme/PY sure/DPRTY surety/S surf/DGMRSZ surface/DGPRSZ surfer/MS surge/DGSY surged/A surgeon/MS surgery/S surges/A surgical/Y surly/PRY surmise/DGRS surmount/DGS surname/DMS surpass/DGS surpassed/U surpassing/Y surplus/MS surprise/DGMRS surprised/U surprising/UY surrender/DGRS surrogate/MNS surround/DGJS survey/DGS surveyor/MS survival/S survive/DGRS survivor/MS susceptible/I suspect/DGRS suspected/U suspecting/U suspend/DGRSZ suspended/AU suspender/MS suspense/NSVX suspensive/Y suspicion/DGMS suspicious/PY sustain/DGRS suture/DGS swagger/DG swain/MS swallow/DGRS swam swamp/DGRS swampy/PR swan/MS swap/S swapped swapper/MS swapping swarm/DGRS swarthy/PR swatted sway/DGRS swayed/U swear/GRS sweat/DGRSZ sweep/GJRSZ sweeping/PSY sweet/GNPRSTXY sweeten/DGJRSZ sweetheart/MS sweetie/MS swell/DGJS swept swerve/DGS swerving/U swift/PRTY swim/S swimmer/MS swimming/Y swimsuit/MS swine swing/GRSZ swinging/Y swipe/DGS swirl/DGRS swirling/Y swish/DR switch/DGJMRSZ switchboard/MS swollen swoon/DGRS swooning/Y swoop/DGRS sword/MS swore sworn swum swung sycamore syllabi syllable/DGMS syllabus syllogism/MS symbiosis symbiotic symbol/MS symbolic/MS symbolically symbolism/S symmetric symmetrical/PY symmetrically/U symmetry/MS sympathetic/U sympathy/MS symphony/MS symposium/S symptom/MS symptomatic synapse/DGMS synchronous/PY synchrony syndicate/DGNS syndrome/MS synergism synergistic synonym/MS synonymous/Y synopses synopsis syntactic/SY syntactical/Y syntax/S syntheses synthesis synthetic/S syringe/DGS syrup system/MS systematic/PS systematically tab/S tabernacle/DGMS table/DGMS tableau/MS tablecloth/S tablespoon/MS tablespoonful/MS tablet/MS taboo/MS tabular/Y tabulate/DGNSX tabulator/MS tachometer/MS tachometry tacit/PY tack/DGRS tackle/DGMRS tact/I tactics tactile/Y tag/MS tagged tagging tail/DGJRS tailor/DGS taint/DS take/GHJRSZ taken takes/I tale/MNRS talent/DS talented/U talk/DGRSZ talkative/PY talkie/S tall/PRT tallow tame/DGPRSTY tamed/U tamper/DGRS tampered/U tan/S tandem tang/DY tangent/MS tangential/Y tangible/IP tangibly/I tangle/DGSU tangy/R tank/DGRSZ tanner/MS tantamount tantrum/MS tap/DGJMRSZ tape/DGJRSZ taped/U taper/DGRS tapestry/DMS tapped/U tapper/MS tapping taproot/MS tar/GS tardy/PRSY target/DGS tariff/MS tarp/MS tarry/DGS tart/PSY task/DGMS taste/DGRSZ tasteful/PY tasteless/PY tastier tastiest tatter/D tattoo/DRS tau taught/U taunt/DGRS taunting/Y taut/NPY tauten/DG tautological/Y tautology/MS tavern/MRS tawny/PRS tax/DGRS taxable taxation taxi/DGMS taxicab/MS taxing/Y taxonomic taxonomically taxonomy/S taxpayer/MS TCP tea/S teach/GJRSZ teachable/P teacher/MS team/DGMS tear/DGMRS tearful/PY teas/DGRS tease/DGRS teasing/Y teaspoon/MS teaspoonful/MS technical/PY technicality/MS technician/MS technique/MS technological/Y technologist/MS technology/MS tedious/PY tedium teem/DGS teeming/PY teen/RS teenage/DRZ teeth/DGR teethe/DGRS Teflon/M Tektronix/M telecommunication/S teleconference/DGMS telegram/MS telegraph/DGRSZ telegraphic teleological/Y teleology telephone/DGRSZ telephonic telephony telescope/DGMS teletype/MS televise/DGNSX television/MS televisor/MS tell/GJRSZ telling/SY temper/DGRS temperament/S temperamental/Y temperance/I temperate/IPY temperature/MS tempest/S tempestuous/PY template/DGMS temple/DMS temporal/Y temporary/PSY tempt/DGRSZ temptation/MS tempting/Y ten/HMS tenacious/PY tenant/MS tend/DGRSZ tendency/S tender/DGPSY tenement/MS Tennessee/M tennis tenor/MS tens/DGRSTV tense/DGNPRSTVXY tension/DGRS tensor/MS tent/DGRS tentacle/DS tentative/PY tented/U tenth/S tenure/DS tenured/U tequila/M term/DGRSY termcap terminal/MSY terminate/DGNSVX terminated/U terminative/Y terminator/MS terminology/S terminus ternary terrace/DGS terrain/MS terrestrial/MSY terrible/P terribly terrier/MS terrific/Y terrify/DGS terrifying/Y territorial/Y territory/MS terror/MS terrorism terrorist/MS terroristic tertiary/S test/DGJMRSZ testability testable/U testament/MS tested/U tester/MS testicle/MS testify/DGRSZ testimony/MS TeX TeX's Texas/MS text/DGMS textbook/MS textile/MS textual/Y texture/DGS than thank/DGRS thankful/PY thankless/PY thanksgiving/MS that/MS thatch/DGRS thaw/DGS the/GJ theatrical/SY theft/MS their/MS them thematic/U theme/MS themselves then thence thenceforth theologian/MS theological/Y theology/S theorem/MS theoretic/S theoretical/Y theoreticians theorist/MS theory/MS therapeutic/S therapist/MS therapy/MS there/M thereabouts thereafter thereby therefore therein thereof thereon thereto thereupon therewith thermodynamic/S thermometer/MS thermostat/DMS these/S thesis they they'd they'll they're they've thick/NPRSTXY thicken/DGRSZ thicket/DMS thickness/S thief/M thieve/GS thigh/DS thimble/MS thin/PRSTY thing/PS thingamajig/MS think/GRSZ thinkable/P thinkably/U thinking/PY thinkingly/U thinks/A thinner/S thinnest third/SY thirst/DRS thirsty/PRY thirteen/HS thirty/HS this thistle thong/D thorn/MS thorny/PR thorough/PY thoroughfare/MS those though thought/MS thoughtful/PY thoughtless/PY thousand/HS thousandth/S thrash/DGRS thread/DGMRSZ threading/A threat/NSX threaten/DGRS threatening/Y three/MS threescore threshold/DGMS threw thrice thrift thrifty/PRY thrill/DGRSZ thrilling/Y thrive/DGRS thriving/Y throat/DGS throb/S throbbed throbbing throne/GMS throng/GMS throttle/DGRS through/Y throughout throughput throw/GRS thrown thrush/S thrust/GRSZ thud/S thug/MS thumb/DGS thump/DGRS thunder/DGRSZ thunderbolt/MS thundering/Y thunderstorm/MS thunderstruck Thursday/MS thus/Y thwart/DGRSY thyself tick/DGRSZ ticket/DGMS tickle/DGRS ticklish/PY tidal/Y tide/DGJS tidy/DGPRSY tie/DRSZ tied/AU tier/DS tiger/MS tight/NPRSTXY tighten/DGJRSZ tilde/S tile/DGRS till/DGRSZ tillable tiller/DGS tilt/DGRSZ timber/DGS time/DGJRSYZ timeless/PY timely/PR timeout/S timer/MS timeshare/DGS timetable/DGMS timid/PY timidity tin/GMS tinge/DG tingle/DGS tingling/Y tinker/DGRS tinkle/DGS tinned tinning tinny/PRTY Tinseltown/M tint/DGRS tiny/PRTY tip/MS tipped tipper/MS tipping tiptoe/DGS tire/ADGS tired/APY tireless/PY tiresome/PY tissue/DGMS tit/MS tithe/GMRS title/DGMS titled/AU titling/A titter/DGS tizzy/S to/IU toad/MS toast/DGRSZ toasty/R tobacco today/MS toe/DMS together/P toggle/DGS toil/DGRS toilet/MS token/MS told/AU tolerability/I tolerable/I tolerably/I tolerance/S tolerant/IY tolerate/DGNSV toll/DGS tom/MS tomahawk/MS tomato tomatoes tomb/MS tomography tomorrow/MS ton/DGMRS tone/DGRS toned/I toner/I tongs tongue/DGS tonic/MS tonight/M tonnage tonsil too/H took tool/DGRSZ toolkit/MS tooth/DGS toothbrush/GMS toothpick/MS top/DGRS topic/MS topical/Y topmost topological/Y topology/S topple/DGS torch/MS tore torment/DGRSZ torn tornado/S tornadoes torpedo/DGS torpedoes torque/GRSZ torrent/MS torrid/PY tortoise/MS torture/DGRSZ torus/MS toss/DGRS total/MSY totality/MS totter/DGS tottering/Y touch/DGRS touchable/U touched/U touching/Y touchy/PRTY tough/NPRSTXY toughen/DGS tour/DGRS tourist/MS tournament/MS tow/DGRSZ toward/SY towardly/P towel/MS tower/DGS towering/Y town/MRS township/MS toxicity toxin/MS toy/DGRS trace/DGJMRSZ traceable/P traced/AU traceless/Y track/DGRSZ tracked/U tract/MSV tractability/I tractable/AI tractor/AMS trade/DGRSZ trademark/MS tradeoff/S tradesman tradition/MS traditional/Y traffic/MS trafficked trafficker/MS trafficking tragedy/MS tragic tragically trail/DGJRSZ train/DGRSZ trained/AU trainee/MS trait/MS traitor/MS trajectory/MS tramp/DGRS trample/DGRS trance/GMS tranquil/PY transact/DGS transaction/MS transceiver/MS transcend/DGS transcendent/Y transcontinental transcribe/DGRSZ transcript/MS transcription/MS transfer/MS transferability transferable transferal/MS transference transferral/MS transferred transferrer/MS transferring transfinite transform/DGRSZ transformable transformation/MS transformational transformed/U transgress/DGSV transgression/MS transience transiency transient/SY transistor/MS transit/DGSV transition/DGMS transitional/Y transitive/IPY transitivity transitory/PY translatability translatable translate/DGNSVX translated/AU translational translator/MS translucent/Y transmission/AMS transmit/AS transmittal transmitted/A transmitter/MS transmitting/A transmogrify/N transparency/MS transparent/PY transpire/DGS transplant/DGRS transport/DGRSZ transportability transportation/S transpose/DGS transposed/U transposition/MS trap/MS trapezoid/MS trapezoidal trapped trapper/MS trapping/S trash/DGRS traumatic travail/S travel/S traversal/MS traverse/DGRS travesty/MS tray/MS treacherous/PY treachery/MS tread/DGRS treason treasure/DGRS treasury/MS treat/DGRSZ treated/AU treatise/MS treatment/MS treaty/MS treble/DGS tree/DMS treehouse/MS treetop/MS trek/MS tremble/DGRS tremendous/PY tremor/MS trench/DRSZ trend/GS trespass/DRSZ tress/DMS trial/MS triangle/MS triangular/Y tribal/Y tribe/MS tribunal/MS tribune/MS tributary tribute/GMS trichotomy trick/DGRS trickle/DGS tricky/PRTY tried/AU trifle/DGRS trigger/DGS trigonometric trigonometry trihedral trill/DR trillion/HS trim/PRSY trimmed trimmer trimmest trimming/S trinket/DMRS trip/MSY triple/DGS triplet/MS triply/N triumph/DGS triumphal triumphantly trivia trivial/Y triviality/S trod/U troff/MR Trojan/MS troll/MS trolley/DMS troop/DGRSZ trophy/DGMS tropic/MS tropical/Y trot/S trouble/DGRS troubled/U troublemaker/MS troubleshoot/DGRSZ troublesome/PY trough/S trouser/DS trout/S trowel/MS truant/MS truce/G truck/DGRSZ Trudeau/M trudge/DGRS true/DGPRST truism/MS truly/U trump/DS trumpet/DGRSZ trumpeter/MS truncate/DGNSX truncation/MS trunk/DMS trust/DGRS trusted/U trustee/DMS trustful/PY trusting/Y trustworthiness/U trustworthy/PY trusty/PRS truth/S truthful/PUY try/ADGRSZ trying/Y tty/M ttys tub/DGMRSZ tube/DGRSZ tuberculosis tuck/DGRS tucker/DG Tuesday/MS tuft/DMRS tug/S tuition/IS tulip/MS tumble/DGRSZ tumult/MS tumultuous/PY tunable/P tune/DGJRSZ tunic/MS tuning/MS tunnel/S tuple/MS turban/DMS turbulence/M turbulent/Y turf Turing/M turkey/MS turmoil/MS turn/DGJRSZ turnable/A turnip/MS turnkey/S turnover/S turpentine turquoise turret/DMS turtle/GMS tutor/DGS tutored/U tutorial/MS TV TV's twain twang/G twas tweak/DGRS tweed tweezer/S twelfth/S twelve/S twenty/HS twice twig/MS twilight/MS twill/DG twin/DGMRS twine/DGRS twinkle/DGRS twirl/DGRS twirling/Y twist/DGRSZ twisted/U twit/MS twitch/DGR twitter/DGR two/MS twofold tying/U Tyler/M type/DGMRS typed/AU typedef/S typewriter/MS typhoid typical/PY typify/DGNS typist/MS typographic typographical/Y typography typos tyranny tyrant/MS UART ubiquitous/PY ubiquity UCB UCB's UCLA ugh ugly/PRTY ulcer/DGMS ultimate/PY Ultrix/M umbrella/MS umpire/DGMS unabashed/Y unabated/Y unable unacceptable unaccustomed/Y unacknowledged unadulterated/Y unalienability unalienable unalterable/P unalterably unambiguous/Y unambitious unanimous/Y unanticipated/Y unary unassailable/P unassuming/P unattainability unattainable unavailability unavailable unavailing/PY unaware/PSY unbecoming/PY unbelieving/Y unbiased/P unblinking/Y unblock/DGS unbound/D unbounded/P unbreakable unbroken unbudging/Y uncanny/PY unceasing/Y uncertain/PY unchangeable unchanging/PY uncle/MS unclean/PY uncleanly/P unclear/DY unclouded/Y uncomfortable uncommon/PY uncomplimentary uncomprehending/Y uncomputability/M unconcerned/PY unconditional/Y unconfirmed unconnected unconscious/PY unconstrained uncool/D uncooperative uncouth/PY uncover/DGS undaunted/Y undecided undefinability undefined/P undelete/D undeniable/P undeniably under/Y underbrush underdone underestimate/DGNSX underflow/DGS underfoot undergo/G undergoes undergone undergrad/MS undergraduate/MS underground/R underlie/S underline/DGJS underling/MS underly/GS undermine/DGS underneath underpayment/MS underpinning/S underplay/DGS underscore/DS understand/GJS understandability understandable understandably understanding/SY understated understood undertake/GJRSZ undertaken undertaker/MS undertip/S undertipped undertipping undertook underway underwear underwent underworld underwrite/GRSZ undetermined undeviating/Y undiplomatic undo/GJR undoubted/Y undress/DGS undue undumper/M uneasy/PY uneconomical unedifying unemployment unending/Y unendurable/P unequal/Y unequivocal/Y unessential unethical/Y uneven/PY uneventful/Y unextended unfading/Y unfair/PY unfaith unfaithful/PY unfamiliar/Y unfamiliarity unfashionable unfeigned/Y unfit/PY unfixed unflinching/Y unfold/DGS unforgeable unforgiving/P unfortunate/SY unfriendly/P ungainly/P ungrammatical unguessable unhallow/D unhappy/PRTY unhealthy/PY unhelm unicorn/MS unicycle/DGMS unicyclist/MS unidirectional/Y unidirectionality uniform/DGPSY uniformity/S unify/DGNRSXZ unilluminating unimaginable unimportant uninhibited/PY unintended uninteresting/Y uninterrupted/PY union/AMS unique/PY unison unit/DGMRSV unite/DGRSV united/Y unity/MS univalve/MS universal/PSY universality universe/MS university/MS Unix/M UNIX's unjam unjust/PY unkind/PY unkindly/P unknown/S unleash/DGS unless unlike/PY unlikely/P unlimited/Y unlink/DGS unload/DGRSZ unlock/DGS unlucky/PY unmanageable unmanageably unmannered/Y unmarried/S unmentionable/S unmerciful/Y unmistakably unmitigated/PY unmodifiable unmount/DGS unmountable unnatural/PY unnecessary/Y unnerve/DGS unnerving/Y unobservable/S unofficial/Y unpack/DGRS unperturbed/Y unpopular unprecedented/Y unprincipled/P unprovable unpublishable unravel/S unread unreadable unreal unrecordable unrelated unrelenting/Y unreliable unreported unrest unrestrained/PY unrestrictive unroll/DGS unruly/P unsafe/Y unsatisfactory/Y unsatisfying unseemly unsettled/P unsettling/Y unsociable/P unsophisticated unsound/DPY unstable/P unstamped unsteady/PY unstinting/Y unsuccessful/Y unsuitable unsure untangle/DGRS unthinkable untidy/PY untie/DS until untimely/P untouchable/MS untoward/PY untraceable untrue untruth unvarying unwashed/P unwearied/Y unwelcome unwholesome/Y unwieldy/PY unwilling/PY unwind/GRSZ unwise/RTY unwitting/Y unworthy/PY unwound/D unwrap/S unwrapping unyielding/Y up/S upbraid/R upbringing update/DGRS upfield upgrade/DGS upheld uphill uphold/GRSZ upholster/DGRSZ upholstering/A upkeep upland/RS uplift/DGRS upload/DGS upon upper/S uppermost upright/PY uprising/MS uproar uproot/DGRS upset/S upsetting upshot/MS upside/S upstairs upstream upturn/DGS upward/PSY urban urchin/MS urge/DGJRS urgent/Y urinate/DGNS urine urn/GMS us/DGRSZ usability usable/AU usably usage/S USC USC's use/DGRSZ used/AU useful/PY useless/PY Usenet/M Usenix/M user/MS USG/S USG's usher/DGS usual/PUY usurp/DR Utah/M utensil/MS utility/MS utmost utopian/MS utter/DGRSY utterance/MS uttered/U uttermost uucp/M vacancy/MS vacant/PY vacate/DGNSX vacation/DGRSZ vacillate/DGNSX vacillating/Y vacillator/MS vacuo vacuous/PY vacuum/DGS vagabond/MS vagary/MS vagina/MS vagrant/SY vague/PRTY vainly vale/MS valedictorian/M valence/MS valentine/MS valet/MS valiant/PY valid/IPY validate/DGINSX validated/AI validates/AI validation/AI validity/I valley/MS valuable/PS valuably/I valuation/MS valuator/S value/DGRSZ valued/AU values/A valve/DGMS van/DMS vane/DMS Vanessa/M vanilla vanish/DGRS vanishing/Y vanity/S vanquish/DGRS vantage/S VAR variability/I variable/MPS variably/I variance/MS variant/ISY variation/MS varied/Y variety/MS various/PY varnish/DGMRSZ varnished/U vary/DGJRS varying/SY vase/MS vassal/S vast/PRTY vat/MS vaudeville vault/DGRS vaunt/DR Vax/M VCR veal/AGR vector/DGMS veer/DGS veering/Y vegetable/MS vegetarian/MS vegetate/DGNSV vegetative/PY vehemence vehement/Y vehicle/MS vehicular veil/DGSU vein/DGRS velocity/MS velvet vend/GR vendor/MS venerable/P vengeance venison venom venomous/PY vent/DGRS ventilate/DGNSVX ventilated/U ventral/Y ventricle/MS Ventura/M venture/DGJRSZ veracity/I veranda/DMS verb/MS verbal/Y verbose/PY verdict/S verdure/D verge/RS verifiability verifiable/P verified/AU verifier/MS verify/DGNRSXZ veritable/P vermin versa versatile/PY versatility verse/ADGNRSX versus vertebrate/MNS vertex/S vertical/PSY vertices very/RTY vessel/MS vest/DGIS vestige/MS vestigial/Y veteran/MS veterinarian/MS veterinary veto/DGR vetoes vetting/A vex/DGS vexation vexed/Y vi/DMRS via viability/I viable/I viably vial/MS vibrate/DGNSX vice/GMS viceroy vicinity/S vicious/PY vicissitude/MS victim/MS victor/MS victorious/PY victory/MS victual/S video/S videotape/DGMS vie/DRS view/DGJRSZ viewable/U viewer/AMS viewpoint/MS vigilance vigilant/Y vigilante/MS vignette/DGMRS vigorous/PY vii viii vile/PRTY vilify/DGNRSX villa/MS village/MRSZ villain/MS villainous/PY villainy vindictive/PY vine/GMS vinegar/S vineyard/MS vintage/RS violate/DGNSVX violator/MS violence violent/Y violet/MS violin/MS violinist/MS viper/MS viral/Y virgin/MS Virginia/M virginity virtual/Y virtue/MS virtuoso/MS virtuous/PY virus/MS visa/DGS visage/D viscosity/S viscount/MS viscous/PY visibility/S visible/IP visibly/I vision/DGMS visionary/P visit/ADGS visitation/MS visited/AU visitor/MS visor/DMS vista/DMS visual/SY vita vitae vital/SY vitality vitamin/MS vivid/PY vizier VMS VMS's vocabulary/S vocal/SY vocation/MS vocational/Y vocations/AI vogue voice/DGRSZ voiced/IU void/DGPRS volatile/PS volatility/S volcanic volcano/MS volley/DGRS volleyball/MS volt/AS voltage/S volume/DGMS voluntary/IPY volunteer/DGS vomit/DGRS vortex/S vote/DGRSVZ voter/MS votive/PY vouch/GRSZ vow/DGRS vowel/MS voyage/DGJRSZ vulgar/Y vulnerability/S vulnerable/IP vulture/MS wade/DGRSZ wafer/DGMS waffle/DGMS waft/R wag/DGRSZ wage/DGRSZ waged/U wager/DGRS wagon/MRSZ wagoner/MS wail/DGRS waist/DMRS waistcoat/DMS wait/DGRSZ waiter/MS waitress/MS waive/DGRSZ waiverable wake/DGRS waken/DGR walk/DGRSZ walkway/MS wall/DGMRS wallet/MS wallow/DGRS walnut/MS walrus/MS waltz/DGRS wan/DGPY wand/RZ wander/DGJRSZ wane/DGS want/DGRS wanted/U wanton/PRY war/GMS warble/DGRS ward/DGMNRSX warden/MS wardrobe/MS ware/GS warehouse/DGRS warfare/MS warily/U warlike warm/DGHPRSTYZ warn/DGJRS warning/SY Warnock/M warp/DGMRS warrant/DGRS warranted/U warranty/MS warred warring warrior/MS warship/MS wart/DMS wary/PRTY was wash/DGJRSZ Washington/M wasn't wasp/MS waste/DGRSZ wasteful/PY waster/MS wasting/Y watch/DGJMRSZ watchdog/MS watched/U watchful/PY watchman watchword/MS water/DGJMRS waterfall/MS waterproof/DGPRS waterway/MS watery/PY wave/DGRSZ waveform/MS wavefront/MS wavelength/S waver/DGRS wavering/UY wax/DGNRSZ waxy/PR way/MS wayside/S wayward/PY we/DGJTV we'd we'll we're we've weak/NPRTXY weaken/DGRS weakly/P weakness/MS wealth/S wealthy/PRTY wean/DGR weapon/DMS wear/GRS wearable wearied/U wearing/Y wearisome/PY weary/DGPRSTY weasel/MS weather/DGRSY weathercock/MS weave/GRSZ web/MRS wed/S wedded wedding/MS wedge/DGS Wednesday/MS wee/D weed/DGRS week/MSY weekday/MS weekend/MRS weekly/S weep/DGRSZ Weibull/M weigh/DGJRS weighed/U weight/DGJRS weird/PRTY welcome/DGPRSY weld/DGJRSZ welfare well/DGPS wench/MRS went wept/U were weren't west/GR wester/DGY westerly/S western/MRSZ westward/S wet/PSY wetted wetter wettest wetting whack/DGRS whale/GRS whammy/S wharf/S wharves what/MS whatchamacallit/MS whatever/M whatsoever wheat/N wheel/DGJMRSZ whelp when whence whenever where/MP whereabouts whereas whereby wherein whereupon wherever whether whew whey which whichever while/DGS whim/MS whimper/DGS whimsical/PY whimsy/DMS whine/DGRS whining/Y whip/MS whipped whipper/MS whipping/MS whirl/DGRS whirlpool/MS whirlwind whirr/G whisk/DGRSZ whisker/DS whiskey/MS whisper/DGJRS whispering/SY whistle/DGRSZ whit/DGNRTX white/DGPRSTY whiten/DGRSZ whitespace whitewash/DGR whittle/DGJRS whiz whizzed whizzes whizzing who/M whoever whole/PS wholehearted/Y wholesale/DGRSZ wholesome/PY wholly whom whomever whoop/DGRS whore/GMS whorl/DMS whose why wick/DGRS wicked/PY wide/PRTY widen/DGRS widespread widget/MS widow/DRSZ width/S wield/DGRS wife/MY wifely/P wig/MS wigwam Wilbur/M wild/GPRTY wildcat/MS wilder/P wile/DGS will/DGJRS willed/U willful/PY willing/PSY Willisson/M willow/MRS Wilson/M wilt/DGS wily/PRY win/DGRSZ wince/DGS wind/DGRSZ windmill/GMS window/DGMS windy/PRY wine/DGRSZ wing/DGRSZ wink/DGRS winking/U winner/MS winning/SY winter/DGMRSY wintry/PRY wipe/DGRSZ wire/DGJRS wired/AU wireless wires/A wiretap/MS wiry/PRY wisdom/S wise/DGPRSTY wish/DGRSZ wishful/PY wisp/MS wistful/PY wit/MPS witch/GS witchcraft with/RZ withal withdraw/GRS withdrawal/MS withdrawn/P withdrew wither/DGS withering/Y withheld withhold/GJRSZ within without withstand/GS withstood witness/DGS witnessed/U witty/PRTY wive/GS wizard/MSY woe/P woeful/Y woke wolf/MRS wolves woman/MY womanhood womanly/P womb/DMS women/MS won't wonder/DGRS wonderful/PY wondering/Y wonderland/M wonderment wondrous/PY wont/DG wonted/PUY woo/DGRS wood/DGMNS woodchuck/MS woodcock/MS wooden/PY woodland/R woodman woodpecker/MS woods/R woodwork/GR woody/PR woof/DGRSZ wool/DS word/DGJMS wordy/PRY wore work/DGJMRSZ workable/P workably workaround/MS workbench/MS workbook/MS worker/MS workhorse/MS workingman workload/MS workman/Y workmanship workmen/M workshop/MS workstation/MS world/MSYZ worldly/PU worldwide worm/DGMRS worn/U worried/Y worrisome/PY worry/DGRSZ worrying/Y worse/R worship/S worshipful/PY worst/D worth/GS worthless/PY worthwhile/P worthy/PRSTY would/T wouldn't wound/DGS wove woven/U wrangle/DGRSZ wrap/MS wrapped/U wrapper/MS wrapping/S wraps/U wrath wreak/S wreath/DGS wreck/DGRSZ wreckage wren/MS wrench/DGS wrenching/Y wrest/DGRS wrestle/DGJRS wretch/DS wretched/PY wriggle/DGRS wring/GRS wrinkle/DGS wrinkled/U wrist/MS wristwatch/MS writ/GJMRSZ writable/U write/GJRSZ writer/MS writhe/DGS written/AU wrong/DGPRSTY wrote/A wrought/I wrung Xenix/M Xeroxed Xeroxes Xeroxing xi xii xiii xiv xix xv xvi xvii xviii xx yacc/M Yamaha/M yank/DGS yard/DGMS yardstick/MS yarn/DGMS yawn/GRS yawning/Y yea/S yeah year/MSY yearn/DGJRS yearning/SY yeast/MS yecch yell/DGRS yellow/DGPRST yellowish yelp/DGRS Yentl/M yeoman/Y yeomen yes/S yesterday/MS yet yield/DGRS yielded/U yielding/U yoke/GMS yon yonder York/MRSZ you/H you'd you'll you're you've young/PRTY youngster/MS your/MS yourself yourselves youth/MS youthful/PY yuck Yugoslavian/MS yummy/R yuppie/MS zap/S zapped zapping zeal Zealand/MRZ Zealander/MS zealous/PY zebra/MS zenith zero/DGHS zeroes zest zigzag zinc/M zodiac/S zombie/MS zonal/Y zone/DGRSY zoo/MS zookeeper/MS zoological/Y zoom/DGS Zulu/MS ispell-3.4.00/languages/english/PaxHeaders.19408/american.00000644000000000000000000000013212465616724020104 xustar0030 mtime=1423384020.478890906 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/american.00000444003214100001440000002123612465616724021155 0ustar00geofffaculty00000000000000acclimatization/AMS acclimatized/U accouterment/MS actualization/AMS aerosolize/D agonize/DGRSZ agonized/Y agonizing/Y alphabetize/DGRSZ aluminum/MS amenorrhea amortize/DGS amortized/U amphitheater/MS analog/MS analyzable/U analyze/ADGRSZ analyzed/AU anemia/MS anemic/S anesthesia/MS anesthetic/MS anesthetically anesthetize/DGRSZ anesthetizer/MS anodize/DGS anonymize/DGS antagonize/DGRSZ antagonized/U antagonizing/U apologize/DGRSZ apologizes/A apologizing/U appall/S appareled appetizer appetizing/UY arbor/DMS archaize/DGRSZ ardor/MS arithmetize/DS armor/DGMRSZ armored/U armorer/MS armory/DMS atomization/MS atomize/DGRSZ authorization/AMS authorize/DGRSZ authorizes/AU autodialer/S axiomatization/MS axiomatize/DGS Balkanize/DGS baptize/DGRSZ baptized/U baptizes/U barreled barreling bastardize/DGS bastardized/U bedeviled bedeviling behavior/DMS behavioral/Y behaviorism/MS behavioristic/S behoove/DGJMS behooving/MSY belabor/DGMS beveled beveling/S bowdlerize/DGRS brutalize/DGS brutalized/U brutalizes/AU burglarize/DGS busheled busheling/S caliber/S canaled canaling canceled/U canceler canceling candor/MS cannibalize/DGS canonicalization canonicalize/DGS capitalization/AMS capitalize/DGRSZ capitalized/AU capitalizes/A carbonization/AMS carbonize/DGRSZ carbonizer/AS carbonizes/A catalog/DGMRS categorization/MS categorize/DGRSZ categorized/AU center/DGJMRSZ centerpiece/MS centimeter/MS centralization/AMS centralize/DGRSZ centralizes/A channeled channeler/MS channeling characterizable/MS characterization/MS characterize/DGRSZ characterized/U checkbook/MS chiseled chiseler/S civilization/AMS civilize/DGRSZ civilized/PU civilizes/AU clamor/DGRSZ clamorer/MS cognizance/AI cognizant/I colonization/AMS colonize/DGRSZ colonized/U colonizes/AU color/DGJMRSZ colored/AU coloreds/U colorer/MS colorful/PY colorless/PY colors/A columnize/DGS compartmentalize/DGS computerize/DGS conceptualization/MS conceptualize/DGRS conceptualizing/A counseled counseling counselor/MS criticize/DGRSZ criticized/U criticizes/A criticizing/UY criticizingly/S crystallize/DGRSZ crystallized/AU crystallizes/A customizable customization/MS customize/DGRSZ decentralization/MS decentralized defense/MSU defenseless/PY demeanor/MS demoralize/DGRSZ demoralizing/Y dialed/A dialer/AS dialing/AS dichotomize/DGS digitize/DGRSZ digitizer/MS dishonor/DGRSZ dishonored/U dishonorer/MS disorganized/U draftsman dueled dueler/S dueling/S economize/DGRSZ economizing/U editorialize/DGRS enameled enameler/S enameling/S endeavor/DGMRSZ endeavored/U endeavorer/MS enroll/S enrollment/MS epitomize/DGRSZ epitomized/U equaled/U equaling equalization/MS equalize/DGJRSZ equalized/U equalizer/MS equalizes/U esthetic/MS esthetically eviler evilest factorization/MS familiarization/MS familiarize/DGRSZ familiarized/U familiarizing/Y fantasize/DGRS favor/DGJMRSZ favorable/MPSU favorably/U favored/MPSY favored's/U favorer/MS favoring/MSY favorings/U favorite/MSU favors/A fertilization/AMS fertilize/DGRSZ fertilized/U fertilizes/A fervor/MS fiber/DMS fiberglass finalization/S finalize/DGS flavor/DGJMRSZ flavored/U flavorer/MS formalization/MS formalize/DGRSZ formalized/U formalizes/I fueled/A fueler/S fueling/A fulfill/S fulfillment/MS funneled funneling generalization/MS generalize/DGRSZ generalized/U glamorize/DGRSZ gospeler/S graveled graveling groveled groveler/S groveling/Y harbor/DGMRSZ harborer/MS harmonize/DGRSZ harmonized/U harmonizes/AU honor/DGRSZ honorable/MPS honorables/U honorably/SU honored/U honorer/MS honors/A hospitalize/DGS humor/DGMRSZ humored/U hypothesize/DGRSZ idealization/MS idealize/DGRSZ idealized/U imperiled individualize/DGRSZ individualized/U individualizes/U individualizing/Y industrialization/MS initialed initialer initialing initialization/MS initialize/DGRSZ initialized/AU institutionalize/DGS internalization/MS internalize/DGS italicize/DGS italicized/U itemization/MS itemize/DGRSZ itemized/U itemizes/A jeopardize/DGS jeweled jeweling jewelry/MS journalize/DGRSZ journalized/U kidnaped kidnaper/MS kidnaping/MS kilometer/MS labeled/AU labeler/MS labelers/A labeling/A labor/DGJRSZ labored/MPY labored's/U laborer/MS laboring/MSY laborings/U laureled legalization/MS legalize/DGS legalized/U leveled/U leveler/S levelest leveling/U liberalize/DGRSZ liberalized/U license's linearizable linearize/DGNS liter/S localization/MS localize/DGRSZ localized/U localizes/U luster/DGS magnetization/AMS maneuver/DGRS marshaled marshaler marshaling marveled marveling marvelous/PY materialize/DGRSZ materializes/A maximize/DGRSZ mechanization/MS mechanize/DGRSZ mechanized/U mechanizes/U medaled medaling memorization/MS memorize/DGRSZ memorized/U memorizes/A metaled metaling millimeter/MS miniaturization/S miniaturize/DGS minimization/MS minimize/DGRSZ minimized/U miter/DGR modeled/A modeler/S modeling/S modernize/DGRSZ modernized/U modernizes/U modularization modularize/DGS motorize/DGS motorized/U multileveled nationalization/MS nationalize/ADGRSZ nationalized/AU naturalization/MS neighbor/DGJMRSYZ neighbored/U neighborer/MS neighborhood/MS neighborly/PU neutralize/DGRSZ neutralized/U nickeled nickeling normalization/MS normalize/DGRSZ normalized/AU normalizes/AU notarize/DGS odor/DMS offense/MS optimization/MS optimize/DGRSZ optimized/U optimizer/MS optimizes/U organizable/MSU organization/AMS organizational/MSY organize/ADGRSZ oxidize/DGJRSZ oxidized/U oxidizes/A pajama/S paneled paneling/S panelist/MS paralleled/U paralleling parallelization/MS parallelize/DGRSZ paralyze/DGRSZ paralyzed/Y paralyzedly/S paralyzer/MS paralyzing/Y paralyzingly/S parameterizable parameterization/MS parameterize/DGS parameterized/U parceled/U parceling parenthesized parlor/MS patronize/DGJRSZ patronized/U patronizes/A patronizing/MSY penalize/DGS penalized/U penciled penciling/S personalization/MS personalize/DGS petaled philosophize/DGRSZ philosophized/U philosophizes/U plow/DGRS plowed/U plowman pluralization/MS pluralize/DGRSZ polarization/MS popularization/MS popularize/DGRSZ popularizes/U practiced/U practicer practicing preinitialize/DGS pressurize/DGRSZ pretense/NSVX prioritize/DGJRSZ productize/DGRSZ proselytize/DGRSZ publicize/DGS pulverize/DGRSZ pulverized/U pulverizes/AU quantization/MS quantize/DGRSZ quantizer/MS quarreled quarreler/S quarreling queuing randomize/DGRS rationalize/DGRSZ realizable/MPS realizably/S realization/MS realize/DGJRSZ realized/U realizing/MSY recognizability recognizable/U recognizably recognize/DGRSZ recognized/Y recognizedly/S recognizing/UY recognizingly/S reinitialize/DGS relabeler/S remodeling reorganized/U reprogram/S reveled reveler/S reveling/S revolutionize/DGRSZ rigor/MS rivaled/U rivaling ruble/MS rumor/DGMRSZ rumored/U rumorer/MS saber/DGMS sabered/U sanitize/DGRS savior/MS savor/DGRSZ savorer/MS savorily/SU savoring/Y savoringly/S savory/MPRSTY scepter/DGMS scepters/U scrutinize/DGRSZ scrutinized/U scrutinizing/UY scrutinizingly/S sepulcher/DMS sepulchers/AU sequentialize/DGS serialization/MS serialize/DGRSZ serializer/MS shoveled shoveler/S shoveling shriveled shriveling signaled signaler/S signaling socialize/DGRS socialized/U specialization/MS specialize/DGRSZ specialized/U specializing/U specter/DMS spiraled spiraling splendor/MS squirreled squirreling stabilize/DGRSZ standardization/AMS standardize/DGRSZ standardized/U standardizes/A stenciled stenciler/S stenciling sterilization/MS sterilize/DGRSZ sterilized/U sterilizes/A stylized subsidize/DGRSZ subsidized/U succor/DGRSZ succored/U succorer/MS sulfate/DGS sulfur/DG sulfuric summarization/MS summarize/DGRSZ summarized/U symboled symboling symbolization/AMS symbolize/DGRSZ symbolized/U symbolizes/A sympathize/DGJRSZ sympathized/U sympathizing/MSUY synchronization/MS synchronizations/A synchronize/DGRSZ synchronized/AU synchronizes/A synthesize/DGRSZ synthesized/U synthesizes/A systematize/DGRSZ systematized/U systematizing/U tantalize/DGRSZ tantalized/U tantalizing/PY tantalizingly/S tantalizingness/S terrorize/DGRSZ terrorized/U theater/MS theorization/MS theorize/DGRSZ tire's titer/S totaled totaler/MS totaling toweled toweling/S tranquility tranquilize/ADGJRSZ tranquilized/AU tranquilizer/AMS tranquilizing/AMSY transistorize/DGS traveled traveler/MS traveling/S trivialize/DGS troweler/S tumor/DMS tunneled tunneler/S tunneling/S unauthorized/PY uncivilized/PY uncolored/PSY unfavored/M unionization unionize/DGRSZ unlabored/M unorganized/PY unpatronizing/MY unraveled unraveling unrecognized unsavored/PY unsystematized/Y utilization/A utilize/DGRSZ utilizes/A valor/MS vandalize/DGS vapor/DGJMRSZ vaporer/MS vaporing/MSY vectorization vectorizing verbalize/DGRSZ verbalized/U victimize/DGRSZ victimized/U victualer/S vigor/MS visualize/DGRSZ visualized/U visualizes/A weaseled weaseling womanize/DGRSZ womanized/U womanizes/U woolen/S wooly/PRS worshiped worshiper/MS worshiping ispell-3.4.00/languages/english/PaxHeaders.19408/english.30000644000000000000000000000013212465612633017754 xustar0030 mtime=1423381915.094317384 30 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/english/english.30000444003214100001440000051626012465612633021033 0ustar00geofffaculty00000000000000Aachen Aalborg Aalesund aardwolf Aargau Aaronic AAU abac abaca abactinal abadan abakan abamp abampere abator Abba Abbado abbasid abbatial abbess Abbevillian Abbeydale abcoulomb abdias abdominous abednego Abelard Abele Abelmosk abeokuta aberdare Abernethy Aberystwyth abfarad abhenry abib abietic abilene abingdon abirritant abirritate abkhaz ablactation ablator abohm aboideau aborticide aboukir aboulia abranchiate Abravanel Abraxas abri abruzzi Absalom abseil absinthism absonant absorbefacient absorptivity absquatulate abstergent Abu abukir abulia abvolt abwatt aby abydos abysm Abyssinian acajou acanthaceous acanthine acanthoid acanthous acariasis acarid acaroid acarology acarpous Acarus acas acaudal accad accentor accidie accipitrine accommodatory accouplement accrescent Accrington accutron Aceldama acerate acerose acescent acetabulum acetanilide acetometer acetophenetidin acetum acetylcholine acetylide acetylsalicylic achaea Achaemenid Achates achelous achene Achernar acheron acheulian Achitophel achlamydeous achlorhydria achondrite achondroplasia achromatin achromatous achromic acicula aciculate aciculum acidometer acidophil acidophilus acidosis acierate acinaciform aciniform Acis ackee ACL aclinic acnode acol aconcagua aconite acotyledon acouchi acridine acriflavine acrilan acrocarpous acrodrome acrogen acrolein acrolith acromegaly acromion acrospire acroter acrylamide acrylonitrile acrylyl acta actin actinal Actinia actinidin actiniform actinochemistry actinoid actinomere actinomorphic actinomycete actinomycin actinomycosis actinon actinopod actinotherapy actinouranium actinozoan Actium actomyosin aculeus acutance acyclical adactylous adamawa Adamite adamsite adana adaptably Adar Addams addax Addington ademption Adenauer adenectomy adenitis adenocarcinoma adenohypophysis adenoidectomy adenovirus adhibit adiaphorism adiaphorous adiathermancy Adige adipocere adit adivasi admass admetus adminicle adnate adnominal adnoun Adonai Adonic adowa adrastus adscription adsorbtion adsuki adularia Adullamite adumbral aduwa adventitia adversarial Advowson adygei adynamia adytum adzhar adzuki aeciospore aecium Aedes aedile Aegeus Aegina Aegisthus aegospotami aegrotat aeneous Aeolic Aeolipile Aeolis Aepyornis Aeschines Aesculapian Aesculapius Aesir aestheticism Aetolia afebrile Affenpinscher affettuoso afflatus affreightment aforemention aforetime Africanism Africanist Afrikander Afrikanerdom afrit afrormosia afterbody afterbrain afterburning afterheat afterpains aftersensation aftershaft aga agadir agalloch Agama agamogenesis Agapanthus agaric agartala agateware agegroup Ageratum aggro agha Agincourt agiotage agist Aglaia aglet agley aglimmer agma agminate agnail agni agnus agora Agostini Agra agraffe agram agranulocytosis Agrapha agraphia agrestal agrestic agrigento Agrippa agrippina agrose agrostology agrypnotic Aguascalientes agueweed agulhas ahab Ahasuerus ahimsa ahithophel Ahmednagar Ahriman ahura Ahvenanmaa Ahwaz Aidan Aidin aiglet aiguille aiguillette aikido aikona Aileen ailurophile ailurophobe ain aintab airboat airbrick aircraftman airdrie aire airforce airgun airt aisha aisne ait aitchbone ajaccio ajmer aka Akan akbar akela akene akhara akhenaten Akhmatova akihito Akkad Akkadian akkerman Akmolinsk aksum Aktyubinsk akure akvavit alagez alagoas Alamein alamode alanbrooke alanine alannah alap alar Alaric albacete albata albemarle alberti albertite albertus albescent Albi Albigenses Albinoni albinus Albion albite Alboin albuminate albuminuria albumose alburnum Albury alcaeus alcahest alcaide alcalde alcan alcatraz alcheringa alcidine Alcman alcmene Alcock alcoholicity Alcoran alcuin Alcyone aldabra aldan Aldermaston Alderney aldershot Aldine aldis aldol aldosterone aldoxime Aldus alecost alecto alegar alekhine Aleksandropol Aleksandrovsk Alemanni Alemannic alembicated Aleppo alessandria alethic aleurone alevin alexandretta Alexandrian alexipharmic Alexius alfieri alfilaria alforja algarroba algebraical algeciras Algerine alginic algoid algolagnia algology algometer Algonkian algor algorism alible alicante aligarh aliped aliunde alkalic alkane alkene alkmaar Alkoran alky alkyd alkylation alkyne Allahabad allanite allantoid allantois allargando Allenby Allende alleppey allethrin allhallows Allhallowtide alloa allodial allodium allonym alloplasm allotts allyou almada Almeida almelo almemar Almohade almonry Almoravide almucantar almuce alodium alopecia alost alow alpenhorn alpes alphatically alpheus alphonsus alphorn alphosis alsace Alsatia alsike alt Altaic Altamira altdorf/R alternant althing althorn altiplano altissimo altona altostratus Altrincham aludel alula aluminiferous aluminothermy alumroot alvey alvine amadavat amadou amagasaki amalekite amalthea amaranthaceous amaranthine amarelle amaryllidaceous Amaryllis Amati amatol amaut amazonas ambala ambary amberjack amberoid amblygonite amblyopia ambo amboceptor Amboina amboise amboyna ambroid Ambrosian ambry amdahl ameba ameer Ameling amenhotep Americanist Amerigo Amerindian Amersfoort amesace Ameslan Amfortas amhara amharic amianthus amice amicus amidol amidship Amiga amin aminophenol aminopyridine aminopyrine amir Amish ammine ammocoete ammon ammonal ammonate ammonic Ammonites amoebaean amon amontillado amoroso amowt Amoy Ampelopsis amphiarthrosis amphiaster amphibiotic amphiblastula amphibrach amphichroic amphicoelous amphictyon amphictyony amphidiploid amphigory amphimacer amphimixis amphiprostyle amphiprotic amphisbaena amphistylar amphithecium amphitricha Amphitrite Amphitryon amphora amphoteric ampulla amravati amrita Amritsar amstrad Amundsen amur amygdala amygdalate amygdale amygdalin amygdaline amygdaloidal amylaceous amylase amylene amyloid amylolysis amylopectin amylopsin amylose amyotonia Amytal Anabaena anabantid Anabas Anableps anabolite anabranch anacardiaceous anachorism anaclinal anacoluthia anacoluthon anacoustic Anacreontic anacrusis anadem anadex anadromous anadyr anaglypta anagnorisis anagoge anak analcite analects Anam anambra anamnesis anamorphism anamorphoscope anamorphosis anandrous Ananias ananthous anapaest anaphrodisiac anaplasty anaptyxis anapurna anarthria anarthrous anasarca anastomose anatase anatolia anatto anaxagoras anaximander anaximenes anbury Anchises anchoveta anchylose ancipital ancohuma ancon Ancona ancy ancylostomiasis andalusia Andaman anderlecht Andhra andizhan andreanof andreotti androcles androclinium androecium androgenous androgyne andros androsphinx androsterone andvari ane anear anelace anele anemochore anemography anemology anemophilous anemoscope anergy anestrus anethole aneto aneuploid aneurin Angara Angarsk angelico angell angelology Angelus Angevin angiology angioma Angkor Anglesey Anglian Anglicist Anglomania Anglophone angostura angra Anguilla anguilliform anguine angwantibo anhalt anhinga anhwei aniakchak aniconic anil anilingus anima animatism animato anisodactyl anisogamy anisole anisometric anisometropia Anjou anking ankus ankylosaur ankylose ankylosis ankylostomiasis anlace anlage annaba annabergite Annam Annamese Annapurna annates annatto annecy anno annulose anoa anoestrus anole Anopheles anorak anorthositic Anouilh anoxaemia ansate anschluss Ansermet anshan Antarctic antemeridian antependium antepenultimate antetype anteversion antevert anthelmintic anthemion antheridium antherozoid anthocyanin anthophore anthotaxy anthozoan anthracene anthracoid anthraquinone anthropomorphosis anthropomorphous anthropopathy anthropophagi anthropophagite Anthurium antibaryon antibes anticathode antichlor anticholinesterase antichrist anticlastic anticlinorium anticosti anticyclone/S antidromic antiegalitarian antifebrile antifederalist antiferromagnetism antifluoridation Antigonus Antigua antihalation antihelices antihelix antihero/S antilepton/S antilogism antilogy antimasque antimere antimilitarist/S antimissile/S antimonous antimonyl antiochus antiparallel antipater antiperistalsis antipsychiatry antirachitic antiremonstrant antisana antiscorbutic antistatic antisthenes antitragus antitype antiworld antlia antlion antofagasta antoninus antonioni antonius antonomasia antre antrim antrum antung anu Anubis anuradhapura anuran anuresis anuria anurous anvers anyang Anzac anzio anzus aorangi aosta aoudad apagoge apanage aparri apatetic apeldoorn apelles apeman apennines apery apetalous aphagia apheliotropic aphesis Aphis aphonia aphtha apia apiezon Apis apivorous aplanospore aplite apnoea apo apocarp apochromat apocopate apocynaceous apocynthion apoenzyme apogamy apogeotropism apollinaris Apollyon apomict apopemptic apophasis apophthegm apophyge apophyllite apophysis apopolectic aposiopesis apospory apostil appaloosa apparitor appassionato appel appendicectomy appendicle appenzell applecart/S applesnits appointor/S approximal approximator/S appulse apriorism APS apteral apterygial apuleius apulia apure apurimac Apus apyretic aqaba aqualung aquashow aquileia aquitaine aquittal ara/S arabica arabinose Arabist arad Arafat arafura aragats aragon aragonite araguaia Araiza arak/S arakan araldite araliaceous aram Aramaic aran araneid arany arapaima ararat araroba araucania Araucanian Araucaria Arawakan araxes arbalest Arbela arbil arbitress arboraceous arbroath arbuthnot Arcadic arcature archaean archaeomagnetism Archaeopteryx Archaeornis archaeozoic Archean archegonium archenteron archerfish archespore archicarp archidiaconal archidiaconate archiepiscopal archiepiscopate archil Archilochian archilochus archimage archimandrite archine archipenko archiphoneme archiplasm archoplasm arcograph Arctic Arctogaea arcus ardeb ardennes Areca areg arenicolous arenite areography Areopagus Ares Arethusa aretino arezzo argal argali argand argenteuil argentum Argerich argil argilliferous argillite argol argolis argonon argovie Argyrol Arian arica Ariel arietta aril arillode arimathea ariminum ariose arioso ariosto arista aristaeus aristarchus Aristides Aristippus aristophanes Arius arjuna Arkhangelsk Arkhipova arkose arkwright Arlberg arles arlon armagh armagnac armband armes armet armiger armillary Arminian arminius armipotent armorica armure arne arnhem arnica arnim arno aroid aroint arp arpent arquebus arran Arrau arrestable arretium arrivisme arroba Arroyo arru arse arsenopyrite arsphenamine artaud artaxerxes arteriovenous arthralgia arthromere Arthurian artic artistical artois arunachal arundel arundinaceous aruspex aruwimi arvo arytenoid asantehene asarabacca Asarum asben Ascanius ascariasis ascarid Ascensiontide asch Aschaffenburg Ascham asci asclepiadaceous Asclepiadean Asclepius ascocarp ascogonium ascoli ascomycete ascorbic aseity asepalous asgard Ashanti ashcroft ashe ashet Ashford Ashkenazi Ashkenazy ashkey Ashkhabad ashlar/DGS Ashmore ashplant Ashton ashtoreth Ashur ashurbanipal asir askari askja aslef asmara asmodeus aso asoka Aspasia aspergillosis aspergillus asphyxiant/S aspinwall asquint asquith assad Assamese assentient asshur assibilate assiniboine Assisi assiut associationism assuan assurbanipal astable astaire asternal asti Astilbe astolat astomatous astraphobia astrict astrobotany astrocompass astrodynamics astrogeology astroid astrometry asturias astyanax asur aswan asyllabic asymptotical asyut atacama atactic ataghan atahualpa ataman atbara Aten athabaska athamas Athanasian athanasius athelstan athematic athermanous atheroma Atherton athodyd athos Atlantean Atlantov atli atmolysis atomy atrabilious attaboy attemper Attenborough attenuant attercliffe Attila attlee attu atween aubade aube Aubergine Aubervilliers Aubrietia Aubusson aude audiotypist audiphone auer Auger Augsburg Augustinian auklet aulic aulis aurangzeb aurelian aureus auriferous Aurignacian auriol aurist aurum ausforming ausonius Aussie austen austenitic Auster Austerlitz Australasia Australiana Australianism Australoid Australorp Austrasia Austronesia Austronesian autacoid autarchy autarky autecious autecology auteur autochanger autochthon autocode autocue autocycle Autoharp autoicous autokinetic autoload/DS autolycus autolyse automorphic autopista autoput autoroute autostability autostrada autotimer autotoxaemia autotoxin autotype autoxidation auvergne auxanometer auxochrome avadavat avagadro avalon Avar avebury aveiro avellaneda avens averno Averroism Avestan aveyron avicenna aviemore avignon avizandum avlona avunculate awheel awlwort Axminster axseed axum ayacucho ayah ayahuasca aycliffe aydin ayesha Aymara ayr Ayrshire ayub ayurveda ayutthaya azan azazel azbine Azerbaijani azikiwe Azilian aznavour azo/H azobenzene azoic azole azotemia azotic Azotobacter Azov Azrael baa/S Baal Baalbek Baaskap Bab baba babar babassu babbage babeuf Babi babiche babirusa Babism babu babul babur babylonia Bacchae bacchius bacciform baccivorous baccy Bacharach backbench/RZ backblocks backbreaker backbreaking backchat backcloth backcomb backdate/DGS backhaus backmost backscratcher backsheesh backstreet backus backwardation baclava bacolod Bacquier bacteraemia bacteriological bacteriology bacteriolysis bacteriophage bacteriostasis bacteroid bactria Bactrian baculiform baculum badajoz badalona badderlocks baddie badman badoglio baeda Baedeker bael baeyer baez Baganda bagasse Bagdad bagehot bagh baghlan bagie bagnio baguio bagwash bagwig bagworm bahadur Bahai Bahaism bahasa bahia Bahrain baht bahuvrihi baikal baile baines Bairam bairnsfather baja bajan bakeapple bakehouse bakewell bakra baksheesh bakst bakunin Bala Balaam balaclava Balakirev Balaklava balanchine balas balata Balaton balbo balbriggan baldmoney baldric Balearic balibuntal balikpapan baliol balkh balkhash Balkis balladmonger ballance ballarat ballflower balliol ballocks ballonet Balmacaan balmain Balmoral balmung balneal balneology balpa balsamiferous balsaminaceous Balt Balthazar Baltsa Baluchi Baluchistan Bambara Bamberg banaras banat banc Banda bandaranaike banderilla banderillero bandh bandicoot bandjarmasin bandobust bandoline bandore bandsaw bandspreading bandung Banff bangalore bangka bangweulu banian banja banjermasin banjul Bank banka banket banknote/S bannerol Bannockburn bansela banstead bant/G Bantoid Bantustan Banville bap Barabbas baranof Barathea baraza Barbarossa Barbary barbel barbellate Barber barbet barbette barbican barbicel Barbirolli barbituric barbizon Barbuda barbule barbusse barca barcarole barce barchart/S Barcoo Bardolatry bardot barehanded bareilly Barenboim barents baresark bargee bargepole Bari barilla barite barkentine barkhan barletta barm Barmecide barnardo barnaul barnsley barnum barocchio baroda baroja barong baroscope barostat Barotse barouche barozzi barque barquentine barquisimeto barracoon barracouta barranquilla barrault barrenwort barret barrie barros Barsac Bart bartizan Bartoletti bartolommeo barye barysphere baryta barytes barytone basaltware bascinet baseburner basenji bashan bashibazouk Bashkir basifixed basilan basildon Basilian basilicata Basingstoke Baskerville basle basotho Bassas bassein bassenthwaite basseterre bastardry bastia Bastianini bastinado bastnaesite bastogne Basutoland Bataan batangas batata bateleur batesian bathetic batholith Bathonian bathsheba bathyal bathymetry bathyscaph bathysphere batley battels Battenburg battersea battik Battle battledore battlepiece batum batwoman bauchi baucis Baudo baudouin Bauhinia bautzen bawbee bawdyhouse/S Bax Bayard bayern bayeux bayle baysian baywood bazoo BBC BCPL bdellium beachie Beaconsfield beadledom beanery beanfeast beano beanpole beasty beatles beatty Beaufort beauharnais beaumarchais Beaune beaut beauvais beauvoir beaverbrook bebeerine bebel Bebington beccafico bechet Bechuana Bechuanaland Beckenham Beckford Beckmann becquerel beddable bedesman Bedfordshire bedight bedivere bedizen Bedlington bedrail bedsit/S bedsitter bedspaces bedwarmer bedwetting bedworth beeb beechnut beefburger beento beerbohm beersheba beeswing beetfly beetroot/S beezer beforeimage/S begad beggarweed Beghard begird begorra Beguin begum behan behistun Behrens beiderbecke beigel beira bejabers bejewel belah belemnite belfort belga Belgae Belgravia Belial Belisarius Belisha belitung bellarmine bellay belleau Belleek Bellerophon belletrist Bellingshausen bellinzona Bellmouth belloc Bellona bellybutton Belmondo belmopan Belorussia Belostok belovo Belsen Beltane Bemba bemean Benackova benadryl benares bendel bendigo bendy benedicite Benedictus Benedikt benempt benevento benfleet bengaline benghazi benguela Beni Benin Benison Benne Bennet benoni bentinck bentwood benue benzaldehyde benzidine benzine benzoate benzocaine benzofuran benzoic benzoin benzol benzophenone benzoquinone benzoyl benzyl berar Berber berbera berberidaceous Berberis berbice Berbie Berchtesgaden Berdichev Berdyayev Berenson Berezina Berezniki Berg/R Bergama Bergamo Berganza bergdama bergerac bergius Bergonzi Bergsonism beria bering berio beriosova berk/S Berkeleian Berkeleianism berley berlichingen berlinguer berm bermejo bermondsey bernadette bernadotte Bernese bernhardt bernicle bernina berretta bersagliere berseem bertillon bertolucci berzelius bespangle bespread Bessarabia bestrode Bethany bethe Bethmann bethral/S bethralled bethralling bethsaida betjeman betook Betta betti betulaceous Beulah beuthen bevan bevanite/S bevatron Beveridge bevin bevvy Bewick bexley beyrouth bezique bezoar bezonian bezwada bhagalpur bhai bhakti bhang bharal bharat bharatiya bhatpara bhavan bhavnagar bhindi bhishti bhopal bhubaneswar bhutto biafra biak biannulate biarritz biauriculate bibliomancy bicarb Bice bicephalous bicester bicollateral bicorn bida bidarka biddle bidentate bidistill/DGS Biedermeier biel bield Bielefeld bienne bierkeller biestings bifarious biffin bifoliate bifoliolate biforate bifrost bigarreau bigener bigmouth bignoniaceous biguanide bihar Bihari Biisk bijapur bijugate bikaner bikie bikila bilander bilbao bilberry bilboes bilection bilestone Bilharzia bilirubin biliverdin billabong billfish Billingham Billingsgate Billiton billyo bilobate biltong Bim bimah bimanous bimbo bimorph binal binate bingey binghi binh binodal binominal binturong biocellate biochip/S bioclimatology biocycle biodynamics bioenergetics bioherm biolysis bioplasm biopoiesis bioscope bioscopy biosis biostatics biostrome biparietal biparous bipetalous bipyramidal biquadrate biquarterly birendra biriani Birkenhead biro/S birobidzhan birthweight/S birtwhistle bis bisayas biscay bise bisectrix biserrate bish Bishop bishopbird bisitun bisk biskra bismuthic bismuthinite bismuthous bissextile bist bistability bisulcate bisutun bisymmetric bithynia bitolj bitterling bitterwood bivvy bizerte Blachut Blackbeard blackbuck blackbutt blackcurrant blackett blackmore blackpool blackshirt blackstrap blackwall blackwood bladdernose bladderwrack Blagoveshchensk blague blah blain blamey blanquette Blanzat blasco blastocoel blastocyst blastoderm blastoff blastogenesis blastomere blastopore blaubok Blavatsky blaydon bleb Blech bleep/DGR Blegen blennioid blenny blent blepharitis blet blewits Bley blida bligh blighty blimey blindage Blindheim blindstorey Blini Bliss blockboard bloemfontein blois Blomstedt bloodsport/S bloomery Bloomsbury blotto blowback blowie blowlamp blub bludge bluethroat bluetit blundell blunge/R BNF boabdil boadicea Boanerges boarfish boarhound boarish boatbill boathook Boatwright bobbysoxer bobfloat boblet bobol bobotie bobowler bobsleigh bocage boccaccio boccherini boccioni Boche bochum bocklogged bodensee bodge/R bodgie bodh bodmin Bodoni bodybuild bodycheck boethius boeuf bofors bogan bogarde bogart Bogas bogbean bognor bogong bogor bogtrotter bogwood boh bohea Bohm bohol bohunk boiardo Boildieu boileau boilover Boito bokassa Bokhara bokmakierie bolection boleyn bolide bolingbroke boliviano bollocks Bolshie Bolson Boltonia bolzano boma bombacaceous bombora bombycid bomu bonaire Bonapartism bonaventura bonce bondservant boneblack boneshaker bonhoeffer bonin bonism bonnard bonsela bontebok Bonynge boobialla boobook boohoo bookeeper booklouse boole boomkin boomslang boong boothia boothroyd bootloader bophuthatswana boracic boracite boraginaceous borborygmus Bordelaise bordure borecole boree borehole/S borgerhout borges Borghese borgholm borgia bornholm bornu Borodin borodino Boronia borrowable bors borstal borzoi boschbok boschvark bosh bosk boskop Bosky Bosnia bossa bossboy bossuet bosworth botargo botha bothnia bothwell bothy botryoidal bott botticelli bottlebrush bottlenose bottomost bottrop botvinnik boucicault boudicca Bougainville Boughton boulanger Boulez Boult bourges bourgogne Bournemouth Bouvet bovid bovril bovver bowden bowsaw bowshot bowyangs boxboard boxfish boxroom boyla boyne boyoma boysenberry boz/N Bozcaada Braata brabant brach brachiopod Brachiosaurus brachycephalic brachydactylic brachylogy brachypterous brachyuran bracknell bracteate bracteole bradawl bradman bradycardia bradykinin braga Bragi brahe Brahman Brahmana Brahmani Brahmanism Brahmin Brahui Brailler/S Braillewriters braillex braillink braillo brailtel brainchildren brakesman brakpan bramante bramley branchiopod brancusi brando branle Brantford brasenose brashy brasier brasil brasilein brasilin brassie bratislava braunite braunschweig bravais bravissimo braxy brazils breadline breadmaking breadnut/S breakbone breakeven breastpin breathalyse breathalyzer brecht brecon Breconshire breda brede bree breenger bregenz brekky Bremerhaven Brendel Brentano Brentwood Brescia Breslau Bresson Bretagne Bretton Breuer Breughel brevier brewis brey brezhnev briand Briareus briarroot bricklay bricole Bridgeford Bridgeman bridie bridlewise bridoon brie brierroot brigalow brighouse Bright brightside Brigid brinell brinjal brinny briony Britannia Briticism Britishism brittonic britzka brix Brixton Brno broadbill Broadbrim broadmoor broca broch brocken broddle broderie broederbond brogan brolga bromal Bromberg brome bromeosin bromoform bromsgrove bronchia bronchiectasis bronchopneumonia bronchoscope brookite brooklet brooklime brookweed broomgrove broomhill broonzy brose browband broz brubeck Brubeck's Bruch brucine bruges Brule brumal brumby brume Brummagem brummell brummie brundisium Brunei brunel Brunelle brunelleschi brunhild brusa brushless Bruson brutify Brutus Bryansk brynhild bryology bryony bryozoan Brython Brythonic btu bub/R bubal bubaline Bubo bubonocele bucaramanga buccinator bucentaur Bucephalus buchan Buchmanism buchner buchu buckeen buckhound Buckingham Buckinghamshire buckish buckjumper buckra buckram bucovina Buddleia budgerigar budgetted budgetting budweis Buenaventura Bueno buffon buganda bugbane bugong buhl buibui buitenzorg bukavu bukhara bukharin bukovina bul bulawayo bulbiferous bulganin Bulgar bulle bullpen bullroarer bulnbuln bumbailiff Bumbledom bumf bummaree bumph bumsucking Buna bunche buncombe Bundaberg bundelkhand bundesrat bundh bundobust Bundoora Bundu bunin bunraku buntal bunyip buonaparte buonarroti buoyage buprestid bur buran buraydah burbage Burberry burbot burgas burghley burgomaster/S Burgos Burgoyne burgrave burhel burk burka Burkina burleigh burnet burney burnley buroo burrawang bursarial Burseraceous bursiform burstone buryat busbar busera bushbaby bushcraft bushhammer bushido bushie Bushire bushpig bushranger bushtit bushveld bushwheel busoni busra bustee busuuti butanone butat butcherbird Bute butenedioic butskellism butskellite butterbur butterine Buttermere Butterworth buttonmould butung butyrin buzzsaw Bydgoszcz Byelorussian Byelostok byelovo byng byrnie byssinosis byssus bytom Caballe cabanatuan cabbageworm cabezon cabimas Cabinda cabob cabochon cabora cabral cabretta cabrilla cachexia cachinnate cachucha cacique caciquism cacodyl cacoepy cacoethes cacology cacomistle cadaster Caddoan cadelle cadi Cadmean Cadmus caecilian caecum Caelian Caelum caen caenozoic caeoma caerleon caernarfon Caernarvonshire Caerphilly caesalpiniaceous caesaraugusta caesarea Caesarean Caesarism caespitose caesura caetano cafard caff cagliari cagliostro cagmag cagney cagoule/S Cahokia caiaphas Caicos cainogenesis cainozoic caird cairngorm caithness caius cajeput cajuput Calabar calabria Caladium calalu calamanco calamondin calandria calathus calaverite calcar calcariferous calceiform calces calchas calcicole calciferol Calciferous calcitonin calcsinter calculational caldarium Caledonia Caledonian calefacient calefactory cali Caliban calices caliche calicle Calicut califate caligula calimere calipash calipee calisaya calix callais callao Callas callicrates callimachus Calliopsis callipash callipygian callisthenics calor caloyer calpe caltanissetta calutron Calvados calvaria Calvinism calvities calx calyces calycine calycle Calydonian calyptra calyptrogen camail camass cambay camberwell cambist camboose cambrai cambrel cambria Cambridgeshire cambyses Camelopardus Camenae cameral camerlengo camiknickers camisado camoodi campagna campania campanulaceous campeche campestral campina/S campo camus camwood Cana Canaanite Canaanitic Canadianism canaigre canakin canaletto canaliculus canara canarese canaster Candace candia Candiot candleberry candlefish candlelit Candlemas candlenut candlewood candyfloss candytuft canea canella cangue Canicula canikin cannabin cannae cannelloni cannelure cannes cannock cannula cannulate canoewood canonicate canonry canoodle Canopic Canossa canova canso Cantabrian cantal cantala cantatrice cantharides cantilena cantorial cantoris cantrip Canuck canula canzona canzone canzonet capabilites Capablanca caparison Cape capelin capercaillie Capernaum Capetian capillaceous caplin Capone caporetto capote cappadocia capparidaceous cappie Cappuccilli cappuccino capreolate Capri capric capriccioso Capricornus caprifig caprifoliaceous caproic capsaicin Capsian capsid capua capuche caput caracal caracalla caracara caracul carageen caramba carangid caratacus Caravaggio caravanserai carbamate carbamic carbamidine carbanion carbene carbineer carbonade carbonado Carbonari carboxylase carburation carburetted carburetter carby carbylamine carcajou carcanet carcassonne carchemish carcinomatosis Cardiganshire cardin cardinalate cardiod carditis cardoon carduaceous carducci caretaking carew carfax carfuffle caria Caribbee caribbees cariboo carifta carillon carillonneur carina carinate carinthia cariocan cariogenic carline Carlist carlota Carlovingian carlow carmagnole Carman carmarthen Carmarthenshire Carmel Carmelite carminative carnarvon carnassial carnatic carnauba carnet carnify carniola carnot carnotite carny carolus carotenoid carotid Carpathian carpel carpentaria carpentier carpogonium carpology carpometacarpus carpophagous carpophore carrack Carreras Carrick carrycot carryng carse carstensz cartagena carteret Carteri cartful Carthaginian carthorse Carthusian Cartier cartouche cartulary cartwright caruncle carvel cary/S caryatid caryophyllaceous caryopsis carzey casablanca casals casaubon cascabel cascarilla casease casebound casefy caseload/S caseose caserta caseworm casimere Caslon Caspar Casparian Caspian cassareep cassata cassation cassatt Cassegrainian cassel Cassia cassimere cassini cassiodorus cassirer cassiterite cassoulet cassowary Castalia castellammare castellan castellany castellated castiglione castile Castilian Castilla Castleford Castlereagh castries Casuarina casuist catabasis catacaustic cataclasis cataclinal Catalan catalase catalo cataloguers catalonia catalyzed catamenia catamite catania catanzaro cataphoresis cataphyll cataplasia catarrhine catastrophism catchfly catchweight catechol catechu catechumen catenane catenoid catfall cathar Cathay cathepsin catholicon catiline catling catmint cato cattalo cattegat cattermole cattery Cattleya catullus CATV cauca caucasia Caucasoid caudad caudex caudine caulis causalgia cauterant cauvery cavafy cavalla cavan cavatina caveator cavefish Cavell Cavesson Cavetto cavicorn cavie cavite Cavour cavy Cawdrey Cawley Cawnpore Caxton Cayes Cayman Cayuse CB CCNY CDPD Ceanothus cecity Cecrops cecum cedi ceefax Ceiba ceilidh Celadon Celaeno celaya Celeste celestite cella celle cellini cellobiose celloidin cellulase cellulitis cellulous celom Celtiberian cembalo cementum cenacle cenesthesia cenis cenogenesis cenote Centaurus centimetric centipoise centisecond/S Central centrobaric centroclinal centurial ceorl cep cephalalgia cephalin cephalochordate cephalometer cephalonia cephalopod cephalothorax Cepheid CEQ ceram ceramal cerargyrite cerastes Ceratodus ceratoid cercaria Cercis cercopithecoid cercus cerebrospinal cerecloth Cerenkov Ceres ceresin ceria ceric cermet cero cerography ceroplastic/S cerotic cerotype cerous cerro cert cerussite cervelat cervicitis cervid cervin cesena cespitose cess/R cessionary cestode cestoid cestus cesura cetane cetatea Cete ceteris cetinje cetology ceuta CGS chabazite chabrol chacma Chaco chaconne Chadderton chadic chaeronea chaeta chaetognath chaetopod chaffinch chagall chagres Chailly chainman chainplate chairborne chalaza chalcanthite chalcidice Chalcis chalcography chalcolithic chalcopyrite chaldea Chaldean Chaldee chaliapin chalicothere chalkpit chalkstone challah challis chalybeate Cham chamade Chamaeleon chamaephyte Chambertin chambord chamonix champac champignon champollion chandernagore chandigarh chandragupta chanel changan changchiakow changchow changchun changsha changteh chanterelle chanukah chaoan chaochow chaparejos chapatti chappal chappie chapstick chapterhouse charas charcot chardin charente charivari charkha charlady/S charleroi charlock Charlottenburg Charlottetown Charlton Charmeuse charminar charollais Charpentier charpoy charqui charr charterage charterhouse Chartism chartless chartography Chasidim chasuble Chatterton Chaucerian chauffer chaulmoogra chaunt chausses chavannes chayote cheb cheboksary Chechen checkbits checkerbloom checky cheddite Cheek cheekpiece cheerlead cheeseboard cheesemonger cheesewood chefoo cheiron cheju chekiang chela chelicera chelicerate cheliform Chellean Chelmsford cheloid chelp Cheltenham Chelyabinsk Chelyuskin chemin chemisette chemmy chemnitz chemometrics chemosmosis chemosphere chemostat chemosynthesis chemotaxis chemotropism chempaduk chemulpo chemurgy chenab Chengchow Chengteh Chengtu chenopod Cheongsam Cheops Cherbourg Cheremiss Cheremkhovo Cherenkov cheribon Chernovtsy Chernozem chersonese Chertsey Cherubini chervonets cheshunt Chessel Chesterfieldian chetah Chetnik Cheval chevet chevrette chewa chewie chiack Chian chiapas chiastic chiastolite chiat chiba Chibchan chibouk chicane chiccory chichagof chichen chichester chichewa chichihaerh chickabiddy Chickasaw chickenpox chiclayo chiffchaff chifley chigetai chigwell chihli childbear childcare Childermas childminder/S childminding Chilean chiliad chiliasm chilkoot chilli chillon chillum chilopod chilpancingo Chiltern Chilton chilung chimb chimborazo chimbote chimkent chimneypot China chinaberry chinagraph chinan chincapin chincherinchee chindit chindwin Chinee ching chinghai chingtao chinkapin chinkiang chino Chinookan chinwag Chionodoxa chios chipolata chippewa chippy chirac chirau chirico chirm Chiron chirurgeon chishima chisimaio Chita chital chitarrone chittagong chiv chivaree Chkalov chlamydate chlamydeous chlamydospore chlodwig chloracne chlorambucil chloramine chloramphenicol Chlorella chlorenchyma chloroacetic Chloromycetin chloropicrin chloroprene chloroquine chlorosis chlorothiazide chlorotic chlorous chlorpromazine chlorpropamide chlortetracycline choanocyte Chocho Choco chogyal choiseul chokebore chokecherry chokedamp choko cholecalciferol cholecyst cholecystectomy choli cholic cholla chollers cholon cholula chon/I chondrify chondriosome chondroma chondrule choof chook choom chopine choplogic choragus chordophone chorea choreodrama choriamb chorley choroid chorology chorusmaster chota chott chough choux chrematistic chresard chrism chrismatory chrisom Chrissie Christadelphian Christchurch Christhood Christmastide Christoff Christology Christophe chromatology chromatolysis chromatophore chromogen chromogenic chromolithograph chromolithography chromomere chromonema chromophore chromoplast chromoprotein chromous chromyl chronaxie chronobiology chronon chrysalid chrysarobin chryselephantine chrysoberyl chrysoprase chrysostom chrysotile chthonian chubb chubbyness chudskoye chufa chukar Chukchi chukka chukker chunder chunderous Chung chunnel chunter chupatti/S chuppah chur churchgo churchwarden/S churidars churinga churr Churrigueresque chuttie Chuvash chyack chyle chyme chymosin chymotrypsin chymotrypsinogen cibber ciborium cic cicala cicatricle cicatrix Ciccolini Cicely cicerone cichlid/S Cid cienfuegos cig cii cil cilice cilicia Cilician ciliolate cilium cimabue Cimbri cimex Cimmerian cimon Cinchona cinchonidine cinchonine cinchonism Cincinnatus cine cineaste Cinemascope cinematheque cineol Cineraria cinerarium cinereous cinerin cingulum cinna cinnamic cinquain cinque cinquecento cinzano Cipango cipolin circassia Circassian Circinus circlorama circumbendibus circummartian circumnutate circumsolar cirenaica cirencester cirrate cirri cirripede cirrocumulus cirrose cirrostratus cirsoid Cisalpine ciscaucasia cisco ciskei cispadane cissoid cistaceous Cistercian cisterna cistron Cistus cithara cither citole citreous citriculture citrin citrine citrulline cittern/S City ciudad civ civism clachan clackmannan Clacton clactonian cladded cladoceran cladode cladophyll clairaudience clamworm/S Clapham clapperboard/S clapperclaw Clapton Clarabella Clarenceux clarino Clarkia claro clarts clary classis clastic clathrate Claudel claudication Claudius Clausewitz clavate clavicembalo clavicorn claviform clavius claymore claypan claystone Claytonia cleanskin cleanthes clearcole clearstory clearway/S clearwing cleck cleek cleethorpes cleg cleidoic cleisthenes cleistogamy clem Clematis clemenceau Clementine Clemmons Cleome cleon Cleopatra clepsydra cleptomania clerestory clerihew clerkess cleruchy Cleve cleveite Clevenger clianthus Cliburn clichy cliffhang clii clinandrium clingfish clinkstone clinostat clinquant Clintonia Clipperton clippie clishmaclaver clisthenes clitellum clitic cliv clix clockmaker clomb clonus closedown Clostridium cloudberry cloudscape clouet clough clovis clubhaul clubland clubman clucky Cluj clumber cluny clupeid clupeoid clustan clusterability clusterable Cluytens clvi clvii clwyd clxi clxii clxiv clxix clxvi clxvii clydebank Clydesdale clype clypeus clyster cnidarian cnidoblast cnidus cnossus cnut CO coacervate coachwood coadjutant coagulum coahuila coalface coalfield/S coalfish coalmine/S coalport coaming Coast Coatbridge coatee coati cobaltite cobaltous cobber Cobbett cobden Cobham cobnut coburg coccid coccidioidomycosis cocciferous coccolith coccyx cochabamba Cochin cochleate Cockaigne cockalorum cockatiel cockayne cockboat cockchafer cockcroft cockleboat cockloft cockneyfy cocksfoot cockspur cockswain cockup cocopan Cocos cocotte cocoyam cocteau codasyl codder codicology codominate/DGS codswallop coedit coelacanth coelenterate coelenteron coeliac coelom coelostat coenacle coenobite coenocyte coenurus coercibility coessential coetaneous coeur coexecutor coextend coff cofferdam coggan coglike cogon cohabitee/S cohesional cohobate cohune coimbatore coimbra Cointreau coir coire coit cokuloris colbert colcannon colchester colchicine Colchicum Colchis colcothar colectomy colemanite coleopteran coleoptile coleorhiza coles colet colewort coley colicroot colicweed coligny Colima collapsar collarette collectanea Colleen collembolan collenchyma Collier Collinsia collisionless collocutor colloid collop Colloq collotype colluvium collywobbles colmar Colobus colocynth Cologne colombes colonitis colonsay coloquintida colossae Colossian colossians colotomy colpitis colporteur colquhoun Coltrane colubrid colubrine colugo colum Columba columbarium columbic columbite columbium columbous columella columnwise colure Colwyn coly Comanchean comaneci comate comatulid combe comecon comedo comenius comfrey comines Comintern comitia Command commeasure commedia commendam commines commis commo commodus commonable communicatie comnenus como comorin comoro Comoros comp compadre compander/S compilability complect compony Compositae compossible compostela compotation comprador Comptometer comstockery comte Comus conan conation conative conatus concelebrate concertino concha conchie conchiferous conchiolin conchobar conchoid conchoidal conchology condillac condottiere condyle condyloid condyloma Conferva confessant configurationism confirmand confiteor confiture conformability congeneric congius conglobate conglutinant congou congrats Congreve conidiophore conidium coniine coniology Coniston Conium conjuction connacht connaught connemara connexions conodont conoid conoscenti conquian conscionably consentient conservatoire conservatorium consett consocies consolute constantan constatation contactor contango contemn conto contradance contrasuggestible contrate contravallation contrayerva contredanse controllee/S conure convertite convolvulaceous Convolvulus cooee Cook cookhouse coolabah coolgardie coom cooncan coontie cooperativity coopt coordinal cootch copaiba copal copalm copepod copita copley coprolalia coprology coprophagous coprophilia coprophilous Coprosma Copt Coptic copygraph copyread coquelicot coquilla Coquille coquito coraciiform coracle coracoid Coral corallite coralloid coralroot Corantijn coranto corban corbeil corbicula corbie corbusier corby corcyra corday Cordelier cordeliers cordierite cordillera/S cordoba cordova Cordovan corella corelli Coreopsis corf corfam corfu corgi coriaceous corinthians coriolis corium corkage corkwood cormel cormophyte corncockle corncrake corneille cornel cornelian cornetcy cornett cornflakes cornflour cornhusk corniculate cornmonger corno cornstone cornu cornute corody corollaceous coromandel coronach corot corozo correggio corregidor corrida Corriedale corrientes corrival corrodent corrody corrugator corsac corselet corsetry Cortes corticosterone corticotrophin cortisol cortot corunna Corvallis corves corvine Corybant Corydalis Corydon corymb coryphaeus coryza cosa cosecant cosech coseismal cosenza cosgrave cosignatory cosmine cosmodrome cosmoid cosmopolis cosmotron cospar coss cossie Costa costard costate Costermansville costermonger costotomy costrel cotan cotemporary cotenant coterminosity coth cothurnus cotidal Cotinga cotonou cotopaxi cotquean Cotrubas cotswold/S cottbus cottian cottonade cottonweed cotyloid coucal couchant couchette coulee coulibiaca couloir coulometer/S coumarin coumarone counterattraction counterblast countercharge counterculture counterfactual counterglow counterinsurgency counterposition counterproof countershade/DGS countersubject countertype counterweigh counterword counterwork Couperin courante courantyne courbet courbevoie coureur courgette courlan Courland coursework courtelle courtrai Cousteau couthie couvade coverdale coverley coversed covin cowberry cowbind Cowell cowes cowfish cowherb Cowichan cowitch cowk cowley cowpat cowper cowskin coxa coxalgia coxcombry coxsackie coxswain coyotillo coz Craal crabbe crabmeat crabstick crackbrain/D cracket crackjaw cracknel cracksman cracow craddock cradlesong craigie craiova crake crambo cramoisy cran cranach cranage cranesbill Cranfield craniology craniometer craniometry craniotomy cranko crankpin cranmer crannog cranwell crapaud crapulent craquelure crashable crashaw crasis crassulaceous crassus cratch craunch crawley cray creamcups creamlaid creatine creatinine credendum creel/S creepie cremator cremona crenel creodont creophagous crepitus Cressida cressy Creston cresylic Cretic creuse crewe cribellum Crichton cricoid crikey crim crimmer crimple crimplene cringle crinite crinkleroot Crinum criollo cripes crippen cripps criseyde crispate/N crispbread crispi crissum crista cristate cristobalite Croat croce crocein crocidolite Crockford crocoite croesus crombec cromlech Crompton Cronin cronk cronus Crookes Crookesmoor crosier crosscheck crosse crossfire crosshead crossjack Crossley crossopterygian crosspool crossruff crosstabulate/N crosstie/S crotone crotonic croute crowboot Crownland crownpiece crownwork croze crozier cru/S cruces crucian cruck cruiserweight cruiseway crumhorn crummock crunode crura crural crusado cruse cruyff cruzado cruzeiro crwth cryer cryocable cryohydrate cryometer cryophyte cryoplankton cryptaesthesia cryptanalyze cryptoclastic cryptocrystalline cryptogam Cryptomeria cryptozoic cryptozoite crystallographica ctenidium ctenoid ctenophore ctesiphon cubane cubeb Cuberli cubiculum cubital cucking cuckooflower cuckoopint cuculiform cudbear cudgerie cudweed cuenca cuernavaca cuesta cufic cuirass cuirassier cuisse culch culebra culet Culex culicid cullet cullis culloden cully culm culmiferous cultrate culverin cum cumae cumber cumbernauld cumbria Cumbrian cummerbund cumquat cumshaw cumulet cumuliform cumulonimbus cumulostratus cunaxa Cundick cuneal cuneo cunjevoi cupel cuppa cuprum curacy curare curarine curassow curch Curculio Curcuma curiosa curitiba curlpaper currajong currawong currycomb Curtana curtin Curvet curzon cusco Cuscus cusec cush cushat Cushitic cusk cuso customable custos custumal cutcherry Cuthbert cuticula cutin cutis cuttack cuttle cutty cuvette cuxhaven cuyp cuzco cwmbran cyan cyanamide cyanine cyanite cyanocobalamin cyanogen cyanohydrin cyanosis cyanotype cybele cyber cybernate cyclamen cyclicity cycloalkane cyclograph cycloheptatrienyl cyclohexane cyclohexyl cyclonite cycloparaffin cyclopedia cyclopentadienyl cyclopentane cycloplegia cyclopropane cyclosis cyclostome cyclostyle cyclothymia cyclotomy cyder cydnus cylindroid cylix cyma cymar cymatium cymbalo cyme cymene cymogene cymograph cymoid cymophane cymose Cymric cymru cynghanedd cyperaceous cyprinid cyprinodont cyprinoid Cypripedium cypsela Cyrano Cyrenaic cyrenaica cyrene cystectomy cysticercoid cystine cystitis cystocarp cystocele cystoid cystolith cystoscope cystotomy cythera Cytherea cytidine cytochemical/Y cytochrome cytogenesis cytogenetics cytokinesis cyton cytoplast cytotaxonomy cyzicus czardas czarevna Czechoslovak Czernowitz Czerny dabchick dabster dace dacha dachau dachsund dacia dacoit dacoity dacron dactylogram dactylography dactylology dado dadra dagan Dagenham Dagestan dagga daggerboard Dago dagoba dagon daguerre dahna daimyo dairen daisycutter dak dal daladier dalai dalasi dalesman dalhousie dallapiccola dalmatia Daltonism Damara Damaraland Damascene Damien damietta damodar dampcourse dampier damselfish Damson Danaides dandie dandiprat Danegeld Danelaw Danio Danton Daphnis Dapsang daraf darbies Darby Dard Dardan dardanelles dardanus Dardic daresbury darfur darg dargah daric Darien dario dariole Darjeeling darkend darlan darmstadt darnel darnley darogha Darry dartboard Dartford Dartmoor dasheen dashiki dashpot dassie dasyure databank datary datatype datcha dato datolite datuk daube daubery daubigny daudet daugava daugavpils daumier davao Davidovich daw dawes dayak dayan dayboy dayfile dayflower dayfly dayspring deaconry deadstarting deakin dealfish dearchive/DGS deary deassignment deathtrap Deauville Deb debag debarred debe debrecen debs debus debye decanal decane decanedioic decani decanoic decapolis decarboxylation decastyle deccan decelerometer Decembrist decemvirate decenary decentralist decern decimetric decisionmaker declinometer declog/S declogged declogging decluster/DGS declutch/DGS decoke decompound deconstruct decreet decubitus decurion decurrent decury dedal deek deemster Deepfreeze deergrass deerhound deferable defilade definiendum definiens deflocculate degassed degasses deglutinate deglutition degression degust dehisce dehiscent dehorn dehra dehydrogenase dehydrogenate dehydroretinol deianira deicide deictic deific deiform deil deipnosophist deixis dejecta dekker dekko delacroix delagoa delaine delaunay dele deledda delegatory delgado Delian Delibes delimeter/S deliquescence delitescence Delius Deller Delorme Delos Delsarte deltiology demavend deme dement demerara demesne demeter demibastion demicanton demilune demimondaine demimonde demirel demirelief demirep demisemiquaver demist demivierge demivolt demob democritus Demogorgon demoiselle demonism demonolater demonolatry Demosthenes demould/DGS dempster demulsify demy denarius denary Denbighshire dendral dendrochronologist/S dendrochronology dendrogram/S Dene dengue Denis denitrate deniz denning Dentalium dentex dentilabial dentilingual dentoid denudate deodand deodar deontic deoxygenate departmentalism depasture dependant/S depicture deplume Depraz depressomotor depside depurative deraign derailleur derain derbent deregister deregulatory derestrict derisible dermatitis dermatogen dermatoglyphics dermatome dermatophyte dermatophytosis dermatoplasty dermis dermoid Dernesch dero derringer Derris derry derv derwent derwentwater desai desalinate deschamps deschool descriptional descriptivism deselect/DGS deselection/S desicate designational desinence deskill/DG desman desmid desmoid desmoulins despenser despoilation despoliation despumate desquamate dessalines dessau dessertspoon dessiatine dessicator/S deterge detmold detrend/DGS detrition detrude detruncate deurne deuteragonist deuteranope deuteride deuterogamy Deuteronomist Deuteronomistic Deuteronomy deutoplasm deutsch Deutschland Deutzia deva devanagari deventer Devereux devi devilfish Devonian dewan dewberry dewclaw dewsbury dextran dextrin dextroamphetamine dextroglucose dextrogyrate dextrorotation dextrorse dezhnev dhahran dhak dharna dhaulagiri dhobi dhole dhoti dhow diablerie Diablo diabolo diacaustic diacetylmorphine diacid diacidic diactinic diadelphous diadic diaeresis diagenesis diageotropism diaghilev diagraph diallage dialogism diamantine diamegnetism diamine Diamond diamondback diandrous dianetics dianoetic dianoia diapedesis diapente diaphoresis diaphoretic diaphototropism diaphysis diapir diarch dias diascope diastalsis diastase diastasis diastema diastyle diatessaron diathermancy diazine diazo diazole diazomethane diazonium dibasic dibbuk dibranchiate dibromide dicarbonyl dicast dicephalous dichasium dichlamydeous dichloroethanol dichromaticism dichromic dichroscope diclinous Dictaphone Dictograph dicynodont Didache diderot didgeridoo didymium didymous didynamous dieback diecious diefenbaker dien diencephalon dieppe diesis Dieskau diestock diestrus diffusivity digamy digestant digged dight digitalism digitiform digitoxin digitron dihydric dihydrofolate dikkop diktat dilatancy dilatant dilly dimashq dimenhydrinate dimercaprol dimethylformamide dimethylpropane dimetric dimissory Dimitrovo dimity dimorph dinar Dinaric dineric Dinesen Dingaan dinge dinitrobenzene dinitrogen dink Dinka dinkum dinky Dinnington Dinoceras dinoflagellate dinothere dio diodorus dioestrus diol diomede/S Dione Dionysia Dionysiac dionysius diophantus diopside dioptase dior Dioscuri dioxan dipeptide dipetalous diphenylamine diphenylhydantoin diphosgene diphyletic diphyllous diphyodont diplegia diploblastic diplocardiac diplococcus Diplodocus diplont diplopia diplopod diplosis diplostemonous dipnoan dippy diprotodont dipteral dipteran dipterocarpaceous dipterous Dirham diriment dirk dirndl disaccredit disafforest disbranch disbud discalced disciplinant disciplinarianism disclimax discobolus discommodity discommon disconsider discotheque discovert disembogue disembroil disenable disentail disentitle disentomb disentwine disepalous disforest dishpan dishtowel disject disjunctor/S disoperation dispend dispermous dispersability dispersable dispersity dispersoid displayable disproven dissappear disseminule dissentious dissepiment distich distichous distrainee distringas distrito distrubuted dita ditheism dithionite dithionous dithyramb dithyrambic dittander dittany dittography Ditzel diu diuresis div divaricator diversiform diverticulitis diverticulosis diverticulum divi divinylbenzene divisibly divulgate diyarbakir dizen djailolo djaja djajapura djambi djebel djerba Djibouti djinni djokjakarta DMF Dneprodzerzhinsk Dnepropetrovsk Dniester doab dobby dobla dobro dobruja dobsonfly Docetism dockland/S doddle dodecagon dodecanese dodecanoic dodecaphonic dodecasyllable dodgem Dodgson dodoma Dodona doek doenitz Doese doeskin dogfishs dogger doggo dogman dogsbody dogvane dogy doh doha Dohnanyi dojo Dol dolabriform dolby dolerite dolichocephalic Dolichosaurus doline dollarbird dollarfish dollfuss dolman dolmas dolmen dolmetsch dolorimetry doloroso dom domett dominee Dominica dominie dominium dominoes Domitian Donar donatello Donath Donatist donatus donau donbass Doncaster Donegal Donetsk donga Dongola Donizetti donjon donne donnert donny doodah doorframe doorn doornik dopa Dopper Dor Dorati dordogne dordrecht Dorian Dorking dormobile Dormoy dornbirn dornick Doronicum dorp dorpat dorsad dorsiferous dorsigrade dorsiventral dorsoventral dorsum dort dorty dory dosshouse dost dotation dottle douai douala douay doublure doubs douc douceur doukhobors doum doura dourine douro douroucouli dovap dowable dowding dowery Dowland downcome/R downhole downpatrick downpipe downthrow downwash downweight/DG downwell dowsabel Dowson doxastic doxographer doxology doxy doyen doyley DPP drabbet Dracaena Draconic draff draggletailed draghound dragoman dragonnade dragonroot dragrope drail Drakensberg dramatis drammen drancy drava drayhorse Drayton dree dreggy dreich dreiser drenthe dresden Dressen drillstock drin drinkwater dripstone drogheda drogue droit dromond Dronfield drongo/S droob dropsonde droshky druffen drunkeness drupelet Druse dryopithecine drysdale drystone Duala dubai dubbin Dubonnet dubrovnik dubuffet duccio duchamp dudeen duello duero dufy duhamel duiker Duisburg duka Dukas dukhobors dulciana Dulcinea dulia dulosis dumas Dumbarton dumbell/S dumfries dumortierite dumyat duna/I dunaj dunant Dunbarton dundalk dundee dunfermline dungas dungeness dunite duniwassal Dunker dunkerque dunlin dunnage dunnakin dunnite dunno dunnock dunny dunois dunoon dunsany dunsinane dunstable dunstan dunt duntroon dunwoody duodenary duodenitis duotone dup duparc dupatta dupleix duplet dupondius duppy Dupre duque Duralumin duramen durative durazzo Durban durbar durex durgah Durkheim durmast duro Duroc durra durst Durufle durum durzi dushanbe dustability dustable dustcart/S dustmen dustsheet/S Dutoit duumvir duumvirate duvalier duvet dux Duyker Dvandva Dvina Dvinsk Dvorsky dwale DWT Dyak dybbuk dyfed dykes dynameter dynamicism dynamoelectric Dyonisian dyscrasia dysgraphia dysmenorrhoea dysphemism dyspnoea dysteleology dysthymia dysuria dytiscid dyula Dzaudzhikau Dzerzhinsk Dzhambul Dziggetai Dzongka Dzungaria Eaglestone Eaglewood ealdorman ealing eanes earbash earhart earlap earless earom earthlight earthman earthmove earthnut earthrise Eastbourne Eastertide Eastleigh eastmost eatage Ebert Ebling/M eblis ebon ebonite ebracteate ebullioscopy eburnation ECAD ecbatana ecbolic ecce ecchymosis ecclesall ecclesia Ecclesiastes Ecclesiasticus ecclesiolatry eccrinology ecdysone ecevit echard Echeveria echinate echinococcus echinoid echinus echoism echolalia echopraxia echovirus eck eckhart eclampsia eclipsis eclogite ecocide ecowas ecstacy ecthyma ectocrine ectoenzyme ectophyte ectopia ectoproct ectosarc ectype edale edam Edda Eddington eddo eddystone ede edessa edgehill edgeworth edile edirne Edo edom Edomite educatory educt Edwardine eelpout eelworm eff effable effendi efficency effusiometer Efik efta eftsoons Egbert Egeria egest egesta Egham egis Egmont Ehrenburg Eichendorff Eiffel eigenfrequency/S eigenstructure eigensystem/S eiger eightsome Eijkman Eikon Eilat Eindhoven Einkorn eirenic eirenicon eisegesis Eisenach Eisenstadt Eisenstein eisk Eisteddfod Ekaterinburg Ekaterinodar Ekaterinoslav elaeoptene elagabalus elam Elamite eland elasmobranch elasmosaur elastance elasticate/DGS elastoplast elat elaterid elaterin elaterium elbe Elbert elbrus elburz eld eldo eldritch elea Eleatic elecampane electrochemist/S electrograph electromerism electronvolt electrophone electrostriction electrotechnology electrotonus electrovalency electroviscous eleemosynary eleia elemi elenchus eleoptene Eleusinian eleusis elevon Elfland elflock elgon Elia/S elidible elis Elisabethville Elisavetgrad Elisavetpol elkhound Ellesmere Ellice Elohim Elohist eloign elsan Elsass elusion Elvira elyot embolectomy embolus embow embrectomy embryectomy embus emden emesis emetine emf Emirates emiscan emmen emmenagogue Emmenthal emmer Emmet emmetropia Emmy emotivism empale empassion empedocles emphasing empolder Empson empyema empyrean empyreuma emulsoid enantiomorph enarthrosis enate encaenia enceladus encephalin encephalograph encephalography encephaloma encephalomyelitis enchiridion enchondroma enchorial encomiast encrinite enculturation Endamoeba enderby endo endocarditis endocardium endocarp endocentric endocranium endoneurium endopeptidase endosome endostosis endothecium endothelioma endothelium endover endplate endplay Endrich Endymion energid energumen Enesco enface enfeoff enfilade enforcable/U engadine Engel Englishism Englishry engrail eniwetok ennage ennead enneagon enneahedron ennerdale ennervation ennis enniskillen ennius enosis enounce enow enphytotic enschede ensor Entamoeba entasis entebbe entelechy entellus enteritis enterogastrone enterokinase enteron enterostomy enterotomy enterovirus enthetic enthymeme entoblast entomic entomostracan entophyte entopic entozoic entozoon entrammel entrechat entremets entresol entryism entryist/S entryname/S entrypoint/S enugu enure enuresis enver enwomb enwreath enzed enzootic enzymolysis eobiont eogene eolian eolic eolipile eolith eolithic eonian eonic eos eosin eosinophil Eozoic epact epaminondas eparch eparchy epencephalon epenthesis epergne epexegesis ephah ephebe Ephedra Ephemera ephemeron ephesians ephod ephor Ephraimite epiblast epiboly epicalyx epicanthus epicedium epiclesis epicontinental epicotyl epicrisis epicritic epictetus epicycloidal epidaurus epideictic epidiascope epididymis epidote epidural epifocal epigastrium epigeal epigene epigenous epigeous epiglottis epigone Epigoni epigynous epilate epileptoid epilimnion epimere epimerism epimorphosis epimysium epinasty epinephrine epineurium epiphenomenalism epiphenomenon epiphragm epiphytotic epirogeny epirus episcopacy Episcopalism episematic epispastic epistasis epistaxis episternum epithalamium epithelioma epizoic epizoon epizootic eponym eponymy epos epoxide epping eprom/S epyllion Equatorial equifrequent/Y equilibrant equimolecular equipartition Equisetum equites equuleus eradiate Erastianism erciyas erebus Erechtheum Erechtheus eremite Erenburg erepsin erethism erevan erfurt ergastoplasm ergatocracy erhard Erica ericaceous Ericson eridanus Erin erinaceous eringo erinyes eris eristic erith Eritrea erivan erk erlang/NR erlking Ermanaric Ermler erne erotema erotology erotomania errhine errupt/V Erse erst erubescence eruct erumpent Erymanthian erymanthus eryngo erysipelas erysipeloid erythema erythrism erythrite erythritol erythroblast erythroblastosis erythrocyte erythrocytometer erythromycin erythropoiesis erzgebirge erzurum esaki esau esbjerg Escallonia escalope escaut eschalot escharotic eschatology Escherichia escoffier escolar Escorial escribe escuage escudo escurial esdraelon Esdras eserine esher Eskilstuna esky espalier esparto Esperanto espoo Esquiline esquimau esro essaouira Essene essequibo essonite essonne estancia este esterase esterify esthonia estienne estipulate estival estivate/N Estonian estoppel estovers estrade estradiol estragon estreat estremadura estrin estriol etaerio etalon etamine etaoin etchant eteocles eterne etesian Eth Ethelbert Ethelred ethene etherege etherify Ethiopian ethmoid ethnarch ethnobotany ethnogeny ethonone ethoxide ethoxyethane ethylbenzene ethyne etiolate etna Eton etymon etzel eubacteria euboea eucaine eucalyptol Eucharis euchlorine euchromatin eucken eudemon eudemonia eudemonics eudiometer eudoxus eugenol eulachon eulogia Euonymus Eupatorium eupatrid eupen eupepsia euphausiid euphonic euphorbiaceous euphoriant euphrasy euphroe Euphrosyne euploid eupnoea euratom eure eurhythmy euripus Euroclydon Eurocommunism Eurocrat Eurodollar Euromarket Eurovision Eurus Euryale eurypterid Eurystheus eurythermal eurytropic eusebius eusporangiate Eustachian eutectoid euxenite Euxine evacuant evaginate evanish evaporable evaporimeter/S Everton Evertor Evesham evite Evonymus Ewing exanthema exarate exarch exarchate Excalibur excaudate exclaustration exeat executability exedra exemplum exequatur exequies exergue exigible eximious exine exitance Exmoor exo exocarp exocentric exoderm exodontics Exon exonym exopeptidase exophthalmic exophthalmos exoplasm exorable exosystem/S exotoxin expellant experientialism explicite/Y explicity explictly exponible expressivity expresso exsanguine exsect exstrophy extention/S extine extinguishant extracanonical extrados extraposition extremadura exuviae exuviate eyas eyebath eyeblack eyehook eyeleteer eyetie eyot/S eyra eyrir eysenck fab fabaceous Fabianism fabians fabius fabliau fabre Fabrikoid facebar facetiae facia facilties Factice faculae fadden fadge faecal faeces faenza faeroes faeroese faff fagaceous fahlband faial faille fairbanks fairweather fairyfloss Faisal faiyum Faizabad Falange falbala falchion falconiform falconine faldstool falerii Faliscan Falkirk Falkner Falla fallal fallfish falsety/S falsework falsies Falstaffian falster faltboat falun famagusta familist famulus fanagalo fandangle fanfani fanfaronade fangio fango fankle fanon fantail fantasm fantast Fanti fantoccini fantom faqir faradic faradism farandole farci farcy fard fardel Fareham farinaceous farinose farl Farnborough Farnese Farnesol Farnham Faroe/S Farouk Farquhar Farrago farrier farriery farside fart Farthingale Fartlek Faruk fasciate fascine fash fashoda Fassbaender Fassbinder fastback fastigiate fatah Fathometer fatidic Fatimid Fatshan Faubourg faucal fauces faugh faunus Faure fauteuil fauve faveolate favrile favus Fayal fayalite fayum feal fearnought featheredge featherstitch feaze febricity febrifacient febrifuge fechner feck fecula fedayee Fedoseyev feedbag feeze Feigin feininger Feisal felafel fellmonger felloe felo felucca Feme fencible fenestella fenestra Fenian Fenice fennelflower Fenrir feoff feoffee feoffment ferbam fere feretory fergana Fergus feria fermanagh fernandel Fernandi Ferrara ferrari ferreous ferricyanic ferricyanide ferritin ferrocene ferrochromium ferroconcrete ferrocyanic ferrocyanide ferrofluid ferrol ferromagnesian ferromanganese ferrosilicon ferula ferule Fescennine fesse festal festschrift fetial feticide fetiparous fetterlock Feuchtwanger Feuerbach Feuilleton feverfew feverwort feydeau Fezzan fiacre Fianna fibrefill fibriform fibrinogen fibrinolysin fibrinolysis fibrinous fibro fibroblast fibrocement fibroid fibroin fibroma fibrositis fichte ficino ficticious fid fiddlewood fideicommissary fideicommissum fidelism fidge fidus fieldmouse fieldpiece fieldsman fieri fiesole fifa figuline figurant figwort filable filariasis filecard filefish filespace filestore filiate filicide fillagree fillmore filmset filmsetting filoplume filose filoselle fimble finable finalism finchley fineable finfoot fingerbreadth fingermark/DGS fingerstall/S fingo finisterre finitary finnan finner finney Finnic finnmark fino finochio Finsen Finsteraarhorn fiorin fipple Firbank firdausi fireback firebomb firebrat firecrest firedog firedrake firenze firepan firestorm firethorn firewarden firewater firkin firry fishbolt fishfinger fishgig fishskin fissipalmate fissiped fissirostral fistmele fistula fistulous fitchew fittipaldi fitzsimmons fiume fivepenny fivepins fizgig flabellum flagelliform flagellum flaggy flagrante flagstad flambeau flamborough flamelet/S Flamig flamingoes Flaminian flamininus flaminius flamsteed flanch flannelette flashcube/S flasket flatette flatfish/S flatlet/S flatling flatmate/S flatways flaubert flaunch flavescent flavin flavine flavone flavoprotein flavopurpurin flavorous flaxman fleabite/S fleam fleapit/S fledgy Fleetwood Flensburg flense Fletcher Fletcherism fleurette fleury flexitime flexo fley fleysome flinders Flintshire flitch flite floccose flocculant/S flocculent flocculus floccus flodden flong floreated flores florey floribunda florilegium florio flory flos flotow flowability flowerbed flowerless Flugelhorn fluorene fluoric fluorometer fluorophore fluoroscope fluoroscopy fluorosis fluviomarine fluxmeter/S flyback flyblow flybook flyleaves Flysch flyte flytrap/S foch fock foehn foetal foetation foeticide foetor fogbow/S fogdog foggia foie foin Foism Foison Fokine Fokker folacin foliar folie foliolate foliose foliot/S folium folkestone folketing folkmoot folliculin folsom fonda fondant/S fonseca fontanelle fonteyn Foochow footplate/S footsie footslogged footslogging footstalk footstock footworn foramen foraminifer forasmuch forby forcemeat fordone forecourse forecourt/S foredo foredoom/D forefend foregut forehock foreshock forespent forestaysail foretooth foretop foretriangle forewent forewind forewing forfar forficate forgat forint forme formfeed/S formicary formicate/N formulism formwork Fornax fornenst fornix Forrester forsee forseen/U forspeak forster forsterite Forsythia fortaleza fortepiano fortis fortissimo fortuitism fortuna forwhy forzando fosbury fossa fosse fossette fossick fotheringhay foucault foucquet foulard Fouquet Fourierism Fournet Fournier fourpence fourpenny foveola fowey fowliang foxfire foyboat FPS fractocumulus fractostratus frae fraenum fragonard fraise fraktur framboesia Francescatti Franck francolin Franconia Franconian Francophile Francophobe Francophone franger frangipane Franglais frankalmoign Frankenstein Frankish frass fratchy Frauenfeld Fraunhofer fraxinella Frazer Frazil Freccia Freda Fredericia Frederiksberg Fredrikstad freebie freedomites freelance freemartin freemason freesheet/S Freesia Freiburg freightliner fremantle fremitus Frenchy Freni frenulum frenum Frescobaldi Freytag friarbird Fribourg Fricandeau fricasee Friesian Frigg Frijol fringilline frippet Frisch Frisco frisket Friuli Friulian Frizette Frobisher froe froebel frogfish frogged frogging froghopper frogmarch frogmouth frogspawn froissart frome Froment fromenty fromm fronde frondescence frons frontenac frontlet frontogenesis frontolysis frontrunner frontwards frore froude frow frowst fructiferous frugivorous fruitarian frumentaceous frumenty frunze frustule frutescent Ft fuad fubsy fuchsin fuckwit fucoid Fuegian fugacious fugard fugato fugger fugio fukien fukuda fukuoka fukushima fula fulani fulgurite Fulham fulmar fulminic fulminous fulvous fumaric fumatorium fumatory fumitory funchal fundi fundus fundy funfair fungistat funicle furan furfur furfuraceous furfuraldehyde furfuran furioso furmenty furnivall furphy furred fusain fuscous fushih fushun fusionism/I fustanella fustic futtock Futuna futurist/S futurology fyke fylde fylfot fyn fyrd Fyzabad gabar gabelle gaberlunzie gabion gabionade gablet gabo gabor gaborone gaby Gadarene gaddafi gadhelic gadid gadoid gadolinite gadroon gadsden gaea gaekwar Gael Gaeltacht gaffsail Gagarin gagauzi gahnite Gaia gaikwar gaillard Gainsborough gaiseric gaitskell gaius galactagogue galactometer galactopoietic Galago galah galangal galantine galanty galashiels galata galatians galba galbanum galbraith galea Galenic Galenical Galenism Galibi Galician galileo galimatias galingale galiot galipot Galla galle galleass gallfly gallia galliambic galliard Gallic Gallican Gallicanism gallice Gallicism galligaskins gallimaufry gallinacean gallinaceous gallinas galliot gallipoli gallipot galliwasp gallnut galloglass galloon galloot gallous galoot galop galsworthy Galton galvanoscope galvanostat galvanotropism galvo Galwegian galyak gama gamba gambado Gambeson Gambetta Gambier Gamboge gambrel gambrinus gamelan gamesman gametangium gametocyte gametogenesis gametophore gametophyte gammadion gammer gamogenesis gamopetalous gamophyllous gamosepalous gamp gan gance gand Ganda gandalf gandhi Gandhiism gandy gandzha ganesa Ganga gangbang gangrel gangtok gangue ganister ganja ganof ganoid gansey gapeworm gapped garam Garamond garand garbanzo garbo garboard garboil gard garda gardant garderobe gardiner garfish garganey Gargantua garget garnierite garonne garpike garrick Garrya Gascon gasconade gaselier gasiform gaskell gaskin gasman gasohol gasometry Gaspar gasteropod gastralgia gastroenteric gastroenteritis gastroenterology gastroenterostomy gastrolith gastrology gastropod gastroscope gastrostomy gastrotomy gastrotrich gastrovascular gastrula gatehouse gatekeep Gates gateshead gath Gatha gatling gatt Gaucho gauffer gaugeing gauhati Gaulish Gaullism Gaullist Gaultheria gaumless gauntry gaup gaussmeter gautama gautier gavage gavial gawp gaya gayomart Gaza gazankulu gazehound gaziantep gazump gdynia gean geanticline gearwheel geber gec gedact gedanken Gedda geelong gefilte Gehenna gehlenite Geisel Geissler gelada gelatinoid Gelderland gelibolu gell gelligaer Gelsemium Gelsenkirchen gelt Gemara gemeinschaft gemmiparous gemmulation gemmule gemology gemot gen/S genappe Gencer Gendron generalism generalissimo genet Genevan Genf Genfersee Genghis genip genipap genitor genitourinary genizah genk Genoese Genova genro genseric genstat gentianaceous gentianella Gentoo genu geodynamics geognosy geoid geomechanics geometrid geophagy Geordie Georgette geosphere geostatic/S geosyncline geotaxis geotectonic gera gerah geraniaceous geranial geraniol geratology gerent gerfalcon gerlachovka germander germanicus Germanism Germanophile Germanophobe germanous germinant germiston gerona geronimo gerontological gers geryon gesellschaft gesso gest gestatorial gesualdo Gethsemane Geum gey geyserite gezira Gharial Gharry ghat/S Ghaut Ghazi Ghazzah Gheber Gherao Ghiaurov Ghiberti Ghibli Ghillie Ghirlandaio Ghitalla Giacometti gibberellic gibbsite gibeon Gibeonite gibli gibran gid gide gidgee gie Gielgud Gierek Giessen giftwrap gifu gigaherz gigantomachy gigli Gigout gigue Gilbertian Gileadite Gilels gilet gilgai gilgamesh gillies Gillingham gillion gillray gillyflower gilolo gilsonite gilthead gimcrack gimel gimme gingiva gingivitis gink ginnel giorgione giotto gip gipon Gippsland Gippy giraldus girandole Giraud Giraudoux girdlecake girgenti gironde gironny girosol gisarme Gisborne Giscard gish gissing gittern Giulini Giulio giusto glabella glabrous glacialist gladbeck gladdon gladiate gladrags Glagolitic glaikit glair glaive Glamorgan glandule glarus glaser glassman glastonbury glauce glauconite Glazunov glebe gleeman gleet gleiwitz glencoe glendower Glengarry glenoid glenrothes gley glia gliadin Glickman Glinka glissando glister gliwice globate globeflower Globigerina globin globoid globose globuliferous glochidium glogg glomerate/N glomerule glomerulus glomma Glorioso glossa glossator glossectomy glosseme glossitis glossography glossology glossopharyngeal glottic glottochronology Gloucestershire Gloxinia gloze glucagon glucinum Gluck glucocorticord gluconeogenesis glucoprotein glucoside glucosuria glume gluon glutathione glutelin gluteus glyceric glycerophosphate glycogenesis glycolic glycolysis glyconeogenesis glycoside glycosuria glyoxaline glyphography glyptal glyptic/S glyptodont glyptography gnatcatcher gnathic gnathion gnathite gnathonic gnocchi gnosis gnotobiotics goalmouth goanna goatfish goatherd goatsbeard goatskin goatsucker gobbet Gobbi Gobelin gobi gobioid gobo gobstopper goby godard godavari godefroy goderich Godesberg Godetia Godiva Godolphin godown godroon Godspeed Godthaab Godunov Goebbels gogga gogglebox goglet gogol gogra Goidel Golconda goldarn goldcrest goldeye goldilocks Goldmark goldoni goldschmidt goldthread Golgi Golgotha goliard goliardery golliwog gollop goloshes Gomberg gombroon gomel gomorrah gompers gomphosis gomulka gomuti gonadotropin goncourt Gond gondar Gondi Gondwanaland gonfalon gonfalonier gongola Gongorism gonidium goniometer gonk gonna gonococcus gonocyte gonof gonophore gonopore googly gook goole gooney Goop goosander goosefoot goosegog goosegrass goosy gopak gorakhpur goral gorbals gorblimey Gorcock goreng gorgerin gorgias gorgoneion Gorgonzola gorica gorizia Gorki Gorlovka gormless gorsedd Goshen Gosplan gosport gosse gossipmonger/S gossoon goster gotama Goth Gotha Gothenburg Gotland gotta gouache Goucher Gounod gourami Gourmont goutweed gowan gower gowk gowon goy Goya Graafian Graben Gracchus gracile gracioso graduand gradus Graeae graecism graffito Graffman grahame graiae Graian grainger grallatorial grama gramarye gramercy gramineous graminivorous grammatology grampian grampus granada granadilla granados grandaunt grandmaster/S granduncle/S grangemouth granicus graniteware granitite granodiorite granolith granophyre granta Granth granuloma granulose graphomotor grappa grappelli graptolite grasmere grassfinch grasshook grassquit grassroot gratian grattan gratulate graupel grav gravamen gravenhage gravettian gravimetrical graz Grecism gree greegree greeley Green greenaway greenbottle greenbrier greenfinch greenfly greengage Greenham greenhead greenheart greenock greenockite greensand greenshank greensickness greenstick greenstone greenstuff greige Greisen gremial Grenada Grenadines gressorial Gretna greuze greyback greybeard greyhen greystones greywacke gribble griddlecake gridfile/S Grierson Griffe Griffon Grig Grigioni Grignard Grikwa grillparzer grilse grimalkin grimsby Grindelia grindelwald grindery Griqua Griqualand grisaille griseofulvin griseous grisette grishun griskin Grison grisons grivation grivet grockle grodno grogram Grolier gromyko groningen gropius gros groschen grosgrain grosseteste grosswardein grosz grot grote grotius groundage groundsill groundsman groundspeed groundswell groupwork grouty grovet groyne grozing grozny grugru grumous Grundheber grundy Grus grysbok guacharo guaco guadalajara guadalcanal guadalquivir Guadeloupe guadiana guaiacum guan guanabara guanaco guanajuato guanase guanosine Guarani guardafui guarneri guayaquil guayule gubbins gudeance gudrun guelders guenon Guernica Guernsey Guerrero guesthouse Guevara Guido guidon guienne Guildford Guillaume guilloche Guillou Guinea Guinness guipure guiscard guitarfish guizot gujranwala gulag/S gular gulbenkian gulden gulfweed gumma gummite gummosis gummous gumshield gumtree gunge gunnel gunpaper gunstock gunter guntur gunyah gur gurdwara gurgitation gurglet gurjun gurkhali Gurmukhi gurnard Gurzenich gustavo gutbucket guthrun gutta guv guyenne guyot gwalior gwelo gwent gwynedd gwyniad gyani gybe gymnasiarch gymnasiast gymslip gynaeceum gynaecocracy gynaecoid gynaecomastia gynandrous gynarchy gynecium gyniatrics gynophore Gypsophila gyronny gyrose gyrostatic/S gyve Habsburg habu hachure hackamore hackbut hadaway Haddington hadhramaut Hadith hadj hadji hadrosaur hae haecceity haeckel haem haemachrome haemacytometer haemagglutinate haemagglutinin haemagogue haemal haematein haematemesis haematic haematin haematinic haematite haematoblast haematocele haematocrit haematocryal haematogenesis haematogenous haematoid haematological haematology haematolysis haematoma haematopoiesis haematosis haematothermal haematoxylin Haematoxylon haematozoon haematuria haemic haemin haemochrome haemocoel haemocyanin haemocyte haemocytometer haemodialysis haemoflagellate haemoglobin haemoglobinuria haemoid haemolysin haemolysis haemophile haemophilia haemophiliac haemophilic haemopoiesis haemoptysis haemorrhage haemorrhagic haemorrhoidectomy haemorrhoids haemostasis haemostat haemostatic haeres haftarah hagar hagbut Hagegard hagfish haggadah haggai hagiarchy hagiocracy Hagiographa hagiographer hagiolatry hagiology hagioscope hahnemann Haida haidar haig haik haile Hainan hainaut haiphong hairball hairgrip hairif hairnet hairtail hairweaving hairworm Haitink hajj hake Hakea hakim hakluyt hakodate halafian halakah halal halation halberd halcyone haldane haleakala halesowen halfbeak halfwit halicarnassus hallah hallam Hallamshire Halle hallel Hallowmas Hallstatt hallux halm halmahera halmstad halobiont haloid halophyte halothane Halpern hals haltemprice hama hamadryad hamadryas hamamatsu hamamelidaceous hambletonian hame hamelin hameln hamersley hamhung hamilcar Hamite Hamitic hamm hammerfest hammersmith hammerstein hammurabi hampden hampstead hamshackle hamsun hamulus hamza hanaper hanau handbarrow handbell handbrake handfeed handleability Handley handstroke hangbird hangchow hankerchief hankow hannover hanratty Hansard Hanseatic Hanuman Hanyang hapax haphtarah haplite haplography haplosis hapten hapteron haptic hapto haptotropism harakiri harald harambee harappa harar hardecanute Hardenberg hardhack hardicanute hardie Hardy harebell hargeisa Hargreaves haricot harijan harikari Haringey Harl Harlow harmattan harmonist harmonograph/S harmotome Harmsworth harney harpenden Harper harquebus harquebusier harrar Harrild harrogate Harrovian harslet hartal harte hartebeest harthacanute hartlepool hartnell hartree hartshead harun haruspex harvestmen harwell harwich haryana harz hasa hasdrubal hashemite hask haslet hassan hasselt hatchback Hathor hatpin hatshepsut haubergeon hauberk haugh haulm Hauptmann hauraki haustellum haustorium havant havel havelock Haversian havildar havre hawes hawfinch hawhaw Hawick hawkbill hawksbill hawkweed haworth hawse hawsehole hawsepipe haybox hazelhen hazlitt headlamp headrace headrail headreach headscarf headsquare headward/S heald/S Heard heartworm heathberry heathfowl heaume Heaviside hebbel hebephrenia hebetate hebetic Hebraism Hebraist Hebron heckelphone hectocotylus hedjaz heehaw heelpost heenan heerlen heffer hegira hegumen heh Heidemann/MS heiduc Heifetz heilbronn heilungkiang heirdom heitiki heitler hejira hekate hekla hel Helgoland Helianthus helichrysum helicline helicograph Heligoland Heliogabalus heliolithic Helios heliotherapy heliotropin heliotype Helladic Hellas hellbent Helldiver helle/S Helleborine Hellenism Hellenist Hellenistic hellery helmand helminth helminthiasis helminthic helminthology helmont helpmann helsingborg helvellyn Helvetia Helvetian Helvetic Helvetii hemel hemelytron hemeralopia hemialgia hemianopsia hemicellulose hemichordate hemicycle hemidemisemiquaver hemielytron hemiola hemipode hemipteran hemipterous hemispheroid hemistich hemiterpene Hemmings hemstitch henbit hencoop hendecagon hendecahedron henge hengelo hengist henhouse Henie Henryson Henslowe Henze hepcat Hephaestus hepplewhite hepta heptad heptadecanoic heptahedron heptamerous heptangular heptarchy heptastich Heptateuch heptatriene heptavalent heptose hepworth heraclea heracles Heraclid herakleion Herat herby hercegovina herculaneum Hercynian hereat heredes hereditable hereditist Herefordshire hereinto Herero heresiarch hereward heriot herisau herl herm hermannstadt Hermaphroditus hermon hermosillo hermoupolis herne herniorrhaphy herod herodias herophilus herrick herriot herstmonceux Hertford Hertfordshire Hertzian Herzegovina Herzl Herzog hesiod Hesione Hesperia Hesperian Hesperides hesperidin hesperidium hestia Hesychast Het hetaera hetaerism heterocercal heterochromatic heterochromatin/S heterochromosome heterochromous heteroclite heterodactyl heterodont heterogenous heterography heterogynous heterolecithal heterologous heteromerous heteronym Heteroousian heteroplasty heterosporous heterostyly heterotaxis heterothallic heterotopia hevelius hevesy hexachloroethane hexachlorophene hexachord hexacosanoic hexadecane hexaemeron hexamerous hexangular hexanoic hexapla hexapody hexastich hexastyle Hexateuch hexavalent hexene hexone hexosan hexose hexyl hexylresorcinol heyduck heyerdahl Heynis Heysham Hezekiah Hialeah hibernaculum Hibernicism hic Hickox hiddenite Hideyoshi Hieland hiemal hieracosphinx hierocracy hierodule hierogram hierology hierophant highchair highjack highlife highveld hijaz hijinks Hilary Hildesheim hilla hillery hillfort hilliard hillingdon hilus hilversum himachal himalayas himeji himmler Himyarite Himyaritic hin Hinayana hinckley Hindenburg hindgut hindoo hindustan hinny hinshelwood hipparch hipparchus Hippeastrum Hippocrene hippolyta Hippolytus Hippomenes hiragana hircine hiri hirohito hiroshige Hirudin hirundine Hispania Hispanicism Hispaniola hispid histiocyte histogen histogenesis histoid histone historiated hitparade Hittite hmso hoactzin hoad hoarhound hoatching hoatzin hobbema Hobbism Hochheimer hochhuth hockney Hocktide hodden hodeida Hodgson hodman hodometer hoek Hoene hofei Hofmann hofmannsthal hofuf hogarth hogg/D hogmanay hognosed hogtie hogue hogweed hohenlinden hohenlohe hohenstaufen Hohenzollern hoick/S hoiden hokkaido hokku hokusai holarctic holbein holinshed holkar Hollandia Holliday Holliger holmic holocaine holoenzyme holofernes holoplankton holothurian holp/N hols holyhead holyoake holytide Hom homebuild homecome homecraft homeopaths homeown homocentric homochromous homocyclic homodont homogenous Homoiousian homophobe/S homotaxis homothermal honan honecker honegger honewort honeybunch honeysucker Hong honiara Honiton hoo hoofbound hoogh/Y hooke hooknose hoopoe/S hoovered hoovering hoovers hopeh hoplology hoppus hopsack horae horal Horatian Horatius hordein horeb Horenstein horme hormuz hornbook hornby Horne hornfels hornstone horologe horologium horoscopy horripilation horsa horsebox horseboxs horseleech/S horseriding horst horta Hortense horthy horticulturalist hortus hosea hosier hospitalet hospitaller hospodar Hosta hosteller hostelling hostie hotien hotplate hotpot hotspur hottie Houdan houdon houmous hounslow housebuilding housecarl housel houseleek/S houseline housemaster/S housman Houstonia houting hovercraft hoverport hovertrain/S howdah howitzer Howland howlet howrah howtowdie hoxha Hoya hoylake hradec hrvatska hsi hsian hsiang hsining hsinking hua huambo huang hubble hubli huckel huckle hucklebone Huddersfield Huddleston Hudibrastic huelva huesca hufuf huggermugger hughie Huguenot huhehot hula hulme humber humberside humblebee Humperdinck hunan hungnam Hunnish huns huntingdon Huntingdonshire hunyadi huon hupeh huppah hurds hurstmonceux hus husain husein hushaby huss hussein husserl Hussite hutchie hutment hutu Huybrechts huygens huysmans hwang hwyl Hyacinthus hyaluronic hydantoin hydathode hydatid hyderabad hydnocarpate hydnocarpic hydracid hydrastinine Hydrastis hydrazoic hydria hydriodic hydrobromic hydrocele hydrocellulose hydrocoral hydrocortisone hydrogenolysis hydrogenous hydrograph hydrolyte hydromedusa hydromel hydrometallurgy hydrometeor hydronaut hydrophilous hydropower hydroquinone Hydroski hydrostat hydrotaxis hydrotherapeutics hydroxonium hydroxylamine Hydrus hyetograph hyetography Hygeia hygristor hygrophilous hygrostat hyksos hylomorphism hylophagous hylotheism hylozoism hymenopteran hymenopterous hymettus hymnist Hynninen hyoid hyoscyamine Hyoscyamus hypabyssal hypaesthesia hypaethral hypallage hypanthium hyperaemia hyperbaton hypercatalectic hypercorrect hypercorrection hyperdulia hyperextension hyperfocal hyperglycaemia hyperinsulinism hyperion hyperkinesia hypermarket hyperpnoea hyperpyrexia hyperstability hyperstable hypersthene hyperterm/S hypervitaminosis hypesthesia hypethral hyphae hypnology hypnopaedia hypnopompic Hypnos hypoacidity hypoblast hypochondrium hypocotyl hypoderm hypoeutectic hypogastrium hypogeal hypogene hypogenous hypogeous hypogeum hypoglossal hypoglycaemia hypognathous hypogynous hypoid hypolimnion hypomania hyponasty hyponitrite hyponitrous hypophosphate hypophosphite hypophosphoric hypophosphorous hypophyge hypophysis hypopituitarism hypoplasia hypoploid hypopnoea hyposthenia hypostyle hypotaxis hypothec hypoxanthine hyracoid hyrax hyrcania Hyson hyssop hysterogenic hysteroid hysterotomy hystricomorph iamb Iapetus iata iatric ibadan ibarruri ibert ibibio ibiza Ibo Ibrahim Icaria Icarian Iceni ichang ichinomiya ichnography ichnology ichor ichthyic ichthyoid ichthyolite ichthyology ichthyophagous Ichthyornis ichthyosaur ichthyosis iconium iconomatic iconostasis icterus ictinus ictus ideatum identifers identikit ideosyncrasy/S idioblast idiopathy idiophone idiosyncracy/S Ido idocrase idolum Idomeneus Idun Igbo Ignatius ignis ignitability ignoratio ignotum Igorot iguanodon ihram Ijssel Ijsselmeer ikan ikebana ikeja ikhnaton ilea ileac ileitis ileostomy ilesha ileus ilex Ilford ilia iliamna iligan ilion ilium Ilkeston ilkley illampu illawarra illich illimani illinium illocution illude illyria Illyrian illyricum ilmen iloilo ilorin imagen Imai imbros iminourea Immanuel Immelmann immersionism Immingham immobilism immortelle immoveables immunoassay immunoglobulin immunomicrosphere immunoreaction impanation imparipinnate imparisyllabic impaste impasto Impatiens impearl impeccant impedimenta impennate imperium imperscriptible impetigo imphal impi implacental impolder impolicy imponderabilia imponent imposable impostume impower impresa imprescriptible impressure imprest improbity imroz inappellable inapprehensive inarch inartificial Inbal inbeing incaparina incapsulate incardinate incensory inchmeal incipit incisure incluse incomprehensive incunabula Ind indaba indeces indene indetermine indexation Indiaman Indic indigestive indigoid indiscernability indo indoleacetic indolebutyric Indologist indomethacin indophenol indore indorsee indoxyl indra indre Indris induplicate indusium indy inearth inequable inerrable inescutcheon inessive inextirpable infallibilism infante infare infeudation infibulate infight infill infold infracostal infralapsarian infulae infundibuliform infundibulum infuscate inge ingeminate ingenerate ingesta ingleborough inglenook ingoing ingolstadt ingraft ingravescent ingres ingulf Ingush inhambane inhaul inhesion inkberry inkblot Inkerman inlace inmesh inmigrant inniskilling innoxious innsbruck Innuit innumerate innutrition inoculable inodorous inofficious inqilab insalivate inscape insectarium Inselberg inshrine insipience insnare insomuch instalation installant inswing integrant integratable Intelsat intendancy interagency interbedded interchannel interconnectable interconsole interflow interfluent interfluve intergranal Interisland interjacent interlaken interlap interlay interlocation interlunation intermesh intermigration intermittency interosculate interpage interparticle interpellant interphone interpolant interprete/S interradial interrex interrobang interrogable interstratify intersystem intertexture intertrigo intracoastal intranational intranuclear intrasocietal intratelluric intravasation intuc intuitivism intwine inuit inurbane Invar invercargill involucel involutory invultuation inwrap inyala iodism iodometry iolite iona Ionesco Ionia Ionian ionone ionopause iontophoresis iphigenia ipoh Ipomoea ipsambul ipsus ipswich iqbal iquique iquitos iracund irade irbid irbil irenicon Ireton irian iridectomy irido iridotomy Irishism iritis Irkutsk ironbark ironfounding Irons Iroquoian irradiant irrelievable irremissible irretentive irriguous irtysh isagoge isagogics isallobar isar isarithmic isatin isauria Isbn Iscariot ischaemia ischia ischium isentropically isherwood Ishmael Ishmaelite Ishtar Isidore Iskander Iskenderun islay Islington Ismaili ismailia iso isoamyl isobath isocept Isocheim isochor isochroous isocracy isocrates isocyanic isocyanide isodiametric isodiaphere isodimorphism isodynamic isoelectric isoelectronic isoenergetic isogamete isogenous isogeotherm isogloss isogon isogonic isohel isohyet isolecithal isoleucine isolex isoline isologous isophone isopod isoprene isopropyl isorhythmic isosceles isoseismal isosmotic isospondylous isostasy isosteric isotactic isothere isotone isotron isotropical israfil issachar ISSN issus istana isthmian istle istria itacolumite itaconic Italia italicity italicy ithunn ithyphallic iulus Ivanovo Ivanovsky Ives iviza Ivory Ixia Ixion Ixtaccihuatl ixtle iyar iyeyasu Izhevsk izmir izmit iznik Iztaccihuatl izzard Jabalpur Jabir Jabiru Jaborandi jacamar Jacaranda jacdaw jackeroo jackfish jackfruit jackshaft jacksmelt jacksnipe jackstay jackstraws Jacobin jaconet Jacquard jadeite Jadotville jael jaffa jaffna Jaga jaguarondi jahveh Jahvist jahweh jailhouse Jain Jainism jaipur jalap jalapa jalisco jambeau jambi jambo Jamesian jammu jammy jamnagar jampan jamshedpur jamshid jana Janacek janata Janiculum Janigro janina Janowitz Jansenism Jap Japheth Japhetic jarl jarp jarrah jarrow jarry jarvey Jarvi/S Jarvis/M jassy Jat jato javari jawan jawara jawbreak jaxartes jayawardena jaywalk JCL jebel jedda jefe jehad jehol jehoshaphat Jehovist jehu jekyll jellaba jellicoe jellify jellybean jemadar jemappes jembe Jemmy Jena Jenghis Jenner Jephthah jequirity jerba jerbil jerboa Jeremiad jerez jerid jerreed Jersey Jervis Jespersen Jesselton Jesu Jethro Jetton jevons jewelfish Jewess jewfish Jewry Jezebel Jezreel jhansi jhelum jibbons jibouti jidda jiggermast jihad jillaroo jillion jilolo jinghis jinja jinnah jipijapa jissom jitterbugger jitterbugging jiujitsu Joab jobname Jocasta Jochum jocko jodhpuri Jodo jodrell joffre jogged jogjakarta Johnsonian johore Joinville jokjakarta jollify jolo Jolson Jonah jongleur jonnock Jonson jook joppa jordaens jorum jos josquin jota jotter jotun Jotunheim joual journalled jowett joypop Juantorena juba jubbah Jubbulpore jube Judaea Judah Judaic judezmo judicative judicator judogi judoka jugal jugfet juggins juglandaceous jugulate jugum jugurtha Juilliard juiz Juliana jullundur Jumada jumbuck jumna juncaceous Juneberry jungfrau Junius junkman Junoesque jupon juratory juryman jus justiceship justiciary justle juvenal Jylland Kaaba Kabaka kabalega kabaragoya kabbala kabob Kabyle kachang kachina kadi kadiyevka kaduna Kaffir kaffirs Kaffraria Kafir kafiristan kagera kagoshima kagu kaiak kaieteur kaif kaifeng kail kailyard kain kainogenesis kairouan Kaiserslautern kaka kakapo kakemono kaki Kalahari kalat kalends Kalevala kaleyard kalgan kalgoorlie kali kalian kalidasa kalif kalimantan kalinin kaliningrad kalisz kaliyuga kalmar Kalmuck kalong kalpa kalpak kalsomine kaluga kama kamakura kamala kamasutra kame kamerun kamet kami kampong kampuchea kamseen Kamu kana Kanaka kanamycin kananga kanara Kanarese Kanawa kanazawa kanchenjunga kanchipuram kandahar Kandinsky kandy kanga kangwane Kanji kannada kano kanpur kansu kantar kanu kanzu kaohsiung kaolack kaoliang kaon kapellmeister Kapfenberg kaph karabiner karafuto karaganda Karaite Karajan karakoram karakorum Karakul karamanlis karbala Karczykowski karelia Karelian kariba Karloff Karlovy Karlsbad Karnak karnataka karoo kaross Karpov Karri Karst kart karyogamy karyokinesis karyolymph karyolysis karyoplasm karyosome karyotin karyotype kasai kasbah Kasha kasher kashgar kashmir Kashmiri Kaspszyk kassa kassala kassel kat katabasis katabolism katakana katanga katar kathak katharevusa katharsis kathiawar katmai Katrine katsina kattegat katzenjammer kauai kaunas kaunda kauri kaveri kawasaki kayseri kazachok kazakh kazan kazantzakis kazbek kea kean kearney keble keck ked kedah kedge kedgeree kediri kedron keef Keeling keelung keepnet Keewatin kef keffiyeh kegler Keighley Keijo keister keitel keitloa kekkonen kelantan keloid kelpie Kelson kelt/R kemal kemble kemerovo kempe Kempff kempis kempt kenaf kendal kendo Kennelly Kennington kenogenesis kenosis kenspeckle kente Kentish kentledge kenyatta keos kep kerala keramic/S keratin keratitis keratogenous keratoid keratoplasty keratose keratosis kerb/G kerbaya kerbela kerbstone kerch Kerenski kerf kerguelen kerkrade kerman Kermanshah kermes kermis kermits kero kerouac kersey kerseymere Kertesz kesselring kesteven Keswick ketonuria ketoxime kevel kew kewpie kex Keynesianism keytop/S KGI Khabarovsk Khachaturian Khaddar Khakass Khakis Khalid Khalif Khalkha Khalkidiki Khama Khamsin Khanate Khanga Khania Kharif Kharkov Khat Khayal Khedive Khelat Kherson Khieu Khingan Khirbet Khiva Khoikhoi Khoisan Khojent Khotan Khufu Khulna Khuskhus Khyber Kiaat Kiang Kiangsi Kiangsu Kiaochow Kibitka Kiblah kickdown kicksorter kicktail kidd Kidderminster kiddle kidron kief Kielce Kier Kierkegaard Kieselguhr Kif kike Kikoi Kikumon Kilauea Kildare Kilderkin Kilkenny Killarney Killick Killiecrankie Killifish Killikinick Kilmarnock kilung kimberley kimberlite kina kinabalu kinase kincardine kinchinjunga kincob kinematograph King kingbolt kingcraft kingcup Kingdom Kingman kingwana kinin Kinnock kino Kinross Kinshasa kioto Kirchhoff Kirghiz Kiribati Kirigami Kirin Kirkby Kirkcaldy Kirkcudbright Kirkman Kirkuk Kirkwall Kirman Kirmess Kirovabad Kirovograd Kirshbaum kirtle Kiruna Kirundi Kisangani Kish Kishinev Kishke Kismayu Kissel Kissin Kissinger Kist Kistna Kisumu kitbag/S kitchenless kitenge kithara kittiwake Kitts kitwe kiushu Kizil Klagenfurt klaipeda Klangfarbe Klansman Klausenburg Klee Kleiber Kleist Klemperer klepht klieg Klimt Klipspringer Klondike klong klootchman klopstock knackwurst knag knap knar knawel Kneller Knesset knickpoint kniferest Knighthead Kniplova Knobkerrie knop knossos knotgrass knotwork knurly Knussen koa koan kob kobarid kobe Koblenz kobold kochi Kodaly kodok koel Koestler kofta koftgar kofu Koheleth Kohima Kohl Kohn Kohoutek Kokand Kokanee Kokobeh Kokoschka kokura kolar kolding Kolhapur Kolinsky Kollo Kollwitz Kolmar Kolmogorov Kolo Kolomna Kolyma Komati Komatik Komi Kommunarsk Kommunizma Komodo Komsomol Komsomolsk Konakry Kondo Kondrashin koniology Konstanz konya koodoo Kootenay Kopeisk koph Kopje Koppa Korbut Korchnoi Kordofan Kordofanian korfball Korma Korngold Korsakov Kortrijk Koruna Korzybski Kos Kosciusko Kossuth Kostroma Kosygin Kota Kotabaru koto Koulibiaca Koumis Kovno Kovrov Koweit Kowhai Kozhikode Kra Kraal Kragujevac Krait Krakau Kramatorsk Krameria Kranj Krans Krasnodar Krasnoyarsk Krefeld Kreisky Kreisler Kremenchug Kremer Krems Kreplach Kreutzer Kriegspiel Kriemhild Krimmer Krio Krips Kriss Kristiansand Kristianstad Krivoy Kromesky Krone Kronig Kronos Kroon Kropotkin Krugersdorp Kruller Krummhorn Krupp Kruysen Krym Kshatriya Kuala Kuban Kubelik Kublai Kubrick Kuch/GN Kueh Kuenlun Kufic Kuibyshev Kukri Kuku Kula Kulturkampf Kulun Kum Kumamoto Kumasi Kumbaloi Kung Kungur Kunming Kunzite Kuomintang Kuopio Kura kurchatovium Kurgan Kuril Kurland Kurosawa Kuroshio Kurrajong Kursaal Kursk Kurzeme Kuskokwim Kutaisi Kutch Kutuzov Kuznetsk Kwa Kwacha Kwajalein Kwakiutl Kwangchow Kwangchowan Kwangju Kwangtung Kwantung Kwanza Kwara Kwazulu Kweichow Kweilin Kweisui Kweiyang Kwela KWIC KWOC kyanite kylin kylix kyloe kymograph kymric kymry Kynewulf Kyongsong kyphosis Kyprianou Kyrie kythera Kyushu La Laager Laaland labarum labe labefaction labiche labionasal labiovelar lablab labret labroid labrum labuan Laburnum labyrinthodont laccolith lacedaemon Lacedaemonian lacerant lacertilian lachlan lachryma lachrymatory laclos laconia lactalbumin lactam lactary lactescent lactiferous Lactobacillus lactoflavin lactometer lactophenol lactoprotein lactoscope Ladin Ladino ladislaus ladoga ladrone ladyfy ladysmith ladysnow laertes laevogyrate laevorotatory laevulin laevulose laforgue lagan lagena lagerkvist Lagting lah Lahnda Lahti Laibach laik lairy laius Lakeland Lakes Laksa Lakshadweep lala lalang lalapalooza lallans lallation Lalo Lamaism Lamarckian Lamarckism lamartine lambdacism lambdoid lambkin lambrequin lamellicorn lamellirostral lamina Lamington laminitis Lammas Lammastide lammergeier lampas lampedusa lampern lampeter lampholder lampion lamppost/S lamprophyre lampshade/S lanark lanate Lancastrian lancejack lancelot lancewood lanchow landammann Landau landeshauptmann landgrave landgraviate landgravine landloper landor landowska landrace landscapist/S landseer landshark landshut landsknecht landtag landwaiter lanfranc Langland langlauf Langobard Langobardic langouste langrage langres Langridge langsyne Langton Langtry langue languedoc languet laniard laniary laniferous lankester lanner lanneret lanose lansquenet Lantana lanthorn lanugo laoag laodicea laomedon laotze lapidate lapidify lapillus lapis Lapith Laplacian Lapland Lapp lapsus laptev Lar lardon largen larine larisa larmor larn larnax larousse larrigan larrikin larrup larum larwood laryngotomy lascaux lashio lashkar lasker lasket Laski lassa lassalle Lassen lassus lat Latakia lateroversion lathi lathy latifundium latimer Latimeria Latina Latinism Latinist latium Latona Latour latria lattermost Latvian lauda Laudian Laughton Launce Launceston lauraceous laurasia lauric laurier laurustinus lauryl lautrec lav laval lavolta lawbreak lawes lawgive lawks Lawless lawmake Lawrentian laxey layamon layard laycock layshaft Lazar lazaretto lazio lazuli lazulite lazurite Leacock leadbelly leadwort Leaf leafcutter leafletting Leah leakey leal Leamington leaseback leat Leatherette leatherhead leatherjacket leatherwood leavis leben lebkuchen leblanc lebowa lebrun lecce lech lecky leconte lector lecythus Leda leet leeuwarden Lefkowitz lefthand/D leftwing/RZ legaspi legnica legumin lehmann lehmbruck lehr Leibnitz Leicester Leicestershire Leichhardt Leiden Leif Leinsdorf Leinster leiria Leishmania leishmaniasis leister Leitner leitrim leix lek lekker lely leman Lemberg Lemmens lemniscate lemnos lempira lemuroid lenglen lengthman Leninabad Leninakan Leno lentamente lentic lenticel lentigo Lenya leoben Leoncavallo Leonidas Leopardi Lepanto lepaya lepidopteran Lepidosiren lepidote lepidus lepontine leporid leporine leprosarium leprose Leptocephalus Lepton leptophyllous leptosome leptospirosis leptotene Lepus Lermontov Lerwick lesbos lesseps letchworth Lethbridge Leto Lett letterset Lettish leucas Leucippus leuco leucocratic leucocyte leucocytosis leucoderma leucomaine leucopenia leucoplast leucopoiesis leucorrhoea leucotomy leuctra leukas leuven levalloisian Levant Levantine Leverhulme Leverkusen leverrier leviable Levite Levitical levkas Levko lewes Lewisham lexeme lexicology lexigraphy lexis Leyte Lhasa Liadov Liao Liaoning Liaotung Liaoyang liard Lias liase liason libau libava libeccio liberec liberticide libia lichenin lichenology Lichfield lichi liddell lidice Liebfraumilch liebig liebknecht liegeman liegnitz lienal lientery liestal lietuva liffey liftboy liftoff ligan liger ligeti ligniform lignocaine ligroin ligula liguria lii likasi liklihood likuta lilburne liliaceous lilienthal Lilith liliuokalani lille lilo lilongwe limacine limassol limbate Limbourg Limburg/R limewater limicoline limicolous limitarian limoges limousin Limpopo linacre linalool linares Lincolnshire lincrusta linctus lindane lindesnes lindisfarne lindwall lineate/X linefeed/S linenumber linestyle linewidth lingam lingayen lingcod linguiform linguini linhay linkwork linlithgow linn Linnaean linnaeus linnet linnhe lino linocut linolenic Linsang linstock lintwhite linz lionfish lipari lipase lipchitz Lipetsk lipography lipoid lipoma lipophilic lipoprotein lippe lippi lippie Lippizaner liquefacient liquesce liquidus liquorish Liriodendron liripipe lisieux Listerism literae lithoid lithomarge lithometeor lithotrity littoria liu Liv livingstone livonia livorno livraison livy lix lixivium Ljubljana Llandaff Llandudno Llanelli Llangollen Llewellyn Lleyn loadstar loadstone loanda Lobachevsky lobengula lobito lobola lobworm Locarno lochia lockyer locl locoman locris locum lod lodi lodicule Loewe loewi lofoten loganberry loganiaceous logaoedic logicism loglog logoff logography logopaedics lohengrin loiret Lolland lollapalooza Lollard lomax lombok Lombrosian lombroso loment lomond londrina longan Longbenton longcase longcloth longe Longford longicorn longinus longlasting longleaf Longobard longship longshore longueuil longueur longus longways longyearbyen Lonicera loofah lookin loopy loosebox lophobranch lophophore lor lordy Lorengar lorentz Loretta lorica lorient lorimer lorrain lorris losey Lota lothair lothario lothian/S lothringen lotic louche loudish loudspeak Loughborough Louisburg louth louvain louvar lovage lovat lovell lovey lowan lowerclassman lowestoft lowveld loyang lozengy lozi LPG lualaba luanda luang luau Luba lublin lubra lubumbashi Lucan Lucania lucarne lucca luce luciferin lucilius Lucina Lucknow lucullus lud Luddite Ludendorff ludhiana ludo Ludwigsburg Ludwigshafen luff/DGS Luffa Luganda Lugansk lugo lugsail lugworm luichow luik Luluabourg lumberjacket lumbricalis lumbricoid lumiere lumisterol lumme lumpenproletariat lumumba luna lunarian lungan lungi lungki lungworm lungwort lunik luns lunula lunulate Luo Lupercalia lupin Lur lurdan lurex lusatia Lusatian Lusitania lusus luteolin lutestring Lutetia luthern luthuli lutine lutist Luton Lutoslawski Lutyens Luxemburg Luxon luxor luxulianite lvi lvii Lvov lxi lxii lxiv lxix lxvi lxvii lyallpur lyautey lycanthrope lycaon lycaonia lycia Lycian lycopod lycurgus lydda lyddite lydgate Lydian lyell lyly Lyme Lymington lymphangial lymphangitis lymphoadenoma lyncean lynchet Lyonnais Lyonnesse Lysander Lysenkoism lysias Lysimachus lysippus lysol lyssa Lytham Lythraceous lytic lytta lytton Lyublin Ma Maag Maar Maarianhamina Maas Maastricht Maazel Mab mabela mabuse macaco Macao Macaskill Macau Maccabean Maccabees maccaroni Macclesfield Macdonnell macebearer macedoine machado machan machel machin machmeter machree machu Mackay MacKerras Mackerras Maclean Macleod Macmahon Macneice Macpherson Macready macroclimate macroencephaly macrograph macrophysics macroprocessor macropterous macrosporangium macrospore macrosystem macruran macula macumba madafu Maddalena madhya madina madre madrepore madura madurai maduro madwort maebashi Maecenas maenad maestoso maestricht maewo mafeking maffick mag/N magallanes Magdalen magdalena Magdalenian Magdeburg Magellan maggiore Maghreb magilp maginot magistery Maglemosian magnetochemistry magnetopause magnetosheath Magnificat magnificats magnoliaceous magnus magot magritte maguey Magyar mahabharata mahalla mahanadi maharashtra Mahdi mahewu Mahican mahjong Mahomet mahometan Mahonia Mahound mahratta mahseer Maia maidan maidstone maiduguri maigre maihem maikop mailcoach maillol maimonides mainbrace maintenence Maintenon maintopsail mainz maiolica Maitland Majlis majunga makalu makarios makeyevka makhachkala makkah makurdi makuta malabo Malacca malachi malacophyllous malacopterygian maladdress malam malang malassimilation malatesta malatya Malaya maldon maleable malebranche maleic malevich malherbe malihini malimprinted malines malinke Malinowski Malison malkin mallam mallee mallenders malleolus mallorca malm malonic malonylurea malory malpighi malpighiaceous Malpighian maltha malthus maltman maluku malvaceous malvern malwa Mam mamaguy mamba mamelon Mameluke mamilla mamillate mammee mammet mammiferous mammilla mampara manado managerialism manakin manassas manasseh manaus manche manchineel Manchu manchukuo manchuria Mancunian Mandaean Mandalay Mande Mandeville mandi Mandingo mandir manet mangabey mangalore manganin mangelwurzel mangonel mangosteen mani Manichaeism manichaeus manilla manille maninke maniple manipur manisa manitoulin manizales manky mannar Mannerheim Mannheim manolete manresa mansart mansholt manteau mantegna mantelletta manteltree mantilla mantinea Mantler mantoux mantova manufacturable Manuguerra manuka manukau manus manutius Manx Manxman manyplies manzanilla manzoni maoism maputo maquette mara Marabout marabunta maraca Maracaibo maracanda maracay maraging marasca marat Maratha Marathi maravedi Marburg marcasite marcellus marcescent marche Marchland Marciano Marcionism marcos marcuse marduk mardy maremma Marengo Marenzio marg margaric margarite margate Margaux Margay Marge margravate margrave margravine margrethe Mariana marianao maribor mariculture Mariehamn Marienbad Marinduque Marinetti Mariolatry Mariology mariposa Marist maritage maritain maritsa Mariupol Marius Marivaux Markevitch Markhor Markka Markova Marley marlite Marlow marmara marmite marmolada maroc marocain Maronite maroquin maros marprelate marquand Marquesan marquesas marquessate Marrakech Marrakesh marram marrano marriageability Marriner marron marryat Marsala Marseillaise Marseille Marshalsea marsilius marsipobranch Marston martaban martagon martel martellato martello Martin martineau Martinmas Martinon Marton marvell marxists masaccio Masai masan masaryk masbate Mascagni mascarene mascle mascon Masefield masharbrum mashhad mashie masinissa masjid maskanonge masqat massa massachuset massasauga massasoit Massawa Massenet massine massinissa massorete massotherapy mastaba mastigophoran mastitis masuria masurium Matabele Matabeleland matadi matamoros matanzas matapan matchbox matchmark matchstick Mathis mathura matlo matlock mato matoke matopo Matorin matozinhos matrass matriclinous matrilocal matroclinous matronage matsu matsuyama mattamore matterhorn matthias Mattila mattins mattoid mattrass matzoon maubeuge mauby Mauceri Maud Maugham maui maulana maulmain maulstick maumet mauna maund/R maundy maungy maupassant maupertuis mauretania mauriac Mauricio Maurist maurois maury maurya Mauser Mavourneen mawger mawkin mawsie Mawson Maxim maximin maximus maxint maxisingle maxixe Mayakovski mayday Mayen mayence mayon Mayotte mazard mazarin Mazdaism mazuma mazzini Mbujimayi Mccarthyism Mccartney Mccormack Mccullers Mcdiarmid Mcgonagall Mcluhan Mclure Mcmunn Mcmurdo McNair Mcnaughten Mcqueen Meade mealworm meany meatus mecamylamine Meccano mechanotherapy mechelen Mechem Mechlin meck Mecklenburg meconium medan medawar Mede mediastinum Medina medway mee/D meerut mega megacephaly megadeath Megaera megaflop/S megalocardia megalocephaly megalosaur megapode megara megaron megathere megger meghalaya megiddo megilp mehemet Mehta meilhac meiny meir Meissen meitner mekka Melaleuca melanchthon Melanochroi melanous melaphyre melba melchior Melchite Melchizedek Meleager meliaceous melilla melilot melinite melisma Melitopol melodeon meloid melos meltage Melton Melungeon mem memel memling Memnon memoire memorex Memphian Memphremagog memsahib menadione menado menai menam menander menaquinone mencius Mendeleyev Mendelism menderes mendips Menelik menes Mengelberg mengistu meningocele menispermaceous meno menology menomini menon menotti mensa Menshevik mentalism Menton menuhin mepacrine meperidine meprobamate merano merbromin merca mercaptan mercaptide mercaptopurine merchet mercia Mercian mercians Mercouri Mercurian Mercurochrome merengue mergui Merionethshire meristem meristic merkin merlon meroplankton Merovingian merozoite merrymake merse Merseburg Mersey Merseyside mersin merthyr Merton mesarch Mesembryanthemum mesencephalon mesenchyme mesenteritis mesentery meshach meshuga mesitylene mesnalty mesobenthos mesocephalic mesocratic mesogastrium mesoglea mesognathous mesolithic mesolonghi mesomeric mesophyll mesophyte mesothelioma mesothelium Mesple messalina Messapian messene messenia messiaen messina messmate/S mestee mester mestranol metacharacter/S metachromatism metacinnabarite metafemale metagnathous metalline metallocene metallophone metamale metamer metanotion/S metaperiodate metaphosphoric metaphrase metaphrast metapolitics metaproduction/S metasymbol/S metasyntax/S metatheory metatherian metathorax metaxylem metchnikoff metempirical metempirics metestrus methacrylic methaemoglobin methenamine metho methodius methotrexate methoxide meths methylcyclohexane methyldopa methylphthalate methylthionine metic metoestrus Metol metonic metopic metricate metrify metritis metronidazole metronymic metrorrhagia Metternich metz meu meung meuse Mexicali Meyerbeer Meyerhof mezcal mezcaline mezereon mezereum MFD mho miaou miaul Micah micawber Michaelmas michelozzo mick mickery mickiewicz mickle Micmac microbalance/S microbody/S microbrailler microchip/S microconcrete microcrack/DGS microdetector microdont microdot microfabric microgel microkink/G micromixing micropalaeontology microphyte micropyrometer Microscopium microsporophyll microstomatous microswitch/S microsystem/S microtherm microtomy microwatt/S microwriter/S micrurgy Middelburg middlebreaker middlemost Middlesbrough Middlewood mideast midheaven midian midinette midiron midlothian Midway mieres miffy mihrab milage Milashkina milazzo mileometer miletus Milford Milhaud milkfish milkhouse milkwort millais millefleurs millepede millepore milli milligan millrun millwheel/S millwork milne Milnes milo milometer/S milreis Milstein miltiades mimas mimetite mimir mimosaceous Mina minacious minas minch Mindel mindoro mindszenty minelayer mineralocorticoid mineworker/S minge Mingrelian mingus minho minibike minicab/S minimus minipill ministerialist ministerium minitab minivet Minkowski minna minnesinger Minorca Minorite mintoff Minton Minya miombo Miquelon mirabeau miracidium mirador miraflores mirepoix mirk MIRV mirza misallocate/DGNS misapplys miscarrys misdeclared misdefined mise miseno Miserere misericord Mishima Mishnah miskolc mislaid misplead misposition/DGS missal/S missel missis mississauga mississipi missolonghi misspelt missus mistal mistassini misti mistigris mistle mistral/S mither mithgarthr Mithraism Mithras mithridate/S mithridatism miticide mitis mitrailleuse mitrewort Mitropolous Mitropoulos Mittelland Mitterrand mixolydian Mixtec Mizoguchi mizoram mizzen MKS MKSA Mlle Mme Mnemosyne moa moab mobutu modena moderne modge modigliani modillion Modiolus Modred mofette mog/N mogador Mogilev Mohave Mohican moho Mohock mohole mohs mohur moidore moirai Mojave moke mokha mokpo Moldau Moldavian Moldavite Molech molina molise Moll mollah mollescent Mollet mollusc/S molluscoid mollweide Molokai molopo moltke molybdenous mombasa momism Mommsen Momus monacid monadelphous monadnock monaghan monal monanthous monas monaxial monazite monck Moncton Mondale Mondial monecious Monegasque moneme monetarist moneychanger mong Mongo Mongol Mongolic moniliform monkeypot monkfish monkshood Monmouthshire monnet monoatomic monobasic monocarp monocarpellary monocarpic monocausal monochasium monochloride monochloroethanol monochord monoclinous monodispersity monody monohull monohydrate monohydric monohydroxy monoicous monolatry monomark monomerous mononucleosis monopetalous monophagous monophobia monophyllous Monophysite monoplegia monopode monopodium monopteros monosemy monosepalous monosized monosodium monosome monospermous monostich monostichous monostome monostrophe monostylous monothetic monotower monotropism mons monsignor montagnard montagu montagues montale montane montauban montbretia montcalm montefiore montego monteith montenegro montero monterrey montesquieu montessori Monteux Montezuma montfort montgolfier Montgomeryshire montherlant montmorillonite montparnasse montpellier montreuil montreux montrose Montserrat monza monzonite moog moolvie moonfish moonflower moonraker moonshot moonwort Moorcock moorfowl moorhen Moorland moorwort mopboard mopoke moquette mor/S mora/A moraceous Moradabad morar morava morbific morbihan morbilli morcha mordecai mordred Mordvin Mordvinian morea moreau morecambe moreen moreish morelia morello morelos morepork moresco Moreton Morisco morish mornay Moro Morocco moroni morphallaxis Morpheus morphogenesis morphophoneme morphosis morphotype/S morphy morro morula morwong mos mosasaur moschatel moseley Moselle moshav moshesh moskva mosley mosotho mossbunker Mossi mossie mosso mosstrooper Mosul motherwell motherwort mothy motmot motocross motorable motorbicycle motorbus motorcoach motown motte motu mouflon moujik mouldboard mouldy moulmein Mountbatten Mountie mousebird mousetail mousseline Moussorgsky Mousterian mouthbrooder mouthwash mouthwatering movietone moviola mowburnt moxa Mozambique Mozarab Mridang MSC mucin muckamuck muckle mucksweat muckworm mucoid mucopolysaccharide mucoprotein mucopurulent mucro mucronate mudcat mudfish mudir mudlark mudpack mudra mudskipper/S muenster muesli mufulira mugabe muggins mugwort muhammadan Muharram mujik Mulciber muldoon muleta muleteer mulga mulhouse mulki mulley mulliken mullock mulloway multan multangular multeity multicide multidrop multifid multifile multiflora multifoil multifoliate multigravida multihop multihull/S multikey/S multilateralist/S multimembered multinuclear multipacket multipara multiped multiplane multiplepoinding multipunch/D multireel multirole multiscreen multispectral multistorey multisubject multivariable multivibrator multivocal multiway multiword multure mumbo mumchance Munch Munda munga mungo muniment/S munnion munro munsell munster munt muntin muntjac muntz murage murasaki murat murcia Murdabad Murdoch mure murex muricate Murillo murine Murmansk murra murrelet murrhine murrumbidgee murther musaceous Musca muscadel muscae muscarine muscid muscleman musclemen muscovado museology musil musjid muskeg Muskhogean muso musquash musset Mussulman mustafa mustee musteline musth mutch mutchkin Muti mutism mutsuhito muttonhead muttra mutule muzorewa muzz MVS MVT Mwalimu Mweru myalgia myalism myall myasthenia mycelium mycetoma mycetozoan mycin Mycobacterium mycostatin mydriasis mydriatic myelencephalon myelin myelitis myeloma myiasis mylonite myna myocardiograph myogenic myograph myology myoma myope Myrica myrmecology myrmecophagous myrmecophile Myrmidon myrobalan myrtaceous mysia mystagogue mythopoeia mytilene myxoedema myxoma myxomatosis myxomycete myxovirus mzee mzungu Naafi Nabataean nabis nabla/S nablus nabob Nabokov Nabonidus naboth nacre Nadia nae naevus Naga Nagaland Nagana Nagano Nagari nagor Nagpur Nagyszeben naha Nahuatl Nahum nailbrush nailfile nailhead nainsook naira nairn naissant naker nakhichevan nakuru nalchik nalgo Nama namangan Namaqualand namas namelist/S namen nametape namhoi Namibia namur Nana nanak nanchang nanda nanga nankeen nanning nanometric nanoplankton Nansen nanterre nantes nantung naphtali naphthyl Napier Napierian napiform Napoli nappa Napravnik nara Narayanganj narbada narceine narcoanalysis narcosynthesis narcotism nardoo nares narial nark narmada Narraganset narthex narva narvik naseberry naseby nashe nasho nasion nasofrontal nasopharynx nasser nastase Nathanael natheless natrium natrolite natron natsopa natter natterjack naturism naturopathy nauch naucratis naumachia nauplius naur Nauru nautch nautiloid navar navarin navarino navarre Navassa navew navicert navratilova navvy naxalite naxos Nayarit Nazarite naze NCAR ndola neagh neap Nearctic nearside neb Neblett nebo nebuchadnezzar neckar neckband neckcloth neckpiece neckwear necrobiosis necrolatry necromania necrophobia necrose necrotomy neddy Nederland needlecord needlecraft needlefish needleful neep nefertiti negev Negress negresses negrillo Negritic Negrito negritude Negrophil Negrophobe negropont negros Negus Nehemiah neisse Nejd nek Nekrasov nekton Nelly Nelson neman nemathelminth Nembutal nemea Nemean nemertean nemery Nemesia nene neoarsphenamine Neocene neocolonialism neoconservative Neogaea Neogene neoimpressionism neoplasty neoscholasticism Neotropical Neozoic neper nephogram nephograph nephology nephralgia nephridium nephrite nephritic nephritis nephron nephrosis nephrotomy nepos Neptunian neral Nereis nereus Neri neritic nernst neroli neruda nerva nerval nervate nervine nervure nesh nesselrode nessus Nestorianism nestorius netaji netball neto netsuke nett Neubrandenburg neume neurasthenia neurectomy neurilemma neuro neuroblast neurocoele neurogram neurohypophysis neurolemma neuroma neuropath neuropsychiatry neuropteran neuropterous neurotomy neurotransmitter/S neurovascular neusatz neuss neustria neutretto Neville Nevis Nevski New Newburg Newcombe Newcomen Newfie Newgate Newham Newhaven Newmarket newshawk newspeak Newtonabbey Newtown ney nez Ngaio Ngaliema NGK Ngoma Nguni Ngwee Nha niblick Nicaea Nice Nicene Nicias nicknack nickpoint Nicobar Nicol Nicola Nicolai Nicolesco Nicolson Nicotiana nicotinism nictheroy nictitate/G nidaros niddering nide nidicolous nidify nidus niebuhr Niedersachsen niello niemen Niersteiner Nietszche nieve niff Niflheim nightlife nightrider nightspot nightwear nigrescent nigrify nigritude nihon niigata Nijmegen Nikaria Nike Nikolainkaupunki Nikolayev nilgai nilgiri Nilotic nim nimblewit Nimitz nimonic Nimrod Nimwegen Ningpo ningsia Ninon ninus niobic niobous niort nipa nipigon Nipissing nipplewort nippur Nisei Nishapur nishinomiya Nissen nisus niton nitramine nitrobacteria nitrochloroform nitrohydrochloric nitrometer nitromethane nitroso nitrosyl Niue nival nivation niven niveous nivernais nixie Nizam nizhni njord nkomo nkrumah Noachian nobbut nobiliary Noctiluca noctilucent noctuid noctule noesis nofretete Noguchi noh noil noisette nolde nolle nomarch nomarchy nombles nombril nome nomen nomism nomocracy nonactive nonaggression nonaligned nonanalytic nonanoic nonappearance nonblank/S noncausal noncomputable noncontributory noncritical nondirected nondispersive noneffective nonego nonet nonevent nonexecutable nong nonharmonic nonhierarchic nonhierarchical nonhuman nonidentical noninteger noninvertible nonnumeric nono nonowner/S nonparametrical nonparous nonparty nonproliferation nonrecursive/Y nonredundant nonrelevance nonrelevant nonsequenced nonsmoker/S nonstarter nonstative nonstick nonstriated nonsuch nonsuit nonunionism nonvocal nonvoter nonvoting noordbrabant Noordholland nopal nord nordau Nordkyn norepinephrine norge noria noricum norite nork Norland Normanton Norn norodom Norseman Northallerton Northamptonshire Northcliffe Northcountryman Northman Northmen northmost Northumbria Northumbrian/S Northwich noseband nosography Nostoc nostology notelet noticeboard/S notifiable notitia notochord Notogaea Notornis Nototherium Notour Nottinghamshire notum Notus noumenon novalis novara novation novaya novelese novello novercal Novgorod Novokuznetsk nowel nowhence nowt nox noyade noyau noyon NTP Nuba nubecula nubians Nucci nucha nuddy nudicaul nudum nuevo Nuffield nuggar nuggety nuissance nuke nukus nullah nullarbor nullifidian nullipara Nullstellensatz numantia numbat numberplate numbfish numbles numdah numen numerary numidia nummary nummulite numnah nunatak nunc nuncio nuncle Nuneaton nunhood nunny Nupe Nuremberg nureyev nuri nuristan nusa nutant nutbrown nutcase nutgall nuthouse nutlet nutter nutwood nyala Nyanja nyanza nyasa Nyasaland nyctaginaceous nyctalopia nyctinasty nyctitropism nyctophobia nye nyeman nyerere nylghau nympha nymphaeaceous nympho Nynorsk Nyoro nystatin nyx Oahu Oakham oakum Oakville oarfish oarlock oast oates Oaxaca oba Obadiah oban obasanjo obconic obedientiary Oberammergau Oberhausen Oberland Oberon oblanceolate obligato obmutescence obolus obote Obraztsova obreption obscurum obsecrate obsequent obstipation obvolute oca occasionalism occular occultate oceanid oceanus ochlophobia Ochman ochone ochrea ockeghem ocker Ockham ocode Ocrea octachord octad octahedrite octamerous octanedioic octangle octangular Octans octarchy octaroon octavalent Octavian octavo Octobrist octocentenary octonary octu octuple octylphenylether ocularist oddfellow Odelsting odense odoacer odontalgia odontoblast Odontoglossum odontograph odontoid odontophore odovacar odra odyl oecology oenone oestrin oestrogen oestrone oestrous oestrus ofay offa/Y offcut/S officinal ogaden ogasawara ogbomosho ogdoad ogee Ogham Oglethorpe Ogpu ogun Ogygian oho Oidium oilbird oilcup oilfield oilfired Oireachtas oise Oistrakh oita oka okavango Okayama oke Okeechobee Okefenokee Okhotsk Okie okta Olcott Oldcastle Oldham oldwife oleaceous olecranon olefine olefinic oleic olein oleograph oleoresin oleum olibanum olid oligopsony oligotrophic oliguria olio oliphant olivaceous olivary Oliveira olivenite olivier olla olm ology olomouc oloroso olszyn Olynthus omadhaun omagh omar omasum omayyad ombre Omdurman ommatidium ommatophore Ommiad omnicompetent omnific omophagia omphale omphalos Omsk omuta onager onagraceous onassis ondes ondo ondograph ondometer onega onitsha onlook onomasiology onychophoran onymous oof oogamy oogenesis oogonium ooh oolite oology oolong oomiak oompah oont oophorectomy oophoritis oophyte oose oosperm oosphere oospore oostende ootheca ootid opah opalesce ope opencast operose ophicleide ophir Ophiuchus ophthalmia ophthalmitis opisometer opisthobranch opisthognathous opiumism Oporto Oppens oppidan oppilate oppugnant opsimath optacon/S optoelectronic optometer oracy oradea oran Orangeism Orangeman Oratorian orc Orcadian orcein orchestrina orchidaceous orchil orchitis orcinol orczy ordinator/S ordonnance Ordovician ordzhonikidze oread orectic orel Orenburg orense orfe Orff orfray organogenesis organography organoleptic organology organon organotherapy organum organza organzine orgeat oribi oriel oriente origen orinasal orissa Oriya orizaba orjonikidze orkneys orle Orleanist orlon orlop Ormandy Ormazd ormer ormolu ormuz orne ornis ornithischian ornithomancy ornithopod ornithopter Ornithorhynchus ornithoscopy ornithosis orobanchaceous oroide orometer orontes orozco orpharion Orphean Orphism orphrey orpiment orpine Orpington orrery orris orsini Orsk ortegal orthohydrogen orthophosphoric orthophosphorous orthopter orthopterous orthoptic/S orthostichy orthotone ortles oruro Orvieto oryol Osage Oscan oscitancy osculant oscular OSHA Oshawa Oshogbo Osijek osman Osmanli osmious Osnaburg ossa ossein Osset ossetia Ossetic Ossian ossie ossietzky ossiferous osso osteal ostend ostensory osteoclasis osteogenesis osteomalacia osteomyelitis osteotome osteotomy ostia ostinato ostiole ostium ostler ostmark ostosis ostracoderm ostracon ostrava Ostrogoth ostwald Ostyak otalgia othergates Othin othman otho otic otitis otocyst otolaryngology otology otoscope otranto ottar ottava otterburn Ottley otway ouachita ouananiche oubangui oudh ouessant Ouija oujda oulu ouse ousel outasight outdate outjockey outlist outman outrunner outrush outswing outwash outwith Ovambo ovenproof/DGS ovenware overachieve/DGRS overarch overblouse overboot overcheck overcloud overcompetence overconsolidate/DGNS overcrop overdetermine/GS overdye overfold overground overhype/DGS Overijssel overleaf overlive overmantel overmatter overnice overpitch overrunning overscale overscore overset oversew overside oversleeve overspent overstaff/DGS overstepped overstress/D overstruck overtask overtype/G oviedo oviferous ovisac owelty owerri owt Oxbridge oxenstierna Oxfordshire oxhide oxidimetry oxime oxon oxonium oxpecker oxter oxtongue oxus oxyacetylene oxyacid oxycephaly oxychloride oxyhaemoglobin oxysalt oxytetracycline oxytocic oxytocin oxytone oyer oyez oyo oystercatcher ozalid Ozawa ozonolysis ozs Paal PABA pabulum paca paceway pacha pachalic Pachisi Pachouli pachuca pachuco Pacific padang padauk paddlefish Paddywhack pademelon paderborn Paderewski padishah padma padouk padova padsaw padua paduasoy Padus paederast paediatrician paediatrics paedogenesis paedology paedomorphosis paedophilia paeony pageful/S pagurian pah pahang Pahari Pahlavi pahsien paigle Paignton paillasse paillette painkiller paintbox paisa paisano Paiute pakeha paki Palacio palaeanthropic Palaearctic palaeethnology palaeoanthropology palaeobotany Palaeocene palaeoclimatology palaeoecological palaeoecology palaeoethnobotany palaeogene palaeography palaeolith palaeolithic palaeomagnetism palaeontography Palaeozoic palaeozoology palais Palau palawan palea palembang palencia Palenque palestra palestrina paletot paley Pali palikar palimpsest palindromicity palk palladic palladio palladous Pallas pallete palma palmaceous Palmerston palmira palolo palooka palos palour palpebrate palsgrave palstave pamirs pampero pamphrey pamphylia pamplona panada Panama panatella/S Panathenaea panay panchax panchayat panchen pancosmism pancreatin pandanaceous Pandarus Pandean pandore pandour pandowdy pandurate pandy pandybat panettone panga Panhellenic Panhellenism panicmonger paniculate Panjabi panjim pankhurst panmixia panmunjom pannage panne pannikin pannonia panocha panoptic pansophy Pantagruel pantechnicon pantelleria pantihose panto pantoum paoting paotow papadopoulos papain papandreou papaveraceous papaverine papaya papeete paperbark paperclip/S paperknife paperknives paperless paperthrow papeterie Paphian paphlagonia paphos Papiamento papier papilionaceous pappus Papuan papule papyraceous papyrology parabasis parablast parabrake paracasein Paracel Paracelsus paracetamol parachronism paraclete paradrop paraesthesia paraformaldehyde paragoge parahydrogen paralanguage paraldehyde paralipomena paramaribo paramatta paramo paramorph paramorphine paramorphism parang parapraxis parashah parasitology parastichy parasyntheton parcae parcheesi parclose pardalote pardubice pareira parergon paresis paresthesia pareu pareve parfleche parget parhelic parhelion paripinnate parishad parison parisyllabic parkin parky parlando parleyvoo parliamentarianism parm Parma parmenides parmentier parmigianino Parnassian Parnassus parnell paroicous parotic parotoid parousia parramatta parrel parrotfish Parsee Parthenopaeus Parthenope Parthenos parthia Parthian particlar partita partlet parturifacient parulis parzival pasargadae pasay Pasch pase pash pashalik pashka pashm Pashto pasionaria pasolini pasqueflower pasquinade passacaglia passade Passamaquoddy passant passepied passifloraceous passionflower Passiontide Pasteurism pastis pasto patagium patellate Pathan pathfind pathic pathlength pathognomy patiala paticularly patin patisserie patmore Patmos patna paton patras patrial patriclinous patrilocal patroclus patrology pau paua paucal Pauk pauldron pauling Paulinus paumotu pausanias pav pavage pavane Pavarotti pavis pavlodar pavlova Pavo pavonine pawky Pawnee pawnees paxwax paynim PCB/S peag peake pean pearlwort pearmain Pears peart peary peasouper peau peavey pechora peckinpah peckish Pecksniffian pectase pecten peculium pedalo pedate pedatifid pedi pedicular pediform pedunculate peebles peen/DGS peepshow peepul peetweet peewit pegmatite pegu Pehlevi peipus peiraeus peirce pejoration pekan peke Pekin Pekingese Pelagian Pelagianism pelagius pelargonic pelargonium Pelasgian pelerine Peleus Pelew pelf Pelias pelion pelisse pelite pella pelles pelletier pellicle Pelmanism pelmet peloponnese Peloponnesian Pelops peltast peltier pemba Pembrokeshire pemphigus penang penchi pendente penderecki pendragon peneplain peneus pengpu penillion peninsulate penki pennine/S penninite pennon pennoncel pennycress pennyweight pennywort pennyworth penrith penstemon penstock penta pentachlorophenol pentangular pentanoic pentaprism pentastich pentatomic pentelikon pentene penthesileia pentheus pentimento Pentland pentlandite pentose pentothal pentoxide Pentstemon pentyl pentylenetetrazol penuchle Penutian penza penzance pepin peplos peplum pepo pepperwort pepsinate Pepys Pequot pera peracid peraea perak perborate Perceval Percheron perchloric perchloride percoid perdido perdu pereira perfin pergamum pergolesi peri perianth periapt periblem periclase periclinal pericline pericope periglacial perigon perigordian perinephrium perineuritis perineurium periodate perionychium periosteum periostitis peripteral perique perisarc perisperm perispomenon perissodactyl peristalsis peristome peristyle perithecium peritoneum peritrack Peritricha periwig perlis Perlman perlocution permanganate permanganic pernambuco pernickety pernik pernod perogative perpignan perrault perrin perron persalt perse persephone persepolis Persicaria persiennes Persis personalty perspectivism perspex Persson pertussis perugia perugino peruke perutz peruzzi perv pes Pesach pesade pesaro pescadores pescara peseta pesewa peshawar peshitta pestalozzi pesthole pesthouse petaliferous petalody petechia Peterborough Peterlee Peterloo Peterman Petermann Petersham pethidine Petra petrarch Petrie Petrine petrodollar petrograd petrolic Petronius Petropavlovsk Petrosian Petrov Petrovsk Petrozavodsk petsamo pettifogging pettitoes petuntse pevsner pewit Peyer Pfalz Pforzheim Phaeacian Phaedrus phagedaena phagomania phagophobia phalangeal phanerocrystalline phanerophyte phanerozoic pharmacophore/S pharmacophoric pharsalus pharyngology pharyngoscope pharyngotomy phatic pheidippides phelloderm phellogen phenacaine phenacetin phenacite phenanthrene phenazine phenetic phenformin phenix phenolphthalein phenomenom phenylamine phenylketonuria phew phidias phidippides Philadelphus philae philby philemon philhellene philibeg Philippeville philippi Philippic philippics philippopolis philips Philistia philistines Philistinism phillips phillumenist Philoctetes philomel Philomela phimosis phiz phlebosclerosis Phlegethon phlogopite phlyctena phnom phocaea phocine phocis phocomelia phoebus Phoenician phoenicians phomvihane phonendoscope phonetist phonometer phonoscope phonotactics phonotype/S phonotypy phooey phosgenite phosophoric phosphatase phosphaturia phosphino phosphonium phosphoprotein phosphorate phosphoroscope phossy phot photoactinic photoactive photochronograph photoconduction photoelastic photoelasticity photoelectrotype photofit photonasty photoneutron photophysical photophysics photopolymer photoselected photoselection phototherapy photothermic phototonus phototopography phototransistor phototype phototypeset photozincography Phragmites phrasal phrenitis phrixus phrygia Phrygian phthalein phthalic phthalocyanine phthiriasis phthisic phthisis phut phyfe phyllite phylloquinone phyllotaxis Phylloxera physicochemical physiocrat physoclistous physostomous phytogenesis phytohormone phytolith/S phytotoxin phytotron piacenza piacular piaf piaffe piaget Pianola piave Piavko piaza Picard picardy piccanin piccaninny piccard pichiciego pickerelweed pickin Pickwickian pico picong picot picotee picrate picric picrite picrotoxin Pictish pictogram pictor picts picul piddock piedmontite pieman piemonte pieria Pierian Pierides pieridine piero Pierrot Pietermaritzburg Pieterson piezo piezochemistry pigface/D pigfish piggin piggledy piggott pigmeat pignut pigswill pigweed pika pikelet pikeperch pilatus pilau pilch pilcomayo pileous pili piliferous piliform pilliwinks pillwort pilocarpine pilose Pilsen Pilsudski Piltdown pimiento pimpernel pinaceous pinchpenny pinckney pindar Pindaric pindus pinero pinfeather pinfish pinguid pinite Pinkerton Pinkster pinnatifid pinnatipartite pinnatiped pinnatisect pinny pinochet pinole Pinsk pintadera pinturicchio pinwork pinworm piny piolet pipa pipeclay pipefitting piperaceous pipewort pipistrelle pipsqueak piragua pirandello piranesi pirhouette pirn pirog pirozhki Pisanello Pisano piscary piscatorial Piscis pisgah pish pishogue pishpek pisistratus pissarro pistareen piste pistoia pitapat Pitcairn pitchometer/S Pithecanthropus pithos pitot pitsaw Pitta pituri pityriasis piura pix pize pizzle placet placoderm placoid plafond plagioclimax plagiotropism plainchant plainsong planchette planform planimetry plano planogamete planometer plantagenet plantigrade plantocracy plash plashy plasmodesma plasmosome plassey Plasson Plasticine plastometer plata plataea platan platelayer/S platemark/S plath platiniferous platiniridium platinocyanic platinocyanide platinoid platinotype Platonical Plattdeutsch Platte Platteland platy platyhelminth platyrrhine plauen Plautus playgroup/S playlet playschool pleach pleasance pleb plebby plectognath pled pleiad pleiocene pleiotropism pleochroism pleomorphism pleonasm pleopod plesiosaur plessor plethysmograph pleurodynia pleuron pleuropneumonia pleurotomy pleuston pleven plexor plica plicate ploat plodge plonk plonko plotinus plottable plumate plumbaginaceous plumbicon plumbum pluriliteral pluripresence plutus pluviometer pluvious pma pneuma pneumobacillus pneumoconiosis pneumodynamics pneumogastric pneumograph pneumonectomy pneumonitis pneumothorax pnom poaceous POBox pochard pococurante pocus poddy podesta podgorica Podolsk podophyllin podsol poenology pogey pogge Pogonia Pogorelich pogy pohai pohutukawa poind pointsman poitiers poitou pokeberry pokelogan pokeweed pokie pola Polack polacre Polanski poleaxe polemarch polemoniaceous polenta poleyn Polje Pollack pollaiuolo pollan Pollini pollinosis polliwog Pollyanna polony Polska poltava poly polyadelphous polyamide polyatomic polybasic polybius Polycarp polyconic polycrates polydemic polydeuces polydipsia polydisperse polydispersity polyembryony polygalaceous polygnotus polygonaceous polyhydric polyisoprene polymerous polynices polyoxyethene polyphosphoric polyphyodont polypod polyprotodont polypus polysyllogism polythetic polythionic polyvinylidene polyxena pom pombal pombe pomfret pomiculture pommern pommy pomorze pompidou pondicherry Pondo pondokkie Pondoland pondweed pone/A pongee pongid poniard Pons ponta pontchartrain pontefract pontevedra pontianak Pontic pontifex pontil pontormo pontus pontypool pontypridd pooftah poon poona poonce poove popedom popeyed Popov Popp poppadom popsicle popsy porbeagle pori porirua porism porkpie pornocracy poromeric porosimeter porphyrogenite porsena Porson portadown portfire portlaoise portobello portulacaceous Posen posho Positif posology poss possie postcava postcode/S postexilian posticous postie postil postimpressionism postliminy postmeridian postrider potamic potamology potatory potch potentiostat pothecary potherb potiche potiphar potman potoroo potyomkin pouncet powan Powhatan powys poyang pozsony pozzuolana pozzuoli pozzy pracharak pradesh praemunire praenomen Praesepe praetor Praetorian praetorius pragmat/S praha prajna Prakrit pralltriller prang prat prato prau praxiteles preadamite precall precatory precedential preceed precis precompile/DGS preconnected preconnection preconsolidate/DGNS predella predeterminate predial predicant predikant prednisone predrilled prefill/DGS preglacial preincubate/DGS prelacy prelatism prelect prelexical prelims premaxilla premedication premiership premultiply/DG premultiplys prenomen prenominal preopened preoxidation prepositor prerelease presa prescan prescriptible prescriptivism presentationism Pressburg pression prestel prestonpans prestwich preterhuman pretonic pretor pretorius Pretre Preussen Previn previse Prey priapism Priapus pribilof Price priestcraft prill primaeval primaquine primatives primigravida primine primordium primulaceous Principe prisage Priscian proc procarp proceleusmatic prochronism proclus Procne procopius proctoscope procuratory producable proem profiterole progenitive Prokopyevsk proleg prolegomenon prolepsis promethazine promycelium propanoic propenamide propene propertius propionic propjet propontis propylaeum propylite proserpina prostheses prostyle protagoras protandrous protanopia Proterozoic proters protestantism protoactinium protochordate protogynous protomorphic Protophyta protosemitic prototherian protoxide protrusile protuberate protude/GS protyle proudhon proustite prout proventriculus Provincetown provo provocate/X proxima prudentius Prunella prunelle Prussianism prut prynne prytaneum psammite psephite pseudaxis pseudepigrapha pseudocarp pseudomorph pseudomutuality pseudopodium pshaw psilocybin psilomelane psittacine psittacosis Pskov psoas Psoralea psoriasis psst psychasthenia psychohistory psychomimetic psychotechnics ptah pteridology pteridophyte pteridosperm pteropod pterosaur pterygoid pteryla ptisan ptochocracy ptolemaeus Ptolemaist ptosis ptyalin ptyalism PUC pudsey puebla puerilism puffbird/S puget puglia pugwash pula pullorum pulsatile pulsejet pulvinate punakha punce punchable punchbowl/S pune punjab punka punnet/S punta Puppis purana Purbeck puri purim purpurin Puseyism pushkin pushrod/S pushto putamen putto putumayo puvis puy PWT pya pyaemia pydna pye pyelography pylorectomy pylos pym pyogenesis pyoid pyosis pyramus pyranometer pyrazole pyrenees pyroconductivity pyrogallate pyrognostics pyrographic pyrography pyrolysed pyrolysing pyromagnetic pyrone pyrophosphoric pyrophotometer pyrophyllite pyrostat pyrrha pyrrho Pyrrhus pyrrolidine pyrruvic Pythagoreanism Pythia Pythian pythias qaboos qaddafi qaddish qadi qairwan qattara qeshm qibla qintar qishm qoph quadragenarian Quadragesima quadragesimal quadraplegic quadrella quadriga quadrinomial quadriplegia quadrophonics quadrumanous quadruplex quaere quagga quaggy quaky quale quango/S quaquaversal quare quarrian quarterlight/S quartersaw quashi quasicontinuous quasiorder quasiperiodic quasistationary quass Quassia quathlamba quatre quebracho Queenborough queencake queensberry Queenstown quelpart quelquechose quemoy queneau quenelle quercetin quercine quesnay quetta quetzalcoatl quiberon quidnunc quillet quillon quilmes quim Quimper quinacrine quinary quinate quincentenary quindecagon quindecaplet quindecennial quinic quinnat quinol quinone quinonoid quinquagenarian Quinquagesima quinquecentenary quinquefoliate quinquepartite quinquereme quinsy quintan quintana quintero quintilian quinze quipu quire quirinus Quirites quist Quivar quiverful qum qumran quokka quotha rabato rabaul rabbath rabbitfish rabbitoh Rabelais Rabelaisian Rabi Rabia racecard/S racegoer/S raceme rachmanism Rackham rada Radetzky radicel radiguet radioactivate radiocommunication radioligand radioluminescence radiomicrometer radiophonic radioscope radiotelegram radiotelemetry radioteletype radiothermy radiotoxic Radnorshire radom raeburn raf raffinate Rafflesia ragbolt ragusa ragworm/S ragwort rahman Raia railcar/S railwayman Raimondi rainband rainbird raincheck rainforest rainout raison rajab rajasthan rajkot Rajput rajputana rajya rakata rakehell raki rallentando ralline rallycross Rama ramachandra ramakrishna ramat ramayana rambert Rambouillet rambutan rameau Rameses ramjet/S rammish Rampal rampur ramsay ramsgate ramsons ramtil ramulose rancagua rance rancherie ranchero ranchi randan randers Randova ranee rangefinder rani ranjit Ranki ranmoor ransome ranunculaceous rapacki Rapallo rapeseed raphe Raphia raphide rapparee rara raree rareripe rarotonga rasbora rase rasht rask raspatory rasputin rasse Rastafarian ratan ratatouille ratbag ratbaggery ratbite rateen ratfink ratfish ratha rathenau ratiometer ratisbon ratite ratlam rato ratsbane rattigan rattish Rattle rattlebox rattoon Rauwolfia ravelin ravenna ravin rawalpindi rawsthorne raylet razee razoo razzia razzle Rea reade readonly readwrite realgar reallotment reapply/DS rearguard/S reassertion reassociation reast rebato rebec rebell rebellow rebid rebond/DG Rebozo rec recalesce recaption receiptor recept recipience Recklinghausen recodify/DGS reconsolidate/G recrement rectillinear rectocele recuperator recurrency recursivity recurvate recurve redan redback redbrick Redbridge redbug redcurrant redd redditch reddle Redemptorist redeye redfin Redgrave rediffusion redingote redon redose redowa reductionalist redware reebok reedling reen reflate/DGS reflet regelate Regensburg reger reggae reggio regin regiomontanus rego regrate regulable Rehoboam Reichsrat reigate reims Reiner reintroduction reinvoke/G reith rejig rejuvenesce relatum relearn religionism reluct remainderman Remblai Reme Remex remittee remix/GS remontant remontoir remould/DG removalist remscheid Renardy rendzina renegado Renfrew reni rennes Rensselaerite renvoi reorientate/DGS repassivation repechage replevy replicable replicator/S repoint repot reprocessor reprography reptant resample/G resaturate/GN rescissible reseat reseau reselection resequence resettle residentiary resiniferous resipiscence resistencia resit resnais resnatron Resnik respecify/S Respighi resrict restiform restorationism restransmit resurrectionism rete retene retension/D retentionist retiary retinite retro retroact retrochoir retrodiction retroject reuchlin reus reuter reutlingen reval revanchism revelationist reverberator reversi reverso revoice rewire/G rexine reynaud reynosa rhabdomyoma rhachis Rhadamanthus rhaetia Rhaetian Rhaetic rhee rhein Rheinland Rhemish rheobase rheotaxis rheotropism rhetic rheydt rhigolene rhinology rhinoplasty rhizomorph Rhodesian Rhodesoid Rhodian rhodic rhodinal Rhodope rhodos rhotacism rhotic rhumbatron rhynchocephalian rhyton RI ria ribbentrop ribble ribbonfish ribbonwood ribera ribwort/S ricardo Ricci Ricciarelli riccio ricercare richelieu richthofen ricinoleic rickettsial rident ridgetree ridgeway ridley riefenstahl riempie rienzi Riesling rightable righthand/D rightish righto rightwinger/S rigi rigil Rigsdaler Rijeka Rijksdaaler Rijn Rijswijk Riksdag rimester Rimini Rimsky rimu rinforzando ringgit ringhals ringinglow ringster ripcord ripon ripplet Ripuarian Riss rissole risus ritardando ritenuto ritornello rivage Rivera rizal rizzio roadholding roadroller/S Roanoke robben robbia Robeson Robespierre roborant Robson roca rocaille Rochberg Rochdale Rochelle rockery Rockhampton Rockingham rockweed Rodin rodomontade Rodrigo Rodzinski roentgenopaque roeselare Roethke rogatory roget Rojak Rolf rollaway rollbar rollmop/S rollneck Rollo rollway Roma Romagna Romaic Romains Romaji Romanes Romanic Romanism Romanist Romanov Romansch Romany/S Romberg Romero/S Romish Rommel Romney Roncesvalles rone roneo ronggeng Ronin Ronsard roo rooinek rootle ropable roquefort roquet roraima rorschach rort rosace Rosalind rosario rosarium roscius roscoe roscommon roseberry rosehip rosewall rosh Rosicrucian rosinante roskilde rospa rossetti rossiya rostand rostock Rostov Rostropovich Rotherham Rothermere Rothesay roti rotorua Rotterdam Rouault Roubaix roucou rouget roulers roumelia Roussillon Routemarch Rowan Rowbotham Rowicki Rowlandson rowntree roxas Roxburgh Royden Rozhdestvensky RTT rubbra rubby rubefy Rubenstein rubescent rubiaceous Rubicon rubinstein rubrician rubstone rudderhead Rudesheimer rudish Ruhr ruisdael rumelia Rumpelstiltskin runcible runcorn Rundstedt Rupert Rurik Ruritania Ruskin Russky Russophile Russophobe ruthenia Ruthenian Rutherfordium ruthful rutilated Rutter ruwenzori ruysdael ruyter ryazan Rybinsk rydal ryobu ryokan ryot Ryswick Ryukyu Ryurik Rzewski Saadi Saar Saarinen Saarland sabadell Sabaean sabah Sabaoth sabatier sabayon Sabbatarian Sabellian sabretache sabulous saccharic saccharoid sacco Sackville Sacramentarian sadat saddlebill Sadducee sade sadhu sadi sadiron sadowa Saens Safar saffian Safi safid sagamore saghalien sagitta saguache saguenay saguia sagunto Sahaptin Saharan saharanpur sahitya saida saiga sainsbury Saint Saintpaulia saipan Saiva Sakai sakhalin Sakharov saktas sakti Sakyamuni salade saladin salado salamanca salambria salchow salduba salep salet Salford Salian salicaceous salicional Salicornia salicylic saliferous salify salique sallee Sallinen sallust salmanazar Salminen Salol Salonen salonika saloop salop salopette Salpa salpicon Salpiglossis salpingectomy salpingitis salpinx salta saltant saltchuck/R saltfish saltigrade saltillo salto saltpan saltus salvatorian Salvia salween salyut Salzburg salzgitter samarang samaria Samarkand Sambo sambre samekh samfoo Samian samiel samiti samizdat Samnite samnium samos samothrace Samoyed samsara samshu samsun sanctitude Sanctus sandakan sandfly sandgrouse sandhi Sandhurst sandpit Sandringham Sandwich sandwort/S Sanger Sangh sango Sangraal sangre sangria sanies Sanjak sankey Sankhya sankt sanmicheli santalaceous santana santander Santee Sao saorstat sapajou sapanwood sapele saphena sapiential sapindaceous sapir sapotaceous sappanwood sapphira sapporo sapraemia sapropel sapwood saragossa Sarajevo Sarangi Saransk Saratov sarawak sarcocarp sarcous Sard sardar sardegna Sardinian Sardis Sardius Sardou Sargodha Sargon Sark Sarkis sarmatia sarmentose sarnen sarnia saronic saros sarpanch sarpedon Sarracenia sarraceniaceous sarraute sarre sarrusophone Sarsen sarthe sarto sartor sarum sarvodaya Saschowa sasebo sasin sassaby Sassanid sassari Sassenach sassoon sastruga satai satellitium satinflower satinpod satrap satrapy Satsuma Saturnian saturnism satyagraha satyagrahi Sauerbaum saurischian saury saussure sav sava/S savaii savannahs saveloy savoie savoir savona sawbill sawder sawhorse sawn Sawney Saxe saxicolous saxifragaceous saxo saxons sayan sazerac scafell scaldfish scaleboard scalenus scaliger scall scaloppine scammel scandaroon scanderbeg Scandian scandic scansorial scapa scapewheel scaphopod scarabaeus scarcement scarificator scarlatina scarron scattergram scatterplot/S scend Schaerbeek Schaffhausen schappe scheel scheele scheelite Schein scheldt Schenck scherzando schiaparelli schickard Schiedam Schiff schilling Schippers schizogenesis schizophyceous schizopod schizothymia schlegel Schleiermacher Schlesien Schleswig Schliemann schmo schmooze Schnecken Schnitzler schnook schnorkle schnorrer schnozzle schola schongauer schoolie schorl schottische schouten schrodinger schul schwa schwaben schwann Schwarz Schwarzkopf schwarzwald schweinfurt schweiz schwerin schwitters schwyz Sci sciaenid sciamachy scienter scilly Scimone scincoid sciomachy scipio scire scissel scissure sciurine sciuroid sclera sclerenchyma scleritis Scleroderma sclerodermatous scleroid scleroma sclerometer sclerophyll scleroprotein sclerotomy sclerous Scofield scolopendrid scop scopas Scopus scorify scorpaenoid scorper Scorpius Scotism scotopia Scotswoman scotswomen Scotticism Scotto scotus scramb scran scraperboard/S scrapheap/S Scriabin scrimshank scrobiculate scroop scrophulariaceous scrump scrumpy scry scudo scullin scuncheon scunge scungy scunthorpe scut scuta scutage scutate scutch scutcheon scute scutellation scutellum scutiform scyphiform scyphistoma scyphozoan scyphus scyros Scythian Seabee seaborg seacock seakale Sealyham seami seanad Searle seasonality seato Seaton seawan seaworthyness sebacic Sebastopol sebiferous secam secern sech sectoral Secunderabad secundine/S seddon Sedgemoor Seebeck Seeger Seeland seferis seg Seidlitz seif Seifert seisable seise/R seismism seismometer seismoscope selah selangor selectedly Selene selenodont selenomorphology seleucia Seleucid seleucus selfheal Selig Seljuk sellotape selsyn selva semanteme semarang sematology semele sememe semeru semibituminous semibold semicompile semination seminumerical Semipalatinsk semipalmate Semitics semivitreous semivocal sempach sena senarmontite sendai sendal sendoff Senechal senegambia senghor Senlac sennacherib sennar senussi sepaloid Sephardi seppuku septarium septavalent Septembrist septenary septennium septet septicaemia septilateral septime septivalent septuagesima Septuagint septuple septuplet septuplicate seq sequestrant serajevo seram serang Serapis Serb sercq serdab serein seremban serenata sergipe seriema seringa seringapatam serjeant Serkin serotine serpigo serpulid serriform serrulate/N sertorius servetus servia servicewoman servicewomen servient sesotho sesquialtera sesquioxide sestos setiferous setiform sett settable sevan Sevastopol Severnaya Severus sewan sewell Sexagesima sexangular sexcentenary sexennial sexivalent sexpartite sextain sextan sextile seyfert seyhan sfax sforza sfumato sgraffito shaba Shaban shabbat Shabuoth Shackleton shadrach shaduf shadwell shaef shaftesbury shaftsbury shahaptin shahjahanpur Shaka shakhty Shakta Shakti shamash shamba shameface shamo Shang shangaan shango Shankar Shankaracharya shanny shantow sharefarmer/S shareown Sharia sharksucker sharrow Shavian shavuot Shaw Shawwal Shchedrin Shcheglovsk Shcherbakov sheading shearlegs shearling sheba Shechem shechina sheene sheepcote sheepdog sheepwalk sheerlegs Shekinah shellbark shelta shem shema shembe Shemite Shemitic shenyang Sheol sherbrooke sheria Sherpa Sherrington sherwani Shetland shetlands shewbread shewn Shiah shiai shicker/D shihchiachuang Shiism shikoku shillyshally Shimonoseki shinar shinkin shinty shipka shiralee Shiraz shirtsleeve shithead shittah shittim shiva shizuoka Shluh Shoa shockheaded shockstall shoeshine shoetree shofar sholapur Sholokhov Shona shoogle shool shopfloor/S shophar shopsoiled shopwalker shopwork/R shoreless shortlist/DGS shortlived shoshone Shoshonean shote shott shouse showd showerproof showgirl showjumping shrewdie shrewmouse Shrewsbury shrieval Shropshire Shrovetide shufty shufu shuggy Shulamite shushan shuteye shypoo sialkot sialoid siang siangtan sibiu Sicanian sicilia sickbay sickert sickie sicyon Siddhartha siddons sidechain/S sideffect/S sideplate/S siderophilin siderosis siderostat sidesman sidewheel/R sidi sidon sidra siegbahn siegler sieglinde sienkiewicz Sierra sifaka sightscreen sigil sigismund sigla siglos sigmate sigmoidoscope signac signore signorelli sigurd Sihanouk Sika sikang silastic sile siliciferous silicium siliculose siliqua siloam Silures Silurian silurid Silvanus silverpoint silvertail simar Simarouba simaroubaceous Simbirsk simchath Simeon Simferopol simitar simla simoniac simonides simplicidentate simplon simsim simula simulant Sinaloa sinanthropus sinarquist sinatra Sindhi Singhalese singultus sinhailien Sinhalese Sinicism sinistrodextral Sinitic sinn Sinopoli sint Sintow Siouan siple siqueiros Siracusa sirdar siret sisera Sisley sismondi sitar sitcom sitella sitfast sithole Sitka sitology sitsang situla sitwell sitz sitzkrieg sitzmark Sivaism Sivan Siwash sixain sixte Sixtus sjambok skagerrak skara skatepark skatole skaw skean skelf skelly skelmersdale Skelton sken skerrick sket skewwhiff skiamachy skibob skidlid skidpan skidproof skidway Skijoring Skikda skillion skilly Skimmia skiplane skippet Skipton skirret skite Skokiaan Skolly Skrowaczewski Skua skylab skyscape slade slaister slapshot Slatkin slaughterman slaughtermen Slavism Slavkov Slavonia Slavophile/S slavs sleave sleezy Slesvig slezsko slickenside sligo slimmed slingback slipnoose slipperwort slipsheet slipway sloot Slovak Slovene slowcoach slowworm slubberdegullion slype smallage smallboy smallclothes smallholding smallmouth smallsword smaltite smalto smaragd smaragdite smarm smarmy smatch Smeaton Smetana smew smilacaceous Smilax Smirnov smit smokeho smokejack smoko Smolensk Smollett smoodge smriti snackette SNCC sned snib snicket snipefish SNOBOL snog snorri snowberry snowbird snowblink snowdon snowdonia snuck snye soakaway soapberry soapolallie soares sobeit Sobranje soche Socinian socinus sociobiology socman socred sodamide soddy Soderblom Soderstrom Sodom soekarno soemba soembawa soenda soerabaja sofar Soffel softa sogat Sogdian sogdiana soh soho soilage soissons sokoto sokotra solan solander solarimeter solarism soldo Solenodon solent soleure solfeggio solferino soli solidary solifidian solihull soliman sollicker solonchak solothurn Solti solum Solutrean solvay solway solyman Solzhenitsyn Somaliland somewise somme somniloquy somnus sondage Sondheim Songhai songkok soniferous sonobuoy soo soochow sook soong sophistocated sorata sorbefacient Sorbian sorbic sorbitol Sorbonne Sordello soredium sorn sorocaba sororicide sorosis sorrento sosnowiec Sothic Sothis Sotho sotto soudan soult soundpost soupfin Souphanourong sourdine Souslik Sousse Souterrain Southdown Southern southmost Southport Southron Southwark soutine Sovetsk Soviet Soweto Soyinka Soyuz sozzled Spaak spacewalk spadefish spadiceous spagyric spalato spalpeen spancel sparable sparce sparerib sparid sparoid sparrowhawk sparry Spartacus Spassky spatchcock spatterdash spearwort spectrobolometer speedo speedwriting Speenhamland speight spelaean spelk spellican Spenborough Spence Spengler Spenser Spenserian speos spermatorrhoea spermic spermine spermogonium spermophyte spermous spey/R sphenic sphenogram spheroidicity sphingomyelin sphragistics sphygmic sphygmoid spiderman spif spiffing spiflicate spignel spina spindlelegs spiniferous spinose Spinoza Spinozism spiritus spirketting spiroid spironolactone spitchcock spithead Spitsbergen spitsticker spiv Spivakov splake splanchnic splashback/S splenitis splodge spock spode spoilfive spondulix spongin spongioblast sponsion spoonbill sporades sporocyte sporran sportscast sportswrite sporule sprag Spratly sprechgesang sprechstimme Springhaas springhalt springhead springhouse springlet springvale spruik spue spuggy spumescent squacco squalane squarrose squattocracy squeteague squireen squirrelfish squit squiz Srbija srinagar stableboy stabroek stackframe stacte staddlestone Stade stadholder stadiometer staffa staffman stagflation staggard stagira Stagirite staines stairhead Stakhanovism Stalinabad Stalingrad Stalinism Stalinogrod Stalinsk stambul staminode standalone standfast stane Stanislavsky Stanleyville stanniferous stannite stannum stanovoi stans staphyloplasty staphylorrhaphy stara starflower Starker startc starwort statius stauroscope Stavanger Stavropol staysail steakhouse steamie steamtight stearoptene steatorrhoea Steber stecher stedfast Stefansson Stegodon Stegomyia Stegosaurus Steier Steiermark Stein Steinbeck Steinitz stellarator stelliferous Stellite stellular stemhead stendhal stenopetalous stenophyllous stenotropic stepdame stercoricolous sterculiaceous stereochrome stereochromy stereometry stereotaxis stereotomy stereovision sterlitamak Stern sterne stevenage stevengraph steyr sthenic stheno stibium stich stichometry stickybeak Stijl stilicho stillage stillicide stilliform Stillson/S Stilton Stilwell stingo stinko stitchwort stiver stoa stob stockfish Stockhausen stockjobber Stockport Stockwood Stokowski Stokys STOL stomack stomatic stomatoplasty stoneboat stonecast stonechat stonefish stonefly stoneground stonk stonkered stook stoppard storeyed storiated stormproof stornoway storr/S Storting stoss stot stotinka stotious stotter stound stoup stour Stourbridge stoush strabo strabotomy strachey Stradivari Stradivarius Strafford Stralsund strandloper Stranraer Stratas strategem/S Strathclyde stratificational stratigraphical/Y stratopause Straus Stravaig strawworm streamy streetlight Streisand Strelitzia strepitous stretchy Stretford Streusel striction strigiform strimon strine strobic strobilaceous stroganoff Stroheim strokefinder stromboli strongman strongyle strontian Strophanthus stroppy stroy strychnic Strymon Stu stubbs studdingsail studwork sty Stylops stylostixis stypsis styracaceous styria suakin subacetate subah subangular subapostolic subaqua subarid subassemblage/S subastral subauricular subaxillary subbass subcalibre subcartilaginous subception subchannels subcluster/S subdelirium subduct subelement/S subepidermis subequatorial suberic suberin suberose subfloor subfusc subinstance/S subjectify sublanguage/S sublapsarianism submental subordinary subordinationism subotica subpanel/S subparameter/S subprocessor subscan/S subscapular subsocial subsolar substantialism substomatal subtangent subternatural subtorrid subtreasury subufd/S suburbicarian subvene subzero succentor succeptibility successsive succinic succoth succursal succuss suckerfish sudarium sudbury sudd Sudetenland sudetes sudor Sudra suetonius sufferage suffiency sufflate suffruticose suffumigate Sufi Sufism sufu suggestibly suharto suisse sukarnapura sukhumi sukkoth suleiman sulla Sultanabad Sulu Sumba Sumbawa Summers summerweight Sumo sump sumpter sumy sunbake Sunderland sundog sundress/S sundsvall sungari sungkiang sunglow sungrebe sunhat Sunni Sunnite sunray sunstar suntrap suo Suomi superaltar superbazaar supercede/DS supercolumnar superconduction supercurrent superdense supererogate superfemale superfuse superglacial superhero superhet superhigh superhumeral superlanguage superload supermale supermodel/S supermundane supernational superorganic superoxide supersex superstruct suplex supralapsarian suprematism supremo suqutra sur sura surakarta sural surat surculose surd surfbird/S surfcasting surfie surgeoncy surgeonfish suribachi suricate Surinam Suriname surrebuttal sursum susa susah Susanna suseptible Susian suslik suss susso Susu susurrate Sutcliffe sutlej sutler suva Suvorov Suwannee Svalbard Sverdlovsk sverige Svetlanov svizzera Swabia swacked Swadeshi swanage Swanee swaraj sward swarf Swatow Swazi Swedenborg Swedenborgianism sweelinck Sweeny sweetiewife sweetman sweetmeal sweptback sweptwing sweven sweyn swiftie swiftlet swindon swinepox swingboat swingle swingometer/S switchgirl Swithin swob swordbill swordcraft swordsmen swordstick/S swound/S swy sybaris sydneysider syene syktyvkar syllabism syllabogram syllabography sylva Sylvan sylvanus Symons sympathectomy symphile sympodium symposiac synarchy syncarp synchrocyclotron synchrometer synclastic synclinorium syncom syncrisis syndactyl synecious synovia syntagma synthetism sypher syphiloma syr Syriac Syrtis syssarcosis systematology sytactic syzran Szabadka Szczecin Szechwan Szeged Szell Szerying Szeryng Szewinska Szombathely Szymanowski taata tabaret Tabasco tabescent Tabriz Tacamahac Tacchino Tachina tachograph tachylyte tachymetry tachyphylaxis tacket tacmahack tadmor Tadzhiki taegu taejon tael taenia taeniafuge taffrail tafia tafilelt Tagalog taganrog taggers tagliatelle tagmeme tagmemics tagore tagus tahina tahr tahsil tahsildar Tai Taichung taig tailpipe tailplane tailskid tailstock taimyr tain Tainan taine Taino Taiping Taisho taiyuan taj Tajik tajo taka takahe takamatsu takao takeaway takin takoradi Talaing talapoin talaria talavera talbot talca talcahuano taliesin taligrade taliped tallinn tallis Talmudist talos taluk Talvela talweg tamasha tamatave tamaulipas tambac tambora Tambov tamburlaine Tamerlane tamis tammerfors tammuz tammy tampere tampico Tamworth tana Tanagra tanana tancred tandjungpriok tandoori tanga tangleberry tangshan tanguy tanis tanist tanjore Tanjungpriok Tannenberg tanta tantalous tanto tantrism tapadera tapemark/S taphouse tarabulus taradiddle taramasalata tarantass tarantella taranto tarawa tarbes Tardenoisian tarentum Targum tarim Tarkington tarnal tarnation tarnishs Tarnopol tarpan Tarpeia Tarpeian Tarquin tarradiddle tarragona tarrasa tarshish tarsia/I tarsometatarsus Tartarean Tartaric tartarous Tartarus tartu tashi tashkent tasimeter tasman Tasmanian tasset tassie tassle Tatar Tatary tatchell tati tatouay tatra Tatum Taunton taupo tauranga tauromachy tav tavel tawney taxaceous taxiplane/S Tay Taymyr Tayra Tayside Tbilisi Tchad teacake Teal Tear teashop Tebaldi Technicolor Technion technocommercial technography tectorial tecumseh tedder teesside teet tef teg tegular tehuantepec teide teilhard tejo Tel tela telanaipura telautograph telecom telecomunications telega telegenic telegnosis telegonus Telegu telemachus Telescopium telescopy telescript telespectroscope telestereoscope telestich teletext teletranscription teletube teletypesetter televideo telewriter telexed telexes telexing telfer telferage Telford tellurate tellurion tellus telpherage Telstar Telugu Tema Temne Tempe Templar temuco tenaille Tenebrae tenedos Tenerife teng tengri teniafuge teniers tenner tenniel tenno Tennstedt tenorite tenorrhaphy tenotomy tensible tentation Tenzi tenzing tepal tepefy tephrite tepic teratism teratoid terbia terceira Terence terephthalic tereshkova Teresina Tereus terminosity termor terne/N terni Ternopol terotechnology Terrani terrestial terrine territorian tertial tertium tertullian teruel terylene terza terzetto tesla tesseract tessin testiculate testudinal Tethys Teton tetrabrach tetrabutylammonium tetrachlorethylene tetracyclic tetragram tetraphenyl tetraplegia tetrapody tetrapterous tetrastich tetrastichous tetrasyllable tetrazzini tetroxide tetzel Teucer Teucrian teutoburger Teuton Teutonism tevere tevet Tewkesbury textualism teyde tezel thackeray thaddeus thadentsonyane thales thalweg thammuz thanatopsis Thanatos thanet thanjavur thapsus thatcherism thaumatology thaumatrope theaceous theanthropism thearchy Thebaid thebaine thegn theine Themis themistocles thenardite theocrasy theocritus Theodora theodorakis Theodoric theomachy theomancy theomania theomorphic theopathy theophagy Theophilus theophobia theophrastus theorbo theravada therezina therfore therianthropic thermaesthesia Thermit thermobarograph thermobarometer thermoelectricity thermogenesis thermomotor thermophysical thermoregularity thermostatical thermotensile thermotherapy theroid theropod Thersites thersitical thesauri thespis Thetford thickleaf thimblewit thingumabob thioalcohol thiofuran thionine thionyl thiopentone thiophen thiosinamine thirdstream thirlage thirlmere thisbe tholos Thomism thonburi thoracoplasty thornbill Thorndike thoron thoroughpaced thorp thorshavn Thorvaldsen thrave threadneedle threadworm threap throatlash thrombogen thrombose Thucydides Thuja thumbnut thumbstall thummim thun/R thunderbox thundery Thurgau Thuringia Thuringian Thurn thuya Thyestes thymelaeaceous thyristor tia tiberias Tiberius tibesti tibiotarsus tibullus tibur ticino tiddler tiddly tidewaiter tiebreaker tiepolo tierra tiffin tiflis tightknit tiglic tigrinya tihwa tikoloshe Tilburg Tilbury tiliaceous tillicum Tilsit timaru timberyard timbuktu timecard timescale/S timeslice/S Timor Timoshenko Timour tindal tineid tinpot Tintagel tintinnabulum tipcat Tippett tiptop tipu tiran tiresias tirich tiro/S Tirol tirpitz tirso Tiruchirapalli Tirunelveli Tisa Tishab Tisiphone tisza Titanesque titanite Titanomachy titanosaur titanothere titfer tithonus titicaca titman Titograd Titoism titubation tiu tiv Tivoli Tjirebon TKO Tlaxcala Tlemcen Tlingit Tmesis toadeater/MS toadfish/MS toadflax toadstone/MS Tobey tobit tobol Tobolsk Tobruk tocantins Tocharian tocology Tocqueville toea toecap toey Togliatti Togoland toheroa Tojo Tokay Tokelau Tokharian Tokoloshe Tokugawa Tolan Tolbert Tolima Tolkien Toller Tolly tolpuddle Toltec Toluca toluyl tolylphosphine tomalley toman tombola tombouctou Tome tomograph Tomowa Tomsk Tonbridge Tonga Tonka Tonkin tonle tonsillotomy toowoomba toparch topazolite Tophet topotype topspin torbay torc torchier toric torii torino torose torquay torquemada torre/S torrefy torricelli Torricellian torsibility Torsk tortelier tortellini tortile tortola tortuga Torvalds toscana toscanini toul toulon touraine tourane tourcoing Tourel touristy tournai tourneur toussaint touzle towbar towkay townhall townscape townshend Townsville toxaemia toxalbumin toyama TP trabzon tracasserie tracheostomy Traci/M tracksuit Tractarianism tractile trad tradeability traditor traducianism trafalgar traherne trailblaze trajan tralee trammie tranformed tranmission tranmitted trannie transcalent Transcaucasia transculturation transcurrent transformism transgranular transilient transkei transliterator translunar transmigrant transmittancy transmundane transpadane transpassive transpond transportaion transput/RZ transshipped Transylvanian tranverse trapan trapani trapes trapeziform trappean Trappist trasimene travancore traymobile trebizond Treblinka treen treename/S treenware tref trehala treitschke trengganu Trent trente trento tressure tret trevally Trevino Treviso trevithick triac triazole tribade triblet tribromoethanol tricarbonyl tricentenary trichinopoly trichloro trichloroethanol trichloroethylene trichology trichosis trichroism tricktrack tricostate tricritical tricriticality tricrotic tricyclohexyl tridactyl tridentate Tridentine tridentum triecious trieste trifold trihedron trihydrate trihydric triiodomethane trike trilateration trilemma trilithon trimethadione trimetric trimolecular trimurti trinacria trincomalee Trinil trinitrobenzene trinitrocresol trinitroglycerin trinitrophenol trioecious triolein tripalmitin tripersonal triphenyl Tripitaka tripody tripolitania tripterous triptolemus triptyque tripura tripwire triserial triskaidekaphobia trismegistus tristich tristichous tritanopia tritiate Triticum triunitarian trivandrum troas troat trobriand trocar trochelminth trode trog troilism troilus trois trollope tromba Tromelin Trondheim tropaeolin trophoplasm tropicbird tropine tropophyte troppo tropylium trossachs trotskyist trotyl troubador trouse Trowbridge Troyanos troyes trucial truckie trudgen Truffaut trug/S truk trumeau Truro tryma tryptophanyl tsade tsana tsarevitch tsarevna tsaritsyn tselinograd tshiluba tshombe tsinan tsinghai tsingtao tsingyuan tso tsonga tsotsi tsugaru tsukahara tsushima tsutsugamushi tswana Tuamotu Tuareg tuart tuatara tubate tubman tubuai tubuliflorous Tucana Tucker Tuckwell tucotuco tugela tugrik tuileries tula tularaemia tull tully tumblehome tumefacient tumefy tumular tumulose Tunbridge tungstous tungting Tungus Tungusic tunguska tunnage tupamaro Tupi tuppenny tupungato turaco Turanian turbary turbogenerator Turco turdine turenne turgenev turgent turgite turgot turishcheva turkestan Turkey Turki Turkic Turkism Turkmen Turkoman Turks turku turncock turnround turpeth turpin tusculum tussaud tussis tutankhamen tutiorism tutsan tutsi tutty tutuila tuva Tuvalu tuxtla tver twat twattle twayblade twee tweeddale tweedledum tweedsmuir tweeny Twelfthtide twelvemo Twi Twickenham twite TWP Tyche tychism tycho tye tylopod tylosis tympanitis tyndall tyndareus tynemouth tyneside Tynwald typebar typhlitis typhlology typhoeus typhogenic typhoidin typothetae tyr Tyrian Tyrol Tyrolienne Tyrone Tyrr Tyrrhenian tyumen tzekung tzetze Ubangi ubbelohde ubiety Ubiquitarian ucayali ucca uccello udaipur udal Ude udine udmurt udo udometer uele ufa ufd ufo ufology ugali ugaritic ugli Ugrian Ugric UHF uhlan Uhland Uhuru Uigur Uinta uintathere Uitlander Ujamaa Ujiji Ujjain Ujung Ukase Ukiyoe Ulbricht ulfilas Ullswater Ulm ulmaceous ulpian Ulsterman ultramicrometer/S ultramicroscopic ultramundane ultrared ultrathin ultravirus ultrawet Ulyanovsk umayyad umbellule umberto umbles umbo umbria Umbrian Umbriel umiak umpy umrcc umtali unaesthetic Unalaska unallocateed unamuno unaneled unaskable unassign unban unbelt unbirthday unbonnet unchurch unclad unco uncodeable unconservative uncontroversial undated undefine underachieve underbuy undercart underclay undercroft underdevelop underemphasis underfelt underfilled underfloor underfur undergrown underhung underletting underlinen undermentioned undernourish underpainting underpay underpinned underpitch/DGS underprice/DGS underprop underquote underseal underset undersheriff undersmooth/DGS underspent understaff underthrust undertint undertrump undertype undialectical undirectional undro undset unexcited unforced ungaretti ungava unguiculate unguinous unguis ungula unguligrade uni Uniat unibus unicef unicolour unicostate unidirection uniformally unilateralist/S uniliteral unimak unimodular uninfluential uninterruptable Union/A unipersonal unipod uniseptate uniserial United uniterm unlead unlettable unmodeled unmusical unpaddable unpolitic unprepossessing unreactive unreckonable unreligious unrepair unrwa unskilful unspecifed unspecify unsteel unsuggestive unsupportive unterwalden untravelled untypical unwarrant upanishad upcountry uphroe upolu upperbound/S uppsala uprouse upsadaisy upsala upstand upstretched upswell upto Ural Uralic uranalysis Uranian uranism uranite Uredo uredosorus uredospore uretic urey urfa urga Uriah Uriel urim urinant uriniferous Urmston Urnfield urogenous uroscopy urquhart urticaceous uruapan urumchi urundi username ushant ushas usnach uspallata usquebaugh ussher ussuri ustashi Ustinov ustulation ustyurt usumbura utamaro utgard uther utriculitis utrillo uttar uvedale uvulitis Uxbridge uxmal Uzbek Vaal Vaasa VAC vacherin vadodara vadose VAG vagal vaginate vaginectomy vaginismus vaginitis vagotonia vagus vahana Vaishnava vaisya valais valdai valdemar valdivia Valenciennes valency/S valens Valentinian valera valerianaceous valeric valeta valetta valgus Valjakka valladolid vallation vallecula vallombrosa valona valonia valuta valvate valvule valvulitis vambrace vanadate vanadic vanadinite vanadous vanaspati vanbrugh Vanda Vandyke vang Vanir vansittart vanua Vanuatu vanzetti vaporescence vaporetto vaporific vaporimeter vara varactor Varady varanasi Varangian vardar vardon varec varese Varga vargas varia variablity varicella varicellate varicelloid varicocele varicosis varicotomy variola variolate variole variolite variscite varityper varna varro Varuna vas vasari vasco Vaseline vashti vasoinhibitor vasoregulatory Vaticanism vaticide vauban vaucluse vaud vav vavasor VDU Veasy Veblen Vedalia Vedanta Vedda Veddoid Vedernikov vedette Vedic veg vegan veii veinstone veinule vela velate velcro veldskoen veleta veliger velites vellicate vellore Velsen vena Venda venenose venepuncture Veneti Venetia Venetic Venezia Venizelos venlo Venora venose venosity ventris Venusberg Veracruz verbenaceous vercelli vercingetorix verderer verdun verecund vereeniging vergeboard verglas verkrampte verlaine verligte vermeer vermination vermis vermivorous Vernoleninsk verny Veronal Veronese verrazano Verrett verrocchio verruca verrucae verrucose versabraille versant versatec verst vert verticillaster verticillate vertu Vertumnus verulamium vervain vervet verwoerd vesalius vespasian vespertilionine vespucci vesuvius vetiver viareggio viator vibraculum vibronic vicenary vicenza vico vicomte victoriana videlicet videotex vidhan vienne Vierne Vietcong Vietminh viewport/MS viewscan vignola vigny vigo Vihuela Viipuri Vijayawada Vilayet Villach Villahermosa Villainage Villanovan Villars Villeneuve Villeurbanne Villiers Villon villous Vilnius Viminal vimineous vina vinasse Vincennes Vindhya vinegarette Vineland vinificator Vinland vinnitsa violone Virchow viren virial virtu Visakhapatnam Visayan Visby viscoid Visconti Viseu Vishakhapatnam Vishinsky vistula vitaceous vitaphone vitascope Vitebsk vitoria vitrain vitrescence vitrescent vitric vitriform vitruvius vitta vittle vituline viverrine viyella Vizagapatam Vizcacha Vizsla Vlaardingen Vlach Vladikavkaz Vlaminck Vlei VLF Vlissingen Vltava vocate Voetsek Voetstoots Vogelweide Vogul voidage voiotia voir voix vojvodina Volans Volapuk Volga Volgograd volitant vologda volost Volsci Volscian volsung volsunga voltaism voltammeter volturno volvulus vomer Von voortrekker Vorarlberg Voronezh Voroshilov Voroshilovgrad Voroshilovsk vorster Vortumnus vosges vostok Votyak vouge Vouvray vox Vries VTOL Vuelta vuillard Vulcanite vulgaris Vulpecula vulvovaginitis Vyatka vyborg Vyshinsky Vyvyan WAAC WAAF Waart wabble/DGS wace wadai Waddenzee Waddington wadmal wadset wagram wagtail Wahhabi Waikato Waikiki waistcloth Wajda Wakashan Wakayama Wakerife Waksman Walach Walachia Walbrzych Walcheren Waldemar Waldenburg Waldgrave Waldheim Waley walfish walhalla walkable walkley Wallachia wallah wallasey Walloon Wallsend Walpurgis Walsall Walsingham Walther Walvis wame Wand wanderoo wandoo Wandsworth wanganui wanhsien wank wankel wankie wanna Wapentake Wappenshaw Waragi Warangal waratah Warbeck Ward wardian wardle wardmote Warfarin Warhol warhorse/S Warison Warley Warren warrigal Warrington warsle warta Wartburg Warwickshire Wasatch washaway washday/S washerwomen washery washin washwomen wassermann wasteweir watap watchstrap waterage waterbrain waterbuck Waterford waterspout watertower Watford Watling Watteau Wattenscheid wattlebird Watts Watusi Waugh waul waveband/S wavefunction/S wavellite wavemeter waveoff waw wawa wawl waxberry waxbill waxplant Wayland wayzgoose waziristan weakfish weald weaponeer wearproof weasand weaverbird webbs Webern webwheel weddell wedekind wedeling Wedgwood weedkiller weelkes ween weeny Weigela weighbridge/S weightlifter weightlifting weihai Weikert Weikl Weill Weimar Weismannism Weisshorn Weizmann weka welkom welland wellesz wellies Wellingborough Wellingtonia Welsbach Welshman welterweight Welwitschia welwyn Wembley Wenceslaus Wendish Wenkel Wensleydale wentletrap wernerite wersh weser wesker wessex Westernism Westfalen Westmeath Westmorland westmost Wetterhorn Wexford Weymouth whacko whangarei whare wharfie wharve whatsit whaup wheatworm whereafter wherrit wheyface whidah Whikehart whimbrel whin whinchat whinge whipstall whipworm whirlabout whitby White whitebeam Whiteboy Whitechapel whitedamp Whitefield whitefly whitethorn whitewood Whitlam Whitley Whitlow Whitsun Whitsuntide Whittington wholefood wholemeal wholism whortleberry whyalla whydah Wickersley wicketkeeper/S wicketkeeping Wickliffe Wicklow wickthing wicopy widdershins widgery widgie widnes Widor widukind wien Wiesbaden Wigner Wigtown Wijngaarden wikiup Wilberforce wilde wilhelmshaven wilhelmstrasse Willcocks willemstad willowherb wilmslow wilno Wilton Wimbledon Wimshurst wincey Winceyette Winchesters Winckelmann windbound windcheater/S windchill windermere windflower windgall windhoek windhover windlestraw windrow windsail windsock winebibber winkelried winnipegosis winterfeed winterthur winterweight wipo wirepuller wiretapping wirewalker wirra wirral wis Wiseman wishlist/S wislany wismar wist witan witchetty wite witenagemot withershins Wittenberg wittol Witwatersrand wivern Wixell woad/D woadwaxen woald Wobbegong Wodehouse Woden wodge/S wog woggle Woking Wokingham wold Wolds wolfbane wolfenden Wolffian wolffish wolfit Wolfram wolframite wolfsbane Wolfsburg wollastonite Wollongong wolly Wolof wolsey wolve/R Wolverhampton womera wonsan woodborer woodcarving woodchat woodgrouse woodhook woodlark woodlouse woodrush woodscrew woodseats Woodsia woodwaxen woodworm Woolf woolfell woolgrower Woomera woop woorali workaday workbag workfile/S workmate/S workperson workshy worksop wormcast wormseed wormwood worsley wot Wotton Woulfe Wraac wran wrapover wrapround wreckfish wreckful wrekin Wrexham wroclaw wrongdo/Z wroth wrybill wryneck wuchang wuhsien wuhu wulfenite wulfila Wunderlich wundt wuppertal wurley wurst wus wusih wuthering wutsin wycherley wycliffe Wycliffite wye Wykeham wynd wyvern xanthein xanthippe xanthochroid xanthochroism xanthoma xanthophyll xanthous xanthus xci xcii xciv xcix xcvi xcvii xenakis xenocrates xenocryst xenogamy xenogenesis xenoglossia xenolith xenomorphic xenophanes xenophon Xeres xeroderma xeromorphic xerophthalmia xerophyte xerosere xerosis xhosa xiphisternum xiphoid xiphosuran Xmas xuthus xxi xxii xxiii xxiv xxix xxv xxvi xxvii xxviii xxx xxxi xxxii xxxiii xxxiv xxxix xxxv xxxvi xxxvii xxxviii xylan xylidine xylocarp xylograph xylography xyloid xylol xylophagous xylyl xyst/R yabber yabby Yablonovy yaffle yafo yagi yahata Yahoo Yahweh Yakut Yakutsk Yalu yamagata yamani yamashita yammer Yangtze yanina Yankeeism yapok yapon Yarborough Yarkand Yaroslavl yarwood Yashmak yataghan yate yauld yaunde yaup yaupon yautia yawata yawp yazd yean yeanling yegg Yekaterinburg Yekaterinodar Yekaterinoslav yeld Yelisavetgrad Yelisavetpol Yelizaveta yelk yellowbark yellowbird yellowhammer yellowlegs yellowtail yellowweed yellowwood yenan Yenisei yentai Yerba yerevan Yerkes yestreen yeti Yevtushenko yezd ygerne Yid yike yingkow yippee yirr ylem ymir yob yod yodle yogh yohimbine yoicks yokefellow yola yom yoni yonne yonnie Yorke Yorkist/S Yoruba Yoshihito Youngberry Younker Ypres Yquem Yresko Ysaye Yser Yseult Yssel ytterbia ytterbite yttria yttriferous Yuga yuk Yukawa yulan Yuman Yurev Yurlov yurt Yuzovka yvelines ywis Zaandam Zabrze Zacatecas Zaccaria Zacharias zacynthus zaffer zagazig zagreus zagros Zaibatsu Zakai Zakuski zama Zambezi Zamboanga Zamenhof Zamia zamindar zamindari zamora Zanasi zante Zanthoxylum zanu zapata zaporozhye Zapotec zappa zapu zaqaziq zaragoza zarathustra zaratite zareba zarf zarga zaria zarzuela zastruga zayin zeami zebec zebedee zebrawood zebu zebulun zecchino zechariah zed zedekiah zedoary zee Zeebrugge Zeeland Zeeman zein zeist zemindar Zemstvo zenana Zend zener Zenobia zephaniah zephyrus Zepperitz Zermatt Zetland zeugma zeuxis Zhdanov Zhitomir Zhivkov Zho Zhukov zia ziaur zibeline zibet ziff ziggurat zigzagger zila zilpah Zimbabwe zinciferous zincite zinckenite zincograph zincography Zindabad zingiberaceous zinjanthropus zinkenite Zinman Zinovievsk Zinzendorf zipangu zircalloy ziska zlatoust Zoa zoaea zoan zoea zoffany zohar zola zond zonk/GS zonule zoochemistry zoochore zoogloea zoography zooid zoolatry zoometry zoomorphism zoophile zoophilia zoophilism zoophobia zooplasty zoosperm zoosporangium zootomy zootoxin/S zorilla Zoroastrianism zorrilla zoster Zouave zoug Zoysia zsigmondy zucchetto zugzwang Zuider Zuidholland/M Zukerman/M Zwilich/M ispell-3.4.00/languages/english/PaxHeaders.19408/british.10000644000000000000000000000013212465612625017766 xustar0030 mtime=1423381909.170186241 30 atime=1423469128.799383196 30 ctime=1423469128.799383196 ispell-3.4.00/languages/english/british.10000444003214100001440000001160012465612625021031 0ustar00geofffaculty00000000000000acclimatise/GRSZ acclimatises/A actualise/DGS actualises/A aesthete/S aggrandisement/MS americanised amortisation/MSU animised annualised anonymisation/M arsehole/MS Balkanisation/MS biosynthesised bureaucratisation/MS caesium calliper/S cancellate/D canonised/U cauterise/DGS caviller/S centreline/S Christianising civilisational/MS cognisable commercialisation/MS communise/DGS computerisation conditionalise/DGS conventionalised criminalise/DGS crystallisation/AMS decentralising deemphasise/DGRSZ deglycerolised dehumanise/DGS demineralisation/MS democratisation/MS democratise/DGRS democratises/U demonise/DGS demoralisation/MS demythologisation demythologise/DGRS depersonalisation/MS depersonalised deputised destabilise/DGS destigmatisation desynchronise/DGS detribalise/DGS diagonalisable dialysed/U diarrhoea/MS diarrhoeal dichotomisation digitalisation/MS digitisation dioptre/MS discoloured/MPS discoloureds/U discolours disfavour/DGRSZ disfavourer/MS dishevelled dislodgement disorganisation/MS disulphide dowelling downdraught dramatisation/MS dramatise/DGRSZ draughtsperson draughty/PRY duellist/S dynamised emphasise/ADGRSZ energised/U energises enthral/S epicentre/MS eulogise/DGRSZ Europeanisation/MS Europeanised exorcise/DGS extemporise/DGRSZ externalisation/MS favouritism/MS federalise/DGS fibreboard foetid/PY foetus/MS fossilised/U fraternise/DGRSZ galvanisation/AMS galvanise/DGRSZ galvanises/A generalisable/MS germanised gimballed glottalisation glycerolised gruelling/Y gynaecological/MS gynaecologist/MS harmonisation/MS homoeomorph homoeopath homogenisation/MS homogenise/DGRSZ honouree/MS hospitalisation/MS humanise/DGRSZ humanises/AI hydrolysed/U hypnotise/DGRSZ hypnotiser/MS hypnotises/U hypophysectomised idolise/DGRSZ immobilise/DGRS immortalised/U immunisation/MS impersonalised industrialised/U industrialising institutionalisation/MS internationalisation/MS internationalised ionise/DGJNRSXZ kinaesthesis kinaesthetic/S kinaesthetically lacklustre learnt/U legitimise/DGRS libeller/S libellous/Y liberalisation/MS lionise/DGRSZ lodgement magnetised/U manoeuvrability manoeuvrable marbleised marbleising maximisation/MS mazourka/MS mediaevalist/MS memorialised/U mesmerised/U metabolised metropolitanisation milligramme/MS millilitre/MS mineralised/U misbehaviour/MS mischaracterisation/MS mischaracterise/DGS misdemeanour/MS misrouteing mobilisation/AMS mobilise/DGRS mobilises/A modernisation/MS monetisation/A monetise/ADGS monopolisation/MS monopolise/DGRSZ monopolised/U monopolises/U multicolour/DMS narcotises nasalisation/MS nasalised naturalised/U neutralisation/MS nominalised novelised ochre/MS oedema/MS oedematous operationalisation/S operationalise/D orthogonalisation orthogonalised orthopaedic/S ostracised outmanoeuvre/DGS overemphasise/DGRSZ packetisation packetise/DGRSZ packetiser/MS palatalisation palatalise/DGS palletised panelisation panelised parenthesise/GS particularise/DGS pasteurisation/S pedalled pedalling peptising plagiarise/DGRSZ platinise/DGS ploughshare/MS polarise/DGRSZ politicised polymerisations prioritisation/M proletarianisation proletarianised pronominalisation pronominalise pummelled pyorrhoea/MS pyrolyse/MRS radiopasteurisation radiosterilisation radiosterilised rancour/MS randomisation/MS rationalisation/MS realisability/MS reconceptualisation recrystallise/G regularising reharmonisation repopularise revitalisation revitalise/DGRSZ ritualised romanticise/GS rubberised sanitisation/M Sanskritise satirise/DGRSZ satirises/U scandalised/U scandalising sectionalised secularisation/MS secularised/U sensationalise/DGS sensitised/U sentimentalise/DGRSZ sentimentalises/U serialisability/M serialisable sexualised signalises snivelled sniveller/S snivelling/S socialisation/MS stabilisation/MS stigmatisation/MS stigmatised/U stylisation/MS subcategorising subsidisation/MS substerilisation suburbanisation/MS suburbanised suburbanising sulphaquinoxaline sulphide sulphite sulphonamide/S sulphurous/PY swivelled swivelling synergise/DGS systematisation/MS systemisation/MS teaselled teaselling teetotaller temporise/DGJRSZ temporiser/MS temporising/MSY temporisings/U theatregoer/MS theatregoing tinselled tinselling traditionalised travelogue/MS trialisation triangularisation/S tricolour/DMS tyrannise/DGJRSZ tyrannising/MSY uncauterised/MS underutilisation underutilised undialysed/MS undramatised/MS unenergised/MS uneulogised/MS unfossilised/MS unfraternising/MS unhydrolysed/MS unidolised/MS unindustrialised/MS unitised universalise/DGRSZ unmagnetised/MS unmemorialised/MS unmineralised/MS unmobilised/MS unpolarised/MS unpreemphasised unsavoury/MPS unstigmatised/MS untrammelled unvocalised/MS unvulcanised/MS updraught/MS urbanisation/MS urbanised vacuolisation/MS vaporisation/AMS varicoloured/MS velarise/DGS virtualisation/M virtualise/DGS visualisation/AMS vocalisation/MS vocalise/DGRSZ volatilisation/MS vulcanised/U waggoneer watercolour/DGMS watercolourist/S yodelled yodeller yodelling ispell-3.4.00/languages/PaxHeaders.19408/portugues0000644000000000000000000000013212466065110016557 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/portugues/0000755003214100001440000000000012466065110017703 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/portugues/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133020301 xustar0030 mtime=1423386715.389463091 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/languages/portugues/Makefile0000444003214100001440000001176612465624133021361 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.5 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1995, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.5 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.4 2005-04-14 06:27:40-07 geoff # Update license. Allow LIBDIR to be relative. Be sure to get copies # of buildhash and fix8bit from the source tree. Drop unsq. # # Revision 1.3.1.1 2002/06/21 00:36:07 geoff # Edward Avis's changes # # Revision 1.3 2001/10/08 12:09:46 epa98 # Purge all traces of 'sq' and 'unsq'. (Apart from the log entries :-)) # # Revision 1.2 2001/10/05 14:22:30 epa98 # Imported 3.2.06.epa1 release. This was previously developed using # sporadic RCS for certain files, but I'm not really bothered about # rolling back beyond this release. # # Revision 1.3 2001/07/25 21:51:48 geoff # *** empty log message *** # # Revision 1.2 2001/07/23 20:43:38 geoff # *** empty log message *** # # Revision 1.1 1995/04/21 04:40:06 geoff # Initial revision # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = portugues DICTIONARY = $(LANGUAGE).words HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) munchlist -v -l $(AFFIXES) $(DICTIONARY) > $(LANGUAGE).words+ $(BUILDHASH) $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) build: $(BUILDHASH) -s $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/languages/PaxHeaders.19408/espanol0000644000000000000000000000013212466065110016163 xustar0030 mtime=1423469128.800383201 30 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/espanol/0000755003214100001440000000000012466065110017307 5ustar00geofffaculty00000000000000ispell-3.4.00/languages/espanol/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624133017705 xustar0030 mtime=1423386715.375462996 30 atime=1423469128.800383201 30 ctime=1423469128.800383201 ispell-3.4.00/languages/espanol/Makefile0000444003214100001440000001114212465624133020751 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.5 2015-02-08 01:11:55-08 geoff Exp $ # # Copyright 1993, 2001, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This makefile is an example of how you might write a makefile for a # simple language which has only a single dictionary available. For # an example of a complex makefile, look at the makefile for English. # # $Log: Makefile,v $ # Revision 1.5 2015-02-08 01:11:55-08 geoff # Support DESTDIR. # # Revision 1.4 2005-04-14 06:27:40-07 geoff # Update license. Allow LIBDIR to be relative. Be sure to get copies # of buildhash and fix8bit from the source tree. Drop unsq. # # Revision 1.6 1994/02/07 06:07:57 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.5 1994/01/25 07:12:44 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # SHELL = /bin/sh MAKE = make CONFIG = ../../config.sh PATHADDER = ../.. BUILDHASH = ../../buildhash FIX8BIT = ../fix8bit # # The following variables make it easy to adapt this Makefile to # numerous languages. # LANGUAGE = espanol DICTIONARY = $(LANGUAGE).words HASHFILE = $(LANGUAGE).hash # # The following variables may be overridden by the superior Makefile, # based on the LANGUAGES variable in config.X. # AFFIXES = $(LANGUAGE).aff # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: $(HASHFILE) install: all $(CONFIG) @. $(CONFIG); \ set -x; \ cd ../..; \ [ -d $(DESTDIR)$$LIBDIR ] || \ $(MAKE) -f Makefile NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ cd $(DESTDIR)$$LIBDIR; rm -f $(LANGUAGE).aff $(HASHFILE) @. $(CONFIG); \ set -x; \ cp $(LANGUAGE).aff $(HASHFILE) \ `cd ../..; cd $(DESTDIR)$$LIBDIR; pwd` @. $(CONFIG); \ set -x; \ cd ../..; cd $(DESTDIR)$$LIBDIR; \ chmod 644 $(LANGUAGE).aff $(HASHFILE) $(HASHFILE): $(BUILDHASH) $(AFFIXES) $(DICTIONARY) rm -f $(HASHFILE) munchlist -v -l $(AFFIXES) $(DICTIONARY) > $(LANGUAGE).words+ $(BUILDHASH) $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) build: $(BUILDHASH) -s $(LANGUAGE).words+ $(AFFIXES) $(HASHFILE) $(LANGUAGE)-alt.aff: $(LANGUAGE)-alt.7bit $(FIX8BIT) $(FIX8BIT) -8 < $(LANGUAGE)-alt.7bit > $(LANGUAGE)-alt.aff $(FIX8BIT): ../fix8bit.c cd ..; $(MAKE) fix8bit # # The following dependency can be executed when ispell is unpacked, # to unpack the dictionaries. # unpack: $(AFFIXES) clean: rm -f core *.hash *.stat *.cnt # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # kitclean: # # The following target is used in the English makefile, and is # required to be present in all other language Makefiles as # well, even though it doesn't have to do anything in those # directories. # dictclean: ispell-3.4.00/PaxHeaders.19408/makedict.sh0000644000000000000000000000007410227500137014747 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/makedict.sh0000555003214100001440000000651010227500137016014 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: makedict.sh,v 1.13 2005/04/14 14:38:23 geoff Exp $ # # Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, Geoff Kuenning, # Claremont, CA. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Make a beginning dictionary file for ispell, using an existing # speller. # # Usage: # # makedict file-list # # The specified files are collected, split into words, and run through # the system speller (usually spell(1)). Any words that the speller # accepts will be written to the standard output for use in making # an ispell dictionary. Usually, you will want to run the output # of this script through "munchlist" to get a final dictionary. # # $Log: makedict.sh,v $ # Revision 1.13 2005/04/14 14:38:23 geoff # Update license. # # Revision 1.12 2001/07/25 21:51:46 geoff # Minor license update. # # Revision 1.11 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.10 1999/01/07 01:22:58 geoff # Update the copyright. # # Revision 1.9 1994/01/25 07:11:53 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # This program must produce a list of INCORRECTLY spelled words on standard # output, given a list of words on standard input. If you don't have a # speller, but do have a lot of correctly-spelled files, try /bin/true. # SPELLPROG="${SPELLPROG-spell}" TMP=${TMPDIR-/tmp}/mkdict$$ case "$#" in 0) set X - shift ;; esac trap "/bin/rm ${TMP}; exit 1" 1 2 15 cat "$@" | deroff | tr -cs "[A-Z][a-z]'" '[\012*]' | sort -uf -o ${TMP} $SPELLPROG < ${TMP} | comm -13 - ${TMP} /bin/rm ${TMP} ispell-3.4.00/PaxHeaders.19408/WISHES0000644000000000000000000000007410227505244013563 xustar0030 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/WISHES0000444003214100001440000000705610227505244014633 0ustar00geofffaculty00000000000000Things remaining to be done to ispell: - It might be nice to support multiple personal dictionaries. On the other hand, it's pretty easy to combine them with "cat". - A small amount of string space could be saved if buildhash would combine strings with common suffixes (e.g., "and" could be stored as a pointer to the tail of "bland"). - (Pace Willisson) Pace's latest version of ispell compresses common digrams to reduce the size of the hash file, and stores shorter words in the dictionary entry itself. (Since the digram compression also reduces word size, this is a big win). He also improved startup time, at a slight running-time penalty, by eliminating the mass conversion of string indexes to pointers and just using the indexes as such whenever a string is accessed. - The findaffix script takes ridiculous amounts of time and disk space. It desperately needs to be rewritten in C, which would also allow it to correctly support string characters and to suppress reporting of choices that are already in the affix file. - Some of the following ideas require more flag bits in the dictionary. Since there is only one bit remaining for most cases, I plan to use that bit as some sort of an indicator that more flag bits reside somewhere else. This will be a kludge, but it will save some space. Beware! Don't plan on using that last flag bit for something else. - (Ian Dall) For some applications, it can be handy to allow multiple dictionary hash files. This shouldn't be too hard, since there's already similar code to support the personal dictionary. - (Not mine, but I've lost the name of the originator.) Some misspellings are common, but corrections will not ever be found by ispell's algorithm. It would be nice to be able to explicitly specify misspelling/correction pairs for such words (e.g., "lite->light"). - Several people, notably Peter Mutsaers, have asked if the affix file format could be extended to allow limited variables, so that you could specify things like "[AEIOU][DNL] > \2ING" to handle words like "pad->padding". - Ispell should be smart enough to ignore hyphenation signs, such as the TeX \- hyphenation indicator. - Since there can be two personal dictionaries, there should be a way to specify which dictionary a new word ("I" command) should be inserted into. - For languages that form lots of compound words, such as German, munchlist should be smart enough to split compound words into their components when appropriate. - (Jeff Edmonds) The personal dictionary should be able to remove certain words from the master dictionary, so that obscure words like "wether" wouldn't mask favorite typos. - (Jeff Edmonds) It would be wonderful if ispell could correct inserted spaces such as "th e" for "the" or even "can not" for "cannot". - Since ispell has dictionaries available to it, it is conceivable that it could automatically determine the language of a particular file by choosing the dictionary that produced the fewest spelling errors on the first few lines. - It is long past the time when the ispell.1 manual page should have been broken up into components describing the various programs in the suite. - If the -C flag is disabled, ispell should (at least optionally) use the "??" form to suggestion possible compound formations. - The elisp interface should provide a way for ispell to return error messages to emacs, so that users don't get inexplicable failures when things like dictionary open failures happen. ispell-3.4.00/PaxHeaders.19408/Makefile0000644000000000000000000000013212465624036014300 xustar0030 mtime=1423386654.514232511 30 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/Makefile0000444003214100001440000006004412465624036015351 0ustar00geofffaculty00000000000000# # $Id: Makefile,v 1.127 2015-02-08 01:10:54-08 geoff Exp $ # # Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # You will have to create a local.h file before building; look over # config.X to learn what things you may need to define, or use one of # the sample local.h files shipped. # # the argument syntax for buildhash to make alternate dictionary files # is simply: # # buildhash # $Log: Makefile,v $ # Revision 1.127 2015-02-08 01:10:54-08 geoff # Support DESTDIR. # # Revision 1.126 2015-02-08 00:44:20-08 geoff # During installation, make sure we don't accidentally get stuck in BINDIR. # # Revision 1.125 2005/09/06 06:31:32 geoff # In the "doedit" dependency, pick out the ispell version and make it # available to edited files. # # Revision 1.124 2005/05/25 13:56:32 geoff # Make language subdirectories in reverse order so that the English # makefiles can install a default dictionary linked to the first-mentioned # language. # # Revision 1.123 2005/05/25 13:22:33 geoff # Bug fix: make sure HASHSUFFIX set before using it during installation. # # Revision 1.122 2005/05/01 23:19:12 geoff # Make constructed files depend on the Makefile # # Revision 1.121 2005/05/01 23:07:59 geoff # Add EXTEXT usage (courtesy of Eli Zaretskii). # # Revision 1.120 2005/05/01 22:35:00 geoff # Get rid of references to fixispell-a in the installation process (but # blow away any previously installed copies). Add BAKEXT to the stuff # that's in config.sh and that's substituted when editing .X files. # Sort the list of edit substitutions. When generating DEFHASH, use the # configurable has suffix. # # Revision 1.119 2005/04/28 01:03:11 geoff # Improve the generation of defhash.h to set up DEFLANG and to allow all # definitions to be overridden by local.h. Clean up defhash.h in "make # clean". # # Revision 1.118 2005/04/28 00:26:06 geoff # Dynamically generate MASTERHASH and DEFHASH from the first dictionary # name specified in LANGUAGES. # # Revision 1.117 2005/04/27 01:18:34 geoff # Work around idiotic POSIX incompatibilies in tail. Proactively use # the -e switch to sed against the day when they decide to make sed # incompatible as well. # # Revision 1.116 2005/04/21 14:08:58 geoff # Insert a missing "silencing at". Change the name of the sample # local.h file. # # Revision 1.115 2005/04/14 15:19:37 geoff # Fix typos in the special term.o rule. # # Revision 1.114 2005/04/14 14:38:23 geoff # Update license. Integrate Ed Avis's changes. Add fixispell-a (broken # though it is). Generate ispell.5 dynamically. Put term.o first to # improve detection of misconfigurations, and generate a special message # if it won't compile. Play funny games with y.tab.c to deal with # MS-DOS stupidity. # # Revision 1.113 2002/06/20 23:46:15 geoff # Put sq/unsq back, since some dictionaries are still distributed in sq # format. Add code to make directory paths when necessary. # # Revision 1.112 2001/09/06 00:30:28 geoff # Many changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.111 2001/07/25 21:51:45 geoff # Minor license update. # # Revision 1.110 2001/07/23 20:24:02 geoff # Update the copyright and the license. # # Revision 1.109 2001/06/07 19:06:33 geoff # When creating local.h, make it user-writable. # # Revision 1.108 2001/06/07 08:02:18 geoff # Add the deformatters to the default dependencies. # # Revision 1.107 1999/01/13 01:34:15 geoff # Get rid of some leftover references to emacs stuff. # # Revision 1.106 1999/01/08 04:32:31 geoff # Don't try to build or install ispell.el and ispell.info. # # Revision 1.105 1999/01/07 01:22:29 geoff # Update the copyright. Get rid of old shar-based dictionary building. # # Revision 1.104 1995/11/08 05:09:06 geoff # When invoking "showversion", ignore any errors that happen. Fix a # place where I forgot to double a dollar sign in install-languages. # # Revision 1.103 1995/10/25 03:35:38 geoff # Don't assume the presence of "head" in the showversion dependency; use # old reliable sed instead. Also make showversion depend on ispell # itself, since it uses it. # # Revision 1.102 1995/10/11 04:30:25 geoff # Allow DEFHASH and MASTERHASH to be the same. # # Revision 1.101 1995/08/05 23:19:33 geoff # Add the showversion target to ease the job of debugging people's make # output. Make sure SHELLDEBUG is set for the entire process of making # config.sh. # # Revision 1.100 1995/03/06 02:42:39 geoff # Run iwhich explicitly from the shell, so that we don't have to worry # about PATH problems and whether it's executable or not. Also fix a # place where -nw was not removed from the batch emacs switch list. # # Revision 1.99 1995/01/08 23:23:23 geoff # Get rid of an obsolete etags flag. Add some new variables to config.sh. # # Revision 1.98 1994/12/27 23:08:43 geoff # Use the new "iwhich" script to decide whether to install emacs-related # stuff. Make correct.o depend on version.h so that "ispell -a" always # reports the correct version. # # Revision 1.97 1994/11/21 07:02:51 geoff # Specify default values for the BUILD macros, so that some systems # don't accidentally override them and make ispell think that the # dictionaries are missing. # # Revision 1.96 1994/10/25 05:45:54 geoff # Make the installation command configurable. # # Revision 1.95 1994/10/18 04:03:17 geoff # Get rid of DICTVARIANTS, which is obsolete. Compile term.o first, so # that errors in it (which are common) will show up first. Improve the # rules for generation of msgs.h. # # Revision 1.94 1994/09/16 05:06:55 geoff # Split installation up into basic and dictionary-building tools, so # that we can have a partial-install target. # # Revision 1.93 1994/09/16 04:51:28 geoff # Handle installations that have ELISPDIR but not TEXINFODIR # # Revision 1.92 1994/09/16 02:45:52 geoff # Don't strip non-binaries. Fix an accidentally-doubled backslash. # # Revision 1.91 1994/08/31 05:58:27 geoff # Strip binaries before installing them. Create directories before # installing into them. Make sure manual pages are installed with the # correct protection modes. # # Revision 1.90 1994/05/25 04:29:16 geoff # Don't remove english.4 after the English makefile has carefully # installed it. # # Revision 1.89 1994/05/24 05:31:22 geoff # Return to the old sed-based method of parsing LANGUAGES, so that things # will work on broken systems like BSDI. # # Revision 1.88 1994/05/24 04:54:30 geoff # Fix the emacs installation to use emacs batch mode properly, so that a # terminal isn't required. # # Revision 1.87 1994/03/21 01:55:17 geoff # If a hard link can't be made to msgs.h, copy it instead # # Revision 1.86 1994/02/22 06:09:03 geoff # Add SHELLDEBUG. Change the language-subdirs target to use the shell # IFS variable to parse things, simplifying things and improving # efficiency (thanks to Hagen Ross for the idea and implemenation). # # Revision 1.85 1994/02/13 23:25:31 geoff # Fix multiple-language processing to not pass subsequent specifications to # the first Makefile. Also fix the language shell loop to be more flexible. # # Revision 1.84 1994/02/07 08:10:40 geoff # When processing the LANGUAGES configuration variable (from local.h), # use sed instead of expr to process it. This gets around versions of # expr that have 127-character limitations (though it probably still # limits us to 512 characters with some versions of sed, so further work # may be needed here). # # Revision 1.83 1994/02/07 06:31:20 geoff # Clarify how to change variables in local.h # # Revision 1.82 1994/02/07 06:29:31 geoff # Add a dummy else clause to shell if-test for Ultrix # # Revision 1.81 1994/02/07 05:35:34 geoff # Make realclean run dictclean # # Revision 1.80 1994/01/26 07:44:43 geoff # Make yacc configurable through local.h. # # Revision 1.79 1994/01/25 07:11:11 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # !!!DO NOT EDIT HERE!!! # # Unlike previous versions of ispell, there should be no need to edit # your Makefile. Instead, #define the corresponding variables in your # local.h file; the Makefile will automatically pick them up. The # only reason you should need to edit the Makefile might to be to add # non-English dictionary support. # # For example, if you want to set CFLAGS to "-g -Wall", don't put it # here. Put: # # #define CFLAGS "-g -Wall" # # in local.h. Otherwise, it won't have any effect. # EXTRADICT = Use_config.sh SHELL = /bin/sh MAKE = make # # Prefix to apply to installation directories. This is not controlled # by config.X; if you want to make a global change of that sort you # should just set BINDIR, LIBDIR, etc. appropriately. The DESTDIR # prefix is useful if you want to specify a prefix at the time you # invoke make; this approach is useful in some large installations. # # Note that DESTDIR should be specified with a trailing slash. # DESTDIR = # # Set this to "-vx" in the make command line if you need to # debug the complex shell commands. # SHELLDEBUG = +vx all: config.sh all: programs defmt-programs showversion ispell.1 ispell.5 all: all-languages programs: buildhash findaffix tryaffix ispell programs: icombine ijoin munchlist programs: subset zapdups defmt-programs: cd deformatters; $(MAKE) all showversion: ispell -./ispell -v | sed -e 1q .c.o: @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -c $< # # The funny business with y_tab.c is necessary for MS-DOS systems, # where filenames can't have multiple periods. # .y.o: @. ./config.sh; \ set -x; \ $$YACC $<; \ [ -f y_tab.c ] || mv y.tab.c y_tab.c; \ $$CC $$CFLAGS -c y_tab.c; \ mv y_tab.o $@; \ rm -f y_tab.c all-languages: munchable $(MAKE) LANGUAGE_TARGET=all SHELLDEBUG=$(SHELLDEBUG) language-subdirs install: config.sh all install-basic install-deformatters install: install-dictbuild install-languages partial-install: config.sh all install-basic install-languages install-basic: @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$BINDIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$BINDIR mkdirpath; \ cd $(DESTDIR)$$BINDIR; \ rm -f ispell$$EXEEXT @. ./config.sh; \ set -x; \ $$INSTALL ispell$$EXEEXT $(DESTDIR)$$BINDIR @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip ispell$$EXEEXT; \ chmod 755 ispell$$EXEEXT @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$MAN1DIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$MAN1DIR mkdirpath; \ [ -d $(DESTDIR)$$MAN45DIR ] || $(MAKE) NEWDIR=$(DESTDIR)$$MAN45DIR mkdirpath; \ cd $(DESTDIR)$$MAN1DIR; \ rm -f ispell$$MAN1EXT; \ cd $(DESTDIR)$$MAN45DIR; \ rm -f ispell$$MAN45EXT @. ./config.sh; \ set -x; \ $$INSTALL ispell.1 $(DESTDIR)$$MAN1DIR/ispell$$MAN1EXT; \ $$INSTALL ispell.5 $(DESTDIR)$$MAN45DIR/ispell$$MAN45EXT @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$MAN1DIR; \ chmod 644 ispell$$MAN1EXT; \ cd $(DESTDIR)$$MAN45DIR; \ chmod 644 ispell$$MAN45EXT mkdirpath: @[ "X$(NEWDIR)" = X ] && (echo NEWDIR unset 1>&2; exit 1); exit 0 @path=; \ umask 22; \ for i in `echo $(NEWDIR) | tr / ' '`; do \ path="$$path/$$i"; \ if [ ! -d $$path ]; then \ echo mkdir $$path; \ mkdir $$path; \ fi; \ done install-deformatters: @. ./config.sh; \ set -x; \ cd deformatters; \ $(MAKE) EXEEXT=$$EXEEXT install install-dictbuild: @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$BINDIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$BINDIR mkdirpath; \ (cd $(DESTDIR)$$BINDIR; \ rm -f buildhash icombine ijoin \ munchlist findaffix fixispell-a tryaffix sq unsq); \ rm -f $(DESTDIR)$$LIBDIR/icombine @. ./config.sh; \ set -x; \ $$INSTALL buildhash icombine ijoin munchlist findaffix \ tryaffix \ $(DESTDIR)$$BINDIR @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$BINDIR; \ strip buildhash$$EXEEXT icombine$$EXEEXT ijoin$$EXEEXT; \ chmod 755 buildhash$$EXEEXT icombine$$EXEEXT ijoin$$EXEEXT \ munchlist findaffix tryaffix @. ./config.sh; \ set -x; \ [ -d $(DESTDIR)$$MAN1DIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$MAN1DIR mkdirpath; \ [ -d $(DESTDIR)$$MAN45DIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$MAN45DIR mkdirpath; \ cd $(DESTDIR)$$MAN1DIR; \ rm -f fixispell-a$$MAN1EXT @. ./config.sh; \ set -x; \ $$INSTALL sq.1 $(DESTDIR)$$MAN1DIR/sq$$MAN1EXT; \ for m in buildhash munchlist findaffix tryaffix; do \ echo ".so `basename $$MAN1DIR`/ispell$$MAN1EXT" \ > $(DESTDIR)$$MAN1DIR/$$m$$MAN1EXT; \ done; \ echo ".so `basename $$MAN1DIR`/sq$$MAN1EXT" \ > $(DESTDIR)$$MAN1DIR/unsq$$MAN1EXT @. ./config.sh; \ set -x; \ cd $(DESTDIR)$$MAN1DIR; \ chmod 644 buildhash$$MAN1EXT \ munchlist$$MAN1EXT findaffix$$MAN1EXT tryaffix$$MAN1EXT install-languages: $(MAKE) DESTDIR=$(DESTDIR) LANGUAGE_TARGET=install \ SHELLDEBUG=$(SHELLDEBUG) \ language-subdirs . ./config.sh; \ [ -d $(DESTDIR)$$LIBDIR ] \ || $(MAKE) NEWDIR=$(DESTDIR)$$LIBDIR mkdirpath; \ set -x; \ cd $(DESTDIR)$$LIBDIR; \ if [ $$MASTERHASH != $$DEFHASH ]; then \ rm -f $$DEFHASH; \ $$LINK -s $(DESTDIR)$$MASTERHASH $$DEFHASH; \ fi munchable: findaffix tryaffix munchlist buildhash ispell icombine munchable: ijoin # # The following auxiliary dependency is used to make targets in # the language directories. Do you find it intimidating? No # surprise; remember that this is by the guy who wrote munchlist. # LANGUAGE_TARGET = Do_not_try_to_make_this_target_yourself BUILD = build CBUILD = build DBUILD = build language-subdirs: config.sh @. ./config.sh; \ set $(SHELLDEBUG); \ set +e; \ while [ "X$$LANGUAGES" != X ]; do \ ( \ descriptor=`echo "$$LANGUAGES" \ | sed -e 's/.*{\([^}]*\)}[^{]*$$/\1/'`; \ dir=`echo "$$descriptor" | sed -e 's/\([^,]*\).*/\1/'`; \ descriptor=`echo "$$descriptor" \ | sed -e 's/[^,]*,*\(.*\).*/\1/'`; \ makeargs=''; \ while [ "X$$descriptor" != X ]; \ do \ nextvar=`echo "$$descriptor" \ | sed -e 's/\([^,]*\).*/\1/'`; \ makeargs="$$makeargs '$$nextvar'"; \ descriptor=`echo "$$descriptor" \ | sed -e 's/[^,]*,*\(.*\).*/\1/'`; \ done; \ set -x; \ cd languages/$$dir; \ eval $(MAKE) BUILD=$(BUILD) DBUILD=$(DBUILD) CBUILD=$(CBUILD) \ SHELLDEBUG=$(SHELLDEBUG) "$$makeargs" $(LANGUAGE_TARGET) \ || exit 1; \ ) || exit 1; \ LANGUAGES=`echo "$$LANGUAGES" \ | sed -e 's/\(.*\){[^{]*$$/\1/'`; \ case "$$LANGUAGES" in \ ''|*{*}*) \ ;; \ *) \ echo "Bad language specification: '$$LANGUAGES'" \ 1>&2; \ exit 2 \ ;; \ esac; \ done; \ exit 0 buildhash: config.sh buildhash.o hash.o makedent.o parse.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o buildhash buildhash.o hash.o makedent.o parse.o \ $$LIBES icombine: config.sh icombine.o makedent.o parse.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o icombine icombine.o makedent.o parse.o \ $$LIBES ijoin: config.sh ijoin.o fields.o @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o ijoin ijoin.o fields.o $$LIBES EDITFILE = notthere OUTFILE = /dev/null # # Note: we use "sed -n -e $$p" to achieve "tail -1" here because some # idiot decided to break backwards compatibility in some versions of # tail. I have nothing but contempt for such fools. # defhash.h: config.X local.h Makefile set $(SHELLDEBUG); \ MASTERHASH=`cat config.X local.h \ | sed -n -e \ 's/^#define[ ]*LANGUAGES[ ][^}]*HASHFILES=\([^,}]*\).*$$/\1/p' \ | sed -n -e '$$p'`; \ HASHSUFFIX=`cat config.X local.h \ | sed -n -e \ 's/^#define[ ]*HASHSUFFIX[ ]*"\(.*\)"/\1/p' \ | sed -n -e '$$p'`; \ case "$$MASTERHASH" in \ american*|british*) DEFHASH="english$$HASHSUFFIX";; \ *) DEFHASH="$$MASTERHASH";; \ esac; \ DEFLANG=`expr "$$DEFHASH" : '\(.*\)\..*$$'`.aff; \ echo "/* This file is generated by the Makefile. Don't edit it! */" \ > defhash.h; \ echo '' >> defhash.h; \ echo '#ifndef MASTERHASH' >> defhash.h; \ echo '#define MASTERHASH "'"$$MASTERHASH"'"' >> defhash.h; \ echo '#endif' >> defhash.h; \ echo '#ifndef DEFHASH' >> defhash.h; \ echo '#define DEFHASH "'"$$DEFHASH"'"' >> defhash.h; \ echo '#endif' >> defhash.h; \ echo '#ifndef DEFLANG' >> defhash.h; \ echo '#define DEFLANG "'"$$DEFLANG"'"' >> defhash.h; \ echo '#endif' >> defhash.h config.sh: config.X defhash.h local.h Makefile set $(SHELLDEBUG); \ for var in BAKEXT BINDIR CC CFLAGS COUNTSUFFIX DEFDICT DEFHASH \ DEFLANG EXEEXT HASHSUFFIX INSTALL \ LANGUAGES LIBDIR LIBES LINK LINT LINTFLAGS LOOK_XREF \ MAKE_SORTTMP MAN1DIR MAN1EXT MAN45DIR MAN45EXT MAN45SECT MASTERHASH \ MSGLANG POUNDBANG REGLIB STATSUFFIX \ SPELL_XREF TERMLIB TIB_XREF WORDS YACC \ ; do \ cat config.X defhash.h local.h \ | sed -n -e "s/^#define[ ]*$$var[ ]*"'"'"/$$var=/p" \ | sed -e 's/"[^"]*$$/'"'/" -e "s/=/='/" -e 's/\\"/"/g' \ | sed -n -e '$$p'; \ done > config.sh; \ echo 'case "$$MAKE_SORTTMP" in "") \ SORTTMP="-e /!!SORTTMP!!/s/=.*$$/=/";; *) SORTTMP=;; esac' \ >> config.sh doedit: . ./config.sh; \ set $(SHELLDEBUG); \ VERSION=`sed -n \ '/International Ispell/s/^.*\(International .*\)".*$$/\1/p' \ version.h`; \ sed \ -e "s@!!BAKEXT!!@$$BAKEXT@g" \ -e "s@!!COUNTSUFFIX!!@$$COUNTSUFFIX@g" \ -e "s@!!DEFHASH!!@$$DEFHASH@" -e "s@!!DEFLANG!!@$$DEFLANG@" \ -e "s@!!HASHSUFFIX!!@$$HASHSUFFIX@g" \ -e "s@!!LIBDIR!!@$$LIBDIR@" -e "s@!!DEFDICT!!@$$DEFDICT@" \ -e "s@!!LOOK_XREF!!@$$LOOK_XREF@g" \ -e "s@!!MAN45SECT!!@$$MAN45SECT@g" \ -e "s@!!POUNDBANG!!@$$POUNDBANG@g" \ -e "s@!!SPELL_XREF!!@$$SPELL_XREF@g" \ -e "s@!!STATSUFFIX!!@$$STATSUFFIX@g" \ -e "s@!!TIB_XREF!!@$$TIB_XREF@g" \ -e "s@!!WORDS!!@$$WORDS@g" \ -e "s@!!VERSION!!@$$VERSION@g" \ $$SORTTMP < $(EDITFILE) > $(OUTFILE) findaffix: findaffix.X config.sh @$(MAKE) EDITFILE=findaffix.X OUTFILE=findaffix doedit chmod +x findaffix ispell.1: ispell.1X config.sh @$(MAKE) EDITFILE=ispell.1X OUTFILE=ispell.1 SHELLDEBUG=$(SHELLDEBUG) \ doedit ispell.5: ispell.5X config.sh @$(MAKE) EDITFILE=ispell.5X OUTFILE=ispell.5 SHELLDEBUG=$(SHELLDEBUG) \ doedit munchlist: munchlist.X config.sh @$(MAKE) EDITFILE=munchlist.X OUTFILE=munchlist \ SHELLDEBUG=$(SHELLDEBUG) doedit chmod +x munchlist subset: subset.X config.sh @$(MAKE) EDITFILE=subset.X OUTFILE=subset SHELLDEBUG=$(SHELLDEBUG) \ doedit chmod +x subset tryaffix: tryaffix.X config.sh @$(MAKE) EDITFILE=tryaffix.X OUTFILE=tryaffix \ SHELLDEBUG=$(SHELLDEBUG) doedit chmod +x tryaffix zapdups: zapdups.X config.sh @$(MAKE) EDITFILE=zapdups.X OUTFILE=zapdups SHELLDEBUG=$(SHELLDEBUG) \ doedit chmod +x zapdups # # We put term.o first because it is the most common cause of # compilation errors. Ispell.o is listed second because it's the main # program. The remainder of the object files are listed # alphabetically. # OBJS = term.o ispell.o correct.o defmt.o dump.o exp_table.o fields.o \ good.o lookup.o hash.o makedent.o tgood.o tree.o xgets.o # # A special rule for term.o to suggest configuration changes # term.o: term.c @. ./config.sh; \ echo $$CC $$CFLAGS -c term.c 1>&2; \ $$CC $$CFLAGS -c term.c \ || (echo \ "term.c wouldn't compile. Try inverting USG in local.h" \ 1>&2; \ exit 1) ispell: config.sh $(OBJS) @. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o ispell $(OBJS) $$TERMLIB $$REGLIB $$LIBES sq: config.sh msgs.h sq.c @@. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o sq sq.c unsq: config.sh msgs.h unsq.c @@. ./config.sh; \ set -x; \ $$CC $$CFLAGS -o unsq unsq.c $(OBJS) buildhash.o icombine.o hash.o parse.o: config.h ispell.h local.h $(OBJS) buildhash.o icombine.o hash.o parse.o: proto.h msgs.h config.sh $(OBJS) buildhash.o icombine.o hash.o parse.o: defhash.h exp_table.o tgood.o: exp_table.h fields.o: fields.h ijoin.o: config.sh config.h ispell.h local.h ijoin.o: proto.h fields.h buildhash.o correct.o ispell.o: version.h config.h: config.X local.h cp config.X config.h chmod u+w config.h echo '' >> config.h echo '/* AUTOMATICALLY-GENERATED SYMBOLS */' >> config.h cat local.h config.X \ | egrep '^#define[ ]*SIGNAL_TYPE' \ | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \ >> config.h cat local.h config.X \ | egrep '^#define[ ]*MASKTYPE' \ | sed -e 's/TYPE[ ]*/TYPE_STRING "/' -e 's/$$/"/' -e 1q \ >> config.h # Create a sample local.h if no such file currently exists local.h: set +e; \ [ -r local.h ] || (cp local.h.generic local.h; chmod u+w local.h) msgs.h: config.sh FRC @. ./config.sh; \ set $(SHELLDEBUG); \ set +e; \ if [ -r languages/$$MSGLANG/msgs.h ]; then \ msgs=languages/$$MSGLANG/msgs.h; \ else \ msgs=languages/english/msgs.h; \ fi; \ if cmp -s msgs.h $$msgs; then \ :; \ else \ set -x; \ rm -f msgs.h; $$LINK -s $$msgs msgs.h || cp $$msgs msgs.h; \ fi FRC: tags: config.h *.[chy] ctags -w -t *.[chy] sed -e s/config.h/config.X/ tags > ntags mv ntags tags TAGS: config.h *.[chy] etags *.[chy] sed -e s/config.h/config.X/ TAGS > NTAGS mv NTAGS TAGS # # The funny business with y_tab.c is necessary for MS-DOS systems, # where filenames can't have multiple periods. # lint: languages/*/msgs.h lint: config.sh config.h ispell.h proto.h *.[cy] @. ./config.sh; \ $$LINT $$LINTFLAGS ispell.c correct.c defmt.c dump.c exp_table.c \ good.c hash.c lookup.c makedent.c tgood.c term.c tree.c xgets.c; \ $$YACC parse.y; \ [ -f y_tab.c ] || mv y.tab.c y_tab.c; \ $$LINT $$LINTFLAGS buildhash.c hash.c makedent.c y_tab.c; \ $$LINT $$LINTFLAGS icombine.c makedent.c y_tab.c; \ $$LINT $$LINTFLAGS ijoin.c fields.c @rm -f y_tab.c clean: config.sh clean-deformatters clean-languages @. ./config.sh; \ set -x; \ rm -f $$DEFHASH $$FOREIGNHASHES rm -f *.o core a.out mon.out hash.out y.tab.c y_tab.c *.stat *.cnt \ config.h defhash.h msgs.h unpacked rm -f buildhash findaffix tryaffix ispell icombine ijoin \ munchlist subset sq unsq zapdups ispell.1 ispell.5 ispell.info clean-deformatters: cd deformatters; $(MAKE) clean clean-languages: $(MAKE) LANGUAGE_TARGET=clean SHELLDEBUG=$(SHELLDEBUG) language-subdirs realclean veryclean: clean dictclean rm -f config.sh # # The following target allows you to clean out the combined # dictionary files. For safety, so you don't lose your files, # it makes sure that there is something to work from, but it can # only be so smart, so be careful! # dictclean: $(MAKE) LANGUAGE_TARGET=dictclean SHELLDEBUG=$(SHELLDEBUG) \ language-subdirs ispell-3.4.00/PaxHeaders.19408/pc0000644000000000000000000000013212466065110013156 xustar0030 mtime=1423469128.801383206 30 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/0000755003214100001440000000000012466065110014302 5ustar00geofffaculty00000000000000ispell-3.4.00/pc/PaxHeaders.19408/djterm.c0000644000000000000000000000007410235260075014670 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/djterm.c0000444003214100001440000002522410235260075015735 0ustar00geofffaculty00000000000000#ifndef lint static char DJGPP_Rcs_Id[] = "$Id"; #endif /* * djterm.c - DJGPP-specific terminal driver for Ispell * * Eli Zaretskii , 1996, 2001 * * Copyright 1996, Geoff Kuenning, Granada Hills, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: djterm.c,v $ * Revision 1.4 2005/05/01 23:03:25 geoff * Updates from Eli Zaretskii. * * Revision 1.3 2005/04/13 23:54:23 geoff * Update license. * * Revision 1.2 2001/09/06 00:33:35 geoff * Make the license consistent, and do some style cleanups. * * Revision 1.1 2001/09/01 06:40:21 geoff * As received from Eli * */ /* ** DJGPP currently doesn't support Unixy ioctl directly, so we ** have to define minimal support here via the filesystem extensions. */ #include #include #include #include #include #include static struct text_info txinfo; static unsigned char * saved_screen; static unsigned char ispell_norm_attr, ispell_sout_attr; /* These declarations are on , but as of DJGPP v2.03 they are ifdefed away. To accomodate for both old and new versions, where some of the TIOC* commands might be supported, we override any possible definitions of those commands, but provide declarations of structures they use only if they are not provided by the library. */ #ifdef TIOCGWINSZ #undef TIOCGWINSZ #else struct winsize { unsigned short ws_row; unsigned short ws_col; unsigned short ws_xpixel; unsigned short ws_ypixel; }; #endif #ifdef TIOCGETP #undef TIOCGETP #else struct sgttyb { char sg_ispeed; char sg_ospeed; char sg_erase; char sg_kill; short sg_flags; }; #endif #undef IOCPARM_MASK #undef IOC_OUT #undef IOC_IN #undef IOC_INOUT #define IOCPARM_MASK 0x7f #define IOC_OUT 0x40000000 #define IOC_IN 0x80000000 #define IOC_INOUT (IOC_IN|IOC_OUT) #undef _IOR #undef _IOW #undef _IOWR #define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #define _IOWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #undef TIOCGPGRP #undef TIOCSETP #undef CBREAK #undef ECHO /* These are the only ones we support here. */ #define TIOCGWINSZ _IOR('t', 104, struct winsize) #define TIOCGPGRP _IOR('t', 119, int) #define TIOCGETP _IOR('t', 8, struct sgttyb) #define TIOCSETP _IOW('t', 9, struct sgttyb) #define CBREAK 0x00000002 #define ECHO 0x00000008 /* This will be called by low-level I/O functions. */ static int djgpp_term (__FSEXT_Fnumber func, int *retval, va_list rest_args) { int fhandle = va_arg (rest_args, int); /* ** We only support ioctl on STDIN and write on STDOUT/STDERR. */ if (func == __FSEXT_ioctl && fhandle == fileno (stdin) && isatty (fhandle)) { int cmd = va_arg (rest_args, int); switch (cmd) { case TIOCGWINSZ: { struct winsize *winfo = va_arg (rest_args, struct winsize *); winfo->ws_row = ScreenRows (); winfo->ws_col = ScreenCols (); winfo->ws_xpixel = 1; winfo->ws_ypixel = 1; *retval = 0; break; } case TIOCGPGRP: *retval = 0; break; case TIOCGETP: { struct sgttyb * gtty = va_arg (rest_args, struct sgttyb *); gtty->sg_ispeed = gtty->sg_ospeed = 0; /* unused */ gtty->sg_erase = K_BackSpace; gtty->sg_kill = K_Control_U; gtty->sg_flags = 0; /* unused */ *retval = 0; break; } case TIOCSETP: *retval = 0; break; default: *retval = -1; break; } return 1; } else if (func == __FSEXT_write && (fhandle == fileno (stdout) || fhandle == fileno (stderr)) && isatty (fhandle) && termchanged) { /* ** Cannot write the output as is, because it might include ** TABS. We need to expand them into suitable number of spaces. */ int col; int dummy; char * buf = va_arg (rest_args, char *); size_t buflen = va_arg (rest_args, size_t); char * local_buf; char * s; char * d; if (!buf) { errno = EINVAL; *retval = -1; return 1; } *retval = buflen; /* `_write' expects number of bytes written */ local_buf = (char *) alloca (buflen+8+1); /* 8 for TAB, 1 for '\0' */ ScreenGetCursor (&dummy, &col); for (s = buf, d = local_buf; buflen--; s++) { if (*s == '\0') /* `cputs' treats '\0' as end of string */ { *d = *s; cputs (local_buf); putch (*s); d = local_buf; col++; } else if (*s == '\t') { *d++ = ' '; col++; while (col % 8) { *d++ = ' '; col++; } *d = '\0'; cputs (local_buf); d = local_buf; } else { *d++ = *s; if (*s == '\r') col = 0; else if (*s != '\n') col++; } } if (d > local_buf) { *d = '\0'; cputs (local_buf); } return 1; } else return 0; } /* This is called before `main' to install our terminal handler. */ static void __attribute__((constructor)) djgpp_ispell_startup (void) { __FSEXT_set_function (fileno (stdin), djgpp_term); __FSEXT_set_function (fileno (stdout), djgpp_term); __FSEXT_set_function (fileno (stderr), djgpp_term); } /* DJGPP-specific screen initialization and deinitialization. */ static void djgpp_init_terminal (void) { if (li == 0) { /* ** On MSDOS/DJGPP platforms, colors are used for normal and ** inverse-video displays. The colors and screen size seen ** at program startup are saved, to be restored before exit. ** The screen contents are also saved and restored. */ char * ispell_colors; gettextinfo (&txinfo); saved_screen = (unsigned char *) malloc ( txinfo.screenwidth * txinfo.screenheight * 2); if (saved_screen) ScreenRetrieve (saved_screen); /* ** Let the user specify their favorite colors for normal ** and standout text, like so: ** ** set ISPELL_COLORS=0x1e.0x74 ** se so */ ispell_colors = getenv ("ISPELL_COLORS"); if (ispell_colors != NULL) { char * next; unsigned long coldesc = strtoul (ispell_colors, &next, 0); if (next == ispell_colors || coldesc > UCHAR_MAX) ispell_colors = NULL; else { char * endp; ispell_norm_attr = (unsigned char) coldesc; coldesc = strtoul (next + 1, &endp, 0); if (endp == next + 1 || coldesc > UCHAR_MAX) ispell_colors = NULL; else ispell_sout_attr = (unsigned char) coldesc; } } if (ispell_colors == NULL) { /* Use dull B&W color scheme */ ispell_norm_attr = LIGHTGRAY + (BLACK << 4); ispell_sout_attr = BLACK + (LIGHTGRAY << 4); } } } static void djgpp_restore_screen (void) { if (li != txinfo.screenheight) _set_screen_lines (txinfo.screenheight); textmode (txinfo.currmode); textattr (txinfo.attribute); gotoxy (1, txinfo.screenheight); clreol (); } static void djgpp_deinit_term (void) { termchanged = 0; /* so output uses stdio again */ printf ("\n"); /* in case some garbage is pending */ fflush (stdout); if (saved_screen) { ScreenUpdate (saved_screen); gotoxy (txinfo.curx, txinfo.cury); } } static void djgpp_ispell_screen () { fflush (stdout); if (li != txinfo.screenheight) _set_screen_lines (li); textattr (ispell_norm_attr); } static int djgpp_column; static int djgpp_row; char * tgoto (char * cmd, int col, int row) { djgpp_column = col; djgpp_row = row; return "\2"; } char * tputs (const char * cmd, int cnt, int (*func)(int)) { fflush (stdout); if (!cmd) abort (); switch (*cmd) { case '\1': /* erase */ clrscr (); break; case '\2': /* move */ gotoxy (djgpp_column + 1, djgpp_row + 1); break; case '\3': /* stand-out */ textattr (ispell_sout_attr); break; case '\4': /* end stand-out */ textattr (ispell_norm_attr); break; case '\5': /* backup */ gotoxy (wherex () - cnt, wherey ()); break; case '\6': /* terminal init */ djgpp_ispell_screen (); clrscr (); break; case '\7': /* terminal termination */ djgpp_restore_screen (); djgpp_deinit_term (); break; default: abort (); } } int tgetent (char * buf, const char * term_name) { djgpp_init_terminal (); } char * tgetstr (const char * cmd, char ** buf) { static struct emulated_cmd { char *external_name; char *internal_code; } commands[] = { { "cl", "\1" }, { "cm", "\2" }, { "so", "\3" }, { "se", "\4" }, { "bc", "\5" }, { "ti", "\6" }, { "te", "\7" }, }; int i; for (i = 0; i < sizeof (commands) / sizeof (commands[0]); i++) { if (strcmp (cmd, commands[i].external_name) == 0) return commands[i].internal_code; } return NULL; } int tgetnum (const char * cmd) { if (cmd && strcmp (cmd, "co") == 0) return 80; else if (cmd && strcmp (cmd, "li") == 0) return 24; return -1; } ispell-3.4.00/pc/PaxHeaders.19408/local.emx0000644000000000000000000000007410235252354015045 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/local.emx0000444003214100001440000000463310235252354016113 0ustar00geofffaculty00000000000000/* * Local.h for MSDOS emx */ #define CC "gcc" #define MSDOS #define BINDIR "c:/ispell/bin" #define LIBDIR "c:/ispell/lib" #define ELISPDIR "c:/ispell/lib/emacs/site-el" #define TEXINFODIR "c:/ispell/info" #define MAN1DIR "c:/ispell/man" #define MAN4DIR "c:/ispell/man" #define LANGUAGES "{american,MASTERDICTS=american.med+,HASHFILES=amerimed+.has,EXTRADICT=c:/ispell/dict/words} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" /* above only for Makefiles not for ispell! */ #define SORTTMP "-e '/!!SORTTMP!!/s/=.*$/=/'" #define MAKE_SORTTMP "" #include #include #include #undef NO8BIT #define HAS_RENAME #define REGLIB "-lregexp" #define DEFPDICT "_" #define DEFPAFF "words" #define OLDPDICT "_" #define OLDPAFF "words" #define TEMPNAME "isXXXXXX" #define REGEX_LOOKUP #define REGCTYPE char * #define REGCMP(re,str) regcomp (str,(char *) 0) #define REGEX(re, str, dummy) regexec (re, str, dummy, dummy, dummy, dummy, \ dummy, dummy, dummy, dummy, dummy, dummy) #define REGFREE(re) (void)0 #define EGREPCMD "grep386 -E" #define WORDS "c:/ispell/dict/words" #define MAXNAMLEN 12 /* basename + "." + extension */ #ifdef MSDOS #define MAXEXTLEN 4 /* max. extension length including '.' */ #define MAXBASENAMELEN 8 /* max. base filename length without ext */ #define MAXARGS 100 /* max. number of arguments passed to * ispell by OPTIONVAR */ #endif /* MSDOS */ #define TRUNCATEBAK #define INPUTWORDLEN 100 /* word accepted from a file + 1; dflt: 100 */ #define MAXAFFIXLEN 20 /* amount a word might be extended; dflt: 20 */ #define MASKBITS 32 /* # of affix flags; dflt: 32 */ #define MAXSTRINGCHARS 100 /* # of "string" chars in affix file; dflt: 100 */ #define MAXSTRINGCHARLEN 10 /* max. length of a "string" char; dflt: 10 */ #define USESH #define DEFTEXFLAG 1 #define MINIMENU #define PIECEMEAL_HASH_WRITES #define GETKEYSTROKE() getch () #define HOME "ISPELL_HOME" #define OPTIONVAR "ISPELL_OPTIONS" #define LIBRARYVAR "ISPELL_DICTDIR" #define PDICTHOME "c:" #define HASHSUFFIX ".has" #define STATSUFFIX ".stt" #define COUNTSUFFIX ".cnt" #define MASKTYPE_STRING "long" #define SIGNAL_TYPE_STRING "void" ispell-3.4.00/pc/PaxHeaders.19408/README0000644000000000000000000000007410235255672014126 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/README0000444003214100001440000003264210235255672015175 0ustar00geofffaculty00000000000000 How to build Ispell on MS-DOS ----------------------------- This directory includes files necessary to build Ispell on MS-DOS and MS-Windows systems. Two environments are supported: EMX/GCC and DJGPP; they both generate 32-bit protected-mode programs and therefore aren't afflicted by most of the MS-DOS memory-related limitations. The EMX setup does not currently support building the dictionaries, so you will need to either build the dictionaries with DJGPP tools or get them elsewhere. The DJGPP executables will also run on all versions of MS-Windows (3.x, 9x, ME, W2K, XP, and NT4) as DOS console applications. 1. Building Ispell with EMX/GCC ---------------------------- You will only need the basic EMX development tools to compile Ispell. After unzipping the source archive, invoke the MAKEEMX.BAT batch file, like so: pc\makeemx This generates ispell.exe and the following auxiliary programs: buildhas.exe icombine.exe ijoin.exe Install the programs anywhere along your PATH. See the section named "Environment Variables" for information on environment variables used by the MS-DOS port of Ispell. 2. Building Ispell (no dictionaries) with DJGPP -------------------------------------------- If you only need to compile Ispell without building the dictionaries, use the MAKE-DJ.BAT batch file: pc\make-dj You will need the standard DJGPP development environment (djdevNNN.zip, gccNNNNb.zip, bnuNNNb.zip) and the DJGPP port of GNU Bison (bsnNNNb.zip) for the above to work. After the build is finished, read the section below about environment variables and install the executables and the dictionaries as you see fit. 3. Building Ispell and the dictionaries with DJGPP ----------------------------------------------- In addition to the standard development environment, you will need additional tools to build Ispell and the dictionaries. If you are building on Windows 2000 or XP, make sure to download and install the latest djdevNNN.zip and the latest ports of all the utilities mentioned below; old binaries might be incompatible with the DOS emulation that is part of Windows 2K/XP. Here's the list of packages you will need: a. A port of Unix-like shell. The only shell that was used successfully to build Ispell on MS-DOS is the port of Bash, which should be available from DJGPP archives: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bshNNNb.zip If you are thinking about using Stewartson's `ms_sh', don't: its method of passing long command lines is incompatible with DJGPP, and it will crash and burn on complex shell scripts. b. A DJGPP port of GNU Make 3.79 or later. This is available from DJGPP archives at the following URL: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/makNNNb.zip Note that ports of GNU Make prior to 3.75 didn't support a Unix-like shell, so you won't be able to build Ispell with them. c. A DJGPP port of GNU Fileutils, GNU Textutils and GNU Sh-utils, also available from DJGPP archives: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/filNNNb.zip ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/txtNNNb.zip ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/shlNNNb.zip In all of these URLs, NNN is a version number. If there is more than one ported version, get the latest one. The build process doesn't need *all* of the programs from these packages, so if you are short on disk space, you should be able to get away with these programs (I hope I didn't forget some): Fileutils: rm, mv, chmod, install, mkdir, ln, cp, touch, ls Textutils: cat, head, tail, sort, comm, wc, join, uniq Sh-utils: echo, expr, false, true d. GNU Sed (sedNNNb.zip from the DJGPP archives). e. GNU Awk (or any other port of Awk). Gawk is available from the DJGPP site above (v2gnu/gwkNNNb.zip). f. GNU Bison (bsnNNNb.zip from the DJGPP site). g. GNU Grep (grepNNb.zip from the DJGPP site). h. ctags and etags (for the `TAGS' and `tags' targets of the Makefile). These are available from the Emacs distribution, also on the DJGPP archive site above (v2gnu/emNNNNb.zip). While you probably can find quite a few different ports of the above utilities, I would generally advise against using anything but the DJGPP ports, since the Makefiles and the shell scripts depend on long command lines and will most probably break otherwise. DJGPP ports are a coherent set of tools which will work together well and ensure that the Makefiles and the scripts work as advertised. Here is what you should do to build Ispell: 1) Install the above utilities anywhere along your PATH. Make sure that you don't have any other executable called `sh' either in /bin (if you have such a directory) or anywhere else along your PATH *prior* to the directory where you installed the bash port. When Make runs, it will invoke the first program named `sh' that it finds in /bin or along the PATH, and you need to ensure that the right program is called. 2) Review the options set in pc/local.djgpp and change them as you see fit. Some things that you might consider changing are the pathnames of the standard directories, the dictionaries that will be built (see below), the backup extension ("~" by default), and the dictionaries you want to build. 3) By default, the American medium dictionary is built. I recommend building the ``plus'' version, but it requires an extra dictionary that is copyrighted. However, you should be able to find it on any Unix or GNU/Linux box, usually in the file /usr/dict/words or /usr/share/dict/words. If you do decide to build a ``plus'' version of the dictionary, be sure to put its full path in the EXTRADICTS variable in the file local.djgpp (default: "c:/usr/lib/words". 4) Set the TMPDIR environment variable to point to a place that has at least 20MB of free space, for the temporary files produced by the dictionary build process. This is especially important to those who point TMPDIR to a RAM drive, since these tend to be much smaller than 20MB. 5) Type these commands: pc\configdj make This will run for some time, depending on the dictionaries that you've chosen to build. The default setup builds a non-plus version of a medium-sized american dictionary, and should take about 1/2 a minute on a reasonably fast PC. Note that on MS-DOS the build time does not depend so much on the dictionary size as it does on Unix: it takes less than 2 minutes for a 2.4GHz PC to build the extra-large plus version with a 200KB /usr/dict/words file. I believe the reason for this is that the build process is much more I/O-bound on MS-DOS than it is on Unix, since MS-DOS pipes are simulated with disk files. If pc/configdj.bat complains that it runs out of environment space, enlarge the environment available to COMMAND.COM (or whatever your interactive command processor is). When the dictionaries are built, you might see error messages, about ``Improper links'', like so: c:/djgpp/bin/ln: cannot create symbolic link `./english.0' \ to `../english/english.0': Improper link (EXDEV) You can safely disregard these messages: they are due to the fact that MS-DOS doesn't support symbolic links. The Makefile already has a provision for alternative methods, which are automatically used in case of failures and which do work on MS-DOS. Another error message that you might see is something like this: Word 'U.S.A' contains illegal characters This means that some of the words in the EXTRADICT dictionary are incompatible with Ispell, and Ispell is ignoring them when it builds hashed dictionary. (The file `/usr/dict/words' from Solaris machines is known to have this problem.) The rest of the words are OK and will be used by Ispell, so here, too, you don't have to do anything about the error message. 6) After Make finishes, install the programs and the dictionaries as you see fit. The dictionary files you need to install are the files with a .hash extension in the subdirectories of languages/ directory (e.g. languages/american/amermedx.hash), the file languages/english/english.aff, and the documentation files ispell.1, ispell.5, fields.3, and english.5. If you say "make install", Make should do this automatically. 7) If you need to use some of the shell scripts (such as iwhich and Makekit), you will need to edit them to replace the first which says: : Use /bin/sh to say this instead: #!/bin/sh 4. Dictionary names ---------------- The filenames used for the dictionaries on Unix are too long for MS-DOS, and will cause filename clashes or failed programs. Therefore, the MS-DOS configuration script for DJGPP edits the Makefiles to change these names as follows: americansml -> amersml americanmed -> amermed americanlrg -> amerlrg americanxlg -> amerxlg altamersml -> altasml altamermed -> altamed altamerlrg -> altalrg altamerxlg -> altaxlg britishsml -> britsml britishmed -> britmed britishlrg -> britlrg britishxlg -> britxlg In addition, the `+' character (which is invalid in MS-DOS filenames) is converted into an `x', and if the `+' is at the end of the extension, it is moved into the first 8 characters of the basename. Thus, americanlrg+.hash is converted into amerlrgx.hash and american.sml+ into americax.sml: american.sml+ -> americax.sml american.med+ -> americax.med american.lrg+ -> americax.lrg american.xlg+ -> americax.xlg british.sml+ -> britishx.sml british.med+ -> britishx.med british.lrg+ -> britishx.lrg british.xlg+ -> britishx.xlg These DOSified filenames are the ones that you should use if you decide to change the dictionaries generated by the build process. The easiest way to know what are the DOS names of the different dictionaries is to look at the edited Makefiles in languages/ subdirectories after you build Ispell once for the default dictionaries. 5. Environment variables --------------------- Ispell uses environment variables to make it easier to support different installations. Most of these variables tell Ispell where to look for its hashed and private dictionaries. These variables are documented on the ispell.1 man page and in the Info docs for Ispell. Below is the list of DOS-specific environment variables that are not covered by the Ispell docs: ISPELL_OPTIONS - the default options to pass to Ispell. These are passed to Ispell as if they were typed by you before all the options you actually mentioned on the Ispell command line. Since Ispell parses options left to right, options from the command line may override those in `ISPELL_OPTIONS' variable. ISPELL_DICTDIR - the directory where Ispell will look for the alternate hashed dictionary file. The default dictionary pathname is built into Ispell when it is compiled (see the definition of LIBDIR and DEFHASH on local.h file, local.djgpp or local.emx), but you can set this variable, which will allow you to name alternate dictionaries relative to the directory named by it, avoiding a long pathname. ISPELL_HOME - replaces HOME on Unix systems. This is where Ispell looks for a personal dictionary if it is given as a relative pathname. ISPELL_COLORS - the colors which will be used by Ispell for the normal and "standout" text. By default, these are the normal and inverse video colors, but you may set them to any colors you like. The color descriptor is a pair of numbers separated by a dot; the first number is the color text attribute that will be set for the normal text, and the second is the attribute for the "standout" text (the misspelled words). The text color attributes are the usual PC background/foreground definitions. My favorite setting is this: set ISPELL_COLORS=0x1e.0x74 which sets the normal colors to yellow on blue and the "standout" colors to red on white. The color descriptor is parsed by a call to `strtoul' library function, so you can use octal and hex numbers as well as decimal ones. This color feature is only supported by the DJGPP port of Ispell. LINES - the size of the screen to be used by Ispell. Although this is not a DOS-specific variable, it does have a DOS-specific effect on the DJGPP port of Ispell: if the value of this variable is different from the current screen size, Ispell will set the screen size to the size given by LINES (and restore the original size when it exits or shells out to DOS). The following sizes are supported by the DJGPP port on a standard VGA display: 25, 28, 35, 40, 43 and 50 lines. If you want to run Ispell in some other non-standard screen size, set the display to that size before running Ispell and set LINES to that size. Enjoy, Eli Zaretskii ispell-3.4.00/pc/PaxHeaders.19408/local.djgpp0000644000000000000000000000007410235260075015357 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/local.djgpp0000444003214100001440000002760010235260075016424 0ustar00geofffaculty00000000000000/* * Written by Eli Zaretskii * * This is local.h file suitable for compiling Ispell on MS-DOS systems * with version 2.x of DJGPP port of GNU C/C++ compiler. * * $Id: local.djgpp,v 1.4 2005/05/01 23:03:25 geoff Exp $ * */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ /* ** Things that normally go in a Makefile. Define these just like you ** might in the Makefile, except you should use #define instead of ** make's assignment syntax. Everything must be double-quoted, and ** (unlike make) you can't use any sort of $-syntax to pick up the ** values of other definitions. */ #define CC "gcc" #define CFLAGS "-O2 -g" #define YACC "bison -y" /* ** LINK - MS-DOS generally doesn't support links, so use copy instead. */ #define LINK "cp -p" /* ** TERMLIB - DJGPP doesn't have one, it uses direct screen writes. */ #define TERMLIB "" /* ** Where to install various components of ispell. BINDIR contains ** binaries. LIBDIR contains hash tables and affix files. MAN1DIR ** and MAN4DIR will hold the chapter-1 and chapter-4 manual pages, ** respectively. ** ** If you intend to use multiple dictionary files, I would suggest ** LIBDIR be a directory that will contain nothing else, so sensible ** names can be constructed for the -d option without conflict. ** ** The magic string "/dev/env/FOO" expands at run time into the value ** of the environment variable FOO. DJDIR is defined by the startup ** code of every DJGPP program to point to the root of the DJGPP ** installation tree. */ #define BINDIR "/dev/env/DJDIR/bin" #define LIBDIR "/dev/env/DJDIR/lib" #define MAN1DIR "/dev/env/DJDIR/man/man1" #define MAN45DIR "/dev/env/DJDIR/man/man5" /* ** List of all hash files (languages) which will be supported by ispell. ** ** This variable has a complex format so that many options can be ** specified. The format is as follows: ** ** [,...] [ [, ...] ...] ** ** where ** ** language is the name of a subdirectory of the ** "languages" directory ** make-options are options that are to be passed to "make" in ** the specified directory. The make-options ** should not, in general, specify a target, as ** this will be provided by the make process. ** ** For example, if LANGUAGES is: ** ** "{american,MASTERDICTS=american.med+,HASHFILES=americanmed+.hash,EXTRADICT=/usr/dict/words /usr/dict/web2} {deutsch,DICTALWAYS=deutsch.sml,DICTOPTIONS=}" ** ** then the American-English and Deutsch (German) languages will be supported, ** and the following variable settings will be passed to the two Makefiles: ** ** American: ** ** MASTERDICTS='american.med+' ** HASHFILES='americanmed+.hash' ** EXTRADICT='/usr/dict/words /usr/dict/web2' ** ** Deutsch: ** ** DICTALWAYS='deutsch.sml' ** DICTOPTIONS='' ** ** Notes on the syntax: The makefile is not very robust. If you have ** make problems, or if make seems to to fail in the language-subdirs ** dependency, check your syntax. The makefile adds single quotes to ** the individual variables in the LANGUAGES specification, so don't ** use quotes of any kind. ** ** In the future, the first language listed in this variable will ** become the default, and the DEFHASH, DEFLANG, and DEFPAFF, ** variables will all become obsolete. So be sure to put your default ** language first, to make later conversion easier! ** ** Notes on options for the various languages will be found in the ** Makefiles for those languages. Some of those languages may require ** you to also change various limits limits like MASKBITS or the ** length parameters. ** ** A special note on the English language: because the British and ** American dialects use different spelling, you should usually select ** one or the other of these. If you select both, the setting of ** MASTERHASH will determine which becomes the language linked to ** DEFHASH (which will usually be named english.hash). ** ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ** !!! Note the pathname for the `words' file: it might be different !!! ** !!! If you don't have this file, make EXTRADICT empty !!! ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=amermed.hash,EXTRADICT=}" /* ** If you have acces to a /usr/dict/words file, and wish to check ** British spelling in addition to American, you may wish to use this: ** */ /* ** #define LANGUAGES "{american,MASTERDICTS=americax.med americax.lrg american.xlg,HASHFILES=amermedx.hash amerlrgx.hash amerxlg.hash,EXTRADICT=c:/usr/lib/words} {british,MASTERDICTS=british.med british.lrg british.xlg,HASHFILES=britmed.hash britlrg.hash britxlg.hash}" ** ** */ /* ** If your sort command accepts the -T switch to set temp file ** locations (try it out; on some systems it exists but is ** undocumented), make the following variable the null string. ** Otherwise leave it as the sed script. ** ** With DJGPP, you will probably use GNU Sort which accepts -T, so: */ #define SORTTMP "" /* ** INSTALL program. Could be a copy program like cp or something fancier ** like /usr/ucb/install -c */ #define INSTALL "ginstall -c" /* ** If your system has the rename(2) system call, define HAS_RENAME and ** ispell will use that call to rename backup files. Otherwise, it ** will use link/unlink. There is no harm in this except on MS-DOS, ** which might not support link/unlink (DJGPP does, but also has rename). */ #define HAS_RENAME 1 /* environment variable for user's word list */ #ifndef PDICTVAR #define PDICTVAR "WORDLIST" #endif /* ** Prefix part of default private dictionary. Under MS-DOS 8.3 ** filename limitation, we are in trouble... */ #define DEFPDICT "_isp_" /* old place to look for default word list */ #define OLDPDICT "_isp_" /* ** mktemp template for temporary file - MUST contain 6 consecutive X's. ** ** If this is a relative name, Ispell will try to determine the directory ** by checking the environment variables TMPDIR, TEMP, and TMP (in that ** order). */ #define TEMPNAME "isXXXXXX" /* ** If REGEX_LOOKUP is NOT defined, the lookup command (L) will use the look(1) ** command (if available) or the egrep command. If REGEX_LOOKUP is defined, ** the lookup command will use the internal dictionary and the ** regular-expression library (which you must supply separately. ** DJGPP v2 has POSIX regexp functions. */ #define REGEX_LOOKUP 1 /* ** Choose the proper type of regular-expression routines here. BSD ** and public-domain systems have routines called re_comp and re_exec; ** System V uses regcmp and regex. */ #include #include #define REGCTYPE regex_t * #define REGCMP(re,str) (regcomp (re, str, 0), re) #define REGEX(re, str, dummy) \ (re != 0 && regexec (re, str, 0, 0, 0) == 0 ? (char *)1 : NULL) #define REGFREE(re) \ do { \ if (re == 0) \ re = (regex_t *)calloc (1, sizeof (regex_t)); \ else \ regfree(re); \ } while (0) /* ** ** The 2 following definitions are only meaningfull if you don't use ** any regex library. */ /* path to egrep (use speeded up version if available); defined without explicit path, since there are no standard places for programs on MS-DOS. */ #define EGREPCMD "egrep -i" /* path to wordlist for Lookup command (typically /usr/dict/{words|web2}) */ /* note that /usr/dict/web2 is usually a bad idea due to obscure words */ #undef WORDS /* ** FIXME: The filename truncation below is not flexible enough for DJGPP ** which can support long filenames on some platforms, since we ** will only know if the support is available at runtime. */ /* max file name length (will truncate to fit BAKEXT) if not in sys/param.h */ #ifdef NAME_MAX #define MAXNAMLEN NAME_MAX #else #define MAXNAMLEN 12 #endif #define MAXEXTLEN 4 /* max. extension length including '.' */ #define MAXBASENAMELEN 8 /* max. base filename length without ext */ /* define if you want .bak file names truncated to MAXNAMLEN characters */ /* On MS-DOS, we really have no choice... */ #define TRUNCATEBAK 1 /* ** This is the extension that will be added to backup files. ** On MS-DOS, it makes sense to use the shortest possible extension. */ #define BAKEXT "~" /* ** Define this if you want to use the shell for interpretation of commands ** issued via the "L" command, "^Z" under System V, and "!". If this is ** not defined then a direct spawnvp() will be used in place of the ** normal system(). This may speed up these operations if the SHELL ** environment variable points to a Unix-like shell (such as `sh' or `bash'). ** ** However, if you undefine USESH, commands which use pipes, redirection ** and shell wildcards won't work, and you will need support for the SIGTSTP ** signal, for the above commands to work at all. */ #define USESH 1 /* ** Define this if you want to be able to type any command at a "type space ** to continue" prompt. */ #define COMMANDFORSPACE 1 /* ** The next three variables are used to provide a variable-size context ** display at the bottom of the screen. Normally, the user will see ** a number of lines equal to CONTEXTPCT of his screen, rounded down ** (thus, with CONTEXTPCT == 10, a 24-line screen will produce two lines ** of context). The context will never be greater than MAXCONTEXT or ** less than MINCONTEXT. To disable this feature entirely, set MAXCONTEXT ** and MINCONTEXT to the same value. To round context percentages up, ** define CONTEXTROUNDUP. ** ** Warning: don't set MAXCONTEXT ridiculously large. There is a ** static buffer of size MAXCONTEXT*BUFSIZ; since BUFSIZ is frequently ** 1K or larger, this can create a remarkably large executable. */ #define CONTEXTPCT 20 /* Use 20% of the screen for context */ #define MINCONTEXT 2 /* Always show at least 2 lines of context */ #define MAXCONTEXT 10 /* Never show more than 10 lines of context */ #define CONTEXTROUNDUP 1 /* Round context up */ /* ** Define this if you want the "mini-menu," which gives the most important ** options at the bottom of the screen, to be the default (in any case, it ** can be controlled with the "-M" switch). */ #define MINIMENU /* ** Redefine GETKEYSTROKE() to whatever appropriate on some MS-DOS systems ** where getchar() doesn't operate properly in raw mode. */ #ifdef __DJGPP__ #include #include #define GETKEYSTROKE() getxkey() #else #define GETKEYSTROKE() getch() #endif /* ** We include to have the definition of O_BINARY. The ** configuration script will notice this and define MSDOS_BINARY_OPEN. */ #include /* ** We include to get the definitions of R_OK and W_OK. */ #include /* ** Environment variable to use to locate the home directory. On DOS ** systems we set this to ISPELL_HOME to avoid conflicts with ** other programs that look for a HOME environment variable. */ #define HOME "ISPELL_HOME" #define PDICTHOME "c:" /* ** On MS-DOS systems, we define the following variables so that ** ispell's files have legal suffixes. Note that these suffixes ** must agree with the way you've defined dictionary files which ** incorporate these suffixes. ** ** Actually, it is not recommended at all to change the suffixes, ** since they are hardwired in the Makefile's under languages/ ** subdirectory, and MS-DOS will silently truncate excess letters anyway. */ #define HASHSUFFIX ".hash" #define STATSUFFIX ".stat" #define COUNTSUFFIX ".cnt" /* ** The extension of executable files. */ #define EXEEXT ".exe" ispell-3.4.00/pc/PaxHeaders.19408/makeemx.bat0000644000000000000000000000007410606344526015364 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/makeemx.bat0000444003214100001440000000231210606344526016422 0ustar00geofffaculty00000000000000set CC=gcc set CFLAGS=-O set REGLIB=-lregexp set TERMLIB=-ltermcap set YACC=yacc copy languages\english\msgs.h copy pc\local.emx local.h copy config.x config.h :: goto build gcc -O -c buildhash.c gcc -O -c correct.c gcc -O -c defmt.c gcc -O -c dump.c gcc -O -c exp_table.c gcc -O -c fields.c gcc -O -c good.c gcc -O -c hash.c gcc -O -c icombine.c gcc -O -c ijoin.c gcc -O -c ispell.c gcc -O -c lookup.c gcc -O -c makedent.c gcc -O -DUSG -c term.c gcc -O -c tgood.c gcc -O -c tree.c gcc -O -c xgets.c yacc parse.y gcc -O -c y_tab.c move y_tab.o parse.o del y_tab.c gcc -O -o buildhas buildhas.o hash.o makedent.o parse.o %LIBES% emxbind -b buildhas emxbind -s buildhas.exe gcc -O -o icombine icombine.o makedent.o parse.o %LIBES% emxbind -b icombine emxbind -s icombine.exe gcc -O -o ijoin ijoin.o fields.o %LIBES% emxbind -b ijoin emxbind -s ijoin.exe :build ar -q ispell.a term.o ispell.o correct.o defmt.o dump.o exp_table.o fields.o good.o lookup.o hash.o makedent.o tgood.o tree.o xgets.o gcc -o ispell ispell.a %TERMLIB% %REGLIB% %LIBES% :: strip ispell emxbind -b -s ispell :: because of use of system() emxbind -a ispell -p :: goto end :end del ispell.a ispell-3.4.00/pc/PaxHeaders.19408/cfgmain.sed0000644000000000000000000000007407340316074015344 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/cfgmain.sed0000444003214100001440000000105707340316074016407 0ustar00geofffaculty00000000000000/^ *\$\$SORTTMP/i\ -e 's@/munch\\$$\\$$@/mu$$$$@g' \\\ -e 's@/faff\\$$\\$$@/fa$$$$@g' \\\ -e 's@/sset\\$$\\$$\\.@/se$$$$@g' \\ /^ *while \[ "X\$\$LANGUAGES" != X \]/i\ [ -r languages/english/Makefile.orig ] \\\ || (cd languages/english; mv -f Makefile Makefile.orig; \\\ ../../pc/cfglang.sed Makefile.orig > Makefile); \\ /^ cd languages\/$$dir; \\/a\ [ -r Makefile.orig ] \\\ || (mv -f Makefile Makefile.orig; \\\ ../../pc/cfglang.sed Makefile.orig > Makefile); \\ /^ijoin.o:/i\ term.o: pc/djterm.c ispell-3.4.00/pc/PaxHeaders.19408/cfglang.sed0000644000000000000000000000007410235255672015344 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/cfglang.sed0000444003214100001440000000112410235255672016402 0ustar00geofffaculty00000000000000#!/bin/sed -f # # Fix up file names which are either invalid on MSDOS, or clash with each # other in the restricted 8+3 file-name space # s/americansml/amersml/g s/americanmed/amermed/g s/americanlrg/amerlrg/g s/americanxlg/amerxlg/g s/altamersml/altasml/g s/altamermed/altamed/g s/altamerlrg/altalrg/g s/altamerxlg/altaxlg/g s/britishsml/britsml/g s/britishmed/britmed/g s/britishlrg/britlrg/g s/britishxlg/britxlg/g s/\(..*\)-alt\./alt\1./g s/+\.hash/x.hash/g s/\([^.]\)\.\([^.+][^.+]*\)+/\1x.\2/g s/americanx/americax/g # # Make sure Bash uses Unix-style PATH # /^SHELL *=/i\ PATH_SEPARATOR=: ispell-3.4.00/pc/PaxHeaders.19408/configdj.bat0000644000000000000000000000007407340316160015512 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/configdj.bat0000444003214100001440000000054207340316160016553 0ustar00geofffaculty00000000000000@echo off echo Configuring Ispell for DJGPP... update pc/local.djgpp local.h if not exist Makefile.orig ren Makefile Makefile.orig sed -f pc/cfgmain.sed Makefile.orig > Makefile if "%TMPDIR%"=="" set TMPDIR=. set PATH_SEPARATOR=: set TEST_FINDS_EXE=y rem if not exist %SYSROOT%\tmp\nul md %SYSROOT%\tmp echo You are now ready to run Make :End ispell-3.4.00/pc/PaxHeaders.19408/make-dj.bat0000644000000000000000000000007410235256710015240 xustar0030 atime=1423469128.801383206 30 ctime=1423469128.801383206 ispell-3.4.00/pc/make-dj.bat0000444003214100001440000000276510235256710016312 0ustar00geofffaculty00000000000000@Rem Do not turn echo off so they will see what is going on copy language\english\msgs.h msgs.h > nul copy pc\local.djgpp local.h > nul copy config.X config.h > nul echo /* AUTOMATICALLY-GENERATED SYMBOLS */ >> config.h echo #define SIGNAL_TYPE_STRING "void" >> config.h echo #define MASKTYPE_STRING "long" >> config.h @Rem @Rem Use the following Goto when you only change a few source @Rem files and do not want to recompile all of them :: goto build gcc -c -O2 -g buildhash.c gcc -c -O2 -g hash.c gcc -c -O2 -g makedent.c bison -y parse.y if exist y.tab.c ren y.tab.c y_tab.c gcc -c -O2 -g y_tab.c -o parse.o if exist y_tab.c del y_tab.c gcc -o -g buildhash buildhash.o hash.o makedent.o parse.o gcc -c -O2 -g icombine.c gcc -o -g icombine icombine.o makedent.o parse.o gcc -c -O2 -g ijoin.c gcc -c -O2 -g fields.c gcc -o -g ijoin ijoin.o fields.o gcc -c -O2 -g term.c gcc -c -O2 -g ispell.c gcc -c -O2 -g correct.c gcc -c -O2 -g defmt.c gcc -c -O2 -g dump.c gcc -c -O2 -g exp_table.c gcc -c -O2 -g good.c gcc -c -O2 -g lookup.c gcc -c -O2 -g tgood.c gcc -c -O2 -g tree.c gcc -c -O2 -g xgets.c :build @echo ispell.o term.o correct.o defmt.o dump.o good.o lookup.o > link.lst @echo fields.o exp_table.o hash.o makedent.o tgood.o tree.o xgets.o >> link.lst @del link.lst gcc -o -g ispell @link.lst @Rem @Rem Strip the .exe but leave the COFF images with debug info strip *.exe cd deformatters gcc -O2 -g -o defmt-c defmt-c.c gcc -O2 -g -o defmt-sh defmt-sh.c strip *.exe cd .. ispell-3.4.00/PaxHeaders.19408/tryaffix.X0000644000000000000000000000007410233564153014624 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/tryaffix.X0000555003214100001440000001147310233564153015675 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: tryaffix.X,v 1.13 2005/04/27 01:18:35 geoff Exp $ # # Copyright 1987-1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, # Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Try out affixes to see if they produce valid roots # # Usage: # # tryaffix [-p | -s] [-c] dict-file affix[+addition] ... # # The -p and -s flags specify whether prefixes or suffixes # are being tried; if neither is specified, suffixes are assumed. # # If the -c flag is given, statistics on the various affixes are given: # a count of words it potentially applies to, and an estimate of the # number of dictionary bytes the flag would save. The estimate will # be high if the flag generates words that are currently generated # by other flags. # # The dictionary file, dict-file, must already be expanded and sorted, # and things will work best if uppercase has been folded to lower with # 'tr'. # # The "affixes" are things to be stripped from the dictionary # file to produce trial roots: for English, "con" and "ing" # are examples. The "additions" are letters that would have # been stripped off the root before adding the affix. For # example, the affix "ing" strips "e" for words ending in "e" # (as in "like --> liking") so we might run: # # tryaffix ing ing+e # # to cover both cases. # # $Log: tryaffix.X,v $ # Revision 1.13 2005/04/27 01:18:35 geoff # Fix a typo in a comment. Work around idiotic POSIX incompatibilities # in sort. Add secure temp-file handling. # # Revision 1.12 2005/04/14 14:40:13 geoff # Use /tmp as the default temp directory # # Revision 1.11 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. # # Revision 1.10 2001/09/06 00:30:29 geoff # Changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.9 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.8 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.7 1999/01/07 01:57:48 geoff # Update the copyright. # # Revision 1.6 1994/01/25 07:12:18 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # USAGE='tryaffix [-p | -s] [-c] dict-file affix[+addition] ...' counts=no pre= suf='$' while : do case "$1" in -p) pre='^' suf= ;; -s) pre= suf='$' ;; -c) counts=yes ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac shift done dict="$1" shift if [ ! -r "$dict" ] then echo "Can't read $dict" 1>&2 echo "$USAGE" 1>&2 exit 1 elif [ $# -eq 0 ] then echo "$USAGE" 1>&2 exit 1 fi while [ $# -ne 0 ] do case "$1" in *+*) affix=`expr "$1" : '\(.*\)+'` addition=`expr "$1" : '.*+\(.*\)'` sedscript="s/$pre$affix$suf/$addition/p" ;; *) sedscript="s/$pre$1$suf//p" ;; esac if [ "$counts" = no ] then echo ===== "$1" ===== sed -n -e "$sedscript" "$dict" | comm -12 - "$dict" else echo "$1" \ `sed -n -e "$sedscript" "$dict" | comm -12 - "$dict" | wc -lc` fi shift done ispell-3.4.00/PaxHeaders.19408/zapdups.X0000644000000000000000000000013212465617735014467 xustar0030 mtime=1423384541.163511067 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/zapdups.X0000555003214100001440000001470112465617735015542 0ustar00geofffaculty00000000000000!!POUNDBANG!! # # $Id: zapdups.X,v 1.13 2015-02-08 00:35:41-08 geoff Exp $ # # Copyright 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All modifications to the source code must be clearly marked as # such. Binary redistributions based on modified source code # must be clearly marked as modified versions in the documentation # and/or other materials provided with the distribution. # 4. The code that causes the 'ispell -v' command to display a prominent # link to the official ispell Web site may not be removed. # 5. The name of Geoff Kuenning may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Report or get rid of duplicates in various components of a dictionary. # # Usage: # # zapdups [-d [-n]] [-l langfile] dict-0 dict-1 ... # # Dictionaries starting with dict-1 (not dict-0!) are examined, # looking for words that appear in any earlier dictionary. If any # duplicates are found, they are reported to the standard output. # # If the -d switch is specified, duplicates are removed from later # dictionaries. The modification is done in-place. This switch # should normally be used after examining the output of an earlier # run. The -d switch takes a long time to run, because it uses # munchlist to reduce the dictionary once duplicates are removed. # The -n switch can be used to suppress the running of munchlist, to # save time. # # If the -l switch is specified, the language tables are gotten from # the specified file; otherwise they come from $LIBDIR/!!DEFLANG!!. # # $Log: zapdups.X,v $ # Revision 1.13 2015-02-08 00:35:41-08 geoff # Be a bit more paranoid about creating temporary files. # # Revision 1.12 2005/04/27 01:18:35 geoff # Work around idiotic POSIX incompatibilities in sort. Add secure # temp-file handling. # # Revision 1.11 2005/04/14 14:38:23 geoff # Update license. Protect against modernized (i.e., incompatible) and # internationalized sort commands. Don't use /usr/tmp. # # Revision 1.10 2001/09/06 00:30:29 geoff # Changes from Eli Zaretskii to support DJGPP compilation. # # Revision 1.9 2001/07/25 21:51:47 geoff # Minor license update. # # Revision 1.8 2001/07/23 20:24:04 geoff # Update the copyright and the license. # # Revision 1.7 1999/01/07 01:58:10 geoff # Update the copyright. # # Revision 1.6 1995/01/08 23:23:58 geoff # Support variable hashfile suffixes for DOS purposes. # # Revision 1.5 1994/01/25 07:12:24 geoff # Get rid of all old RCS log lines in preparation for the 3.1 release. # # # # The following is necessary so that some internationalized versions of # sort(1) don't confuse things by sorting into a nonstandard order. # LANG=C LOCALE=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C export LANG LOCALE LC_COLLATE LC_CTYPE # # The following aren't strictly necessary, but I've been made paranoid # by problems with the stuff above. It can't hurt to set them to a # sensible value. LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C export LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LIBDIR=!!LIBDIR!! TDIR=${TMPDIR-/tmp} TEMPDIR=`mktemp -d ${TDIR}/zapdXXXXXXXXXX 2>/dev/null` || (umask 077; mkdir "$TDIR/zapd$$" || (echo "Can't create temp directory: ${TDIR}/zapd$$" 1>&2; exit 1); TEMPDIR="$TDIR/zapd$$") TMP=${TEMPDIR}/zapd SORTTMP="-T ${TDIR}" # !!SORTTMP!! USAGE="zapdups [-d [-n]] [-l langfile] dict-0 dict-1 ..." delete=no munchit=yes langtabs=${LIBDIR}/!!DEFLANG!! while : do case "$1" in -d) delete=yes shift ;; -l) langtabs="$2" shift; shift ;; -n) munchit=no shift ;; -*) echo "$USAGE" 1>&2 exit 1 ;; *) break ;; esac done if [ $# -lt 2 ] then echo "$USAGE" 1>&2 exit 1 fi FAKEHASH=${TMP}!!HASHSUFFIX!! FAKEDICT=$TMP.b SEEN=$TMP.c LATEST=$TMP.d DUPS=$TMP.e trap "rm -rf $TEMPDIR; exit 1" 1 2 15 trap "rm -rf $TEMPDIR; exit 0" 13 # # Create a dummy dictionary to hold a compiled copy of the language # tables. # echo 'QQQQQQQQ' > $FAKEDICT buildhash -s $FAKEDICT $langtabs $FAKEHASH \ || (echo "Couldn't create fake hash file" 1>&2; rm -rf $TEMPDIR; exit 1) \ || exit 1 rm -f ${FAKEDICT}* nl=' ' # # Expand dictionary 0 into a temp file # ispell -e -d $FAKEHASH < "$1" \ | tr ' ' "$nl" \ | sort $SORTTMP -u \ | sed -e 's@$@ '"$1@" \ > $SEEN shift # # For each subsequent dictionary: # # (1) Expand it into a temp file # (2) Use join to report the duplicates # (3) If we are editing, use comm to remove the duplicates # (4) Add the expanded dictionary (sans duplicates) to the list # of words already seen. # for dict do ispell -e -d $FAKEHASH < "$dict" \ | tr ' ' "$nl" \ | sort $SORTTMP -u \ | sed -e 's@$@ '"$dict@" \ > $LATEST join '-t ' $SEEN $LATEST > $DUPS if [ -s $DUPS ] then cat $DUPS if [ $delete = yes ] then sed -e "s@ .* $dict@ $dict@" $DUPS \ | comm -23 $LATEST - \ | sed -e "s@ $dict@@" \ | if [ $munchit = yes ] then munchlist -l "$langtabs" > "$dict" else sort $SORTTMP -u -o "$dict" fi fi fi # We must do a shift so that $# remains correct shift if [ $# -gt 0 ] then sort $SORTTMP -u -o $SEEN $LATEST $SEEN fi done \ | sort -u rm -rf $TEMPDIR ispell-3.4.00/PaxHeaders.19408/local.h.macos0000644000000000000000000000007410245104041015170 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/local.h.macos0000444003214100001440000000667610245104041016247 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.macos,v 1.3 2005/05/25 14:13:53 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define HAS_RENAME #define TERMLIB "-lcurses" /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man4" #define MAN45EXT ".4" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/local.h.linux0000644000000000000000000000007411553222236015237 xustar0030 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/local.h.linux0000444003214100001440000000715711553222236016311 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.linux,v 1.3 2011-04-19 17:58:54+12 geoff Exp $ */ /* * Copyright 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #define GENERATE_LIBRARY_PROTOS #define EGREPCMD "grep -Ei" #define HAS_RENAME #define YACC "bison -y" /* Not all linuxes have yacc, but all have bison */ /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" #define MAN45EXT ".5" /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/term.c0000644000000000000000000000013112465617735013762 xustar0029 mtime=1423384541.15951102 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/term.c0000444003214100001440000004072512465617735015040 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: term.c,v 1.55 2015-02-08 00:35:41-08 geoff Exp $"; #endif /* * term.c - deal with termcap, and unix terminal mode settings * * Pace Willisson, 1983 * * Copyright 1987, 1988, 1989, 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, * Claremont, CA. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: term.c,v $ * Revision 1.55 2015-02-08 00:35:41-08 geoff * Add POSIX termios support (thanks to Christian Weisgerber for the patch). * * Revision 1.54 2005-04-14 16:11:36-07 geoff * Correctly handle control-Z, including resetting the terminal. The * only remaining problem is that the screen isn't automatically * refreshed. (Doing the latter would either require major changes to * make the screen-refresh code callable from the signal handler, or * fixing GETKEYSTROKE to fail on signals. That's probably not hugely * hard but doing it portably probably is.) * * Revision 1.53 2005/04/14 14:38:23 geoff * Update license. Rename move/erase to avoid library conflicts. * * Revision 1.52 2001/09/06 00:30:28 geoff * Many changes from Eli Zaretskii to support DJGPP compilation. * * Revision 1.51 2001/07/25 21:51:46 geoff * Minor license update. * * Revision 1.50 2001/07/23 20:24:04 geoff * Update the copyright and the license. * * Revision 1.49 1999/01/07 01:22:53 geoff * Update the copyright. * * Revision 1.48 1994/10/25 05:46:11 geoff * Fix a couple of places where ifdefs were omitted, though apparently * harmlessly. * * Revision 1.47 1994/09/01 06:06:32 geoff * Change erasechar/killchar to uerasechar/ukillchar to avoid * shared-library problems on HP systems. * * Revision 1.46 1994/01/25 07:12:11 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" #include "msgs.h" #if defined(TERMIOS) #include #elif defined(USG) #include #else #ifndef __DJGPP__ #include #endif #endif #include void ierase P ((void)); void imove P ((int row, int col)); void inverse P ((void)); void normal P ((void)); void backup P ((void)); static int iputch P ((int c)); void terminit P ((void)); SIGNAL_TYPE done P ((int signo)); #ifdef SIGTSTP static SIGNAL_TYPE onstop P ((int signo)); #endif /* SIGTSTP */ void stop P ((void)); int shellescape P ((char * buf)); #ifdef USESH void shescape P ((char * buf)); #endif /* USESH */ static int termchanged = 0; #ifdef __DJGPP__ #include "pc/djterm.c" #endif void ierase () { if (cl) tputs (cl, li, iputch); else { if (ho) tputs (ho, 100, iputch); else if (cm) tputs (tgoto (cm, 0, 0), 100, iputch); tputs (cd, li, iputch); } } void imove (row, col) int row; int col; { tputs (tgoto (cm, col, row), 100, iputch); } void inverse () { tputs (so, 10, iputch); } void normal () { tputs (se, 10, iputch); } void backup () { if (BC) tputs (BC, 1, iputch); else (void) putchar ('\b'); } static int iputch (c) int c; { return putchar (c); } #if defined(TERMIOS) static struct termios sbuf; static struct termios osbuf; #elif defined(USG) static struct termio sbuf; static struct termio osbuf; #else static struct sgttyb sbuf; static struct sgttyb osbuf; #ifdef TIOCSLTC static struct ltchars ltc; static struct ltchars oltc; #endif #endif static SIGNAL_TYPE (*oldint) (); static SIGNAL_TYPE (*oldterm) (); #ifdef SIGTSTP static SIGNAL_TYPE (*oldttin) (); static SIGNAL_TYPE (*oldttou) (); static SIGNAL_TYPE (*oldtstp) (); #endif void terminit () { #ifdef TIOCPGRP int tpgrp; #else #ifdef TIOCGPGRP int tpgrp; #endif #endif #ifdef TIOCGWINSZ struct winsize wsize; #endif /* TIOCGWINSZ */ tgetent (termcap, getenv ("TERM")); termptr = termstr; BC = tgetstr ("bc", &termptr); cd = tgetstr ("cd", &termptr); cl = tgetstr ("cl", &termptr); cm = tgetstr ("cm", &termptr); ho = tgetstr ("ho", &termptr); nd = tgetstr ("nd", &termptr); so = tgetstr ("so", &termptr); /* inverse video on */ se = tgetstr ("se", &termptr); /* inverse video off */ if ((sg = tgetnum ("sg")) < 0) /* space taken by so/se */ sg = 0; ti = tgetstr ("ti", &termptr); /* terminal initialization */ te = tgetstr ("te", &termptr); /* terminal termination */ co = tgetnum ("co"); li = tgetnum ("li"); #ifdef TIOCGWINSZ if (ioctl (0, TIOCGWINSZ, (char *) &wsize) >= 0) { if (wsize.ws_col != 0) co = wsize.ws_col; if (wsize.ws_row != 0) li = wsize.ws_row; } #endif /* TIOCGWINSZ */ /* * Let the variables "LINES" and "COLUMNS" override the termcap * entry. Technically, this is a terminfo-ism, but I think the * vast majority of users will find it pretty handy. */ if (getenv ("COLUMNS") != NULL) co = atoi (getenv ("COLUMNS")); if (getenv ("LINES") != NULL) li = atoi (getenv ("LINES")); #if MAX_SCREEN_SIZE > 0 if (li > MAX_SCREEN_SIZE) li = MAX_SCREEN_SIZE; #endif /* MAX_SCREEN_SIZE > 0 */ #if MAXCONTEXT == MINCONTEXT contextsize = MINCONTEXT; #else /* MAXCONTEXT == MINCONTEXT */ if (contextsize == 0) #ifdef CONTEXTROUNDUP contextsize = (li * CONTEXTPCT + 99) / 100; #else /* CONTEXTROUNDUP */ contextsize = (li * CONTEXTPCT) / 100; #endif /* CONTEXTROUNDUP */ if (contextsize > MAXCONTEXT) contextsize = MAXCONTEXT; else if (contextsize < MINCONTEXT) contextsize = MINCONTEXT; #endif /* MAX_CONTEXT == MIN_CONTEXT */ /* * Insist on 2 lines for the screen header, 2 for blank lines * separating areas of the screen, 2 for word choices, and 2 for * the minimenu, plus however many are needed for context. If * possible, make the context smaller to fit on the screen. */ if (li < contextsize + 8 && contextsize > MINCONTEXT) { contextsize = li - 8; if (contextsize < MINCONTEXT) contextsize = MINCONTEXT; } if (li < MINCONTEXT + 8) (void) fprintf (stderr, TERM_C_SMALL_SCREEN, MINCONTEXT + 8); #ifdef SIGTSTP #ifdef TIOCPGRP retry: #endif /* SIGTSTP */ #endif /* TIOCPGRP */ #if defined(TERMIOS) if (!isatty (0)) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } (void) tcgetattr (0, &osbuf); termchanged = 1; sbuf = osbuf; sbuf.c_lflag &= ~(ECHO | ECHOK | ECHONL | ICANON); sbuf.c_oflag &= ~(OPOST); sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL); sbuf.c_cc[VMIN] = 1; sbuf.c_cc[VTIME] = 1; (void) tcsetattr (0, TCSADRAIN, &sbuf); uerasechar = osbuf.c_cc[VERASE]; ukillchar = osbuf.c_cc[VKILL]; #elif defined(USG) if (!isatty (0)) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } (void) ioctl (0, TCGETA, (char *) &osbuf); termchanged = 1; sbuf = osbuf; sbuf.c_lflag &= ~(ECHO | ECHOK | ECHONL | ICANON); sbuf.c_oflag &= ~(OPOST); sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL); sbuf.c_cc[VMIN] = 1; sbuf.c_cc[VTIME] = 1; (void) ioctl (0, TCSETAW, (char *) &sbuf); uerasechar = osbuf.c_cc[VERASE]; ukillchar = osbuf.c_cc[VKILL]; #endif #ifdef SIGTSTP #ifndef USG (void) sigsetmask (1<<(SIGTSTP-1) | 1<<(SIGTTIN-1) | 1<<(SIGTTOU-1)); #endif #endif #ifdef TIOCGPGRP if (ioctl (0, TIOCGPGRP, (char *) &tpgrp) != 0) { (void) fprintf (stderr, TERM_C_NO_BATCH); exit (1); } #endif #ifdef SIGTSTP #ifdef TIOCPGRP if (tpgrp != getpgrp(0)) /* not in foreground */ { #ifndef USG (void) sigsetmask (1 << (SIGTSTP - 1) | 1 << (SIGTTIN - 1)); #endif (void) signal (SIGTTOU, SIG_DFL); (void) kill (0, SIGTTOU); /* job stops here waiting for SIGCONT */ goto retry; } #endif #endif #if !defined(TERMIOS) && !defined(USG) (void) ioctl (0, TIOCGETP, (char *) &osbuf); #ifdef TIOCGLTC (void) ioctl (0, TIOCGLTC, (char *) &oltc); #endif termchanged = 1; sbuf = osbuf; sbuf.sg_flags &= ~ECHO; sbuf.sg_flags |= TERM_MODE; (void) ioctl (0, TIOCSETP, (char *) &sbuf); uerasechar = sbuf.sg_erase; ukillchar = sbuf.sg_kill; #ifdef TIOCSLTC ltc = oltc; ltc.t_suspc = -1; (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif /* TERMIOS && USG */ if ((oldint = signal (SIGINT, SIG_IGN)) != SIG_IGN) (void) signal (SIGINT, done); if ((oldterm = signal (SIGTERM, SIG_IGN)) != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP #ifndef USG (void) sigsetmask (0); #endif if ((oldttin = signal (SIGTTIN, SIG_IGN)) != SIG_IGN) (void) signal (SIGTTIN, onstop); if ((oldttou = signal (SIGTTOU, SIG_IGN)) != SIG_IGN) (void) signal (SIGTTOU, onstop); if ((oldtstp = signal (SIGTSTP, SIG_IGN)) != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif if (ti) tputs (ti, 1, iputch); } /* ARGSUSED */ SIGNAL_TYPE done (signo) int signo; { if (tempfile[0] != '\0') (void) unlink (tempfile); if (termchanged) { if (te) tputs (te, 1, iputch); #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif } exit (0); } #ifdef SIGTSTP static SIGNAL_TYPE onstop (signo) int signo; { if (termchanged) { imove (li - 1, 0); if (te) tputs (te, 1, iputch); #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif } (void) fflush (stdout); (void) signal (signo, SIG_DFL); #ifndef USG (void) sigsetmask (sigblock (0) & ~(1 << (signo - 1))); #endif (void) kill (0, SIGSTOP); /* stop here until continued */ (void) signal (signo, onstop); if (termchanged) { #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif if (ti) tputs (ti, 1, iputch); } } #endif #ifndef USESH #define NEED_SHELLESCAPE #endif /* USESH */ #ifndef REGEX_LOOKUP #define NEED_SHELLESCAPE #endif /* REGEX_LOOKUP */ void stop () { #ifdef SIGTSTP onstop (SIGTSTP); #else /* for System V and MSDOS */ imove (li - 1, 0); (void) fflush (stdout); #ifdef NEED_SHELLESCAPE if (getenv ("SHELL")) (void) shellescape (getenv ("SHELL")); else (void) shellescape ("sh"); #else shescape (""); #endif /* NEED_SHELLESCAPE */ #endif /* SIGTSTP */ } /* Fork and exec a process. Returns NZ if command found, regardless of ** command's return status. Returns zero if command was not found. ** Doesn't use a shell. */ #ifdef NEED_SHELLESCAPE int shellescape (buf) char * buf; { char * argv[100]; char * cp = buf; int i = 0; int termstat; /* parse buf to args (destroying it in the process) */ while (*cp != '\0') { while (*cp == ' ' || *cp == '\t') ++cp; if (*cp == '\0') break; argv[i++] = cp; while (*cp != ' ' && *cp != '\t' && *cp != '\0') ++cp; if (*cp != '\0') *cp++ = '\0'; } argv[i] = NULL; #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif /* TIOCSLTC */ #endif (void) signal (SIGINT, oldint); (void) signal (SIGTERM, oldterm); #ifdef SIGTSTP (void) signal (SIGTTIN, oldttin); (void) signal (SIGTTOU, oldttou); (void) signal (SIGTSTP, oldtstp); #endif if ((i = fork ()) == 0) { (void) execvp (argv[0], (char **) argv); _exit (123); /* Command not found */ } else if (i > 0) { while (wait (&termstat) != i) ; termstat = (termstat == (123 << 8)) ? 0 : -1; } else { (void) printf (TERM_C_CANT_FORK, MAYBE_CR (stderr)); termstat = -1; /* Couldn't fork */ } if (oldint != SIG_IGN) (void) signal (SIGINT, done); if (oldterm != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP if (oldttin != SIG_IGN) (void) signal (SIGTTIN, onstop); if (oldttou != SIG_IGN) (void) signal (SIGTTOU, onstop); if (oldtstp != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif /* TIOCSLTC */ #endif if (termstat) { (void) printf (TERM_C_TYPE_SPACE); (void) fflush (stdout); #ifdef COMMANDFORSPACE i = GETKEYSTROKE (); if (i != ' ' && i != '\n' && i != '\r') (void) ungetc (i, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } return (termstat); } #endif /* NEED_SHELLESCAPE */ #ifdef USESH void shescape (buf) char * buf; { #ifdef COMMANDFORSPACE int ch; #endif #ifdef __DJGPP__ char curdir[MAXPATHLEN]; #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &osbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &osbuf); #else (void) ioctl (0, TIOCSETP, (char *) &osbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) &oltc); #endif #endif #ifdef __DJGPP__ /* Don't erase the screen if they want to run a single command, * otherwise they will be unable to see its output. */ if (buf[0] == '\0') djgpp_restore_screen (); /* Change and restore the current directory, because it's a global * notion on MS-DOS/MS-Windows. */ getcwd (curdir, MAXPATHLEN); #endif (void) signal (SIGINT, oldint); (void) signal (SIGTERM, oldterm); #ifdef SIGTSTP (void) signal (SIGTTIN, oldttin); (void) signal (SIGTTOU, oldttou); (void) signal (SIGTSTP, oldtstp); #endif (void) system (buf); if (oldint != SIG_IGN) (void) signal (SIGINT, done); if (oldterm != SIG_IGN) (void) signal (SIGTERM, done); #ifdef SIGTSTP if (oldttin != SIG_IGN) (void) signal (SIGTTIN, onstop); if (oldttou != SIG_IGN) (void) signal (SIGTTOU, onstop); if (oldtstp != SIG_IGN) (void) signal (SIGTSTP, onstop); #endif #ifdef __DJGPP__ if (buf[0] == '\0') djgpp_ispell_screen (); chdir (curdir); #endif #if defined(TERMIOS) (void) tcsetattr (0, TCSADRAIN, &sbuf); #elif defined(USG) (void) ioctl (0, TCSETAW, (char *) &sbuf); #else (void) ioctl (0, TIOCSETP, (char *) &sbuf); #ifdef TIOCSLTC (void) ioctl (0, TIOCSLTC, (char *) <c); #endif #endif (void) printf (TERM_C_TYPE_SPACE); (void) fflush (stdout); #ifdef COMMANDFORSPACE ch = GETKEYSTROKE (); if (ch != ' ' && ch != '\n' && ch != '\r') (void) ungetc (ch, stdin); #else while (GETKEYSTROKE () != ' ') ; #endif } #endif ispell-3.4.00/PaxHeaders.19408/fields.h0000644000000000000000000000007410233541507014254 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/fields.h0000444003214100001440000000430210233541507015313 0ustar00geofffaculty00000000000000#ifndef FIELDS_H_INCLUDED #define FIELDS_H_INCLUDED /* * $Id: fields.h,v 1.6 2005/04/26 22:40:07 geoff Exp $ * * $Log: fields.h,v $ * Revision 1.6 2005/04/26 22:40:07 geoff * Add double-inclusion protection. Include ispell.h for the definition of P. * * Revision 1.5 2005/04/14 14:38:23 geoff * Make maxf unsigned. * * Revision 1.4 1994/01/05 20:13:43 geoff * Add the maxf parameter * * Revision 1.3 1994/01/04 02:40:22 geoff * Add field_line_inc, field_field_inc, and the FLD_NOSHRINK flag. * * Revision 1.2 1993/09/09 01:11:12 geoff * Add a return value to fieldwrite and support for backquotes. * * Revision 1.1 1993/08/25 21:32:05 geoff * Initial revision * */ /* * Structures used by the field-access package. */ #include "ispell.h" typedef struct { unsigned int nfields; /* Number of fields in the line */ int hadnl; /* NZ if line ended with a newline */ char * linebuf; /* Malloc'ed buffer containing the line */ char ** fields; /* Malloc'ed array of pointers to fields */ } field_t; /* * Flags to fieldread and fieldmake */ #define FLD_RUNS 0x0001 /* Consider runs of delimiters same as one */ #define FLD_SNGLQUOTES 0x0002 /* Accept single-quoted fields */ #define FLD_BACKQUOTES 0x0004 /* Accept back-quoted fields */ #define FLD_DBLQUOTES 0x0008 /* Accept double-quoted fields */ #define FLD_SHQUOTES 0x0010 /* Use shell-style (embedded) quoting rules */ #define FLD_STRIPQUOTES 0x0020 /* Strip quotes from fields */ #define FLD_BACKSLASH 0x0040 /* Process C-style backslashes */ #define FLD_NOSHRINK 0x0080 /* Don't shrink memory before return */ #undef P #ifdef __STDC__ #define P(x) x #else /* __STDC__ */ #define P(x) () #endif /* __STDC__ */ extern field_t * fieldread P ((FILE * file, char * delims, int flags, unsigned int maxf)); extern field_t * fieldmake P ((char * line, int allocated, char * delims, int flags, unsigned int maxf)); extern int fieldwrite P ((FILE * file, field_t * fieldp, int delim)); extern void fieldfree P ((field_t * fieldp)); extern unsigned int field_field_inc; /* Increment for expanding fields */ extern unsigned int field_line_inc; /* Increment for expanding lines */ #endif /* FIELDS */ ispell-3.4.00/PaxHeaders.19408/exp_table.c0000644000000000000000000000007410252664501014745 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/exp_table.c0000444003214100001440000000621110252664501016005 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: exp_table.c,v 1.4 2005/06/11 22:43:53 geoff Exp $"; #endif /* * Note: this file was written by Edward Avis. Thus, it is not * distributed under the same license as the rest of ispell. */ /* * $Log: exp_table.c,v $ * Revision 1.4 2005/06/11 22:43:53 geoff * Don't try to malloc zero elements during initialization. * * Revision 1.3 2005/04/14 15:19:37 geoff * Get rid of a compiler warning. * * Revision 1.2 2005/04/14 14:38:23 geoff * Add RCS keywords. Reformat to be more consistent with ispell style. * This may also include some bug fixes; I unfortunately don't really * remember. * * Revision 1.1 2002/07/02 00:06:50 geoff * Initial revision */ #include "config.h" #include "ispell.h" #include "msgs.h" #include "proto.h" #include "exp_table.h" void exp_table_init (e, orig_word) struct exp_table * e; ichar_t * orig_word; { e->size = 0; e->max_size = 1; e->exps = malloc (e->max_size * sizeof (*e->exps)); e->flags = malloc (e->max_size * sizeof (*e->flags) * MASKSIZE); e->orig_word = orig_word; } const ichar_t * get_orig_word (e) const struct exp_table * e; { return e->orig_word; } const char * get_expansion (e, i) const struct exp_table * e; int i; { return e->exps[i]; } MASKTYPE get_flags (e, i) const struct exp_table * e; int i; { return e->flags[i * MASKSIZE]; } int num_expansions (e) const struct exp_table * e; { return e->size; } int add_expansion_copy (e, s, flags) struct exp_table * e; const char * s; MASKTYPE flags[]; { char * copy; int copy_size; int i; /* * Check not already there. */ for (i = 0; i < e->size; i++) { if (strcmp (e->exps[i], s) == 0) return 0; } /* * Grow the pointer table if necessary. */ if (e->size == e->max_size) { e->max_size *= 2; e->exps = realloc(e->exps, e->max_size * sizeof (*e->exps)); e->flags = realloc(e->flags, e->max_size * sizeof (*e->flags) * MASKSIZE); if (e->exps == NULL || e->flags == NULL) { (void) fprintf (stderr, TGOOD_C_NO_SPACE); exit (1); } } copy_size = strlen (s) + 1; copy = malloc (copy_size * sizeof copy[0]); if (copy == NULL) { (void) fprintf (stderr, TGOOD_C_NO_SPACE); exit (1); } strncpy (copy, s, copy_size); e->exps[e->size] = copy; BCOPY ((char *) &flags[0], &e->flags[e->size * MASKSIZE], MASKSIZE * sizeof flags[0]); ++e->size; return 1; } struct exp_table * exp_table_empty (e) struct exp_table * e; { int i; for (i = 0; i < e->size; i++) free (e->exps[i]); e->size = 0; return e; } void exp_table_dump (e) const struct exp_table * e; { int i; /* * BUGS: assumes 32-bit masks; assumes MASKSIZE = 1 */ fprintf(stderr, "original word: %s\n", ichartosstr(e->orig_word, 0)); fprintf(stderr, "%d expansions\n", e->size); for (i = 0; i < e->size; i++) fprintf(stderr, "flags %lx generate expansion %s\n", (long) e->flags[i * MASKSIZE], e->exps[i]); } ispell-3.4.00/PaxHeaders.19408/good.c0000644000000000000000000000007410227500137013726 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/good.c0000444003214100001440000002712410227500137014774 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: good.c,v 1.51 2005/04/14 14:38:23 geoff Exp $"; #endif /* * good.c - see if a word or its root word * is in the dictionary. * * Pace Willisson, 1983 * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * $Log: good.c,v $ * Revision 1.51 2005/04/14 14:38:23 geoff * Update license. * * Revision 1.50 2001/07/25 21:51:45 geoff * Minor license update. * * Revision 1.49 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.48 2000/08/22 10:52:25 geoff * Fix some compiler warnings. * * Revision 1.47 1999/01/18 03:28:33 geoff * Turn some char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.46 1999/01/07 01:22:36 geoff * Update the copyright. * * Revision 1.45 1997/12/03 06:08:38 geoff * In crunch mode, print the root capitalized if a prefix was stripped * from a capitalized word. For example, if the input word was * "Uncapitalized" in English, print "Capitalized/U". * * Revision 1.44 1997/12/02 06:24:42 geoff * Get rid of some compile options that really shouldn't be optional. * * Revision 1.43 1994/11/02 06:56:05 geoff * Remove the anyword feature, which I've decided is a bad idea. * * Revision 1.42 1994/10/25 05:45:59 geoff * Add support for an affix that will work with any word, even if there's * no explicit flag. * * Revision 1.41 1994/05/24 06:23:06 geoff * Let tgood decide capitalization questions, rather than doing it ourselves. * * Revision 1.40 1994/05/17 06:44:10 geoff * Add support for controlled compound formation and the COMPOUNDONLY * option to affix flags. * * Revision 1.39 1994/01/25 07:11:31 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include #include "config.h" #include "ispell.h" #include "proto.h" int good P ((ichar_t * word, int ignoreflagbits, int allhits, int pfxopts, int sfxopts)); int cap_ok P ((ichar_t * word, struct success * hit, int len)); static int entryhasaffixes P ((struct dent * dent, struct success * hit)); void flagpr P ((ichar_t * word, int preflag, int prestrip, int preadd, int sufflag, int sufadd)); static ichar_t * orig_word; int good (w, ignoreflagbits, allhits, pfxopts, sfxopts) ichar_t * w; /* Word to look up */ int ignoreflagbits; /* NZ to ignore affix flags in dict */ int allhits; /* NZ to ignore case, get every hit */ int pfxopts; /* Options to apply to prefixes */ int sfxopts; /* Options to apply to suffixes */ { ichar_t nword[INPUTWORDLEN + MAXAFFIXLEN]; register ichar_t * p; register ichar_t * q; register int n; register struct dent * dp; /* ** Make an uppercase copy of the word we are checking. */ for (p = w, q = nword; *p; ) *q++ = mytoupper (*p++); *q = 0; n = q - nword; numhits = 0; if (cflag) { (void) printf ("%s", (char *) ichartosstr (w, 0)); orig_word = w; } else if ((dp = lookup (nword, 1)) != NULL) { hits[0].dictent = dp; hits[0].prefix = NULL; hits[0].suffix = NULL; if (allhits || cap_ok (w, &hits[0], n)) numhits = 1; /* * If we're looking for compounds, and this root doesn't * participate in compound formation, undo the hit. */ if (compoundflag == COMPOUND_CONTROLLED && ((pfxopts | sfxopts) & FF_COMPOUNDONLY) != 0 && hashheader.compoundbit >= 0 && TSTMASKBIT (dp->mask, hashheader.compoundbit) == 0) numhits = 0; } if (numhits && !allhits) return 1; /* try stripping off affixes */ chk_aff (w, nword, n, ignoreflagbits, allhits, pfxopts, sfxopts); if (cflag) (void) putchar ('\n'); return numhits; } int cap_ok (word, hit, len) register ichar_t * word; register struct success * hit; int len; { register ichar_t * dword; register ichar_t * w; register struct dent * dent; ichar_t dentword[INPUTWORDLEN + MAXAFFIXLEN]; int preadd; int prestrip; int sufadd; ichar_t * limit; long thiscap; long dentcap; thiscap = whatcap (word); /* ** All caps is always legal, regardless of affixes. */ preadd = prestrip = sufadd = 0; if (thiscap == ALLCAPS) return 1; else if (thiscap == FOLLOWCASE) { /* Set up some constants for the while(1) loop below */ if (hit->prefix) { preadd = hit->prefix->affl; prestrip = hit->prefix->stripl; } else preadd = prestrip = 0; sufadd = hit->suffix ? hit->suffix->affl : 0; } /* ** Search the variants for one that matches what we have. Note ** that thiscap can't be ALLCAPS, since we already returned ** for that case. */ dent = hit->dictent; for ( ; ; ) { dentcap = captype (dent->flagfield); if (dentcap != thiscap) { if (dentcap == ANYCASE && thiscap == CAPITALIZED && entryhasaffixes (dent, hit)) return 1; } else /* captypes match */ { if (thiscap != FOLLOWCASE) { if (entryhasaffixes (dent, hit)) return 1; } else { /* ** Make sure followcase matches exactly. ** Life is made more difficult by the ** possibility of affixes. Start with ** the prefix. */ (void) strtoichar (dentword, dent->word, INPUTWORDLEN, 1); dword = dentword; limit = word + preadd; if (myupper (dword[prestrip])) { for (w = word; w < limit; w++) { if (mylower (*w)) goto doublecontinue; } } else { for (w = word; w < limit; w++) { if (myupper (*w)) goto doublecontinue; } } dword += prestrip; /* Do root part of word */ limit = dword + len - preadd - sufadd; while (dword < limit) { if (*dword++ != *w++) goto doublecontinue; } /* Do suffix */ dword = limit - 1; if (myupper (*dword)) { for ( ; *w; w++) { if (mylower (*w)) goto doublecontinue; } } else { for ( ; *w; w++) { if (myupper (*w)) goto doublecontinue; } } /* ** All failure paths go to "doublecontinue," ** so if we get here it must match. */ if (entryhasaffixes (dent, hit)) return 1; doublecontinue: ; } } if ((dent->flagfield & MOREVARIANTS) == 0) break; dent = dent->next; } /* No matches found */ return 0; } /* ** See if this particular capitalization (dent) is legal with these ** particular affixes. */ static int entryhasaffixes (dent, hit) register struct dent * dent; register struct success * hit; { if (hit->prefix && !TSTMASKBIT (dent->mask, hit->prefix->flagbit)) return 0; if (hit->suffix && !TSTMASKBIT (dent->mask, hit->suffix->flagbit)) return 0; return 1; /* Yes, these affixes are legal */ } /* * Print a word and its flag, making sure the case of the output matches * the case of the original found in "orig_word". */ void flagpr (word, preflag, prestrip, preadd, sufflag, sufadd) register ichar_t * word; /* (Modified) word to print */ int preflag; /* Prefix flag (if any) */ int prestrip; /* Lth of pfx stripped off orig_word */ int preadd; /* Length of prefix added to w */ int sufflag; /* Suffix flag (if any) */ int sufadd; /* Length of suffix added to w */ { register int i; /* Handy loop counter */ register ichar_t * origp; /* Pointer into orig_word */ int orig_len; /* Length of orig_word */ orig_len = icharlen (orig_word); /* * We refuse to print if the cases outside the modification * points don't match those just inside. This prevents things * like "OEM's" from being turned into "OEM/S" which expands * only to "OEM'S". But for prefix flags, we ignore the case of * the first character of the word, because capitalization of the * root is legal. */ if (preflag > 0) { origp = orig_word + preadd; if (myupper (*origp)) { for (origp = orig_word + 1; origp < orig_word + preadd; origp++) { if (mylower (*origp)) return; } } else { for (origp = orig_word + 1; origp < orig_word + preadd; origp++) { if (myupper (*origp)) return; } } } if (sufflag > 0) { origp = orig_word + orig_len - sufadd; if (myupper (origp[-1])) { for ( ; *origp != 0; origp++) { if (mylower (*origp)) return; } } else { origp = orig_word + orig_len - sufadd; for ( ; *origp != 0; origp++) { if (myupper (*origp)) return; } } } /* * The cases are ok. Put out the word, being careful that the * prefix/suffix cases match those in the original, and that the * unchanged characters from the original actually match it. */ (void) putchar (' '); origp = orig_word + preadd; if (myupper (*origp)) { for (i = prestrip; --i >= 0; ) (void) fputs (printichar ((int) *word++), stdout); } else { i = prestrip; if (i > 0 && myupper (orig_word[0])) { --i; (void) fputs (printichar ((int) mytoupper (*word++)), stdout); } while (--i >= 0) (void) fputs (printichar ((int) mytolower (*word++)), stdout); } i = orig_len - preadd - sufadd; if (prestrip == 0 && myupper (orig_word[0])) { --i; (void) fputs (printichar ((int) mytoupper (*origp++)), stdout); word++; } for ( ; --i >= 0; word++) (void) fputs (printichar ((int) *origp++), stdout); if (origp > orig_word) origp--; if (myupper (*origp)) (void) fputs ((char *) ichartosstr (word, 0), stdout); else { while (*word) { (void) fputs (printichar ((int) mytolower (*word++)), stdout); } } /* * Now put out the flags */ (void) putchar (hashheader.flagmarker); if (preflag > 0) (void) putchar (preflag); if (sufflag > 0) (void) putchar (sufflag); } ispell-3.4.00/PaxHeaders.19408/local.h.cygwin0000644000000000000000000000007410245122232015370 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/local.h.cygwin0000444003214100001440000000727010245122232016436 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.cygwin,v 1.1 2005/05/25 16:15:12 geoff Exp $ */ /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #define USG /* Define on System V or if term.c won't compile */ #undef NO_FCNTL_H /* Define if you get compile errors on fcntl.h */ #undef NO_MKSTEMP /* Define if you get compile or link errors */ #define EXEEXT ".exe" /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" /* Also define MAN45EXT if you don't like section 5 for file formats. */ /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/iwhich0000644000000000000000000000007410227505246014036 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/iwhich0000555003214100001440000000264410227505246015107 0ustar00geofffaculty00000000000000: Use /bin/sh # # $Id: iwhich,v 1.2 1995/10/11 02:31:58 geoff Exp $ # # Report which version of a command is in use. This version of # "which" doesn't handle shell aliases, but it makes up for that with # the "-a" (report all copies) switch and the fact that it returns a # nonzero shell status if the command isn't found. # USAGE='Usage: which [-a] command[s]' # # For each command, the full pathname of the version that will be # selected from $PATH is reported. If the -a switch is given, # versions in $PATH that are overridden by earlier $PATH entries will # also be reported. The exit status is nonzero if none of the # commands are found anywhere in $PATH. # # $Log: iwhich,v $ # Revision 1.2 1995/10/11 02:31:58 geoff # Work around a buggy version of Ultrix test # # Revision 1.1 1995/01/15 00:13:54 geoff # Initial revision # # opath=$PATH PATH=/bin:/usr/bin all=no while [ $# -gt 0 ] do case "$1" in -a) all=yes shift ;; -*) echo "$USAGE" 1>&2 exit 2 ;; *) break ;; esac done case $# in 0) echo "$USAGE" 1>&2 exit 2 ;; esac opath=`echo "$opath" | sed 's/^:/.:/ s/::/:.:/g s/:$/:./ s/:/ /g'` found=false for file do for i in $opath do if [ \( -x $i/$file \) -a \( ! -d $i/$file \) ] then echo $i/$file found=true case "$all" in no) break ;; esac fi done done if $found then exit 0 else exit 1 fi ispell-3.4.00/PaxHeaders.19408/version.h0000644000000000000000000000013212466001365014471 xustar0030 mtime=1423442677.817715322 30 atime=1423469128.798383192 30 ctime=1423469128.798383192 ispell-3.4.00/version.h0000444003214100001440000000663612466001365015551 0ustar00geofffaculty00000000000000#ifndef VERSION_H_INCLUDED #define VERSION_H_INCLUDED /* * Since the strings in this file are printed out when the "-v" switch is * given to ispell, you may want to translate them into your native language. * However, any translation of these strings MUST accurately preserve the * legal rights under international law; you may wish to consult a lawyer * about this since you will be responsible for the results of any * incorrect translation. */ static char * Version_ID[] = { "@(#) International Ispell Version 3.4.00 8 Feb 2015", "@(#) Copyright (c), 1983, by Pace Willisson", "@(#) International version Copyright (c) 1987, 1988, 1990-1995, 1999,", "@(#) 2001, 2002, 2005, 2015 by Geoff Kuenning, Claremont, CA.", "@(#) All rights reserved.", "@(#)", "@(#) The official ispell Web site is at:", "@(#)", "@(#) http://www.cs.hmc.edu/geoff/ispell.html", "@(#)", "@(#) You should always check that site to see whether you have the", "@(#) latest version of ispell.", "@(#)", "@(#) Report bugs to ispell-bugs@itcorp.com. Report Emacs-related bugs", "@(#) to ispell-el-bugs@itcorp.com.", "@(#)", "@(#) Redistribution and use in source and binary forms, with or without", "@(#) modification, are permitted provided that the following conditions", "@(#) are met:", "@(#)", "@(#) 1. Redistributions of source code must retain the above copyright", "@(#) notice, this list of conditions and the following disclaimer.", "@(#) 2. Redistributions in binary form must reproduce the above", "@(#) copyright notice, this list of conditions and the following", "@(#) disclaimer in the documentation and/or other materials provided", "@(#) with the distribution.", "@(#) 3. All modifications to the source code must be clearly marked as", "@(#) such. Binary redistributions based on modified source code", "@(#) must be clearly marked as modified versions in the documentation", "@(#) and/or other materials provided with the distribution.", "@(#) 4. The code that causes the 'ispell -v' command to display a", "@(#) prominent link to the official ispell Web site may not be", "@(#) removed.", "@(#) 5. The name of Geoff Kuenning may not be used to endorse or promote", "@(#) products derived from this software without specific prior", "@(#) written permission.", "@(#)", "@(#) THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS", "@(#) IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT", "@(#) LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS", "@(#) FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF", "@(#) KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,", "@(#) INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES", "@(#) (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR", "@(#) SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)", "@(#) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,", "@(#) STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)", "@(#) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED", "@(#) OF THE POSSIBILITY OF SUCH DAMAGE.", NULL }; static char RCS_Version_ID[] = "$Id: version.h,v 1.60 2015-02-08 16:44:37-08 geoff Exp $"; #endif /* VERSION_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/ispell.5X0000644000000000000000000000007410231731772014346 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/ispell.5X0000444003214100001440000007247610231731772015426 0ustar00geofffaculty00000000000000.\" .\" $Id: ispell.5X,v 1.35 2005/04/21 14:08:58 geoff Exp $ .\" .\" Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All modifications to the source code must be clearly marked as .\" such. Binary redistributions based on modified source code .\" must be clearly marked as modified versions in the documentation .\" and/or other materials provided with the distribution. .\" 4. The code that causes the 'ispell -v' command to display a prominent .\" link to the official ispell Web site may not be removed. .\" 5. The name of Geoff Kuenning may not be used to endorse or promote .\" products derived from this software without specific prior .\" written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" $Log: ispell.5X,v $ .\" Revision 1.35 2005/04/21 14:08:58 geoff .\" Put the correct section ID in the title. .\" .\" Revision 1.34 2005/04/14 14:38:23 geoff .\" Update license. .\" .\" Revision 1.33 2001/07/25 21:51:46 geoff .\" Minor license update. .\" .\" Revision 1.32 2001/07/23 20:24:03 geoff .\" Update the copyright and the license. .\" .\" Revision 1.31 1999/01/07 01:22:56 geoff .\" Update the copyright. .\" .\" Revision 1.30 1995/08/05 23:19:39 geoff .\" Fix a place where a line was eaten because it was seen as an nroff .\" command. .\" .\" Revision 1.29 1995/01/08 23:23:45 geoff .\" Fix a tiny typo. .\" .\" Revision 1.28 1994/11/02 06:56:07 geoff .\" Remove the anyword feature, which I've decided is a bad idea. .\" .\" Revision 1.27 1994/10/26 05:12:31 geoff .\" Document the new compound-word options for German and Scandinavian .\" languages, and the always-OK flag for French. .\" .\" Revision 1.26 1994/05/25 04:29:19 geoff .\" Document the new restriction that boundary characters must appear .\" singly. .\" .\" Revision 1.25 1994/01/25 07:11:42 geoff .\" Get rid of all old RCS log lines in preparation for the 3.1 release. .\" .\" .TH ISPELL !!MAN45SECT!! local .SH NAME ispell \- format of ispell dictionaries and affix files .SH DESCRIPTION .PP .IR Ispell (1) requires two files to define the language that it is spell-checking. The first file is a dictionary containing words for the language, and the second is an "affix" file that defines the meaning of special flags in the dictionary. The two files are combined by .I buildhash (see .IR ispell "(1))" and written to a hash file which is not described here. .PP A raw .I ispell dictionary (either the main dictionary or your own personal dictionary) contains a list of words, one per line. Each word may optionally be followed by a slash ("/") and one or more flags, which modify the root word as explained below. Depending on the options with which .I ispell was built, case may or may not be significant in either the root word or the flags, independently. Specifically, if the compile-time option CAPITALIZATION is defined, case is significant in the root word; if not, case is ignored in the root word. If the compile-time option MASKBITS is set to a value of 32, case is ignored in the flags; otherwise case is significant in the flags. Contact your system administrator or .I ispell maintainer for more information (or use the .B \-vv flag to find out). The dictionary should be sorted with the .B \-f flag of .IR sort (1) before the hash file is built; this is done automatically by .IR munchlist (1), which is the normal way of building dictionaries. .PP If the dictionary contains words that have string characters (see the affix-file documentation below), they must be written in the format given by the .B defstringtype statement in the affix file. This will be the case for most non-English languages. Be careful to use this format, rather than that of your favorite formatter, when adding words to a dictionary. (If you add words to your personal dictionary during an .I ispell session, they will automatically be converted to the correct format. This feature can be used to convert an entire dictionary if necessary:) .PP .RS .nf echo qqqqq > dummy.dict buildhash dummy.dict \fIaffix-file\fP dummy.hash awk '{print "*"}END{print "#"}' \fIold-dict-file\fP \e | ispell -a -T \fIold-dict-string-type\fP \e -d ./dummy.hash -p ./\fInew-dict-file\fP \e > /dev/null rm dummy.* .fi .RE .PP The case of the root word controls the case of words accepted by .IR ispell , as follows: .IP (1) If the root word appears only in lower case (e.g., .IR bob ")," it will be accepted in lower case, capitalized, or all capitals. .IP (2) If the root word appears capitalized (e.g., .IR Robert ")," it will not be accepted in all-lower case, but will be accepted capitalized or all in capitals. .IP (3) If the root word appears all in capitals (e.g., .IR UNIX ")," it will only be accepted all in capitals. .IP (4) If the root word appears with a "funny" capitalization (e.g., .IR ITCorp ")," a word will be accepted only if it follows that capitalization, or if it appears all in capitals. .IP (5) More than one capitalization of a root word may appear in the dictionary. Flags from different capitalizations are combined by OR-ing them together. .PP Redundant capitalizations (e.g., .I bob and .IR Bob ")" will be combined by .I buildhash and by .I ispell (for personal dictionaries), and can be removed from a raw dictionary by .IR munchlist . .PP For example, the dictionary: .PP .RS .nf bob Robert UNIX ITcorp ITCorp .fi .RE .PP will accept .IR bob , .IR Bob , .IR BOB , .IR Robert , .IR ROBERT , .IR UNIX , .IR ITcorp , .IR ITCorp , and .IR ITCORP , and will reject all others. Some of the unacceptable forms are .IR bOb , .IR robert , .IR Unix , and .IR ItCorp . .PP As mentioned above, root words in any dictionary may be extended by flags. Each flag is a single alphabetic character, which represents a prefix or suffix that may be added to the root to form a new word. For example, in an English dictionary the .B D flag can be added to .I bathe to make .IR bathed . Since flags are represented as a single bit in the hashed dictionary, this results in significant space savings. The .I munchlist script will reduce an existing raw dictionary by adding flags when possible. .PP When a word is extended with an affix, the affix will be accepted only if it appears in the same case as the initial (prefix) or final (suffix) letter of the word. Thus, for example, the entry .I UNIX/M in the main dictionary .RB "(" M means add an apostrophe and an "s" to make a possessive) would accept .I "UNIX'S" but would reject .IR "UNIX's" . If .I "UNIX's" is legal, it must appear as a separate dictionary entry, and it will not be combined by .IR munchlist . (In general, you don't need to worry about these things; .I munchlist guarantees that its output dictionary will accept the same set of words as its input, so all you have to do is add words to the dictionary and occasionally run munchlist to reduce its size). .PP As mentioned, the affix definition file describes the affixes associated with particular flags. It also describes the character set used by the language. .PP Although the affix-definition grammar is designed for a line-oriented layout, it is actually a free-format yacc grammar and can be laid out weirdly if you want. Comments are started by a pound (sharp) sign (#), and continue to the end of the line. Backslashes are supported in the usual fashion (\fB\e\fInnn\fR, plus specials .BR \en , .BR \er , .BR \et , .BR \ev , .BR \ef , .BR \eb , and the new hex format \fB\ex\fInn\fR). Any character with special meaning to the parser can be changed to an uninterpreted token by backslashing it; for example, you can declare a flag named 'asterisk' or 'colon' with .I "flag \e*:" or .IR "flag \e::" . .PP The grammar will be presented in a top-down fashion, with discussion of each element. An affix-definition file must contain exactly one table: .PP .RS .nf \fItable\fR : [\fIheaders\fR] [\fIprefixes\fR] [\fIsuffixes\fR] .fi .RE .PP At least one of .I prefixes and .I suffixes is required. They can appear in either order. .PP .RS .nf \fIheaders\fR : [ \fIoptions\fR ] \fIchar-sets\fR .fi .RE .PP The headers describe options global to this dictionary and language. These include the character sets to be used and the formatter, and the defaults for certain .I ispell flags. .PP .RS .nf \fIoptions\fR : { \fIfmtr-stmt\fR | \fIopt-stmt\fR | \fIflag-stmt\fR | \fInum-stmt\fR } .fi .RE .PP The options statements define the defaults for certain ispell flags and for the character sets used by the formatters. .PP .RS .nf \fIfmtr-stmt\fR : { \fInroff-stmt\fR | \fItex-stmt\fR } .fi .RE .PP A .I fmtr-stmt describes characters that have special meaning to a formatter. Normally, this statement is not necessary, but some languages may have preempted the usual defaults for use as language-specific characters. In this case, these statements may be used to redefine the special characters expected by the formatter. .PP .RS .nf \fInroff-stmt\fR : { \fBnroffchars\fR | \fBtroffchars\fR } \fIstring\fR .fi .RE .PP The .B nroffchars statement allows redefinition of certain .I nroff control characters. The string given must be exactly five characters long, and must list substitutions for the left and right parentheses ("()") , the period ("."), the backslash ("\e"), and the asterisk ("*"). (The right parenthesis is not currently used, but is included for completeness.) For example, the statement: .PP .RS .nf \fBnroffchars\fR {}.\e\e* .fi .RE .PP would replace the left and right parentheses with left and right curly braces for purposes of parsing .IR nroff / troff strings, with no effect on the others (admittedly a contrived example). Note that the backslash is escaped with a backslash. .PP .RS .nf \fItex-stmt\fR : { \fBTeXchars\fR | \fBtexchars\fR } \fIstring\fR .fi .RE .PP The .B TeXchars statement allows redefinition of certain TeX/LaTeX control characters. The string given must be exactly thirteen characters long, and must list substitutions for the left and right parentheses ("()") , the left and right square brackets ("[]"), the left and right curly braces ("{}"), the left and right angle brackets ("<>"), the backslash ("\e"), the dollar sign ("$"), the asterisk ("*"), the period or dot ("."), and the percent sign ("%"). For example, the statement: .PP .RS .nf \fBtexchars\fR ()\e[\|]<\e><\e>\e\e$*.% .fi .RE .PP would replace the functions of the left and right curly braces with the left and right angle brackets for purposes of parsing TeX/LaTeX constructs, while retaining their functions for the .I tib bibliographic preprocessor. Note that the backslash, the left square bracket, and the right angle bracket must be escaped with a backslash. .PP .RS .nf \fIopt-stmt\fR : { \fIcmpnd-stmt\fR | \fIaff-stmt\fR } .sp \fIcmpnd-stmt\fR : \fBcompoundwords\fR \fIcompound-opt\fR .sp \fIaff-stmt\fR : \fBallaffixes\fR \fIon-or-off\fR .sp \fIon-or-off\fR : { \fBon\fR | \fBoff\fR } .sp \fIcompound-opt\fR : { \fIon-or-off\fR | \fBcontrolled\fR \fIcharacter\fR } .fi .RE .PP An .I opt-stmt controls certain ispell defaults that are best made language-specific. The .B allaffixes statement controls the default for the .B \-P and .B \-m options to .I ispell. If .B allaffixes is turned .B off (the default), .I ispell will default to the behavior of the .I \-P flag: root/affix suggestions will only be made if there are no "near misses". If .B allaffixes is turned .BR on , .I ispell will default to the behavior of the .I \-m flag: root/affix suggestions will always be made. The .B compoundwords statement controls the default for the .B \-B and .B \-C options to .I ispell. If .B compoundwords is turned .B off (the default), .I ispell will default to the behavior of the .I \-B flag: run-together words will be reported as errors. If .B compoundwords is turned .BR on , .I ispell will default to the behavior of the .I \-C flag: run-together words will be considered as compounds if both are in the dictionary. This is useful for languages such as German and Norwegian, which form large numbers of compound words. Finally, if .B compoundwords is set to .IR controlled , only words marked with the flag indicated by .I character (which should not be otherwise used) will be allowed to participate in compound formation. Because this option requires the flags to be specified in the dictionary, it is not available from the command line. .PP .RS .nf \fIflag-stmt\fR : \fBflagmarker\fR \fIcharacter\fR .fi .RE .PP The .B flagmarker statement describes the character which is used to separate affix flags from the root word in a raw dictionary file. This must be a character which is not found in any word (including in string characters; see below). The default is "/" because this character is not normally used to represent special characters in any language. .PP .RS .nf \fInum-stmt\fR : \fBcompoundmin\fR \fIdigit\fR .fi .RE .PP The .B compoundmin statement controls the length of the two components of a compound word. This only has an effect if .B compoundwords is turned .B on or if the .B \-C flag is given to .IR ispell . In that case, only words at least as long as the given minimum will be accepted as components of a compound. The default is 3 characters. .PP .RS .nf \fIchar-sets\fR : \fInorm-sets\fR [ \fIalt-sets\fR ] .fi .RE .PP The character-set section describes the characters that can be part of a word, and defines their collating order. There must always be a definition of "normal" character sets; in addition, there may be one or more partial definitions of "alternate" sets which are used with various text formatters. .PP .RS .nf \fInorm-sets\fR : [ \fIdeftype\fR ] charset-group .fi .RE .PP A "normal" character set may optionally begin with a definition of the file suffixes that make use of this set. Following this are one or more character-set declarations. .PP .RS .nf \fIdeftype\fR : \fBdefstringtype\fR \fIname\fR \fIdeformatter\fR \fIsuffix\fR* .fi .RE .PP The .B defstringtype declaration gives a list of file suffixes which should make use of the default string characters defined as part of the base character set; it is only necessary if string characters are being defined. The .I name parameter is a string giving the unique name associated with these suffixes; often it is a formatter name. If the formatter is a member of the troff family, "nroff" should be used for the name associated with the most popular macro package; members of the TeX family should use "tex". Other names may be chosen freely, but they should be kept simple, as they are used in .I ispell 's .B \-T switch to specify a formatter type. The .I deformatter parameter specifies the deformatting style to use when processing files with the given suffixes. Currently, this must be either .B tex or .BR nroff . The .I suffix parameters are a whitespace-separated list of strings which, if present at the end of a filename, indicate that the associated set of string characters should be used by default for this file. For example, the suffix list for the troff family typically includes suffixes such as ".ms", ".me", ".mm", etc. .PP .RS .nf \fIcharset-group\fR : { \fIchar-stmt\fR | \fIstring-stmt\fR | \fIdup-stmt\fR}* .fi .RE .PP A .I char-stmt describes single characters; a .I string-stmt describes characters that must appear together as a string, and which usually represent a single character in the target language. Either may also describe conversion between upper and lower case. A .I dup-stmt is used to describe alternate forms of string characters, so that a single dictionary may be used with several formatting programs that use different conventions for representing non-ASCII characters. .PP .RS .nf \fIchar-stmt\fR : \fBwordchars\fR \fIcharacter-range\fR | \fBwordchars\fR \fIlowercase-range\fR \fIuppercase-range\fR | \fBboundarychars\fR \fIcharacter-range\fR | \fBboundarychars\fR \fIlowercase-range\fR \fIuppercase-range\fR \fIstring-stmt\fR : \fBstringchar\fR \fIstring\fR | \fBstringchar\fR \fIlowercase-string\fR \fIuppercase-string\fR .fi .RE .PP Characters described with the .B boundarychars statement are considered part of a word only if they appear singly, embedded between characters declared with the .B wordchars or .B stringchar statements. For example, if the hyphen is a boundary character (useful in French), the string "foo-bar" would be a single word, but "-foo" would be the same as "foo", and "foo--bar" would be two words separated by non-word characters. .PP If two ranges or strings are given in a .I char-stmt or .IR string-stmt , the first describes characters that are interpreted as lowercase and the second describes uppercase. In the case of a .B stringchar statement, the two strings must be of the same length. Also, in a .B stringchar statement, the actual strings may contain both uppercase and characters themselves without difficulty; for instance, the statement .PP .RS .nf stringchar "\e\e*(sS" "\e\e*(Ss" .fi .RE .PP is legal and will not interfere with (or be interfered with by) other declarations of of "s" and "S" as lower and upper case, respectively. .PP A final note on string characters: some languages collate certain special characters as if they were strings. For example, the German "a-umlaut" is traditionally sorted as if it were "ae". Ispell is not capable of this; each character must be treated as an individual entity. So in certain cases, ispell will sort a list of words into a different order than the standard "dictionary" order for the target language. .PP .RS .nf \fIalt-sets\fR : \fIalttype\fR [ \fIalt-stmt\fR* ] .fi .RE .PP Because different formatters use different notations to represent non-ASCII characters, .I ispell must be aware of the representations used by these formatters. These are declared as alternate sets of string characters. .PP .RS .nf \fIalttype\fR : \fBaltstringtype\fR \fIname\fR \fIsuffix\fR* .fi .RE .PP The .B altstringtype statement introduces each set by declaring the associated formatter name and filename suffix list. This name and list are interpreted exactly as in the .B defstringtype statement above. Following this header are one or more \fIalt-stmt\fRs which declare the alternate string characters used by this formatter. .PP .RS .nf \fIalt-stmt\fR : \fBaltstringchar\fR \fIalt-string\fR \fIstd-string\fR .fi .RE .PP The .I altstringchar statement describes alternate representations for string characters. For example, the \-mm macro package of .I troff represents the German "a-umlaut" as .IR a\e*: , while .I TeX uses the sequence \fI\e"a\fR. If the .I troff versions are declared as the standard versions using .BR stringchar , the .I TeX versions may be declared as alternates by using the statement .PP .RS .nf altstringchar \e\e\e"a a\e\e*\: .fi .RE .PP When the .B altstringchar statement is used to specify alternate forms, all forms for a particular formatter must be declared together as a group. Also, each formatter or macro package must provide a complete set of characters, both upper- and lower-case, and the character sequences used for each formatter must be completely distinct. Character sequences which describe upper- and lower-case versions of the same printable character must also be the same length. It may be necessary to define some new macros for a given formatter to satisfy these restrictions. (The current version of .I buildhash does not enforce these restrictions, but failure to obey them may result in errors being introduced into files that are processed with .IR ispell .) .PP An important minor point is that .I ispell assumes that all characters declared as .B wordchars or .B boundarychars will occupy exactly one position on the terminal screen. .PP A single character-set statement can declare either a single character or a contiguous range of characters. A range is given as in egrep and the shell: [a-z] means lowercase alphabetics; [^a-z] means all but lowercase, etc. All character-set statements are combined (unioned) to produce the final list of characters that may be part of a word. The collating order of the characters is defined by the order of their declaration; if a range is used, the characters are considered to have been declared in ASCII order. Characters that have case are collated next to each other, with the uppercase character first. .PP The character-declaration statements have a rather strange behavior caused by its need to match each lowercase character with its uppercase equivalent. In any given .B wordchars or .B boundarychars statement, the characters in each range are first sorted into ASCII collating sequence, then matched one-for-one with the other range. (The two ranges must have the same number of characters). Thus, for example, the two statements: .PP .RS .nf \fBwordchars\fP [aeiou] [AEIOU] \fBwordchars\fP [aeiou] [UOIEA] .fi .RE .PP would produce exactly the same effect. To get the vowels to match up "wrong", you would have to use separate statements: .PP .RS .nf \fBwordchars\fP a U \fBwordchars\fP e O \fBwordchars\fP i I \fBwordchars\fP o E \fBwordchars\fP u A .fi .RE .PP which would cause uppercase 'e' to be 'O', and lowercase 'O' to be 'e'. This should normally be a problem only with languages which have been forced to use a strange ASCII collating sequence. If your uppercase and lowercase letters both collate in the same order, you shouldn't have to worry about this "feature". .PP The prefixes and suffixes sections have exactly the same syntax, except for the introductory keyword. .PP .RS .nf \fIprefixes\fR : \fBprefixes\fI flagdef\fR* \fIsuffixes\fR : \fBsuffixes\fI flagdef\fR* \fIflagdef\fR : \fBflag\fR [\fB*\fR|\fB~\fR] \fIchar\fB : \fIrepl\fR* .fi .RE .PP A prefix or suffix table consists of an introductory keyword and a list of flag definitions. Flags can be defined more than once, in which case the definitions are combined. Each flag controls one or more .IR repl s (replacements) which are conditionally applied to the beginnings or endings of various words. .PP Flags are named by a single character .IR char . Depending on a configuration option, this character can be either any uppercase letter (the default configuration) or any 7-bit ASCII character. Most languages should be able to get along with just 26 flags. .PP A flag character may be prefixed with one or more option characters. (If you wish to use one of the option characters as a flag character, simply enclose it in double quotes.) .PP The asterisk (\fB*\fP) option means that this flag participates in .I cross-product formation. This only matters if the file contains both prefix and suffix tables. If so, all prefixes and suffixes marked with an asterisk will be applied in all cross-combinations to the root word. For example, consider the root .I fix with prefixes .I pre and .IR in , and suffixes .I es and .IR ed . If all flags controlling these prefixes and suffixes are marked with an asterisk, then the single root .I fix would also generate .IR prefix , .IR prefixes , .IR prefixed , .IR infix , .IR infixes , .IR infixed , .IR fix , .IR fixes , and .IR fixed . Cross-product formation can produce a large number of words quickly, some of which may be illegal, so watch out. If cross-products produce illegal words, .I munchlist will not produce those flag combinations, and the flag will not be useful. .PP .RS .nf \fIrepl\fR : \fIcondition\fR* \fB>\fR [ \fB- \fIstrip-string \fB,\fR ] \fIappend-string\fR .fi .RE .PP The \fB~\fR option specifies that the associated flag is only active when a compound word is being formed. This is useful in a language like German, where the form of a word sometimes changes inside a compound. .PP A .I repl is a conditional rule for modifying a root word. Up to 8 .I conditions may be specified. If the .I conditions are satisfied, the rules on the right-hand side of the .I repl are applied, as follows: .IP (1) If a strip-string is given, it is first stripped from the beginning or ending (as appropriate) of the root word. .IP (2) Then the append-string is added at that point. .PP For example, the .I condition .B . means "any word", and the .I condition .B Y means "any word ending in Y". The following (suffix) replacements: .PP .RS .nf \&. > MENT Y > -Y,IES .fi .RE .PP would change .I induce to .I inducement and .I fly to .IR flies . (If they were controlled by the same flag, they would also change .I fly to .IR flyment , which might not be what was wanted. .I Munchlist can be used to protect against this sort of problem; see the command sequence given below.) .PP No matter how much you might wish it, the strings on the right must be strings of specific characters, not ranges. The reasons are rooted deeply in the way .I ispell works, and it would be difficult or impossible to provide for more flexibility. For example, you might wish to write: .PP .RS .nf [EY] > -[EY],IES .fi .RE .PP This will not work. Instead, you must use two separate rules: .PP .RS .nf E > -E,IES Y > -Y,IES .fi .RE .PP The application of .IR repl s can be restricted to certain words with .IR conditions : .PP .RS .nf \fIcondition\fR : { \fB.\fR | \fIcharacter\fR | \fIrange\fR } .fi .RE .PP A .I condition is a restriction on the characters that adjoin, and/or are replaced by, the right-hand side of the .IR repl . Up to 8 .I conditions may be given, which should be enough context for anyone. The right-hand side will be applied only if the .I conditions in the .I repl are satisfied. The .I conditions also implicitly define a length; roots shorter than the number of .I conditions will not pass the test. (As a special case, a .I condition of a single dot "." defines a length of zero, so that the rule applies to all words indiscriminately). This length is independent of the separate test that insists that all flags produce an output word length of at least four. .PP .I Conditions that are single characters should be separated by white space. For example, to specify words ending in "ED", write: .PP .RS .nf E D > -ED,ING # As in covered > covering .fi .RE .PP If you write: .PP .RS .nf ED > -ED,ING .fi .RE .PP the effect will be the same as: .PP .RS .nf [ED] > -ED,ING .fi .RE .PP As a final minor, but important point, it is sometimes useful to rebuild a dictionary file using an incompatible suffix file. For example, suppose you expanded the "R" flag to generate "er" and "ers" (thus making the Z flag somewhat obsolete). To build a new dictionary .I newdict that, using .IR newaffixes , will accept exactly the same list of words as the old list .I olddict did using .IR oldaffixes , the .B \-c switch of .I munchlist is useful, as in the following example: .PP .RS .nf $ munchlist -c oldaffixes -l newaffixes olddict > newdict .fi .RE .PP If you use this procedure, your new dictionary will always accept the same list the original did, even if you badly screwed up the affix file. This is because .I munchlist compares the words generated by a flag with the original word list, and refuses to use any flags that generate illegal words. (But don't forget that the .I munchlist step takes a long time and eats up temporary file space). .SH EXAMPLES .PP As an example of conditional suffixes, here is the specification of the .B S flag from the English affix file: .PP .RS .nf flag *S: [^AEIOU]Y > -Y,IES # As in imply > implies [AEIOU]Y > S # As in convey > conveys [SXZH] > ES # As in fix > fixes [^SXZHY] > S # As in bat > bats .fi .RE .PP The first line applies to words ending in Y, but not in vowel-Y. The second takes care of the vowel-Y words. The third then handles those words that end in a sibilant or near-sibilant, and the last picks up everything else. .PP Note that the .I conditions are written very carefully so that they apply to disjoint sets of words. In particular, note that the fourth line excludes words ending in Y as well as the obvious SXZH. Otherwise, it would convert "imply" into "implys". .PP Although the English affix file does not do so, you can also have a flag generate more than one variation on a root word. For example, we could extend the English "R" flag as follows: .PP .RS .nf flag *R: E > R # As in skate > skater E > RS # As in skate > skaters [^AEIOU]Y > -Y,IER # As in multiply > multiplier [^AEIOU]Y > -Y,IERS # As in multiply > multipliers [AEIOU]Y > ER # As in convey > conveyer [AEIOU]Y > ERS # As in convey > conveyers [^EY] > ER # As in build > builder [^EY] > ERS # As in build > builders .fi .RE .PP This flag would generate both "skater" and "skaters" from "skate". This capability can be very useful in languages that make use of noun, verb, and adjective endings. For instance, one could define a single flag that generated all of the German "weak" verb endings. .SH "SEE ALSO" ispell(1) ispell-3.4.00/PaxHeaders.19408/local.h.generic0000644000000000000000000000007410233541510015505 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/local.h.generic0000444003214100001440000000724310233541510016553 0ustar00geofffaculty00000000000000#ifndef LOCAL_H_INCLUDED #define LOCAL_H_INCLUDED /* * $Id: local.h.generic,v 1.24 2005/04/26 22:40:08 geoff Exp $ */ /* * Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This file is a sample local.h file. It shows what I believe nearly every * site will want to include in their local.h. You will probably want to * expand this file; see "config.X" to learn of #defines that you might * like to add to. */ /* * WARNING WARNING WARNING * * This file is *NOT* a normal C header file! Although it uses C * syntax and is included in C programs, it is also processed by shell * scripts that are very stupid about format. * * Do not try to use #if constructs to configure this file for more * than one configuration. Do not place whitespace after the "#" in * "#define". Do not attempt to disable lines by commenting them out. * Do not use backslashes to reduce the length of long lines. * None of these things will work the way you expect them to. * * WARNING WARNING WARNING */ #define MINIMENU /* Display a mini-menu at the bottom of the screen */ #undef USG /* Define on System V or if term.c won't compile */ #undef NO_FCNTL_H /* Define if you get compile errors on fcntl.h */ #undef NO_MKSTEMP /* Define if you get compile or link errors */ /* * Important directory paths. If you change MAN45DIR from man5 to * something else, you probably also want to set MAN45SECT and * MAN45EXT (but not if you keep the man pages in section 5 and just * store them in a different place). */ #define BINDIR "/usr/local/bin" #define LIBDIR "/usr/local/lib" #define MAN1DIR "/usr/local/man/man1" #define MAN45DIR "/usr/local/man/man5" /* Also define MAN45EXT if you don't like section 5 for file formats. */ /* * Place any locally-required #include statements here */ #endif /* LOCAL_H_INCLUDED */ ispell-3.4.00/PaxHeaders.19408/CHANGES0000644000000000000000000000013212466065072013633 xustar0030 mtime=1423469114.465334707 30 atime=1423469128.796383183 30 ctime=1423469128.796383183 ispell-3.4.00/CHANGES0000444003214100001440000002101412466065072014676 0ustar00geofffaculty00000000000000Version 3.4.00 ============== - The english.5 manual page has been dropped from the distribution; the english.aff file provides superior documentation (and in any case, most people will use munchlist to apply affixes). - Ispell now supports systems (BSD) that foolish discarded backwards compatibility and insist on using termios. - A function (getline) has been renamed in correct.c to solve compilation problems on some systems. - The manual page now correctly identifies the ispell version that it describes. - It is now possible to insert the ispell version information into shell scripts via the Makefile. - An error has been corrected in the English affix files that caused certain words ending in "th" to be pluralized incorrectly. The dictionaries have been updated to ensure that no incorrect plurals have crept in. - The personal dictionary is now written in a stable order when there are multiple variant capitalizations of a word. - The security of temporary files has been improved on systems that don't have the "mktemp" command. - The deformatters makefile has been changed to be compatible with older versions of make. - A bug in TeX deformatting has been corrected. Previously, two adjacent math-mode environments introduced with dollar signs, such as $a=b$$c=d$, would cause ispell to lose track of whether it was in math mode. - The Makefile now supports a DESTDIR installation prefix (patch from Petter Reinholdtsen) - The American and British Makefiles have been simplified to ensure that dictionaries are always built with the lastest information. Version 3.3.02 ============== - A Makefile bug has been corrected which caused the default hash file to be created under the wrong name. If you installed 3.3.01, you should remove the file /usr/local/lib/ispell/english (or whatever your default language is, and in the appropriate directory) to clean up from the effects of this bug. - A bug has been corrected that caused ispell to allocate space for zero elements when initializing the expansion tables. - Hash files are now installed in reverse order of how they are listed in LANGUAGES. As a result, the default american or british hash file is now that first listed in LANGUAGES, rather than the last. - A misspelling in config.X has been corrected. This would only have affected Windows systems that didn't use the supplied local.h files. - EXEEXT is now printed by "ispell -vv". - The local.h.macos file now correctly leaves USG undefined. - There is now a local.h.cygwin file. Version 3.3.01 ============== - The default dictionary is now the first dictionary defined in LANGUAGES. It is no longer necessary to define MASTERHASH, DEFHASH, and DEFLANG. However, if you define those variables there, your definitions will be respected. - Count files are no longer used for dictionaries; this corrects problems with hash table overflows for some users who build multiple dictionaries. - If there is a directory named ~/.ispell_logs, ispell in command-line mode will create logs of your spelling corrections there. These logs may be useful in identifying your common errors. Someday, they may also be used for research into better methods of spelling correction. - A bug has been fixed that caused installation to fail because it referred to the nonexistent file "fixispell-a". - The pc/local.* files have been updated to choose consistent hash-file names. - A tiny portability problem in ispell.1X has been corrected. - DJGPP updates from Eli Zaretskii : * deformatters/Makefile (PROGRAMS): Use $EXEEXT. * config.X (LINK): Define only if undefined. (EXEXT): New variable. * Makefile (install-basic, install-dictbuild): Use $$EXEEXT for systems where executable files have special extensions. (install-deformatters): Run config.sh and pass EXEEXT to sub-Make. (config.sh): Add EXEEXT to the list of variables put into config.sh. * pc/make-dj.bat: Sync with the new files and build commands. * pc/makeemx.bat: Ditto. * pc/djterm.c (tputs, tgetent): Fix return value according to prototypes on proto.h. * pc/cfglang.sed (PATH_SEPARATOR): Set to ":", since english/Makefile prepends to PATH using the ":" separator. * pc/README: Update DJGPP repository URL, versions of utilities, and other relevant information. * pc/local.djgpp: Update Eli Zaretskii's email address. (LINK): Set to "cp -p". (MAN4DIR): Delete. (MAN45DIR): New; define to point to DJGPP's man5. (INSTALL): Define to invoke `ginstall'. (OPTIONVAR, LIBRARYVAR): Remove, they are handled by config.X. (EXEEXT): New; define to ".exe". - Constructed files (config.sh and defhash.h) now depend on the Makefile, since changes in the latter often affect the contents of the former. This is primarily of importance to the developer. Version 3.3.00 ============== - Item 4 in the license, which some people found objectionable, has been modified. - Ispell and the scripts now handle temporary files securely. - Sample local.h files are now distributed for several popular systems. - Support has been added for compiling under DOS/Windows. See pc/README for information. Note that Windows is still an unsupported operating system because I don't have a Windows development environment. I will happily accept patches to correct problems under Windows, but cannot solve bugs myself. - External deformatters now work. - The two supplied deformatters have been renamed to defmt-c and defmt-sh. This change is necessary to allow them to be built on stupid MS-DOS systems with limits on filename lengths. - A bug that could cause infinite loops when long lines were fed to ispell in "-a" mode has been corrected. - A number of misspellings have been removed from the English dictionaries, and new words have been added. - Command-line options can now be passed in the ISPELL_OPTIONS environment variable. - A CHANGES file is now being distributed. - A number of configuration options have been added. See config.X if something isn't to your liking. - Workarounds have been added for POSIX stupidity that broke backwards compatibility. - Obsolete notes about special systems have been removed from the README. - A number of configuration options have been changed to have defaults that are more appropriate to modern systems. - TeX deformatting has been slightly improved. - A kludge has been added to deal with the fact that the German "ess-zed" character has no uppercase equivalent. Previously, when ispell was presented with an all-uppercase word such as GROSS, it would suggest that same word as a correction. It now accepts such constructs without complaint. - A number of portability improvements have been added. - Most ispell support programs and scripts now support the -w switch where appropriate. - A new expand option, -e5, has been added. - A new deformatting flag, -o ("ordinary" file) has been added. - The shell scripts now use /tmp for temporary files by default, since some systems (Mac OS X) don't have /usr/tmp and modern machines have plenty of space in /tmp. - An ancient syntax error in parse.y, long undetected by older versions of both yacc and bison, has been corrected. - When MASKBITS is set to 64, the characters "[\]^_`" are now allowed as flag characters. - On 64-bit machines, MASKBITS will always be at least 64. - The defaults for various constants (in particular, the maximum size and number of string characters) have been expanded so that ispell can support most European languages at the default settings. - The English dictionary now supports all the ISO Latin-1 characters, so that words borrowed from other languages can be spell-checked. - The English affix file contains sample declarations for accented characters encoded in HTML and UTF-8. - A bug has been corrected that caused ispell to hang when control-Z was typed. Ispell also now correctly resets the terminal when suspended. However, it still doesn't refresh the screen when resumed; fixing the latter problem is not easy. - Thanks to Ed Avis, the code in tgood.c has been improved a lot. (Many of the other changes, such as the -e5 switch, are also due to Ed.) - Ispell will no longer segfault under certain conditions if HOME is not in the environment. - Trailing whitespace is now trimmed from the names of files included by the &Include_File& feature. Version 3.2.06 ============== Changes prior to version 3.2.06 are not itemized. ispell-3.4.00/PaxHeaders.19408/fields.30000644000000000000000000000007410227505244014170 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/fields.30000444003214100001440000002207510227505244015236 0ustar00geofffaculty00000000000000.\" .\" $Id: fields.3,v 1.3 1994/01/05 20:13:43 geoff Exp $ .\" .\" $Log: fields.3,v $ .\" Revision 1.3 1994/01/05 20:13:43 geoff .\" Add the maxf parameter .\" .\" Revision 1.2 1994/01/04 02:40:16 geoff .\" Add descriptions of field_line_inc, field_field_inc, and the .\" FLD_NOSHRINK flag. .\" .\" Revision 1.1 1993/09/09 01:09:44 geoff .\" Initial revision .\" .\" .TH FIELDS 3 local .SH NAME fieldread, fieldmake, fieldwrite, fieldfree \- field access package .SH SYNTAX .nf #include "fields.h" typedef struct { int nfields; int hadnl; char *linebuf; char **fields; } field_t; #define FLD_RUNS 0x0001 #define FLD_SNGLQUOTES 0x0002 #define FLD_BACKQUOTES 0x0004 #define FLD_DBLQUOTES 0x0008 #define FLD_SHQUOTES 0x0010 #define FLD_STRIPQUOTES 0x0020 #define FLD_BACKSLASH 0x0040 extern field_t *fieldread (FILE * file, char * delims, int flags, int maxf); extern field_t *fieldmake (char * line, int allocated, char * delims, int flags, int maxf); extern int fieldwrite (FILE * file, field_t * fieldp, int delim); extern void fieldfree (field_t * fieldp); extern unsigned int field_line_inc; extern unsigned int field_field_inc; .fi .SH DESCRIPTION .PP The fields access package eases the common task of parsing and accessing information which is separated into fields by whitespace or other delimiters. Various options can be specified to handle many common cases, including selectable delimiters, runs of delimiters, and quoting. .PP .I fieldread reads one line from a file, parses it into fields as specified by the parameters, and returns a .B field_t structure describing the result. .I fieldmake performs the same process on a buffer already in memory. .I fieldwrite creates an output line from a .B field_t structure and writes it to an output file. .I fieldfree frees a .B field_t structure and any associated memory allocated by the package. .PP The .B field_t structure describes the fields in a parsed line. A well-behaved should only access the .BR nfields , .BR fields , and .B hadnl elements; all other elements are used internally by the package and are not guaranteed to remain the same even though they are documented here. .B Nfields gives the number of fields in the parsed line, just like the .B argc argument to a C program; .B fields is a pointer to an array of string pointers, just like the .B argv argument to a C program. As in C, the last field pointer is followed by a null pointer, although the field count is the preferred method of accessing fields. The user may alter .B nfields by decreasing it, and may replace any pointer in .B fields without harm. This is often useful in replacing a single field with a calculated value preparatory to output. The .B hadnl element is nonzero if the original line was terminated with a newline when it was parsed; this is used to accurately reproduce the input when .I fieldwrite is called. .PP The .B linebuf element contains a pointer to an internal buffer allocated by .I fieldread or provided to .IR fieldmake . This buffer is .I not guaranteed to contain anything sensible, although in the current implementation all of the field contents can be found therein. .PP .I fieldread reads a single line of arbitrary length from .BR file , allocating as much memory as necessary to hold it, and then parses the line according to its remaining arguments. A pointer to the parsed .B field_t structure is returned, with .B NULL returned if an error occurs or if .B EOF is reached on the input file. Fields in the input line are considered to be separated by any of the delimiters in the .B delims parameter. For example, if delimiters of ":.;" are specified, a line containing "a:b;c.d" would be considered to have four fields. .PP The default parsing of fields considers each delimiter to indicate a separate field, and does not allow any quoting. This is similar to the parsing done by .IR cut (1). This behavior can be modified by specifying flags. Multiple flags may be OR'ed together. The available flags are: .IP \fBFLD_RUNS\fP Consider runs of delimiters to be the same as a single delimiter, suppressing all null fields. This is similar to the way utilities like .IR awk (1) and .IR sort (1) treat whitespace, but it is not limited to whitespace. A run does not have to consist of a single type of delimiter; if both semicolon and colon are delimiters, ";::;" is a run. .IP \fBFLD_SNGLQUOTES\fP Allow field contents to be quoted with single quotes. Delimiters and other quotes appearing within single quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_BACKQUOTES\fP Allow field contents to be quoted with reverse single quotes. Delimiters and other quotes appearing within reverse single quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_DBLQUOTES\fP Allow field contents to be quoted with single quotes. Delimiters and other quotes appearing within double quotes are ignored. This may appear in combination with other quote options. .IP \fBFLD_SHQUOTES\fP Allow shell-style quoting. In the absence of this option, quotes are only recognized at the beginning of a field, and characters following the close quote are removed from the field (and are thus lost from the input line). If this option is specified, quotes may appear within a field, in the same way as they are handled by .IR sh (1). Multiple quoting styles may be used in the same field. If none of .BR FLD_SNGLQUOTES , .BR FLD_BACKQUOTES , or .B FLD_DBLQUOTES is specified with .BR FLD_SHQUOTES , all three options are implied. .IP \fBFLD_STRIPQUOTES\fP Remove quotes and backslash sequences from the field while parsing, converting backslash sequences to their proper ASCII equivalent. The C sequences \ea, \eb, \ef, \en, \er, \ev, \ex\fInn\fP, and \e\fInnn\fP are supported. Any other sequence is simply converted to the backslashed character, as in .IR sh (1). .IP \fBFLD_BACKSLASH\fP Accept standard C-style backslash sequences. The sequence will be converted to an ASCII equivalent if .B FLD_STRIPQUOTES is specified (q.v.). .IP \fBFLD_NOSHRINK\fP Don't shrink allocated memory using .IR realloc (3) before returning. This option can have a significant effect on performance, especially when .I fieldfree is going to be called soon after .I fieldread or .IR fieldmake . The disadvantage is that slightly more memory will be occupied until the field structure is freed. .PP The .I maxf parameter, if nonzero, specifies the maximum number of fields to be generated. This may enhance performance if only the first few fields of a long line are of interest to the caller. The actual number of fields returned is one greater than .IR maxf , because the remainder of the line will be returned as a single contiguous (and uninterpreted, .B FLD_STRIPQUOTES or .B FLD_BACKSLASH is specified) field. .PP .I fieldmake operates exactly like .IR fieldread , except that the line parsed is provided by the caller rather than being read from a file. If the .I allocated parameter is nonzero, the memory pointed to by the .I line parameter will automatically be freed when .I fieldfree is called; otherwise this memory is the caller's responsibility. The memory pointed to by .I line is destroyed by .IR fieldmake . All other parameters are the same as for .IR fieldread. .PP .I fieldwrite writes a set of fields to the specified .IR file , separating them with the delimiter character .I delim (note that this is a character, not a string), and appending a newline if specified by the .I hadnl element of the structure. The field structure is not freed. .I fieldwrite will return nonzero if an I/O error is detected. .PP .I fieldfree frees the .B field_t structure passed to it, along with any associated auxiliary memory allocated by the package (or passed to .IR fieldmake ). The structure may not be accessed after .I fieldfree is called. .PP .B field_line_inc (default 512) and .B field_field_inc (default 20) describe the increments to use when expanding lines as they are read in and parsed. .I fieldread initially allocates a buffer of .B field_line_inc bytes and, if the input line is larger than that, expands the buffer in increments of the same amount until it is large enough. If input lines are known to consistently reach a certain size, performance will be improved by setting .B field_line_inc to a value larger than that size (larger because there must be room for a null byte). .B field_field_inc serves the same purpose in both .I fieldread and .IR fieldmake , except that it is related to the number of fields in the line rather than to the line length. If the number of fields is known, performance will be improved by setting .B field_field_inc to at least one more than that number. .SH RETURN VALUES .I fieldread and .I fieldmake return .B NULL if an error occurs or if .B EOF is reached on the input file. .I fieldwrite returns nonzero if an output error occurs. .SH BUGS Thanks to the vagaries of ANSI C, the .B fields.h header file defines an auxiliary macro named .BR P . If the user needs a similarly-named macro, this macro must be undefined first, and the user's macro must be defined after .B fields.h is included. ispell-3.4.00/PaxHeaders.19408/dump.c0000644000000000000000000000007410227500137013743 xustar0030 atime=1423469128.797383187 30 ctime=1423469128.797383187 ispell-3.4.00/dump.c0000444003214100001440000001463210227500137015011 0ustar00geofffaculty00000000000000#ifndef lint static char Rcs_Id[] = "$Id: dump.c,v 1.19 2005/04/14 14:38:23 geoff Exp $"; #endif /* * dump.c - Ispell's dump mode * * This code originally resided in ispell.c, but was moved here to keep * file sizes smaller. * * Copyright 1992, 1993, 1999, 2001, Geoff Kuenning, Claremont, CA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * 4. The code that causes the 'ispell -v' command to display a prominent * link to the official ispell Web site may not be removed. * 5. The name of Geoff Kuenning may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Revision 1.18 2001/07/25 21:51:47 geoff * Minor license update. * * Revision 1.17 2001/07/23 20:24:03 geoff * Update the copyright and the license. * * Revision 1.16 1999/01/18 03:28:30 geoff * Turn many char declarations into unsigned char, so that we won't have * sign-extension problems. * * Revision 1.15 1999/01/07 01:57:56 geoff * Update the copyright. * * Revision 1.14 1994/01/25 07:11:27 geoff * Get rid of all old RCS log lines in preparation for the 3.1 release. * */ #include "config.h" #include "ispell.h" #include "proto.h" void dumpmode P ((void)); static void tbldump P ((struct flagent * flagp, int numflags)); static void entdump P ((struct flagent * flagp)); static void setdump P ((char * setp, int mask)); static void subsetdump P ((char * setp, int mask, int dumpval)); void dumpmode () { if (hashheader.flagmarker == '\\' || hashheader.flagmarker == '#' || hashheader.flagmarker == '>' || hashheader.flagmarker == ':' || hashheader.flagmarker == '-' || hashheader.flagmarker == ',' || hashheader.flagmarker == '[') /* ] */ (void) printf ("flagmarker \\%c\n", hashheader.flagmarker); else if (hashheader.flagmarker < ' ' || hashheader.flagmarker >= 0177) (void) printf ("flagmarker \\%3.3o\n", (unsigned int) hashheader.flagmarker & 0xFF); else (void) printf ("flagmarker %c\n", hashheader.flagmarker); if (numpflags) { (void) printf ("prefixes\n"); tbldump (pflaglist, numpflags); } if (numsflags) { (void) printf ("suffixes\n"); tbldump (sflaglist, numsflags); } } static void tbldump (flagp, numflags) /* Dump a flag table */ register struct flagent * flagp; /* First flag entry to dump */ register int numflags; /* Number of flags to dump */ { while (--numflags >= 0) entdump (flagp++); } static void entdump (flagp) /* Dump one flag entry */ register struct flagent * flagp; /* Flag entry to dump */ { register int cond; /* Condition number */ (void) printf (" flag %s%c: ", (flagp->flagflags & FF_CROSSPRODUCT) ? "*" : " ", BITTOCHAR (flagp->flagbit)); for (cond = 0; cond < flagp->numconds; cond++) { setdump (flagp->conds, 1 << cond); if (cond < flagp->numconds - 1) (void) putc (' ', stdout); } if (cond == 0) /* No conditions at all? */ (void) putc ('.', stdout); (void) printf ("\t> "); (void) putc ('\t', stdout); if (flagp->stripl) (void) printf ("-%s,", (char *) ichartosstr (flagp->strip, 1)); (void) printf ("%s\n", flagp->affl ? (char*) ichartosstr (flagp->affix, 1) : "-"); } static void setdump (setp, mask) /* Dump a set specification */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ { register int cnum; /* Next character's number */ register int firstnz; /* Number of first NZ character */ register int numnz; /* Number of NZ characters */ firstnz = numnz = 0; for (cnum = SET_SIZE; --cnum >= 0; ) { if (setp[cnum] & mask) { numnz++; firstnz = cnum; } } if (numnz == 1) (void) putc (firstnz, stdout); else if (numnz == SET_SIZE) (void) putc ('.', stdout); else if (numnz > SET_SIZE / 2) { (void) printf ("[^"); subsetdump (setp, mask, 0); (void) putc (']', stdout); } else { (void) putc ('[', stdout); subsetdump (setp, mask, mask); (void) putc (']', stdout); } } static void subsetdump (setp, mask, dumpval) /* Dump part of a set spec */ register char * setp; /* Set to be dumped */ register int mask; /* Mask for bit to be dumped */ register int dumpval; /* Value to be printed */ { register int cnum; /* Next character's number */ register int rangestart; /* Value starting a range */ for (cnum = 0; cnum < SET_SIZE; setp++, cnum++) { if (((*setp ^ dumpval) & mask) == 0) { for (rangestart = cnum; cnum < SET_SIZE; setp++, cnum++) { if ((*setp ^ dumpval) & mask) break; } if (cnum == rangestart + 1) (void) putc (rangestart, stdout); else if (cnum <= rangestart + 3) { while (rangestart < cnum) { (void) putc (rangestart, stdout); rangestart++; } } else (void) printf ("%c-%c", rangestart, cnum - 1); } } }