+/*
+ * Action handlers. Eventually we'll do lookup through a method table
+ * that calls these. Absolutely nothing like the original FORTRAN
+ */
+
+static int bivalve(token_t verb, token_t obj)
+/* Clam/oyster actions */
+{
+ int k=0;
+ if(obj == OYSTER)k=1;
+ SPK=124+k;
+ if(TOTING(obj))SPK=120+k;
+ if(!TOTING(TRIDNT))SPK=122+k;
+ if(verb == LOCK)SPK=61;
+ if(SPK != 124)
+ return(2011);
+ DSTROY(CLAM);
+ DROP(OYSTER,game.loc);
+ DROP(PEARL,105);
+ return(2011);
+}
+
+static int chain(token_t verb)
+/* Do something to the bear's chain */
+{
+ 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);
+ }
+}
+
+static int find(token_t obj)
+/* Find. Might be carrying it, or it might be here. Else give caveat. */
+{
+ if(AT(obj) ||
+ (LIQ(0) == obj && AT(BOTTLE)) ||
+ K == LIQLOC(game.loc) ||
+ (obj == DWARF && ATDWRF(game.loc) > 0))
+ SPK=94;
+ if(game.closed)SPK=138;
+ if(TOTING(obj))SPK=24;
+ return(2011);
+}
+