+static int read(FILE *input, token_t obj)
+/* Read. Print stuff based on objtxt. Oyster (?) is special case. */
+{
+ int i;
+ if (obj == INTRANSITIVE) {
+ obj = 0;
+ for (i=1; i<=NOBJECTS; i++) {
+ if (HERE(i) && OBJTXT[i] != 0 && game.prop[i] >= 0)
+ obj = obj * NOBJECTS + i;
+ }
+ if (obj > NOBJECTS || obj == 0 || DARK(0)) return(8000);
+ }
+
+ if (DARK(0)) {
+ SETPRM(1,WD1,WD1X);
+ RSPEAK(256);
+ return(2012);
+ }
+ if (OBJTXT[obj] == 0 || game.prop[obj] < 0)
+ return(2011);
+ if (obj == OYSTER && !game.clshnt) {
+ game.clshnt=YES(input,192,193,54);
+ return(2012);
+ }
+ PSPEAK(obj,OBJTXT[obj]+game.prop[obj]);
+ return(2012);
+}
+
+static int reservoir(void)
+/* Z'ZZZ (word gets recomputed at startup; different each game). */
+{
+ if (!AT(RESER) && game.loc != game.fixed[RESER]-1) return(2011);
+ PSPEAK(RESER,game.prop[RESER]+1);
+ game.prop[RESER]=1-game.prop[RESER];
+ if (AT(RESER)) return(2012);
+ game.oldlc2=game.loc;
+ game.newloc=0;
+ RSPEAK(241);
+ return(2);
+}
+