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