|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 12203 (0x2fab)
Types: TextFile
Names: »pm.h«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Pm/Sys3-SysV/pm.h«
/*
** pm.h - all pm source files include this
**
** [pm by Peter Costantinidis, Jr. @ University of California at Davis]
*/
/*
** defines that control things
*/
#define PATTERNS /* let there be patterns!!! */
#define FASTER /* let the monsters move fast (monsters.c) */
#define MAX_UPDATE /* more refreshes */
#if BSD42|BSD43|BSD29
# define BAD_OVERLAY /* bug in curses (overlay.c) */
#endif
#if SYSIII|SYSV
# define ECHOBUG /* bug in curses (ttyctl.c) */
#endif /* if you haven't got this problem, remove this */
#define MYTIMER /* quite reliable */
#define BYTE_SIZE 8 /* # of bits in a byte */
#include <curses.h>
#include <ctype.h>
#include <sys/types.h>
#ifdef MYTIMER
# undef ITIMER_REAL
#endif
/*
** bound defines
*/
#define TOP 1
#define LEFT 0
#define RIGHT 52
/*
** function status returns
*/
#define ERROR -1
#define STOP -2
#define QUIT -3
#define FINE -4
#define BAD -5
/*
** input defines
*/
#define MUP 'k' /* move up */
#define MDOWN 'j' /* move down */
#define MLEFT 'h' /* move left */
#define MRIGHT 'l' /* move right */
#define MSTOP ' ' /* stop movement */
#define MKP_UP '8' /* key pad move up */
#define MKP_DOWN '2' /* key pad move down */
#define MKP_LEFT '4' /* key pad move left */
#define MKP_RIGHT '6' /* key pad move right */
#define MKP_STOP '5' /* key pad stop movement */
#define MQUIT 'q' /* quit game */
#define MREDRAW CTRL(L) /* redraw the screen */
#define MSHELL '!' /* shell escape */
#define MHELP '?' /* give list of commands */
#define MFAST 'f' /* toggle looping in make_move */
#define MQUIET 'b' /* toggle beeping */
#define MPAUSE 'p' /* hang on getchar() */
#define MHUH CTRL(R) /* reprint last message */
#define MNULL '\0'
/*
** special input defines (cheating)
*/
#define MWIZARD CTRL(P) /* request to become wizard */
#define MSTATUS 's' /* print debugging info */
#define MMONS 'm' /* print monster "" "" */
#define MPM '@' /* request for more pm's */
#define MUP_LVL CTRL(U) /* up a level */
#define MDN_LVL CTRL(D) /* down a level */
#define MEAT CTRL(E) /* make them eatable */
#define MMEAN CTRL(M) /* make them non-eatable */
#define MSLOW 'r' /* change null padding */
/*
** wizardly defines
*/
#define W_PASSWD "LuWBlzHTlqQ0g"
#define SALT "Lu"
/*
** various characters on the screen
** the underscores mean the "submissive" ghost associated with *
*/
#define PM '@'
#define HARPO 'H'
#define _HARPO 'h'
#define GROUCHO 'G'
#define _GROUCHO 'g'
#define ZEPPO 'Z'
#define _ZEPPO 'z'
#define CHICO 'C'
#define _CHICO 'c'
#define BLOCK '#'
#define DOT '.'
#define TUNNEL '-'
#define ENERGY '*'
#define EMPTY ' '
#define DOOR '='
/*
** monster attributes
*/
#define FAST 001 /* three different (relative) speeds */
#define MED 002
#define SLOW 004
#define SMART 010 /* three different (relative) smarts */
#define NORMAL 020
#define DUMB 040
/*
** to keep lint quiet
** used primarily for the "Hit return to continue"'s
*/
#ifdef LINT
# define trash(x) _trash_ = x
#else
# define trash(x) x
#endif
/*
** miscellaneous definition
*/
#define BELL '\07'
#define SPEED 15
#define MIN_BAUD 1200 /* must alter bauds[] if this value is
** changed */
#if SYSV|SYSIII
# define EAT_PAUSE 20 /* used when pm is eaten */
#else
# define EAT_PAUSE ((unss) 20) /* used when pm is eaten */
#endif
#define MAX_DIRS 4
#define MAX_LEVEL 13
#define MAX_ENERGY 4
#define MAX_DOTS 208
#define MAX_MONS 4
#define MAX_PMS 4
#define MAX_BLINKS 30 /* number of warning blinks */
#define MAX_CNT 50 /* kind of useless, (see get_move) */
#define TUNN_TIME 2
#define TUNN_ROW 11
#define DOOR_COL 26 /* column where door to monsters is */
#define V_DOT 10
#define V_ENERGY 50
#define ALARM_TIME 10 /* messages get erased every 10 sec */
#define BONUS 10000 /* get a free pm with 10000 score*/
#define CMASK 0177 /* used to strip garbage from what
** inch() returns (when in stand...)
*/
/*
** useful defines to make source more terse
*/
#define when break; case
#define otherwise break; default
#ifdef PATTERNS
# define SEED (uid+level) /* their uid */
#else
# define SEED get_seed() /* their uid */
#endif
/*
** stuff to do with the score routines
*/
#define DEFAULT_SH "/bin/sh" /* default shell */
#define MAX_SCORES 10 /* maximum scores on pm roll */
#define SCR_SIZE (sizeof(score))
#define NAME_SIZE 50 /* biggest name allowed on roll */
#define MODE 0644 /* the mode of the PM_ROLL */
#define MAX_BYTES 4096 /* byte size of user file */
#define MAX_USERS (MAX_BYTES*BYTE_SIZE)/* number of uid's (bit size of
** PM_USER)
*/
/*
** flag stuff for the above
*/
#define FL_DIE 0 /* indicates he died */
#define FL_QUIT 1 /* indicates he quit */
/*
** misc definitions
*/
#define unss unsigned short
/*
** structure definitions
*/
typedef struct
{
int x, y;
} coord;
typedef struct /* monster description */
{
coord mo_pos; /* where it is at */
char mo_inch; /* what it is on top of */
bool mo_run, /* TRUE if it is eatable */
mo_tunn, /* TRUE if it is in a tunnel */
mo_eaten, /* TRUE if eaten */
mo_inside; /* TRUE if inside */
char mo_ch, /* current move */
mo_name; /* name (letter) of monster */
int mo_cnt, /* how many times to do mo_ch */
mo_extunn, /* how long left in tunnel */
mo_attrib; /* monsters characteristics */
} mons;
typedef struct
{
int sc_uid; /* player's uid */
long sc_score; /* player's score */
int sc_level; /* how deep the player went */
int sc_flags; /* misc. info */
char sc_name[NAME_SIZE], /* player's name */
sc_mons; /* monster's name */
} score;
/*
** psuedo functions
*/
/*
** need to strip out the garbage that inch() returns, i only want
** the single character, and i think that it gets messed up when
** that character is in background
*/
#define INCH() (inch() & CMASK)
#define abs(x) ((x) < 0 ? - (x) : (x))
#define MVADDCH(p, c) mvaddch(p.y, p.x, c)
#define TF(x) (x ? "True" : "False")
#define DIST() rnd(4, 15)
#define IS_FRUIT(c) (c == fr_ch)
#define SLOWER() slow(FALSE)
#ifndef CTRL
# define CTRL(ch) ('ch' & '\037')
#endif
#define AT(pos1, pos2) (((pos1)->x == (pos2)->x) && ((pos1)->y == (pos2)->y))
#define OUTOFTUNN(pos) (((pos)->y != 0) && ((pos)->y != 52))
#define beep() putchar(BELL)
#define RN (((seed = (seed * 11109) + 13849) & 0xfff) >> 1)
#define randomize(i) seed = i
#define flush() raw(), noraw()
#define m_erase(mon) mvaddch(mon.mo_pos.y, mon.mo_pos.x, mon.mo_inch)
#ifdef SYSV
# define doclear() refresh(), wclear(cls), wrefresh(cls);
#else
# define doclear() _puts(CL);
#endif
#ifdef ECHOBUG
# define Echo() Necho()
extern void Necho();
#else
# define Echo() echo()
#endif
#if SYSV|SYSIII
# include <fcntl.h>
extern int oldfl, baud;
extern long _tp;
extern struct tbuffer garbage;
# define draw() _tp = times(&garbage), refresh(), delay()
#else
extern int bauds[]; /* this is a character array on SYS3/V */
extern char baud;
extern struct timeb _tp;
# define draw() ftime(&_tp), refresh(), delay()
#endif
#ifdef SYSV
extern WINDOW *cls; /* to clear the screen */
#endif
extern coord pm_pos;
extern int pm_tunn, pm_extunn, d_left, e_left, level, fr_val,
fruit_val[], pms_left, pm_bonus, pm_eaten, pm_run,
mons_eaten, mons_val[], eat_times[], timer, was_wiz, is_wiz,
timeit, quiet, fast, uid, seed, wizard_uid;
extern char *argv0, fruit[], fruit_eaten[], fr_ch, ch, oldch,
newch, moves[], *mesg, **environ, *pm_user, *pm_roll;
#ifdef LINT
extern char _trash_;
#endif
extern long thescore, hi_score, demon, move_cntr, chcnt;
extern mons ghosts[];
extern mons *h, *g, *c, *z;
extern char _putchar(), *crypt(), *strcpy();
extern int getuid();
extern off_t lseek();
/*
** local functions
*/
extern void add_fruit(), aggressive(), chg_lvl(), check_scrs(),
commands(), delay(), die(), directions(),
doadd(), draw_screen(), eat_pm(), init(),
m_eat_pm(),
mons_init(), m_move(), msg(), msg_erase(), msleep(),
mv_mon(), new_screen(), old_screen(), p_barriers(), p_dots(),
p_energizers(), p_fruits(), p_info(), p_monsters(),
p_pm(), p_pms(), p_scores(), place_m(), pm_eat_m(),
pmers(),
print_scrs(), quit_it(), quitit(),
re_msg(), redraw(), scores(), scrcpy(),
shell(), slow(), slowness(), status(), strucpy(),
submissive(), tombstone(), trap(), usage(), warning();
extern int _mv_mon(), can_see(), chk_pm_user(), dir_int(), get_move(),
is_mons(), is_safe(), m_is_safe(),
make_moves(), moveit(), move_to(), pending(), rnd();
extern char gen_mv(), *get_pass(), int_dir(), lturn(), *mons_str(),
opposite(), *punctrl(), rturn(), to_baud(), toletter(),
tunn_look();
extern long get_hi_scr();
extern mons *wh_mons();
#ifdef PATTERNS
extern int get_seed();
#endif