Beginning of actions1.c refactor.
[open-adventure.git] / actions1.c
index 100ef83608950d9368bf7c8407e4f7a444014d33..e9da84e7dbf66ac5314ea77b373334f95ac535a7 100644 (file)
@@ -1,9 +1,37 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include "advent.h"
-#include "funcs.h"
 #include "database.h"
 
+/*
+ * Action handlers.  Eventually we'll do lookup through a method table
+ * that calls these.  Absolutely nothing like the original FORTRAN
+ */
+
+static int chain(int verb)
+{
+    if(verb != LOCK) {
+       SPK=171;
+       if(game.prop[BEAR] == 0)SPK=41;
+       if(game.prop[CHAIN] == 0)SPK=37;
+       if(SPK != 171) return(2011);
+       game.prop[CHAIN]=0;
+       game.fixed[CHAIN]=0;
+       if(game.prop[BEAR] != 3)game.prop[BEAR]=2;
+       game.fixed[BEAR]=2-game.prop[BEAR];
+       return(2011);
+    } else {
+       SPK=172;
+       if(game.prop[CHAIN] != 0)SPK=34;
+       if(game.loc != PLAC[CHAIN])SPK=173;
+       if(SPK != 172) return(2011);
+       game.prop[CHAIN]=2;
+       if(TOTING(CHAIN))DROP(CHAIN,game.loc);
+       game.fixed[CHAIN]= -1;
+       return(2011);
+    }
+}
+
 /* This stuff was broken off as part of an effort to get the main program
  * to compile without running out of memory.  We're called with a number
  * that says what label the caller wanted to "goto", and we return a
@@ -227,25 +255,7 @@ L9046:     K=0;
         return(2011);
 
 /*  Chain. */
-L9048: if(verb == LOCK) goto L9049;
-       SPK=171;
-       if(game.prop[BEAR] == 0)SPK=41;
-       if(game.prop[CHAIN] == 0)SPK=37;
-       if(SPK != 171) return(2011);
-       game.prop[CHAIN]=0;
-       game.fixed[CHAIN]=0;
-       if(game.prop[BEAR] != 3)game.prop[BEAR]=2;
-       game.fixed[BEAR]=2-game.prop[BEAR];
-        return(2011);
-
-L9049: SPK=172;
-       if(game.prop[CHAIN] != 0)SPK=34;
-       if(game.loc != PLAC[CHAIN])SPK=173;
-       if(SPK != 172) return(2011);
-       game.prop[CHAIN]=2;
-       if(TOTING(CHAIN))DROP(CHAIN,game.loc);
-       game.fixed[CHAIN]= -1;
-        return(2011);
+L9048:  return chain(verb);
 
 /*  Light.  Applicable only to lamp and urn. */
 
@@ -437,10 +447,7 @@ L9230:     if(game.prop[ROD2] < 0 || !game.closed) return(2011);
 /*  Score.  Call scoring routine but tell it to return. */
 
 L8240: score(-1);
-       SETPRM(1,SCORE,MXSCOR);
-       SETPRM(3,game.turns,game.turns);
-       RSPEAK(259);
-        return(2012);
+       return(2012);
 
 /*  FEE FIE FOE FOO (AND FUM).  Advance to next state if given in proper order.
  *  Look up WD1 in section 3 of vocab to determine which word we've got.  Last