More merging of SERGEEV changes.
[super-star-trek.git] / sst.h
diff --git a/sst.h b/sst.h
index b34312068646182ccd7a1eb77a100f3715adfa14..0e198f4921e41042e7ea8e540a71ad60cec2ca4f 100644 (file)
--- a/sst.h
+++ b/sst.h
@@ -8,57 +8,75 @@
 #define EXTERN\r
 #endif\r
 \r
+#define min(x, y)      ((x)<(y)?(x):(y))\r
+#define max(x, y)      ((x)>(y)?(x):(y))\r
+\r
 // #define DEBUG\r
 \r
-#define ndevice (15)   // Number of devices\r
-#define phasefac (2.0)\r
+#define NDEVICES (15)  // Number of devices\r
+#define PHASEFAC (2.0)\r
 #define PLNETMAX (10)\r
 #define NEVENTS (8)\r
 \r
 typedef struct {\r
-       int x;  /* Quadrant location of planet */\r
-       int y;\r
-       int pclass; /* class M, N, or O (1, 2, or 3) */\r
-       int crystals; /* has crystals */\r
-       int known;   /* =1 contents known, =2 shuttle on this planet */\r
-} PLANETS;\r
+    int x;     /* Quadrant location of planet */\r
+    int y;\r
+    enum {M=0, N=1, O=2} pclass;\r
+    int crystals; /* has crystals */\r
+    enum {unknown, known, shuttle_down} known;\r
+} planet;\r
+\r
+#define DESTROY(pl)    memset(pl, '\0', sizeof(planet))\r
 \r
-EXTERN struct foo {\r
-               int snap,               // snapshot taken\r
-               remkl,                  // remaining klingons\r
-           remcom,                     // remaining commanders\r
-               rembase,                // remaining bases\r
-               starkl,                 // destroyed stars\r
-               basekl,                 // destroyed bases\r
-               killk,                  // Klingons killed\r
-               killc,                  // commanders killed\r
-               galaxy[9][9],   // The Galaxy (subscript 0 not used)\r
-               cx[11],cy[11],  // Commander quadrant coordinates\r
-               baseqx[6],              // Base quadrant X\r
-               baseqy[6],              // Base quadrant Y\r
-               newstuf[9][9],  // Extended galaxy goodies\r
-               isx, isy,               // Coordinate of Super Commander\r
-               nscrem,                 // remaining super commanders\r
-               nromkl,                 // Romulans killed\r
-               nromrem,                // Romulans remaining\r
-               nsckill,                // super commanders killed\r
-               nplankl;                // destroyed planets\r
-       PLANETS plnets[PLNETMAX+1];  // Planet information\r
+typedef struct {\r
+    int snap,          // snapshot taken\r
+       remkl,                  // remaining klingons\r
+       remcom,                 // remaining commanders\r
+       rembase,                // remaining bases\r
+       starkl,                 // destroyed stars\r
+       basekl,                 // destroyed bases\r
+       killk,                  // Klingons killed\r
+       killc,                  // commanders killed\r
+       galaxy[9][9],   // The Galaxy (subscript 0 not used)\r
+       cx[11],cy[11],  // Commander quadrant coordinates\r
+       baseqx[6],              // Base quadrant X\r
+       baseqy[6],              // Base quadrant Y\r
+       newstuf[9][9],  // Extended galaxy goodies\r
+       isx, isy,               // Coordinate of Super Commander\r
+       nscrem,                 // remaining super commanders\r
+       nromkl,                 // Romulans killed\r
+       nromrem,                // Romulans remaining\r
+       nsckill,                // super commanders killed\r
+       nplankl;                // destroyed planets\r
+       planet plnets[PLNETMAX];  // Planet information\r
        double date,            // stardate\r
-               remres,                 // remaining resources\r
+           remres,             // remaining resources\r
            remtime;            // remaining time\r
-} d, snapsht;                  // Data that is snapshot\r
-\r
-EXTERN char\r
-               quad[11][11];   // contents of our quadrant\r
+} snapshot;                            // Data that is snapshot\r
 \r
 // Scalar variables that are needed for freezing the game\r
 // are placed in a structure. #defines are used to access by their\r
 // original names. Gee, I could have done this with the d structure,\r
 // but I just didn't think of it back when I started.\r
 \r
