home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)externs.h 5.4 (Berkeley) 6/1/90
- */
-
- #include <stdio.h>
- #include <signal.h>
- #include <ctype.h>
- #include <setjmp.h>
- #include "machdep.h"
-
- /* 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 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 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 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 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 {
- char l_name[20];
- int l_uid;
- int l_shipnum;
- int l_gamenum;
- int l_netpoints;
- };
-
- struct BP {
- short turnsent;
- struct ship *toship;
- short mensent;
- };
-
- struct snag {
- short sn_count;
- short sn_turn;
- };
-
- #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;
- };
-
- 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 {
- char winddir; /* 0 */
- char windspeed; /* 2 */
- char windchange; /* 4 */
- char vessels; /* 12 */
- char *name; /* 14 */
- struct ship ship[NSHIP]; /* 16 */
- };
- struct scenario scene[];
- int nscene;
-
- struct shipspecs {
- 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;
- };
- struct shipspecs specs[];
-
- struct scenario *cc; /* the current scenario */
- struct ship *ls; /* &cc->ship[cc->vessels] */
-
- #define SHIP(s) (&cc->ship[s])
- #define foreachship(sp) for ((sp) = cc->ship; (sp) < ls; (sp)++)
-
- 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];
-
- char AMMO[9][4];
- char HDT[9][10];
- char HDTrake[9][10];
- char QUAL[9][5];
- char MT[9][3];
-
- char *countryname[];
- char *classname[];
- char *directionname[];
- char *qualname[];
- char loadname[];
-
- char rangeofshot[];
-
- char dr[], dc[];
-
- int winddir;
- int windspeed;
- int turn;
- int game;
- int alive;
- int people;
- char hasdriver;
-
- char *info();
- char *quality();
- double arctan();
- char *saywhat();
- struct ship *closestenemy();
-
- char *calloc();
- char *rindex();
- char *strcpy();
- char *strcat();
- char *strncpy();
- char *getenv();
- char *gets();
-