Address GitLab issue #45: OSX Compile issue
[open-adventure.git] / actions.c
index 3d03d830e5f0da9b71e04c80395fbc47492ab8bf..9c3eb77a45039c5ca63a5663157c403c21655c5f 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -1,8 +1,17 @@
+/*
+ * Actions for the duneon-running code.
+ *
+ * Copyright (c) 1977, 2005 by Will Crowther and Don Woods
+ * Copyright (c) 2017 by Eric S. Raymond
+ * SPDX-License-Identifier: BSD-2-clause
+ */
+
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
 #include "advent.h"
 #include "dungeon.h"
+#include <inttypes.h>
 
 static int fill(verb_t, obj_t);
 
@@ -202,11 +211,11 @@ static int bigwords(vocab_t id)
             if (game.place[EGGS] == LOC_NOWHERE && game.place[TROLL] == LOC_NOWHERE && game.prop[TROLL] == TROLL_UNPAID)
                 game.prop[TROLL] = TROLL_PAIDONCE;
             if (HERE(EGGS))
-                pspeak(EGGS, look, EGGS_VANISHED, true);
+                pspeak(EGGS, look, true, EGGS_VANISHED);
             else if (game.loc == objects[EGGS].plac)
-                pspeak(EGGS, look, EGGS_HERE, true);
+                pspeak(EGGS, look, true, EGGS_HERE);
             else
-                pspeak(EGGS, look, EGGS_DONE, true);
+                pspeak(EGGS, look, true, EGGS_DONE);
             move(EGGS, objects[EGGS].plac);
 
             return GO_CLEAROBJ;
@@ -265,7 +274,7 @@ static int vbreak(verb_t verb, obj_t obj)
             game.fixed[VASE] = IS_FIXED;
             break;
         }
-       /* FALLTHRU */
+    /* FALLTHRU */
     default:
         speak(actions[verb].message);
     }
@@ -491,7 +500,7 @@ static int discard(verb_t verb, obj_t obj)
     if (obj == COINS && HERE(VEND)) {
         DESTROY(COINS);
         drop(BATTERY, game.loc);
-        pspeak(BATTERY, look, FRESH_BATTERIES, true);
+        pspeak(BATTERY, look, true, FRESH_BATTERIES);
         return GO_CLEAROBJ;
     }
 
@@ -592,7 +601,7 @@ static int eat(verb_t verb, obj_t obj)
     case INTRANSITIVE:
         if (!HERE(FOOD))
             return GO_UNKNOWN;
-       /* FALLTHRU */
+    /* FALLTHRU */
     case FOOD:
         DESTROY(FOOD);
         rspeak(THANKS_DELICIOUS);
@@ -631,7 +640,7 @@ static int extinguish(verb_t verb, obj_t obj)
         if (game.prop[URN] != URN_EMPTY) {
             state_change(URN, URN_DARK);
         } else {
-            pspeak(URN, change, URN_DARK, true);
+            pspeak(URN, change, true, URN_DARK);
         }
         break;
     case LAMP:
@@ -860,7 +869,7 @@ static int inven(void)
             rspeak(NOW_HOLDING);
             empty = false;
         }
-        pspeak(i, touch, -1, false);
+        pspeak(i, touch, false, -1);
     }
     if (TOTING(BEAR))
         rspeak(TAME_BEAR);
@@ -930,7 +939,7 @@ static int listen(void)
          * depending on whether player has drunk dragon's blood. */
         if (i == BIRD)
             mi += 3 * game.blooded;
-        pspeak(i, hear, mi, true, game.zzword);
+        pspeak(i, hear, true, mi, game.zzword);
         rspeak(NO_MESSAGE);
         if (i == BIRD && mi == BIRD_ENDSTATE)
             DESTROY(BIRD);
@@ -1099,7 +1108,7 @@ static int read(command_t command)
                game.prop[command.obj] == STATE_NOTFOUND) {
         speak(actions[command.verb].message);
     } else
-        pspeak(command.obj, study, game.prop[command.obj], true);
+        pspeak(command.obj, study, true, game.prop[command.obj]);
     return GO_CLEAROBJ;
 }
 
