Better project documentation.
[super-star-trek.git] / sst.h
diff --git a/sst.h b/sst.h
index e0f9bd5d00e87d61309df3997c0cff4ddf1d1947..8705b8480ce06277cbb4e6c410e2e658f35a99c7 100644 (file)
--- a/sst.h
+++ b/sst.h
 \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
-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
+#define DESTROY(pl)    memset(pl, '\0', sizeof(planet))\r
+\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
-} state, snapsht;                      // Data that is snapshot\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
+#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[ndevice+1];  // damage encountered\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
@@ -129,7 +136,7 @@ EXTERN struct foo2 {
        proben,\r
        isarmed,\r
        nprobes;\r
-       double inresor,\r
+    double inresor,\r
        intime,\r
        inenrg,\r
        inshld,\r
@@ -153,113 +160,110 @@ EXTERN struct foo2 {
        probey,\r
        probeinx,\r
        probeiny;\r
-} frozen;\r
+} game;\r
 \r
-#define inkling frozen.inkling         // Initial number of klingons\r
-#define inbase frozen.inbase                   // Initial number of bases\r
-#define incom frozen.incom                     // Initian number of commanders\r
-#define instar frozen.instar                   // Initial stars\r
-#define intorps frozen.intorps         // Initial/Max torpedoes\r
-#define condit frozen.condit                   // Condition (red, yellow, green docked)\r
-#define torps frozen.torps                     // number of torpedoes\r
-#define ship frozen.ship                               // Ship type -- 'E' is Enterprise\r
-#define quadx frozen.quadx                     // where we are\r
-#define quady frozen.quady                     //\r
-#define sectx frozen.sectx                     // where we are\r
-#define secty frozen.secty                     //\r
-#define length frozen.length                   // length of game\r
-#define skill frozen.skill                     // skill level\r
-#define basex frozen.basex                     // position of base in current quad\r
-#define basey frozen.basey                     //\r
-#define klhere frozen.klhere                   // klingons here\r
-#define comhere frozen.comhere         // commanders here\r
-#define casual frozen.casual                   // causalties\r
-#define nhelp frozen.nhelp                     // calls for help\r
-#define nkinks frozen.nkinks                   //\r
-#define ididit frozen.ididit                   // Action taken -- allows enemy to attack\r
-#define gamewon frozen.gamewon         // Finished!\r
-#define alive frozen.alive                     // We are alive (not killed)\r
-#define justin frozen.justin                   // just entered quadrant\r
-#define alldone frozen.alldone         // game is now finished\r
-#define shldchg frozen.shldchg         // shield is changing (affects efficiency)\r
-#define thingx frozen.thingx                   // location of strange object in galaxy\r
-#define thingy frozen.thingy                   //\r
-#define plnetx frozen.plnetx                   // location of planet in quadrant\r
-#define plnety frozen.plnety                   //\r
-#define inorbit frozen.inorbit         // orbiting\r
-#define landed frozen.landed                   // party on planet (1), on ship (-1)\r
-#define iplnet frozen.iplnet                   // planet # in quadrant\r
-#define imine frozen.imine                     // mining\r
-#define inplan frozen.inplan                   // initial planets\r
-#define nenhere frozen.nenhere         // Number of enemies in quadrant\r
-#define ishere frozen.ishere                   // Super-commander in quandrant\r
-#define neutz frozen.neutz                     // Romulan Neutral Zone\r
-#define irhere frozen.irhere                   // Romulans in quadrant\r
-#define icraft frozen.icraft                   // Kirk in Galileo\r
-#define ientesc frozen.ientesc         // Attempted escape from supercommander\r
-#define iscraft frozen.iscraft         // =1 if craft on ship, -1 if removed from game\r
-#define isatb frozen.isatb                     // =1 if SuperCommander is attacking base\r
-#define iscate frozen.iscate                   // Super Commander is here\r
+#define inkling game.inkling           // Initial number of klingons\r
+#define inbase game.inbase                     // Initial number of bases\r
+#define incom game.incom                       // Initian number of commanders\r
+#define instar game.instar                     // Initial stars\r
+#define intorps game.intorps           // Initial/Max torpedoes\r
+#define condit game.condit                     // Condition (red, yellow, green docked)\r
+#define torps game.torps                       // number of torpedoes\r
+#define ship game.ship                         // Ship type -- 'E' is Enterprise\r
+#define quadx game.quadx                       // where we are\r
+#define quady game.quady                       //\r
+#define sectx game.sectx                       // where we are\r
+#define secty game.secty                       //\r
+#define length game.length                     // length of game\r
+#define skill game.skill                       // skill level\r
+#define basex game.basex                       // position of base in current quad\r
+#define basey game.basey                       //\r
+#define klhere game.klhere                     // klingons here\r
+#define comhere game.comhere           // commanders here\r
+#define casual game.casual                     // causalties\r
+#define nhelp game.nhelp                       // calls for help\r
+#define nkinks game.nkinks                     //\r
+#define ididit game.ididit                     // Action taken -- allows enemy to attack\r
+#define gamewon game.gamewon           // Finished!\r
+#define alive game.alive                       // We are alive (not killed)\r
+#define justin game.justin                     // just entered quadrant\r
+#define alldone game.alldone           // game is now finished\r
+#define shldchg game.shldchg           // shield is changing (affects efficiency)\r
+#define thingx game.thingx                     // location of strange object in galaxy\r
+#define thingy game.thingy                     //\r
+#define plnetx game.plnetx                     // location of planet in quadrant\r
+#define plnety game.plnety                     //\r
+#define inorbit game.inorbit           // orbiting\r
+#define landed game.landed                     // party on planet (1), on ship (-1)\r
+#define iplnet game.iplnet                     // planet # in quadrant\r
+#define imine game.imine                       // mining\r
+#define inplan game.inplan                     // initial planets\r
+#define nenhere game.nenhere           // Number of enemies in quadrant\r
+#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 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
+#define isatb game.isatb                       // =1 if SuperCommander is attacking base\r
+#define iscate game.iscate                     // Super Commander is here\r
 #ifdef DEBUG\r
