Abstract away the operations involving a sentinel value for coordinates.
[super-star-trek.git] / src / sst.h
index c7a146d79f57a9abc6ec70f8f350fd84e6fc274b..a9bf781e546a588bcd558fdde1a99ff2441fb253 100644 (file)
--- a/src/sst.h
+++ b/src/sst.h
@@ -45,14 +45,15 @@ typedef struct {int x; int y;} coord;
 #define square(i)              ((i)*(i))
 #define same(c1, c2)           ((c1.x == c2.x) && (c1.y == c2.y))
 #define distance(c1, c2)       sqrt(square(c1.x - c2.x) + square(c1.y - c2.y))
+#define invalidate(w)          w.x = w.y = 0
+#define is_valid(w)            (w.x == 0 || w.y == 0)
 
 typedef struct {
     coord w;
     enum {M=0, N=1, O=2} pclass;
     int inhabited;     /* if NZ, an index into a name array */
 #define UNINHABITED    -1
-    int crystals; /* has crystals */
-#define MINED  -1      /* used to have crystals, but they were mined out */
+    enum {mined=-1, present=0, absent=1} crystals; /* has crystals */
     enum {unknown, known, shuttle_down} known;
 } planet;
 
@@ -203,6 +204,8 @@ extern double scheduled(int);
 
 #define SSTMAGIC       "SST2.0\n"
 
+#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
+
 struct game {
     char magic[sizeof(SSTMAGIC)];
     unsigned long options;
@@ -284,7 +287,6 @@ struct game {
        nenhere,        // number of enemies in quadrant
        irhere,         // Romulans in quadrant
        isatb,          // =1 if super commander is attacking base
-       iattak,         // attack recursion elimination (was cracks[4])
        tourn,          // tournament number
        proben,         // number of moves for probe
        nprobes;        // number of probes available
@@ -316,6 +318,7 @@ extern struct game game;
 
 /* the following global state doesn't need to be saved */
 extern char *device[NDEVICES];
+extern char *systnames[NINHAB + 1];
 extern int iscore, iskill; // Common PLAQ
 extern double perdate;
 extern double aaitem;
@@ -397,7 +400,7 @@ coord randplace(int);
 coord dropin(feature);
 void newcnd(void);
 void sortkl(void);
-void imove(void);
+void imove(bool);
 void ram(bool, feature, coord);
 void crmena(bool, feature, enum loctype, coord w);
 void deadkl(coord, feature, coord);
@@ -436,7 +439,6 @@ void setpassword(void);
 void commandhook(char *, bool);
 void makechart(void);
 void enqueue(char *);
-char *systemname(int);
 coord newkling(int);
 #if BSD_BUG_FOR_BUG
 void visual(void);