integrate with dm
[unix-history] / usr / src / games / sail / extern.h
index 00699c2..33fb604 100644 (file)
 /*
 /*
- * sccsid = "@(#)extern.h      1.1 83/03/17";
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)extern.h    5.1 (Berkeley) %G%
  */
  */
+
 #include <stdio.h>
 #include <signal.h>
 #include <ctype.h>
 #include <stdio.h>
 #include <signal.h>
 #include <ctype.h>
+#include <setjmp.h>
 #include "machdep.h"
 
 #include "machdep.h"
 
-#define NUMOFSCENES 32
+       /* program mode */
+int mode;
+jmp_buf restart;
+#define MODE_PLAYER    1
+#define MODE_DRIVER    2
+#define MODE_LOGGER    3
+
+       /* command line flags */
+char debug;                            /* -D */
+char randomize;                                /* -x, give first available ship */
+char longfmt;                          /* -l, print score in long format */
+char nobells;                          /* -b, don't ring bell before Signal */
+
+       /* other initial modes */
+char issetuid;                         /* running setuid */
+
+#define die()          ((rand() >> 3) % 6 + 1)
+#define sqr(a)         ((a) * (a))
+#define abs(a)         ((a) > 0 ? (a) : -(a))
+#define min(a,b)       ((a) < (b) ? (a) : (b))
+
+#define grappled(a)    ((a)->file->ngrap)
+#define fouled(a)      ((a)->file->nfoul)
+#define snagged(a)     (grappled(a) + fouled(a))
+
+#define grappled2(a, b)        ((a)->file->grap[(b)->file->index].sn_count)
+#define fouled2(a, b)  ((a)->file->foul[(b)->file->index].sn_count)
+#define snagged2(a, b) (grappled2(a, b) + fouled2(a, b))
 
 
-#define die() (((rand() >> 6) % 6) + 1)
-#define fouled(a) Fouled(a, 342)
-#define grappled(a) Fouled(a, 382)
-#define grapple(a,b) Grapple(a,b,382)
-#define foul(a,b) Grapple(a,b,342)
-#define sqr(a) ((a) * (a))
-#define abs(a) ((a) > 0 ? (a) : -(a))
-#define min(a,b) ((a) < (b) ? (a) : (b))
+#define Xgrappled2(a, b) ((a)->file->grap[(b)->file->index].sn_turn < turn-1 ? grappled2(a, b) : 0)
+#define Xfouled2(a, b) ((a)->file->foul[(b)->file->index].sn_turn < turn-1 ? fouled2(a, b) : 0)
+#define Xsnagged2(a, b)        (Xgrappled2(a, b) + Xfouled2(a, b))
 
 
-#define GRAPE   1
-#define CHAIN   2
-#define ROUND   3
-#define DOUBLE  4
+#define cleangrapple(a, b, c)  Cleansnag(a, b, c, 1)
+#define cleanfoul(a, b, c)     Cleansnag(a, b, c, 2)
+#define cleansnag(a, b, c)     Cleansnag(a, b, c, 3)
 
 
-#define HULL    0
-#define RIGGING 1
+#define sterncolour(sp)        ((sp)->file->stern+'0'-((sp)->file->captured?10:0))
+#define sternrow(sp)   ((sp)->file->row + dr[(sp)->file->dir])
+#define sterncol(sp)   ((sp)->file->col + dc[(sp)->file->dir])
 
 
-#define SPECS  32
-#define FILES  64
-#define SCENARIO       128
+#define capship(sp)    ((sp)->file->captured?(sp)->file->captured:(sp))
+
+#define readyname(r)   ((r) & R_LOADING ? '*' : ((r) & R_INITIAL ? '!' : ' '))
+
+/* loadL and loadR, should match loadname[] */
+#define L_EMPTY                0               /* should be 0, don't change */
+#define L_GRAPE                1
+#define L_CHAIN                2
+#define L_ROUND                3
+#define L_DOUBLE       4
+#define L_EXPLODE      5
+
+/*
+ * readyL and readyR, these are bits, except R_EMPTY
+ */
+#define R_EMPTY                0               /* not loaded and not loading */
+#define R_LOADING      1               /* loading */
+#define R_DOUBLE       2               /* loading double */
+#define R_LOADED       4               /* loaded */
+#define R_INITIAL      8               /* loaded initial */
 
 
+#define HULL           0
+#define RIGGING                1
+
+#define W_CAPTAIN      1
+#define W_CAPTURED     2
+#define W_CLASS                3
+#define W_CREW         4
+#define W_DBP          5
+#define W_DRIFT                6
+#define W_EXPLODE      7
+#define W_FILE         8
+#define W_FOUL         9
+#define W_GUNL         10
+#define W_GUNR         11
+#define W_HULL         12
+#define W_MOVE         13
+#define W_OBP          14
+#define W_PCREW                15
+#define W_UNFOUL       16
+#define W_POINTS       17
+#define W_QUAL         18
+#define W_UNGRAP       19
+#define W_RIGG         20
+#define W_COL          21
+#define W_DIR          22
+#define W_ROW          23
+#define W_SIGNAL       24
+#define W_SINK         25
+#define W_STRUCK       26
+#define W_TA           27
+#define W_ALIVE                28
+#define W_TURN         29
+#define W_WIND         30
+#define W_FS           31
+#define W_GRAP         32
+#define W_RIG1         33
+#define W_RIG2         34
+#define W_RIG3         35
+#define W_RIG4         36
+#define W_BEGIN                37
+#define W_END          38
+#define W_DDEAD                39
+
+#define NLOG 10
 struct logs {
 struct logs {
-    char fname[20];
-    int uid, fshipnum, fgamenum, netpoints;
+       char l_name[20];
+       int l_uid;
+       int l_shipnum;
+       int l_gamenum;
+       int l_netpoints;
 };
 
 };
 