-#define idebug frozen.idebug                   // Debug mode\r
+#define idebug game.idebug                     // Debug mode\r
 #endif\r
-#define iattak frozen.iattak                   // attack recursion elimination (was cracks[4])\r
-#define icrystl frozen.icrystl         // dilithium crystals aboard\r
-#define tourn frozen.tourn                     // Tournament number\r
-#define thawed frozen.thawed                   // Thawed game\r
-#define batx frozen.batx                               // Base coordinates being attacked\r
-#define baty frozen.baty                               //\r
-#define ithere frozen.ithere                   // Tholean is here \r
-#define ithx frozen.ithx                               // coordinates of tholean\r
-#define ithy frozen.ithy\r
-#define iseenit frozen.iseenit         // Seen base attack report\r
-#define inresor frozen.inresor         // initial resources\r
-#define intime frozen.intime                   // initial time\r
-#define inenrg frozen.inenrg                   // Initial/Max Energy\r
-#define inshld frozen.inshld                   // Initial/Max Shield\r
-#define inlsr frozen.inlsr                     // initial life support resources\r
-#define indate frozen.indate                   // Initial date\r
-#define energy frozen.energy                   // Energy level\r
-#define shield frozen.shield                   // Shield level\r
-#define shldup frozen.shldup                   // Shields are up\r
-#define warpfac frozen.warpfac         // Warp speed\r
-#define wfacsq frozen.wfacsq                   // squared warp factor\r
-#define lsupres frozen.lsupres         // life support reserves\r
-#define dist frozen.dist                               // movement distance\r
-#define direc frozen.direc                     // movement direction\r
-#define Time frozen.Time                               // time taken by current operation\r
-#define docfac frozen.docfac                   // repair factor when docking (constant?)\r
-#define resting frozen.resting         // rest time\r
-#define damfac frozen.damfac                   // damage factor\r
-#define stdamtim frozen.stdamtim               // time that star chart was damaged\r
-#define cryprob frozen.cryprob         // probability that crystal will work\r
-#define probex frozen.probex                   // location of probe\r
-#define probey frozen.probey\r
-#define probecx frozen.probecx         // current probe quadrant\r
-#define probecy frozen.probecy \r
-#define probeinx frozen.probeinx               // Probe x,y increment\r
-#define probeiny frozen.probeiny               \r
-#define proben frozen.proben                   // number of moves for probe\r
-#define isarmed frozen.isarmed         // Probe is armed\r
-#define nprobes frozen.nprobes         // number of probes available\r
+#define iattak game.iattak                     // attack recursion elimination (was cracks[4])\r
+#define icrystl game.icrystl           // dilithium crystals aboard\r
+#define tourn game.tourn                       // Tournament number\r
+#define thawed game.thawed                     // Thawed game\r
+#define batx game.batx                         // Base coordinates being attacked\r
+#define baty game.baty                         //\r
+#define ithere game.ithere                     // Tholean is here \r
+#define ithx game.ithx                         // coordinates of tholean\r
+#define ithy game.ithy\r
+#define iseenit game.iseenit           // Seen base attack report\r
+#define inresor game.inresor           // initial resources\r
+#define intime game.intime                     // initial time\r
+#define inenrg game.inenrg                     // Initial/Max Energy\r
+#define inshld game.inshld                     // Initial/Max Shield\r
+#define inlsr game.inlsr                       // initial life support resources\r
+#define indate game.indate                     // Initial date\r
+#define energy game.energy                     // Energy level\r
+#define shield game.shield                     // Shield level\r
+#define shldup game.shldup                     // Shields are up\r
+#define warpfac game.warpfac           // Warp speed\r
+#define wfacsq game.wfacsq                     // squared warp factor\r
+#define lsupres game.lsupres           // life support reserves\r
+#define dist game.dist                         // movement distance\r
+#define direc game.direc                       // movement direction\r
+#define Time game.Time                         // time taken by current operation\r
+#define docfac game.docfac                     // repair factor when docking (constant?)\r
+#define resting game.resting           // rest time\r
+#define damfac game.damfac                     // damage factor\r
+#define stdamtim game.stdamtim         // time that star chart was damaged\r
+#define cryprob game.cryprob           // probability that crystal will work\r
+#define probex game.probex                     // location of probe\r
+#define probey game.probey\r
+#define probecx game.probecx           // current probe quadrant\r
+#define probecy game.probecy   \r
+#define probeinx game.probeinx         // Probe x,y increment\r
+#define probeiny game.probeiny         \r
+#define proben game.proben                     // number of moves for probe\r
+#define isarmed game.isarmed           // Probe is armed\r
+#define nprobes game.nprobes           // number of probes available\r
 \r
 /* the following global state doesn't need to be saved */\r
 EXTERN int fromcommandline; // Game start from command line options\r
-EXTERN char    *device[ndevice+1];\r
-EXTERN PLANETS nulplanet;      // zeroed planet structure\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
@@ -291,8 +295,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
@@ -371,14 +374,14 @@ 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
@@ -394,15 +397,13 @@ void deadkl(int, int, int, int, int);
 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 huh(void);\r
 void pause(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
 int isit(char *);\r
 void preport(void);\r
 void orbit(void);\r