static char* get_input(void)
{
// Set up the prompt
- char input_prompt[] = "> ";
+ char input_prompt[] = PROMPT;
if (!settings.prompt)
input_prompt[0] = '\0';
char* input;
while (true) {
- input = readline(input_prompt);
+ input = myreadline(input_prompt);
if (input == NULL) // Got EOF; return with it.
return (input);
/* 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. */
+ * raw-input buffer as int as the entire input buffer. */
sscanf(raw, "%s%s", cmd->word[0].raw, cmd->word[1].raw);
/* (ESR) In oldstyle mode, simulate the uppercasing and truncating
/* populate command with parsed vocabulary metadata */
get_vocab_metadata(cmd->word[0].raw, &(cmd->word[0].id), &(cmd->word[0].type));
get_vocab_metadata(cmd->word[1].raw, &(cmd->word[1].id), &(cmd->word[1].type));
+ cmd->state = TOKENIZED;
}
bool get_command_input(command_t *command)
tokenize(inputbuf, command);
+#ifdef GDEBUG
+ /* Needs to stay synced with enum word_type_t */
+ const char *types[] = {"NO_WORD_TYPE", "MOTION", "OBJECT", "ACTION", "NUMERIC"};
+ /* needs to stay synced with enum speechpart */
+ const char *roles[] = {"unknown", "intransitive", "transitive"};
+ printf("Command: role = %s type1 = %s, id1 = %d, type2 = %s, id2 = %d\n",
+ roles[command->part],
+ types[command->word[0].type],
+ command->word[0].id,
+ types[command->word[1].type],
+ command->word[1].id);
+#endif
+
+ command->state = GIVEN;
return true;
}
+void clear_command(command_t *cmd)
+/* Resets the state of the command to empty */
+{
+ cmd->verb = ACT_NULL;
+ cmd->part = unknown;
+ game.oldobj = cmd->obj;
+ cmd->obj = NO_OBJECT;
+ cmd->state = EMPTY;
+}
+
+
void juggle(obj_t object)
/* Juggle an object by picking it up and putting it down again, the purpose
* being to get the object to the front of the chain of things at its loc. */
drop(object, where);
}
-loc_t put(obj_t object, loc_t where, long pval)
+loc_t put(obj_t object, loc_t where, int pval)
/* put() is the same as move(), except it returns a value used to set up the
* negated game.prop values for the repository objects. */
{
* location. Incr holdng unless it was already being toted. If object>NOBJECTS
* (moving "fixed" second loc), don't change game.place or game.holdng. */
{
- long temp;
+ int temp;
if (object <= NOBJECTS) {
if (game.place[object] == CARRIED)
if (game.dflag < 2)
return at;
at = -1;
- for (long i = 1; i <= NDWARVES - 1; i++) {
+ for (int i = 1; i <= NDWARVES - 1; i++) {
if (game.dloc[i] == where)
return i;
if (game.dloc[i] != 0)
/* Utility routines (setbit, tstbit, set_seed, get_next_lcg_value,
* randrange) */
-long setbit(int bit)
+int setbit(int bit)
/* Returns 2**bit for use in constructing bit-masks. */
{
return (1L << bit);
}
-bool tstbit(long mask, int bit)
+bool tstbit(int mask, int bit)
/* Returns true if the specified bit is set in the mask. */
{
return (mask & (1 << bit)) != 0;