|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: *
19: * @(#)externs.h 5.4 (Berkeley) 6/1/90
20: */
21:
22: #include <stdio.h>
23: #include <signal.h>
24: #include <ctype.h>
25: #include <setjmp.h>
26: #include "machdep.h"
27:
28: /* program mode */
29: int mode;
30: jmp_buf restart;
31: #define MODE_PLAYER 1
32: #define MODE_DRIVER 2
33: #define MODE_LOGGER 3
34:
35: /* command line flags */
36: char debug; /* -D */
37: char randomize; /* -x, give first available ship */
38: char longfmt; /* -l, print score in long format */
39: char nobells; /* -b, don't ring bell before Signal */
40:
41: /* other initial modes */
42: char issetuid; /* running setuid */
43:
44: #define die() ((rand() >> 3) % 6 + 1)
45: #define sqr(a) ((a) * (a))
46: #define abs(a) ((a) > 0 ? (a) : -(a))
47: #define min(a,b) ((a) < (b) ? (a) : (b))
48:
49: #define grappled(a) ((a)->file->ngrap)
50: #define fouled(a) ((a)->file->nfoul)
51: #define snagged(a) (grappled(a) + fouled(a))
52:
53: #define grappled2(a, b) ((a)->file->grap[(b)->file->index].sn_count)
54: #define fouled2(a, b) ((a)->file->foul[(b)->file->index].sn_count)
55: #define snagged2(a, b) (grappled2(a, b) + fouled2(a, b))
56:
57: #define Xgrappled2(a, b) ((a)->file->grap[(b)->file->index].sn_turn < turn-1 ? grappled2(a, b) : 0)
58: #define Xfouled2(a, b) ((a)->file->foul[(b)->file->index].sn_turn < turn-1 ? fouled2(a, b) : 0)
59: #define Xsnagged2(a, b) (Xgrappled2(a, b) + Xfouled2(a, b))
60:
61: #define cleangrapple(a, b, c) Cleansnag(a, b, c, 1)
62: #define cleanfoul(a, b, c) Cleansnag(a, b, c, 2)
63: #define cleansnag(a, b, c) Cleansnag(a, b, c, 3)
64:
65: #define sterncolour(sp) ((sp)->file->stern+'0'-((sp)->file->captured?10:0))
66: #define sternrow(sp) ((sp)->file->row + dr[(sp)->file->dir])
67: #define sterncol(sp) ((sp)->file->col + dc[(sp)->file->dir])
68:
69: #define capship(sp) ((sp)->file->captured?(sp)->file->captured:(sp))
70:
71: #define readyname(r) ((r) & R_LOADING ? '*' : ((r) & R_INITIAL ? '!' : ' '))
72:
73: /* loadL and loadR, should match loadname[] */
74: #define L_EMPTY 0 /* should be 0, don't change */
75: #define L_GRAPE 1
76: #define L_CHAIN 2
77: #define L_ROUND 3
78: #define L_DOUBLE 4
79: #define L_EXPLODE 5
80:
81: /*
82: * readyL and readyR, these are bits, except R_EMPTY
83: */
84: #define R_EMPTY 0 /* not loaded and not loading */
85: #define R_LOADING 1 /* loading */
86: #define R_DOUBLE 2 /* loading double */
87: #define R_LOADED 4 /* loaded */
88: #define R_INITIAL 8 /* loaded initial */
89:
90: #define HULL 0
91: #define RIGGING 1
92:
93: #define W_CAPTAIN 1
94: #define W_CAPTURED 2
95: #define W_CLASS 3
96: #define W_CREW 4
97: #define W_DBP 5
98: #define W_DRIFT 6
99: #define W_EXPLODE 7
100: #define W_FILE 8
101: #define W_FOUL 9
102: #define W_GUNL 10
103: #define W_GUNR 11
104: #define W_HULL 12
105: #define W_MOVE 13
106: #define W_OBP 14
107: #define W_PCREW 15
108: #define W_UNFOUL 16
109: #define W_POINTS 17
110: #define W_QUAL 18
111: #define W_UNGRAP 19
112: #define W_RIGG 20
113: #define W_COL 21
114: #define W_DIR 22
115: #define W_ROW 23
116: #define W_SIGNAL 24
117: #define W_SINK 25
118: #define W_STRUCK 26
119: #define W_TA 27
120: #define W_ALIVE 28
121: #define W_TURN 29
122: #define W_WIND 30
123: #define W_FS 31
124: #define W_GRAP 32
125: #define W_RIG1 33
126: #define W_RIG2 34
127: #define W_RIG3 35
128: #define W_RIG4 36
129: #define W_BEGIN 37
130: #define W_END 38
131: #define W_DDEAD 39
132:
133: #define NLOG 10
134: struct logs {
135: char l_name[20];
136: int l_uid;
137: int l_shipnum;
138: int l_gamenum;
139: int l_netpoints;
140: };
141:
142: struct BP {
143: short turnsent;
144: struct ship *toship;
145: short mensent;
146: };
147:
148: struct snag {
149: short sn_count;
150: short sn_turn;
151: };
152:
153: #define NSCENE nscene
154: #define NSHIP 10
155: #define NBP 3
156:
157: #define NNATION 8
158: #define N_A 0
159: #define N_B 1
160: #define N_S 2
161: #define N_F 3
162: #define N_J 4
163: #define N_D 5
164: #define N_K 6
165: #define N_O 7
166:
167: struct File {
168: int index;
169: char captain[20]; /* 0 */
170: short points; /* 20 */
171: char loadL; /* 22 */
172: char loadR; /* 24 */
173: char readyL; /* 26 */
174: char readyR; /* 28 */
175: struct BP OBP[NBP]; /* 30 */
176: struct BP DBP[NBP]; /* 48 */
177: char struck; /* 66 */
178: struct ship *captured; /* 68 */
179: short pcrew; /* 70 */
180: char movebuf[10]; /* 72 */
181: char drift; /* 82 */
182: short nfoul;
183: short ngrap;
184: struct snag foul[NSHIP]; /* 84 */
185: struct snag grap[NSHIP]; /* 124 */
186: char RH; /* 224 */
187: char RG; /* 226 */
188: char RR; /* 228 */
189: char FS; /* 230 */
190: char explode; /* 232 */
191: char sink; /* 234 */
192: char dir;
193: short col;
194: short row;
195: char loadwith;
196: char stern;
197: };
198:
199: struct ship {
200: char *shipname; /* 0 */
201: struct shipspecs *specs; /* 2 */
202: char nationality; /* 4 */
203: short shiprow; /* 6 */
204: short shipcol; /* 8 */
205: char shipdir; /* 10 */
206: struct File *file; /* 12 */
207: };
208:
209: struct scenario {
210: char winddir; /* 0 */
211: char windspeed; /* 2 */
212: char windchange; /* 4 */
213: char vessels; /* 12 */
214: char *name; /* 14 */
215: struct ship ship[NSHIP]; /* 16 */
216: };
217: struct scenario scene[];
218: int nscene;
219:
220: struct shipspecs {
221: char bs;
222: char fs;
223: char ta;
224: short guns;
225: char class;
226: char hull;
227: char qual;
228: char crew1;
229: char crew2;
230: char crew3;
231: char gunL;
232: char gunR;
233: char carL;
234: char carR;
235: char rig1;
236: char rig2;
237: char rig3;
238: char rig4;
239: short pts;
240: };
241: struct shipspecs specs[];
242:
243: struct scenario *cc; /* the current scenario */
244: struct ship *ls; /* &cc->ship[cc->vessels] */
245:
246: #define SHIP(s) (&cc->ship[s])
247: #define foreachship(sp) for ((sp) = cc->ship; (sp) < ls; (sp)++)
248:
249: struct windeffects {
250: char A, B, C, D;
251: };
252: struct windeffects WET[7][6];
253:
254: struct Tables {
255: char H, G, C, R;
256: };
257: struct Tables RigTable[11][6];
258: struct Tables HullTable[11][6];
259:
260: char AMMO[9][4];
261: char HDT[9][10];
262: char HDTrake[9][10];
263: char QUAL[9][5];
264: char MT[9][3];
265:
266: char *countryname[];
267: char *classname[];
268: char *directionname[];
269: char *qualname[];
270: char loadname[];
271:
272: char rangeofshot[];
273:
274: char dr[], dc[];
275:
276: int winddir;
277: int windspeed;
278: int turn;
279: int game;
280: int alive;
281: int people;
282: char hasdriver;
283:
284: char *info();
285: char *quality();
286: double arctan();
287: char *saywhat();
288: struct ship *closestenemy();
289:
290: char *calloc();
291: char *rindex();
292: char *strcpy();
293: char *strcat();
294: char *strncpy();
295: char *getenv();
296: char *gets();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.