billr@saab.CNA.TEK.COM (Bill Randle) (07/14/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 10, Issue 95
Archive-name: nethack3p9/Part50
Supersedes: NetHack3: Volume 7, Issue 56-93
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 50 (of 56)."
# Contents: amiga/amiunix.c auxil/castle.des include/system.h
# others/atarifnt.uue others/ovlmgr.uu src/rumors.c src/timeout.c
# src/worm.c
# Wrapped by billr@saab on Wed Jul 11 17:12:11 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'amiga/amiunix.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'amiga/amiunix.c'\"
else
echo shar: Extracting \"'amiga/amiunix.c'\" \(3500 characters\)
sed "s/^X//" >'amiga/amiunix.c' <<'END_OF_FILE'
X/* SCCS Id: @(#)amiunix.c 3.0 89/05/02
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X
X/* This file collects some Unix dependencies; pager.c contains some more */
X
X/*
X * The time is used for:
X * - seed for rand()
X * - year on tombstone and yymmdd in record file
X * - phase of the moon (various monsters react to NEW_MOON or FULL_MOON)
X * - night and midnight (the undead are dangerous at midnight)
X * - determination of what files are "very old"
X */
X
X/* block some unused #defines to avoid overloading some cpp's */
X#define MONDATA_H
X#include "hack.h" /* mainly for index() which depends on BSD */
X
X#define NOSTAT
X
X#ifndef NOSTAT
X#include <stat.h>
Xstatic struct stat buf, hbuf;
X#endif
X
Xextern time_t time();
X
Xstatic struct tm *NDECL(getlt);
X
Xvoid
Xsetrandom()
X{
X (void) Srand((unsigned int) time ((time_t *) 0));
X}
X
Xstatic struct tm *
Xgetlt()
X{
X time_t date;
X struct tm *localtime();
X
X (void) time((long *)(&date));
X return(localtime(&date));
X}
X
Xint
Xgetyear()
X{
X return(1900 + getlt()->tm_year);
X}
X
Xchar *
Xgetdate()
X{
X#ifdef LINT /* static char datestr[7]; */
X char datestr[7];
X#else
X static char datestr[7];
X#endif
X register struct tm *lt = getlt();
X
X Sprintf(datestr, "%2d%2d%2d",
X lt->tm_year, lt->tm_mon + 1, lt->tm_mday);
X if(datestr[2] == ' ') datestr[2] = '0';
X if(datestr[4] == ' ') datestr[4] = '0';
X return(datestr);
X}
X
Xint
Xphase_of_the_moon() /* 0-7, with 0: new, 4: full */
X{ /* moon period: 29.5306 days */
X /* year: 365.2422 days */
X register struct tm *lt = getlt();
X register int epact, diy, golden;
X
X diy = lt->tm_yday;
X golden = (lt->tm_year % 19) + 1;
X epact = (11 * golden + 18) % 30;
X if ((epact == 25 && golden > 11) || epact == 24)
X epact++;
X
X return( (((((diy + epact) * 6) + 11) % 177) / 22) & 7 );
X}
X
Xint
Xnight()
X{
X register int hour = getlt()->tm_hour;
X
X return(hour < 6 || hour > 21);
X}
X
Xint
Xmidnight()
X{
X return(getlt()->tm_hour == 0);
X}
X
Xvoid
Xgethdate(name)
Xchar *name;
X{
X#ifndef NOSTAT
X/* old version - for people short of space */
X/*
X/* register char *np;
X/* if(stat(name, &hbuf))
X/* error("Cannot get status of %s.",
X/* (np = rindex(name, '/')) ? np+1 : name);
X/*
X/* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */
X
X/*
X * The problem with #include <sys/param.h> is that this include file
X * does not exist on all systems, and moreover, that it sometimes includes
X * <sys/types.h> again, so that the compiler sees these typedefs twice.
X */
X#define MAXPATHLEN 80
X
Xextern char PATH[]; /* In amigaDOS.c */
X
Xregister char *np, *path;
Xchar filename[MAXPATHLEN+1];
X
X if (index(name, '/') != NULL || (path = PATH) == NULL)
X path = "";
X
X for (;;) {
X if ((np = index(path, ':')) == NULL)
X np = path + strlen(path); /* point to end str */
X if (np - path <= 1) /* %% */
X (void) strcpy(filename, name);
X else {
X (void) strncpy(filename, path, np - path);
X filename[np - path] = '/';
X (void) strcpy(filename + (np - path) + 1, name);
X }
X if (stat(filename, &hbuf) == 0)
X return;
X if (*np == '\0')
X path = "";
X path = np + 1;
X }
X error("Cannot get status of %s.", (np = rindex(name, '/')) ? np+1 : name);
X#endif
X}
X
Xint
Xuptodate(fd)
X{
X return(1);
X}
X
Xvoid
Xregularize(s) /* normalize file name - we don't like :'s or /'s */
Xregister char *s;
X{
X register char *lp;
X
X while((lp = index(s, ':')) || (lp = index(s, '/')))
X *lp = '_';
X}
END_OF_FILE
if test 3500 -ne `wc -c <'amiga/amiunix.c'`; then
echo shar: \"'amiga/amiunix.c'\" unpacked with wrong size!
fi
# end of 'amiga/amiunix.c'
fi
if test -f 'auxil/castle.des' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'auxil/castle.des'\"
else
echo shar: Extracting \"'auxil/castle.des'\" \(7219 characters\)
sed "s/^X//" >'auxil/castle.des' <<'END_OF_FILE'
X# SCCS Id: @(#)castle.des 3.0 89/07/02
X# Copyright (c) 1989 by Jean-Christophe Collet
X# NetHack may be freely redistributed. See license for details.
X#
X# This is the stronghold level :
X# there are several ways to enter it :
X# - opening the drawbridge (wand of opening, knock spell, playing
X# the appropriate tune)
X#
X# - enter via the back entry (this suppose a ring of levitation, boots
X# of water walking, etc.)
X#
X# Note : If you don't play the right tune, you get indications like in the
X# MasterMind game...
X#
X# To motivate the player : there are 4 storerooms (armors, weapons, food and
X# gems) and a wand of wishing in one of the 4 towers...
X
XMAZE:"castle"
XGEOMETRY:center,center
XMAP
X}}}}}}}}} }}}}}}}}}
X}-------}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}-------}
X}| |-----------------------------------------------| |}
X}| + + |}
X}-------------------------------+-----------------------------}
X}}}}}}| | + | S S |}}}}}}
X }| | | | | | |}
X }| ------------ ---------S---------}
X }| { + + \ S +
X }| ------------ ---------S---------}
X }| | | | | | |}
X}}}}}}| | + | S S |}}}}}}
X}-------------------------------+-----------------------------}
X}| + + |}
X}| |-----------------------------------------------| |}
X}-------}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}-------}
X}}}}}}}}} }}}}}}}}}
XENDMAP
X# Random registers initialisation
XRANDOM_OBJECTS:'[',')','*','%'
XRANDOM_PLACES:(04,02),(58,02),(04,14),(58,14)
XRANDOM_MONSTERS:'L','N','E','H','M','O','R','T','X','Z'
X# Doors
XDOOR:closed,(07,03)
XDOOR:closed,(55,03)
XDOOR:locked,(32,04)
XDOOR:locked,(26,05)
XDOOR:locked,(46,05)
XDOOR:locked,(48,05)
XDOOR:locked,(47,07)
XDOOR:closed,(15,08)
XDOOR:closed,(26,08)
XDOOR:locked,(38,08)
XDOOR:locked,(56,08)
XDOOR:locked,(47,09)
XDOOR:locked,(26,11)
XDOOR:locked,(46,11)
XDOOR:locked,(48,11)
XDOOR:locked,(32,12)
XDOOR:closed,(07,13)
XDOOR:closed,(55,13)
X# The drawbridge
XDRAWBRIDGE:(05,08),east,closed
X# Storeroom number 1
XOBJECT:object[0],random,(39,05)
XOBJECT:object[0],random,(40,05)
XOBJECT:object[0],random,(41,05)
XOBJECT:object[0],random,(42,05)
XOBJECT:object[0],random,(43,05)
XOBJECT:object[0],random,(44,05)
XOBJECT:object[0],random,(45,05)
XOBJECT:object[0],random,(39,06)
XOBJECT:object[0],random,(40,06)
XOBJECT:object[0],random,(41,06)
XOBJECT:object[0],random,(42,06)
XOBJECT:object[0],random,(43,06)
XOBJECT:object[0],random,(44,06)
XOBJECT:object[0],random,(45,06)
X# Storeroom number 2
XOBJECT:object[1],random,(49,05)
XOBJECT:object[1],random,(50,05)
XOBJECT:object[1],random,(51,05)
XOBJECT:object[1],random,(52,05)
XOBJECT:object[1],random,(53,05)
XOBJECT:object[1],random,(54,05)
XOBJECT:object[1],random,(55,05)
XOBJECT:object[1],random,(49,06)
XOBJECT:object[1],random,(50,06)
XOBJECT:object[1],random,(51,06)
XOBJECT:object[1],random,(52,06)
XOBJECT:object[1],random,(53,06)
XOBJECT:object[1],random,(54,06)
XOBJECT:object[1],random,(55,06)
X# Storeroom number 3
XOBJECT:object[2],random,(39,10)
XOBJECT:object[2],random,(40,10)
XOBJECT:object[2],random,(41,10)
XOBJECT:object[2],random,(42,10)
XOBJECT:object[2],random,(43,10)
XOBJECT:object[2],random,(44,10)
XOBJECT:object[2],random,(45,10)
XOBJECT:object[2],random,(39,11)
XOBJECT:object[2],random,(40,11)
XOBJECT:object[2],random,(41,11)
XOBJECT:object[2],random,(42,11)
XOBJECT:object[2],random,(43,11)
XOBJECT:object[2],random,(44,11)
XOBJECT:object[2],random,(45,11)
X# Storeroom number 4
XOBJECT:object[3],random,(49,10)
XOBJECT:object[3],random,(50,10)
XOBJECT:object[3],random,(51,10)
XOBJECT:object[3],random,(52,10)
XOBJECT:object[3],random,(53,10)
XOBJECT:object[3],random,(54,10)
XOBJECT:object[3],random,(55,10)
XOBJECT:object[3],random,(49,11)
XOBJECT:object[3],random,(50,11)
XOBJECT:object[3],random,(51,11)
XOBJECT:object[3],random,(52,11)
XOBJECT:object[3],random,(53,11)
XOBJECT:object[3],random,(54,11)
XOBJECT:object[3],random,(55,11)
X# THE WAND OF WISHING in 1 of the 4 towers
XOBJECT:'/',"wishing",place[0]
X# The treasure of the lord
XOBJECT:'(',"chest",(37,08)
X# Traps
XTRAP:"trapdoor",(40,08)
XTRAP:"trapdoor",(44,08)
XTRAP:"trapdoor",(48,08)
XTRAP:"trapdoor",(52,08)
XTRAP:"trapdoor",(55,08)
X# Soldiers guarding the entry hall
XMONSTER:'@',"soldier",(08,06)
XMONSTER:'@',"soldier",(09,05)
XMONSTER:'@',"soldier",(11,05)
XMONSTER:'@',"soldier",(12,06)
XMONSTER:'@',"soldier",(08,10)
XMONSTER:'@',"soldier",(09,11)
XMONSTER:'@',"soldier",(11,11)
XMONSTER:'@',"soldier",(12,10)
XMONSTER:'@',"lieutenant",(09,08)
X# Soldiers guarding the towers
XMONSTER:'@',"soldier",(03,02)
XMONSTER:'@',"soldier",(05,02)
XMONSTER:'@',"soldier",(57,02)
XMONSTER:'@',"soldier",(59,02)
XMONSTER:'@',"soldier",(03,14)
XMONSTER:'@',"soldier",(05,14)
XMONSTER:'@',"soldier",(57,14)
XMONSTER:'@',"soldier",(59,14)
X# The four dragons that are guarding the storerooms
XMONSTER:'D',random,(47,05)
XMONSTER:'D',random,(47,06)
XMONSTER:'D',random,(47,10)
XMONSTER:'D',random,(47,11)
X# Eels in the moat
XMONSTER:';',"giant eel",(05,07)
XMONSTER:';',"giant eel",(05,09)
XMONSTER:';',"giant eel",(57,07)
XMONSTER:';',"giant eel",(57,09)
X# The throne room and the court monsters
XMONSTER:monster[0],random,(27,05)
XMONSTER:monster[1],random,(30,05)
XMONSTER:monster[2],random,(33,05)
XMONSTER:monster[3],random,(36,05)
XMONSTER:monster[4],random,(28,06)
XMONSTER:monster[5],random,(31,06)
XMONSTER:monster[6],random,(34,06)
XMONSTER:monster[7],random,(37,06)
XMONSTER:monster[8],random,(27,07)
XMONSTER:monster[9],random,(30,07)
XMONSTER:monster[0],random,(33,07)
XMONSTER:monster[1],random,(36,07)
XMONSTER:monster[2],random,(28,08)
XMONSTER:monster[3],random,(31,08)
XMONSTER:monster[4],random,(34,08)
XMONSTER:monster[5],random,(27,09)
XMONSTER:monster[6],random,(30,09)
XMONSTER:monster[7],random,(33,09)
XMONSTER:monster[8],random,(36,09)
XMONSTER:monster[9],random,(28,10)
XMONSTER:monster[0],random,(31,10)
XMONSTER:monster[1],random,(34,10)
XMONSTER:monster[2],random,(37,10)
XMONSTER:monster[3],random,(27,11)
XMONSTER:monster[4],random,(30,11)
XMONSTER:monster[5],random,(33,11)
XMONSTER:monster[6],random,(36,11)
X# MazeWalks
XMAZEWALK:(00,10),west
XMAZEWALK:(62,06),east
X# Non diggable walls
XNON_DIGGABLE:(00,00,62,16)
X# Subrooms:
X# Throne room
XREGION:(27,05,37,11),lit,"throne"
X# Antechamber
XREGION:(07,05,14,11),lit,"ordinary"
X# Storerooms
XREGION:(39,05,45,06),lit,"ordinary"
XREGION:(39,10,45,11),lit,"ordinary"
XREGION:(49,05,55,06),lit,"ordinary"
XREGION:(49,10,55,11),lit,"ordinary"
X# Corners
XREGION:(02,02,06,03),lit,"ordinary"
XREGION:(56,02,60,03),lit,"ordinary"
XREGION:(02,13,06,14),lit,"ordinary"
XREGION:(56,13,60,14),lit,"ordinary"
X# Barracks
XREGION:(16,05,25,06),lit,"ordinary"
XREGION:(16,10,25,11),lit,"ordinary"
X# Outside
XREGION:(00,05,05,11),lit,"ordinary"
XREGION:(57,05,62,11),lit,"ordinary"
X# Hallways
X#REGION:(08,03,54,03),unlit,"ordinary"
X#REGION:(08,13,54,13),unlit,"ordinary"
X#REGION:(16,08,25,08),unlit,"ordinary"
X#REGION:(39,08,55,08),unlit,"ordinary"
END_OF_FILE
if test 7219 -ne `wc -c <'auxil/castle.des'`; then
echo shar: \"'auxil/castle.des'\" unpacked with wrong size!
fi
# end of 'auxil/castle.des'
fi
if test -f 'include/system.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/system.h'\"
else
echo shar: Extracting \"'include/system.h'\" \(7724 characters\)
sed "s/^X//" >'include/system.h' <<'END_OF_FILE'
X/* SCCS Id: @(#)system.h 3.0 88/10/10 */
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X
X#ifndef SYSTEM_H
X#define SYSTEM_H
X
X#define E extern
X
X/* some old <sys/types.h> may not define off_t and size_t; if your system is
X * one of these, define them by hand below
X */
X#ifndef VAXC
X#if !defined(THINKC4) && !defined(AMIGA) && !defined(MACOS)
X# include <sys/types.h>
X#endif
X#else /*VAXC*/
X#include <types.h>
X#endif /*VAXC*/
X
X#if defined(TOS) && defined(__GNUC__) && !defined(_SIZE_T)
X# define _SIZE_T
X#endif
X
X#if defined(MSDOS) || ((defined(AMIGA) || defined(MACOS)) && !defined(THINKC4))
X# ifndef _SIZE_T
X# define _SIZE_T
X# if !(defined(MSDOS) && defined(_SIZE_T_DEFINED)) /* MSC 5.1 */
Xtypedef unsigned int size_t;
X# endif
X# endif
X#endif
X
X#ifdef ULTRIX
X/* The Ultrix v3.0 <sys/types.h> seems to be very wrong. */
X# define time_t long
X#endif
X#if defined(ULTRIX) || defined(VMS)
X# define off_t long
X#endif
X#if defined(AZTEC) || defined(THINKC4) || (defined(MSDOS) && defined(__TURBOC__))
Xtypedef long off_t;
X#endif
X
X
X/* You may want to change this to fit your system, as this is almost
X * impossible to get right automatically.
X * This is the type of signal handling functions.
X */
X#if defined(__STDC__) || defined(ULTRIX)
X /* also SVR3 and later, Sun4.0 and later */
X# define SIG_RET_TYPE void (*)()
X#else
X /* BSD, SIII, SVR2 and earlier, Sun3.5 and earlier */
X# define SIG_RET_TYPE int (*)()
X#endif
X
X#if defined(BSD) || defined(ULTRIX) || defined(RANDOM)
XE long random();
XE void FDECL(srandom, (unsigned int));
X#else
XE long lrand48();
XE void srand48();
X#endif /* BSD || ULTRIX || RANDOM */
X
X#if !defined(BSD) || defined(ultrix)
X /* real BSD wants all these to return int */
X# ifndef MSDOS
XE void FDECL(exit, (int));
X# endif /* MSDOS */
XE void FDECL(free, (genericptr_t));
X# if defined(AMIGA) && !defined(AZTEC_50)
XE int FDECL(perror, (const char *));
X# else
X# ifndef MACOS
XE void FDECL(perror, (const char *));
X# endif
X# endif
X#endif
X#if defined(BSD) || defined(ULTRIX) || (defined(MACOS) && !defined(THINKC4))
XE int qsort();
X#else
X# ifndef LATTICE
XE void FDECL(qsort, (genericptr_t,size_t,size_t,int(*)(genericptr_t,genericptr_t)));
X# endif
X#endif
X
X#ifndef AZTEC_50 /* Already defined in include files */
X#ifdef ULTRIX
XE long FDECL(lseek, (int,off_t,int));
X /* Ultrix 3.0 man page mistakenly says it returns an int. */
XE int FDECL(write, (int,char *,int));
X#else
XE long FDECL(lseek, (int,long,int));
XE int FDECL(write, (int,genericptr_t,unsigned));
X#endif /* ULTRIX */
XE int FDECL(unlink, (const char *));
X
X#ifdef MSDOS
XE int FDECL(close, (int));
XE int FDECL(read, (int,genericptr_t,unsigned int));
XE int FDECL(open, (const char *,int,...));
XE int FDECL(dup2, (int, int));
XE int FDECL(setmode, (int,int));
XE int FDECL(kbhit, (void));
XE int FDECL(chdir, (char *));
XE char *FDECL(getcwd, (char *,int));
X#endif
X#endif /* AZTEC_50 */
X
X#ifdef TOS
XE int FDECL(creat, (const char *, int));
X#endif
X
X/* both old & new versions of Ultrix want these, but real BSD does not */
X#ifdef ultrix
XE void abort();
XE void bcopy();
X#endif
X#ifdef MSDOS
XE void FDECL(abort, (void));
XE void FDECL(_exit, (int));
XE int FDECL(system, (const char *));
X#endif
X#ifdef HPUX
XE long FDECL(fork, (void));
X#endif
X
X#ifdef SYSV
XE char *memcpy();
X#endif
X#ifdef HPUX
XE void *FDECL(memcpy, (char *,char *,int));
XE int FDECL(memcmp, (char *,char *,int));
XE void *FDECL(memset, (char*,int,int));
X#endif
X#ifdef MSDOS
X# if defined(TOS) && defined(__GNUC__)
XE int FDECL(memcmp, (const char *,const char *,size_t));
XE char *FDECL(memcpy, (char *,const char *,size_t));
XE char *FDECL(memset, (char*,int,size_t));
X# else
X# ifndef LATTICE
X# ifdef MSC
Xvoid * _CDECL memcpy(void *, const void *, size_t);
Xvoid * _CDECL memset(void *, int, size_t);
X# else
XE int FDECL(memcmp, (char *,char *,unsigned int));
XE char *FDECL(memcpy, (char *,char *,unsigned int));
XE char *FDECL(memset, (char*,int,int));
X# endif
X# endif
X# endif /* TOS */
X#endif
X
X#if defined(BSD) && defined(ultrix) /* i.e., old versions of Ultrix */
XE void sleep();
X#endif
X#if defined(ULTRIX) || defined(SYSV)
XE unsigned sleep();
X#endif
X#if defined(HPUX)
XE unsigned int FDECL(sleep, (unsigned int));
X#endif
X
XE char *FDECL(getenv, (const char *));
XE char *getlogin();
X#ifdef HPUX
XE long FDECL(getuid, (void));
XE long FDECL(getgid, (void));
XE long FDECL(getpid, (void));
X#else
XE int FDECL(getpid, (void));
X#endif
X
X/*# string(s).h #*/
X
XE char *FDECL(strcpy, (char *,const char *));
XE char *FDECL(strncpy, (char *,const char *,size_t));
XE char *FDECL(strcat, (char *,const char *));
XE char *FDECL(strncat, (char *,const char *,size_t));
X
X#if defined(SYSV) || defined(MSDOS) || defined(AMIGA) || defined(THINK_C) || defined(VMS) || defined(HPUX)
XE char *FDECL(strchr, (const char *,int));
XE char *FDECL(strrchr, (const char *,int));
X#else /* BSD */
XE char *FDECL(index, (const char *,int));
XE char *FDECL(rindex, (const char *,int));
X#endif
X
X
XE int FDECL(strcmp, (const char *,const char *));
XE int FDECL(strncmp, (const char *,const char *,size_t));
X#ifdef MSDOS
XE size_t FDECL(strlen, (const char *));
X#else
X# ifdef HPUX
XE unsigned int FDECL(strlen, (char *));
X# else
X# ifdef THINKC4
XE size_t FDECL(strlen, (char *));
X# else
XE int FDECL(strlen, (char *));
X# endif /* THINKC4 */
X# endif /* HPUX */
X#endif /* MSDOS */
X
X/* Old varieties of BSD have char *sprintf().
X * Newer varieties of BSD have int sprintf() but allow for the old char *.
X * Several varieties of SYSV and PC systems also have int sprintf().
X * If your system doesn't agree with this breakdown, you may want to change
X * this declaration, especially if your machine treats the types differently.
X */
X#if (defined(BSD) || defined(ULTRIX)) && !defined(DGUX) && !defined(NeXT)
X# define OLD_SPRINTF
XE char *sprintf();
X#else
X# if !defined(TOS) && !defined(AZTEC_50) /* problem with prototype mismatches */
XE int FDECL(sprintf, (char *,const char *,...));
X# endif
X#endif
X
X#ifdef NEED_VARARGS
X# if defined(USE_STDARG) || defined(USE_VARARGS)
XE int FDECL(vsprintf, (char *, const char *, va_list));
XE int FDECL(vprintf, (const char *, va_list));
X# else
X# define vprintf printf
X# define vsprintf sprintf
X# define vpline pline
X# endif
X#endif /* NEED_VARARGS */
X
X#define Sprintf (void) sprintf
X#define Strcat (void) strcat
X#define Strcpy (void) strcpy
X
X#if defined(MACOS) && defined(CUSTOM_IO)
X# undef printf
X# undef puts
X# undef putchar
X# undef putc
X# define printf (void) mprintf
X# define puts mputs
X# define putchar mputc
X# define putc mputc
X# define Printf (void) mprintf
X#else
X# define Printf (void) printf
X#endif
X
X#ifdef NEED_VARARGS
X# define Vprintf (void) vprintf
X# define Vsprintf (void) vsprintf
X#endif
X
X#ifdef MSDOS
XE int FDECL(tgetent, (const char *,const char *));
XE int FDECL(tgetnum, (const char *));
XE int FDECL(tgetflag, (const char *));
XE char *FDECL(tgetstr, (const char *,char **));
XE char *FDECL(tgoto, (const char *,int,int));
XE void FDECL(tputs, (const char *,int,int (*)()));
X#else
XE int FDECL(tgetent, (char *,char *));
XE int FDECL(tgetnum, (char *));
XE int FDECL(tgetflag, (char *));
XE char *FDECL(tgetstr, (char *,char **));
XE char *FDECL(tgoto, (char *,int,int));
XE void FDECL(tputs, (char *,int,int (*)()));
X#endif
X
X#ifndef MACOS
XE genericptr_t FDECL(malloc, (size_t));
X#endif
X
X/* time functions */
X
X#ifndef MACOS
X# ifndef LATTICE
XE struct tm *FDECL(localtime, (const time_t *));
X# endif
X
X# if defined(ULTRIX) || defined(SYSV) || defined(MSDOS) || defined(VMS)
XE time_t FDECL(time, (time_t *));
X# else
XE long FDECL(time, (time_t *));
X# endif /* ULTRIX */
X#endif
X
X#ifdef MSDOS
X# ifdef abs
X# undef abs
X# endif
XE int FDECL(abs, (int));
XE int FDECL(atoi, (const char *));
X#endif
X
X#undef E
X
X#endif /* SYSTEM_H */
END_OF_FILE
if test 7724 -ne `wc -c <'include/system.h'`; then
echo shar: \"'include/system.h'\" unpacked with wrong size!
fi
# end of 'include/system.h'
fi
if test -f 'others/atarifnt.uue' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'others/atarifnt.uue'\"
else
echo shar: Extracting \"'others/atarifnt.uue'\" \(7164 characters\)
sed "s/^X//" >'others/atarifnt.uue' <<'END_OF_FILE'
Xtable
X !"#$%&'()*+,-./0123456789:;<=>?
X@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
Xbegin 644 hackfnt.arc
XM&@A(04-+1DY4+E!21P E!, #\48JO>BQ\= ,8#0 #" S4 ,! ! &@!Bz
XM8 "#D!2 > . !Q_P%!5= 'D!0(GN10.X('EB9,Z1L+0"<,&1!DY<M[(T0$By
XMC9LY=<R823,F31DW=$"T*=-&9IX&"@8B.<<#APF*($8L&[@!CY*0 #8 ,J-@x
XM!+^!"1=J?;$ I$-.)@" 6 . 0;1U "B\!< A"3P< TPPP,//&"$0*RI" K *w
XM (1 PP$&MA0$B B@4HJ"401@#<0.:@BD@((#P%8A,18&0<(QPX$!ISL R( v
XM0%(/ %0 H ' !XH!V HC&$%L8,$1P32#,>*5L<@-B,#H(!<(N' 8XIH'SYK<u
XM!(@ Y Y=DX=#(:KFME N X-*_(1P#2_ <,WF7E$(!(#<@@@K;7W(!9 &R0Bt
XM, '%__P##@"R -*XL\<TP5@E1Q L#D/5# 3\0X$00WGS%0%J=./-"9ED1s
XM\B%5<(R8%1UF 2" -!FVA4<"*O @$@8O4&AA$%P\D18>3.CQSX057EA26DQ\r
XMPP$/)REU#@XPB$ 1!G0 0$(: &!033IT8:&$"0KPY1<)0XR@#%5_4<F"$A"<q
XMX00#$ 0A!D\,( " %( $( 9-,@)P!$JFL&"GE809 8)>O90D1D<"*$)%H((p
XM\1T&9O C)HDD(,.H$I#R \9 B%1Z::9HFB&+HHQ*\Q4@$&2 !" R (!$,"!Lo
XMB<0;",#!#S"!4 -(-<!H.6E6<)#PE9V:0"$(& 1(D<04@3 0@5IG&. L G@n
XM.9D;[(#APK0@G$'!M-5J 8#W$8+KAD(,*OLM>P(L0$8"*1J 3#1,GNM,T),m
XM8$< (PQ#%1UHGB%!I5*81\>GD8;JCA"2@" %H 4R0 ')RW% P@\ZO " !H l
XM>>.0 !1) ))U+(4#""D*H,^.3/PP0)!!@"PRQ76 @!Z5/%1,5,HZ_(//"#Dk
XMD3,#: P3_2<!4"'[[!\8\Z8(@0]-!%(X"TTDP#,('34"N !!XJ.N$S("5-j
XMG14>)LS)@#4:4< V708,0A\>,3@X(80P0Z%CR-^,G"0D)$00%@$8 ("#0CD i
XMH9 +/!B@4 E@R- J) ;$PX.,"_&PD$(&M E) 0B(=+E"&Q0."08%@,(T'ZM_h
XMKA !"\P)">$ , W)#6UN"HD&#F PX.P&% X&!U4"L"D&8.C$0&W"(P^ 3@ Xg
XM()(!LTNN4 %@Z#Z Y &(!(,>>IC1N4A;C)[Y["3$-E D(N%#EPT#F>] UAY(f
XM#PD"A1M^^.?^>,\ '_YP1_<,@P<<I$X7 M"!#@2!"USH8G-@ T #L%$EG?C e
XM#&S @ &2]SH#\ #// # _S 3^8KP!-P0 ?>( '/_CA@GXP #/ 8 PXK1 ?d
XM/O"#3FIH!C]X@#UM@H/Q . XZ7F' <#87^\P (/XF8$!/# ##. 711C R8H?c
XM!( )I<@#*RX$ QXP P8<P(#9@>\@C&G(0L!G*"UB@ E,>"(?],"Z+YAO).@#b
XM !5:PSX9@0,$/O!! $PH(S^X@7A?[%__%@*!IOC Q#P0=; 8(#>#80-68,!a
XM#/#0/Q#B@ ,X\(<Q B C!P !"*DS!O4&8 Q@ ,,8FU,<$><$J1YB$ ,,L*+Iz
XM$N,'#+APA"'<7/0 X_K-"%?/##0GHH0QKV<"'\<.$.=>)#]ASN<)MR'&R.y
XMF$2%',!TP6/B0'182PP03R?E7(@? ( /=(K1# ?! 9P\@('9P1&-:@%!_N"Xx
XM3@ LDG 04(8QC%&%.VJ. .E306O6N4YPQ& ,-A@ (;7H!OAE;IW]4Q$$_- 2w
XM"&RTDW!P0 8P@ $!$"%K>$!"_GA A;00!?^L,8 Q/@ .* 2%*I<2"M?N3DAv
XM N T*C@/\# !AR8$P=97(@!S"#/B8$!#DL5HSG] <SF$.'9G #&):I06R u
XMP1UFF-T,:\E#!B / X<C7C:+MRD ,-TW^0<29OX/(4TX'+KI"#EHMA%='+Nt
XMCB,8@>D(8(;N84-S QA(0 4AB"@85)WPI,(9W+A.6&3 !S:XX.ATTBHSB,&Ss
XM @ #;(QI!F/ @'7@,$8O/UDZ#/@ DTH1Y_-(8(XS2((?DAC ,'B0@%,V !8Yr
XM9:4K83D /LC2!6V"U% 98-3,[9(!3'TB![(759+BP _R%$98";#5F7;UJW8(q
XMZP#&NL,HFA4&&# (%%?H@P]*$@<,8$9Z+\<'2>9PFCV<JQAJJ;D$X$"=?@"#p
XM'0Z[3,CZP8IB; I?S9##_)D@+9F+8@_\@ UE)M9HRM"%+J+P WX< !P!ZO _o
XMSA&;,_# #KX$ "8:D%D^F.$?//B'&5 ,@7O8PPQ@.+ \^R($8V# &M9X92]!n
XM6;K:X>!P'T ">@<R#!(,(AC6X(<N#! )'B "#CXK2 2J -=-% 0&O9#!',Pm
XMH%KR 0-PJ.< _L'0MHC1K#S@P[A"2%(A<H !VNAA\ECGAEX: !Y@\$=X%\*,l
XM-)?W@TQ,;T5RF,S/P9<;&/"',@^ 7^RB51[(ZZ$/9M?H ?QWICC^@S<L'%8#k
XMP("</KBN+9>:/Q:P ,:@$4.^_P/;XA7L<H0A2H T.$'P"/$_/B'OZA0#A]Hj
XMX;IM.8 -;! ,/\#X'W9H+P0RP0T<\R.]805 HXS! TE(XI5:=$":?:DX1B(!i
XM#$@82"#.\61CX ,'5+;R0#J BX'PP76L<]Q"#E=!!J-9S6S68I7<@$L0&A.*h
XM/B#I@,AH#3/(V>%\Z+,& 6T-'4+3J#JQ!@CK20!C#&2IR;/EF_$1Z;!BKY;6g
XM,"\\P.@+'H2<>MP5KYIUPH<-V/I^8(!!G&,(J85$6XP'68@-L+%4-YAA&S>_f
XM<$!%(0M>\^,#^ #V/XRF@EJ8 \8R(L !,#L(9\?8#@Y@:B80(6=4,*"&,!"$e
XM'VKH[;ZX$)0D]4-K%@*-K]'U'(&HK37TH0M&=(*%'N! #CBQ95SH8"$(U(4.d
XM*GD >,P( /\PM3>JM/$9H1B7;#! +\4W$#B0\,<Z3%[VT&D KU;<EOC@ ,KGc
XMJF:/UP;'[GSSRAL^NZ>B/(H86+D'.$&"D&\ZYE\$,!_VT$Z<^P-2KNVY1'5(b
XM5QC((+ULN* =W+"-"NM0)'H0A2X '41_RC8 $ !%7HQ#QGS "/?R&P.GVV a
XMI>+@'8C ,0K.+L5&L8%AMU4M6E5?.!^()*B?0P+#X%*2( ^2P B!P /X $2z
XMD >>H$K L$JJI$I^ $/X#Y?!'D&8 .31U))-0"ZA'FLQGF&8VG<$'HX%G+?y
XM90Q&YV+8T#LZX0\?A%YF)1(HN'DC]V/;!08?%(/(9U2' WO*A#T6IF8N! ;_x
XM4'P)<&IBM'F0)44N9'08@ TVH$-VX ??8'WPM! *H N[YFO>)V+# $JP $[w
XMH 4]A!' L&S)Q'X>Q 9F4&U@@ (8@':-@@+X!VYHUCL+D348 770P),Q0&Zv
XM8 _6@ W#0%4<P %QX @0*($&H$I/] 'L<#VVQ R4)U55HDM6%$-2)#XD13QIu
XM!@P[J()F,$,L"'O,$#QP(H-G58/+!'O>@4X,@ TZ6'LP>'Y5-%< ( 0ZD3RUt
XM-SLSAV/8@ UAA0 'AGSOM!!&!V#3X S0)UX#9HR;PX6,]5/@$(;!1F)4@ 'Ss
XMX ;#\ _^ _P@%G!\&(QUGZ*=F-S" -H5T.J8 9 )F3($SRV*$L\($0!V$7,r
XM90[&@ 4O9C04T(B/J%.1N%0"@!"6Z&*8"$KP5#B9QD0B9T5+)#T#(@[BI56Fq
XMB(J_J :K""D\ %9G%3PB\8LXYDMO)E\U5'NL&)(AA%[B- PF&8R$$XM@4(PFp
XMAU5=I$+*.#O21$D&H $8,'3;A9/5. *,%"BLSEX!4\J\ ]7%8Y\0(XV\ >#o
XM "<RTGY,X'%B(&<H0%1_ +)Y [&Q >IM4Y?I%<CHT8HE#]\X [N <\T"8,n
XM& :&@$"&ET")IP.?%Q8#D#^%TS^YA$;(HTP$,$('9D(D-2,ZA$P!UIAKMW9Zm
XMQ@?ZUTLUY$L>8 !@TS]#Z%IPP@#.P ,U9&$YY@&6R6"])$YL!@D+@%C45&M#l
XMF$.]] ?IY4LAA%7M%6#2\GRQ9ICB2$TBH0"LLY2)A5CI0P4OY&S_P ?\P \Vk
XM, 8Y-#KMQP:NQP:;X@\XT 5&PP-L,)<;Y7%%B FO8SH-T$3[,P!!( BKLYZUj
XMLT)&XY> "0!V0$1M!9$\Z$)Q<CDZ9U2[!$(.QT(!%D4FI%HUY'(V8 QG]D&"i
XMT(29N9FU45]?M%1QPFT%6E]@P <.D' +JGF\" \L&D*X)H])&J(%4@>]$'_h
XM@#QPT%X?"CT>2DD8\ /YTUZ\P M_H)/!>3V(Y:$+D5"7LPQLQIS\$$C)))T&g
XM<)Y@X'C]DQZ>,P#P$$G@^47Z* $-X3D1X &8XP!-! E:JA KT$^V@SWZ=@#Kf
XMU#L#TA:<LSR0L%'7 P2ZHWEH.0 ?D)"O PCSP:4[:IQZM$Z)4%<!8@,<D![Fe
XM<P#E1@#S83L#\#MQ!0DG< %4H! .H$:1ZJ4H=3V4Y$VV<Z2<LS\08#LID*>8d
XM8P"A T\!8ACS83Y"J1!PYH$C-D@D18ZIPP<&P#H(ZCIXT'B"4T'%8U3B=CT"c
XM\$$A!$P3143&<SDJ!* O!"<@5Z%Q%D*5Y@% @ =-NE9J15)@H$2]HX\S9592b
XM!)&?&)'+(Z/=ZD5_R0&(X@%E1 T0!N?HY0;@ WKVAH \ <PL*Y/! !ZX$)Ya
XM\%@(]3K^ DTS@$@C@3D#(#WP1#S^)#H#<6>U(2-,M#R+>60#<601Q%*@E G"z
XMIEL\$*C D$H2Z$J1Z'%@<(&Q4T'1=TL.N4ON)UW4A4ZX! (%D48U%UB9 #6y
XMZ0Z#5@!DI1/!XQV'DQYKU41MY1W>!$YJYAT.^Y"%\Y#/0U>%@P</"71?I -Fx
XM8 /H-3M8@ 7&.A#,(%\VP 99RP.M88M96R4!-0S#\ +\FE "D$,(("/PL '+w
XM-@,3Y0<VL $U!@ VT#]F !M5<CDV@ $04%6]M!!+) .P!0!LP 8,P+<D8 ]Ov
XM, S^D D&, T\8 '^\ T>JU,@.U L1(D35$'^0%3--1+/17#!$V?C@D[JI$%&u
XM)XM<I9F!9G'<15;FE6@&P8/L%6?OA7SLL$+U55]8Q4.%.P"8MH4C$3\>.IZ^t
XM1&&6R%<ZYW"<LU0B48R*"S_/$T(4M+PP@ /*T N]\*D$BU@CID<G, Z(LD[<s
XM\ !WX /,@)7/8P--D0GA90;^T+ULL$5F4$ /IT6Y5&1,(+$/D$'\-@SL%@SGr
XMP \\P B6"P'8L V_96_X)JO>\1^TI+@?)$0D%7#KA $H1BZ9EZ#^![-MP0!Jq
XMX'![%G%^!@=@<'HNMD*K]T&SXW$P '(Z@6 DE4'^8'*S6%KF18.>0 /)<SDGp
XMRH-P\FF7 P8VYYJ?<Z$JM)]1Y&(7Y%I\L&Q3N &7XP;4YPTD!4\8%@JEP'WXo
XMX&M2![,J4 =[\ ]5" #&\ >8I47/9@?FR@;4Q@=BD$&+"RDZQ U4<'K%6SIHn
XM23AL /+ P#G, Q/-@SYD D/7('>\ ^_59"L=) NA!! 53R9!P,=6'D+$8*:m
XMMU16%#R;0U)])HLJ*+NI*&"95TNN2(.[=$')<V NBP>WR%T]*(_(-SL,0 /4l
XM9 ^T'XY%GR@Q@=_4'P(D'-5Q(H^=\.$O 8$QP8VL%1V8 =9>#E># %Z$ HAk
XMX6M05\9(0 7=@+[R.XYKZ -TRW[090SO@ PX-LAY+%[,T,<<]+!3" "M4B78j
XM@$D1)(B0FPGS, QP,(9IY@$9@ F2/(&L!@$$@%PBX0\,21?R)$X1:470]8EFi
XMA4L'9CSB99VF:)T\1%3N%))BY!TD:9,X!@-37)LKR5TMR5Y7FUAB$$4YUD,Fh
XMU%U&&&!&60 7=$60<FK*YP;ME7,,, P:][46AQO4J'0*T NM0)P>&F/G ,Jg
XMX%I^, ;+R0_E> ?O*YU0M*!R"(=Y'$4DP XX8 V$.R.VR 0'H8\%0 (;BU3Gf
XM< X@, PXL'(;X("RFF]ZO4(>@*5DALD88 3SV:LDC % <)OYV45- ;..XQT7e
XMM$(M! ::): %"@8V "?)=YD^) .*DD?VD42"I(5Z@,7FJ'8IGG9JD4(T%Z_d
XM][:40TU86**__*&^I$*2?3D[/1!2Q "&\ D8\*[MI4XW>GU<B+9.K:?("0##c
XM\ ?+^0_."3\3)2W;:P=RQ@;829O^B0>G=4%:)*6#M:5M68T$4(%MU8BJZJC[b
XMTP"ZHP-9P]:7"@D'X(<BL3\EW:GXI#L'L*, \ E30"GI-MP$IPN=-P]JKS+a
XM-!!3A[!WI*U@@ _IYE:-)!)@X#DEO0!DH -<< 9N4 =<P 9S5P!G, 9C\ 5Cz
XM\ 9M <?_@5?, <K(0=T$ -S-S)? =A( =S4 8U/G<#$ "<\ 4U?@;SN1#=y
XM(Q9PX.-R$.(B,>0#L %T@ 9A, 9KD%5TX (Z+@"X$.(C7N(G7N6XH.)B$ 8Wx
XM3A]B@0<JW@9A8!,#4>72\ 4+P1(V409*O@%\H.)E@ =I$"4J(A)63N)OP 9Rw
XM\ 5D$ 9^N35L/@!$4 1&$ 15$.> H.)H@.-P\.5^61 JSN(U'B4I7A1N\ : v
XM+N@B,0!%7@9T4.=XKN.4_A-VD 8QX09Q3@B53@=K, =IH =QC@A?\!)RL.EBu
XMON2,<.MV'B4+P>5?8.9H'NQZK@]?8!-WKN=Z#@^W'N@K 1;'$>IN0 :O$^>#t
XM(1(0$,T,@ Z@ +2H@ *X (H &H 0( .KQ !"8*)6P ZP $0X #C3@$ s
X# !H r
X q
Xend
END_OF_FILE
if test 7164 -ne `wc -c <'others/atarifnt.uue'`; then
echo shar: \"'others/atarifnt.uue'\" unpacked with wrong size!
fi
# end of 'others/atarifnt.uue'
fi
if test -f 'others/ovlmgr.uu' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'others/ovlmgr.uu'\"
else
echo shar: Extracting \"'others/ovlmgr.uu'\" \(7707 characters\)
sed "s/^X//" >'others/ovlmgr.uu' <<'END_OF_FILE'
Xbegin 666 ovlmgr.obj
XM@ P "F]V;&UG<BY!4TW$EA4 904U!314<&3U9,5$),!$-/1$6%F H
XM "P @$!+I@* 0 ,! 4F8!P!H:1D$ 0%QC$8 !R0D24Y43D\ "20D
XM3U9,0D%310 *)"1-4$=33D]63 +)"1-4$=33D)!4T4 !B0D34%)3@ &)"1#
XM1U-. 8D)$-/5DP T9 0 #"20D3U9,24Y)5$$. )B(! H@'1H!0 @
XM $J@( # /__________
XM #_____2:(/ ,< ! 0 ! O__'J & ,\ &Z(/ ,^ ! 0 !
XM O___* 2 -> /__ [Z & -L! YYP( ,0 ,#
XM;@0@H@\ VX*$ ! $ "___"H 8 XX* "_HF8 Y * 0 )-6@$
XM " ! @ 0 ( $ " ! @ 0 ( $ "
XM ! @ 0 ( $ " ! @ 0 ( $ " "*
XMH $ Y ,__\ !%34U86%A8
XM, ! ,S@V('-P96-I9FEC(&-O9&4@96YA8FQE9"X-"B1#;VYV96YT:6]N
XM86P@;65M;W)Y(&%V86EL86)L93H@)$@@<&%R86=R87!H<RX-"B1%35,@;65M
XM;W)Y(&%V86EL86)L93H@)$@@,39++7!A9V5S+@T*)$YO="!E;F]U9V@@9G)E
XM92!M96UO<GD@;&5F="!T;R!R=6X@=&AI<R!P<F]G<F%M+B1);G1E<FYA;"!M
XM96UO<GD@86QL;V-A=&EO;B!F86EL=7)E+B1);F%C8V5S<VEB;&4@15A%(&9I
XM;&4N($-A;AMT(&QO860@;W9E<FQA>7,N)$EN8V]R<F5C="!$3U,@=F5R<VEO
XM;BX@375S="!B92 S+C P(&]R(&QA=&5R+B1%35,@;65M;W)Y(&UA;F%G97(@
XM97)R;W(N)%5N:VYO=VX@97)R;W(A)!M;,&T;6TL-"AM;2QM;,6U/5DQ-1U(Z
XM&ULP;2 D&UM+#0H;6TL@(" @(" @("@D&UM+#0H;6TL')%!345)65U4>!OR,
XMV 40 "ZC "T,,TA/ -S!; !Z0 CAX +[__T:#/ !U^H/&!+ M#V+ULTA
XM<P6P ND "ZC "T-;!GS2&,R([8OPH O@ N0@ \Z:P '4"L/\NH@ =1*T
XM0<UG+HD> "T0LUG+HD> "X NHP N CMB+'@ +HD> "+'@ +HD>
XM "T2,TA<P/I NHP #A\S[3/_,_;H NH0 +@,& ".P#/ )J, ":C
XM FH@ )J( ";'!@ __\NH0 T>#1X-'@T>#1X"Z+%@ "])T#M'JT>K1
XMZM'J0BT@ /"+BL& FHP +H,^ = 8[QW("B_@NH0 T>#1X-'@T> F
XMHP )HDN N RX (O5BLZ*\C+M,M+1XM'1L "T0LTA+J$ $@N.P8 '0#
XMZ0 +J$ "ZC ".P";&!@ ";'!@( FQP8$ )L<&!@ ":)/@@
XM \<NHP 5RZ.!@ Z )L<& #__R: )@ _5+H !87PO =05'.]=R+R['
XM!@ NQP8 OP +L<%__^#QP8NH0 +HD%+HD^ ".P";&!@ !>L%
XML /I "X ".V* #+DT>#1X"ZC #H NBPX +@ ([ C,B.V+L +X
XM +\ ":*!#+D P8 (D%)HL'*P8 (E% H/'!(/# D;BX@<?75]>6EE;6.H
XM +HDV NC!X %X?4%/\K#+DB]BM+J, (O&+HLV "#EIPQ L0" ,#
XML0W$! # X4-Q 8 P,P#<0( ,#A0W$"@ # V$-Q P P-A#<0. ,#WPW$
XM$ # X4-Q!( P/Y#<04 ,#^0W$%@ # _D-Q!@ P/Y#<0: ,#^0W$' #
XM _D-Q!X P/Y#<7" ,#: "%SP # P$8Q=, 0$L (7N ,# 1C%\@ # Q@
XMQ@( P.P#,81 ,#O S&' # VH QB4 P.X#,HH)@("QBP P-D ,HO)@<'
XMQC4F!@;&.@ # V( QCXF!P?&0P # V ADP P,.$,90 ,#&@"&6P # ]X7
XMQE\ P,: ,9D ,#J@K&; " @0 QG @(& ,9T! ("QG@ @(! ,9] ("
XM" #&@P # Y0*QI( P.2"L:I ,#F K&K0 " @P QK( P.J"L:_ ,#F K&
XMRP " @X QM @(* ,;5 ,#E K&[0 # V QO, P.J"H;X ,#Z@[&_ #
XM V0 QP P,\ ,<H ,#9@#'+@ # QH AS$ P.7%L<V ("" #'/00" H="
XM ,#_Q7'4@0# \=9 ,# @#'7@ # VX$QVH P,: ,=R ,#; 3'>00" H>!
XM ,# 1C+A"8! <>))@$!QY, P.."H>6 ,#^1C'FP # V( RYXF! 3'IR8$
XM!,>J)@,#QZT P-L ,>V ,#&@#'OP # V0 S]<F!07'W@ # Q Q^, P,2
XM ,?R ,#! #'^0 # VP$7* ! .,$,8&+HQ<_"Z)1/[1X]'C@<, "Z.'RZ+
XM1P(NC!PNB38 "Z+-@ 1BZ)-@ B38 "Z+-@ ='^)-@ ]@8 %T??X&
XM #!@ +J, "Z+-@ +HX> !;6)TN_QX )PNC!X "Z)-@ +HLV N
XMCAS^#@ @^X&+HX<+O]T B[_= 0NB38 "Z+-@ 1BZ)-@ B38 "Z+-@
XM=#>)-@ ]@8 %T-"Z+-@ +HX> #/1BZ)-@ Z0 ]@8 )T"U"A #H
XM !8Z0 Z Z0 1BZ)-@ Z\'V!@ G0*4*$ .@ %CKN^@ .NV4%%2
XM4U565QX&C-B.P": /@ '4*)J$ .@ .L$D.@ 4! ":C ".V":+%@
XMBLZ*\C+M,M+1XM'1)J$ %%2 ]"#T0"T0K +HL> #-(7)(,](FBPX -'A
XMT>'1X='AM#_-(7(S6EFT0K +HL> #-(7(DN0 "N@ 'HS(CMBT/\TA'W(2
XMZ !Q^ #@ 5]>75M:65C#L 3I "^ "+[H'% (NBTP&XUV,WRXK/@
XM+@-T&#OU<@/H NBAQ&._5R ^@ "Z*/$8[]7(#Z +HH$1COU<@/H N
XMBB1&+@,& #QX[ )HL'+@,& N.P8 '()+CL& !S @/')HD'XJ[#4U%7
XM51X&N0 "N@ C,B.V"Z+'@ M#_-(7,#Z0 O@ !Q]=7UE;PU-14E9751XN
XMCAX #/ B]"+Z(O8+HL. #VAP !'4P]H< )U!_:' !="(NBS8 "Z+
XM/@ *[< !N_ [UW(&=0H[QG,&B\:+UXOK@\,0XL0+[74%L 7I #1[='M
XMT>W1[8S8 \4?75]>6EE;PX#\2W0/@/Q,= 4N_RX + Z0 "L!U\E!14E-5
XM5E<&'BZ.!@ +HL. "[$ !))O:' "=1<F]H< %T%2:+AP +0$ +CL&
XM !R!B: IP _H/#$.+6+L<& #__RZA ]__]T#H[ )HX&! FQP8"
XMN1 O@ +HL$/?__= N.P+1)S2$NQP3__X/& N+HZ B^S_=A:='P=?7EU;
XM6EE8+HP6 NB28 ,TA+HX6 NBR8 %!14E-55E<&'HOLG(]&%N@ .@
XM !\'7UY=6UI96,\FBQX (/K 8O3)@,6 "#P@$FH0 /?__=!#H F@ X
XM (NH0 ZUF0+J$ .M2D([8.]AS"3O"<TWH #K\0,&" [V',W]@8 %T
XM!^@ ,&" [PG(EC-B+RRO(=!(&Z )H . !Z C,".V <FBPX (/!
XM >LZD*$" :<V@+$$ # VP Q!\ P-L!,0D! ,#Q"H$ P/$+@ " @0 Q#,
XM P," ,0Y ("!@#$/00" L1$ (" 0#$2 " @( Q$P P,& ,11 ,#$ #$
XM5@ # Q( Q%X P,$ ,1D ,#$@#$:0 # Q Q&X P-L!,1U (" 0#$B #
XM VP$Q(T$ P/$DP0# \27 ("! #$G # P( Q*( @(& ,2F! ("Q*X P,0
XM ,2S ,#$@#$N@ # P( A+T P/#$,3!! ("Q,@ @(( (3+ ,#+!>$SP #
XM \X0A-( P.!$835 ,#SA#$VP # P( Q.$$ @+$Z " @@ A.L P,L%X3Q
XM ,#@1'%!0 " @$ Q0P @(, (4/ ,#DQ2%%0 # P44Q1P @(" ,4C ("
XM"@#%,P " @X Q4, P,8 ,5. ("# #%9P # Q@ Q7$ P.0"H6 ,#(A+%
XMA@0" H64 ,# 1C%EP # Y *Q:H P-D (6U ,#CQ*%P # X\2A<L P./
XM$H76 ,#CQ+%WP # V@ Q>L P-H ,7P ,#9 #%]P # V8 Q@T P.0"L86
XM ,#& "&'P # QT2QB( P.0"L8U ,#&@#&0@ # V QD8$ @+&300" L94
XM! ("QEP$ P/&80 # P( QF4 @($ ,9I ("!@"&AP # P$8QJH P,, (:O
XM ,# 1C&P0 # QH QL8 P-@ ,;/! ("QM<$ @+&WP " @( QN< P,< ,;N
XM! ("QOD P-> ,;_ ,#' #'& # QP AS, P,T&<=' ,#% #'3 # Q8
XMQU, P,4 ,=8 ,#%@"':@ # _\5AVT P/Y&,=\ (" @#'A@ " @P QXT
XM @(( (>5 ,#+!?'F@0" L>? ,#:@#'I@ # SP A[8 P,^%8?* ,#/A6'
XMW@ # ]H4A^< P-^%<?Q ("# #IH $ X@4"\!T NNIL ;I FQP8 /__
XM)H F #]B\B#P0'H [T7,/Z .]%S".@ .@ .OJZP&0!H . !Z
XM<@D>C,".V.@ !\'C 8& (S8PXS8 \&.P*$( "O!=C")#@@ )J,( *$" ":C
XM @",!@( )HP>! FQ@8 FH0( "\!T"AZ.V(P&! ?^,/YPRZA STNL8
XMD([8]@8 %U"SD." !R!8L6" ##H0( "\!UY</V!@ 702!HX&!@ F@"8
XM /XF@"8 /T'ZR60CMB )@ _O8& "= N )@ _:$ .@ *$ "T! ([8
XMZP&04@: )@ _J$$ O =#*.P";V!@ 74H)@,&" ",VCO0=1VA" F 08(
XM *$" ":C @ +P'0&CMB,!@0 C,".V*$" O =#".P";V!@ 74FC-@#!@@
XMC,([PG4:)J$( $&" FH0( HP( "\!T!X[ )HP>! " )@ _@=:C-C#45-6
XM5QX&,](NH0 CMBA @ +P'7WO@ OP N1 M$B[___-(8/[$'))M$C-(7)#
XM+CL& !R-#O3<P*+TRZ)!([ )L8& )L<& @ ";'!@8 FC!X$ ":)
XM'@@ C 8" (/& H[8ZP8NB06#QP+BJ[X +D0 "Z+!#W__W0+CL"T2<TA+L<$
XM__^#Q@+BZ <?7UY;6<,STBZ /@ _W0!PR['!@ __^_ "+V;D0 "Z+!3W_
XM_W01Z .\-S6(/' N+LB\LSTL.+R[L$ +1#45<&S6<'7UD*Y'0#,]+#+HD5
XM)HD6 F@ X *+PN@ "ZA ".V,8& QP8" QP8$ QP8&
XMN@ 0B18( ,.+RX[>B] NBP4FHP )H . "PRX[!@ =0'#4U(>!N@ "ZA
XM STC/VCMCV!@ 70-C@8& ": #@ ^L,D*$( #O0<P2+T(S>H0( "\!U
XMV(O"!Q]:6\,&4U%2+J, (O0M$0RP#/;4LUG6@KD=4^T1+ !NP$ 4LUG6@KD
XM=4"T1+ "NP( 4LUG6@KD=3&T1+ #NP, S6<*Y'4D+HX& NBPX #/;)O:'
XM "= 8F@*< /Z#PQ#B[5I96P?#L ?K))!1'HS(CMBZ NBQX +D< +0_
XMS2%R!SO!=0,?6<.P".L!D#+D4 X?B]C1XX'# "+%X/Z_W1D4KH +0)S2%:
XMM G-(;0)N@ S2%84.@ +0"LCK-(;B!,.@ +0"LCK-(;@ H"XK!@ Z
XMM *R.LTAO@ N1 ,\ N@SS_= HN P8 (/& N+PZ M *R*<TAN@ M G-
XM(>@ "ZA ]__]T*IQZ 80) ,# 1C$#@ " @@ Q!4$ @*$'@ # QD5A"4
XM P.7%H0L ,#MQ*$+P # UH5A#T P/:%(1' ,#?A7$DP # SP Q,4$ @+$
XMRP0" L36! ("Q-L$ @+$X@0" L3F ("" "$Z0 # RP7Q.P @(" ,6! ,#
XM/ #%C0 # QP Q9 P-N"L6J ,#&@#%ZP # VX*QA0 P.\#,8= ,#7@#&
XM(@ # SX AC( P,L%\9> ("" #&8P0" H9I ,#<A?&;0 # VH QIL @((
XM ,:@! ("QJ< P-> (:Q ,#<A?&M0 # VH QLL$ @+&\ # UX QS P,:
XM ,<U ,#8 #'/ 0" L=$! ("QUT P.0"L=B ,#& #'A # Y ,QX\ P,(
XM#L>= ,#)0Z'I # \X8A[ P/.&,>^ ,#&@"'P0 # \X8Q\H P,^ ,?:
XM ,#N@R'X@ # \X8Q^L P,W#H?R ,#-!G']@ # QH BJ#I .$& :.P+1)
XMS2&Y$ "^ NBP0]__]T!H[ M$G-(8/& N+MN1 O@ +HL4@_K_= 2T1<UG
XM@\8"XN\NBQX (/[_W0$M#[-(5BT3,TA4(;@Z 6.L!D%#0Z-#HT.C0Z.@
XM %CK 9 D#P0P/#IR @0'BM"T LTAPQXSP([8+HLV #ZBP0NHP BT0"+J,
XM +@ (D$C$P"OH0 BP0NHP BT0"+J, +@ (D$C$P"^Q_#'C/ CMB^A #Z
XM+J$ #W__W0)B00NH0 B40"+HLV NH0 /?__= J)!"ZA ")1 +['\.J
XMG'@ Q L P,< ,0D ,#/@#$.@ # Q@ A$X P/8&(1> ,#Z!C$?0 # XX*
XMQ(0 P,( ,2+ ,#"@#$C@ # VL0Q)P P,, ,2C ,##@#$I@ # RD3Q+L
XF P,, ,3& ,##@#$S@ # XX*Q-( P,( ,3= ,#"@!/B@( '0#
X
Xend
END_OF_FILE
if test 7707 -ne `wc -c <'others/ovlmgr.uu'`; then
echo shar: \"'others/ovlmgr.uu'\" unpacked with wrong size!
fi
# end of 'others/ovlmgr.uu'
fi
if test -f 'src/rumors.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'src/rumors.c'\"
else
echo shar: Extracting \"'src/rumors.c'\" \(7483 characters\)
sed "s/^X//" >'src/rumors.c' <<'END_OF_FILE'
X/* SCCS Id: @(#)rumors.c 3.0 89/02/08
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X/* hack.rumors.c - version 1.0.3 */
X
X#include "hack.h" /* for RUMORFILE and BSD (index) */
X
X/* Rumors has been entirely rewritten to speed up the access. This is
X * essential when working from floppies. Using fseek() the way that's done
X * here means rumors following longer rumors are output more often than those
X * following shorter rumors. Also, you may see the same rumor more than once
X * in a particular game (although the odds are highly against it), but
X * this also happens with real fortune cookies. Besides, a person can
X * just read the rumor file if they desire. -dgk
X */
X
X/* The rumors file consists of a long giving the number of bytes of useful/true
X * rumors, followed by the true rumors (one per line), followed by the useless/
X * false/misleading/cute rumors (one per line).
X */
X
X/* The oracle file consists of a number of multiple-line records, separated
X * (but not terminated) by "-----" lines.
X */
Xstatic void NDECL(init_rumors);
X#ifdef ORACLE
Xstatic void NDECL(outoracle);
X#endif
Xlong first_rumor = sizeof(long);
Xlong true_rumor_size, false_rumor_size, end_rumor_file;
X#ifdef ORACLE
Xlong oracle_size;
X#endif
X
Xstatic void
Xinit_rumors()
X{
X register FILE *fp;
X
X#ifdef OS2_CODEVIEW
X {
X char tmp[PATHLEN];
X
X Strcpy(tmp,hackdir);
X append_slash(tmp);
X Strcat(tmp,RUMORFILE);
X if(fp = fopen(tmp, "r")) {
X#else
X# ifdef MACOS
X if(!(fp = fopen(RUMORFILE, "r")))
X fp = openFile(RUMORFILE, "r");
X if (fp) {
X# else
X if(fp = fopen(RUMORFILE, "r")) {
X# endif
X#endif
X (void) fread((genericptr_t)&true_rumor_size,sizeof(long),1,fp);
X (void) fseek(fp, 0L, 2);
X end_rumor_file = ftell(fp);
X false_rumor_size = (end_rumor_file-sizeof(long)) - true_rumor_size;
X (void) fclose(fp);
X } else {
X pline("Can't open rumors file!");
X end_rumor_file = -1; /* don't try to open it again */
X }
X#ifdef OS2_CODEVIEW
X }
X#endif
X#ifdef ORACLE
X#ifdef OS2_CODEVIEW
X {
X char tmp[PATHLEN];
X
X Strcpy(tmp,hackdir);
X append_slash(tmp);
X Strcat(tmp,ORACLEFILE);
X if(fp = fopen(tmp, "r")) {
X#else
X# ifdef MACOS
X if(!(fp = fopen(ORACLEFILE, "r")))
X fp = openFile(ORACLEFILE, "r");
X if (fp) {
X# else
X if(fp = fopen(ORACLEFILE, "r")) {
X# endif
X#endif
X (void) fseek(fp, 0L, 2);
X oracle_size = ftell(fp);
X (void) fclose(fp);
X } else {
X pline("Can't open oracles file!");
X oracle_size = -1; /* don't try to open it again */
X }
X#ifdef OS2_CODEVIEW
X }
X#endif
X#endif
X}
X
X
Xvoid
Xoutrumor(truth,cookie)
Xint truth; /* 1=true, -1=false, 0=either */
Xboolean cookie;
X{
X static const char fortune_msg[] =
X "This cookie has a scrap of paper inside.";
X char line[COLNO];
X char *endp;
X FILE *rumors;
X long tidbit, beginning;
X
X if (cookie && Blind) {
X pline(fortune_msg);
X pline("What a pity that you cannot read it!");
X return;
X }
X if (end_rumor_file < 0) /* We couldn't open RUMORFILE */
X return;
X#ifdef OS2_CODEVIEW
X {
X char tmp[PATHLEN];
X
X Strcpy(tmp,hackdir);
X append_slash(tmp);
X Strcat(tmp,RUMORFILE);
X if(rumors = fopen(tmp, "r")) {
X#else
X# ifdef MACOS
X if(!(rumors = fopen(RUMORFILE, "r")))
X rumors = openFile(RUMORFILE, "r");
X if (rumors) {
X# else
X if(rumors = fopen(RUMORFILE, "r")) {
X# endif
X#endif
X if (!end_rumor_file) { /* if this is the first outrumor() */
X init_rumors();
X }
X if (!truth) truth = (rn2(100) >= 50 ? 1 : -1);
X /* otherwise, 50% chance of being true */
X switch(truth) {
X case 1: beginning = first_rumor;
X tidbit = Rand() % true_rumor_size;
X break;
X case -1: beginning = first_rumor + true_rumor_size;
X tidbit = true_rumor_size + Rand() % false_rumor_size;
X break;
X default:
X impossible("strange truth value for rumor");
X tidbit = 0; beginning = first_rumor;
X break;
X }
X (void) fseek(rumors, first_rumor + tidbit, 0);
X (void) fgets(line, COLNO, rumors);
X if (!fgets(line, COLNO, rumors) || (truth == 1 &&
X (ftell(rumors) > true_rumor_size + sizeof(long)))) {
X /* reached end of rumors -- go back to beginning */
X (void) fseek(rumors, beginning, 0);
X (void) fgets(line, COLNO, rumors);
X }
X if (endp = index(line, '\n')) *endp = 0;
X if (cookie) {
X pline(fortune_msg);
X pline("It reads:");
X } else pline("Tidbit of information #%ld: ",tidbit);
X pline(line);
X (void) fclose(rumors);
X } else {
X pline("Can't open rumors file!");
X end_rumor_file = -1; /* don't try to open it again */
X }
X#ifdef OS2_CODEVIEW
X }
X#endif
X}
X
X#ifdef ORACLE
Xstatic void
Xoutoracle()
X{
X char line[COLNO];
X char *endp;
X FILE *oracles;
X
X if (oracle_size < 0) /* We couldn't open ORACLEFILE */
X return;
X#ifdef OS2_CODEVIEW
X {
X char tmp[PATHLEN];
X
X Strcpy(tmp,hackdir);
X append_slash(tmp);
X Strcat(tmp,ORACLEFILE);
X if(oracles = fopen(tmp, "r")) {
X#else
X# ifdef MACOS
X if(!(oracles = fopen(ORACLEFILE, "r")))
X oracles = openFile(ORACLEFILE, "r");
X if (oracles) {
X# else
X if(oracles = fopen(ORACLEFILE, "r")) {
X# endif
X#endif
X if (!oracle_size) { /* if this is the first outrumor() */
X init_rumors();
X }
X (void) fseek(oracles, Rand() % oracle_size, 0);
X (void) fgets(line, COLNO, oracles);
X while (1)
X if (!fgets(line, COLNO, oracles)) {
X /* reached end of oracle info -- go back to beginning */
X (void) fseek(oracles, 0L, 0);
X break;
X } else if (!strncmp(line,"-----",5)) {
X /* found end of an oracle proclamation */
X break;
X }
X pline("The Oracle meditates for a moment and then intones: ");
X cornline(0,NULL);
X while (fgets(line, COLNO, oracles) && strncmp(line,"-----",5)) {
X if (endp = index(line, '\n')) *endp = 0;
X cornline(1,line);
X }
X cornline(2,"");
X (void) fclose(oracles);
X } else {
X pline("Can't open oracles file!");
X oracle_size = -1; /* don't try to open it again */
X }
X#ifdef OS2_CODEVIEW
X }
X#endif
X}
X
Xint
Xdoconsult(oracl)
Xregister struct monst *oracl;
X{
X register char ans;
X
X multi = 0;
X (void) inshop();
X
X if(!oracl) {
X pline("There is no one here to consult.");
X return(0);
X }
X if(!oracl->mpeaceful) {
X pline("The Oracle is in no mood for consultations.");
X return(0);
X } else {
X if(!u.ugold) {
X You("have no money.");
X return(0);
X }
X pline("\"Wilt thou settle for a minor consultation?\" (50 zorkmids) ");
X ans = ynq();
X if(ans == 'y') {
X if(u.ugold < 50) {
X You("don't even have enough money for that!");
X return(0);
X }
X u.ugold -= 50;
X oracl->mgold += 50;
X flags.botl = 1;
X outrumor(1, FALSE);
X return(1);
X } else if(ans == 'q') return(0);
X else {
X pline("\"Then dost thou desire a major one?\" (1000 zorkmids) ");
X if (yn() != 'y') return(0);
X }
X if(u.ugold < 1000) {
X pline("The Oracle scornfully takes all your money and says:");
Xcornline(0,NULL);
Xcornline(1,"\"...it is rather disconcerting to be confronted with the");
Xcornline(1,"following theorem from [Baker, Gill, and Solovay, 1975].");
Xcornline(1,"");
Xcornline(1,"Theorem 7.18 There exist recursive languages A and B such that");
Xcornline(1," (1) P(A) == NP(A), and");
Xcornline(1," (2) P(B) != NP(B)");
Xcornline(1,"");
Xcornline(1,"This provides impressive evidence that the techniques that are");
Xcornline(1,"currently available will not suffice for proving that P != NP or");
Xcornline(1,"that P == NP.\" [Garey and Johnson, p. 185.]");
Xcornline(2,"");
X oracl->mgold += u.ugold;
X u.ugold = 0;
X flags.botl = 1;
X return(1);
X }
X u.ugold -= 1000;
X oracl->mgold += 1000;
X flags.botl = 1;
X outoracle();
X return(1);
X }
X}
X
X#endif
END_OF_FILE
if test 7483 -ne `wc -c <'src/rumors.c'`; then
echo shar: \"'src/rumors.c'\" unpacked with wrong size!
fi
# end of 'src/rumors.c'
fi
if test -f 'src/timeout.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'src/timeout.c'\"
else
echo shar: Extracting \"'src/timeout.c'\" \(7116 characters\)
sed "s/^X//" >'src/timeout.c' <<'END_OF_FILE'
X/* SCCS Id: @(#)timeout.c 3.0 89/11/20
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X
X#include "hack.h"
X
XSTATIC_DCL void NDECL(stoned_dialogue);
XSTATIC_DCL void NDECL(vomiting_dialogue);
XSTATIC_DCL void NDECL(choke_dialogue);
XSTATIC_DCL void FDECL(hatch_it, (struct obj*));
X
X#ifdef OVLB
X
X/* He is being petrified - dialogue by inmet!tower */
Xstatic const char NEARDATA *stoned_texts[] = {
X "You are slowing down.", /* 5 */
X "Your limbs are stiffening.", /* 4 */
X "Your limbs have turned to stone.", /* 3 */
X "You have turned to stone.", /* 2 */
X "You are a statue." /* 1 */
X};
X
XSTATIC_OVL void
Xstoned_dialogue() {
X register long i = (Stoned & TIMEOUT);
X
X if(i > 0 && i <= SIZE(stoned_texts))
X pline(stoned_texts[SIZE(stoned_texts) - i]);
X if(i == 5)
X Fast &= ~(TIMEOUT|INTRINSIC);
X if(i == 3)
X nomul(-3);
X}
X
X/* He is getting sicker and sicker prior to vomiting */
Xstatic const char NEARDATA *vomiting_texts[] = {
X "You are feeling mildly nauseous.", /* 11 */
X "You feel slightly confused.", /* 8 */
X "You can't seem to think straight.", /* 5 */
X "You feel incredibly sick.", /* 2 */
X "You suddenly vomit!" /* 0 */
X};
X
XSTATIC_OVL void
Xvomiting_dialogue() {
X register long i = (Vomiting & TIMEOUT) / 3L;
X
X if(!((Vomiting & TIMEOUT) % 3L) &&
X i >= 0 && i < SIZE(vomiting_texts))
X pline(vomiting_texts[SIZE(vomiting_texts) - i]);
X
X switch((int)i) {
X
X case 0: vomit(); morehungry(20); break;
X case 2: make_confused(HConfusion + d(2,4), FALSE);
X case 3: make_stunned(HStun + d(2,4), FALSE);
X default: break;
X }
X}
X
Xstatic const char NEARDATA *choke_texts[] = {
X "You find it hard to breathe.",
X "You're gasping for air.",
X "You can no longer breathe.",
X "You're turning %s.",
X "You suffocate."
X};
X
XSTATIC_OVL void
Xchoke_dialogue()
X{
X register long i = (Strangled & TIMEOUT);
X
X if(i > 0 && i <= SIZE(choke_texts))
X pline(choke_texts[SIZE(choke_texts) - i], Hallucination ?
X hcolor() : blue);
X}
X
X#endif /* OVLB */
X#ifdef OVL0
X
Xvoid
Xtimeout()
X{
X register struct prop *upp;
X int sleeptime;
X
X if(Stoned) stoned_dialogue();
X if(Vomiting) vomiting_dialogue();
X if(Strangled) choke_dialogue();
X#ifdef POLYSELF
X if(u.mtimedone) if(!--u.mtimedone) rehumanize();
X#endif
X if(u.ucreamed) u.ucreamed--;
X if(u.uluck && moves % (u.uhave_amulet
X#ifdef THEOLOGY
X || u.ugangr
X#endif
X ? 300 : 600) == 0) {
X /* Cursed luckstones stop bad luck from timing out; blessed luckstones
X * stop good luck from timing out; normal luckstones stop both;
X * neither is stopped if you don't have a luckstone.
X */
X register int time_luck = stone_luck(FALSE);
X boolean nostone = !carrying(LUCKSTONE);
X
X if(u.uluck > 0 && (nostone || time_luck < 0))
X u.uluck--;
X else if(u.uluck < 0 && (nostone || time_luck > 0))
X u.uluck++;
X }
X
X for(upp = u.uprops; upp < u.uprops+SIZE(u.uprops); upp++)
X if((upp->p_flgs & TIMEOUT) && !(--upp->p_flgs & TIMEOUT)) {
X if(upp->p_tofn) (*upp->p_tofn)();
X else switch(upp - u.uprops){
X case STONED:
X if (!killer) {
X killer_format = KILLED_BY_AN;
X killer = "cockatrice";
X } done(STONING);
X break;
X case VOMITING:
X make_vomiting(0L, TRUE);
X break;
X case SICK:
X You("die from your illness.");
X killer_format = KILLED_BY_AN;
X killer = u.usick_cause;
X done(POISONING);
X break;
X case FAST:
X You("feel yourself slowing down.");
X break;
X case CONFUSION:
X HConfusion = 1; /* So make_confused works properly */
X make_confused(0L, TRUE);
X break;
X case STUN:
X HStun = 1;
X make_stunned(0L, TRUE);
X break;
X case BLINDED:
X Blinded = 1;
X make_blinded(0L, TRUE);
X break;
X case INVIS:
X on_scr(u.ux,u.uy);
X if (!Invis && !See_invisible)
X You("are no longer invisible.");
X break;
X case WOUNDED_LEGS:
X heal_legs();
X break;
X case HALLUC:
X Hallucination = 1;
X make_hallucinated(0L, TRUE);
X break;
X case SLEEPING:
X if (unconscious() || Sleep_resistance)
X Sleeping += rnd(100);
X else {
X You("fall asleep.");
X sleeptime = rnd(20);
X nomul(-sleeptime);
X nomovemsg = "You wake up.";
X Sleeping = sleeptime + rnd(100);
X }
X break;
X case STRANGLED:
X killer_format = KILLED_BY;
X killer = "strangulation";
X done(DIED);
X break;
X case FUMBLING:
X /* call this only when a move took place. */
X /* otherwise handle fumbling msgs locally. */
X if (!Levitation && u.umoved) {
X if (OBJ_AT(u.ux, u.uy))
X You("trip over something.");
X else
X switch (rn2(4)) {
X case 1:
X if (ACCESSIBLE(levl[u.ux][u.uy].typ)) { /* not POOL or STONE */
X if (Hallucination) pline("A rock bites your foot.");
X else You("trip over a rock.");
X break;
X }
X case 2:
X if (Hallucination) You("slip on a banana peel.");
X else You("slip and nearly fall.");
X break;
X case 3:
X You("flounder.");
X break;
X default:
X You("stumble.");
X }
X nomul(-2);
X nomovemsg = "";
X }
X Fumbling = rnd(20);
X break;
X }
X }
X}
X
X#endif /* OVL0 */
X#ifdef OVLB
X
XSTATIC_OVL void
Xhatch_it(otmp) /* hatch the egg "otmp" if possible */
Xregister struct obj *otmp;
X{
X register struct monst *mtmp;
X#ifdef POLYSELF
X int yours = otmp->spe;
X#endif
X
X if(monstermoves-otmp->age > 200) /* very old egg - it's dead */
X otmp->corpsenm = -1;
X#ifdef LINT /* long conv. ok */
X else if(rnd(150) > 150) {
X#else
X else if(rnd((int)(monstermoves-otmp->age)) > 150) {
X#endif
X mtmp = makemon(&mons[big_to_little(otmp->corpsenm)], u.ux, u.uy);
X useup(otmp);
X if(mtmp) {
X
X if(Blind)
X You("feel something %s from your pack!",
X locomotion(mtmp->data, "drop"));
X else
X You("see %s %s out of your pack!",
X an(mtmp->data->mname),
X locomotion(mtmp->data, "drop"));
X
X#ifdef POLYSELF
X if (yours) {
X struct monst *mtmp2;
X
X pline("Its cries sound like \"%s.\"",
X flags.female ? "mommy" : "daddy");
X if (mtmp2 = tamedog(mtmp, (struct obj *)0))
X mtmp = mtmp2;
X mtmp->mtame = 20;
X while(otmp = (mtmp->minvent)) {
X mtmp->minvent = otmp->nobj;
X free((genericptr_t)otmp);
X }
X return;
X }
X#endif
X if(mtmp->data->mlet == S_DRAGON) {
X struct monst *mtmp2;
X
X verbalize("Gleep!"); /* Mything eggs :-) */
X if (mtmp2 = tamedog(mtmp, (struct obj *)0))
X mtmp = mtmp2;
X while(otmp = (mtmp->minvent)) {
X mtmp->minvent = otmp->nobj;
X free((genericptr_t)otmp);
X }
X }
X }
X }
X}
X
X#endif /* OVLB */
X#ifdef OVL1
X
Xvoid
Xhatch_eggs() /* hatch any eggs that have been too long in pack */
X{
X register struct obj *otmp,/* *ctmp, /* use of ctmp commented out below*/
X *otmp2;
X
X for(otmp = invent; otmp; otmp = otmp2) {
X
X otmp2 = otmp->nobj; /* otmp may hatch */
X if(otmp->otyp == EGG && otmp->corpsenm >= 0) hatch_it(otmp);
X }
X
X/* Not yet - there's a slight problem with "useup" on contained objs.
X for(otmp = fcobj; otmp; otmp = otmp2) {
X
X otmp2 = otmp->nobj;
X for(ctmp = invent; ctmp; ctmp = ctmp->nobj)
X if(otmp->cobj == ctmp)
X if(ctmp->otyp != ICE_BOX)
X if(otmp->otyp == EGG && otmp->corpsenm >= 0)
X hatch_it(otmp);
X }
X*/
X}
X
X#endif /* OVL1 */
END_OF_FILE
if test 7116 -ne `wc -c <'src/timeout.c'`; then
echo shar: \"'src/timeout.c'\" unpacked with wrong size!
fi
# end of 'src/timeout.c'
fi
if test -f 'src/worm.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'src/worm.c'\"
else
echo shar: Extracting \"'src/worm.c'\" \(7031 characters\)
sed "s/^X//" >'src/worm.c' <<'END_OF_FILE'
X/* SCCS Id: @(#)worm.c 3.0 88/11/11
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* NetHack may be freely redistributed. See license for details. */
X
X#include "hack.h"
X
X#ifdef WORM
X#include "wseg.h"
X
Xstatic void FDECL(remseg,(struct monst *,struct wseg *));
X
X/* Each tailed worm has a wormno. This is used as an index for the following
X * arrays:
X * wsegs: the start of a a linked list of segments, located at the tail.
X * wheads: the end of a linked list of segments, located at the head. Putting
X * the tail of the list at the head of the worm and vice versa is an
X * endless source of confusion, but necessary. From now on, we will use
X * "start" and "end" to refer to the list, and "head" and "tail" to refer
X * to the worm.
X * wgrowtime: obvious.
X *
X * When a worm is moved, we add a new segment at the head (end of the list)
X * and (unless we want it to grow) delete the segment at the tail (beginning
X * of the list). This new head segment is located in the same square as
X * the actual head of the worm (thus requiring a special case when setting
X * level.monsters upon worm movement). If we do want to grow the worm, we
X * don't delete the tail segment, and we give the worm extra hit points,
X * which possibly go into its maximum.
X *
X * Non-moving worms (worm_nomove) shrink instead of grow as their tails keep
X * going while their heads are stopped short. Delete the tail segment,
X * and remove hit points from the worm.
X */
Xstruct wseg *wsegs[32] = DUMMY, *wheads[32] = DUMMY, *m_atseg = 0;
Xlong wgrowtime[32] = DUMMY;
X
Xint
Xgetwn(mtmp)
Xstruct monst *mtmp;
X{
X register int tmp;
X
X for(tmp = 1; tmp < 32; tmp++)
X if(!wsegs[tmp]) {
X mtmp->wormno = tmp;
X return(1);
X }
X return(0); /* level infested with worms */
X}
X
X/* called to initialize a worm unless cut in half */
Xvoid
Xinitworm(mtmp)
Xstruct monst *mtmp;
X{
X register struct wseg *wtmp;
X register int tmp = mtmp->wormno;
X
X if(!tmp) return;
X wheads[tmp] = wsegs[tmp] = wtmp = newseg();
X wgrowtime[tmp] = 0;
X wtmp->wx = mtmp->mx;
X wtmp->wy = mtmp->my;
X/* wtmp->wdispl = 0; */
X wtmp->nseg = 0;
X}
X
Xstatic void
Xremseg(mtmp,wtmp)
Xstruct monst *mtmp;
Xregister struct wseg *wtmp;
X{
X if (mtmp->mx != wtmp->wx || mtmp->my != wtmp->wy)
X remove_monster(wtmp->wx, wtmp->wy);
X if(wtmp->wdispl) newsym(wtmp->wx, wtmp->wy);
X free((genericptr_t) wtmp);
X}
X
Xvoid
Xworm_move(mtmp)
Xstruct monst *mtmp;
X{
X register struct wseg *wtmp, *whd;
X register int tmp = mtmp->wormno;
X
X wtmp = newseg();
X wtmp->wx = mtmp->mx;
X wtmp->wy = mtmp->my;
X wtmp->nseg = 0;
X/* wtmp->wdispl = 0; */
X (whd = wheads[tmp])->nseg = wtmp;
X wheads[tmp] = wtmp;
X if(cansee(whd->wx,whd->wy)){
X unpmon(mtmp);
X atl(whd->wx, whd->wy, S_WORM_TAIL);
X whd->wdispl = 1;
X } else whd->wdispl = 0;
X if(wgrowtime[tmp] <= moves) {
X if(!wgrowtime[tmp]) wgrowtime[tmp] = moves + rnd(5);
X else wgrowtime[tmp] = wgrowtime[tmp]+2+rnd(15);
X mtmp->mhp += 3;
X if (mtmp->mhp > MHPMAX) mtmp->mhp = MHPMAX;
X if (mtmp->mhp > mtmp->mhpmax) mtmp->mhpmax = mtmp->mhp;
X return;
X }
X whd = wsegs[tmp];
X wsegs[tmp] = whd->nseg;
X remseg(mtmp, whd);
X}
X
Xvoid
Xworm_nomove(mtmp)
Xregister struct monst *mtmp;
X{
X register int tmp;
X register struct wseg *wtmp;
X
X tmp = mtmp->wormno;
X wtmp = wsegs[tmp];
X if(wtmp == wheads[tmp]) return;
X if(wtmp == 0 || wtmp->nseg == 0) panic("worm_nomove?");
X wsegs[tmp] = wtmp->nseg;
X remseg(mtmp, wtmp);
X if (mtmp->mhp > 3) mtmp->mhp -= 3; /* mhpmax not changed ! */
X else mtmp->mhp = 1;
X}
X
Xvoid
Xwormdead(mtmp)
Xregister struct monst *mtmp;
X{
X register int tmp = mtmp->wormno;
X register struct wseg *wtmp, *wtmp2;
X
X if(!tmp) return;
X mtmp->wormno = 0;
X for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp2) {
X wtmp2 = wtmp->nseg;
X remseg(mtmp, wtmp);
X }
X wsegs[tmp] = 0;
X}
X
Xvoid
Xwormhit(mtmp)
Xregister struct monst *mtmp;
X{
X register int tmp = mtmp->wormno;
X register struct wseg *wtmp;
X
X if(!tmp) return; /* worm without tail */
X for(wtmp = wsegs[tmp]; wtmp; wtmp = wtmp->nseg)
X if (dist(wtmp->wx, wtmp->wy) < 3) (void) mattacku(mtmp);
X}
X
Xvoid
Xwormsee(tmp)
Xregister unsigned int tmp;
X{
X register struct wseg *wtmp = wsegs[tmp];
X
X if(!wtmp) panic("wormsee: wtmp==0");
X
X for(; wtmp->nseg; wtmp = wtmp->nseg)
X if(!cansee(wtmp->wx,wtmp->wy) && wtmp->wdispl) {
X newsym(wtmp->wx, wtmp->wy);
X wtmp->wdispl = 0;
X }
X else if (cansee(wtmp->wx, wtmp->wy) && !wtmp->wdispl) {
X atl(wtmp->wx, wtmp->wy, S_WORM_TAIL);
X wtmp->wdispl = 1;
X }
X}
X
Xvoid
Xcutworm(mtmp, x, y, weptyp)
Xstruct monst *mtmp;
Xxchar x,y;
Xunsigned weptyp; /* uwep->otyp or 0 */
X{
X register struct wseg *wtmp, *wtmp2;
X struct monst *mtmp2;
X int tmp, tmp2;
X
X if(mtmp->mx == x && mtmp->my == y) return; /* hit headon */
X
X /* cutting goes best with axe or sword */
X tmp = rnd(20);
X if(weptyp >= SHORT_SWORD && weptyp <= KATANA ||
X weptyp == AXE)
X tmp += 5;
X
X if(tmp < 12) return;
X
X /* if tail then worm just loses a tail segment */
X tmp = mtmp->wormno;
X wtmp = wsegs[tmp];
X if(wtmp->wx == x && wtmp->wy == y){
X wsegs[tmp] = wtmp->nseg;
X remseg(mtmp, wtmp);
X return;
X }
X
X /* cut the worm in two halves */
X mtmp2 = newmonst(0);
X *mtmp2 = *mtmp;
X mtmp2->mxlth = mtmp2->mnamelth = 0;
X
X /* sometimes the tail end dies */
X if(rn2(3) || !getwn(mtmp2)){
X monfree(mtmp2);
X place_worm_seg(mtmp, mtmp2->mx, mtmp2->my);
X /* since mtmp is still on that spot */
X tmp2 = 0;
X } else {
X tmp2 = mtmp2->wormno;
X wsegs[tmp2] = wsegs[tmp];
X wgrowtime[tmp2] = 0;
X }
X /* do-loop: go from the tail to the head. Segments close to the tail
X * either die or become part of worm 2. We stop at the hit segment
X * and this loop never goes down the entire length of the worm.
X */
X do {
X /* The segment immediately next to (tailwards) the one hit, */
X /* becoes the head of the new second worm. Note: at this point, */
X /* wtmp->nseg is the one you hit, wtmp is immediately tailwards, */
X /* and wtmp->nseg->nseg is immediately headwards. */
X if(wtmp->nseg->wx == x && wtmp->nseg->wy == y){
X if(tmp2) wheads[tmp2] = wtmp;
X wsegs[tmp] = wtmp->nseg->nseg;
X remseg(mtmp, wtmp->nseg);
X wtmp->nseg = 0;
X if(tmp2) {
X kludge("You cut %s in half.", mon_nam(mtmp));
X /* devalue the monster level of both halves of the worm */
X mtmp->m_lev = (mtmp->m_lev <= 3) ? 2 : mtmp->m_lev - 2;
X mtmp2->m_lev = mtmp->m_lev;
X /* calculate the mhp on the new (lower) monster level */
X mtmp2->mhpmax = mtmp2->mhp = d((int)mtmp2->m_lev, 8);
X place_monster(mtmp2, wtmp->wx, wtmp->wy);
X mtmp2->nmon = fmon;
X fmon = mtmp2;
X mtmp2->mdispl = 0;
X pmon(mtmp2);
X } else {
X if (Blind) You("cut off part of its tail.");
X else You("cut off part of %s's tail.", mon_nam(mtmp));
X remseg(mtmp, wtmp);
X }
X mtmp->mhp /= 2;
X return;
X }
X /* Worm segments which are closer to the tail than the one you hit, */
X /* get either deleted or transferred from the old to new worms */
X wtmp2 = wtmp->nseg;
X if(!tmp2) remseg(mtmp, wtmp);
X else place_worm_seg(mtmp2, wtmp->wx, wtmp->wy);
X wtmp = wtmp2;
X } while(wtmp->nseg);
X panic("Cannot find worm segment");
X}
X
X#endif /* WORM /**/
END_OF_FILE
if test 7031 -ne `wc -c <'src/worm.c'`; then
echo shar: \"'src/worm.c'\" unpacked with wrong size!
fi
# end of 'src/worm.c'
fi
echo shar: End of archive 50 \(of 56\).
cp /dev/null ark50isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 56 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
echo Building monst.c from monst.c1 and monst.c2
cat src/monst.c1 src/monst.c2 > src/monst.c
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0