Simplify command word handling.
[open-adventure.git] / advent.h
index ce763faa707882ec74f59eed461d9e2080a9bb48..1e7a0962f65d7684f1df8cd1f193d4512af7da49 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -87,7 +87,7 @@ enum termination {endgame, quitgame, scoregame};
 
 enum speechpart {unknown, intransitive, transitive};
 
-enum wordtype {NO_WORD_TYPE, MOTION, OBJECT, ACTION, NUMERIC};
+typedef enum {NO_WORD_TYPE, MOTION, OBJECT, ACTION, NUMERIC} word_type_t;
 
 typedef enum scorebonus {none, splatter, defeat, victory} score_t;
 
@@ -183,13 +183,15 @@ struct settings_t {
     bool prompt;
 };
 
+typedef struct {
+  char raw[LINESIZE];
+  vocab_t id;
+  word_type_t type;
+} command_word_t;
+
 struct command_t {
-    char raw1[LINESIZE], raw2[LINESIZE];
     enum speechpart part;
-    vocab_t id1;
-    vocab_t id2;
-    enum wordtype type1;
-    enum wordtype type2;
+    command_word_t word[2];
     verb_t verb;
     obj_t   obj;
 };
@@ -228,4 +230,11 @@ extern void state_change(obj_t, int);
 
 void bug(enum bugtype, const char *) __attribute__((__noreturn__));
 
+/* represent an empty command word */
+static const command_word_t empty_command_word = {
+  .raw = "",
+  .id = WORD_EMPTY,
+  .type = NO_WORD_TYPE,
+};
+
 /* end */