1 1.2 kamil /* Header: warp.h,v 7.0.1.2 86/12/12 17:08:42 lwall Exp */ 2 1.1 kamil 3 1.2 kamil /* Log: warp.h,v 4 1.1 kamil * Revision 7.0.1.2 86/12/12 17:08:42 lwall 5 1.1 kamil * Baseline for net release. 6 1.6 rillig * 7 1.1 kamil * Revision 7.0.1.1 86/10/16 10:54:26 lwall 8 1.1 kamil * Added Damage. Fixed random bugs. 9 1.6 rillig * 10 1.1 kamil * Revision 7.0 86/10/08 15:17:55 lwall 11 1.1 kamil * Split into separate files. Added amoebas and pirates. 12 1.6 rillig * 13 1.1 kamil */ 14 1.1 kamil 15 1.3 kamil #ifndef WARP_H 16 1.3 kamil #define WARP_H 17 1.3 kamil 18 1.4 christos #include "config.h" /* generated by Configure script */ 19 1.1 kamil 20 1.4 christos #include <sys/types.h> 21 1.4 christos #include <sys/stat.h> 22 1.4 christos #include <sys/param.h> 23 1.4 christos #include <sys/ioctl.h> 24 1.1 kamil 25 1.3 kamil #include <term.h> 26 1.4 christos #include <math.h> 27 1.1 kamil #include <stdio.h> 28 1.1 kamil #include <signal.h> 29 1.4 christos #include <fcntl.h> 30 1.1 kamil #include <ctype.h> 31 1.6 rillig #include <errno.h> 32 1.4 christos #include <stdbool.h> 33 1.3 kamil #include <stdlib.h> 34 1.3 kamil #include <string.h> 35 1.3 kamil #include <unistd.h> 36 1.1 kamil 37 1.1 kamil /* WARPLIB must be readable and writeable by warp, but not by anyone who you 38 1.1 kamil * don't trust. In other words, to set up warp so everyone can play and 39 1.1 kamil * no one can cheat, give warp a uid of its own and make warp setuid to 40 1.1 kamil * that uid. WARPLIB must then NOT be made writeable by the world, 41 1.1 kamil * since no attempt is made to encrypt saved games or anything. 42 1.1 kamil * (It must be readable by the world, however, due to a strangeness in 43 1.1 kamil * access.) 44 1.1 kamil */ 45 1.1 kamil 46 1.5 christos #define SAVEDIR "/var/games/warp" 47 1.1 kamil #define NEWSFILE "warp.news" 48 1.1 kamil #define HELPFILE "warp.doc" 49 1.1 kamil #define LOCKFILE ".warp.lock" 50 1.1 kamil #define LOGFILE "warp.log" 51 1.1 kamil #define SCOREBOARD "warp.top" 52 1.1 kamil #define LSCOREBOARD "warp.lowtop" 53 1.1 kamil #define FSCOREBOARD "warp.funtop" 54 1.1 kamil #define TMPSCOREBOARD "warp.topnew" 55 1.1 kamil #define WARPMACRO "%X/Kbmap.%{TERM}" 56 1.1 kamil 57 1.1 kamil /* warp library */ 58 1.7 andvar #ifndef WARPLIB /* ~ and %l only ("~%l" is permissible) */ 59 1.1 kamil # ifdef PRIVLIB 60 1.1 kamil # define WARPLIB PRIVLIB 61 1.1 kamil # else 62 1.1 kamil # define WARPLIB "/usr/games/warp" 63 1.1 kamil # endif 64 1.1 kamil #endif 65 1.1 kamil 66 1.1 kamil EXT char *warplib; 67 1.1 kamil 68 1.1 kamil #define PERMMAPS 8 /* how many starmaps are permanent */ 69 1.1 kamil #define MAPS 20 /* how many starmaps to choose from */ 70 1.1 kamil /* (MAPS - PERMMAPS is # of half-gone universes) */ 71 1.1 kamil 72 1.1 kamil /* 73 1.1 kamil * Screen size info, minimum screen size is 23x40 (actually 24x80). 74 1.1 kamil * YSIZE and XSIZE should be relatively prime so that a torpedo launched 75 1.1 kamil * at an angle will eventually cover the whole screen. 76 1.1 kamil * To calculate a new position for something: 77 1.1 kamil * new_position = (current_position + delta + ?SIZE00) % ?SIZE 78 1.1 kamil * This allows for negative deltas of up to ?SIZE00 (% doesn't work right 79 1.1 kamil * on negative numbers). 80 1.1 kamil * ?SIZE01, etc. are fudges for efficiency--they already include a delta. 81 1.1 kamil */ 82 1.1 kamil 83 1.1 kamil #define XYSIZE 920 84 1.1 kamil #define XYSIZEx4 3680 85 1.1 kamil 86 1.1 kamil #define YSIZE 23 87 1.1 kamil #define YSIZE00 2300 88 1.1 kamil #define YSIZE01 2301 89 1.1 kamil #define YSIZE99 2299 90 1.1 kamil 91 1.1 kamil #define XSIZE 40 92 1.1 kamil #define XSIZE00 4000 93 1.1 kamil #define XSIZE01 4001 94 1.1 kamil #define XSIZE99 3999 95 1.1 kamil #define XSIZE02 4002 96 1.1 kamil #define XSIZE98 3998 97 1.1 kamil #define XSIZE03 4003 98 1.1 kamil #define XSIZE97 3997 99 1.1 kamil #define XSIZE08 4008 100 1.1 kamil #define XSIZE92 3992 101 1.1 kamil 102 1.1 kamil EXT char amb[YSIZE][XSIZE]; 103 1.1 kamil 104 1.1 kamil #ifdef WHOAMI 105 1.1 kamil # include <whoami.h> 106 1.1 kamil #endif 107 1.1 kamil 108 1.1 kamil #ifndef isalnum 109 1.1 kamil # define isalnum(c) (isalpha(c) || isdigit(c)) 110 1.1 kamil #endif 111 1.1 kamil 112 1.1 kamil #ifdef TERMIO 113 1.1 kamil # include <termio.h> 114 1.3 kamil #elif defined TERMIOS 115 1.3 kamil # include <termios.h> 116 1.1 kamil #else 117 1.1 kamil # include <sgtty.h> 118 1.1 kamil #endif 119 1.1 kamil 120 1.1 kamil #include <sys/timeb.h> 121 1.1 kamil 122 1.1 kamil # include <pwd.h> 123 1.1 kamil 124 1.1 kamil #define BITSPERBYTE 8 125 1.1 kamil #define LBUFLEN 512 /* line buffer length */ 126 1.1 kamil 127 1.1 kamil #ifdef pdp11 128 1.1 kamil # define CBUFLEN 256 /* command buffer length */ 129 1.1 kamil # define PUSHSIZE 128 130 1.1 kamil #else 131 1.1 kamil # define CBUFLEN 512 /* command buffer length */ 132 1.1 kamil # define PUSHSIZE 256 133 1.1 kamil #endif 134 1.1 kamil #ifdef pdp11 135 1.1 kamil # define MAXFILENAME 128 136 1.1 kamil #else 137 1.1 kamil # define MAXFILENAME 512 138 1.1 kamil #endif 139 1.1 kamil #define FINISHCMD 0177 140 1.1 kamil 141 1.1 kamil /* some handy defs */ 142 1.1 kamil 143 1.1 kamil #define Ctl(ch) (ch & 037) 144 1.1 kamil 145 1.1 kamil #define strNE(s1,s2) (strcmp(s1,s2)) 146 1.1 kamil #define strEQ(s1,s2) (!strcmp(s1,s2)) 147 1.1 kamil #define strnNE(s1,s2,l) (strncmp(s1,s2,l)) 148 1.1 kamil #define strnEQ(s1,s2,l) (!strncmp(s1,s2,l)) 149 1.1 kamil 150 1.1 kamil #define sgn(x) ((x) < 0 ? -1 : (x) > 0) 151 1.1 kamil 152 1.1 kamil /* Things we can figure out ourselves */ 153 1.1 kamil 154 1.1 kamil #ifdef SIGPROF 155 1.1 kamil # define BSD42 /* do we have Berkeley 4.2? */ 156 1.1 kamil #endif 157 1.1 kamil 158 1.1 kamil #ifdef FIONREAD 159 1.1 kamil # define PENDING 160 1.1 kamil #else 161 1.1 kamil # ifdef O_NDELAY 162 1.1 kamil # define PENDING 163 1.1 kamil # else 164 1.1 kamil # ifdef RDCHK 165 1.1 kamil # define PENDING 166 1.1 kamil # endif 167 1.1 kamil # endif 168 1.1 kamil #endif 169 1.1 kamil 170 1.1 kamil #define UNLINK(victim) unlink(victim) 171 1.1 kamil 172 1.1 kamil /* Valid substitutions for strings marked with % comment are: 173 1.1 kamil * %H Host name (yours) 174 1.1 kamil * %L Login name (yours) 175 1.1 kamil * %N Full name (yours) 176 1.1 kamil * %O Original working directory (where you ran warp from) 177 1.1 kamil * %X Warp library directory 178 1.1 kamil * %~ Home directory 179 1.1 kamil * %. Directory containing . files 180 1.1 kamil * %$ current process number 181 1.1 kamil * %{name} Environment variable "name". %{name-default} form allowed. 182 1.1 kamil * %"prompt" 183 1.1 kamil * Print prompt and insert what is typed. 184 1.1 kamil * %`command` 185 1.1 kamil * Insert output of command. 186 1.1 kamil * %(test_text=pattern?if_text:else_text) 187 1.1 kamil * Substitute if_text if test_text matches pattern, otherwise 188 1.1 kamil * substitute else_text. Use != for negated match. 189 1.1 kamil * % substitutions are done on test_text, if_text, and else_text. 190 1.1 kamil * (Note: %() only works if CONDSUB defined.) 191 1.1 kamil */ 192 1.1 kamil 193 1.1 kamil /* *** System Dependent Stuff *** */ 194 1.1 kamil 195 1.1 kamil /* NOTE: many of these are defined in the config.h file */ 196 1.1 kamil 197 1.1 kamil #ifndef ROOTID 198 1.1 kamil # define ROOTID 0 /* uid of superuser */ 199 1.1 kamil #endif 200 1.1 kamil 201 1.4 christos # define sigset signal 202 1.4 christos # define sigignore(sig) signal(sig,SIG_IGN) 203 1.1 kamil 204 1.1 kamil #ifndef LOGDIRFIELD 205 1.1 kamil # define LOGDIRFIELD 6 /* Which field (origin 1) is the */ 206 1.1 kamil /* login directory in /etc/passwd? */ 207 1.1 kamil /* (If it is not kept in passwd, */ 208 1.1 kamil /* but getpwnam() returns it, */ 209 1.1 kamil /* define the symbol GETPWENT) */ 210 1.1 kamil #endif 211 1.1 kamil #ifndef GCOSFIELD 212 1.1 kamil # define GCOSFIELD 5 213 1.1 kamil #endif 214 1.1 kamil 215 1.1 kamil /* Undefine any of the following features to save both I and D space */ 216 1.1 kamil /* In general, earlier ones are easier to get along without */ 217 1.1 kamil /* Pdp11's without split I and D may have to undefine them all */ 218 1.1 kamil #define DEBUGGING /* include debugging code */ 219 1.1 kamil #define PUSHBACK /* macros and keymaps using pushback buffer */ 220 1.1 kamil #define CONDSUB /* allow %(cond?text:text) */ 221 1.1 kamil #define BACKTICK /* allow %`command` */ 222 1.1 kamil #define PROMPTTTY /* allow %"prompt" */ 223 1.1 kamil #define GETLOGIN /* use getlogin() routine as backup to environment */ 224 1.1 kamil /* variables USER or LOGNAME */ 225 1.1 kamil #define TILDENAME /* allow ~logname expansion */ 226 1.1 kamil #define GETWD /* use our getwd() instead of piped in pwd */ 227 1.1 kamil #define SETUIDGID /* substitute eaccess() for access() so that rn */ 228 1.1 kamil /* can run setuid or setgid */ 229 1.1 kamil /* if not setuid or setgid, you don't need it */ 230 1.1 kamil #define VERBOSE /* compile in more informative messages */ 231 1.1 kamil #define TERSE /* compile in shorter messages */ 232 1.1 kamil 233 1.1 kamil /* some dependencies among options */ 234 1.1 kamil 235 1.1 kamil #ifndef SETUIDGID 236 1.1 kamil # define eaccess access 237 1.1 kamil #endif 238 1.1 kamil 239 1.1 kamil #ifdef VERBOSE 240 1.1 kamil # ifdef TERSE 241 1.1 kamil # define IF(c) if (c) 242 1.1 kamil # define ELSE else 243 1.1 kamil # else /* !TERSE */ 244 1.1 kamil # define IF(c) 245 1.1 kamil # define ELSE 246 1.1 kamil # endif 247 1.1 kamil #else /* !VERBOSE */ 248 1.1 kamil # ifndef TERSE 249 1.1 kamil # define TERSE 250 1.1 kamil # endif 251 1.1 kamil # define IF(c) "IF" outside of VERBOSE??? 252 1.1 kamil # define ELSE "ELSE" outside of VERBOSE??? 253 1.1 kamil #endif 254 1.1 kamil 255 1.1 kamil #ifdef DEBUGGING 256 1.1 kamil # define assert(ex) {if (!(ex)){fprintf(stderr,"Assertion failed: file %s, line %d\r\n", __FILE__, __LINE__);sig_catcher(0);}} 257 1.1 kamil #else 258 1.1 kamil # define assert(ex) ; 259 1.1 kamil #endif 260 1.1 kamil 261 1.1 kamil #define TCSIZE 512 /* capacity for termcap strings */ 262 1.1 kamil 263 1.1 kamil /* End of Space Conservation Section */ 264 1.1 kamil 265 1.1 kamil /* More System Dependencies */ 266 1.1 kamil 267 1.1 kamil /* preferred shell for use in doshell routine */ 268 1.1 kamil /* ksh or sh would be okay here */ 269 1.1 kamil #ifndef PREFSHELL 270 1.1 kamil # define PREFSHELL "/bin/csh" 271 1.1 kamil #endif 272 1.1 kamil 273 1.1 kamil /* path to fastest starting shell */ 274 1.1 kamil #ifndef SH 275 1.1 kamil # define SH "/bin/sh" 276 1.1 kamil #endif 277 1.1 kamil 278 1.1 kamil /* location of macro file */ 279 1.1 kamil #ifndef WARPMACRO 280 1.1 kamil # ifdef PUSHBACK 281 1.1 kamil # define WARPMACRO "%./.warpmac" 282 1.1 kamil # endif 283 1.1 kamil #endif 284 1.1 kamil 285 1.1 kamil /* location of full name */ 286 1.1 kamil #ifndef FULLNAMEFILE 287 1.1 kamil # ifndef PASSNAMES 288 1.1 kamil # define FULLNAMEFILE "%./.fullname" 289 1.1 kamil # endif 290 1.1 kamil #endif 291 1.1 kamil 292 1.1 kamil /* a motd-like file for warp */ 293 1.1 kamil #ifndef WARPNEWSNAME /* % and ~ */ 294 1.1 kamil # define WARPNEWSNAME "%X/warp.news" 295 1.1 kamil #endif 296 1.1 kamil 297 1.1 kamil /* typedefs */ 298 1.1 kamil 299 1.1 kamil /* *** end of the machine dependent stuff *** */ 300 1.1 kamil 301 1.1 kamil /* GLOBAL THINGS */ 302 1.1 kamil 303 1.1 kamil /* file statistics area */ 304 1.1 kamil 305 1.1 kamil EXT struct stat filestat; 306 1.1 kamil 307 1.1 kamil /* various things of type char */ 308 1.1 kamil 309 1.1 kamil EXT char buf[LBUFLEN+1]; /* general purpose line buffer */ 310 1.1 kamil 311 1.4 christos EXT char *cwd INIT(NULL); /* current working directory */ 312 1.1 kamil 313 1.1 kamil /* switches */ 314 1.1 kamil 315 1.1 kamil #ifdef DEBUGGING 316 1.1 kamil EXT int debug INIT(0); /* -D */ 317 1.6 rillig # define DEB_FILEXP 64 318 1.1 kamil #endif 319 1.1 kamil 320 1.1 kamil #ifdef VERBOSE 321 1.1 kamil # ifdef TERSE 322 1.4 christos EXT bool verbose INIT(true); /* +t */ 323 1.1 kamil # endif 324 1.1 kamil #endif 325 1.1 kamil 326 1.1 kamil /* miscellania */ 327 1.1 kamil 328 1.4 christos EXT FILE *tmpfp INIT(NULL); /* scratch fp */ 329 1.1 kamil 330 1.1 kamil #define NOMARKING 0 331 1.1 kamil #define STANDOUT 1 332 1.1 kamil #define UNDERLINE 2 333 1.1 kamil 334 1.1 kamil /* Factored strings */ 335 1.1 kamil 336 1.1 kamil EXT char nullstr[] INIT(""); 337 1.1 kamil EXT char readerr[] INIT("warp read error"); 338 1.1 kamil EXT char cantopen[] INIT("Can't open %s\r\n"); 339 1.1 kamil 340 1.1 kamil #ifdef VERBOSE 341 1.4 christos #define NOCD "Can't chdir to directory %s\r\n" 342 1.1 kamil #else 343 1.4 christos #define NOCD "Can't find %s\r\n" 344 1.1 kamil #endif 345 1.1 kamil 346 1.4 christos EXT bool justonemoretime INIT(true); 347 1.4 christos EXT bool keepgoing INIT(true); 348 1.1 kamil 349 1.4 christos EXT bool friendspec INIT(false); 350 1.4 christos EXT bool piratespec INIT(false); 351 1.4 christos EXT bool amoebaspec INIT(false); 352 1.4 christos EXT bool starspec INIT(false); 353 1.4 christos EXT bool klingspec INIT(false); 354 1.4 christos EXT bool apolspec INIT(false); 355 1.4 christos EXT bool crushspec INIT(false); 356 1.4 christos EXT bool romspec INIT(false); 357 1.4 christos EXT bool prespec INIT(false); 358 1.4 christos EXT bool tholspec INIT(false); 359 1.4 christos EXT bool gornspec INIT(false); 360 1.4 christos EXT bool beginner INIT(false); 361 1.4 christos EXT bool massacre INIT(false); 362 1.4 christos EXT bool lowspeed INIT(false); 363 1.4 christos EXT bool debugging INIT(false); 364 1.4 christos EXT bool didkill INIT(false); 365 1.4 christos EXT bool experimenting INIT(false); 366 1.4 christos EXT bool scorespec INIT(false); 367 1.4 christos EXT bool metakey INIT(false); 368 1.1 kamil 369 1.1 kamil EXT bool bombed_out; 370 1.4 christos EXT int panic INIT(0); 371 1.1 kamil EXT bool madgorns; 372 1.1 kamil 373 1.1 kamil EXT int madfriends; 374 1.1 kamil 375 1.1 kamil EXT int inumpirates; 376 1.1 kamil EXT int numpirates; 377 1.1 kamil EXT int inumfriends; 378 1.1 kamil EXT int numfriends; 379 1.1 kamil EXT int inumamoebas; 380 1.1 kamil EXT int numamoebas; 381 1.1 kamil EXT int inumstars; 382 1.1 kamil EXT int numstars; 383 1.1 kamil EXT int inumenemies; 384 1.1 kamil EXT int numenemies; 385 1.1 kamil EXT int inumroms; 386 1.1 kamil EXT int inumthols; 387 1.1 kamil EXT int inumapollos; 388 1.1 kamil EXT int numapollos; 389 1.1 kamil EXT int apolloflag; 390 1.1 kamil EXT int inumcrushes; 391 1.1 kamil EXT int numcrushes; 392 1.1 kamil EXT int inumgorns; 393 1.1 kamil EXT int numgorns; 394 1.1 kamil EXT int deados; 395 1.1 kamil EXT int deadmudds; 396 1.1 kamil EXT int smarts; 397 1.1 kamil EXT int ismarts INIT(0); 398 1.1 kamil EXT int numos INIT(0); 399 1.1 kamil EXT int numxes INIT(0); 400 1.1 kamil EXT int ient; 401 1.1 kamil EXT int numents; 402 1.1 kamil EXT int ibase; 403 1.1 kamil EXT int numbases; 404 1.1 kamil EXT int inuminhab; 405 1.1 kamil EXT int numinhab; 406 1.1 kamil EXT int wave; 407 1.1 kamil EXT int cumsmarts; 408 1.1 kamil EXT int prescene INIT(-1); 409 1.1 kamil EXT int scandist; 410 1.1 kamil EXT int antibase; 411 1.1 kamil EXT int sm35; 412 1.1 kamil EXT int sm45; 413 1.1 kamil EXT int sm50; 414 1.1 kamil EXT int sm55; 415 1.1 kamil EXT int sm80; 416 1.1 kamil EXT int sm95; 417 1.1 kamil EXT int entmax; 418 1.1 kamil EXT int basemax; 419 1.1 kamil EXT int enemshields; 420 1.1 kamil EXT int super; 421 1.1 kamil EXT int whenok; 422 1.1 kamil EXT int yamblast; 423 1.1 kamil EXT int xamblast; 424 1.1 kamil EXT int ambsize; 425 1.1 kamil 426 1.4 christos EXT char spbuf[1024]; 427 1.3 kamil 428 1.3 kamil #endif 429