-extern struct BP {
-       int turnsent, toship, mensent;
+struct BP {
+       short turnsent;
+       struct ship *toship;
+       short mensent;
 };
 
 };
 
-extern struct snag {
-       int turnfoul, toship;
+struct snag {
+       short sn_count;
+       short sn_turn;
 };
 
 };
 
-typedef struct {
-       int row, col, dir;
-} postype;
-extern postype pos[20];
-
-extern struct File {
-       char captain[20];
-       int points;
-       int loadL, loadR, readyL, readyR;
-       struct BP OBP[3], DBP[3];
-       int struck, captured, pcrew;
-       char last[10];
-       int drift;
-       struct snag fouls[10], grapples[10];
-       char signal[60];
-       int RH, RG, RR, FS, explode, sink;
+#define NSCENE nscene
+#define NSHIP  10
+#define NBP    3
+
+#define NNATION        8
+#define N_A    0
+#define N_B    1
+#define N_S    2
+#define N_F    3
+#define N_J    4
+#define N_D    5
+#define N_K    6
+#define N_O    7
+
+struct File {
+       int index;
+       char captain[20];               /* 0 */
+       short points;                   /* 20 */
+       char loadL;                     /* 22 */
+       char loadR;                     /* 24 */
+       char readyL;                    /* 26 */
+       char readyR;                    /* 28 */
+       struct BP OBP[NBP];             /* 30 */
+       struct BP DBP[NBP];             /* 48 */
+       char struck;                    /* 66 */
+       struct ship *captured;          /* 68 */
+       short pcrew;                    /* 70 */
+       char movebuf[10];               /* 72 */
+       char drift;                     /* 82 */
+       short nfoul;
+       short ngrap;
+       struct snag foul[NSHIP];        /* 84 */
+       struct snag grap[NSHIP];        /* 124 */
+       char RH;                        /* 224 */
+       char RG;                        /* 226 */
+       char RR;                        /* 228 */
+       char FS;                        /* 230 */
+       char explode;                   /* 232 */
+       char sink;                      /* 234 */
+       char dir;
+       short col;
+       short row;
+       char loadwith;
+       char stern;
 };
 
 };
 
