diff options
Diffstat (limited to 'lib/libskey/put.c')
-rw-r--r-- | lib/libskey/put.c | 2293 |
1 files changed, 2293 insertions, 0 deletions
diff --git a/lib/libskey/put.c b/lib/libskey/put.c new file mode 100644 index 0000000..e57d9ca --- /dev/null +++ b/lib/libskey/put.c @@ -0,0 +1,2293 @@ +#include <stdio.h> +#include <string.h> +#include <assert.h> +#include <ctype.h> +#include "skey.h" + +static unsigned long 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" +}; + +/* Encode 8 bytes in 'c' as a string of English words. + * Returns a pointer to a static buffer + */ +char * +btoe(engout,c) +char *c, *engout; +{ + char cp[9]; /* add in room for the parity 2 bits*/ + int p,i ; + + engout[0] = '\0'; + memcpy(cp, c,8); + /* compute parity */ + for(p = 0,i = 0; i < 64;i += 2) + p += extract(cp,i,2); + + cp[8] = (char)p << 6; + strncat(engout,&Wp[extract(cp, 0,11)][0],4); + strcat(engout," "); + strncat(engout,&Wp[extract(cp,11,11)][0],4); + strcat(engout," "); + strncat(engout,&Wp[extract(cp,22,11)][0],4); + strcat(engout," "); + strncat(engout,&Wp[extract(cp,33,11)][0],4); + strcat(engout," "); + strncat(engout,&Wp[extract(cp,44,11)][0],4); + strcat(engout," "); + strncat(engout,&Wp[extract(cp,55,11)][0],4); +#ifdef notdef + printf("engout is %s\n\r",engout); +#endif + return(engout); +} + +/* 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 + * -2 words OK but parity is wrong + */ +int +etob(out, e) +char *out; +char *e; +{ + char *word, *cp; + int i, v,l, low,high; + unsigned int p; + char b[9]; + char input[36]; + + if(e == NULL) + return -1; + + strncpy(input,e,sizeof(input)); + cp = input; + memset(b, 0, sizeof(b)); + memset(out, 0, 8); + for(i=0,p=0;i<6;i++,p+=11){ + while ((word = strsep(&cp, " ")) != NULL && *word == '\0') + ; + if (word == NULL) + return -1; + l = strlen(word); + if(l > 4 || l < 1){ + return -1; + } else if(l < 4){ + low = 0; + high = 570; + } else { + low = 571; + high = 2047; + } + standard(word); + if( (v = wsrch(word,low,high)) < 0 ) + return 0; + insert(b,v,(int)p,11); + } + + /* now check the parity of what we got */ + for(p = 0, i = 0; i < 64; i +=2) + p += extract(b, i, 2); + + if( (p & 3) != extract(b, 64,2) ) + return -2; + + memcpy(out,b,8); + + return 1; +} +/* Display 8 bytes as a series of 16-bit hex digits */ +char * +put8(out,s) +char *out; +char *s; +{ + sprintf(out,"%02X%02X %02X%02X %02X%02X %02X%02X", + s[0] & 0xff,s[1] & 0xff,s[2] & 0xff, + s[3] & 0xff,s[4] & 0xff,s[5] & 0xff, + s[6] & 0xff,s[7] & 0xff); + 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 */ +static int +wsrch(w,low,high) +char *w; +int low, high; +{ + int i,j; + + for(;;){ + i = (low + high)/2; + if((j = strncmp(w,Wp[i],4)) == 0) + return i; /* Found it */ + if(high == low+1){ + /* Avoid effects of integer truncation in /2 */ + if(strncmp(w,Wp[high],4) == 0) + return high; + else + return -1; + } + if(low >= high) + return -1; /* I don't *think* this can happen...*/ + if(j < 0) + high = i; /* Search lower half */ + else + low = i; /* Search upper half */ + } +} +static void +insert(s, x, start, length) +char *s; +int x; +int start, length; +{ + unsigned char cl; + unsigned char cc; + unsigned char cr; + unsigned long y; + int shift; + + assert(length <= 11); + assert(start >= 0); + assert(length >= 0); + assert(start +length <= 66); + + shift = ((8 -(( start + length) % 8))%8); + y = (long) x << shift; + cl = (y >> 16) & 0xff; + cc = (y >> 8) & 0xff; + cr = y & 0xff; + if(shift + length > 16){ + s[start /8] |= cl; + s[start/8 +1] |= cc; + s[start/8 +2] |= cr; + } else if(shift +length > 8){ + s[start/8] |= cc; + s[start/8 + 1] |= cr; + } else { + s[start/8] |= cr; + } +} + +static void +standard(word) +register char *word; +{ + while(*word){ + if(!isascii(*word)) + break; + if(islower(*word)) + *word = toupper(*word); + if(*word == '1') + *word = 'L'; + if(*word == '0') + *word = 'O'; + if(*word == '5') + *word = 'S'; + word++; + } +} + +/* Extract 'length' bits from the char array 's' starting with bit 'start' */ +static unsigned long +extract(s, start, length) +char *s; +int start, length; +{ + unsigned char cl; + unsigned char cc; + unsigned char cr; + unsigned long x; + + assert(length <= 11); + assert(start >= 0); + assert(length >= 0); + assert(start +length <= 66); + + cl = s[start/8]; + cc = s[start/8 +1]; + cr = s[start/8 +2]; + x = ((long)(cl<<8 | cc) <<8 | cr) ; + x = x >> (24 - (length + (start %8))); + x =( x & (0xffff >> (16-length) ) ); + return(x); +} + |