X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=misc.c;h=a98ce1a47fab0ab773a7a3e99614c3f4f8692591;hb=5c30d6429f4f5e3d187d52b6ac623d61968738a4;hp=25808a2c4353ff5a76f301603392e21a7f802f3d;hpb=8765f49fdc85e804490ebda4b0b6caee32a45af2;p=open-adventure.git diff --git a/misc.c b/misc.c index 25808a2..a98ce1a 100644 --- a/misc.c +++ b/misc.c @@ -93,6 +93,7 @@ static void vspeak(const char* msg, bool blank, va_list ap) } } + // LCOV_EXCL_START - doesn't occur in test suite. /* Version specifier */ if (msg[i] == 'V') { strcpy(renderp, VERSION); @@ -100,6 +101,7 @@ static void vspeak(const char* msg, bool blank, va_list ap) renderp += len; size -= len; } + // LCOV_EXCL_STOP } } *renderp = 0; @@ -411,54 +413,54 @@ static bool is_valid_int(const char *str) return true; } -static void get_vocab_metadata(const char* word, vocab_t* id, enum wordtype* type) +static void get_vocab_metadata(command_word_t* word) { /* Check for an empty string */ - if (strncmp(word, "", sizeof("")) == 0) { - *id = WORD_EMPTY; - *type = NO_WORD_TYPE; + if (strncmp(word->raw, "", sizeof("")) == 0) { + word->id = WORD_EMPTY; + word->type = NO_WORD_TYPE; return; } vocab_t ref_num; - ref_num = get_motion_vocab_id(word); + ref_num = get_motion_vocab_id(word->raw); if (ref_num != WORD_NOT_FOUND) { - *id = ref_num; - *type = MOTION; + word->id = ref_num; + word->type = MOTION; return; } - ref_num = get_object_vocab_id(word); + ref_num = get_object_vocab_id(word->raw); if (ref_num != WORD_NOT_FOUND) { - *id = ref_num; - *type = OBJECT; + word->id = ref_num; + word->type = OBJECT; return; } - ref_num = get_action_vocab_id(word); + ref_num = get_action_vocab_id(word->raw); if (ref_num != WORD_NOT_FOUND) { - *id = ref_num; - *type = ACTION; + word->id = ref_num; + word->type = ACTION; return; } // Check for the reservoir magic word. - if (strcasecmp(word, game.zzword) == 0) { - *id = PART; - *type = ACTION; + if (strcasecmp(word->raw, game.zzword) == 0) { + word->id = PART; + word->type = ACTION; return; } // Check words that are actually numbers. - if (is_valid_int(word)) { - *id = WORD_EMPTY; - *type = NUMERIC; + if (is_valid_int(word->raw)) { + word->id = WORD_EMPTY; + word->type = NUMERIC; return; } - *id = WORD_NOT_FOUND; - *type = NO_WORD_TYPE; + word->id = WORD_NOT_FOUND; + word->type = NO_WORD_TYPE; return; } @@ -469,7 +471,7 @@ static void tokenize(char* raw, struct command_t *cmd) /* Bound prefix on the %s would be needed to prevent buffer * overflow. but we shortstop this more simply by making each * raw-input buffer as long as the entire input buffer. */ - sscanf(raw, "%s%s", cmd->raw1, cmd->raw2); + sscanf(raw, "%s%s", cmd->word[0].raw, cmd->word[1].raw); /* (ESR) In oldstyle mode, simulate the uppercasing and truncating * effect on raw tokens of packing them into sixbit characters, 5 @@ -486,16 +488,16 @@ static void tokenize(char* raw, struct command_t *cmd) * possible an emulation of the original UI. */ if (settings.oldstyle) { - cmd->raw1[TOKLEN + TOKLEN] = cmd->raw2[TOKLEN + TOKLEN] = '\0'; - for (size_t i = 0; i < strlen(cmd->raw1); i++) - cmd->raw1[i] = toupper(cmd->raw1[i]); - for (size_t i = 0; i < strlen(cmd->raw2); i++) - cmd->raw2[i] = toupper(cmd->raw2[i]); + cmd->word[0].raw[TOKLEN + TOKLEN] = cmd->word[1].raw[TOKLEN + TOKLEN] = '\0'; + for (size_t i = 0; i < strlen(cmd->word[0].raw); i++) + cmd->word[0].raw[i] = toupper(cmd->word[0].raw[i]); + for (size_t i = 0; i < strlen(cmd->word[1].raw); i++) + cmd->word[1].raw[i] = toupper(cmd->word[1].raw[i]); } /* populate command with parsed vocabulary metadata */ - get_vocab_metadata(cmd->raw1, &(cmd->id1), &(cmd->type1)); - get_vocab_metadata(cmd->raw2, &(cmd->id2), &(cmd->type2)); + get_vocab_metadata(&(cmd->word[0])); + get_vocab_metadata(&(cmd->word[1])); } bool get_command_input(struct command_t *command)