]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - battlestar/extern.h
Add OBJ_AN flag to objflags so as to use "a" or "an" appropriately in
[bsdgames-darwin.git] / battlestar / extern.h
index 0d22ae66cc801e68b65097bc03666893016132ca..0982ec16da8935b7481636f6094bc734ec16ca62 100644 (file)
@@ -1,4 +1,4 @@
-/* $NetBSD: extern.h,v 1.3 1997/01/07 12:35:42 tls Exp $       */
+/*     $NetBSD: extern.h,v 1.26 2000/09/25 14:08:08 jsm Exp $ */
 
 /*
  * Copyright (c) 1983, 1993
  *     @(#)externs.h   8.1 (Berkeley) 5/31/93
  */
 
+#include <ctype.h>
+#include <err.h>
+#include <pwd.h>
 #include <signal.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
+#include <time.h>
+#include <unistd.h>
 
 #define BITS (8 * sizeof (int))
 
 #define setbit(array, index)   (array[index/BITS] |= (1 << (index % BITS)))
 #define clearbit(array, index) (array[index/BITS] &= ~(1 << (index % BITS)))
 
      /* well known rooms */
+ /* well known rooms */
 #define FINAL  275
 #define GARDEN 197
 #define POOLS  126
 #define DOCK   93
 
      /* word types */
+ /* word types */
 #define VERB   0
 #define OBJECT  1
 #define NOUNS  2
@@ -62,8 +68,8 @@
 #define ADJS   4
 #define CONJ   5
 
      /* words numbers */
-#define KNIFE          0 
+ /* words numbers */
+#define KNIFE          0
 #define SWORD          1
 #define LAND           2
 #define WOODSMAN       3
 #define BAR            62
 #define        BLOCK           63
 #define NUMOFOBJECTS   64
      /* non-objects below */
+ /* non-objects below */
 #define UP     1000
 #define DOWN   1001
 #define AHEAD  1002
 #define RIDE   1047
 #define DRIVE  1048
 #define SCORE  1049
-#define BURY   1050 
+#define BURY   1050
 #define JUMP   1051
 #define KICK   1052
+#define OPEN   1053
+#define VERBOSE        1054
+#define BRIEF  1055
 
      /* injuries */
+ /* injuries */
 #define ARM    6               /* broken arm */
 #define RIBS   7               /* broken ribs */
 #define SPINE  9               /* broken back */
 #define NECK   12              /* broken NECK */
 #define NUMOFINJURIES 13
 
      /* notes */
+ /* notes */
 #define        CANTLAUNCH      0
 #define LAUNCHED       1
 #define CANTSEE                2
-#define CANTMOVE       3 
+#define CANTMOVE       3
 #define JINXED         4
 #define DUG            5
 #define NUMOFNOTES     6
 
-       /* fundamental constants */
+/* Number of times room description shown. */
+#define ROOMDESC       3
+
+ /* fundamental constants */
 #define NUMOFROOMS     275
 #define NUMOFWORDS     ((NUMOFOBJECTS + BITS - 1) / BITS)
 #define LINELENGTH     81
 #define TONIGHT                1
 #define CYCLE          100
 
      /* initial variable values */
+ /* initial variable values */
 #define TANKFULL       250
 #define TORPEDOES      10
 #define MAXWEIGHT      60
 #define MAXCUMBER      10
 