@@ -1145,21 +1154,21 @@ static int say(command_t command)
 /* Say.  Echo WD2. Magic words override. */
 {
     if (command.word[1].type == MOTION &&
-       (command.word[1].id == XYZZY ||
-        command.word[1].id == PLUGH ||
-       command.word[1].id == PLOVER)) {
-           return GO_WORD2;
+        (command.word[1].id == XYZZY ||
+         command.word[1].id == PLUGH ||
+         command.word[1].id == PLOVER)) {
+        return GO_WORD2;
     }
     if (command.word[1].type == ACTION && command.word[1].id == PART)
         return reservoir();
-    
+
     if (command.word[1].type == ACTION &&
         (command.word[1].id == FEE ||
-        command.word[1].id == FIE ||
-        command.word[1].id == FOE ||
-        command.word[1].id == FOO ||
-        command.word[1].id == FUM ||
-        command.word[1].id == PART)) {
+         command.word[1].id == FIE ||
+         command.word[1].id == FOE ||
+         command.word[1].id == FOO ||
+         command.word[1].id == FUM ||
+         command.word[1].id == PART)) {
         return bigwords(command.word[1].id);
     }
     sspeak(OKEY_DOKEY, command.word[1].raw);
@@ -1250,7 +1259,7 @@ static int wake(verb_t verb, obj_t obj)
 static int seed(verb_t verb, const char *arg)
 /* Set seed */
 {
-    int seed = atoi(arg);
+    int32_t seed = strtol(arg, NULL, 10);
     speak(actions[verb].message, seed);
     set_seed(seed);
     --game.turns;
@@ -1316,14 +1325,14 @@ int action(command_t command)
  *  unless verb is "say", which snarfs arbitrary second word.
  */
 {
-    /* Previously, actions that result in a message, but don't do anything 
-     * further were called "specials". Now they're handled here as normal 
+    /* Previously, actions that result in a message, but don't do anything
+     * further were called "specials". Now they're handled here as normal
      * actions. If noaction is true, then we spit out the message and return */
     if (actions[command.verb].noaction) {
         speak(actions[command.verb].message);
         return GO_CLEAROBJ;
     }
-    
+
     if (command.part == unknown) {
         /*  Analyse an object word.  See if the thing is here, whether
          *  we've got a verb yet, and so on.  Object must be here
@@ -1360,8 +1369,6 @@ int action(command_t command)
             return GO_CLEAROBJ;
         }
 
-        if (command.word[1].id != WORD_EMPTY && command.word[1].id != WORD_NOT_FOUND)
-            return GO_WORD2;
         if (command.verb != 0)
             command.part = transitive;
     }
@@ -1371,9 +1378,9 @@ int action(command_t command)
         if (command.word[1].raw[0] != '\0' && command.verb != SAY)
             return GO_WORD2;
         if (command.verb == SAY)
-           /* KEYS is not special, anything not NO_OBJECT or INTRANSITIVE
-            * will do here. We're preventing interpretation as an intransitive
-            * verb when the word is unknown. */
+            /* KEYS is not special, anything not NO_OBJECT or INTRANSITIVE
+             * will do here. We're preventing interpretation as an intransitive
+             * verb when the word is unknown. */
             command.obj = command.word[1].raw[0] != '\0' ? KEYS : NO_OBJECT;
         if (command.obj == NO_OBJECT ||
             command.obj == INTRANSITIVE) {
@@ -1510,7 +1517,7 @@ int action(command_t command)
         case RUB:
             return rub(command.verb, command.obj);
         case THROW:
-            return throw(command);
+            return throw (command);
         case QUIT: {
             speak(actions[command.verb].message);
             return GO_CLEAROBJ;
@@ -1562,11 +1569,11 @@ int action(command_t command)
             speak(actions[command.verb].message);
             return GO_CLEAROBJ;
         }
-       // LCOV_EXCL_START
-       // This case should never happen - here only as placeholder
+        // LCOV_EXCL_START
+        // This case should never happen - here only as placeholder
         case PART:
             return reservoir();
-       // LCOV_EXCL_STOP
+        // LCOV_EXCL_STOP
         case SEED:
             return seed(command.verb, command.word[1].raw);
         case WASTE: