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