Home | History | Annotate | Line # | Download | only in warp
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