X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=misc.c;h=b71969e2918dcd32f7f695753b33bdb2d889d921;hp=7cc26fc8ff4d4c385d992b3ebcf4b05a5f0a2cb5;hb=85f8334e17b9e3118a73f2e9405e9db5f94ad648;hpb=0a87fc9f78c40354068749f93cbbed80e217cd88 diff --git a/misc.c b/misc.c index 7cc26fc..b71969e 100644 --- a/misc.c +++ b/misc.c @@ -5,9 +5,9 @@ #include #include #include +#include #include "advent.h" -#include "linenoise/linenoise.h" #include "dungeon.h" char* xstrdup(const char* s) @@ -295,7 +295,7 @@ void rspeak(vocab_t i, ...) va_end(ap); } -void echo_input(FILE* destination, char* input_prompt, char* input) +void echo_input(FILE* destination, const char* input_prompt, const char* input) { size_t len = strlen(input_prompt) + strlen(input) + 1; char* prompt_and_input = (char*) xmalloc(len); @@ -334,27 +334,12 @@ char* get_input() char* input; while (true) { - if (editline) - input = linenoise(input_prompt); - else { - input = NULL; - size_t n = 0; - if (isatty(0)) - // LCOV_EXCL_START - // Should be unreachable in tests, as they will use a non-interactive shell. - printf("%s", input_prompt); - // LCOV_EXCL_STOP - ssize_t numread = getline(&input, &n, stdin); - if (numread == -1) { // Got EOF; return with it. - free(input); - return (NULL); - } - } + input = readline(input_prompt); if (input == NULL) // Got EOF; return with it. return (input); else if (input[0] == '#') { // Ignore comments. - linenoiseFree(input); + free(input); continue; } else // We have a 'normal' line; leave the loop. break; @@ -363,13 +348,13 @@ char* get_input() // Strip trailing newlines from the input input[strcspn(input, "\n")] = 0; - linenoiseHistoryAdd(input); + add_history(input); if (!isatty(0)) echo_input(stdout, input_prompt, input); if (logfp) - echo_input(logfp, input_prompt, input); + echo_input(logfp, "", input); return (input); } @@ -384,7 +369,7 @@ bool silent_yes() if (reply == NULL) { // LCOV_EXCL_START // Should be unreachable. Reply should never be NULL - linenoiseFree(reply); + free(reply); exit(EXIT_SUCCESS); // LCOV_EXCL_STOP } @@ -392,7 +377,7 @@ bool silent_yes() char* firstword = (char*) xmalloc(strlen(reply) + 1); sscanf(reply, "%s", firstword); - linenoiseFree(reply); + free(reply); for (int i = 0; i < (int)strlen(firstword); ++i) firstword[i] = tolower(firstword[i]); @@ -431,7 +416,7 @@ bool yes(const char* question, const char* yes_response, const char* no_response if (reply == NULL) { // LCOV_EXCL_START // Should be unreachable. Reply should never be NULL - linenoiseFree(reply); + free(reply); exit(EXIT_SUCCESS); // LCOV_EXCL_STOP } @@ -439,7 +424,7 @@ bool yes(const char* question, const char* yes_response, const char* no_response char* firstword = (char*) xmalloc(strlen(reply) + 1); sscanf(reply, "%s", firstword); - linenoiseFree(reply); + free(reply); for (int i = 0; i < (int)strlen(firstword); ++i) firstword[i] = tolower(firstword[i]); @@ -474,7 +459,7 @@ int get_motion_vocab_id(const char* word) { for (int i = 0; i < NMOTIONS; ++i) { for (int j = 0; j < motions[i].words.n; ++j) { - if (strcasecmp(word, motions[i].words.strs[j]) == 0) + if (strcasecmp(word, motions[i].words.strs[j]) == 0 && (strlen(word) > 1 || strchr(ignore, word[0]) == NULL || !oldstyle)) return (i); } } @@ -500,7 +485,7 @@ int get_action_vocab_id(const char* word) { for (int i = 0; i < NACTIONS; ++i) { for (int j = 0; j < actions[i].words.n; ++j) { - if (strcasecmp(word, actions[i].words.strs[j]) == 0) + if (strcasecmp(word, actions[i].words.strs[j]) == 0 && (strlen(word) > 1 || strchr(ignore, word[0]) == NULL || !oldstyle)) return (i); } } @@ -648,8 +633,8 @@ long atdwrf(long where) return (at); } -/* Utility routines (SETBIT, TSTBIT, set_seed, get_next_lcg_value, - * randrange, RNDVOC) */ +/* Utility routines (setbit, tstbit, set_seed, get_next_lcg_value, + * randrange) */ long setbit(long bit) /* Returns 2**bit for use in constructing bit-masks. */ @@ -667,6 +652,9 @@ void set_seed(long seedval) /* Set the LCG seed */ { game.lcg_x = (unsigned long) seedval % game.lcg_m; + + // once seed is set, we need to generate the Z`ZZZ word + make_zzword(game.zzword); } unsigned long get_next_lcg_value(void)