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