Index: src/db.c ================================================================== --- src/db.c +++ src/db.c @@ -739,11 +739,11 @@ ); sqlite3_create_function( db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0 ); if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0); - re_add_sql_func(db); + add_sql_func(db); sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0); return db; } Index: src/main.mk ================================================================== --- src/main.mk +++ src/main.mk @@ -75,10 +75,11 @@ $(SRCDIR)/markdown.c \ $(SRCDIR)/markdown_html.c \ $(SRCDIR)/md5.c \ $(SRCDIR)/merge.c \ $(SRCDIR)/merge3.c \ + $(SRCDIR)/mnemonic.c \ $(SRCDIR)/moderate.c \ $(SRCDIR)/name.c \ $(SRCDIR)/path.c \ $(SRCDIR)/pivot.c \ $(SRCDIR)/popen.c \ @@ -185,10 +186,11 @@ $(OBJDIR)/markdown_.c \ $(OBJDIR)/markdown_html_.c \ $(OBJDIR)/md5_.c \ $(OBJDIR)/merge_.c \ $(OBJDIR)/merge3_.c \ + $(OBJDIR)/mnemonic_.c \ $(OBJDIR)/moderate_.c \ $(OBJDIR)/name_.c \ $(OBJDIR)/path_.c \ $(OBJDIR)/pivot_.c \ $(OBJDIR)/popen_.c \ @@ -295,10 +297,11 @@ $(OBJDIR)/markdown.o \ $(OBJDIR)/markdown_html.o \ $(OBJDIR)/md5.o \ $(OBJDIR)/merge.o \ $(OBJDIR)/merge3.o \ + $(OBJDIR)/mnemonic.o \ $(OBJDIR)/moderate.o \ $(OBJDIR)/name.o \ $(OBJDIR)/path.o \ $(OBJDIR)/pivot.o \ $(OBJDIR)/popen.o \ @@ -422,11 +425,11 @@ $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex $(OBJDIR)/mkindex $(TRANS_SRC) >$@ $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h - $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_status_.c:$(OBJDIR)/json_status.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/lookslike_.c:$(OBJDIR)/lookslike.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h + $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_status_.c:$(OBJDIR)/json_status.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/lookslike_.c:$(OBJDIR)/lookslike.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/mnemonic_.c:$(OBJDIR)/mnemonic.h $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/regexp_.c:$(OBJDIR)/regexp.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/unicode_.c:$(OBJDIR)/unicode.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h $(OBJDIR)/util_.c:$(OBJDIR)/util.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h touch $(OBJDIR)/headers $(OBJDIR)/headers: Makefile $(OBJDIR)/json.o $(OBJDIR)/json_artifact.o $(OBJDIR)/json_branch.o $(OBJDIR)/json_config.o $(OBJDIR)/json_diff.o $(OBJDIR)/json_dir.o $(OBJDIR)/json_finfo.o $(OBJDIR)/json_login.o $(OBJDIR)/json_query.o $(OBJDIR)/json_report.o $(OBJDIR)/json_status.o $(OBJDIR)/json_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h Makefile: $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate @@ -868,10 +871,17 @@ $(OBJDIR)/merge3.o: $(OBJDIR)/merge3_.c $(OBJDIR)/merge3.h $(SRCDIR)/config.h $(XTCC) -o $(OBJDIR)/merge3.o -c $(OBJDIR)/merge3_.c $(OBJDIR)/merge3.h: $(OBJDIR)/headers +$(OBJDIR)/mnemonic_.c: $(SRCDIR)/mnemonic.c $(OBJDIR)/translate + $(OBJDIR)/translate $(SRCDIR)/mnemonic.c >$(OBJDIR)/mnemonic_.c + +$(OBJDIR)/mnemonic.o: $(OBJDIR)/mnemonic_.c $(OBJDIR)/mnemonic.h $(SRCDIR)/config.h + $(XTCC) -o $(OBJDIR)/mnemonic.o -c $(OBJDIR)/mnemonic_.c + +$(OBJDIR)/mnemonic.h: $(OBJDIR)/headers $(OBJDIR)/moderate_.c: $(SRCDIR)/moderate.c $(OBJDIR)/translate $(OBJDIR)/translate $(SRCDIR)/moderate.c >$(OBJDIR)/moderate_.c $(OBJDIR)/moderate.o: $(OBJDIR)/moderate_.c $(OBJDIR)/moderate.h $(SRCDIR)/config.h $(XTCC) -o $(OBJDIR)/moderate.o -c $(OBJDIR)/moderate_.c Index: src/makemake.tcl ================================================================== --- src/makemake.tcl +++ src/makemake.tcl @@ -79,10 +79,11 @@ markdown_html md5 merge merge3 moderate + mnemonic name path pivot popen pqueue ADDED src/mnemonic.c Index: src/mnemonic.c ================================================================== --- /dev/null +++ src/mnemonic.c @@ -0,0 +1,549 @@ +/* +** Copyright (c) 2008 D. Richard Hipp +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of the Simplified BSD License (also +** known as the "2-Clause License" or "FreeBSD License".) +** This program is distributed in the hope that it will be useful, +** but without any warranty; without even the implied warranty of +** merchantability or fitness for a particular purpose. +** +** Author contact information: +** drh@hwaci.com +** http://www.hwaci.com/drh/ +** +******************************************************************************* +** +** This file contains the code to do mnemonic encoding of commit IDs. The +** wordlist and algorithm were originally taken from: +** +** https://github.com/singpolyma/mnemonicode +** +** ...which is BSD licensed. However, the algorithm has since been heavily +** modified to more fit Fossil's special needs. +** +** The new algorithm works by reading hex characters one at a time and +** accumulating bits into a ring buffer. When available, 10 bits are consumed +** and used as a word index. This only uses 1024 of the available 1626 words +** but preserves the property that encoded strings may be truncated at any +** point and the resulting hex string, when decoded, is a truncated form of +** the original hex string. It is, unfortunately, slightly less efficient, and +** three words can only encode seven hex digits. +*/ + +#include "config.h" +#include "mnemonic.h" + +#define MN_BASE 1626 + +/* Number of bits to encode as a word. 10 is the maximum. */ +#define CHUNK_SIZE 10 + +static const char* basewordlist[MN_BASE] = +{ + "ACADEMY", "ACROBAT", "ACTIVE", "ACTOR", "ADAM", "ADMIRAL", + "ADRIAN", "AFRICA", "AGENDA", "AGENT", "AIRLINE", "AIRPORT", + "ALADDIN", "ALARM", "ALASKA", "ALBERT", "ALBINO", "ALBUM", + "ALCOHOL", "ALEX", "ALGEBRA", "ALIBI", "ALICE", "ALIEN", + "ALPHA", "ALPINE", "AMADEUS", "AMANDA", "AMAZON", "AMBER", + "AMERICA", "AMIGO", "ANALOG", "ANATOMY", "ANGEL", "ANIMAL", + "ANTENNA", "ANTONIO", "APOLLO", "APRIL", "ARCHIVE", "ARCTIC", + "ARIZONA", "ARNOLD", "AROMA", "ARTHUR", "ARTIST", "ASIA", + "ASPECT", "ASPIRIN", "ATHENA", "ATHLETE", "ATLAS", "AUDIO", + "AUGUST", "AUSTRIA", "AXIOM", "AZTEC", "BALANCE", "BALLAD", + "BANANA", "BANDIT", "BANJO", "BARCODE", "BARON", "BASIC", + "BATTERY", "BELGIUM", "BERLIN", "BERMUDA", "BERNARD", "BIKINI", + "BINARY", "BINGO", "BIOLOGY", "BLOCK", "BLONDE", "BONUS", + "BORIS", "BOSTON", "BOXER", "BRANDY", "BRAVO", "BRAZIL", + "BRONZE", "BROWN", "BRUCE", "BRUNO", "BURGER", "BURMA", + "CABINET", "CACTUS", "CAFE", "CAIRO", "CAKE", "CALYPSO", + "CAMEL", "CAMERA", "CAMPUS", "CANADA", "CANAL", "CANNON", + "CANOE", "CANTINA", "CANVAS", "CANYON", "CAPITAL", "CARAMEL", + "CARAVAN", "CARBON", "CARGO", "CARLO", "CAROL", "CARPET", + "CARTEL", "CASINO", "CASTLE", "CASTRO", "CATALOG", "CAVIAR", + "CECILIA", "CEMENT", "CENTER", "CENTURY", "CERAMIC", "CHAMBER", + "CHANCE", "CHANGE", "CHAOS", "CHARLIE", "CHARM", "CHARTER", + "CHEF", "CHEMIST", "CHERRY", "CHESS", "CHICAGO", "CHICKEN", + "CHIEF", "CHINA", "CIGAR", "CINEMA", "CIRCUS", "CITIZEN", + "CITY", "CLARA", "CLASSIC", "CLAUDIA", "CLEAN", "CLIENT", + "CLIMAX", "CLINIC", "CLOCK", "CLUB", "COBRA", "COCONUT", + "COLA", "COLLECT", "COLOMBO", "COLONY", "COLOR", "COMBAT", + "COMEDY", "COMET", "COMMAND", "COMPACT", "COMPANY", "COMPLEX", + "CONCEPT", "CONCERT", "CONNECT", "CONSUL", "CONTACT", "CONTEXT", + "CONTOUR", "CONTROL", "CONVERT", "COPY", "CORNER", "CORONA", + "CORRECT", "COSMOS", "COUPLE", "COURAGE", "COWBOY", "CRAFT", + "CRASH", "CREDIT", "CRICKET", "CRITIC", "CROWN", "CRYSTAL", + "CUBA", "CULTURE", "DALLAS", "DANCE", "DANIEL", "DAVID", + "DECADE", "DECIMAL", "DELIVER", "DELTA", "DELUXE", "DEMAND", + "DEMO", "DENMARK", "DERBY", "DESIGN", "DETECT", "DEVELOP", + "DIAGRAM", "DIALOG", "DIAMOND", "DIANA", "DIEGO", "DIESEL", + "DIET", "DIGITAL", "DILEMMA", "DIPLOMA", "DIRECT", "DISCO", + "DISNEY", "DISTANT", "DOCTOR", "DOLLAR", "DOMINIC", "DOMINO", + "DONALD", "DRAGON", "DRAMA", "DUBLIN", "DUET", "DYNAMIC", + "EAST", "ECOLOGY", "ECONOMY", "EDGAR", "EGYPT", "ELASTIC", + "ELEGANT", "ELEMENT", "ELITE", "ELVIS", "EMAIL", "ENERGY", + "ENGINE", "ENGLISH", "EPISODE", "EQUATOR", "ESCORT", "ETHNIC", + "EUROPE", "EVEREST", "EVIDENT", "EXACT", "EXAMPLE", "EXIT", + "EXOTIC", "EXPORT", "EXPRESS", "EXTRA", "FABRIC", "FACTOR", + "FALCON", "FAMILY", "FANTASY", "FASHION", "FIBER", "FICTION", + "FIDEL", "FIESTA", "FIGURE", "FILM", "FILTER", "FINAL", + "FINANCE", "FINISH", "FINLAND", "FLASH", "FLORIDA", "FLOWER", + "FLUID", "FLUTE", "FOCUS", "FORD", "FOREST", "FORMAL", + "FORMAT", "FORMULA", "FORTUNE", "FORUM", "FRAGILE", "FRANCE", + "FRANK", "FRIEND", "FROZEN", "FUTURE", "GABRIEL", "GALAXY", + "GALLERY", "GAMMA", "GARAGE", "GARDEN", "GARLIC", "GEMINI", + "GENERAL", "GENETIC", "GENIUS", "GERMANY", "GLOBAL", "GLORIA", + "GOLF", "GONDOLA", "GONG", "GOOD", "GORDON", "GORILLA", + "GRAND", "GRANITE", "GRAPH", "GREEN", "GROUP", "GUIDE", + "GUITAR", "GURU", "HAND", "HAPPY", "HARBOR", "HARMONY", + "HARVARD", "HAVANA", "HAWAII", "HELENA", "HELLO", "HENRY", + "HILTON", "HISTORY", "HORIZON", "HOTEL", "HUMAN", "HUMOR", + "ICON", "IDEA", "IGLOO", "IGOR", "IMAGE", "IMPACT", + "IMPORT", "INDEX", "INDIA", "INDIGO", "INPUT", "INSECT", + "INSTANT", "IRIS", "ITALIAN", "JACKET", "JACOB", "JAGUAR", + "JANET", "JAPAN", "JARGON", "JAZZ", "JEEP", "JOHN", + "JOKER", "JORDAN", "JUMBO", "JUNE", "JUNGLE", "JUNIOR", + "JUPITER", "KARATE", "KARMA", "KAYAK", "KERMIT", "KILO", + "KING", "KOALA", "KOREA", "LABOR", "LADY", "LAGOON", + "LAPTOP", "LASER", "LATIN", "LAVA", "LECTURE", "LEFT", + "LEGAL", "LEMON", "LEVEL", "LEXICON", "LIBERAL", "LIBRA", + "LIMBO", "LIMIT", "LINDA", "LINEAR", "LION", "LIQUID", + "LITER", "LITTLE", "LLAMA", "LOBBY", "LOBSTER", "LOCAL", + "LOGIC", "LOGO", "LOLA", "LONDON", "LOTUS", "LUCAS", + "LUNAR", "MACHINE", "MACRO", "MADAM", "MADONNA", "MADRID", + "MAESTRO", "MAGIC", "MAGNET", "MAGNUM", "MAJOR", "MAMA", + "MAMBO", "MANAGER", "MANGO", "MANILA", "MARCO", "MARINA", + "MARKET", "MARS", "MARTIN", "MARVIN", "MASTER", "MATRIX", + "MAXIMUM", "MEDIA", "MEDICAL", "MEGA", "MELODY", "MELON", + "MEMO", "MENTAL", "MENTOR", "MENU", "MERCURY", "MESSAGE", + "METAL", "METEOR", "METER", "METHOD", "METRO", "MEXICO", + "MIAMI", "MICRO", "MILLION", "MINERAL", "MINIMUM", "MINUS", + "MINUTE", "MIRACLE", "MIRAGE", "MIRANDA", "MISTER", "MIXER", + "MOBILE", "MODEL", "MODEM", "MODERN", "MODULAR", "MOMENT", + "MONACO", "MONICA", "MONITOR", "MONO", "MONSTER", "MONTANA", + "MORGAN", "MOTEL", "MOTIF", "MOTOR", "MOZART", "MULTI", + "MUSEUM", "MUSIC", "MUSTANG", "NATURAL", "NEON", "NEPAL", + "NEPTUNE", "NERVE", "NEUTRAL", "NEVADA", "NEWS", "NINJA", + "NIRVANA", "NORMAL", "NOVA", "NOVEL", "NUCLEAR", "NUMERIC", + "NYLON", "OASIS", "OBJECT", "OBSERVE", "OCEAN", "OCTOPUS", + "OLIVIA", "OLYMPIC", "OMEGA", "OPERA", "OPTIC", "OPTIMAL", + "ORANGE", "ORBIT", "ORGANIC", "ORIENT", "ORIGIN", "ORLANDO", + "OSCAR", "OXFORD", "OXYGEN", "OZONE", "PABLO", "PACIFIC", + "PAGODA", "PALACE", "PAMELA", "PANAMA", "PANDA", "PANEL", + "PANIC", "PARADOX", "PARDON", "PARIS", "PARKER", "PARKING", + "PARODY", "PARTNER", "PASSAGE", "PASSIVE", "PASTA", "PASTEL", + "PATENT", "PATRIOT", "PATROL", "PATRON", "PEGASUS", "PELICAN", + "PENGUIN", "PEPPER", "PERCENT", "PERFECT", "PERFUME", "PERIOD", + "PERMIT", "PERSON", "PERU", "PHONE", "PHOTO", "PIANO", + "PICASSO", "PICNIC", "PICTURE", "PIGMENT", "PILGRIM", "PILOT", + "PIRATE", "PIXEL", "PIZZA", "PLANET", "PLASMA", "PLASTER", + "PLASTIC", "PLAZA", "POCKET", "POEM", "POETIC", "POKER", + "POLARIS", "POLICE", "POLITIC", "POLO", "POLYGON", "PONY", + "POPCORN", "POPULAR", "POSTAGE", "POSTAL", "PRECISE", "PREFIX", + "PREMIUM", "PRESENT", "PRICE", "PRINCE", "PRINTER", "PRISM", + "PRIVATE", "PRODUCT", "PROFILE", "PROGRAM", "PROJECT", "PROTECT", + "PROTON", "PUBLIC", "PULSE", "PUMA", "PYRAMID", "QUEEN", + "RADAR", "RADIO", "RANDOM", "RAPID", "REBEL", "RECORD", + "RECYCLE", "REFLEX", "REFORM", "REGARD", "REGULAR", "RELAX", + "REPORT", "REPTILE", "REVERSE", "RICARDO", "RINGO", "RITUAL", + "ROBERT", "ROBOT", "ROCKET", "RODEO", "ROMEO", "ROYAL", + "RUSSIAN", "SAFARI", "SALAD", "SALAMI", "SALMON", "SALON", + "SALUTE", "SAMBA", "SANDRA", "SANTANA", "SARDINE", "SCHOOL", + "SCREEN", "SCRIPT", "SECOND", "SECRET", "SECTION", "SEGMENT", + "SELECT", "SEMINAR", "SENATOR", "SENIOR", "SENSOR", "SERIAL", + "SERVICE", "SHERIFF", "SHOCK", "SIERRA", "SIGNAL", "SILICON", + "SILVER", "SIMILAR", "SIMON", "SINGLE", "SIREN", "SLOGAN", + "SOCIAL", "SODA", "SOLAR", "SOLID", "SOLO", "SONIC", + "SOVIET", "SPECIAL", "SPEED", "SPIRAL", "SPIRIT", "SPORT", + "STATIC", "STATION", "STATUS", "STEREO", "STONE", "STOP", + "STREET", "STRONG", "STUDENT", "STUDIO", "STYLE", "SUBJECT", + "SULTAN", "SUPER", "SUSAN", "SUSHI", "SUZUKI", "SWITCH", + "SYMBOL", "SYSTEM", "TACTIC", "TAHITI", "TALENT", "TANGO", + "TARZAN", "TAXI", "TELEX", "TEMPO", "TENNIS", "TEXAS", + "TEXTILE", "THEORY", "THERMOS", "TIGER", "TITANIC", "TOKYO", + "TOMATO", "TOPIC", "TORNADO", "TORONTO", "TORPEDO", "TOTAL", + "TOTEM", "TOURIST", "TRACTOR", "TRAFFIC", "TRANSIT", "TRAPEZE", + "TRAVEL", "TRIBAL", "TRICK", "TRIDENT", "TRILOGY", "TRIPOD", + "TROPIC", "TRUMPET", "TULIP", "TUNA", "TURBO", "TWIST", + "ULTRA", "UNIFORM", "UNION", "URANIUM", "VACUUM", "VALID", + "VAMPIRE", "VANILLA", "VATICAN", "VELVET", "VENTURA", "VENUS", + "VERTIGO", "VETERAN", "VICTOR", "VIDEO", "VIENNA", "VIKING", + "VILLAGE", "VINCENT", "VIOLET", "VIOLIN", "VIRTUAL", "VIRUS", + "VISA", "VISION", "VISITOR", "VISUAL", "VITAMIN", "VIVA", + "VOCAL", "VODKA", "VOLCANO", "VOLTAGE", "VOLUME", "VOYAGE", + "WATER", "WEEKEND", "WELCOME", "WESTERN", "WINDOW", "WINTER", + "WIZARD", "WOLF", "WORLD", "XRAY", "YANKEE", "YOGA", + "YOGURT", "YOYO", "ZEBRA", "ZERO", "ZIGZAG", "ZIPPER", + "ZODIAC", "ZOOM", "ABRAHAM", "ACTION", "ADDRESS", "ALABAMA", + "ALFRED", "ALMOND", "AMMONIA", "ANALYZE", "ANNUAL", "ANSWER", + "APPLE", "ARENA", "ARMADA", "ARSENAL", "ATLANTA", "ATOMIC", + "AVENUE", "AVERAGE", "BAGEL", "BAKER", "BALLET", "BAMBINO", + "BAMBOO", "BARBARA", "BASKET", "BAZAAR", "BENEFIT", "BICYCLE", + "BISHOP", "BLITZ", "BONJOUR", "BOTTLE", "BRIDGE", "BRITISH", + "BROTHER", "BRUSH", "BUDGET", "CABARET", "CADET", "CANDLE", + "CAPITAN", "CAPSULE", "CAREER", "CARTOON", "CHANNEL", "CHAPTER", + "CHEESE", "CIRCLE", "COBALT", "COCKPIT", "COLLEGE", "COMPASS", + "COMRADE", "CONDOR", "CRIMSON", "CYCLONE", "DARWIN", "DECLARE", + "DEGREE", "DELETE", "DELPHI", "DENVER", "DESERT", "DIVIDE", + "DOLBY", "DOMAIN", "DOMINGO", "DOUBLE", "DRINK", "DRIVER", + "EAGLE", "EARTH", "ECHO", "ECLIPSE", "EDITOR", "EDUCATE", + "EDWARD", "EFFECT", "ELECTRA", "EMERALD", "EMOTION", "EMPIRE", + "EMPTY", "ESCAPE", "ETERNAL", "EVENING", "EXHIBIT", "EXPAND", + "EXPLORE", "EXTREME", "FERRARI", "FIRST", "FLAG", "FOLIO", + "FORGET", "FORWARD", "FREEDOM", "FRESH", "FRIDAY", "FUJI", + "GALILEO", "GARCIA", "GENESIS", "GOLD", "GRAVITY", "HABITAT", + "HAMLET", "HARLEM", "HELIUM", "HOLIDAY", "HOUSE", "HUNTER", + "IBIZA", "ICEBERG", "IMAGINE", "INFANT", "ISOTOPE", "JACKSON", + "JAMAICA", "JASMINE", "JAVA", "JESSICA", "JUDO", "KITCHEN", + "LAZARUS", "LETTER", "LICENSE", "LITHIUM", "LOYAL", "LUCKY", + "MAGENTA", "MAILBOX", "MANUAL", "MARBLE", "MARY", "MAXWELL", + "MAYOR", "MILK", "MONARCH", "MONDAY", "MONEY", "MORNING", + "MOTHER", "MYSTERY", "NATIVE", "NECTAR", "NELSON", "NETWORK", + "NEXT", "NIKITA", "NOBEL", "NOBODY", "NOMINAL", "NORWAY", + "NOTHING", "NUMBER", "OCTOBER", "OFFICE", "OLIVER", "OPINION", + "OPTION", "ORDER", "OUTSIDE", "PACKAGE", "PANCAKE", "PANDORA", + "PANTHER", "PAPA", "PATIENT", "PATTERN", "PEDRO", "PENCIL", + "PEOPLE", "PHANTOM", "PHILIPS", "PIONEER", "PLUTO", "PODIUM", + "PORTAL", "POTATO", "PRIZE", "PROCESS", "PROTEIN", "PROXY", + "PUMP", "PUPIL", "PYTHON", "QUALITY", "QUARTER", "QUIET", + "RABBIT", "RADICAL", "RADIUS", "RAINBOW", "RALPH", "RAMIREZ", + "RAVIOLI", "RAYMOND", "RESPECT", "RESPOND", "RESULT", "RESUME", + "RETRO", "RICHARD", "RIGHT", "RISK", "RIVER", "ROGER", + "ROMAN", "RONDO", "SABRINA", "SALARY", "SALSA", "SAMPLE", + "SAMUEL", "SATURN", "SAVAGE", "SCARLET", "SCOOP", "SCORPIO", + "SCRATCH", "SCROLL", "SECTOR", "SERPENT", "SHADOW", "SHAMPOO", + "SHARON", "SHARP", "SHORT", "SHRINK", "SILENCE", "SILK", + "SIMPLE", "SLANG", "SMART", "SMOKE", "SNAKE", "SOCIETY", + "SONAR", "SONATA", "SOPRANO", "SOURCE", "SPARTA", "SPHERE", + "SPIDER", "SPONSOR", "SPRING", "ACID", "ADIOS", "AGATHA", + "ALAMO", "ALERT", "ALMANAC", "ALOHA", "ANDREA", "ANITA", + "ARCADE", "AURORA", "AVALON", "BABY", "BAGGAGE", "BALLOON", + "BANK", "BASIL", "BEGIN", "BISCUIT", "BLUE", "BOMBAY", + "BRAIN", "BRENDA", "BRIGADE", "CABLE", "CARMEN", "CELLO", + "CELTIC", "CHARIOT", "CHROME", "CITRUS", "CIVIL", "CLOUD", + "COMMON", "COMPARE", "COOL", "COPPER", "CORAL", "CRATER", + "CUBIC", "CUPID", "CYCLE", "DEPEND", "DOOR", "DREAM", + "DYNASTY", "EDISON", "EDITION", "ENIGMA", "EQUAL", "ERIC", + "EVENT", "EVITA", "EXODUS", "EXTEND", "FAMOUS", "FARMER", + "FOOD", "FOSSIL", "FROG", "FRUIT", "GENEVA", "GENTLE", + "GEORGE", "GIANT", "GILBERT", "GOSSIP", "GRAM", "GREEK", + "GRILLE", "HAMMER", "HARVEST", "HAZARD", "HEAVEN", "HERBERT", + "HEROIC", "HEXAGON", "HUSBAND", "IMMUNE", "INCA", "INCH", + "INITIAL", "ISABEL", "IVORY", "JASON", "JEROME", "JOEL", + "JOSHUA", "JOURNAL", "JUDGE", "JULIET", "JUMP", "JUSTICE", + "KIMONO", "KINETIC", "LEONID", "LIMA", "MAZE", "MEDUSA", + "MEMBER", "MEMPHIS", "MICHAEL", "MIGUEL", "MILAN", "MILE", + "MILLER", "MIMIC", "MIMOSA", "MISSION", "MONKEY", "MORAL", + "MOSES", "MOUSE", "NANCY", "NATASHA", "NEBULA", "NICKEL", + "NINA", "NOISE", "ORCHID", "OREGANO", "ORIGAMI", "ORINOCO", + "ORION", "OTHELLO", "PAPER", "PAPRIKA", "PRELUDE", "PREPARE", + "PRETEND", "PROFIT", "PROMISE", "PROVIDE", "PUZZLE", "REMOTE", + "REPAIR", "REPLY", "RIVAL", "RIVIERA", "ROBIN", "ROSE", + "ROVER", "RUDOLF", "SAGA", "SAHARA", "SCHOLAR", "SHELTER", + "SHIP", "SHOE", "SIGMA", "SISTER", "SLEEP", "SMILE", + "SPAIN", "SPARK", "SPLIT", "SPRAY", "SQUARE", "STADIUM", + "STAR", "STORM", "STORY", "STRANGE", "STRETCH", "STUART", + "SUBWAY", "SUGAR", "SULFUR", "SUMMER", "SURVIVE", "SWEET", + "SWIM", "TABLE", "TABOO", "TARGET", "TEACHER", "TELECOM", + "TEMPLE", "TIBET", "TICKET", "TINA", "TODAY", "TOGA", + "TOMMY", "TOWER", "TRIVIAL", "TUNNEL", "TURTLE", "TWIN", + "UNCLE", "UNICORN", "UNIQUE", "UPDATE", "VALERY", "VEGA", + "VERSION", "VOODOO", "WARNING", "WILLIAM", "WONDER", "YEAR", + "YELLOW", "YOUNG", "ABSENT", "ABSORB", "ACCENT", "ALFONSO", + "ALIAS", "AMBIENT", "ANDY", "ANVIL", "APPEAR", "APROPOS", + "ARCHER", "ARIEL", "ARMOR", "ARROW", "AUSTIN", "AVATAR", + "AXIS", "BABOON", "BAHAMA", "BALI", "BALSA", "BAZOOKA", + "BEACH", "BEAST", "BEATLES", "BEAUTY", "BEFORE", "BENNY", + "BETTY", "BETWEEN", "BEYOND", "BILLY", "BISON", "BLAST", + "BLESS", "BOGART", "BONANZA", "BOOK", "BORDER", "BRAVE", + "BREAD", "BREAK", "BROKEN", "BUCKET", "BUENOS", "BUFFALO", + "BUNDLE", "BUTTON", "BUZZER", "BYTE", "CAESAR", "CAMILLA", + "CANARY", "CANDID", "CARROT", "CAVE", "CHANT", "CHILD", + "CHOICE", "CHRIS", "CIPHER", "CLARION", "CLARK", "CLEVER", + "CLIFF", "CLONE", "CONAN", "CONDUCT", "CONGO", "CONTENT", + "COSTUME", "COTTON", "COVER", "CRACK", "CURRENT", "DANUBE", + "DATA", "DECIDE", "DESIRE", "DETAIL", "DEXTER", "DINNER", + "DISPUTE", "DONOR", "DRUID", "DRUM", "EASY", "EDDIE", + "ENJOY", "ENRICO", "EPOXY", "EROSION", "EXCEPT", "EXILE", + "EXPLAIN", "FAME", "FAST", "FATHER", "FELIX", "FIELD", + "FIONA", "FIRE", "FISH", "FLAME", "FLEX", "FLIPPER", + "FLOAT", "FLOOD", "FLOOR", "FORBID", "FOREVER", "FRACTAL", + "FRAME", "FREDDIE", "FRONT", "FUEL", "GALLOP", "GAME", + "GARBO", "GATE", "GIBSON", "GINGER", "GIRAFFE", "GIZMO", + "GLASS", "GOBLIN", "GOPHER", "GRACE", "GRAY", "GREGORY", + "GRID", "GRIFFIN", "GROUND", "GUEST", "GUSTAV", "GYRO", + "HAIR", "HALT", "HARRIS", "HEART", "HEAVY", "HERMAN", + "HIPPIE", "HOBBY", "HONEY", "HOPE", "HORSE", "HOSTEL", + "HYDRO", "IMITATE", "INFO", "INGRID", "INSIDE", "INVENT", + "INVEST", "INVITE", "IRON", "IVAN", "JAMES", "JESTER", + "JIMMY", "JOIN", "JOSEPH", "JUICE", "JULIUS", "JULY", + "JUSTIN", "KANSAS", "KARL", "KEVIN", "KIWI", "LADDER", + "LAKE", "LAURA", "LEARN", "LEGACY", "LEGEND", "LESSON", + "LIFE", "LIGHT", "LIST", "LOCATE", "LOPEZ", "LORENZO", + "LOVE", "LUNCH", "MALTA", "MAMMAL", "MARGO", "MARION", + "MASK", "MATCH", "MAYDAY", "MEANING", "MERCY", "MIDDLE", + "MIKE", "MIRROR", "MODEST", "MORPH", "MORRIS", "NADIA", + "NATO", "NAVY", "NEEDLE", "NEURON", "NEVER", "NEWTON", + "NICE", "NIGHT", "NISSAN", "NITRO", "NIXON", "NORTH", + "OBERON", "OCTAVIA", "OHIO", "OLGA", "OPEN", "OPUS", + "ORCA", "OVAL", "OWNER", "PAGE", "PAINT", "PALMA", + "PARADE", "PARENT", "PAROLE", "PAUL", "PEACE", "PEARL", + "PERFORM", "PHOENIX", "PHRASE", "PIERRE", "PINBALL", "PLACE", + "PLATE", "PLATO", "PLUME", "POGO", "POINT", "POLITE", + "POLKA", "PONCHO", "POWDER", "PRAGUE", "PRESS", "PRESTO", + "PRETTY", "PRIME", "PROMO", "QUASI", "QUEST", "QUICK", + "QUIZ", "QUOTA", "RACE", "RACHEL", "RAJA", "RANGER", + "REGION", "REMARK", "RENT", "REWARD", "RHINO", "RIBBON", + "RIDER", "ROAD", "RODENT", "ROUND", "RUBBER", "RUBY", + "RUFUS", "SABINE", "SADDLE", "SAILOR", "SAINT", "SALT", + "SATIRE", "SCALE", "SCUBA", "SEASON", "SECURE", "SHAKE", + "SHALLOW", "SHANNON", "SHAVE", "SHELF", "SHERMAN", "SHINE", + "SHIRT", "SIDE", "SINATRA", "SINCERE", "SIZE", "SLALOM", + "SLOW", "SMALL", "SNOW", "SOFIA", "SONG", "SOUND", + "SOUTH", "SPEECH", "SPELL", "SPEND", "SPOON", "STAGE", + "STAMP", "STAND", "STATE", "STELLA", "STICK", "STING", + "STOCK", "STORE", "SUNDAY", "SUNSET", "SUPPORT", "SWEDEN", + "SWING", "TAPE", "THINK", "THOMAS", "TICTAC", "TIME", + "TOAST", "TOBACCO", "TONIGHT", "TORCH", "TORSO", "TOUCH", + "TOYOTA", "TRADE", "TRIBUNE", "TRINITY", "TRITON", "TRUCK", + "TRUST", "TYPE", "UNDER", "UNIT", "URBAN", "URGENT", + "USER", "VALUE", "VENDOR", "VENICE", "VERONA", "VIBRATE", + "VIRGO", "VISIBLE", "VISTA", "VITAL", "VOICE", "VORTEX", + "WAITER", "WATCH", "WAVE", "WEATHER", "WEDDING", "WHEEL", + "WHISKEY", "WISDOM", "DEAL", "NULL", "NURSE", "QUEBEC", + "RESERVE", "REUNION", "ROOF", "SINGER", "VERBAL", "AMEN" +}; + +/* +** Special string comparator. +*/ + +static int strspecialcmp(const char* s1, const char* s2) +{ + int c1, c2; + + do + { + c1 = toupper(*s1++); + c2 = toupper(*s2++); + if ((c1 == ' ') || (c1 == '-') || (c1 == '_')) + c1 = 0; + if ((c2 == ' ') || (c2 == '-') || (c2 == '_')) + c2 = 0; + if (!c1 || !c2) + break; + } + while (c1 == c2); + + return c1 - c2; +} + +/* +** Look up a word in the base dictionary and return its index; -1 if the word +** is not in the dictionary. +*/ + +static int baseword_to_index(const char* word) +{ + int i; + + for (i=0; i> (buflen-CHUNK_SIZE)) & ((1<= 4) + { + value = (buffer >> (buflen-4)) & 0xf; + buflen -= 4; + + blob_appendf(xBlob, "%x", value); + } + } + + return 1; +} + +/* +** Implementation of the "mnemonic_encode(X)" SQL function. The argument X +** is an artifact ID prefix (hex characters). It will be mnemonic encoded +** and returned as a string. +*/ +static void sqlcmd_mnemonic_encode( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Blob x; + const char *zName; + int rc; + assert( argc==1 ); + + zName = (const char*)sqlite3_value_text(argv[0]); + if( zName==0 ) return; + + blob_zero(&x); + rc = mnemonic_encode(zName, &x); + if ((rc==0) || (blob_size(&x) == 0)) + sqlite3_result_error(context, "could not mnemonic encode value", -1); + else + sqlite3_result_text(context, blob_buffer(&x), blob_size(&x), + SQLITE_TRANSIENT); + blob_reset(&x); +} + +/* +** Implementation of the "mnemonic_decode(X)" SQL function. The argument X +** is an mnemonic encoded artifact ID prefix (a string of words). It will be +** decoded and returned as a string of hex characters. +** +** If the string is not a valid mnemonic encoded value, it is returned +** unchanged. +*/ +static void sqlcmd_mnemonic_decode( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Blob x; + const char *zName; + int rc; + assert( argc==1 ); + + zName = (const char*)sqlite3_value_text(argv[0]); + if( zName==0 ) return; + + blob_zero(&x); + rc = mnemonic_decode(zName, &x); + if ((rc==0) || (blob_size(&x)==0)) + sqlite3_result_text(context, zName, -1, SQLITE_TRANSIENT); + else + sqlite3_result_text(context, blob_buffer(&x), blob_size(&x), + SQLITE_TRANSIENT); + blob_reset(&x); +} + +/* +** Add the SQL functions that wrap mnemonic_encode() and mnemonic_decode(). +*/ + +void mnemonic_add_sql_func(sqlite3 *db) +{ + sqlite3_create_function(db, "mnemonic_encode", 1, SQLITE_ANY, 0, + sqlcmd_mnemonic_encode, 0, 0); + sqlite3_create_function(db, "mnemonic_decode", 1, SQLITE_ANY, 0, + sqlcmd_mnemonic_decode, 0, 0); +} + +/* vi: set ts=2:sw=2:expandtab: */ + Index: src/shell.c ================================================================== --- src/shell.c +++ src/shell.c @@ -3392,27 +3392,26 @@ data.zDbFilename = ":memory:"; #else fprintf(stderr,"%s: Error: no database filename specified\n", Argv0); return 1; #endif - /***** Begin Fossil Patch *****/ - { - extern void fossil_open(const char **); - fossil_open(&data.zDbFilename); - } - /***** End Fossil Patch *****/ } + data.out = stdout; /* Go ahead and open the database file if it already exists. If the ** file does not exist, delay opening it. This prevents empty database ** files from being created if a user mistypes the database name argument ** to the sqlite command-line tool. */ - if( access(data.zDbFilename, 0)==0 ){ + /***** Begin Fossil Patch *****/ + { + extern void fossil_open(const char **); open_db(&data, 0); + add_sql_func(data.db); } + /***** End Fossil Patch *****/ /* Process the initialization file if there is one. If no -init option ** is given on the command line, look for a file named ~/.sqliterc and ** try to process it. */ Index: src/sqlcmd.c ================================================================== --- src/sqlcmd.c +++ src/sqlcmd.c @@ -103,29 +103,24 @@ sqlite3_result_error(context, "input is not zlib compressed", -1); } } /* -** This is the "automatic extension" initializer that runs right after -** the connection to the repository database is opened. Set up the -** database connection to be more useful to the human operator. +** This function adds any SQL functions that we might need during the +** session. */ -static int sqlcmd_autoinit( - sqlite3 *db, - const char **pzErrMsg, - const void *notUsed +void add_sql_func( + sqlite3 *db ){ sqlite3_create_function(db, "content", 1, SQLITE_ANY, 0, sqlcmd_content, 0, 0); sqlite3_create_function(db, "compress", 1, SQLITE_ANY, 0, sqlcmd_compress, 0, 0); sqlite3_create_function(db, "decompress", 1, SQLITE_ANY, 0, sqlcmd_decompress, 0, 0); re_add_sql_func(db); - g.repositoryOpen = 1; - g.db = db; - return SQLITE_OK; + mnemonic_add_sql_func(db); } /* ** COMMAND: sqlite3 ** @@ -145,14 +140,5 @@ db_close(1); sqlite3_shutdown(); sqlite3_shell(g.argc-1, g.argv+1); g.db = 0; } - -/* -** This routine is called by the patched sqlite3 command-line shell in order -** to load the name and database connection for the open Fossil database. -*/ -void fossil_open(const char **pzRepoName){ - sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit); - *pzRepoName = g.zRepositoryName; -} Index: src/tkt.c ================================================================== --- src/tkt.c +++ src/tkt.c @@ -1180,11 +1180,11 @@ } if( g.argc==3 ){ usage("set|change|history TICKETUUID"); } zTktUuid = db_text(0, - "SELECT tkt_uuid FROM ticket WHERE tkt_uuid GLOB '%s*'", g.argv[3] + "SELECT tkt_uuid FROM ticket WHERE tkt_uuid GLOB (mnemonic_decode(%Q)||'*')", g.argv[3] ); if( !zTktUuid ){ fossil_fatal("unknown ticket: '%s'!",g.argv[3]); } i=4; Index: win/Makefile.dmc ================================================================== --- win/Makefile.dmc +++ win/Makefile.dmc @@ -28,13 +28,13 @@ SQLITE_OPTIONS = -Dlocaltime=fossil_localtime -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -Dsqlite3_strglob=strglob -Dgetenv=fossil_getenv -Dfopen=fossil_fopen -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c mnemonic_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c -OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O +OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\mnemonic$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O RC=$(DMDIR)\bin\rcc RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ @@ -48,11 +48,11 @@ $(OBJDIR)\fossil.res: $B\win\fossil.rc $(RC) $(RCFLAGS) -o$@ $** $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res - +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ + +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf login lookslike main manifest markdown markdown_html md5 merge merge3 mnemonic moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ +echo fossil >> $@ +echo fossil >> $@ +echo $(LIBS) >> $@ +echo. >> $@ +echo fossil >> $@ @@ -490,10 +490,16 @@ $(OBJDIR)\merge3$O : merge3_.c merge3.h $(TCC) -o$@ -c merge3_.c merge3_.c : $(SRCDIR)\merge3.c +translate$E $** > $@ + +$(OBJDIR)\mnemonic$O : mnemonic_.c mnemonic.h + $(TCC) -o$@ -c mnemonic_.c + +mnemonic_.c : $(SRCDIR)\mnemonic.c + +translate$E $** > $@ $(OBJDIR)\moderate$O : moderate_.c moderate.h $(TCC) -o$@ -c moderate_.c moderate_.c : $(SRCDIR)\moderate.c @@ -762,7 +768,7 @@ zip_.c : $(SRCDIR)\zip.c +translate$E $** > $@ headers: makeheaders$E page_index.h VERSION.h - +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h + +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h mnemonic_.c:mnemonic.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h @copy /Y nul: headers Index: win/Makefile.mingw ================================================================== --- win/Makefile.mingw +++ win/Makefile.mingw @@ -318,10 +318,11 @@ $(SRCDIR)/markdown.c \ $(SRCDIR)/markdown_html.c \ $(SRCDIR)/md5.c \ $(SRCDIR)/merge.c \ $(SRCDIR)/merge3.c \ + $(SRCDIR)/mnemonic.c \ $(SRCDIR)/moderate.c \ $(SRCDIR)/name.c \ $(SRCDIR)/path.c \ $(SRCDIR)/pivot.c \ $(SRCDIR)/popen.c \ @@ -428,10 +429,11 @@ $(OBJDIR)/markdown_.c \ $(OBJDIR)/markdown_html_.c \ $(OBJDIR)/md5_.c \ $(OBJDIR)/merge_.c \ $(OBJDIR)/merge3_.c \ + $(OBJDIR)/mnemonic_.c \ $(OBJDIR)/moderate_.c \ $(OBJDIR)/name_.c \ $(OBJDIR)/path_.c \ $(OBJDIR)/pivot_.c \ $(OBJDIR)/popen_.c \ @@ -538,10 +540,11 @@ $(OBJDIR)/markdown.o \ $(OBJDIR)/markdown_html.o \ $(OBJDIR)/md5.o \ $(OBJDIR)/merge.o \ $(OBJDIR)/merge3.o \ + $(OBJDIR)/mnemonic.o \ $(OBJDIR)/moderate.o \ $(OBJDIR)/name.o \ $(OBJDIR)/path.o \ $(OBJDIR)/pivot.o \ $(OBJDIR)/popen.o \ @@ -780,10 +783,11 @@ $(OBJDIR)/markdown_.c:$(OBJDIR)/markdown.h \ $(OBJDIR)/markdown_html_.c:$(OBJDIR)/markdown_html.h \ $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h \ $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h \ $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h \ + $(OBJDIR)/mnemonic_.c:$(OBJDIR)/mnemonic.h \ $(OBJDIR)/moderate_.c:$(OBJDIR)/moderate.h \ $(OBJDIR)/name_.c:$(OBJDIR)/name.h \ $(OBJDIR)/path_.c:$(OBJDIR)/path.h \ $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h \ $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h \ @@ -1337,10 +1341,18 @@ $(OBJDIR)/merge3.o: $(OBJDIR)/merge3_.c $(OBJDIR)/merge3.h $(SRCDIR)/config.h $(XTCC) -o $(OBJDIR)/merge3.o -c $(OBJDIR)/merge3_.c $(OBJDIR)/merge3.h: $(OBJDIR)/headers + +$(OBJDIR)/mnemonic_.c: $(SRCDIR)/mnemonic.c $(OBJDIR)/translate + $(TRANSLATE) $(SRCDIR)/mnemonic.c >$(OBJDIR)/mnemonic_.c + +$(OBJDIR)/mnemonic.o: $(OBJDIR)/mnemonic_.c $(OBJDIR)/mnemonic.h $(SRCDIR)/config.h + $(XTCC) -o $(OBJDIR)/mnemonic.o -c $(OBJDIR)/mnemonic_.c + +$(OBJDIR)/mnemonic.h: $(OBJDIR)/headers $(OBJDIR)/moderate_.c: $(SRCDIR)/moderate.c $(OBJDIR)/translate $(TRANSLATE) $(SRCDIR)/moderate.c >$(OBJDIR)/moderate_.c $(OBJDIR)/moderate.o: $(OBJDIR)/moderate_.c $(OBJDIR)/moderate.h $(SRCDIR)/config.h Index: win/Makefile.msc ================================================================== --- win/Makefile.msc +++ win/Makefile.msc @@ -142,10 +142,11 @@ markdown_.c \ markdown_html_.c \ md5_.c \ merge_.c \ merge3_.c \ + mnemonic_.c \ moderate_.c \ name_.c \ path_.c \ pivot_.c \ popen_.c \ @@ -252,10 +253,11 @@ $(OX)\markdown$O \ $(OX)\markdown_html$O \ $(OX)\md5$O \ $(OX)\merge$O \ $(OX)\merge3$O \ + $(OX)\mnemonic$O \ $(OX)\moderate$O \ $(OX)\name$O \ $(OX)\path$O \ $(OX)\pivot$O \ $(OX)\popen$O \ @@ -381,10 +383,11 @@ echo $(OX)\markdown.obj >> $@ echo $(OX)\markdown_html.obj >> $@ echo $(OX)\md5.obj >> $@ echo $(OX)\merge.obj >> $@ echo $(OX)\merge3.obj >> $@ + echo $(OX)\mnemonic.obj >> $@ echo $(OX)\moderate.obj >> $@ echo $(OX)\name.obj >> $@ echo $(OX)\path.obj >> $@ echo $(OX)\pivot.obj >> $@ echo $(OX)\popen.obj >> $@ @@ -883,10 +886,16 @@ $(OX)\merge3$O : merge3_.c merge3.h $(TCC) /Fo$@ -c merge3_.c merge3_.c : $(SRCDIR)\merge3.c translate$E $** > $@ + +$(OX)\mnemonic$O : mnemonic_.c mnemonic.h + $(TCC) /Fo$@ -c mnemonic_.c + +mnemonic_.c : $(SRCDIR)\mnemonic.c + translate$E $** > $@ $(OX)\moderate$O : moderate_.c moderate.h $(TCC) /Fo$@ -c moderate_.c moderate_.c : $(SRCDIR)\moderate.c @@ -1220,10 +1229,11 @@ markdown_.c:markdown.h \ markdown_html_.c:markdown_html.h \ md5_.c:md5.h \ merge_.c:merge.h \ merge3_.c:merge3.h \ + mnemonic_.c:mnemonic.h \ moderate_.c:moderate.h \ name_.c:name.h \ path_.c:path.h \ pivot_.c:pivot.h \ popen_.c:popen.h \