+/* Flags for objects.  */
+#define OBJ_PLURAL     1
+#define OBJ_AN         2
+
 struct room {
-       char *name;
-       int link[8];
+       const char   *name;
+       int     link[8];
 #define north  link[0]
 #define south  link[1]
 #define east   link[2]
@@ -226,75 +242,140 @@ struct room {
 #define access link[5]
 #define down   link[6]
 #define flyhere        link[7]
-       char *desc;
+       const char   *desc;
        unsigned int objects[NUMOFWORDS];
 };
-struct room dayfile[];
-struct room nightfile[];
-struct room *location;
+extern struct room dayfile[];
+extern struct room nightfile[];
+extern struct room *location;
 
-       /* object characteristics */
-char *objdes[NUMOFOBJECTS];
-char *objsht[NUMOFOBJECTS];
-char *ouch[NUMOFINJURIES];
-int objwt[NUMOFOBJECTS];
-int objcumber[NUMOFOBJECTS];
-
-       /* current input line */
-#define NWORD  20                      /* words per line */
-char words[NWORD][15];
-int wordvalue[NWORD];
-int wordtype[NWORD];
-int wordcount, wordnumber;
+ /* object characteristics */
+extern const char   *const objdes[NUMOFOBJECTS];
+extern const char   *const objsht[NUMOFOBJECTS];
+extern const char   *const ouch[NUMOFINJURIES];
+extern const int     objwt[NUMOFOBJECTS];
+extern const int     objcumber[NUMOFOBJECTS];
+extern const int     objflags[NUMOFOBJECTS];
+#define is_plural_object(n)    (objflags[(n)] & OBJ_PLURAL)
+/*
+ * These macros yield words to use with objects (followed but not preceded
+ * by spaces, or with no spaces if the expansion is the empty string).
+ */
+#define A_OR_AN(n)             (objflags[(n)] & OBJ_AN ? "an " : "a ")
+#define A_OR_AN_OR_THE(n)      (is_plural_object((n)) ? "the " : A_OR_AN((n)))
+#define A_OR_AN_OR_BLANK(n)    (is_plural_object((n)) ? "" : A_OR_AN((n)))
+#define IS_OR_ARE(n)           (is_plural_object((n)) ? "are " : "is ")
 
-char *truedirec(), *rate();
-char *getcom(), *getword();
+ /* current input line */
+#define WORDLEN        15
+#define NWORD  20              /* words per line */
+extern char    words[NWORD][WORDLEN];
+extern int     wordvalue[NWORD];
+extern int     wordtype[NWORD];
+extern int     wordcount, wordnumber;
 
-       /* state of the game */
-int time;
-int position;
-int direction;
-int left, right, ahead, back;
-int clock, fuel, torps;
-int carrying, encumber;
-int rythmn;
-int followfight;
-int ate;
-int snooze;
-int meetgirl;
-int followgod;
-int godready;
-int win;
-int wintime;
-int wiz;
-int tempwiz;
-int matchlight, matchcount;
-int loved;
-int pleasure, power, ego;
-int WEIGHT;
-int CUMBER;
-int notes[NUMOFNOTES];
-unsigned int inven[NUMOFWORDS];
-unsigned int wear[NUMOFWORDS];
-char beenthere[NUMOFROOMS+1];
-char injuries[NUMOFINJURIES];
+ /* state of the game */
+extern int     ourtime;
+extern int     position;
+extern int     direction;
+extern int     left, right, ahead, back;
+extern int     ourclock, fuel, torps;
+extern int     carrying, encumber;
+extern int     rythmn;
+extern int     followfight;
+extern int     ate;
+extern int     snooze;
+extern int     meetgirl;
+extern int     followgod;
+extern int     godready;
+extern int     win;
+extern int     wintime;
+extern int     wiz;
+extern int     tempwiz;
+extern int     matchlight, matchcount;
+extern int     loved;
+extern int     pleasure, power, ego;
+extern int     WEIGHT;
+extern int     CUMBER;
+extern int     notes[NUMOFNOTES];
+extern unsigned int inven[NUMOFWORDS];
+extern unsigned int wear[NUMOFWORDS];
+extern char    beenthere[NUMOFROOMS + 1];
+extern char    injuries[NUMOFINJURIES];
+extern int     verbose;
 
-char uname[9];
+extern const char *username;
 
 struct wlist {
-       char *string;
-       int value, article;
+       const char   *string;
+       int     value, article;
        struct wlist *next;
 };
-#define HASHSIZE       256
-#define HASHMUL                81
-#define HASHMASK       (HASHSIZE - 1)
-struct wlist *hashtab[HASHSIZE];
-struct wlist wlist[];
+extern struct wlist wlist[];
 
 struct objs {
-       short room;
-       short obj;
+       short   room;
+       short   obj;
 };
-struct objs dayobjs[];
-struct objs nightobjs[];
+extern const struct objs dayobjs[];
+extern const struct objs nightobjs[];
+
+#define DEFAULT_SAVE_FILE      ".Bstar"
+
+void bury __P((void));
+int card __P((const char *, int));
+void chime __P((void));
+void convert __P((int));
+void crash __P((void));
+int cypher __P((void));
+void die __P((void)) __attribute__((__noreturn__));
+void diesig __P((int)) __attribute__((__noreturn__));
+void dig __P((void));
+void dooropen __P((void));
+int draw __P((void));
+void drink __P((void));
+int drive __P((void));
+int drop __P((const char *));
+int eat __P((void));
+int fight __P((int, int));
+int follow __P((void));
+char *getcom __P((char *, int, const char *, const char *));
+char *getword __P((char *, char *, int));
+int give __P((void));
+void initialize __P((const char *));
+int jump __P((void));
+void kiss __P((void));
+int land __P((void));
+int launch __P((void));
+void light __P((void));
+void live __P((void)) __attribute__((__noreturn__));
+void love __P((void));
+int moveplayer __P((int, int));
+void murder __P((void));
+void news __P((void));
+void newway __P((int));
+void open_score_file __P((void));
+void parse __P((void));
+void post __P((char));
+void printobjs __P((void));
+int put __P((void));
+int puton __P((void));
+const char *rate __P((void));
+void ravage __P((void));
+void restore __P((const char *));
+int ride __P((void));
+void save __P((const char *));
+char *save_file_name __P((const char *, size_t));
+int shoot __P((void));
+int take __P((unsigned int[]));
+int takeoff __P((void));
+int throw __P((const char *));
+const char *truedirec __P((int, char));
+int ucard __P((const unsigned int *));
+int use __P((void));
+int visual __P((void));
+int wearit __P((void));
+void whichway __P((struct room));
+void wordinit __P((void));
+void writedes __P((void));
+int zzz __P((void));