#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
+ 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
typedef struct {\r
int snap, // snapshot taken\r
remkl, // remaining klingons\r
nromrem, // Romulans remaining\r
nsckill, // super commanders killed\r
nplankl; // destroyed planets\r
- planet plnets[PLNETMAX+1]; // Planet information\r
+ planet plnets[PLNETMAX]; // Planet information\r
double date, // stardate\r
remres, // remaining resources\r
remtime; // remaining time\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
batx,\r
baty,\r
ithere,\r
+ iqhere,\r
+ iqengry,\r
ithx,\r
ithy,\r
iseenit,\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 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
#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 planet 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
FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET,\r
FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE,\r
FHOLE} FINTYPE ;\r
+enum loctype {neither, quadrant, sector};\r
\r
/* Define devices */\r
#define DSRSENS 1\r
#define FDSPROB 8 // Move deep space probe\r
\r
#ifdef INCLUDED\r
-planet nulplanet = {0};\r
-char *device[ndevice+1] = {\r
+char *device[NDEVICES+1] = {\r
"",\r
"S. R. Sensors",\r
"L. R. Sensors",\r
"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
#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
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
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
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
+\r
+#ifdef SERGEEV\r
+typedef struct {\r
+ int wndleft,wndtop,wndright,wndbottom;\r
+} wnd;\r
+extern wnd wnds[6];\r
+#endif /* SERGEEV */\r