-EXTERN struct foo2 {\r
-       int inkling,\r
+#define SSTMAGIC       "SST2.0\n"\r
+\r
+EXTERN struct {\r
+    char magic[sizeof(SSTMAGIC)];\r
+    snapshot state;\r
+    snapshot snapsht;\r
+    char quad[11][11];         // contents of our quadrant\r
+    double kpower[21];         // enemy energy levels\r
+    double kdist[21];          // enemy distances\r
+    double kavgd[21];          // average distances\r
+    double damage[NDEVICES+1]; // damage encountered\r
+    double future[NEVENTS+1];  // future events\r
+    char passwd[10];           // Self Destruct password\r
+    int kx[21];                        // enemy sector locations\r
+    int ky[21];\r
+    int starch[9][9];          // star chart\r
+    /* members with macro definitions start here */\r
+    int inkling,\r
        inbase,\r
        incom,\r
        instar,\r
@@ -113,6 +131,8 @@ EXTERN struct foo2 {
        batx,\r
        baty,\r
        ithere,\r
+        iqhere,\r
+        iqengry,\r
        ithx,\r
        ithy,\r
        iseenit,\r
@@ -121,7 +141,7 @@ EXTERN struct foo2 {
        proben,\r
        isarmed,\r
        nprobes;\r
-       double inresor,\r
+    double inresor,\r
        intime,\r
        inenrg,\r
        inshld,\r
@@ -187,6 +207,8 @@ EXTERN struct foo2 {
 #define ishere game.ishere                     // Super-commander in quandrant\r
 #define neutz game.neutz                       // Romulan Neutral Zone\r
 #define irhere game.irhere                     // Romulans in quadrant\r
+#define iqhere game.iqhere                     // Thing in quadrant\r
+#define iqengry game.iqengry                   // Thing attacking\r
 #define icraft game.icraft                     // Kirk in Galileo\r
 #define ientesc game.ientesc           // Attempted escape from supercommander\r
 #define iscraft game.iscraft           // =1 if craft on ship, -1 if removed from game\r
@@ -235,39 +257,19 @@ EXTERN struct foo2 {
 #define isarmed game.isarmed           // Probe is armed\r
 #define nprobes game.nprobes           // number of probes available\r
 \r
-EXTERN int\r
-               kx[21],                 // enemy sector locations\r
-               ky[21],\r
-               starch[9][9];   // star chart\r
-\r
-EXTERN int fromcommandline; // Game start from command line options\r
-\r
-\r
-EXTERN char    passwd[10],             // Self Destruct password\r
-               *device[ndevice+1];\r
-\r
-EXTERN PLANETS nulplanet;      // zeroed planet structure\r
-\r
-EXTERN double\r
-               kpower[21],             // enemy energy levels\r
-               kdist[21],              // enemy distances\r
-               kavgd[21],              // average distances\r
-               damage[ndevice+1],              // damage encountered\r
-               future[NEVENTS+1];              // future events\r
-\r
+/* the following global state doesn't need to be saved */\r
+EXTERN char    *device[NDEVICES+1];\r
 EXTERN int iscore, iskill; // Common PLAQ\r
 EXTERN double perdate;\r
+EXTERN double aaitem;\r
+EXTERN char citem[10];\r
 \r
 typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE,\r
               FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM,\r
                          FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,\r
                          FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE,\r
                          FHOLE} FINTYPE ;\r
-\r
-\r
-EXTERN double aaitem;\r
-EXTERN char citem[10];\r
-\r
+enum loctype {neither, quadrant, sector};\r
 \r
 /* Define devices */\r
 #define DSRSENS 1\r
@@ -299,8 +301,7 @@ EXTERN char citem[10];
 #define FDSPROB 8   // Move deep space probe\r
 \r
 #ifdef INCLUDED\r
-PLANETS nulplanet = {0};\r
-char *device[ndevice+1] = {\r
+char *device[NDEVICES+1] = {\r
        "",\r
        "S. R. Sensors",\r
        "L. R. Sensors",\r
@@ -319,8 +320,10 @@ char *device[ndevice+1] = {
     "D. S. Probe"};                                                                    \r
 #endif\r
 \r
+#ifndef TRUE\r
 #define TRUE (1)\r
 #define FALSE (0)\r
+#endif\r
 \r
 #define IHR 'R'\r
 #define IHK 'K'\r
@@ -340,13 +343,17 @@ char *device[ndevice+1] = {
 #define IHYELLOW 'Y'\r
 #define IHRED 'R'\r
 #define IHDOCKED 'D'\r
+#define IHDEAD 'Z'\r
+#define IHMATER0 '-'\r
+#define IHMATER1 'o'\r
+#define IHMATER2 '0'\r
 \r
 \r
 /* Function prototypes */\r
 void prelim(void);\r
 void attack(int);\r
-int choose(void);\r
-void setup(void);\r
+int choose(int);\r
+void setup(int);\r
 void score(void);\r
 void atover(int);\r
 void srscan(int);\r
@@ -355,7 +362,7 @@ void phasers(void);
 void photon(void);\r
 void warp(int);\r
 void doshield(int);\r
-void dock(void);\r
+void dock(int);\r
 void dreprt(void);\r
 void chart(int);\r
 void impuls(void);\r
@@ -370,7 +377,7 @@ void finish(FINTYPE);
 void dstrct(void);\r
 void kaboom(void);\r
 void freeze(int);\r
-void thaw(void);\r
+int thaw(void);\r
 void plaque(void);\r
 int scan(void);\r
 #define IHEOL (0)\r
@@ -379,48 +386,55 @@ int scan(void);
 void chew(void);\r
 void chew2(void);\r
 void skip(int);\r
-void prout(char *s);\r
-void proutn(char *s);\r
+void prout(char *, ...);\r
+void proutn(char *, ...);\r
 void stars(void);\r
 void newqad(int);\r
 int ja(void);\r
 void cramen(int);\r
 void crmshp(void);\r
-void cramlc(int, int, int);\r
+char *cramlc(enum loctype, int, int);\r
 double expran(double);\r
 double Rand(void);\r
 void iran8(int *, int *);\r
 void iran10(int *, int *);\r
-double square(double);\r
+#define square(i) ((i)*(i))\r
 void dropin(int, int*, int*);\r
 void newcnd(void);\r
 void sortkl(void);\r
-void move(void);\r
+void imove(void);\r
 void ram(int, int, int, int);\r
 void crmena(int, int, int, int, int);\r
 void deadkl(int, int, int, int, int);\r
 void timwrp(void);\r
 void movcom(void);\r
-void torpedo(double, double, int, int, double *);\r
-void cramf(double, int, int);\r
-void crami(int, int);\r
+void torpedo(double, double, int, int, double *, int);\r
 void huh(void);\r
-void pause(int);\r
+void pause_game(int);\r
 void nova(int, int);\r
 void snova(int, int);\r
 void scom(int *);\r
 void hittem(double *);\r
-void prouts(char *);\r
+void prouts(char *, ...);\r
+void proutc(char *);\r
 int isit(char *);\r
 void preport(void);\r
 void orbit(void);\r
 void sensor(void);\r
+#ifdef SERGEEV\r
+void drawmaps(short);\r
+#endif /* SERGEEV */\r
 void beam(void);\r
 void mine(void);\r
 void usecrystals(void);\r
 void shuttle(void);\r
 void deathray(void);\r
 void debugme(void);\r
-void attakreport(void);\r
+void attakreport(int);\r
 void movetho(void);\r
 void probe(void);\r
+void clearscreen(void);\r
+void iostart(int);\r
+void ioend(void);\r
+void getline(char *, int);\r
+void commandhook(char *, int);\r