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