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