Home | History | Annotate | Line # | Download | only in larn
header.h revision 1.5
      1  1.5      cgd /*	$NetBSD: header.h,v 1.5 1995/03/23 08:33:29 cgd Exp $	*/
      2  1.3  mycroft 
      3  1.1      cgd /*	header.h		Larn is copyrighted 1986 by Noah Morgan. */
      4  1.1      cgd 
      5  1.1      cgd #define MAXLEVEL 11
      6  1.1      cgd 	/*	max # levels in the dungeon			*/
      7  1.1      cgd #define MAXVLEVEL 3
      8  1.1      cgd 	/*	max # of levels in the temple of the luran	*/
      9  1.1      cgd #define MAXX 67
     10  1.1      cgd #define MAXY 17
     11  1.1      cgd 
     12  1.1      cgd #define SCORESIZE 10
     13  1.1      cgd 	/*	this is the number of people on a scoreboard max */
     14  1.1      cgd #define MAXPLEVEL 100
     15  1.1      cgd 	/*	maximum player level allowed		*/
     16  1.1      cgd #define MAXMONST 56
     17  1.1      cgd 	/*	maximum # monsters in the dungeon	*/
     18  1.1      cgd #define SPNUM 38
     19  1.1      cgd 	/*	maximum number of spells in existance	*/
     20  1.1      cgd #define MAXSCROLL 28
     21  1.1      cgd 	/*	maximum number of scrolls that are possible	*/
     22  1.1      cgd #define MAXPOTION 35
     23  1.1      cgd 	/*	maximum number of potions that are possible	*/
     24  1.1      cgd #define TIMELIMIT 30000
     25  1.1      cgd 	/*	the maximum number of moves before the game is called */
     26  1.1      cgd #define TAXRATE 1/20
     27  1.1      cgd 	/*	the tax rate for the LRS */
     28  1.1      cgd #define MAXOBJ 93
     29  1.1      cgd 	/* the maximum number of objects   n < MAXOBJ */
     30  1.1      cgd 
     31  1.1      cgd /*	this is the structure definition of the monster data	*/
     32  1.1      cgd struct monst
     33  1.1      cgd 	{
     34  1.1      cgd 	char	*name;
     35  1.1      cgd 	char	level;
     36  1.1      cgd 	short	armorclass;
     37  1.1      cgd 	char	damage;
     38  1.1      cgd 	char	attack;
     39  1.1      cgd 	char	defense;
     40  1.1      cgd 	char	genocided;
     41  1.1      cgd 	char 	intelligence; /* monsters intelligence -- used to choose movement */
     42  1.1      cgd 	short	gold;
     43  1.1      cgd 	short	hitpoints;
     44  1.1      cgd 	unsigned long experience;
     45  1.1      cgd 	};
     46  1.1      cgd 
     47  1.1      cgd /*	this is the structure definition for the items in the dnd store */
     48  1.1      cgd struct _itm
     49  1.1      cgd 	{
     50  1.1      cgd 	short	price;
     51  1.1      cgd 	char	obj;
     52  1.1      cgd 	char	arg;
     53  1.1      cgd 	char	qty;
     54  1.1      cgd 	};
     55  1.1      cgd 
     56  1.1      cgd /*	this is the structure that holds the entire dungeon specifications	*/
     57  1.1      cgd struct cel
     58  1.1      cgd 	{
     59  1.1      cgd 	short	hitp;	/*	monster's hit points	*/
     60  1.1      cgd 	char	mitem;	/*	the monster ID			*/
     61  1.1      cgd 	char	item;	/*	the object's ID			*/
     62  1.1      cgd 	short	iarg;	/*	the object's argument	*/
     63  1.1      cgd 	char	know;	/*	have we been here before*/
     64  1.1      cgd 	};
     65  1.1      cgd 
     66  1.1      cgd /* this is the structure for maintaining & moving the spheres of annihilation */
     67  1.1      cgd struct sphere
     68  1.1      cgd 	{
     69  1.1      cgd 	struct sphere *p;	/* pointer to next structure */
     70  1.1      cgd 	char x,y,lev;		/* location of the sphere */
     71  1.1      cgd 	char dir;			/* direction sphere is going in */
     72  1.1      cgd 	char lifetime;		/* duration of the sphere */
     73  1.1      cgd 	};
     74  1.1      cgd 
     75  1.1      cgd /*	defines for the character attribute array	c[]	*/
     76  1.1      cgd #define STRENGTH 0		/* characters physical strength not due to objects */
     77  1.1      cgd #define INTELLIGENCE 1
     78  1.1      cgd #define WISDOM 2
     79  1.1      cgd #define CONSTITUTION 3
     80  1.1      cgd #define DEXTERITY 4
     81  1.1      cgd #define CHARISMA 5
     82  1.1      cgd #define HPMAX 6
     83  1.1      cgd #define HP 7
     84  1.1      cgd #define GOLD 8
     85  1.1      cgd #define EXPERIENCE 9
     86  1.1      cgd #define LEVEL 10
     87  1.1      cgd #define REGEN 11
     88  1.1      cgd #define WCLASS 12
     89  1.1      cgd #define AC 13
     90  1.1      cgd #define BANKACCOUNT 14
     91  1.1      cgd #define SPELLMAX 15
     92  1.1      cgd #define SPELLS 16
     93  1.1      cgd #define ENERGY 17
     94  1.1      cgd #define ECOUNTER 18
     95  1.1      cgd #define MOREDEFENSES 19
     96  1.1      cgd #define WEAR 20
     97  1.1      cgd #define PROTECTIONTIME 21
     98  1.1      cgd #define WIELD 22
     99  1.1      cgd #define AMULET 23
    100  1.1      cgd #define REGENCOUNTER 24
    101  1.1      cgd #define MOREDAM 25
    102  1.1      cgd #define DEXCOUNT 26
    103  1.1      cgd #define STRCOUNT 27
    104  1.1      cgd #define BLINDCOUNT 28
    105  1.1      cgd #define CAVELEVEL 29
    106  1.1      cgd #define CONFUSE 30
    107  1.1      cgd #define ALTPRO 31
    108  1.1      cgd #define HERO 32
    109  1.1      cgd #define CHARMCOUNT 33
    110  1.1      cgd #define INVISIBILITY 34
    111  1.1      cgd #define CANCELLATION 35
    112  1.1      cgd #define HASTESELF 36
    113  1.1      cgd #define EYEOFLARN 37
    114  1.1      cgd #define AGGRAVATE 38
    115  1.1      cgd #define GLOBE 39
    116  1.1      cgd #define TELEFLAG 40
    117  1.1      cgd #define SLAYING 41
    118  1.1      cgd #define NEGATESPIRIT 42
    119  1.1      cgd #define SCAREMONST 43
    120  1.1      cgd #define AWARENESS 44
    121  1.1      cgd #define HOLDMONST 45
    122  1.1      cgd #define TIMESTOP 46
    123  1.1      cgd #define HASTEMONST 47
    124  1.1      cgd #define CUBEofUNDEAD 48
    125  1.1      cgd #define GIANTSTR 49
    126  1.1      cgd #define FIRERESISTANCE 50
    127  1.1      cgd #define BESSMANN 51
    128  1.1      cgd #define NOTHEFT 52
    129  1.1      cgd #define HARDGAME 53
    130  1.1      cgd #define CPUTIME 54
    131  1.1      cgd #define BYTESIN 55
    132  1.1      cgd #define BYTESOUT 56
    133  1.1      cgd #define MOVESMADE 57
    134  1.1      cgd #define MONSTKILLED 58
    135  1.1      cgd #define SPELLSCAST 59
    136  1.1      cgd #define LANCEDEATH 60
    137  1.1      cgd #define SPIRITPRO 61
    138  1.1      cgd #define UNDEADPRO 62
    139  1.1      cgd #define SHIELD 63
    140  1.1      cgd #define STEALTH 64
    141  1.1      cgd #define ITCHING 65
    142  1.1      cgd #define LAUGHING 66
    143  1.1      cgd #define DRAINSTRENGTH 67
    144  1.1      cgd #define CLUMSINESS 68
    145  1.1      cgd #define INFEEBLEMENT 69
    146  1.1      cgd #define HALFDAM 70
    147  1.1      cgd #define SEEINVISIBLE 71
    148  1.1      cgd #define FILLROOM 72
    149  1.1      cgd #define RANDOMWALK 73
    150  1.1      cgd #define SPHCAST 74	/* nz if an active sphere of annihilation */
    151  1.1      cgd #define WTW 75		/* walk through walls */
    152  1.1      cgd #define STREXTRA 76	/* character strength due to objects or enchantments */
    153  1.1      cgd #define TMP 77	/* misc scratch space */
    154  1.1      cgd #define LIFEPROT 78 /* life protection counter */
    155  1.1      cgd 
    156  1.1      cgd /*	defines for the objects in the game		*/
    157  1.1      cgd 
    158  1.1      cgd #define OALTAR 1
    159  1.1      cgd #define OTHRONE 2
    160  1.1      cgd #define OORB 3
    161  1.1      cgd #define OPIT 4
    162  1.1      cgd #define OSTAIRSUP 5
    163  1.1      cgd #define OELEVATORUP 6
    164  1.1      cgd #define OFOUNTAIN 7
    165  1.1      cgd #define OSTATUE 8
    166  1.1      cgd #define OTELEPORTER 9
    167  1.1      cgd #define OSCHOOL 10
    168  1.1      cgd #define OMIRROR 11
    169  1.1      cgd #define ODNDSTORE 12
    170  1.1      cgd #define OSTAIRSDOWN 13
    171  1.1      cgd #define OELEVATORDOWN 14
    172  1.1      cgd #define OBANK2 15
    173  1.1      cgd #define OBANK 16
    174  1.1      cgd #define ODEADFOUNTAIN 17
    175  1.1      cgd #define OMAXGOLD 70
    176  1.1      cgd #define OGOLDPILE 18
    177  1.1      cgd #define OOPENDOOR 19
    178  1.1      cgd #define OCLOSEDDOOR 20
    179  1.1      cgd #define OWALL 21
    180  1.1      cgd #define OTRAPARROW 66
    181  1.1      cgd #define OTRAPARROWIV 67
    182  1.1      cgd 
    183  1.1      cgd #define OLARNEYE 22
    184  1.1      cgd 
    185  1.1      cgd #define OPLATE 23
    186  1.1      cgd #define OCHAIN 24
    187  1.1      cgd #define OLEATHER 25
    188  1.1      cgd #define ORING 60
    189  1.1      cgd #define OSTUDLEATHER 61
    190  1.1      cgd #define OSPLINT 62
    191  1.1      cgd #define OPLATEARMOR 63
    192  1.1      cgd #define OSSPLATE 64
    193  1.1      cgd #define OSHIELD 68
    194  1.1      cgd #define OELVENCHAIN 92
    195  1.1      cgd 
    196  1.1      cgd #define OSWORDofSLASHING 26
    197  1.1      cgd #define OHAMMER 27
    198  1.1      cgd #define OSWORD 28
    199  1.1      cgd #define O2SWORD 29
    200  1.1      cgd #define OSPEAR 30
    201  1.1      cgd #define ODAGGER 31
    202  1.1      cgd #define OBATTLEAXE 57
    203  1.1      cgd #define OLONGSWORD 58
    204  1.1      cgd #define OFLAIL 59
    205  1.1      cgd #define OLANCE 65
    206  1.1      cgd #define OVORPAL 90
    207  1.1      cgd #define OSLAYER 91
    208  1.1      cgd 
    209  1.1      cgd #define ORINGOFEXTRA 32
    210  1.1      cgd #define OREGENRING 33
    211  1.1      cgd #define OPROTRING 34
    212  1.1      cgd #define OENERGYRING 35
    213  1.1      cgd #define ODEXRING 36
    214  1.1      cgd #define OSTRRING 37
    215  1.1      cgd #define OCLEVERRING 38
    216  1.1      cgd #define ODAMRING 39
    217  1.1      cgd 
    218  1.1      cgd #define OBELT 40
    219  1.1      cgd 
    220  1.1      cgd #define OSCROLL 41
    221  1.1      cgd #define OPOTION 42
    222  1.1      cgd #define OBOOK 43
    223  1.1      cgd #define OCHEST 44
    224  1.1      cgd #define OAMULET 45
    225  1.1      cgd 
    226  1.1      cgd #define OORBOFDRAGON 46
    227  1.1      cgd #define OSPIRITSCARAB 47
    228  1.1      cgd #define OCUBEofUNDEAD 48
    229  1.1      cgd #define ONOTHEFT 49
    230  1.1      cgd 
    231  1.1      cgd #define ODIAMOND 50
    232  1.1      cgd #define ORUBY 51
    233  1.1      cgd #define OEMERALD 52
    234  1.1      cgd #define OSAPPHIRE 53
    235  1.1      cgd 
    236  1.1      cgd #define OENTRANCE 54
    237  1.1      cgd #define OVOLDOWN 55
    238  1.1      cgd #define OVOLUP 56
    239  1.1      cgd #define OHOME 69
    240  1.1      cgd 
    241  1.1      cgd #define OKGOLD 71
    242  1.1      cgd #define ODGOLD 72
    243  1.1      cgd #define OIVDARTRAP 73
    244  1.1      cgd #define ODARTRAP 74
    245  1.1      cgd #define OTRAPDOOR 75
    246  1.1      cgd #define OIVTRAPDOOR 76
    247  1.1      cgd #define OTRADEPOST 77
    248  1.1      cgd #define OIVTELETRAP 78
    249  1.1      cgd #define ODEADTHRONE 79
    250  1.1      cgd #define OANNIHILATION 80		/* sphere of annihilation */
    251  1.1      cgd #define OTHRONE2 81
    252  1.1      cgd #define OLRS 82				/* Larn Revenue Service */
    253  1.1      cgd #define OCOOKIE 83
    254  1.1      cgd #define OURN 84
    255  1.1      cgd #define OBRASSLAMP 85
    256  1.1      cgd #define OHANDofFEAR 86		/* hand of fear */
    257  1.1      cgd #define OSPHTAILSMAN 87		/* tailsman of the sphere */
    258  1.1      cgd #define OWWAND 88			/* wand of wonder */
    259  1.1      cgd #define OPSTAFF 89			/* staff of power */
    260  1.1      cgd /* used up to 92 */
    261  1.1      cgd 
    262  1.1      cgd /*	defines for the monsters as objects		*/
    263  1.1      cgd 
    264  1.1      cgd #define BAT 1
    265  1.1      cgd #define GNOME 2
    266  1.1      cgd #define HOBGOBLIN 3
    267  1.1      cgd #define JACKAL 4
    268  1.1      cgd #define KOBOLD 5
    269  1.1      cgd #define ORC 6
    270  1.1      cgd #define SNAKE 7
    271  1.1      cgd #define CENTIPEDE 8
    272  1.1      cgd #define JACULI 9
    273  1.1      cgd #define TROGLODYTE 10
    274  1.1      cgd #define ANT 11
    275  1.1      cgd #define EYE 12
    276  1.1      cgd #define LEPRECHAUN 13
    277  1.1      cgd #define NYMPH 14
    278  1.1      cgd #define QUASIT 15
    279  1.1      cgd #define RUSTMONSTER 16
    280  1.1      cgd #define ZOMBIE 17
    281  1.1      cgd #define ASSASSINBUG 18
    282  1.1      cgd #define BUGBEAR 19
    283  1.1      cgd #define HELLHOUND 20
    284  1.1      cgd #define ICELIZARD 21
    285  1.1      cgd #define CENTAUR 22
    286  1.1      cgd #define TROLL 23
    287  1.1      cgd #define YETI 24
    288  1.1      cgd #define WHITEDRAGON 25
    289  1.1      cgd #define ELF 26
    290  1.1      cgd #define CUBE 27
    291  1.1      cgd #define METAMORPH 28
    292  1.1      cgd #define VORTEX 29
    293  1.1      cgd #define ZILLER 30
    294  1.1      cgd #define VIOLETFUNGI 31
    295  1.1      cgd #define WRAITH 32
    296  1.1      cgd #define FORVALAKA 33
    297  1.1      cgd #define LAMANOBE 34
    298  1.1      cgd #define OSEQUIP 35
    299  1.1      cgd #define ROTHE 36
    300  1.1      cgd #define XORN 37
    301  1.1      cgd #define VAMPIRE 38
    302  1.1      cgd #define INVISIBLESTALKER 39
    303  1.1      cgd #define POLTERGEIST 40
    304  1.1      cgd #define DISENCHANTRESS 41
    305  1.1      cgd #define SHAMBLINGMOUND 42
    306  1.1      cgd #define YELLOWMOLD 43
    307  1.1      cgd #define UMBERHULK 44
    308  1.1      cgd #define GNOMEKING 45
    309  1.1      cgd #define MIMIC 46
    310  1.1      cgd #define WATERLORD 47
    311  1.1      cgd #define BRONZEDRAGON 48
    312  1.1      cgd #define GREENDRAGON 49
    313  1.1      cgd #define PURPLEWORM 50
    314  1.1      cgd #define XVART 51
    315  1.1      cgd #define SPIRITNAGA 52
    316  1.1      cgd #define SILVERDRAGON 53
    317  1.1      cgd #define PLATINUMDRAGON 54
    318  1.1      cgd #define GREENURCHIN 55
    319  1.1      cgd #define REDDRAGON 56
    320  1.1      cgd #define DEMONLORD 57
    321  1.1      cgd #define DEMONPRINCE 64
    322  1.1      cgd 
    323  1.1      cgd #define NULL 0
    324  1.1      cgd #define BUFBIG	4096			/* size of the output buffer */
    325  1.1      cgd #define MAXIBUF	4096			/* size of the input buffer */
    326  1.1      cgd #define LOGNAMESIZE 40			/* max size of the players name */
    327  1.1      cgd #define PSNAMESIZE 40			/* max size of the process name */
    328  1.1      cgd 
    329  1.1      cgd #ifndef NODEFS
    330  1.1      cgd extern char VERSION,SUBVERSION;
    331  1.1      cgd extern char aborted[],alpha[],beenhere[],boldon,cheat,ckpfile[],ckpflag;
    332  1.1      cgd extern char *class[],course[],diagfile[],fortfile[],helpfile[];
    333  1.1      cgd extern char *inbuffer,is_alpha[],is_digit[];
    334  1.1      cgd extern char item[MAXX][MAXY],iven[],know[MAXX][MAXY],larnlevels[],lastmonst[];
    335  1.1      cgd extern char level,*levelname[],logfile[],loginname[],logname[],*lpbuf,*lpend;
    336  1.1      cgd extern char *lpnt,moved[MAXX][MAXY],mitem[MAXX][MAXY],monstlevel[];
    337  1.1      cgd extern char monstnamelist[],nch[],ndgg[],nlpts[],nomove,nosignal,nowelcome;
    338  1.2  mycroft extern char nplt[],nsw[],*objectname[],objnamelist[],optsfile[];
    339  1.2  mycroft extern char *potionhide[],*potionname[],playerids[],potprob[];
    340  1.1      cgd extern char predostuff,psname[],restorflag,savefilename[],scorefile[],scprob[];
    341  1.2  mycroft extern char screen[MAXX][MAXY],*scrollhide[],*scrollname[],sex,*spelcode[];
    342  1.2  mycroft extern char *speldescript[];
    343  1.1      cgd extern char spelknow[],*spelname[],*spelmes[],spelweird[MAXMONST+8][SPNUM];
    344  1.1      cgd extern char splev[],stealth[MAXX][MAXY],to_lower[],to_upper[],wizard;
    345  1.1      cgd extern short diroffx[],diroffy[],hitflag,hit2flag,hit3flag,hitp[MAXX][MAXY];
    346  1.1      cgd extern short iarg[MAXX][MAXY],ivenarg[],lasthx,lasthy,lastnum,lastpx,lastpy;
    347  1.1      cgd extern short nobeep,oldx,oldy,playerx,playery;
    348  1.1      cgd extern int dayplay,enable_scroll,srcount,yrepcount,userid,wisid,lfd,fd;
    349  1.1      cgd extern long initialtime,outstanding_taxes,skill[],gtime,c[],cbak[];
    350  1.1      cgd extern unsigned long randx;
    351  1.1      cgd extern struct cel *cell;
    352  1.1      cgd extern struct monst monster[];
    353  1.1      cgd extern struct sphere *spheres;
    354  1.1      cgd extern struct _itm itm[];
    355  1.1      cgd 
    356  1.5      cgd char *fortune(),*getenv(),*getlogin(),*lgetw(),*lgetl(),*ctime();
    357  1.1      cgd char *tmcapcnv(),*tgetstr(),*tgoto();
    358  1.1      cgd long paytaxes(),lgetc(),lrint(),time();
    359  1.1      cgd unsigned long readnum();
    360  1.5      cgd void *malloc();
    361  1.1      cgd 
    362  1.1      cgd 	/* macro to create scroll #'s with probability of occurrence */
    363  1.1      cgd #define newscroll() (scprob[rund(81)])
    364  1.1      cgd 	/* macro to return a potion # created with probability of occurrence */
    365  1.1      cgd #define newpotion() (potprob[rund(41)])
    366  1.1      cgd 	/* macro to return the + points on created leather armor */
    367  1.1      cgd #define newleather() (nlpts[rund(c[HARDGAME]?13:15)])
    368  1.1      cgd 	/* macro to return the + points on chain armor */
    369  1.1      cgd #define newchain() (nch[rund(10)])
    370  1.1      cgd 	/* macro to return + points on plate armor */
    371  1.1      cgd #define newplate() (nplt[rund(c[HARDGAME]?4:12)])
    372  1.1      cgd 	/* macro to return + points on new daggers */
    373  1.1      cgd #define newdagger() (ndgg[rund(13)])
    374  1.1      cgd 	/* macro to return + points on new swords */
    375  1.1      cgd #define newsword() (nsw[rund(c[HARDGAME]?6:13)])
    376  1.1      cgd 	/* macro to destroy object at present location */
    377  1.1      cgd #define forget() (item[playerx][playery]=know[playerx][playery]=0)
    378  1.1      cgd 	/* macro to wipe out a monster at a location */
    379  1.1      cgd #define disappear(x,y) (mitem[x][y]=know[x][y]=0)
    380  1.1      cgd 
    381  1.1      cgd #ifdef VT100
    382  1.1      cgd 	/* macro to turn on bold display for the terminal */
    383  1.1      cgd #define setbold() (lprcat(boldon?"\33[1m":"\33[7m"))
    384  1.1      cgd 	/* macro to turn off bold display for the terminal */
    385  1.1      cgd #define resetbold() (lprcat("\33[m"))
    386  1.1      cgd 	/* macro to setup the scrolling region for the terminal */
    387  1.1      cgd #define setscroll() (lprcat("\33[20;24r"))
    388  1.1      cgd 	/* macro to clear the scrolling region for the terminal */
    389  1.1      cgd #define resetscroll() (lprcat("\33[;24r"))
    390  1.1      cgd 	/* macro to clear the screen and home the cursor */
    391  1.1      cgd #define clear() (lprcat("\33[2J\33[f"), cbak[SPELLS]= -50)
    392  1.1      cgd #define cltoeoln() lprcat("\33[K")
    393  1.1      cgd #else VT100
    394  1.1      cgd 	/* defines below are for use in the termcap mode only */
    395  1.1      cgd #define ST_START 1
    396  1.1      cgd #define ST_END   2
    397  1.1      cgd #define BOLD     3
    398  1.1      cgd #define END_BOLD 4
    399  1.1      cgd #define CLEAR    5
    400  1.1      cgd #define CL_LINE  6
    401  1.1      cgd #define CL_DOWN 14
    402  1.1      cgd #define CURSOR  15
    403  1.1      cgd 	/* macro to turn on bold display for the terminal */
    404  1.1      cgd #define setbold() (*lpnt++ = ST_START)
    405  1.1      cgd 	/* macro to turn off bold display for the terminal */
    406  1.1      cgd #define resetbold() (*lpnt++ = ST_END)
    407  1.1      cgd 	/* macro to setup the scrolling region for the terminal */
    408  1.1      cgd #define setscroll() enable_scroll=1
    409  1.1      cgd 	/* macro to clear the scrolling region for the terminal */
    410  1.1      cgd #define resetscroll() enable_scroll=0
    411  1.1      cgd 	/* macro to clear the screen and home the cursor */
    412  1.1      cgd #define clear() (*lpnt++ =CLEAR, cbak[SPELLS]= -50)
    413  1.1      cgd 	/* macro to clear to end of line */
    414  1.1      cgd #define cltoeoln() (*lpnt++ = CL_LINE)
    415  1.1      cgd #endif VT100
    416  1.1      cgd 
    417  1.1      cgd 	/* macro to output one byte to the output buffer */
    418  1.1      cgd #define lprc(ch) ((lpnt>=lpend)?(*lpnt++ =(ch), lflush()):(*lpnt++ =(ch)))
    419  1.1      cgd 
    420  1.1      cgd 	/* macro to seed the random number generator */
    421  1.1      cgd #define srand(x) (randx=x)
    422  1.1      cgd #ifdef MACRORND
    423  1.1      cgd 	/* macros to generate random numbers   1<=rnd(N)<=N   0<=rund(N)<=N-1 */
    424  1.1      cgd #define rnd(x)  ((((randx=randx*1103515245+12345)>>7)%(x))+1)
    425  1.1      cgd #define rund(x) ((((randx=randx*1103515245+12345)>>7)%(x))  )
    426  1.1      cgd #endif MACRORND
    427  1.1      cgd 	/* macros for miscellaneous data conversion */
    428  1.1      cgd #define min(x,y) (((x)>(y))?(y):(x))
    429  1.1      cgd #define max(x,y) (((x)>(y))?(x):(y))
    430  1.1      cgd #define isalpha(x) (is_alpha[x])
    431  1.1      cgd #define isdigit(x) (is_digit[x])
    432  1.1      cgd #define tolower(x) (to_lower[x])
    433  1.1      cgd #define toupper(x) (to_upper[x])
    434  1.1      cgd #define lcc(x) (to_lower[x])
    435  1.1      cgd #define ucc(x) (to_upper[x])
    436  1.1      cgd #endif NODEFS
    437  1.1      cgd 
    438