static bool commandline(char expr[]) { int wc; char line[stringsize], *words[2]; strncat(strcpy(line, ""), expr, stringsize-1); wc = FindWords(line, words, 2); if(wc == 1 && strcmp(words[0], "exit") == 0) exit(0); if(wc == 1 && strcmp(words[0], "info") == 0) { Write(BANNER); printmeminfo(); printhashtable(); return True; } if(wc == 1 && strcmp(words[0], "time") == 0) { timing = !timing; Write(timing ? "True" : "False"); return True; } if(wc == 1 && strcmp(words[0], "reload") == 0) { Write(Load(NULL) ? "True" : ""); return True; } if(wc == 2 && strcmp(words[0], "load") == 0) { Write(Load(words[1]) ? "True" : ""); return True; } return False; }
void InitOptions(bool console, char *path) { FILE *fp; strcat(inipath, getAmaPath()); strcat(inipath, AMAINI); fp = fopen(inipath, "r"); if (fp == NULL) { int k = 0; inipath[0] = '\0'; if(path) { strcpy(inipath, path); k = strlen(inipath); while(k > 0 && inipath[k-1] != '\\' && inipath[k-1] != '/') k--; } strcpy(inipath+k, AMAINI); fp = fopen(inipath, "r"); } if(fp) { char line[stringsize], *words[4]; while(fgets(line, sizeof(line), fp)) if(FindWords(line, words, 4) >= 4 && strcmp(words[0], "||") == 0 && strcmp(words[2], "=") == 0) SetOption(words[1], words[3]); fclose(fp); } if(!console) { SetOption("ConPromptMulti", ">>> "); SetOption("ConPromptSingle", "> "); } }
int main() { LoadDictionary("dictionary.txt"); const char * test1results[] = { "ait", "qat", "dae", "quiz", "zed", "zax", "zit", "zea", "aue", "eau", "eat", "adz", "tuque", "ita", "quat", "qua", "uta", "tui", "tix", "tai", "tae", "taxi", "tau", "tax", "tad", "daut", "daze", "zati", "aitu", "adze", "quai", "quad", "quit", "taed" }; const int test1count = 34; const int test1score = 35; Results results1 = FindWords("dzxeaiqut", 3, 3); checkEquals(results1, test1results, test1count, test1score, "test1"); FreeWords(results1); const char * test2results[] = { "ply", "flir", "eik", "oye", "yuk", "wye", "reik", "wey", "rei", "plue", "ewt", "euk", "ire", "rew", "rue", "tye", "kir", "top", "toph", "lure", "ruly", "toy", "ure", "puer", "tyer", "lie", "yup", "pot", "yew", "fly", "uey", "puli", "upo", "lye", "ilk", "opt", "plu", "lur", "eyot", "kue", "poh", "phot", "pho", "pye", "flukier", "puy", "pul", "hot", "pur", "jot", "joy", "hop", "hoy", "flu", "weir", "oyer", "weil", "plie", "typo", "yeuk", "iure", "pyot", "puir", "pulk", "puly", "pure", "puri", "lire", "lier", "lieu", "erupt", "kilp", "kier", "kuri", "toyer", "glue", "flue", "twyer", "plier", "plyer", "pulik", "gluer", "gluey", "glyph", "fluyt", "fluey", "flier", "flyer", "yukier", "pulier", "gluier", "fluier" }; const int test2count = 92; const int test2score = 117; Results results2 = FindWords("qwertyuioplkjhgf", 4, 4); checkEquals(results2, test2results, test2count, test2score, "test2"); FreeWords(results2); const char * test3results[] = { "lou", "mol", "cert", "wex", "holk", "rew", "jupon", "mon", "upon", "rec", "rev", "crew", "poh", "rex", "vex", "hom", "mop", "mou", "til", "noh", "nom", "jol", "only", "kit", "lit", "once", "pol", "noup", "pom", "oup", "lop", "ilk", "upo", "hop", "hon", "holy", "wert", "moly", "reck", "trew", "oncer", "vert", "verb", "brew", "moup", "klik", "polk", "poly", "loup", "treck", "ponce" }; const int test3count = 51; const int test3score = 55; Results results3 = FindWords("qwertzxcvbmnjklpolkiujhyt", 5, 5); checkEquals(results3, test3results, test3count, test3score, "test3"); FreeWords(results3); const char * test4results[] = { "dad", "add", "dada" }; const int test4count = 3; const int test4score = 3; Results results4 = FindWords("dadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadada", 10, 10); checkEquals(results4, test4results, test4count, test4score, "test4"); FreeWords(results4); const char * test5results[] = { "not", "bos", "oon", "bone", "tote", "noo", "non", "nebs", "nos", "bosket", "tete", "nek", "tee", "oot", "nonettos", "keb", "ono", "kons", "tot", "bon", "oos", "sot", "ons", "ten", "snoeks", "tet", "ketones", "oke", "sooks", "ton", "bot", "sen", "books", "too", "tene", "otto", "een", "kon", "note", "ene", "obe", "set", "sneb", "boo", "eek", "bet", "toot", "bee", "ben", "tone", "teen", "toetoe", "obo", "bootee", "sob", "one", "skeet", "ket", "tes", "tokens", "toe", "bes", "skeen", "nene", "eon", "ken", "nob", "net", "knees", "nee", "onos", "neb", "betook", "ens", "bonnet", "bete", "son", "neon", "obs", "oes", "bonks", "ose", "see", "nott", "besee", "noon", "nook", "oons", "ketone", "oont", "toes", "tent", "toon", "tons", "beento", "nenes", "kens", "eons", "took", "ebon", "boose", "eten", "book", "boot", "knot", "boon", "bott", "been", "nonbook", "beet", "bene", "koto", "bent", "bonk", "onto", "keto", "seen", "kete", "ones", "keet", "botone", "toko", "toke", "none", "nett", "nete", "tonk", "sone", "teek", "snot", "snob", "sook", "etens", "soot", "neks", "soon", "nobs", "noes", "okes", "nose", "oose", "tose", "beset", "boos", "tenons", "knee", "keen", "sket", "kebs", "besot", "keno", "kent", "knob", "toetoes", "obos", "tees", "ebook", "tens", "sett", "sekt", "sent", "snee", "seek", "sene", "tenon", "skee", "sken", "skeo", "notebook", "esne", "bosk", "bees", "bens", "obes", "enes", "noons", "nooks", "ottos", "tenet", "tenno", "tenne", "toons", "botte", "bonne", "beton", "benet", "benne", "bento", "boons", "tokes", "token", "nonet", "obento", "neons", "snook", "noose", "nones", "tonne", "tonks", "beknot", "teens", "tones", "snoot", "snoke", "snoek", "soote", "nonette", "notes", "bones", "totes", "onset", "boson", "kotos", "keeno", "kenos", "kente", "netes", "teene", "tense", "tetes", "ebons", "sonne", "seton", "sente", "tenes", "betes", "benes", "obese", "nektons", "neese", "betokens", "nebek", "knobs", "tennos", "tennes", "betons", "entetee", "bennet", "bonnes", "bennes", "ketose", "tonnes", "snooks", "snokes", "sootes", "bookoo", "bottes", "ketene", "keenos", "kennet", "nekton", "tenson", "entete", "settee", "sonnes", "setons", "sennet", "sonnet", "beseen", "nebeks", "botonee", "boneset", "betoken", "nonetto", "tonette", "bookoos", "bootees", "kennett", "ketenes", "nonbooks", "botonnee", "nonettes", "tonettes", "nonobese" }; const int test5count = 274; const int test5score = 559; Results results5 = FindWords("notebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnotnotebooknotenotesnot", 8, 20); checkEquals(results5, test5results, test5count, test5score, "test5"); FreeWords(results5); FreeDictionary(); std::cout << "Done!" << std::endl; return 0; }
static void amaobj(char path[], char filename[]) { char command[stringsize], s[stringsize], *words[stringsize]; int k, handle = -1, count; bool echo = False; InitOptions(False, path); CreateInterpreter(); if(!Load(filename) || !InitRemote()) return; for(;;) { getstring(">> ", command); if(echo) WriteString(command); WriteString("\n"); count = FindWords(command, words, stringsize); if(count == 2 && strcmp(words[0], "object") == 0) { DropRemote(handle); handle = CreateRemote(words[1]); } else if(count >= 2 && strcmp(words[0], "call") == 0) { if(handle < 0) WriteString("No object selected"); else { starttiming(); for(k=2; k < count; k++) PutRemote(handle, words[k]); CallRemote(handle, words[1]); WriteString("<\n"); while(GetRemote(handle, s, stringsize)) { WriteString(s); WriteString("\n"); } WriteString(">\n"); stoptiming(); } } else if(count == 1 && strcmp(words[0], "echo") == 0) echo = !echo; else if(count == 1 && strcmp(words[0], "time") == 0) timing = !timing; else if(count == 1 && strcmp(words[0], "exit") == 0) break; else WriteString("???\n"); WriteString("\n"); } }