summaryrefslogtreecommitdiff
path: root/lib/libskey/put.c
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-06-20 22:17:22 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-06-20 22:17:22 +0000
commit4f20d1d29a1a0b48e1fbe114035f748fbc46f56c (patch)
tree37f9e7eb54e4ca30a36732303cd87227dbbde002 /lib/libskey/put.c
parent3ce2364164303d82532b4d55918dfbdf80e80050 (diff)
We don't need an f() for each hash, just overload the per-hash
keycrunch() function to do this.
Diffstat (limited to 'lib/libskey/put.c')
-rw-r--r--lib/libskey/put.c2430
1 files changed, 326 insertions, 2104 deletions
diff --git a/lib/libskey/put.c b/lib/libskey/put.c
index fb4c18b02c2..a2a2b06767f 100644
--- a/lib/libskey/put.c
+++ b/lib/libskey/put.c
@@ -1,4 +1,4 @@
-/* S/KEY v1.1b (put.c)
+/* OpenBSD S/Key (put.c)
*
* Authors:
* Neil M. Haller <nmh@thumper.bellcore.com>
@@ -8,2085 +8,330 @@
*
* Dictionary lookup and extraction.
*
- * $OpenBSD: put.c,v 1.9 1997/07/27 21:36:04 millert Exp $
+ * $OpenBSD: put.c,v 1.10 2001/06/20 22:17:21 millert Exp $
*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include "skey.h"
-static unsigned int extract __P ((char *s, int start, int length));
-static void standard __P ((char *word));
-static void insert __P ((char *s, int x, int start, int length));
-static int wsrch __P ((char *w, int low, int high));
-
-/* Dictionary for integer-word translations */
-static char Wp[2048][4] = {
- "A",
- "ABE",
- "ACE",
- "ACT",
- "AD",
- "ADA",
- "ADD",
- "AGO",
- "AID",
- "AIM",
- "AIR",
- "ALL",
- "ALP",
- "AM",
- "AMY",
- "AN",
- "ANA",
- "AND",
- "ANN",
- "ANT",
- "ANY",
- "APE",
- "APS",
- "APT",
- "ARC",
- "ARE",
- "ARK",
- "ARM",
- "ART",
- "AS",
- "ASH",
- "ASK",
- "AT",
- "ATE",
- "AUG",
- "AUK",
- "AVE",
- "AWE",
- "AWK",
- "AWL",
- "AWN",
- "AX",
- "AYE",
- "BAD",
- "BAG",
- "BAH",
- "BAM",
- "BAN",
- "BAR",
- "BAT",
- "BAY",
- "BE",
- "BED",
- "BEE",
- "BEG",
- "BEN",
- "BET",
- "BEY",
- "BIB",
- "BID",
- "BIG",
- "BIN",
- "BIT",
- "BOB",
- "BOG",
- "BON",
- "BOO",
- "BOP",
- "BOW",
- "BOY",
- "BUB",
- "BUD",
- "BUG",
- "BUM",
- "BUN",
- "BUS",
- "BUT",
- "BUY",
- "BY",
- "BYE",
- "CAB",
- "CAL",
- "CAM",
- "CAN",
- "CAP",
- "CAR",
- "CAT",
- "CAW",
- "COD",
- "COG",
- "COL",
- "CON",
- "COO",
- "COP",
- "COT",
- "COW",
- "COY",
- "CRY",
- "CUB",
- "CUE",
- "CUP",
- "CUR",
- "CUT",
- "DAB",
- "DAD",
- "DAM",
- "DAN",
- "DAR",
- "DAY",
- "DEE",
- "DEL",
- "DEN",
- "DES",
- "DEW",
- "DID",
- "DIE",
- "DIG",
- "DIN",
- "DIP",
- "DO",
- "DOE",
- "DOG",
- "DON",
- "DOT",
- "DOW",
- "DRY",
- "DUB",
- "DUD",
- "DUE",
- "DUG",
- "DUN",
- "EAR",
- "EAT",
- "ED",
- "EEL",
- "EGG",
- "EGO",
- "ELI",
- "ELK",
- "ELM",
- "ELY",
- "EM",
- "END",
- "EST",
- "ETC",
- "EVA",
- "EVE",
- "EWE",
- "EYE",
- "FAD",
- "FAN",
- "FAR",
- "FAT",
- "FAY",
- "FED",
- "FEE",
- "FEW",
- "FIB",
- "FIG",
- "FIN",
- "FIR",
- "FIT",
- "FLO",
- "FLY",
- "FOE",
- "FOG",
- "FOR",
- "FRY",
- "FUM",
- "FUN",
- "FUR",
- "GAB",
- "GAD",
- "GAG",
- "GAL",
- "GAM",
- "GAP",
- "GAS",
- "GAY",
- "GEE",
- "GEL",
- "GEM",
- "GET",
- "GIG",
- "GIL",
- "GIN",
- "GO",
- "GOT",
- "GUM",
- "GUN",
- "GUS",
- "GUT",
- "GUY",
- "GYM",
- "GYP",
- "HA",
- "HAD",
- "HAL",
- "HAM",
- "HAN",
- "HAP",
- "HAS",
- "HAT",
- "HAW",
- "HAY",
- "HE",
- "HEM",
- "HEN",
- "HER",
- "HEW",
- "HEY",
- "HI",
- "HID",
- "HIM",
- "HIP",
- "HIS",
- "HIT",
- "HO",
- "HOB",
- "HOC",
- "HOE",
- "HOG",
- "HOP",
- "HOT",
- "HOW",
- "HUB",
- "HUE",
- "HUG",
- "HUH",
- "HUM",
- "HUT",
- "I",
- "ICY",
- "IDA",
- "IF",
- "IKE",
- "ILL",
- "INK",
- "INN",
- "IO",
- "ION",
- "IQ",
- "IRA",
- "IRE",
- "IRK",
- "IS",
- "IT",
- "ITS",
- "IVY",
- "JAB",
- "JAG",
- "JAM",
- "JAN",
- "JAR",
- "JAW",
- "JAY",
- "JET",
- "JIG",
- "JIM",
- "JO",
- "JOB",
- "JOE",
- "JOG",
- "JOT",
- "JOY",
- "JUG",
- "JUT",
- "KAY",
- "KEG",
- "KEN",
- "KEY",
- "KID",
- "KIM",
- "KIN",
- "KIT",
- "LA",
- "LAB",
- "LAC",
- "LAD",
- "LAG",
- "LAM",
- "LAP",
- "LAW",
- "LAY",
- "LEA",
- "LED",
- "LEE",
- "LEG",
- "LEN",
- "LEO",
- "LET",
- "LEW",
- "LID",
- "LIE",
- "LIN",
- "LIP",
- "LIT",
- "LO",
- "LOB",
- "LOG",
- "LOP",
- "LOS",
- "LOT",
- "LOU",
- "LOW",
- "LOY",
- "LUG",
- "LYE",
- "MA",
- "MAC",
- "MAD",
- "MAE",
- "MAN",
- "MAO",
- "MAP",
- "MAT",
- "MAW",
- "MAY",
- "ME",
- "MEG",
- "MEL",
- "MEN",
- "MET",
- "MEW",
- "MID",
- "MIN",
- "MIT",
- "MOB",
- "MOD",
- "MOE",
- "MOO",
- "MOP",
- "MOS",
- "MOT",
- "MOW",
- "MUD",
- "MUG",
- "MUM",
- "MY",
- "NAB",
- "NAG",
- "NAN",
- "NAP",
- "NAT",
- "NAY",
- "NE",
- "NED",
- "NEE",
- "NET",
- "NEW",
- "NIB",
- "NIL",
- "NIP",
- "NIT",
- "NO",
- "NOB",
- "NOD",
- "NON",
- "NOR",
- "NOT",
- "NOV",
- "NOW",
- "NU",
- "NUN",
- "NUT",
- "O",
- "OAF",
- "OAK",
- "OAR",
- "OAT",
- "ODD",
- "ODE",
- "OF",
- "OFF",
- "OFT",
- "OH",
- "OIL",
- "OK",
- "OLD",
- "ON",
- "ONE",
- "OR",
- "ORB",
- "ORE",
- "ORR",
- "OS",
- "OTT",
- "OUR",
- "OUT",
- "OVA",
- "OW",
- "OWE",
- "OWL",
- "OWN",
- "OX",
- "PA",
- "PAD",
- "PAL",
- "PAM",
- "PAN",
- "PAP",
- "PAR",
- "PAT",
- "PAW",
- "PAY",
- "PEA",
- "PEG",
- "PEN",
- "PEP",
- "PER",
- "PET",
- "PEW",
- "PHI",
- "PI",
- "PIE",
- "PIN",
- "PIT",
- "PLY",
- "PO",
- "POD",
- "POE",
- "POP",
- "POT",
- "POW",
- "PRO",
- "PRY",
- "PUB",
- "PUG",
- "PUN",
- "PUP",
- "PUT",
- "QUO",
- "RAG",
- "RAM",
- "RAN",
- "RAP",
- "RAT",
- "RAW",
- "RAY",
- "REB",
- "RED",
- "REP",
- "RET",
- "RIB",
- "RID",
- "RIG",
- "RIM",
- "RIO",
- "RIP",
- "ROB",
- "ROD",
- "ROE",
- "RON",
- "ROT",
- "ROW",
- "ROY",
- "RUB",
- "RUE",
- "RUG",
- "RUM",
- "RUN",
- "RYE",
- "SAC",
- "SAD",
- "SAG",
- "SAL",
- "SAM",
- "SAN",
- "SAP",
- "SAT",
- "SAW",
- "SAY",
- "SEA",
- "SEC",
- "SEE",
- "SEN",
- "SET",
- "SEW",
- "SHE",
- "SHY",
- "SIN",
- "SIP",
- "SIR",
- "SIS",
- "SIT",
- "SKI",
- "SKY",
- "SLY",
- "SO",
- "SOB",
- "SOD",
- "SON",
- "SOP",
- "SOW",
- "SOY",
- "SPA",
- "SPY",
- "SUB",
- "SUD",
- "SUE",
- "SUM",
- "SUN",
- "SUP",
- "TAB",
- "TAD",
- "TAG",
- "TAN",
- "TAP",
- "TAR",
- "TEA",
- "TED",
- "TEE",
- "TEN",
- "THE",
- "THY",
- "TIC",
- "TIE",
- "TIM",
- "TIN",
- "TIP",
- "TO",
- "TOE",
- "TOG",
- "TOM",
- "TON",
- "TOO",
- "TOP",
- "TOW",
- "TOY",
- "TRY",
- "TUB",
- "TUG",
- "TUM",
- "TUN",
- "TWO",
- "UN",
- "UP",
- "US",
- "USE",
- "VAN",
- "VAT",
- "VET",
- "VIE",
- "WAD",
- "WAG",
- "WAR",
- "WAS",
- "WAY",
- "WE",
- "WEB",
- "WED",
- "WEE",
- "WET",
- "WHO",
- "WHY",
- "WIN",
- "WIT",
- "WOK",
- "WON",
- "WOO",
- "WOW",
- "WRY",
- "WU",
- "YAM",
- "YAP",
- "YAW",
- "YE",
- "YEA",
- "YES",
- "YET",
- "YOU",
- "ABED",
- "ABEL",
- "ABET",
- "ABLE",
- "ABUT",
- "ACHE",
- "ACID",
- "ACME",
- "ACRE",
- "ACTA",
- "ACTS",
- "ADAM",
- "ADDS",
- "ADEN",
- "AFAR",
- "AFRO",
- "AGEE",
- "AHEM",
- "AHOY",
- "AIDA",
- "AIDE",
- "AIDS",
- "AIRY",
- "AJAR",
- "AKIN",
- "ALAN",
- "ALEC",
- "ALGA",
- "ALIA",
- "ALLY",
- "ALMA",
- "ALOE",
- "ALSO",
- "ALTO",
- "ALUM",
- "ALVA",
- "AMEN",
- "AMES",
- "AMID",
- "AMMO",
- "AMOK",
- "AMOS",
- "AMRA",
- "ANDY",
- "ANEW",
- "ANNA",
- "ANNE",
- "ANTE",
- "ANTI",
- "AQUA",
- "ARAB",
- "ARCH",
- "AREA",
- "ARGO",
- "ARID",
- "ARMY",
- "ARTS",
- "ARTY",
- "ASIA",
- "ASKS",
- "ATOM",
- "AUNT",
- "AURA",
- "AUTO",
- "AVER",
- "AVID",
- "AVIS",
- "AVON",
- "AVOW",
- "AWAY",
- "AWRY",
- "BABE",
- "BABY",
- "BACH",
- "BACK",
- "BADE",
- "BAIL",
- "BAIT",
- "BAKE",
- "BALD",
- "BALE",
- "BALI",
- "BALK",
- "BALL",
- "BALM",
- "BAND",
- "BANE",
- "BANG",
- "BANK",
- "BARB",
- "BARD",
- "BARE",
- "BARK",
- "BARN",
- "BARR",
- "BASE",
- "BASH",
- "BASK",
- "BASS",
- "BATE",
- "BATH",
- "BAWD",
- "BAWL",
- "BEAD",
- "BEAK",
- "BEAM",
- "BEAN",
- "BEAR",
- "BEAT",
- "BEAU",
- "BECK",
- "BEEF",
- "BEEN",
- "BEER",
- "BEET",
- "BELA",
- "BELL",
- "BELT",
- "BEND",
- "BENT",
- "BERG",
- "BERN",
- "BERT",
- "BESS",
- "BEST",
- "BETA",
- "BETH",
- "BHOY",
- "BIAS",
- "BIDE",
- "BIEN",
- "BILE",
- "BILK",
- "BILL",
- "BIND",
- "BING",
- "BIRD",
- "BITE",
- "BITS",
- "BLAB",
- "BLAT",
- "BLED",
- "BLEW",
- "BLOB",
- "BLOC",
- "BLOT",
- "BLOW",
- "BLUE",
- "BLUM",
- "BLUR",
- "BOAR",
- "BOAT",
- "BOCA",
- "BOCK",
- "BODE",
- "BODY",
- "BOGY",
- "BOHR",
- "BOIL",
- "BOLD",
- "BOLO",
- "BOLT",
- "BOMB",
- "BONA",
- "BOND",
- "BONE",
- "BONG",
- "BONN",
- "BONY",
- "BOOK",
- "BOOM",
- "BOON",
- "BOOT",
- "BORE",
- "BORG",
- "BORN",
- "BOSE",
- "BOSS",
- "BOTH",
- "BOUT",
- "BOWL",
- "BOYD",
- "BRAD",
- "BRAE",
- "BRAG",
- "BRAN",
- "BRAY",
- "BRED",
- "BREW",
- "BRIG",
- "BRIM",
- "BROW",
- "BUCK",
- "BUDD",
- "BUFF",
- "BULB",
- "BULK",
- "BULL",
- "BUNK",
- "BUNT",
- "BUOY",
- "BURG",
- "BURL",
- "BURN",
- "BURR",
- "BURT",
- "BURY",
- "BUSH",
- "BUSS",
- "BUST",
- "BUSY",
- "BYTE",
- "CADY",
- "CAFE",
- "CAGE",
- "CAIN",
- "CAKE",
- "CALF",
- "CALL",
- "CALM",
- "CAME",
- "CANE",
- "CANT",
- "CARD",
- "CARE",
- "CARL",
- "CARR",
- "CART",
- "CASE",
- "CASH",
- "CASK",
- "CAST",
- "CAVE",
- "CEIL",
- "CELL",
- "CENT",
- "CERN",
- "CHAD",
- "CHAR",
- "CHAT",
- "CHAW",
- "CHEF",
- "CHEN",
- "CHEW",
- "CHIC",
- "CHIN",
- "CHOU",
- "CHOW",
- "CHUB",
- "CHUG",
- "CHUM",
- "CITE",
- "CITY",
- "CLAD",
- "CLAM",
- "CLAN",
- "CLAW",
- "CLAY",
- "CLOD",
- "CLOG",
- "CLOT",
- "CLUB",
- "CLUE",
- "COAL",
- "COAT",
- "COCA",
- "COCK",
- "COCO",
- "CODA",
- "CODE",
- "CODY",
- "COED",
- "COIL",
- "COIN",
- "COKE",
- "COLA",
- "COLD",
- "COLT",
- "COMA",
- "COMB",
- "COME",
- "COOK",
- "COOL",
- "COON",
- "COOT",
- "CORD",
- "CORE",
- "CORK",
- "CORN",
- "COST",
- "COVE",
- "COWL",
- "CRAB",
- "CRAG",
- "CRAM",
- "CRAY",
- "CREW",
- "CRIB",
- "CROW",
- "CRUD",
- "CUBA",
- "CUBE",
- "CUFF",
- "CULL",
- "CULT",
- "CUNY",
- "CURB",
- "CURD",
- "CURE",
- "CURL",
- "CURT",
- "CUTS",
- "DADE",
- "DALE",
- "DAME",
- "DANA",
- "DANE",
- "DANG",
- "DANK",
- "DARE",
- "DARK",
- "DARN",
- "DART",
- "DASH",
- "DATA",
- "DATE",
- "DAVE",
- "DAVY",
- "DAWN",
- "DAYS",
- "DEAD",
- "DEAF",
- "DEAL",
- "DEAN",
- "DEAR",
- "DEBT",
- "DECK",
- "DEED",
- "DEEM",
- "DEER",
- "DEFT",
- "DEFY",
- "DELL",
- "DENT",
- "DENY",
- "DESK",
- "DIAL",
- "DICE",
- "DIED",
- "DIET",
- "DIME",
- "DINE",
- "DING",
- "DINT",
- "DIRE",
- "DIRT",
- "DISC",
- "DISH",
- "DISK",
- "DIVE",
- "DOCK",
- "DOES",
- "DOLE",
- "DOLL",
- "DOLT",
- "DOME",
- "DONE",
- "DOOM",
- "DOOR",
- "DORA",
- "DOSE",
- "DOTE",
- "DOUG",
- "DOUR",
- "DOVE",
- "DOWN",
- "DRAB",
- "DRAG",
- "DRAM",
- "DRAW",
- "DREW",
- "DRUB",
- "DRUG",
- "DRUM",
- "DUAL",
- "DUCK",
- "DUCT",
- "DUEL",
- "DUET",
- "DUKE",
- "DULL",
- "DUMB",
- "DUNE",
- "DUNK",
- "DUSK",
- "DUST",
- "DUTY",
- "EACH",
- "EARL",
- "EARN",
- "EASE",
- "EAST",
- "EASY",
- "EBEN",
- "ECHO",
- "EDDY",
- "EDEN",
- "EDGE",
- "EDGY",
- "EDIT",
- "EDNA",
- "EGAN",
- "ELAN",
- "ELBA",
- "ELLA",
- "ELSE",
- "EMIL",
- "EMIT",
- "EMMA",
- "ENDS",
- "ERIC",
- "EROS",
- "EVEN",
- "EVER",
- "EVIL",
- "EYED",
- "FACE",
- "FACT",
- "FADE",
- "FAIL",
- "FAIN",
- "FAIR",
- "FAKE",
- "FALL",
- "FAME",
- "FANG",
- "FARM",
- "FAST",
- "FATE",
- "FAWN",
- "FEAR",
- "FEAT",
- "FEED",
- "FEEL",
- "FEET",
- "FELL",
- "FELT",
- "FEND",
- "FERN",
- "FEST",
- "FEUD",
- "FIEF",
- "FIGS",
- "FILE",
- "FILL",
- "FILM",
- "FIND",
- "FINE",
- "FINK",
- "FIRE",
- "FIRM",
- "FISH",
- "FISK",
- "FIST",
- "FITS",
- "FIVE",
- "FLAG",
- "FLAK",
- "FLAM",
- "FLAT",
- "FLAW",
- "FLEA",
- "FLED",
- "FLEW",
- "FLIT",
- "FLOC",
- "FLOG",
- "FLOW",
- "FLUB",
- "FLUE",
- "FOAL",
- "FOAM",
- "FOGY",
- "FOIL",
- "FOLD",
- "FOLK",
- "FOND",
- "FONT",
- "FOOD",
- "FOOL",
- "FOOT",
- "FORD",
- "FORE",
- "FORK",
- "FORM",
- "FORT",
- "FOSS",
- "FOUL",
- "FOUR",
- "FOWL",
- "FRAU",
- "FRAY",
- "FRED",
- "FREE",
- "FRET",
- "FREY",
- "FROG",
- "FROM",
- "FUEL",
- "FULL",
- "FUME",
- "FUND",
- "FUNK",
- "FURY",
- "FUSE",
- "FUSS",
- "GAFF",
- "GAGE",
- "GAIL",
- "GAIN",
- "GAIT",
- "GALA",
- "GALE",
- "GALL",
- "GALT",
- "GAME",
- "GANG",
- "GARB",
- "GARY",
- "GASH",
- "GATE",
- "GAUL",
- "GAUR",
- "GAVE",
- "GAWK",
- "GEAR",
- "GELD",
- "GENE",
- "GENT",
- "GERM",
- "GETS",
- "GIBE",
- "GIFT",
- "GILD",
- "GILL",
- "GILT",
- "GINA",
- "GIRD",
- "GIRL",
- "GIST",
- "GIVE",
- "GLAD",
- "GLEE",
- "GLEN",
- "GLIB",
- "GLOB",
- "GLOM",
- "GLOW",
- "GLUE",
- "GLUM",
- "GLUT",
- "GOAD",
- "GOAL",
- "GOAT",
- "GOER",
- "GOES",
- "GOLD",
- "GOLF",
- "GONE",
- "GONG",
- "GOOD",
- "GOOF",
- "GORE",
- "GORY",
- "GOSH",
- "GOUT",
- "GOWN",
- "GRAB",
- "GRAD",
- "GRAY",
- "GREG",
- "GREW",
- "GREY",
- "GRID",
- "GRIM",
- "GRIN",
- "GRIT",
- "GROW",
- "GRUB",
- "GULF",
- "GULL",
- "GUNK",
- "GURU",
- "GUSH",
- "GUST",
- "GWEN",
- "GWYN",
- "HAAG",
- "HAAS",
- "HACK",
- "HAIL",
- "HAIR",
- "HALE",
- "HALF",
- "HALL",
- "HALO",
- "HALT",
- "HAND",
- "HANG",
- "HANK",
- "HANS",
- "HARD",
- "HARK",
- "HARM",
- "HART",
- "HASH",
- "HAST",
- "HATE",
- "HATH",
- "HAUL",
- "HAVE",
- "HAWK",
- "HAYS",
- "HEAD",
- "HEAL",
- "HEAR",
- "HEAT",
- "HEBE",
- "HECK",
- "HEED",
- "HEEL",
- "HEFT",
- "HELD",
- "HELL",
- "HELM",
- "HERB",
- "HERD",
- "HERE",
- "HERO",
- "HERS",
- "HESS",
- "HEWN",
- "HICK",
- "HIDE",
- "HIGH",
- "HIKE",
- "HILL",
- "HILT",
- "HIND",
- "HINT",
- "HIRE",
- "HISS",
- "HIVE",
- "HOBO",
- "HOCK",
- "HOFF",
- "HOLD",
- "HOLE",
- "HOLM",
- "HOLT",
- "HOME",
- "HONE",
- "HONK",
- "HOOD",
- "HOOF",
- "HOOK",
- "HOOT",
- "HORN",
- "HOSE",
- "HOST",
- "HOUR",
- "HOVE",
- "HOWE",
- "HOWL",
- "HOYT",
- "HUCK",
- "HUED",
- "HUFF",
- "HUGE",
- "HUGH",
- "HUGO",
- "HULK",
- "HULL",
- "HUNK",
- "HUNT",
- "HURD",
- "HURL",
- "HURT",
- "HUSH",
- "HYDE",
- "HYMN",
- "IBIS",
- "ICON",
- "IDEA",
- "IDLE",
- "IFFY",
- "INCA",
- "INCH",
- "INTO",
- "IONS",
- "IOTA",
- "IOWA",
- "IRIS",
- "IRMA",
- "IRON",
- "ISLE",
- "ITCH",
- "ITEM",
- "IVAN",
- "JACK",
- "JADE",
- "JAIL",
- "JAKE",
- "JANE",
- "JAVA",
- "JEAN",
- "JEFF",
- "JERK",
- "JESS",
- "JEST",
- "JIBE",
- "JILL",
- "JILT",
- "JIVE",
- "JOAN",
- "JOBS",
- "JOCK",
- "JOEL",
- "JOEY",
- "JOHN",
- "JOIN",
- "JOKE",
- "JOLT",
- "JOVE",
- "JUDD",
- "JUDE",
- "JUDO",
- "JUDY",
- "JUJU",
- "JUKE",
- "JULY",
- "JUNE",
- "JUNK",
- "JUNO",
- "JURY",
- "JUST",
- "JUTE",
- "KAHN",
- "KALE",
- "KANE",
- "KANT",
- "KARL",
- "KATE",
- "KEEL",
- "KEEN",
- "KENO",
- "KENT",
- "KERN",
- "KERR",
- "KEYS",
- "KICK",
- "KILL",
- "KIND",
- "KING",
- "KIRK",
- "KISS",
- "KITE",
- "KLAN",
- "KNEE",
- "KNEW",
- "KNIT",
- "KNOB",
- "KNOT",
- "KNOW",
- "KOCH",
- "KONG",
- "KUDO",
- "KURD",
- "KURT",
- "KYLE",
- "LACE",
- "LACK",
- "LACY",
- "LADY",
- "LAID",
- "LAIN",
- "LAIR",
- "LAKE",
- "LAMB",
- "LAME",
- "LAND",
- "LANE",
- "LANG",
- "LARD",
- "LARK",
- "LASS",
- "LAST",
- "LATE",
- "LAUD",
- "LAVA",
- "LAWN",
- "LAWS",
- "LAYS",
- "LEAD",
- "LEAF",
- "LEAK",
- "LEAN",
- "LEAR",
- "LEEK",
- "LEER",
- "LEFT",
- "LEND",
- "LENS",
- "LENT",
- "LEON",
- "LESK",
- "LESS",
- "LEST",
- "LETS",
- "LIAR",
- "LICE",
- "LICK",
- "LIED",
- "LIEN",
- "LIES",
- "LIEU",
- "LIFE",
- "LIFT",
- "LIKE",
- "LILA",
- "LILT",
- "LILY",
- "LIMA",
- "LIMB",
- "LIME",
- "LIND",
- "LINE",
- "LINK",
- "LINT",
- "LION",
- "LISA",
- "LIST",
- "LIVE",
- "LOAD",
- "LOAF",
- "LOAM",
- "LOAN",
- "LOCK",
- "LOFT",
- "LOGE",
- "LOIS",
- "LOLA",
- "LONE",
- "LONG",
- "LOOK",
- "LOON",
- "LOOT",
- "LORD",
- "LORE",
- "LOSE",
- "LOSS",
- "LOST",
- "LOUD",
- "LOVE",
- "LOWE",
- "LUCK",
- "LUCY",
- "LUGE",
- "LUKE",
- "LULU",
- "LUND",
- "LUNG",
- "LURA",
- "LURE",
- "LURK",
- "LUSH",
- "LUST",
- "LYLE",
- "LYNN",
- "LYON",
- "LYRA",
- "MACE",
- "MADE",
- "MAGI",
- "MAID",
- "MAIL",
- "MAIN",
- "MAKE",
- "MALE",
- "MALI",
- "MALL",
- "MALT",
- "MANA",
- "MANN",
- "MANY",
- "MARC",
- "MARE",
- "MARK",
- "MARS",
- "MART",
- "MARY",
- "MASH",
- "MASK",
- "MASS",
- "MAST",
- "MATE",
- "MATH",
- "MAUL",
- "MAYO",
- "MEAD",
- "MEAL",
- "MEAN",
- "MEAT",
- "MEEK",
- "MEET",
- "MELD",
- "MELT",
- "MEMO",
- "MEND",
- "MENU",
- "MERT",
- "MESH",
- "MESS",
- "MICE",
- "MIKE",
- "MILD",
- "MILE",
- "MILK",
- "MILL",
- "MILT",
- "MIMI",
- "MIND",
- "MINE",
- "MINI",
- "MINK",
- "MINT",
- "MIRE",
- "MISS",
- "MIST",
- "MITE",
- "MITT",
- "MOAN",
- "MOAT",
- "MOCK",
- "MODE",
- "MOLD",
- "MOLE",
- "MOLL",
- "MOLT",
- "MONA",
- "MONK",
- "MONT",
- "MOOD",
- "MOON",
- "MOOR",
- "MOOT",
- "MORE",
- "MORN",
- "MORT",
- "MOSS",
- "MOST",
- "MOTH",
- "MOVE",
- "MUCH",
- "MUCK",
- "MUDD",
- "MUFF",
- "MULE",
- "MULL",
- "MURK",
- "MUSH",
- "MUST",
- "MUTE",
- "MUTT",
- "MYRA",
- "MYTH",
- "NAGY",
- "NAIL",
- "NAIR",
- "NAME",
- "NARY",
- "NASH",
- "NAVE",
- "NAVY",
- "NEAL",
- "NEAR",
- "NEAT",
- "NECK",
- "NEED",
- "NEIL",
- "NELL",
- "NEON",
- "NERO",
- "NESS",
- "NEST",
- "NEWS",
- "NEWT",
- "NIBS",
- "NICE",
- "NICK",
- "NILE",
- "NINA",
- "NINE",
- "NOAH",
- "NODE",
- "NOEL",
- "NOLL",
- "NONE",
- "NOOK",
- "NOON",
- "NORM",
- "NOSE",
- "NOTE",
- "NOUN",
- "NOVA",
- "NUDE",
- "NULL",
- "NUMB",
- "OATH",
- "OBEY",
- "OBOE",
- "ODIN",
- "OHIO",
- "OILY",
- "OINT",
- "OKAY",
- "OLAF",
- "OLDY",
- "OLGA",
- "OLIN",
- "OMAN",
- "OMEN",
- "OMIT",
- "ONCE",
- "ONES",
- "ONLY",
- "ONTO",
- "ONUS",
- "ORAL",
- "ORGY",
- "OSLO",
- "OTIS",
- "OTTO",
- "OUCH",
- "OUST",
- "OUTS",
- "OVAL",
- "OVEN",
- "OVER",
- "OWLY",
- "OWNS",
- "QUAD",
- "QUIT",
- "QUOD",
- "RACE",
- "RACK",
- "RACY",
- "RAFT",
- "RAGE",
- "RAID",
- "RAIL",
- "RAIN",
- "RAKE",
- "RANK",
- "RANT",
- "RARE",
- "RASH",
- "RATE",
- "RAVE",
- "RAYS",
- "READ",
- "REAL",
- "REAM",
- "REAR",
- "RECK",
- "REED",
- "REEF",
- "REEK",
- "REEL",
- "REID",
- "REIN",
- "RENA",
- "REND",
- "RENT",
- "REST",
- "RICE",
- "RICH",
- "RICK",
- "RIDE",
- "RIFT",
- "RILL",
- "RIME",
- "RING",
- "RINK",
- "RISE",
- "RISK",
- "RITE",
- "ROAD",
- "ROAM",
- "ROAR",
- "ROBE",
- "ROCK",
- "RODE",
- "ROIL",
- "ROLL",
- "ROME",
- "ROOD",
- "ROOF",
- "ROOK",
- "ROOM",
- "ROOT",
- "ROSA",
- "ROSE",
- "ROSS",
- "ROSY",
- "ROTH",
- "ROUT",
- "ROVE",
- "ROWE",
- "ROWS",
- "RUBE",
- "RUBY",
- "RUDE",
- "RUDY",
- "RUIN",
- "RULE",
- "RUNG",
- "RUNS",
- "RUNT",
- "RUSE",
- "RUSH",
- "RUSK",
- "RUSS",
- "RUST",
- "RUTH",
- "SACK",
- "SAFE",
- "SAGE",
- "SAID",
- "SAIL",
- "SALE",
- "SALK",
- "SALT",
- "SAME",
- "SAND",
- "SANE",
- "SANG",
- "SANK",
- "SARA",
- "SAUL",
- "SAVE",
- "SAYS",
- "SCAN",
- "SCAR",
- "SCAT",
- "SCOT",
- "SEAL",
- "SEAM",
- "SEAR",
- "SEAT",
- "SEED",
- "SEEK",
- "SEEM",
- "SEEN",
- "SEES",
- "SELF",
- "SELL",
- "SEND",
- "SENT",
- "SETS",
- "SEWN",
- "SHAG",
- "SHAM",
- "SHAW",
- "SHAY",
- "SHED",
- "SHIM",
- "SHIN",
- "SHOD",
- "SHOE",
- "SHOT",
- "SHOW",
- "SHUN",
- "SHUT",
- "SICK",
- "SIDE",
- "SIFT",
- "SIGH",
- "SIGN",
- "SILK",
- "SILL",
- "SILO",
- "SILT",
- "SINE",
- "SING",
- "SINK",
- "SIRE",
- "SITE",
- "SITS",
- "SITU",
- "SKAT",
- "SKEW",
- "SKID",
- "SKIM",
- "SKIN",
- "SKIT",
- "SLAB",
- "SLAM",
- "SLAT",
- "SLAY",
- "SLED",
- "SLEW",
- "SLID",
- "SLIM",
- "SLIT",
- "SLOB",
- "SLOG",
- "SLOT",
- "SLOW",
- "SLUG",
- "SLUM",
- "SLUR",
- "SMOG",
- "SMUG",
- "SNAG",
- "SNOB",
- "SNOW",
- "SNUB",
- "SNUG",
- "SOAK",
- "SOAR",
- "SOCK",
- "SODA",
- "SOFA",
- "SOFT",
- "SOIL",
- "SOLD",
- "SOME",
- "SONG",
- "SOON",
- "SOOT",
- "SORE",
- "SORT",
- "SOUL",
- "SOUR",
- "SOWN",
- "STAB",
- "STAG",
- "STAN",
- "STAR",
- "STAY",
- "STEM",
- "STEW",
- "STIR",
- "STOW",
- "STUB",
- "STUN",
- "SUCH",
- "SUDS",
- "SUIT",
- "SULK",
- "SUMS",
- "SUNG",
- "SUNK",
- "SURE",
- "SURF",
- "SWAB",
- "SWAG",
- "SWAM",
- "SWAN",
- "SWAT",
- "SWAY",
- "SWIM",
- "SWUM",
- "TACK",
- "TACT",
- "TAIL",
- "TAKE",
- "TALE",
- "TALK",
- "TALL",
- "TANK",
- "TASK",
- "TATE",
- "TAUT",
- "TEAL",
- "TEAM",
- "TEAR",
- "TECH",
- "TEEM",
- "TEEN",
- "TEET",
- "TELL",
- "TEND",
- "TENT",
- "TERM",
- "TERN",
- "TESS",
- "TEST",
- "THAN",
- "THAT",
- "THEE",
- "THEM",
- "THEN",
- "THEY",
- "THIN",
- "THIS",
- "THUD",
- "THUG",
- "TICK",
- "TIDE",
- "TIDY",
- "TIED",
- "TIER",
- "TILE",
- "TILL",
- "TILT",
- "TIME",
- "TINA",
- "TINE",
- "TINT",
- "TINY",
- "TIRE",
- "TOAD",
- "TOGO",
- "TOIL",
- "TOLD",
- "TOLL",
- "TONE",
- "TONG",
- "TONY",
- "TOOK",
- "TOOL",
- "TOOT",
- "TORE",
- "TORN",
- "TOTE",
- "TOUR",
- "TOUT",
- "TOWN",
- "TRAG",
- "TRAM",
- "TRAY",
- "TREE",
- "TREK",
- "TRIG",
- "TRIM",
- "TRIO",
- "TROD",
- "TROT",
- "TROY",
- "TRUE",
- "TUBA",
- "TUBE",
- "TUCK",
- "TUFT",
- "TUNA",
- "TUNE",
- "TUNG",
- "TURF",
- "TURN",
- "TUSK",
- "TWIG",
- "TWIN",
- "TWIT",
- "ULAN",
- "UNIT",
- "URGE",
- "USED",
- "USER",
- "USES",
- "UTAH",
- "VAIL",
- "VAIN",
- "VALE",
- "VARY",
- "VASE",
- "VAST",
- "VEAL",
- "VEDA",
- "VEIL",
- "VEIN",
- "VEND",
- "VENT",
- "VERB",
- "VERY",
- "VETO",
- "VICE",
- "VIEW",
- "VINE",
- "VISE",
- "VOID",
- "VOLT",
- "VOTE",
- "WACK",
- "WADE",
- "WAGE",
- "WAIL",
- "WAIT",
- "WAKE",
- "WALE",
- "WALK",
- "WALL",
- "WALT",
- "WAND",
- "WANE",
- "WANG",
- "WANT",
- "WARD",
- "WARM",
- "WARN",
- "WART",
- "WASH",
- "WAST",
- "WATS",
- "WATT",
- "WAVE",
- "WAVY",
- "WAYS",
- "WEAK",
- "WEAL",
- "WEAN",
- "WEAR",
- "WEED",
- "WEEK",
- "WEIR",
- "WELD",
- "WELL",
- "WELT",
- "WENT",
- "WERE",
- "WERT",
- "WEST",
- "WHAM",
- "WHAT",
- "WHEE",
- "WHEN",
- "WHET",
- "WHOA",
- "WHOM",
- "WICK",
- "WIFE",
- "WILD",
- "WILL",
- "WIND",
- "WINE",
- "WING",
- "WINK",
- "WINO",
- "WIRE",
- "WISE",
- "WISH",
- "WITH",
- "WOLF",
- "WONT",
- "WOOD",
- "WOOL",
- "WORD",
- "WORE",
- "WORK",
- "WORM",
- "WORN",
- "WOVE",
- "WRIT",
- "WYNN",
- "YALE",
- "YANG",
- "YANK",
- "YARD",
- "YARN",
- "YAWL",
- "YAWN",
- "YEAH",
- "YEAR",
- "YELL",
- "YOGA",
- "YOKE"
+static unsigned int extract __P((char *, int, int));
+static void standard __P((char *));
+static void insert __P((char *, int, int, int));
+static int wsrch __P((char *, int, int));
+
+/* Standard dictionary for integer-word translations */
+static const char * const Wp[2048] = {
+ "A", "ABE", "ACE", "ACT", "AD", "ADA", "ADD",
+ "AGO", "AID", "AIM", "AIR", "ALL", "ALP", "AM",
+ "AMY", "AN", "ANA", "AND", "ANN", "ANT", "ANY",
+ "APE", "APS", "APT", "ARC", "ARE", "ARK", "ARM",
+ "ART", "AS", "ASH", "ASK", "AT", "ATE", "AUG",
+ "AUK", "AVE", "AWE", "AWK", "AWL", "AWN", "AX",
+ "AYE", "BAD", "BAG", "BAH", "BAM", "BAN", "BAR",
+ "BAT", "BAY", "BE", "BED", "BEE", "BEG", "BEN",
+ "BET", "BEY", "BIB", "BID", "BIG", "BIN", "BIT",
+ "BOB", "BOG", "BON", "BOO", "BOP", "BOW", "BOY",
+ "BUB", "BUD", "BUG", "BUM", "BUN", "BUS", "BUT",
+ "BUY", "BY", "BYE", "CAB", "CAL", "CAM", "CAN",
+ "CAP", "CAR", "CAT", "CAW", "COD", "COG", "COL",
+ "CON", "COO", "COP", "COT", "COW", "COY", "CRY",
+ "CUB", "CUE", "CUP", "CUR", "CUT", "DAB", "DAD",
+ "DAM", "DAN", "DAR", "DAY", "DEE", "DEL", "DEN",
+ "DES", "DEW", "DID", "DIE", "DIG", "DIN", "DIP",
+ "DO", "DOE", "DOG", "DON", "DOT", "DOW", "DRY",
+ "DUB", "DUD", "DUE", "DUG", "DUN", "EAR", "EAT",
+ "ED", "EEL", "EGG", "EGO", "ELI", "ELK", "ELM",
+ "ELY", "EM", "END", "EST", "ETC", "EVA", "EVE",
+ "EWE", "EYE", "FAD", "FAN", "FAR", "FAT", "FAY",
+ "FED", "FEE", "FEW", "FIB", "FIG", "FIN", "FIR",
+ "FIT", "FLO", "FLY", "FOE", "FOG", "FOR", "FRY",
+ "FUM", "FUN", "FUR", "GAB", "GAD", "GAG", "GAL",
+ "GAM", "GAP", "GAS", "GAY", "GEE", "GEL", "GEM",
+ "GET", "GIG", "GIL", "GIN", "GO", "GOT", "GUM",
+ "GUN", "GUS", "GUT", "GUY", "GYM", "GYP", "HA",
+ "HAD", "HAL", "HAM", "HAN", "HAP", "HAS", "HAT",
+ "HAW", "HAY", "HE", "HEM", "HEN", "HER", "HEW",
+ "HEY", "HI", "HID", "HIM", "HIP", "HIS", "HIT",
+ "HO", "HOB", "HOC", "HOE", "HOG", "HOP", "HOT",
+ "HOW", "HUB", "HUE", "HUG", "HUH", "HUM", "HUT",
+ "I", "ICY", "IDA", "IF", "IKE", "ILL", "INK",
+ "INN", "IO", "ION", "IQ", "IRA", "IRE", "IRK",
+ "IS", "IT", "ITS", "IVY", "JAB", "JAG", "JAM",
+ "JAN", "JAR", "JAW", "JAY", "JET", "JIG", "JIM",
+ "JO", "JOB", "JOE", "JOG", "JOT", "JOY", "JUG",
+ "JUT", "KAY", "KEG", "KEN", "KEY", "KID", "KIM",
+ "KIN", "KIT", "LA", "LAB", "LAC", "LAD", "LAG",
+ "LAM", "LAP", "LAW", "LAY", "LEA", "LED", "LEE",
+ "LEG", "LEN", "LEO", "LET", "LEW", "LID", "LIE",
+ "LIN", "LIP", "LIT", "LO", "LOB", "LOG", "LOP",
+ "LOS", "LOT", "LOU", "LOW", "LOY", "LUG", "LYE",
+ "MA", "MAC", "MAD", "MAE", "MAN", "MAO", "MAP",
+ "MAT", "MAW", "MAY", "ME", "MEG", "MEL", "MEN",
+ "MET", "MEW", "MID", "MIN", "MIT", "MOB", "MOD",
+ "MOE", "MOO", "MOP", "MOS", "MOT", "MOW", "MUD",
+ "MUG", "MUM", "MY", "NAB", "NAG", "NAN", "NAP",
+ "NAT", "NAY", "NE", "NED", "NEE", "NET", "NEW",
+ "NIB", "NIL", "NIP", "NIT", "NO", "NOB", "NOD",
+ "NON", "NOR", "NOT", "NOV", "NOW", "NU", "NUN",
+ "NUT", "O", "OAF", "OAK", "OAR", "OAT", "ODD",
+ "ODE", "OF", "OFF", "OFT", "OH", "OIL", "OK",
+ "OLD", "ON", "ONE", "OR", "ORB", "ORE", "ORR",
+ "OS", "OTT", "OUR", "OUT", "OVA", "OW", "OWE",
+ "OWL", "OWN", "OX", "PA", "PAD", "PAL", "PAM",
+ "PAN", "PAP", "PAR", "PAT", "PAW", "PAY", "PEA",
+ "PEG", "PEN", "PEP", "PER", "PET", "PEW", "PHI",
+ "PI", "PIE", "PIN", "PIT", "PLY", "PO", "POD",
+ "POE", "POP", "POT", "POW", "PRO", "PRY", "PUB",
+ "PUG", "PUN", "PUP", "PUT", "QUO", "RAG", "RAM",
+ "RAN", "RAP", "RAT", "RAW", "RAY", "REB", "RED",
+ "REP", "RET", "RIB", "RID", "RIG", "RIM", "RIO",
+ "RIP", "ROB", "ROD", "ROE", "RON", "ROT", "ROW",
+ "ROY", "RUB", "RUE", "RUG", "RUM", "RUN", "RYE",
+ "SAC", "SAD", "SAG", "SAL", "SAM", "SAN", "SAP",
+ "SAT", "SAW", "SAY", "SEA", "SEC", "SEE", "SEN",
+ "SET", "SEW", "SHE", "SHY", "SIN", "SIP", "SIR",
+ "SIS", "SIT", "SKI", "SKY", "SLY", "SO", "SOB",
+ "SOD", "SON", "SOP", "SOW", "SOY", "SPA", "SPY",
+ "SUB", "SUD", "SUE", "SUM", "SUN", "SUP", "TAB",
+ "TAD", "TAG", "TAN", "TAP", "TAR", "TEA", "TED",
+ "TEE", "TEN", "THE", "THY", "TIC", "TIE", "TIM",
+ "TIN", "TIP", "TO", "TOE", "TOG", "TOM", "TON",
+ "TOO", "TOP", "TOW", "TOY", "TRY", "TUB", "TUG",
+ "TUM", "TUN", "TWO", "UN", "UP", "US", "USE",
+ "VAN", "VAT", "VET", "VIE", "WAD", "WAG", "WAR",
+ "WAS", "WAY", "WE", "WEB", "WED", "WEE", "WET",
+ "WHO", "WHY", "WIN", "WIT", "WOK", "WON", "WOO",
+ "WOW", "WRY", "WU", "YAM", "YAP", "YAW", "YE",
+ "YEA", "YES", "YET", "YOU", "ABED", "ABEL", "ABET",
+ "ABLE", "ABUT", "ACHE", "ACID", "ACME", "ACRE", "ACTA",
+ "ACTS", "ADAM", "ADDS", "ADEN", "AFAR", "AFRO", "AGEE",
+ "AHEM", "AHOY", "AIDA", "AIDE", "AIDS", "AIRY", "AJAR",
+ "AKIN", "ALAN", "ALEC", "ALGA", "ALIA", "ALLY", "ALMA",
+ "ALOE", "ALSO", "ALTO", "ALUM", "ALVA", "AMEN", "AMES",
+ "AMID", "AMMO", "AMOK", "AMOS", "AMRA", "ANDY", "ANEW",
+ "ANNA", "ANNE", "ANTE", "ANTI", "AQUA", "ARAB", "ARCH",
+ "AREA", "ARGO", "ARID", "ARMY", "ARTS", "ARTY", "ASIA",
+ "ASKS", "ATOM", "AUNT", "AURA", "AUTO", "AVER", "AVID",
+ "AVIS", "AVON", "AVOW", "AWAY", "AWRY", "BABE", "BABY",
+ "BACH", "BACK", "BADE", "BAIL", "BAIT", "BAKE", "BALD",
+ "BALE", "BALI", "BALK", "BALL", "BALM", "BAND", "BANE",
+ "BANG", "BANK", "BARB", "BARD", "BARE", "BARK", "BARN",
+ "BARR", "BASE", "BASH", "BASK", "BASS", "BATE", "BATH",
+ "BAWD", "BAWL", "BEAD", "BEAK", "BEAM", "BEAN", "BEAR",
+ "BEAT", "BEAU", "BECK", "BEEF", "BEEN", "BEER", "BEET",
+ "BELA", "BELL", "BELT", "BEND", "BENT", "BERG", "BERN",
+ "BERT", "BESS", "BEST", "BETA", "BETH", "BHOY", "BIAS",
+ "BIDE", "BIEN", "BILE", "BILK", "BILL", "BIND", "BING",
+ "BIRD", "BITE", "BITS", "BLAB", "BLAT", "BLED", "BLEW",
+ "BLOB", "BLOC", "BLOT", "BLOW", "BLUE", "BLUM", "BLUR",
+ "BOAR", "BOAT", "BOCA", "BOCK", "BODE", "BODY", "BOGY",
+ "BOHR", "BOIL", "BOLD", "BOLO", "BOLT", "BOMB", "BONA",
+ "BOND", "BONE", "BONG", "BONN", "BONY", "BOOK", "BOOM",
+ "BOON", "BOOT", "BORE", "BORG", "BORN", "BOSE", "BOSS",
+ "BOTH", "BOUT", "BOWL", "BOYD", "BRAD", "BRAE", "BRAG",
+ "BRAN", "BRAY", "BRED", "BREW", "BRIG", "BRIM", "BROW",
+ "BUCK", "BUDD", "BUFF", "BULB", "BULK", "BULL", "BUNK",
+ "BUNT", "BUOY", "BURG", "BURL", "BURN", "BURR", "BURT",
+ "BURY", "BUSH", "BUSS", "BUST", "BUSY", "BYTE", "CADY",
+ "CAFE", "CAGE", "CAIN", "CAKE", "CALF", "CALL", "CALM",
+ "CAME", "CANE", "CANT", "CARD", "CARE", "CARL", "CARR",
+ "CART", "CASE", "CASH", "CASK", "CAST", "CAVE", "CEIL",
+ "CELL", "CENT", "CERN", "CHAD", "CHAR", "CHAT", "CHAW",
+ "CHEF", "CHEN", "CHEW", "CHIC", "CHIN", "CHOU", "CHOW",
+ "CHUB", "CHUG", "CHUM", "CITE", "CITY", "CLAD", "CLAM",
+ "CLAN", "CLAW", "CLAY", "CLOD", "CLOG", "CLOT", "CLUB",
+ "CLUE", "COAL", "COAT", "COCA", "COCK", "COCO", "CODA",
+ "CODE", "CODY", "COED", "COIL", "COIN", "COKE", "COLA",
+ "COLD", "COLT", "COMA", "COMB", "COME", "COOK", "COOL",
+ "COON", "COOT", "CORD", "CORE", "CORK", "CORN", "COST",
+ "COVE", "COWL", "CRAB", "CRAG", "CRAM", "CRAY", "CREW",
+ "CRIB", "CROW", "CRUD", "CUBA", "CUBE", "CUFF", "CULL",
+ "CULT", "CUNY", "CURB", "CURD", "CURE", "CURL", "CURT",
+ "CUTS", "DADE", "DALE", "DAME", "DANA", "DANE", "DANG",
+ "DANK", "DARE", "DARK", "DARN", "DART", "DASH", "DATA",
+ "DATE", "DAVE", "DAVY", "DAWN", "DAYS", "DEAD", "DEAF",
+ "DEAL", "DEAN", "DEAR", "DEBT", "DECK", "DEED", "DEEM",
+ "DEER", "DEFT", "DEFY", "DELL", "DENT", "DENY", "DESK",
+ "DIAL", "DICE", "DIED", "DIET", "DIME", "DINE", "DING",
+ "DINT", "DIRE", "DIRT", "DISC", "DISH", "DISK", "DIVE",
+ "DOCK", "DOES", "DOLE", "DOLL", "DOLT", "DOME", "DONE",
+ "DOOM", "DOOR", "DORA", "DOSE", "DOTE", "DOUG", "DOUR",
+ "DOVE", "DOWN", "DRAB", "DRAG", "DRAM", "DRAW", "DREW",
+ "DRUB", "DRUG", "DRUM", "DUAL", "DUCK", "DUCT", "DUEL",
+ "DUET", "DUKE", "DULL", "DUMB", "DUNE", "DUNK", "DUSK",
+ "DUST", "DUTY", "EACH", "EARL", "EARN", "EASE", "EAST",
+ "EASY", "EBEN", "ECHO", "EDDY", "EDEN", "EDGE", "EDGY",
+ "EDIT", "EDNA", "EGAN", "ELAN", "ELBA", "ELLA", "ELSE",
+ "EMIL", "EMIT", "EMMA", "ENDS", "ERIC", "EROS", "EVEN",
+ "EVER", "EVIL", "EYED", "FACE", "FACT", "FADE", "FAIL",
+ "FAIN", "FAIR", "FAKE", "FALL", "FAME", "FANG", "FARM",
+ "FAST", "FATE", "FAWN", "FEAR", "FEAT", "FEED", "FEEL",
+ "FEET", "FELL", "FELT", "FEND", "FERN", "FEST", "FEUD",
+ "FIEF", "FIGS", "FILE", "FILL", "FILM", "FIND", "FINE",
+ "FINK", "FIRE", "FIRM", "FISH", "FISK", "FIST", "FITS",
+ "FIVE", "FLAG", "FLAK", "FLAM", "FLAT", "FLAW", "FLEA",
+ "FLED", "FLEW", "FLIT", "FLOC", "FLOG", "FLOW", "FLUB",
+ "FLUE", "FOAL", "FOAM", "FOGY", "FOIL", "FOLD", "FOLK",
+ "FOND", "FONT", "FOOD", "FOOL", "FOOT", "FORD", "FORE",
+ "FORK", "FORM", "FORT", "FOSS", "FOUL", "FOUR", "FOWL",
+ "FRAU", "FRAY", "FRED", "FREE", "FRET", "FREY", "FROG",
+ "FROM", "FUEL", "FULL", "FUME", "FUND", "FUNK", "FURY",
+ "FUSE", "FUSS", "GAFF", "GAGE", "GAIL", "GAIN", "GAIT",
+ "GALA", "GALE", "GALL", "GALT", "GAME", "GANG", "GARB",
+ "GARY", "GASH", "GATE", "GAUL", "GAUR", "GAVE", "GAWK",
+ "GEAR", "GELD", "GENE", "GENT", "GERM", "GETS", "GIBE",
+ "GIFT", "GILD", "GILL", "GILT", "GINA", "GIRD", "GIRL",
+ "GIST", "GIVE", "GLAD", "GLEE", "GLEN", "GLIB", "GLOB",
+ "GLOM", "GLOW", "GLUE", "GLUM", "GLUT", "GOAD", "GOAL",
+ "GOAT", "GOER", "GOES", "GOLD", "GOLF", "GONE", "GONG",
+ "GOOD", "GOOF", "GORE", "GORY", "GOSH", "GOUT", "GOWN",
+ "GRAB", "GRAD", "GRAY", "GREG", "GREW", "GREY", "GRID",
+ "GRIM", "GRIN", "GRIT", "GROW", "GRUB", "GULF", "GULL",
+ "GUNK", "GURU", "GUSH", "GUST", "GWEN", "GWYN", "HAAG",
+ "HAAS", "HACK", "HAIL", "HAIR", "HALE", "HALF", "HALL",
+ "HALO", "HALT", "HAND", "HANG", "HANK", "HANS", "HARD",
+ "HARK", "HARM", "HART", "HASH", "HAST", "HATE", "HATH",
+ "HAUL", "HAVE", "HAWK", "HAYS", "HEAD", "HEAL", "HEAR",
+ "HEAT", "HEBE", "HECK", "HEED", "HEEL", "HEFT", "HELD",
+ "HELL", "HELM", "HERB", "HERD", "HERE", "HERO", "HERS",
+ "HESS", "HEWN", "HICK", "HIDE", "HIGH", "HIKE", "HILL",
+ "HILT", "HIND", "HINT", "HIRE", "HISS", "HIVE", "HOBO",
+ "HOCK", "HOFF", "HOLD", "HOLE", "HOLM", "HOLT", "HOME",
+ "HONE", "HONK", "HOOD", "HOOF", "HOOK", "HOOT", "HORN",
+ "HOSE", "HOST", "HOUR", "HOVE", "HOWE", "HOWL", "HOYT",
+ "HUCK", "HUED", "HUFF", "HUGE", "HUGH", "HUGO", "HULK",
+ "HULL", "HUNK", "HUNT", "HURD", "HURL", "HURT", "HUSH",
+ "HYDE", "HYMN", "IBIS", "ICON", "IDEA", "IDLE", "IFFY",
+ "INCA", "INCH", "INTO", "IONS", "IOTA", "IOWA", "IRIS",
+ "IRMA", "IRON", "ISLE", "ITCH", "ITEM", "IVAN", "JACK",
+ "JADE", "JAIL", "JAKE", "JANE", "JAVA", "JEAN", "JEFF",
+ "JERK", "JESS", "JEST", "JIBE", "JILL", "JILT", "JIVE",
+ "JOAN", "JOBS", "JOCK", "JOEL", "JOEY", "JOHN", "JOIN",
+ "JOKE", "JOLT", "JOVE", "JUDD", "JUDE", "JUDO", "JUDY",
+ "JUJU", "JUKE", "JULY", "JUNE", "JUNK", "JUNO", "JURY",
+ "JUST", "JUTE", "KAHN", "KALE", "KANE", "KANT", "KARL",
+ "KATE", "KEEL", "KEEN", "KENO", "KENT", "KERN", "KERR",
+ "KEYS", "KICK", "KILL", "KIND", "KING", "KIRK", "KISS",
+ "KITE", "KLAN", "KNEE", "KNEW", "KNIT", "KNOB", "KNOT",
+ "KNOW", "KOCH", "KONG", "KUDO", "KURD", "KURT", "KYLE",
+ "LACE", "LACK", "LACY", "LADY", "LAID", "LAIN", "LAIR",
+ "LAKE", "LAMB", "LAME", "LAND", "LANE", "LANG", "LARD",
+ "LARK", "LASS", "LAST", "LATE", "LAUD", "LAVA", "LAWN",
+ "LAWS", "LAYS", "LEAD", "LEAF", "LEAK", "LEAN", "LEAR",
+ "LEEK", "LEER", "LEFT", "LEND", "LENS", "LENT", "LEON",
+ "LESK", "LESS", "LEST", "LETS", "LIAR", "LICE", "LICK",
+ "LIED", "LIEN", "LIES", "LIEU", "LIFE", "LIFT", "LIKE",
+ "LILA", "LILT", "LILY", "LIMA", "LIMB", "LIME", "LIND",
+ "LINE", "LINK", "LINT", "LION", "LISA", "LIST", "LIVE",
+ "LOAD", "LOAF", "LOAM", "LOAN", "LOCK", "LOFT", "LOGE",
+ "LOIS", "LOLA", "LONE", "LONG", "LOOK", "LOON", "LOOT",
+ "LORD", "LORE", "LOSE", "LOSS", "LOST", "LOUD", "LOVE",
+ "LOWE", "LUCK", "LUCY", "LUGE", "LUKE", "LULU", "LUND",
+ "LUNG", "LURA", "LURE", "LURK", "LUSH", "LUST", "LYLE",
+ "LYNN", "LYON", "LYRA", "MACE", "MADE", "MAGI", "MAID",
+ "MAIL", "MAIN", "MAKE", "MALE", "MALI", "MALL", "MALT",
+ "MANA", "MANN", "MANY", "MARC", "MARE", "MARK", "MARS",
+ "MART", "MARY", "MASH", "MASK", "MASS", "MAST", "MATE",
+ "MATH", "MAUL", "MAYO", "MEAD", "MEAL", "MEAN", "MEAT",
+ "MEEK", "MEET", "MELD", "MELT", "MEMO", "MEND", "MENU",
+ "MERT", "MESH", "MESS", "MICE", "MIKE", "MILD", "MILE",
+ "MILK", "MILL", "MILT", "MIMI", "MIND", "MINE", "MINI",
+ "MINK", "MINT", "MIRE", "MISS", "MIST", "MITE", "MITT",
+ "MOAN", "MOAT", "MOCK", "MODE", "MOLD", "MOLE", "MOLL",
+ "MOLT", "MONA", "MONK", "MONT", "MOOD", "MOON", "MOOR",
+ "MOOT", "MORE", "MORN", "MORT", "MOSS", "MOST", "MOTH",
+ "MOVE", "MUCH", "MUCK", "MUDD", "MUFF", "MULE", "MULL",
+ "MURK", "MUSH", "MUST", "MUTE", "MUTT", "MYRA", "MYTH",
+ "NAGY", "NAIL", "NAIR", "NAME", "NARY", "NASH", "NAVE",
+ "NAVY", "NEAL", "NEAR", "NEAT", "NECK", "NEED", "NEIL",
+ "NELL", "NEON", "NERO", "NESS", "NEST", "NEWS", "NEWT",
+ "NIBS", "NICE", "NICK", "NILE", "NINA", "NINE", "NOAH",
+ "NODE", "NOEL", "NOLL", "NONE", "NOOK", "NOON", "NORM",
+ "NOSE", "NOTE", "NOUN", "NOVA", "NUDE", "NULL", "NUMB",
+ "OATH", "OBEY", "OBOE", "ODIN", "OHIO", "OILY", "OINT",
+ "OKAY", "OLAF", "OLDY", "OLGA", "OLIN", "OMAN", "OMEN",
+ "OMIT", "ONCE", "ONES", "ONLY", "ONTO", "ONUS", "ORAL",
+ "ORGY", "OSLO", "OTIS", "OTTO", "OUCH", "OUST", "OUTS",
+ "OVAL", "OVEN", "OVER", "OWLY", "OWNS", "QUAD", "QUIT",
+ "QUOD", "RACE", "RACK", "RACY", "RAFT", "RAGE", "RAID",
+ "RAIL", "RAIN", "RAKE", "RANK", "RANT", "RARE", "RASH",
+ "RATE", "RAVE", "RAYS", "READ", "REAL", "REAM", "REAR",
+ "RECK", "REED", "REEF", "REEK", "REEL", "REID", "REIN",
+ "RENA", "REND", "RENT", "REST", "RICE", "RICH", "RICK",
+ "RIDE", "RIFT", "RILL", "RIME", "RING", "RINK", "RISE",
+ "RISK", "RITE", "ROAD", "ROAM", "ROAR", "ROBE", "ROCK",
+ "RODE", "ROIL", "ROLL", "ROME", "ROOD", "ROOF", "ROOK",
+ "ROOM", "ROOT", "ROSA", "ROSE", "ROSS", "ROSY", "ROTH",
+ "ROUT", "ROVE", "ROWE", "ROWS", "RUBE", "RUBY", "RUDE",
+ "RUDY", "RUIN", "RULE", "RUNG", "RUNS", "RUNT", "RUSE",
+ "RUSH", "RUSK", "RUSS", "RUST", "RUTH", "SACK", "SAFE",
+ "SAGE", "SAID", "SAIL", "SALE", "SALK", "SALT", "SAME",
+ "SAND", "SANE", "SANG", "SANK", "SARA", "SAUL", "SAVE",
+ "SAYS", "SCAN", "SCAR", "SCAT", "SCOT", "SEAL", "SEAM",
+ "SEAR", "SEAT", "SEED", "SEEK", "SEEM", "SEEN", "SEES",
+ "SELF", "SELL", "SEND", "SENT", "SETS", "SEWN", "SHAG",
+ "SHAM", "SHAW", "SHAY", "SHED", "SHIM", "SHIN", "SHOD",
+ "SHOE", "SHOT", "SHOW", "SHUN", "SHUT", "SICK", "SIDE",
+ "SIFT", "SIGH", "SIGN", "SILK", "SILL", "SILO", "SILT",
+ "SINE", "SING", "SINK", "SIRE", "SITE", "SITS", "SITU",
+ "SKAT", "SKEW", "SKID", "SKIM", "SKIN", "SKIT", "SLAB",
+ "SLAM", "SLAT", "SLAY", "SLED", "SLEW", "SLID", "SLIM",
+ "SLIT", "SLOB", "SLOG", "SLOT", "SLOW", "SLUG", "SLUM",
+ "SLUR", "SMOG", "SMUG", "SNAG", "SNOB", "SNOW", "SNUB",
+ "SNUG", "SOAK", "SOAR", "SOCK", "SODA", "SOFA", "SOFT",
+ "SOIL", "SOLD", "SOME", "SONG", "SOON", "SOOT", "SORE",
+ "SORT", "SOUL", "SOUR", "SOWN", "STAB", "STAG", "STAN",
+ "STAR", "STAY", "STEM", "STEW", "STIR", "STOW", "STUB",
+ "STUN", "SUCH", "SUDS", "SUIT", "SULK", "SUMS", "SUNG",
+ "SUNK", "SURE", "SURF", "SWAB", "SWAG", "SWAM", "SWAN",
+ "SWAT", "SWAY", "SWIM", "SWUM", "TACK", "TACT", "TAIL",
+ "TAKE", "TALE", "TALK", "TALL", "TANK", "TASK", "TATE",
+ "TAUT", "TEAL", "TEAM", "TEAR", "TECH", "TEEM", "TEEN",
+ "TEET", "TELL", "TEND", "TENT", "TERM", "TERN", "TESS",
+ "TEST", "THAN", "THAT", "THEE", "THEM", "THEN", "THEY",
+ "THIN", "THIS", "THUD", "THUG", "TICK", "TIDE", "TIDY",
+ "TIED", "TIER", "TILE", "TILL", "TILT", "TIME", "TINA",
+ "TINE", "TINT", "TINY", "TIRE", "TOAD", "TOGO", "TOIL",
+ "TOLD", "TOLL", "TONE", "TONG", "TONY", "TOOK", "TOOL",
+ "TOOT", "TORE", "TORN", "TOTE", "TOUR", "TOUT", "TOWN",
+ "TRAG", "TRAM", "TRAY", "TREE", "TREK", "TRIG", "TRIM",
+ "TRIO", "TROD", "TROT", "TROY", "TRUE", "TUBA", "TUBE",
+ "TUCK", "TUFT", "TUNA", "TUNE", "TUNG", "TURF", "TURN",
+ "TUSK", "TWIG", "TWIN", "TWIT", "ULAN", "UNIT", "URGE",
+ "USED", "USER", "USES", "UTAH", "VAIL", "VAIN", "VALE",
+ "VARY", "VASE", "VAST", "VEAL", "VEDA", "VEIL", "VEIN",
+ "VEND", "VENT", "VERB", "VERY", "VETO", "VICE", "VIEW",
+ "VINE", "VISE", "VOID", "VOLT", "VOTE", "WACK", "WADE",
+ "WAGE", "WAIL", "WAIT", "WAKE", "WALE", "WALK", "WALL",
+ "WALT", "WAND", "WANE", "WANG", "WANT", "WARD", "WARM",
+ "WARN", "WART", "WASH", "WAST", "WATS", "WATT", "WAVE",
+ "WAVY", "WAYS", "WEAK", "WEAL", "WEAN", "WEAR", "WEED",
+ "WEEK", "WEIR", "WELD", "WELL", "WELT", "WENT", "WERE",
+ "WERT", "WEST", "WHAM", "WHAT", "WHEE", "WHEN", "WHET",
+ "WHOA", "WHOM", "WICK", "WIFE", "WILD", "WILL", "WIND",
+ "WINE", "WING", "WINK", "WINO", "WIRE", "WISE", "WISH",
+ "WITH", "WOLF", "WONT", "WOOD", "WOOL", "WORD", "WORE",
+ "WORK", "WORM", "WORN", "WOVE", "WRIT", "WYNN", "YALE",
+ "YANG", "YANK", "YARD", "YARN", "YAWL", "YAWN", "YEAH",
+ "YEAR", "YELL", "YOGA", "YOKE"
};
-/* Encode 8 bytes in 'c' as a string of English words.
+/*
+ * Encode 8 bytes in 'c' as a string of English words.
* Returns a pointer to a static buffer
*/
char *
btoe(engout, c)
- char *c;
char *engout;
+ char *c;
{
char cp[10]; /* add in room for the parity 2 bits + extract() slop */
- int p, i;
-
- engout[0] = '\0';
+ int p, i, indices[6];
/* workaround for extract() reads beyond end of data */
(void)memset(cp, 0, sizeof(cp));
@@ -2094,29 +339,26 @@ btoe(engout, c)
/* compute parity */
for (p = 0, i = 0; i < 64; i += 2)
- p += extract (cp, i, 2);
+ p += extract(cp, i, 2);
cp[8] = (char)p << 6;
- (void)strncat(engout, &Wp[extract (cp, 0, 11)][0], 4);
- (void)strcat(engout, " ");
- (void)strncat(engout, &Wp[extract (cp, 11, 11)][0], 4);
- (void)strcat(engout, " ");
- (void)strncat(engout, &Wp[extract (cp, 22, 11)][0], 4);
- (void)strcat(engout, " ");
- (void)strncat(engout, &Wp[extract (cp, 33, 11)][0], 4);
- (void)strcat(engout, " ");
- (void)strncat(engout, &Wp[extract (cp, 44, 11)][0], 4);
- (void)strcat(engout, " ");
- (void)strncat(engout, &Wp[extract (cp, 55, 11)][0], 4);
+ indices[0] = extract(cp, 0, 11);
+ indices[1] = extract(cp, 11, 11);
+ indices[2] = extract(cp, 22, 11);
+ indices[3] = extract(cp, 33, 11);
+ indices[4] = extract(cp, 44, 11);
+ indices[5] = extract(cp, 55, 11);
+
+ sprintf(engout, "%.4s %.4s %.4s %.4s %.4s %.4s", Wp[indices[0]],
+ Wp[indices[1]], Wp[indices[2]], Wp[indices[3]],
+ Wp[indices[4]], Wp[indices[5]]);
-#ifdef notdef
- (void)fprintf(stderr, "engout is %s\n\r", engout);
-#endif
return(engout);
}
-/* convert English to binary
+/*
+ * convert English to binary
* returns 1 OK - all good words and parity is OK
* 0 word not in data base
* -1 badly formed in put ie > 4 char word
@@ -2140,7 +382,7 @@ etob(out, e)
(void)memset(b, 0, sizeof(b));
(void)memset(out, 0, SKEY_BINKEY_SIZE);
for (i = 0, p = 0; i < 6; i++, p += 11) {
- if ((word = strtok(i == 0 ? input : NULL, " ")) == NULL)
+ if ((word = strtok(i == 0 ? input : NULL, " ")) == NULL)
return(-1);
l = strlen(word);
@@ -2155,7 +397,7 @@ etob(out, e)
}
standard(word);
- if ((v = wsrch(word, low, high)) < 0)
+ if ((v = wsrch(word, low, high)) < 0)
return(0);
insert(b, v, p, 11);
@@ -2163,9 +405,9 @@ etob(out, e)
/* now check the parity of what we got */
for (p = 0, i = 0; i < 64; i += 2)
- p += extract (b, i, 2);
+ p += extract(b, i, 2);
- if ((p & 3) != extract (b, 64, 2))
+ if ((p & 3) != extract(b, 64, 2))
return(-2);
(void)memcpy(out, b, SKEY_BINKEY_SIZE);
@@ -2186,27 +428,6 @@ put8(out, s)
return(out);
}
-#ifdef notdef
-/* Encode 8 bytes in 'cp' as stream of ascii letters.
- * Provided as a possible alternative to btoe()
- */
-char *
-btoc(cp)
- char *cp;
-{
- int i;
- static char out[31];
-
- /* code out put by characters 6 bits each added to 0x21 (!) */
- for (i = 0; i <= 10; i++) {
- /* last one is only 4 bits not 6 */
- out[i] = '!' + extract (cp, 6 * i, i >= 10 ? 4 : 6);
- }
- out[i] = '\0';
- return(out);
-}
-#endif
-
/* Internal subroutines for word encoding/decoding */
/* Dictionary binary search */
@@ -2278,8 +499,9 @@ insert(s, x, start, length)
static void
standard(word)
- register char *word;
+ char *word;
{
+
while (*word) {
if (!isascii(*word))
break;