warp.h revision 1.6 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.1 kamil #ifndef WARPLIB /* ~ and %l only ("~%l" is permissable) */
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