-typedef struct {
-       char *shipname;
-       int shipnum, nationality;
-       int shiprow, shipcol, shipdir;
-       struct File *file;
-} ships;
+struct ship {
+       char *shipname;                 /* 0 */
+       struct shipspecs *specs;        /* 2 */
+       char nationality;               /* 4 */
+       short shiprow;                  /* 6 */
+       short shipcol;                  /* 8 */
+       char shipdir;                   /* 10 */
+       struct File *file;              /* 12 */
+};
 
 struct scenario {
 
 struct scenario {
-       int winddir, windspeed, windchange;
-       int turn, people, time, vessels;
-       char *name;
-       ships ship[10];
+       char winddir;                   /* 0 */
+       char windspeed;                 /* 2 */
+       char windchange;                /* 4 */
+       char vessels;                   /* 12 */
+       char *name;                     /* 14 */
+       struct ship ship[NSHIP];        /* 16 */
 };
 };
-extern struct scenario scene[NUMOFSCENES];
+struct scenario scene[];
+int nscene;
 
 struct shipspecs {
 
 struct shipspecs {
-       int bs, fs, ta, guns, class, hull, qual, crew1,
-               crew2, crew3, gunL, gunR, carL, carR,
-               rig1, rig2, rig3, rig4, pts;
+       char bs;
+       char fs;
+       char ta;
+       short guns;
+       char class;
+       char hull;
+       char qual;
+       char crew1;
+       char crew2;
+       char crew3;
+       char gunL;
+       char gunR;
+       char carL;
+       char carR;
+       char rig1;
+       char rig2;
+       char rig3;
+       char rig4;
+       short pts;
 };
 };
-extern struct shipspecs specs[];
+struct shipspecs specs[];
 
 
-extern struct windeffects {
-       int A, B, C, D;
-} WET[7][6];
-extern struct Tables {
-       int H, G, C, R;
-} RigTable[11][6];
-extern struct Tables HullTable[11][6];
+struct scenario *cc;           /* the current scenario */
+struct ship *ls;               /* &cc->ship[cc->vessels] */
 
 
-extern int AMMO[9][4];
+#define SHIP(s)                (&cc->ship[s])
+#define foreachship(sp)        for ((sp) = cc->ship; (sp) < ls; (sp)++)
 
 
-extern int HDT[9][10];
+struct windeffects {
+       char A, B, C, D;
+};
+struct windeffects WET[7][6];
+
+struct Tables {
+       char H, G, C, R;
+};
+struct Tables RigTable[11][6];
+struct Tables HullTable[11][6];
 
 
-extern int HDTrake[9][10];
+char AMMO[9][4];
+char HDT[9][10];
+char HDTrake[9][10];
+char QUAL[9][5];
+char MT[9][3];
 
 
-extern int QUAL[9][5];
+char *countryname[];
+char *classname[];
+char *directionname[];
+char *qualname[];
+char loadname[];
 
 
-extern int MT[9][3];
+char rangeofshot[];
 
 
-extern int loaded, fired, changed, repaired, buffercount, xlast, ylast;
-extern long lastsync;
-extern int winddir, windspeed, turn, viewrow, viewcol;
-extern int player, nation[5], scroll, game;
-extern int MIGHTYCAPTAIN;
-extern char Outbuf[BUFSIZE], movebuf[10], loadwith[20];
-extern FILE *syncfile;
+char dr[], dc[];
+
+int winddir;
+int windspeed;
+int turn;
+int game;
+int alive;
+int people;
+char hasdriver;
 
 
-char colours();
-char gunsbear();
 char *info();
 char *info();
-char iinitial();
 char *quality();
 char *quality();
-char sterncolor();
-char strend();
-char symbol();
 double arctan();
 double arctan();
+char *saywhat();
+struct ship *closestenemy();
+
+char *calloc();
+char *rindex();
+char *strcpy();
+char *strcat();
+char *strncpy();
+char *getenv();
+char *gets();