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