Get rid of FORTRANisms.
[super-star-trek.git] / sst.h
diff --git a/sst.h b/sst.h
index 4c1db0ad833e12a85da95c7604a9e3105880cad4..5b68074186a972e7fc4c0b43c7141fa4406440f0 100644 (file)
--- a/sst.h
+++ b/sst.h
@@ -2,6 +2,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <string.h>
+#include <curses.h>
 #ifndef INCLUDED
 #define EXTERN extern
 #else
@@ -17,6 +18,9 @@
 #define PHASEFAC (2.0)
 #define PLNETMAX (10)
 #define NEVENTS (8)
+#define GALSIZE        (8)
+#define QUADSIZE (10)
+#define BASEMAX        (6)
 
 typedef struct {
     int x;     /* Quadrant location of planet */
@@ -37,11 +41,11 @@ typedef struct {
        basekl,                 // destroyed bases
        killk,                  // Klingons killed
        killc,                  // commanders killed
-       galaxy[9][9],   // The Galaxy (subscript 0 not used)
-       cx[11],cy[11],  // Commander quadrant coordinates
-       baseqx[6],              // Base quadrant X
-       baseqy[6],              // Base quadrant Y
-       newstuf[9][9],  // Extended galaxy goodies
+       galaxy[GALSIZE+1][GALSIZE+1],   // The Galaxy (subscript 0 not used)
+       cx[QUADSIZE+1],cy[QUADSIZE+1],  // Commander quadrant coordinates
+       baseqx[BASEMAX],                // Base quadrant X
+       baseqy[BASEMAX],                // Base quadrant Y
+       newstuf[GALSIZE+1][GALSIZE+1],  // Extended galaxy goodies
        isx, isy,               // Coordinate of Super Commander
        nscrem,                 // remaining super commanders
        nromkl,                 // Romulans killed
@@ -54,6 +58,33 @@ typedef struct {
            remtime;            // remaining time
 } snapshot;                            // Data that is snapshot
 
+/*
+ * This is how the integers in the galaxy array are encoded.
+ * Someday these should turn into structure fields.
+ */
+#define SUPERNOVA_PLACE        1000
+#define KLINGON_PLACE  100
+#define BASE_PLACE     10
+#define STAR_PLACE     1
+#define KLINGONS(n)    ((n)/KLINGON_PLACE)
+#define BASES(n)       (((n)%KLINGON_PLACE)/BASE_PLACE)
+#define STARS(n)       ((n)%BASE_PLACE)
+#define NOEXIT(s)      ((s) > 899)     /* supernova or >8 Klingons */
+
+/* for newstuff */
+#define ROMULAN_PLACE  10
+#define ROMULANS(n)    ((n)/ROMULAN_PLACE)
+
+/* for starch */
+#define CHART_UNKNOWN  -1
+
+#define SKILL_NONE     0
+#define SKILL_NOVICE   1
+#define SKILL_FAIR     2
+#define SKILL_GOOD     3
+#define SKILL_EXPERT   4
+#define SKILL_EMERITUS 5
+
 // Scalar variables that are needed for freezing the game
 // are placed in a structure. #defines are used to access by their
 // original names. Gee, I could have done this with the d structure,
@@ -61,22 +92,22 @@ typedef struct {
 
 #define SSTMAGIC       "SST2.0\n"
 
-EXTERN short curwnd;
+EXTERN WINDOW *curwnd;
 
 EXTERN struct {
     char magic[sizeof(SSTMAGIC)];
     snapshot state;
     snapshot snapsht;
-    char quad[11][11];         // contents of our quadrant
-    double kpower[21];         // enemy energy levels
-    double kdist[21];          // enemy distances
-    double kavgd[21];          // average distances
+    char quad[QUADSIZE+1][QUADSIZE+1];         // contents of our quadrant
+    double kpower[(QUADSIZE+1)*(QUADSIZE+1)];          // enemy energy levels
+    double kdist[(QUADSIZE+1)*(QUADSIZE+1)];           // enemy distances
+    double kavgd[(QUADSIZE+1)*(QUADSIZE+1)];           // average distances
     double damage[NDEVICES+1]; // damage encountered
     double future[NEVENTS+1];  // future events
     char passwd[10];           // Self Destruct password
-    int kx[21];                        // enemy sector locations
-    int ky[21];
-    int starch[9][9];          // star chart
+    int kx[(QUADSIZE+1)*(QUADSIZE+1)];                 // enemy sector locations
+    int ky[(QUADSIZE+1)*(QUADSIZE+1)];
+    int starch[GALSIZE+1][GALSIZE+1];          // star chart
     /* members with macro definitions start here */
     int inkling,
        inbase,
@@ -398,8 +429,7 @@ void crmshp(void);
 char *cramlc(enum loctype, int, int);
 double expran(double);
 double Rand(void);
-void iran8(int *, int *);
-void iran10(int *, int *);
+void iran(int, int *, int *);
 #define square(i) ((i)*(i))
 void dropin(int, int*, int*);
 void newcnd(void);
@@ -418,7 +448,6 @@ void snova(int, int);
 void scom(int *);
 void hittem(double *);
 void prouts(char *, ...);
-void proutc(char *);
 int isit(char *);
 void preport(void);
 void orbit(void);
@@ -434,8 +463,7 @@ void attakreport(int);
 void movetho(void);
 void probe(void);
 void iostart(int);
-void ioend(void);
-void setwnd(short);
+void setwnd(WINDOW *);
 void warble(void);
 void boom(int ii, int jj);
 void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad);
@@ -443,9 +471,8 @@ void cgetline(char *, int);
 void waitfor(void);
 void setpassword(void);
 void commandhook(char *, int);
-void c_printf (char *format, ... );
 void makechart(void);
-void enqueue(char *s);
+void enqueue(char *);
 
 /* mode arguments for srscan() */
 #define SCAN_FULL              1
@@ -453,14 +480,22 @@ void enqueue(char *s);
 #define SCAN_STATUS            3
 #define SCAN_NO_LEFTSIDE       4
 
-typedef struct {
-        int wndleft,wndtop,wndright,wndbottom;
-} wnd;
-extern wnd wnds[6];
-/* these need to track io.c:wnd */
-#define FULLSCREEN_WINDOW      0
-#define LEFTUPPER_WINDOW       1
-#define SRSCAN_WINDOW          2
-#define LRSCAN_WINDOW          3
-#define LOWER_WINDOW           4
-#define BOTTOM_WINDOW          5
+WINDOW *fullscreen_window;
+WINDOW *srscan_window;
+WINDOW *report_window;
+WINDOW *lrscan_window;
+WINDOW *message_window;
+WINDOW *prompt_window;
+
+extern void clreol(void);
+extern void clrscr(void);
+extern void textcolor(int color);
+extern void highvideo(void);
+
+enum COLORS {
+   DEFAULT,
+   BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
+   DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
+};
+
+#define DAMAGED        128     /* marker for damaged ship in starmap */