--- /dev/null
+# 1 "lev_main.c"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "lev_main.c"
+# 14 "lev_main.c"
+# 1 "../include/hack.h" 1
+# 11 "../include/hack.h"
+# 1 "../include/config.h" 1
+# 39 "../include/config.h"
+# 1 "../include/config1.h" 1
+# 40 "../include/config.h" 2
+# 345 "../include/config.h"
+# 1 "../include/tradstdc.h" 1
+# 88 "../include/tradstdc.h"
+# 1 "/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h" 1 3 4
+# 43 "/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h" 3 4
+typedef __builtin_va_list __gnuc_va_list;
+# 105 "/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/stdarg.h" 3 4
+typedef __gnuc_va_list va_list;
+# 89 "../include/tradstdc.h" 2
+# 222 "../include/tradstdc.h"
+typedef void * genericptr_t;
+# 346 "../include/config.h" 2
+# 359 "../include/config.h"
+typedef signed char schar;
+# 373 "../include/config.h"
+typedef unsigned char uchar;
+# 443 "../include/config.h"
+# 1 "../include/global.h" 1
+# 9 "../include/global.h"
+# 1 "/usr/include/stdio.h" 1 3 4
+# 64 "/usr/include/stdio.h" 3 4
+# 1 "/usr/include/_types.h" 1 3 4
+# 27 "/usr/include/_types.h" 3 4
+# 1 "/usr/include/sys/_types.h" 1 3 4
+# 32 "/usr/include/sys/_types.h" 3 4
+# 1 "/usr/include/sys/cdefs.h" 1 3 4
+# 33 "/usr/include/sys/_types.h" 2 3 4
+# 1 "/usr/include/machine/_types.h" 1 3 4
+# 34 "/usr/include/machine/_types.h" 3 4
+# 1 "/usr/include/i386/_types.h" 1 3 4
+# 37 "/usr/include/i386/_types.h" 3 4
+typedef signed char __int8_t;
+
+
+
+typedef unsigned char __uint8_t;
+typedef short __int16_t;
+typedef unsigned short __uint16_t;
+typedef int __int32_t;
+typedef unsigned int __uint32_t;
+typedef long long __int64_t;
+typedef unsigned long long __uint64_t;
+
+typedef long __darwin_intptr_t;
+typedef unsigned int __darwin_natural_t;
+# 70 "/usr/include/i386/_types.h" 3 4
+typedef int __darwin_ct_rune_t;
+
+
+
+
+
+typedef union {
+ char __mbstate8[128];
+ long long _mbstateL;
+} __mbstate_t;
+
+typedef __mbstate_t __darwin_mbstate_t;
+
+
+typedef int __darwin_ptrdiff_t;
+
+
+
+
+
+typedef long unsigned int __darwin_size_t;
+
+
+
+
+
+typedef __builtin_va_list __darwin_va_list;
+
+
+
+
+
+typedef int __darwin_wchar_t;
+
+
+
+
+typedef __darwin_wchar_t __darwin_rune_t;
+
+
+typedef int __darwin_wint_t;
+
+
+
+
+typedef unsigned long __darwin_clock_t;
+typedef __uint32_t __darwin_socklen_t;
+typedef long __darwin_ssize_t;
+typedef long __darwin_time_t;
+# 35 "/usr/include/machine/_types.h" 2 3 4
+# 34 "/usr/include/sys/_types.h" 2 3 4
+# 58 "/usr/include/sys/_types.h" 3 4
+struct __darwin_pthread_handler_rec
+{
+ void (*__routine)(void *);
+ void *__arg;
+ struct __darwin_pthread_handler_rec *__next;
+};
+struct _opaque_pthread_attr_t { long __sig; char __opaque[36]; };
+struct _opaque_pthread_cond_t { long __sig; char __opaque[24]; };
+struct _opaque_pthread_condattr_t { long __sig; char __opaque[4]; };
+struct _opaque_pthread_mutex_t { long __sig; char __opaque[40]; };
+struct _opaque_pthread_mutexattr_t { long __sig; char __opaque[8]; };
+struct _opaque_pthread_once_t { long __sig; char __opaque[4]; };
+struct _opaque_pthread_rwlock_t { long __sig; char __opaque[124]; };
+struct _opaque_pthread_rwlockattr_t { long __sig; char __opaque[12]; };
+struct _opaque_pthread_t { long __sig; struct __darwin_pthread_handler_rec *__cleanup_stack; char __opaque[596]; };
+# 94 "/usr/include/sys/_types.h" 3 4
+typedef __int64_t __darwin_blkcnt_t;
+typedef __int32_t __darwin_blksize_t;
+typedef __int32_t __darwin_dev_t;
+typedef unsigned int __darwin_fsblkcnt_t;
+typedef unsigned int __darwin_fsfilcnt_t;
+typedef __uint32_t __darwin_gid_t;
+typedef __uint32_t __darwin_id_t;
+typedef __uint64_t __darwin_ino64_t;
+
+
+
+typedef __uint32_t __darwin_ino_t;
+
+typedef __darwin_natural_t __darwin_mach_port_name_t;
+typedef __darwin_mach_port_name_t __darwin_mach_port_t;
+typedef __uint16_t __darwin_mode_t;
+typedef __int64_t __darwin_off_t;
+typedef __int32_t __darwin_pid_t;
+typedef struct _opaque_pthread_attr_t
+ __darwin_pthread_attr_t;
+typedef struct _opaque_pthread_cond_t
+ __darwin_pthread_cond_t;
+typedef struct _opaque_pthread_condattr_t
+ __darwin_pthread_condattr_t;
+typedef unsigned long __darwin_pthread_key_t;
+typedef struct _opaque_pthread_mutex_t
+ __darwin_pthread_mutex_t;
+typedef struct _opaque_pthread_mutexattr_t
+ __darwin_pthread_mutexattr_t;
+typedef struct _opaque_pthread_once_t
+ __darwin_pthread_once_t;
+typedef struct _opaque_pthread_rwlock_t
+ __darwin_pthread_rwlock_t;
+typedef struct _opaque_pthread_rwlockattr_t
+ __darwin_pthread_rwlockattr_t;
+typedef struct _opaque_pthread_t
+ *__darwin_pthread_t;
+typedef __uint32_t __darwin_sigset_t;
+typedef __int32_t __darwin_suseconds_t;
+typedef __uint32_t __darwin_uid_t;
+typedef __uint32_t __darwin_useconds_t;
+typedef unsigned char __darwin_uuid_t[16];
+# 28 "/usr/include/_types.h" 2 3 4
+
+typedef int __darwin_nl_item;
+typedef int __darwin_wctrans_t;
+
+
+
+typedef unsigned long __darwin_wctype_t;
+# 65 "/usr/include/stdio.h" 2 3 4
+# 75 "/usr/include/stdio.h" 3 4
+typedef __darwin_off_t off_t;
+
+
+
+
+typedef __darwin_size_t size_t;
+
+
+
+
+
+
+typedef __darwin_off_t fpos_t;
+# 98 "/usr/include/stdio.h" 3 4
+struct __sbuf {
+ unsigned char *_base;
+ int _size;
+};
+
+
+struct __sFILEX;
+# 132 "/usr/include/stdio.h" 3 4
+typedef struct __sFILE {
+ unsigned char *_p;
+ int _r;
+ int _w;
+ short _flags;
+ short _file;
+ struct __sbuf _bf;
+ int _lbfsize;
+
+
+ void *_cookie;
+ int (*_close)(void *);
+ int (*_read) (void *, char *, int);
+ fpos_t (*_seek) (void *, fpos_t, int);
+ int (*_write)(void *, const char *, int);
+
+
+ struct __sbuf _ub;
+ struct __sFILEX *_extra;
+ int _ur;
+
+
+ unsigned char _ubuf[3];
+ unsigned char _nbuf[1];
+
+
+ struct __sbuf _lb;
+
+
+ int _blksize;
+ fpos_t _offset;
+} FILE;
+
+
+
+extern FILE *__stdinp;
+extern FILE *__stdoutp;
+extern FILE *__stderrp;
+
+
+
+
+# 248 "/usr/include/stdio.h" 3 4
+
+void clearerr(FILE *);
+int fclose(FILE *);
+int feof(FILE *);
+int ferror(FILE *);
+int fflush(FILE *);
+int fgetc(FILE *);
+int fgetpos(FILE * , fpos_t *);
+char *fgets(char * , int, FILE *);
+FILE *fopen(const char * , const char * );
+int fprintf(FILE * , const char * , ...) ;
+int fputc(int, FILE *);
+int fputs(const char * , FILE * ) __asm("_" "fputs" "$UNIX2003");
+size_t fread(void * , size_t, size_t, FILE * );
+FILE *freopen(const char * , const char * ,
+ FILE * ) __asm("_" "freopen" "$UNIX2003");
+int fscanf(FILE * , const char * , ...) ;
+int fseek(FILE *, long, int);
+int fsetpos(FILE *, const fpos_t *);
+long ftell(FILE *);
+size_t fwrite(const void * , size_t, size_t, FILE * ) __asm("_" "fwrite" "$UNIX2003");
+int getc(FILE *);
+int getchar(void);
+char *gets(char *);
+
+extern const int sys_nerr;
+extern const char *const sys_errlist[];
+
+void perror(const char *);
+int printf(const char * , ...) ;
+int putc(int, FILE *);
+int putchar(int);
+int puts(const char *);
+int remove(const char *);
+int rename (const char *, const char *);
+void rewind(FILE *);
+int scanf(const char * , ...) ;
+void setbuf(FILE * , char * );
+int setvbuf(FILE * , char * , int, size_t);
+int sprintf(char * , const char * , ...) ;
+int sscanf(const char * , const char * , ...) ;
+FILE *tmpfile(void);
+char *tmpnam(char *);
+int ungetc(int, FILE *);
+int vfprintf(FILE * , const char * , va_list) ;
+int vprintf(const char * , va_list) ;
+int vsprintf(char * , const char * , va_list) ;
+
+int asprintf(char **, const char *, ...) ;
+int vasprintf(char **, const char *, va_list) ;
+
+
+
+
+
+
+
+
+
+
+char *ctermid(char *);
+
+char *ctermid_r(char *);
+
+FILE *fdopen(int, const char *);
+
+char *fgetln(FILE *, size_t *);
+
+int fileno(FILE *);
+void flockfile(FILE *);
+
+const char
+ *fmtcheck(const char *, const char *);
+int fpurge(FILE *);
+
+int fseeko(FILE *, off_t, int);
+off_t ftello(FILE *);
+int ftrylockfile(FILE *);
+void funlockfile(FILE *);
+int getc_unlocked(FILE *);
+int getchar_unlocked(void);
+
+int getw(FILE *);
+
+int pclose(FILE *);
+FILE *popen(const char *, const char *);
+int putc_unlocked(int, FILE *);
+int putchar_unlocked(int);
+
+int putw(int, FILE *);
+void setbuffer(FILE *, char *, int);
+int setlinebuf(FILE *);
+
+int snprintf(char * , size_t, const char * , ...) ;
+char *tempnam(const char *, const char *) __asm("_" "tempnam" "$UNIX2003");
+int vfscanf(FILE * , const char * , va_list) ;
+int vscanf(const char * , va_list) ;
+int vsnprintf(char * , size_t, const char * , va_list) ;
+int vsscanf(const char * , const char * , va_list) ;
+
+FILE *zopen(const char *, const char *, int);
+
+
+
+
+
+
+
+
+FILE *funopen(const void *,
+ int (*)(void *, char *, int),
+ int (*)(void *, const char *, int),
+ fpos_t (*)(void *, fpos_t, int),
+ int (*)(void *));
+
+# 371 "/usr/include/stdio.h" 3 4
+
+int __srget(FILE *);
+int __svfscanf(FILE *, const char *, va_list) ;
+int __swbuf(int, FILE *);
+
+
+
+
+
+
+
+
+static __inline int __sputc(int _c, FILE *_p) {
+ if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
+ return (*_p->_p++ = _c);
+ else
+ return (__swbuf(_c, _p));
+}
+# 10 "../include/global.h" 2
+# 61 "../include/global.h"
+typedef schar xchar;
+
+typedef xchar boolean;
+# 74 "../include/global.h"
+typedef uchar nhsym;
+# 110 "../include/global.h"
+# 1 "../include/coord.h" 1
+# 9 "../include/coord.h"
+typedef struct nhcoord {
+ xchar x,y;
+} coord;
+# 111 "../include/global.h" 2
+# 121 "../include/global.h"
+# 1 "../include/unixconf.h" 1
+# 285 "../include/unixconf.h"
+# 1 "/usr/include/time.h" 1 3 4
+# 69 "/usr/include/time.h" 3 4
+# 1 "/usr/include/_structs.h" 1 3 4
+# 24 "/usr/include/_structs.h" 3 4
+# 1 "/usr/include/sys/_structs.h" 1 3 4
+# 88 "/usr/include/sys/_structs.h" 3 4
+struct timespec
+{
+ __darwin_time_t tv_sec;
+ long tv_nsec;
+};
+# 25 "/usr/include/_structs.h" 2 3 4
+# 70 "/usr/include/time.h" 2 3 4
+
+
+
+
+
+
+
+typedef __darwin_clock_t clock_t;
+# 87 "/usr/include/time.h" 3 4
+typedef __darwin_time_t time_t;
+
+
+struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+ long tm_gmtoff;
+ char *tm_zone;
+};
+# 113 "/usr/include/time.h" 3 4
+extern char *tzname[];
+
+
+extern int getdate_err;
+
+extern long timezone __asm("_" "timezone" "$UNIX2003");
+
+extern int daylight;
+
+
+char *asctime(const struct tm *);
+clock_t clock(void) __asm("_" "clock" "$UNIX2003");
+char *ctime(const time_t *);
+double difftime(time_t, time_t);
+struct tm *getdate(const char *);
+struct tm *gmtime(const time_t *);
+struct tm *localtime(const time_t *);
+time_t mktime(struct tm *) __asm("_" "mktime" "$UNIX2003");
+size_t strftime(char * , size_t, const char * , const struct tm * ) __asm("_" "strftime" "$UNIX2003");
+char *strptime(const char * , const char * , struct tm * ) __asm("_" "strptime" "$UNIX2003");
+time_t time(time_t *);
+
+
+void tzset(void);
+
+
+
+char *asctime_r(const struct tm * , char * );
+char *ctime_r(const time_t *, char *);
+struct tm *gmtime_r(const time_t * , struct tm * );
+struct tm *localtime_r(const time_t * , struct tm * );
+
+
+time_t posix2time(time_t);
+
+
+
+void tzsetwall(void);
+time_t time2posix(time_t);
+time_t timelocal(struct tm * const);
+time_t timegm(struct tm * const);
+
+
+
+int nanosleep(const struct timespec *, struct timespec *) __asm("_" "nanosleep" "$UNIX2003");
+
+
+# 286 "../include/unixconf.h" 2
+# 296 "../include/unixconf.h"
+# 1 "../include/system.h" 1
+# 21 "../include/system.h"
+# 1 "/usr/include/sys/types.h" 1 3 4
+# 72 "/usr/include/sys/types.h" 3 4
+# 1 "/usr/include/sys/appleapiopts.h" 1 3 4
+# 73 "/usr/include/sys/types.h" 2 3 4
+
+
+
+
+
+# 1 "/usr/include/machine/types.h" 1 3 4
+# 37 "/usr/include/machine/types.h" 3 4
+# 1 "/usr/include/i386/types.h" 1 3 4
+# 78 "/usr/include/i386/types.h" 3 4
+typedef signed char int8_t;
+
+typedef unsigned char u_int8_t;
+
+
+typedef short int16_t;
+
+typedef unsigned short u_int16_t;
+
+
+typedef int int32_t;
+
+typedef unsigned int u_int32_t;
+
+
+typedef long long int64_t;
+
+typedef unsigned long long u_int64_t;
+
+
+
+
+typedef int32_t register_t;
+
+
+
+
+typedef __darwin_intptr_t intptr_t;
+
+
+
+typedef unsigned long int uintptr_t;
+
+
+
+
+typedef u_int64_t user_addr_t;
+typedef u_int64_t user_size_t;
+typedef int64_t user_ssize_t;
+typedef int64_t user_long_t;
+typedef u_int64_t user_ulong_t;
+typedef int64_t user_time_t;
+
+
+
+
+
+typedef u_int64_t syscall_arg_t;
+# 38 "/usr/include/machine/types.h" 2 3 4
+# 79 "/usr/include/sys/types.h" 2 3 4
+
+
+# 1 "/usr/include/machine/endian.h" 1 3 4
+# 37 "/usr/include/machine/endian.h" 3 4
+# 1 "/usr/include/i386/endian.h" 1 3 4
+# 99 "/usr/include/i386/endian.h" 3 4
+# 1 "/usr/include/sys/_endian.h" 1 3 4
+# 124 "/usr/include/sys/_endian.h" 3 4
+# 1 "/usr/include/libkern/_OSByteOrder.h" 1 3 4
+# 66 "/usr/include/libkern/_OSByteOrder.h" 3 4
+# 1 "/usr/include/libkern/i386/_OSByteOrder.h" 1 3 4
+# 44 "/usr/include/libkern/i386/_OSByteOrder.h" 3 4
+static __inline__
+__uint16_t
+_OSSwapInt16(
+ __uint16_t _data
+)
+{
+ return ((_data << 8) | (_data >> 8));
+}
+
+static __inline__
+__uint32_t
+_OSSwapInt32(
+ __uint32_t _data
+)
+{
+ __asm__ ("bswap %0" : "+r" (_data));
+ return _data;
+}
+
+
+static __inline__
+__uint64_t
+_OSSwapInt64(
+ __uint64_t _data
+)
+{
+ __asm__ ("bswap %%eax\n\t"
+ "bswap %%edx\n\t"
+ "xchgl %%eax, %%edx"
+ : "+A" (_data));
+ return _data;
+}
+# 67 "/usr/include/libkern/_OSByteOrder.h" 2 3 4
+# 125 "/usr/include/sys/_endian.h" 2 3 4
+# 100 "/usr/include/i386/endian.h" 2 3 4
+# 38 "/usr/include/machine/endian.h" 2 3 4
+# 82 "/usr/include/sys/types.h" 2 3 4
+
+
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+
+typedef unsigned long u_long;
+
+
+typedef unsigned short ushort;
+typedef unsigned int uint;
+
+
+typedef u_int64_t u_quad_t;
+typedef int64_t quad_t;
+typedef quad_t * qaddr_t;
+
+typedef char * caddr_t;
+typedef int32_t daddr_t;
+
+
+typedef __darwin_dev_t dev_t;
+
+
+
+typedef u_int32_t fixpt_t;
+
+
+typedef __darwin_blkcnt_t blkcnt_t;
+
+
+
+
+typedef __darwin_blksize_t blksize_t;
+
+
+
+
+typedef __darwin_gid_t gid_t;
+
+
+
+
+
+typedef __uint32_t in_addr_t;
+
+
+
+
+typedef __uint16_t in_port_t;
+
+
+
+typedef __darwin_ino_t ino_t;
+
+
+
+
+
+typedef __darwin_ino64_t ino64_t;
+
+
+
+
+
+
+typedef __int32_t key_t;
+
+
+
+typedef __darwin_mode_t mode_t;
+
+
+
+
+typedef __uint16_t nlink_t;
+
+
+
+
+
+typedef __darwin_id_t id_t;
+
+
+
+typedef __darwin_pid_t pid_t;
+# 176 "/usr/include/sys/types.h" 3 4
+typedef int32_t segsz_t;
+typedef int32_t swblk_t;
+
+
+typedef __darwin_uid_t uid_t;
+# 235 "/usr/include/sys/types.h" 3 4
+typedef __darwin_ssize_t ssize_t;
+# 245 "/usr/include/sys/types.h" 3 4
+typedef __darwin_useconds_t useconds_t;
+
+
+
+
+typedef __darwin_suseconds_t suseconds_t;
+# 260 "/usr/include/sys/types.h" 3 4
+# 1 "/usr/include/sys/_structs.h" 1 3 4
+# 183 "/usr/include/sys/_structs.h" 3 4
+
+typedef struct fd_set {
+ __int32_t fds_bits[(((1024) + (((sizeof(__int32_t) * 8)) - 1)) / ((sizeof(__int32_t) * 8)))];
+} fd_set;
+
+
+
+static __inline int
+__darwin_fd_isset(int _n, struct fd_set *_p)
+{
+ return (_p->fds_bits[_n/(sizeof(__int32_t) * 8)] & (1<<(_n % (sizeof(__int32_t) * 8))));
+}
+# 261 "/usr/include/sys/types.h" 2 3 4
+
+
+
+
+typedef __int32_t fd_mask;
+# 318 "/usr/include/sys/types.h" 3 4
+typedef __darwin_pthread_attr_t pthread_attr_t;
+
+
+
+typedef __darwin_pthread_cond_t pthread_cond_t;
+
+
+
+typedef __darwin_pthread_condattr_t pthread_condattr_t;
+
+
+
+typedef __darwin_pthread_mutex_t pthread_mutex_t;
+
+
+
+typedef __darwin_pthread_mutexattr_t pthread_mutexattr_t;
+
+
+
+typedef __darwin_pthread_once_t pthread_once_t;
+
+
+
+typedef __darwin_pthread_rwlock_t pthread_rwlock_t;
+
+
+
+typedef __darwin_pthread_rwlockattr_t pthread_rwlockattr_t;
+
+
+
+typedef __darwin_pthread_t pthread_t;
+
+
+
+
+
+
+typedef __darwin_pthread_key_t pthread_key_t;
+
+
+
+
+
+typedef __darwin_fsblkcnt_t fsblkcnt_t;
+
+
+
+
+typedef __darwin_fsfilcnt_t fsfilcnt_t;
+# 22 "../include/system.h" 2
+# 92 "../include/system.h"
+extern long lrand48();
+extern void srand48();
+
+
+
+
+
+extern void exit (int);
+# 118 "../include/system.h"
+extern void free (genericptr_t);
+# 127 "../include/system.h"
+extern void perror (const char *);
+
+
+
+
+
+
+extern void qsort (genericptr_t,size_t,size_t, int(*)(const void *,const void *));
+# 301 "../include/system.h"
+# 1 "/usr/include/string.h" 1 3 4
+# 80 "/usr/include/string.h" 3 4
+
+void *memchr(const void *, int, size_t);
+int memcmp(const void *, const void *, size_t);
+void *memcpy(void *, const void *, size_t);
+void *memmove(void *, const void *, size_t);
+void *memset(void *, int, size_t);
+
+char *stpcpy(char *, const char *);
+char *strcasestr(const char *, const char *);
+
+char *strcat(char *, const char *);
+char *strchr(const char *, int);
+int strcmp(const char *, const char *);
+int strcoll(const char *, const char *);
+char *strcpy(char *, const char *);
+size_t strcspn(const char *, const char *);
+char *strerror(int) __asm("_" "strerror" "$UNIX2003");
+int strerror_r(int, char *, size_t);
+size_t strlen(const char *);
+char *strncat(char *, const char *, size_t);
+int strncmp(const char *, const char *, size_t);
+char *strncpy(char *, const char *, size_t);
+
+char *strnstr(const char *, const char *, size_t);
+
+char *strpbrk(const char *, const char *);
+char *strrchr(const char *, int);
+size_t strspn(const char *, const char *);
+char *strstr(const char *, const char *);
+char *strtok(char *, const char *);
+size_t strxfrm(char *, const char *, size_t);
+
+
+
+void *memccpy(void *, const void *, int, size_t);
+char *strtok_r(char *, const char *, char **);
+char *strdup(const char *);
+
+int bcmp(const void *, const void *, size_t);
+void bcopy(const void *, void *, size_t);
+void bzero(void *, size_t);
+int ffs(int);
+int ffsl(long);
+int fls(int);
+int flsl(long);
+char *index(const char *, int);
+void memset_pattern4(void *, const void *, size_t);
+void memset_pattern8(void *, const void *, size_t);
+void memset_pattern16(void *, const void *, size_t);
+char *rindex(const char *, int);
+int strcasecmp(const char *, const char *);
+size_t strlcat(char *, const char *, size_t);
+size_t strlcpy(char *, const char *, size_t);
+void strmode(int, char *);
+int strncasecmp(const char *, const char *, size_t);
+char *strsep(char **, const char *);
+char *strsignal(int sig);
+void swab(const void * , void * , ssize_t);
+
+
+
+# 302 "../include/system.h" 2
+# 353 "../include/system.h"
+extern unsigned sleep();
+# 362 "../include/system.h"
+extern char *getenv (const char *);
+extern char *getlogin();
+
+
+
+
+
+
+extern pid_t getpid(void);
+extern uid_t getuid(void);
+extern gid_t getgid(void);
+# 507 "../include/system.h"
+extern int tgetent (char *,const char *);
+extern void tputs (const char *,int,int (*)());
+
+extern int tgetnum (const char *);
+extern int tgetflag (const char *);
+extern char *tgetstr (const char *,char **);
+extern char *tgoto (const char *,int,int);
+# 524 "../include/system.h"
+extern struct tm *localtime (const time_t *);
+
+
+
+
+extern time_t time (time_t *);
+# 297 "../include/unixconf.h" 2
+
+
+# 1 "/usr/include/stdlib.h" 1 3 4
+# 61 "/usr/include/stdlib.h" 3 4
+# 1 "/usr/include/available.h" 1 3 4
+# 62 "/usr/include/stdlib.h" 2 3 4
+
+
+
+# 1 "/usr/include/sys/wait.h" 1 3 4
+# 79 "/usr/include/sys/wait.h" 3 4
+typedef enum {
+ P_ALL,
+ P_PID,
+ P_PGID
+} idtype_t;
+# 116 "/usr/include/sys/wait.h" 3 4
+# 1 "/usr/include/sys/signal.h" 1 3 4
+# 81 "/usr/include/sys/signal.h" 3 4
+# 1 "/usr/include/machine/signal.h" 1 3 4
+# 34 "/usr/include/machine/signal.h" 3 4
+# 1 "/usr/include/i386/signal.h" 1 3 4
+# 39 "/usr/include/i386/signal.h" 3 4
+typedef int sig_atomic_t;
+# 55 "/usr/include/i386/signal.h" 3 4
+# 1 "/usr/include/i386/_structs.h" 1 3 4
+# 56 "/usr/include/i386/signal.h" 2 3 4
+# 35 "/usr/include/machine/signal.h" 2 3 4
+# 82 "/usr/include/sys/signal.h" 2 3 4
+# 154 "/usr/include/sys/signal.h" 3 4
+# 1 "/usr/include/sys/_structs.h" 1 3 4
+# 57 "/usr/include/sys/_structs.h" 3 4
+# 1 "/usr/include/machine/_structs.h" 1 3 4
+# 31 "/usr/include/machine/_structs.h" 3 4
+# 1 "/usr/include/i386/_structs.h" 1 3 4
+# 38 "/usr/include/i386/_structs.h" 3 4
+# 1 "/usr/include/mach/i386/_structs.h" 1 3 4
+# 43 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_i386_thread_state
+{
+ unsigned int __eax;
+ unsigned int __ebx;
+ unsigned int __ecx;
+ unsigned int __edx;
+ unsigned int __edi;
+ unsigned int __esi;
+ unsigned int __ebp;
+ unsigned int __esp;
+ unsigned int __ss;
+ unsigned int __eflags;
+ unsigned int __eip;
+ unsigned int __cs;
+ unsigned int __ds;
+ unsigned int __es;
+ unsigned int __fs;
+ unsigned int __gs;
+};
+# 89 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_fp_control
+{
+ unsigned short __invalid :1,
+ __denorm :1,
+ __zdiv :1,
+ __ovrfl :1,
+ __undfl :1,
+ __precis :1,
+ :2,
+ __pc :2,
+
+
+
+
+
+ __rc :2,
+
+
+
+
+
+
+ :1,
+ :3;
+};
+typedef struct __darwin_fp_control __darwin_fp_control_t;
+# 147 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_fp_status
+{
+ unsigned short __invalid :1,
+ __denorm :1,
+ __zdiv :1,
+ __ovrfl :1,
+ __undfl :1,
+ __precis :1,
+ __stkflt :1,
+ __errsumm :1,
+ __c0 :1,
+ __c1 :1,
+ __c2 :1,
+ __tos :3,
+ __c3 :1,
+ __busy :1;
+};
+typedef struct __darwin_fp_status __darwin_fp_status_t;
+# 191 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_mmst_reg
+{
+ char __mmst_reg[10];
+ char __mmst_rsrv[6];
+};
+# 210 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_xmm_reg
+{
+ char __xmm_reg[16];
+};
+# 232 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_i386_float_state
+{
+ int __fpu_reserved[2];
+ struct __darwin_fp_control __fpu_fcw;
+ struct __darwin_fp_status __fpu_fsw;
+ __uint8_t __fpu_ftw;
+ __uint8_t __fpu_rsrv1;
+ __uint16_t __fpu_fop;
+ __uint32_t __fpu_ip;
+ __uint16_t __fpu_cs;
+ __uint16_t __fpu_rsrv2;
+ __uint32_t __fpu_dp;
+ __uint16_t __fpu_ds;
+ __uint16_t __fpu_rsrv3;
+ __uint32_t __fpu_mxcsr;
+ __uint32_t __fpu_mxcsrmask;
+ struct __darwin_mmst_reg __fpu_stmm0;
+ struct __darwin_mmst_reg __fpu_stmm1;
+ struct __darwin_mmst_reg __fpu_stmm2;
+ struct __darwin_mmst_reg __fpu_stmm3;
+ struct __darwin_mmst_reg __fpu_stmm4;
+ struct __darwin_mmst_reg __fpu_stmm5;
+ struct __darwin_mmst_reg __fpu_stmm6;
+ struct __darwin_mmst_reg __fpu_stmm7;
+ struct __darwin_xmm_reg __fpu_xmm0;
+ struct __darwin_xmm_reg __fpu_xmm1;
+ struct __darwin_xmm_reg __fpu_xmm2;
+ struct __darwin_xmm_reg __fpu_xmm3;
+ struct __darwin_xmm_reg __fpu_xmm4;
+ struct __darwin_xmm_reg __fpu_xmm5;
+ struct __darwin_xmm_reg __fpu_xmm6;
+ struct __darwin_xmm_reg __fpu_xmm7;
+ char __fpu_rsrv4[14*16];
+ int __fpu_reserved1;
+};
+# 308 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_i386_exception_state
+{
+ unsigned int __trapno;
+ unsigned int __err;
+ unsigned int __faultvaddr;
+};
+# 326 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_x86_debug_state32
+{
+ unsigned int __dr0;
+ unsigned int __dr1;
+ unsigned int __dr2;
+ unsigned int __dr3;
+ unsigned int __dr4;
+ unsigned int __dr5;
+ unsigned int __dr6;
+ unsigned int __dr7;
+};
+# 358 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_x86_thread_state64
+{
+ __uint64_t __rax;
+ __uint64_t __rbx;
+ __uint64_t __rcx;
+ __uint64_t __rdx;
+ __uint64_t __rdi;
+ __uint64_t __rsi;
+ __uint64_t __rbp;
+ __uint64_t __rsp;
+ __uint64_t __r8;
+ __uint64_t __r9;
+ __uint64_t __r10;
+ __uint64_t __r11;
+ __uint64_t __r12;
+ __uint64_t __r13;
+ __uint64_t __r14;
+ __uint64_t __r15;
+ __uint64_t __rip;
+ __uint64_t __rflags;
+ __uint64_t __cs;
+ __uint64_t __fs;
+ __uint64_t __gs;
+};
+# 413 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_x86_float_state64
+{
+ int __fpu_reserved[2];
+ struct __darwin_fp_control __fpu_fcw;
+ struct __darwin_fp_status __fpu_fsw;
+ __uint8_t __fpu_ftw;
+ __uint8_t __fpu_rsrv1;
+ __uint16_t __fpu_fop;
+
+
+ __uint32_t __fpu_ip;
+ __uint16_t __fpu_cs;
+
+ __uint16_t __fpu_rsrv2;
+
+
+ __uint32_t __fpu_dp;
+ __uint16_t __fpu_ds;
+
+ __uint16_t __fpu_rsrv3;
+ __uint32_t __fpu_mxcsr;
+ __uint32_t __fpu_mxcsrmask;
+ struct __darwin_mmst_reg __fpu_stmm0;
+ struct __darwin_mmst_reg __fpu_stmm1;
+ struct __darwin_mmst_reg __fpu_stmm2;
+ struct __darwin_mmst_reg __fpu_stmm3;
+ struct __darwin_mmst_reg __fpu_stmm4;
+ struct __darwin_mmst_reg __fpu_stmm5;
+ struct __darwin_mmst_reg __fpu_stmm6;
+ struct __darwin_mmst_reg __fpu_stmm7;
+ struct __darwin_xmm_reg __fpu_xmm0;
+ struct __darwin_xmm_reg __fpu_xmm1;
+ struct __darwin_xmm_reg __fpu_xmm2;
+ struct __darwin_xmm_reg __fpu_xmm3;
+ struct __darwin_xmm_reg __fpu_xmm4;
+ struct __darwin_xmm_reg __fpu_xmm5;
+ struct __darwin_xmm_reg __fpu_xmm6;
+ struct __darwin_xmm_reg __fpu_xmm7;
+ struct __darwin_xmm_reg __fpu_xmm8;
+ struct __darwin_xmm_reg __fpu_xmm9;
+ struct __darwin_xmm_reg __fpu_xmm10;
+ struct __darwin_xmm_reg __fpu_xmm11;
+ struct __darwin_xmm_reg __fpu_xmm12;
+ struct __darwin_xmm_reg __fpu_xmm13;
+ struct __darwin_xmm_reg __fpu_xmm14;
+ struct __darwin_xmm_reg __fpu_xmm15;
+ char __fpu_rsrv4[6*16];
+ int __fpu_reserved1;
+};
+# 517 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_x86_exception_state64
+{
+ unsigned int __trapno;
+ unsigned int __err;
+ __uint64_t __faultvaddr;
+};
+# 535 "/usr/include/mach/i386/_structs.h" 3 4
+struct __darwin_x86_debug_state64
+{
+ __uint64_t __dr0;
+ __uint64_t __dr1;
+ __uint64_t __dr2;
+ __uint64_t __dr3;
+ __uint64_t __dr4;
+ __uint64_t __dr5;
+ __uint64_t __dr6;
+ __uint64_t __dr7;
+};
+# 39 "/usr/include/i386/_structs.h" 2 3 4
+# 48 "/usr/include/i386/_structs.h" 3 4
+struct __darwin_mcontext32
+{
+ struct __darwin_i386_exception_state __es;
+ struct __darwin_i386_thread_state __ss;
+ struct __darwin_i386_float_state __fs;
+};
+# 68 "/usr/include/i386/_structs.h" 3 4
+struct __darwin_mcontext64
+{
+ struct __darwin_x86_exception_state64 __es;
+ struct __darwin_x86_thread_state64 __ss;
+ struct __darwin_x86_float_state64 __fs;
+};
+# 94 "/usr/include/i386/_structs.h" 3 4
+typedef struct __darwin_mcontext32 *mcontext_t;
+# 32 "/usr/include/machine/_structs.h" 2 3 4
+# 58 "/usr/include/sys/_structs.h" 2 3 4
+# 75 "/usr/include/sys/_structs.h" 3 4
+struct __darwin_sigaltstack
+{
+ void *ss_sp;
+ __darwin_size_t ss_size;
+ int ss_flags;
+};
+# 128 "/usr/include/sys/_structs.h" 3 4
+struct __darwin_ucontext
+{
+ int uc_onstack;
+ __darwin_sigset_t uc_sigmask;
+ struct __darwin_sigaltstack uc_stack;
+ struct __darwin_ucontext *uc_link;
+ __darwin_size_t uc_mcsize;
+ struct __darwin_mcontext32 *uc_mcontext;
+
+
+
+};
+# 218 "/usr/include/sys/_structs.h" 3 4
+typedef struct __darwin_sigaltstack stack_t;
+# 227 "/usr/include/sys/_structs.h" 3 4
+typedef struct __darwin_ucontext ucontext_t;
+# 155 "/usr/include/sys/signal.h" 2 3 4
+# 168 "/usr/include/sys/signal.h" 3 4
+typedef __darwin_sigset_t sigset_t;
+# 181 "/usr/include/sys/signal.h" 3 4
+union sigval {
+
+ int sival_int;
+ void *sival_ptr;
+};
+
+
+
+
+
+struct sigevent {
+ int sigev_notify;
+ int sigev_signo;
+ union sigval sigev_value;
+ void (*sigev_notify_function)(union sigval);
+ pthread_attr_t *sigev_notify_attributes;
+};
+
+
+typedef struct __siginfo {
+ int si_signo;
+ int si_errno;
+ int si_code;
+ pid_t si_pid;
+ uid_t si_uid;
+ int si_status;
+ void *si_addr;
+ union sigval si_value;
+ long si_band;
+ unsigned long __pad[7];
+} siginfo_t;
+# 292 "/usr/include/sys/signal.h" 3 4
+union __sigaction_u {
+ void (*__sa_handler)(int);
+ void (*__sa_sigaction)(int, struct __siginfo *,
+ void *);
+};
+
+
+struct __sigaction {
+ union __sigaction_u __sigaction_u;
+ void (*sa_tramp)(void *, int, int, siginfo_t *, void *);
+ sigset_t sa_mask;
+ int sa_flags;
+};
+
+
+
+
+struct sigaction {
+ union __sigaction_u __sigaction_u;
+ sigset_t sa_mask;
+ int sa_flags;
+};
+# 354 "/usr/include/sys/signal.h" 3 4
+typedef void (*sig_t)(int);
+# 371 "/usr/include/sys/signal.h" 3 4
+struct sigvec {
+ void (*sv_handler)(int);
+ int sv_mask;
+ int sv_flags;
+};
+# 390 "/usr/include/sys/signal.h" 3 4
+struct sigstack {
+ char *ss_sp;
+ int ss_onstack;
+};
+# 412 "/usr/include/sys/signal.h" 3 4
+
+void (*signal(int, void (*)(int)))(int);
+
+# 117 "/usr/include/sys/wait.h" 2 3 4
+# 1 "/usr/include/sys/resource.h" 1 3 4
+# 76 "/usr/include/sys/resource.h" 3 4
+# 1 "/usr/include/sys/_structs.h" 1 3 4
+# 100 "/usr/include/sys/_structs.h" 3 4
+struct timeval
+{
+ __darwin_time_t tv_sec;
+ __darwin_suseconds_t tv_usec;
+};
+# 77 "/usr/include/sys/resource.h" 2 3 4
+# 88 "/usr/include/sys/resource.h" 3 4
+typedef __uint64_t rlim_t;
+# 142 "/usr/include/sys/resource.h" 3 4
+struct rusage {
+ struct timeval ru_utime;
+ struct timeval ru_stime;
+# 153 "/usr/include/sys/resource.h" 3 4
+ long ru_maxrss;
+
+ long ru_ixrss;
+ long ru_idrss;
+ long ru_isrss;
+ long ru_minflt;
+ long ru_majflt;
+ long ru_nswap;
+ long ru_inblock;
+ long ru_oublock;
+ long ru_msgsnd;
+ long ru_msgrcv;
+ long ru_nsignals;
+ long ru_nvcsw;
+ long ru_nivcsw;
+
+
+};
+# 213 "/usr/include/sys/resource.h" 3 4
+struct rlimit {
+ rlim_t rlim_cur;
+ rlim_t rlim_max;
+};
+# 235 "/usr/include/sys/resource.h" 3 4
+
+int getpriority(int, id_t);
+
+int getiopolicy_np(int, int);
+
+int getrlimit(int, struct rlimit *) __asm("_" "getrlimit" "$UNIX2003");
+int getrusage(int, struct rusage *);
+int setpriority(int, id_t, int);
+
+int setiopolicy_np(int, int, int);
+
+int setrlimit(int, const struct rlimit *) __asm("_" "setrlimit" "$UNIX2003");
+
+# 118 "/usr/include/sys/wait.h" 2 3 4
+# 201 "/usr/include/sys/wait.h" 3 4
+union wait {
+ int w_status;
+
+
+
+ struct {
+
+ unsigned int w_Termsig:7,
+ w_Coredump:1,
+ w_Retcode:8,
+ w_Filler:16;
+
+
+
+
+
+
+
+ } w_T;
+
+
+
+
+
+ struct {
+
+ unsigned int w_Stopval:8,
+ w_Stopsig:8,
+ w_Filler:16;
+
+
+
+
+
+
+ } w_S;
+};
+# 254 "/usr/include/sys/wait.h" 3 4
+
+pid_t wait(int *) __asm("_" "wait" "$UNIX2003");
+pid_t waitpid(pid_t, int *, int) __asm("_" "waitpid" "$UNIX2003");
+
+int waitid(idtype_t, id_t, siginfo_t *, int) __asm("_" "waitid" "$UNIX2003");
+
+
+pid_t wait3(int *, int, struct rusage *);
+pid_t wait4(pid_t, int *, int, struct rusage *);
+
+
+# 66 "/usr/include/stdlib.h" 2 3 4
+
+# 1 "/usr/include/alloca.h" 1 3 4
+# 35 "/usr/include/alloca.h" 3 4
+
+void *alloca(size_t);
+
+# 68 "/usr/include/stdlib.h" 2 3 4
+# 81 "/usr/include/stdlib.h" 3 4
+typedef __darwin_ct_rune_t ct_rune_t;
+
+
+
+
+typedef __darwin_rune_t rune_t;
+
+
+
+
+
+
+typedef __darwin_wchar_t wchar_t;
+
+
+
+typedef struct {
+ int quot;
+ int rem;
+} div_t;
+
+typedef struct {
+ long quot;
+ long rem;
+} ldiv_t;
+
+
+typedef struct {
+ long long quot;
+ long long rem;
+} lldiv_t;
+# 134 "/usr/include/stdlib.h" 3 4
+extern int __mb_cur_max;
+# 144 "/usr/include/stdlib.h" 3 4
+
+void abort(void) __attribute__((__noreturn__));
+int abs(int) __attribute__((__const__));
+int atexit(void (*)(void));
+double atof(const char *);
+int atoi(const char *);
+long atol(const char *);
+
+long long
+ atoll(const char *);
+
+void *bsearch(const void *, const void *, size_t,
+ size_t, int (*)(const void *, const void *));
+void *calloc(size_t, size_t);
+div_t div(int, int) __attribute__((__const__));
+void exit(int) __attribute__((__noreturn__));
+void free(void *);
+char *getenv(const char *);
+long labs(long) __attribute__((__const__));
+ldiv_t ldiv(long, long) __attribute__((__const__));
+
+long long
+ llabs(long long);
+lldiv_t lldiv(long long, long long);
+
+void *malloc(size_t);
+int mblen(const char *, size_t);
+size_t mbstowcs(wchar_t * , const char * , size_t);
+int mbtowc(wchar_t * , const char * , size_t);
+void qsort(void *, size_t, size_t,
+ int (*)(const void *, const void *));
+int rand(void);
+void *realloc(void *, size_t);
+void srand(unsigned);
+double strtod(const char *, char **) __asm("_" "strtod" "$UNIX2003");
+float strtof(const char *, char **) __asm("_" "strtof" "$UNIX2003");
+long strtol(const char *, char **, int);
+long double
+ strtold(const char *, char **) ;
+
+long long
+ strtoll(const char *, char **, int);
+
+unsigned long
+ strtoul(const char *, char **, int);
+
+unsigned long long
+ strtoull(const char *, char **, int);
+
+int system(const char *) __asm("_" "system" "$UNIX2003");
+size_t wcstombs(char * , const wchar_t * , size_t);
+int wctomb(char *, wchar_t);
+
+
+void _Exit(int) __attribute__((__noreturn__));
+long a64l(const char *);
+double drand48(void);
+char *ecvt(double, int, int *, int *);
+double erand48(unsigned short[3]);
+char *fcvt(double, int, int *, int *);
+char *gcvt(double, int, char *);
+int getsubopt(char **, char * const *, char **);
+int grantpt(int);
+
+char *initstate(unsigned, char *, size_t);
+
+
+
+long jrand48(unsigned short[3]);
+char *l64a(long);
+void lcong48(unsigned short[7]);
+long lrand48(void);
+char *mktemp(char *);
+int mkstemp(char *);
+long mrand48(void);
+long nrand48(unsigned short[3]);
+int posix_openpt(int);
+char *ptsname(int);
+int putenv(char *) __asm("_" "putenv" "$UNIX2003");
+long random(void);
+int rand_r(unsigned *);
+
+char *realpath(const char * , char * ) __asm("_" "realpath" "$DARWIN_EXTSN");
+
+
+
+unsigned short
+ *seed48(unsigned short[3]);
+int setenv(const char *, const char *, int) __asm("_" "setenv" "$UNIX2003");
+
+void setkey(const char *) __asm("_" "setkey" "$UNIX2003");
+
+
+
+char *setstate(const char *);
+void srand48(long);
+
+void srandom(unsigned);
+
+
+
+int unlockpt(int);
+
+int unsetenv(const char *) __asm("_" "unsetenv" "$UNIX2003");
+# 266 "/usr/include/stdlib.h" 3 4
+u_int32_t
+ arc4random(void);
+void arc4random_addrandom(unsigned char *dat, int datlen);
+void arc4random_stir(void);
+
+
+char *cgetcap(char *, const char *, int);
+int cgetclose(void);
+int cgetent(char **, char **, const char *);
+int cgetfirst(char **, char **);
+int cgetmatch(const char *, const char *);
+int cgetnext(char **, char **);
+int cgetnum(char *, const char *, long *);
+int cgetset(const char *);
+int cgetstr(char *, const char *, char **);
+int cgetustr(char *, const char *, char **);
+
+int daemon(int, int) __asm("_" "daemon" "$1050") __attribute__((deprecated));
+char *devname(dev_t, mode_t);
+char *devname_r(dev_t, mode_t, char *buf, int len);
+char *getbsize(int *, long *);
+int getloadavg(double [], int);
+const char
+ *getprogname(void);
+
+int heapsort(void *, size_t, size_t,
+ int (*)(const void *, const void *));
+int mergesort(void *, size_t, size_t,
+ int (*)(const void *, const void *));
+void qsort_r(void *, size_t, size_t, void *,
+ int (*)(void *, const void *, const void *));
+int radixsort(const unsigned char **, int, const unsigned char *,
+ unsigned);
+void setprogname(const char *);
+int sradixsort(const unsigned char **, int, const unsigned char *,
+ unsigned);
+void sranddev(void);
+void srandomdev(void);
+void *reallocf(void *, size_t);
+
+long long
+ strtoq(const char *, char **, int);
+unsigned long long
+ strtouq(const char *, char **, int);
+
+extern char *suboptarg;
+void *valloc(size_t);
+
+
+
+
+
+
+
+# 300 "../include/unixconf.h" 2
+# 1 "/usr/include/unistd.h" 1 3 4
+# 72 "/usr/include/unistd.h" 3 4
+# 1 "/usr/include/sys/unistd.h" 1 3 4
+# 138 "/usr/include/sys/unistd.h" 3 4
+struct accessx_descriptor {
+ unsigned int ad_name_offset;
+ int ad_flags;
+ int ad_pad[2];
+};
+# 73 "/usr/include/unistd.h" 2 3 4
+# 133 "/usr/include/unistd.h" 3 4
+typedef __darwin_uuid_t uuid_t;
+# 414 "/usr/include/unistd.h" 3 4
+
+
+void _exit(int) __attribute__((__noreturn__));
+int access(const char *, int);
+unsigned int
+ alarm(unsigned int);
+int chdir(const char *);
+int chown(const char *, uid_t, gid_t);
+int close(int) __asm("_" "close" "$UNIX2003");
+size_t confstr(int, char *, size_t) __asm("_" "confstr" "$UNIX2003");
+char *crypt(const char *, const char *);
+char *ctermid(char *);
+int dup(int);
+int dup2(int, int);
+
+void encrypt(char *, int) __asm("_" "encrypt" "$UNIX2003");
+
+
+
+int execl(const char *, const char *, ...);
+int execle(const char *, const char *, ...);
+int execlp(const char *, const char *, ...);
+int execv(const char *, char * const *);
+int execve(const char *, char * const *, char * const *);
+int execvp(const char *, char * const *);
+int fchown(int, uid_t, gid_t);
+int fchdir(int);
+pid_t fork(void);
+long fpathconf(int, int);
+int fsync(int) __asm("_" "fsync" "$UNIX2003");
+int ftruncate(int, off_t);
+char *getcwd(char *, size_t);
+gid_t getegid(void);
+uid_t geteuid(void);
+gid_t getgid(void);
+int getgroups(int, gid_t []);
+long gethostid(void);
+int gethostname(char *, size_t);
+char *getlogin(void);
+int getlogin_r(char *, size_t);
+int getopt(int, char * const [], const char *) __asm("_" "getopt" "$UNIX2003");
+pid_t getpgid(pid_t);
+pid_t getpgrp(void);
+pid_t getpid(void);
+pid_t getppid(void);
+pid_t getsid(pid_t);
+uid_t getuid(void);
+char *getwd(char *);
+int isatty(int);
+int lchown(const char *, uid_t, gid_t) __asm("_" "lchown" "$UNIX2003");
+int link(const char *, const char *);
+int lockf(int, int, off_t) __asm("_" "lockf" "$UNIX2003");
+off_t lseek(int, off_t, int);
+int nice(int) __asm("_" "nice" "$UNIX2003");
+long pathconf(const char *, int);
+int pause(void) __asm("_" "pause" "$UNIX2003");
+int pipe(int [2]);
+ssize_t pread(int, void *, size_t, off_t) __asm("_" "pread" "$UNIX2003");
+ssize_t pwrite(int, const void *, size_t, off_t) __asm("_" "pwrite" "$UNIX2003");
+ssize_t read(int, void *, size_t) __asm("_" "read" "$UNIX2003");
+ssize_t readlink(const char * , char * , size_t);
+int rmdir(const char *);
+int setegid(gid_t);
+int seteuid(uid_t);
+int setgid(gid_t);
+int setpgid(pid_t, pid_t);
+
+pid_t setpgrp(void) __asm("_" "setpgrp" "$UNIX2003");
+
+
+
+int setregid(gid_t, gid_t) __asm("_" "setregid" "$UNIX2003");
+int setreuid(uid_t, uid_t) __asm("_" "setreuid" "$UNIX2003");
+pid_t setsid(void);
+int setuid(uid_t);
+unsigned int
+ sleep(unsigned int) __asm("_" "sleep" "$UNIX2003");
+void swab(const void * , void * , ssize_t);
+int symlink(const char *, const char *);
+void sync(void);
+long sysconf(int);
+pid_t tcgetpgrp(int);
+int tcsetpgrp(int, pid_t);
+int truncate(const char *, off_t);
+char *ttyname(int);
+
+int ttyname_r(int, char *, size_t) __asm("_" "ttyname_r" "$UNIX2003");
+
+
+
+useconds_t
+ ualarm(useconds_t, useconds_t);
+int unlink(const char *);
+int usleep(useconds_t) __asm("_" "usleep" "$UNIX2003");
+pid_t vfork(void);
+ssize_t write(int, const void *, size_t) __asm("_" "write" "$UNIX2003");
+
+extern char *optarg;
+extern int optind, opterr, optopt;
+
+
+# 1 "/usr/include/sys/select.h" 1 3 4
+# 78 "/usr/include/sys/select.h" 3 4
+# 1 "/usr/include/sys/_structs.h" 1 3 4
+# 79 "/usr/include/sys/select.h" 2 3 4
+# 134 "/usr/include/sys/select.h" 3 4
+
+
+
+int pselect(int, fd_set * , fd_set * ,
+ fd_set * , const struct timespec * ,
+ const sigset_t * )
+
+
+
+
+
+
+ __asm("_" "pselect" "$UNIX2003")
+
+
+ ;
+
+
+# 1 "/usr/include/sys/_select.h" 1 3 4
+# 39 "/usr/include/sys/_select.h" 3 4
+int select(int, fd_set * , fd_set * ,
+ fd_set * , struct timeval * )
+
+
+
+
+
+
+ __asm("_" "select" "$UNIX2003")
+
+
+ ;
+# 153 "/usr/include/sys/select.h" 2 3 4
+
+
+# 516 "/usr/include/unistd.h" 2 3 4
+
+void _Exit(int) __attribute__((__noreturn__));
+int accessx_np(const struct accessx_descriptor *, size_t, int *, uid_t);
+int acct(const char *);
+int add_profil(char *, size_t, unsigned long, unsigned int);
+void *brk(const void *);
+int chroot(const char *);
+void endusershell(void);
+int execvP(const char *, const char *, char * const *);
+char *fflagstostr(unsigned long);
+int getdtablesize(void);
+int getdomainname(char *, int);
+int getgrouplist(const char *, int, int *, int *);
+mode_t getmode(const void *, mode_t);
+int getpagesize(void) __attribute__((__const__));
+char *getpass(const char *);
+int getpeereid(int, uid_t *, gid_t *);
+int getpgid(pid_t _pid);
+int getsgroups_np(int *, uuid_t);
+int getsid(pid_t _pid);
+char *getusershell(void);
+int getwgroups_np(int *, uuid_t);
+int initgroups(const char *, int);
+int iruserok(unsigned long, int, const char *, const char *);
+int iruserok_sa(const void *, int, int, const char *, const char *);
+int issetugid(void);
+char *mkdtemp(char *);
+int mknod(const char *, mode_t, dev_t);
+int mkstemp(char *);
+int mkstemps(char *, int);
+char *mktemp(char *);
+int nfssvc(int, void *);
+int profil(char *, size_t, unsigned long, unsigned int);
+int pthread_setugid_np(uid_t, gid_t);
+int pthread_getugid_np( uid_t *, gid_t *);
+int rcmd(char **, int, const char *, const char *, const char *, int *);
+int rcmd_af(char **, int, const char *, const char *, const char *, int *,
+ int);
+int reboot(int);
+int revoke(const char *);
+int rresvport(int *);
+int rresvport_af(int *, int);
+int ruserok(const char *, int, const char *, const char *);
+void *sbrk(int);
+int setdomainname(const char *, int);
+int setgroups(int, const gid_t *);
+void sethostid(long);
+int sethostname(const char *, int);
+
+void setkey(const char *) __asm("_" "setkey" "$UNIX2003");
+
+
+
+int setlogin(const char *);
+void *setmode(const char *);
+int setrgid(gid_t);
+int setruid(uid_t);
+int setsgroups_np(int, const uuid_t);
+void setusershell(void);
+int setwgroups_np(int, const uuid_t);
+int strtofflags(char **, unsigned long *, unsigned long *);
+int swapon(const char *);
+int syscall(int, ...);
+int ttyslot(void);
+int undelete(const char *);
+int unwhiteout(const char *);
+void *valloc(size_t);
+
+extern char *suboptarg;
+int getsubopt(char **, char * const *, char **);
+# 597 "/usr/include/unistd.h" 3 4
+int getattrlist(const char*,void*,void*,size_t,unsigned long) __asm("_" "getattrlist" "$UNIX2003");
+int setattrlist(const char*,void*,void*,size_t,unsigned long) __asm("_" "setattrlist" "$UNIX2003");
+int exchangedata(const char*,const char*,unsigned long);
+int getdirentriesattr(int,void*,void*,size_t,unsigned long*,unsigned long*,unsigned long*,unsigned long);
+int searchfs(const char*,void*,void*,unsigned long,unsigned long,void*);
+
+int fsctl(const char *,unsigned long,void*,unsigned long);
+
+
+extern int optreset;
+
+
+
+# 301 "../include/unixconf.h" 2
+# 122 "../include/global.h" 2
+# 274 "../include/global.h"
+extern long *alloc (unsigned int);
+extern char *dupstr (const char *);
+
+
+
+
+struct version_info {
+ unsigned long incarnation;
+ unsigned long feature_set;
+ unsigned long entity_count;
+ unsigned long struct_sizes1;
+ unsigned long struct_sizes2;
+};
+
+struct savefile_info {
+ unsigned long sfi1;
+ unsigned long sfi2;
+ unsigned long sfi3;
+};
+# 444 "../include/config.h" 2
+# 12 "../include/hack.h" 2
+
+# 1 "../include/lint.h" 1
+# 14 "../include/hack.h" 2
+# 120 "../include/hack.h"
+# 1 "../include/align.h" 1
+# 10 "../include/align.h"
+typedef schar aligntyp;
+
+typedef struct align {
+ aligntyp type;
+ int record;
+} align;
+# 121 "../include/hack.h" 2
+# 1 "../include/dungeon.h" 1
+# 9 "../include/dungeon.h"
+typedef struct d_flags {
+ unsigned town:1;
+ unsigned hellish:1;
+ unsigned maze_like:1;
+ unsigned rogue_like:1;
+ unsigned align:3;
+ unsigned unused:1;
+} d_flags;
+
+typedef struct d_level {
+ xchar dnum;
+ xchar dlevel;
+} d_level;
+
+typedef struct s_level {
+ struct s_level *next;
+ d_level dlevel;
+ char proto[15];
+ char boneid;
+ uchar rndlevs;
+ d_flags flags;
+} s_level;
+
+typedef struct stairway {
+ xchar sx, sy;
+ d_level tolev;
+ char up;
+} stairway;
+# 47 "../include/dungeon.h"
+typedef struct dest_area {
+ xchar lx, ly;
+ xchar hx, hy;
+ xchar nlx, nly;
+ xchar nhx, nhy;
+} dest_area;
+
+typedef struct dungeon {
+ char dname[24];
+ char proto[15];
+ char boneid;
+ d_flags flags;
+ xchar entry_lev;
+ xchar num_dunlevs;
+ xchar dunlev_ureached;
+ int ledger_start,
+ depth_start;
+} dungeon;
+
+
+
+
+
+
+
+typedef struct branch {
+ struct branch *next;
+ int id;
+ int type;
+ d_level end1;
+ d_level end2;
+ boolean end1_up;
+} branch;
+# 153 "../include/dungeon.h"
+struct linfo {
+ unsigned char flags;
+# 172 "../include/dungeon.h"
+};
+# 197 "../include/dungeon.h"
+typedef struct mapseen {
+ struct mapseen *next;
+ branch *br;
+ d_level lev;
+ struct mapseen_feat {
+
+ unsigned nfount:2;
+ unsigned nsink:2;
+ unsigned naltar:2;
+ unsigned nthrone:2;
+
+ unsigned ngrave:2;
+ unsigned ntree:2;
+ unsigned water:2;
+ unsigned lava:2;
+
+ unsigned ice:2;
+
+ unsigned nshop:2;
+ unsigned ntemple:2;
+
+
+ unsigned msalign:2;
+
+ unsigned shoptype:5;
+ } feat;
+ struct mapseen_flags {
+ unsigned unreachable:1;
+ unsigned forgot:1;
+ unsigned knownbones:1;
+ unsigned oracle:1;
+ unsigned sokosolved:1;
+ unsigned bigroom:1;
+ unsigned castle:1;
+ unsigned castletune:1;
+
+ unsigned valley:1;
+ unsigned msanctum:1;
+ unsigned ludios:1;
+ unsigned roguelevel:1;
+ } flags;
+
+ char *custom;
+ unsigned custom_lth;
+ struct mapseen_rooms {
+ unsigned seen:1;
+ unsigned untended:1;
+ } msrooms[(40 +1)*2];
+
+ struct cemetery *final_resting_place;
+} mapseen;
+# 122 "../include/hack.h" 2
+# 1 "../include/monsym.h" 1
+# 123 "../include/hack.h" 2
+# 1 "../include/mkroom.h" 1
+# 11 "../include/mkroom.h"
+struct mkroom {
+ schar lx,hx,ly,hy;
+ schar rtype;
+ schar orig_rtype;
+ schar rlit;
+ schar needfill;
+ schar needjoining;
+ schar doorct;
+ schar fdoor;
+ schar nsubrooms;
+ boolean irregular;
+ struct mkroom *sbrooms[24];
+ struct monst *resident;
+};
+
+struct shclass {
+ const char *name;
+ char symb;
+ int prob;
+ schar shdist;
+
+
+
+ struct itp {
+ int iprob;
+ int itype;
+ } iprobs[6];
+ const char * const *shknms;
+};
+
+extern struct mkroom rooms[(40 +1)*2];
+extern struct mkroom* subrooms;
+
+
+
+
+
+
+
+extern struct mkroom *dnstairs_room, *upstairs_room, *sstairs_room;
+
+extern coord doors[120];
+# 124 "../include/hack.h" 2
+# 1 "../include/objclass.h" 1
+# 12 "../include/objclass.h"
+struct objclass {
+ short oc_name_idx;
+ short oc_descr_idx;
+ char * oc_uname;
+ unsigned oc_name_known:1;
+ unsigned oc_merge:1;
+ unsigned oc_uses_known:1;
+
+
+
+ unsigned oc_pre_discovered:1;
+
+ unsigned oc_magic:1;
+ unsigned oc_charged:1;
+ unsigned oc_unique:1;
+ unsigned oc_nowish:1;
+
+ unsigned oc_big:1;
+
+
+ unsigned oc_tough:1;
+
+ unsigned oc_dir:2;
+# 45 "../include/objclass.h"
+ unsigned oc_material:5;
+# 82 "../include/objclass.h"
+ schar oc_subtyp;
+# 93 "../include/objclass.h"
+ uchar oc_oprop;
+ char oc_class;
+ schar oc_delay;
+ uchar oc_color;
+
+ short oc_prob;
+ unsigned short oc_weight;
+ short oc_cost;
+
+
+ schar oc_wsdam, oc_wldam;
+ schar oc_oc1, oc_oc2;
+
+
+
+
+
+
+ unsigned short oc_nutrition;
+};
+
+struct class_sym {
+ char sym;
+ const char *name;
+ const char *explain;
+};
+
+struct objdescr {
+ const char *oc_name;
+ const char *oc_descr;
+};
+
+extern struct objclass objects[];
+extern struct objdescr obj_descr[];
+# 184 "../include/objclass.h"
+struct fruit {
+ char fname[32];
+ int fid;
+ struct fruit *nextf;
+};
+# 125 "../include/hack.h" 2
+# 1 "../include/youprop.h" 1
+# 9 "../include/youprop.h"
+# 1 "../include/prop.h" 1
+# 89 "../include/prop.h"
+struct prop {
+
+ long extrinsic;
+# 118 "../include/prop.h"
+ long blocked;
+
+
+ long intrinsic;
+# 132 "../include/prop.h"
+};
+# 10 "../include/youprop.h" 2
+# 1 "../include/permonst.h" 1
+# 22 "../include/permonst.h"
+struct attack {
+ uchar aatyp;
+ uchar adtyp, damn, damd;
+};
+# 40 "../include/permonst.h"
+# 1 "../include/monattk.h" 1
+# 41 "../include/permonst.h" 2
+# 1 "../include/monflag.h" 1
+# 42 "../include/permonst.h" 2
+
+struct permonst {
+ const char *mname;
+ char mlet;
+ schar mlevel,
+ mmove,
+ ac,
+ mr;
+ aligntyp maligntyp;
+ unsigned short geno;
+ struct attack mattk[6];
+ unsigned short cwt,
+ cnutrit;
+ uchar msound;
+ uchar msize;
+ uchar mresists;
+ uchar mconveys;
+ unsigned long mflags1,
+ mflags2;
+ unsigned short mflags3;
+
+ uchar mcolor;
+
+};
+
+extern struct permonst
+ mons[];
+# 11 "../include/youprop.h" 2
+# 1 "../include/mondata.h" 1
+# 12 "../include/youprop.h" 2
+# 1 "../include/pm.h" 1
+# 13 "../include/youprop.h" 2
+# 126 "../include/hack.h" 2
+# 1 "../include/wintype.h" 1
+# 10 "../include/wintype.h"
+typedef int winid;
+
+
+typedef union any {
+ genericptr_t a_void;
+ struct obj *a_obj;
+ struct monst *a_monst;
+ int a_int;
+ char a_char;
+ schar a_schar;
+ unsigned int a_uint;
+ long a_long;
+ unsigned long a_ulong;
+ int *a_iptr;
+ long *a_lptr;
+ unsigned long *a_ulptr;
+ unsigned *a_uptr;
+
+} anything;
+# 51 "../include/wintype.h"
+typedef struct mi {
+ anything item;
+ long count;
+} menu_item;
+# 127 "../include/hack.h" 2
+# 1 "../include/context.h" 1
+# 23 "../include/context.h"
+struct dig_info {
+ int effort;
+ d_level level;
+ coord pos;
+ long lastdigtime;
+ boolean down, chew, warned, quiet;
+};
+
+struct tin_info {
+ struct obj *tin;
+ unsigned o_id;
+ int usedtime, reqtime;
+};
+
+struct book_info {
+ struct obj *book;
+ unsigned o_id;
+ schar delay;
+};
+
+struct takeoff_info {
+ long mask;
+ long what;
+ int delay;
+ boolean cancelled_don;
+ char disrobing[30 +1];
+};
+
+struct victual_info {
+ struct obj *piece;
+
+
+
+ unsigned o_id;
+
+ int usedtime,
+ reqtime;
+ int nmod;
+ unsigned canchoke:1;
+
+
+ unsigned fullwarn:1;
+ unsigned eating:1;
+ unsigned doreset:1;
+};
+
+struct warntype_info {
+ unsigned long obj;
+ unsigned long polyd;
+ struct permonst *species;
+ short speciesidx;
+};
+
+struct polearm_info {
+ struct monst *hitmon;
+ unsigned m_id;
+};
+
+struct tribute_info {
+ size_t tributesz;
+ boolean enabled;
+ unsigned bookstock:1;
+
+
+};
+
+struct context_info {
+ unsigned ident;
+ unsigned no_of_wizards;
+ unsigned run;
+
+
+ unsigned startingpet_mid;
+ int current_fruit;
+ int warnlevel;
+ int rndencode;
+ long next_attrib_check;
+ long stethoscope_move;
+ short stethoscope_movement;
+ boolean travel;
+ boolean travel1;
+ boolean forcefight;
+ boolean nopick;
+ boolean made_amulet;
+ boolean mon_moving;
+ boolean move;
+ boolean mv;
+ boolean bypasses;
+ boolean botl;
+ boolean botlx;
+ boolean door_opened;
+ struct dig_info digging;
+ struct victual_info victual;
+ struct tin_info tin;
+ struct book_info spbook;
+ struct takeoff_info takeoff;
+ struct warntype_info warntype;
+ struct polearm_info polearm;
+ struct tribute_info tribute;
+};
+
+extern struct context_info context;
+# 128 "../include/hack.h" 2
+# 1 "../include/decl.h" 1
+# 11 "../include/decl.h"
+extern int (*occupation)(void);
+extern int (*afternmv)(void);
+
+extern const char *hname;
+extern int hackpid;
+
+extern int locknum;
+
+
+
+
+
+extern char SAVEF[];
+
+
+
+
+extern int bases[18];
+
+extern int multi;
+extern const char *multi_reason;
+extern int nroom;
+extern int nsubroom;
+extern int occtime;
+
+
+extern nhsym warnsyms[6];
+extern int warn_obj_cnt;
+
+extern int x_maze_max, y_maze_max;
+extern int otg_temp;
+
+extern int in_doagain;
+
+extern struct dgn_topology {
+ d_level d_oracle_level;
+ d_level d_bigroom_level;
+ d_level d_rogue_level;
+ d_level d_medusa_level;
+ d_level d_stronghold_level;
+ d_level d_valley_level;
+ d_level d_wiz1_level;
+ d_level d_wiz2_level;
+ d_level d_wiz3_level;
+ d_level d_juiblex_level;
+ d_level d_orcus_level;
+ d_level d_baalzebub_level;
+ d_level d_asmodeus_level;
+ d_level d_portal_level;
+ d_level d_sanctum_level;
+ d_level d_earth_level;
+ d_level d_water_level;
+ d_level d_fire_level;
+ d_level d_air_level;
+ d_level d_astral_level;
+ xchar d_tower_dnum;
+ xchar d_sokoban_dnum;
+ xchar d_mines_dnum, d_quest_dnum;
+ d_level d_qstart_level, d_qlocate_level, d_nemesis_level;
+ d_level d_knox_level;
+ d_level d_mineend_level;
+ d_level d_sokoend_level;
+} dungeon_topology;
+# 106 "../include/decl.h"
+extern stairway dnstair, upstair;
+
+
+
+
+
+extern stairway dnladder, upladder;
+
+
+
+
+
+extern stairway sstairs;
+
+extern dest_area updest, dndest;
+
+extern coord inv_pos;
+extern dungeon dungeons[];
+extern s_level *sp_levchn;
+
+
+# 1 "../include/quest.h" 1
+# 10 "../include/quest.h"
+struct q_score {
+ unsigned first_start:1;
+ unsigned met_leader:1;
+ unsigned not_ready:3;
+ unsigned pissed_off:1;
+ unsigned got_quest:1;
+
+ unsigned first_locate:1;
+ unsigned met_intermed:1;
+ unsigned got_final:1;
+
+ unsigned made_goal:3;
+ unsigned met_nemesis:1;
+ unsigned killed_nemesis:1;
+ unsigned in_battle:1;
+
+ unsigned cheater:1;
+ unsigned touched_artifact:1;
+ unsigned offered_artifact:1;
+ unsigned got_thanks:1;
+
+
+
+
+ unsigned ldrgend:2;
+ unsigned nemgend:2;
+ unsigned godgend:2;
+
+
+
+ unsigned leader_is_dead:1;
+ unsigned leader_m_id;
+};
+# 128 "../include/decl.h" 2
+extern struct q_score quest_status;
+
+extern char pl_character[32];
+extern char pl_race;
+
+extern char pl_fruit[32];
+extern struct fruit *ffruit;
+
+extern char tune[6];
+
+
+extern struct linfo level_info[(16 * 32)];
+
+extern struct sinfo {
+ int gameover;
+ int stopprint;
+
+ volatile int done_hup;
+
+ int preserve_locks;
+
+ int something_worth_saving;
+ int panicking;
+ int exiting;
+ int in_moveloop;
+ int in_impossible;
+
+ int in_paniclog;
+
+ int wizkit_wishing;
+} program_state;
+
+extern boolean restoring;
+
+extern const char quitchars[];
+extern const char vowels[];
+extern const char ynchars[];
+extern const char ynqchars[];
+extern const char ynaqchars[];
+extern const char ynNaqchars[];
+extern long yn_number;
+
+extern const char disclosure_options[];
+
+extern int smeq[];
+extern int doorindex;
+extern char *save_cm;
+
+extern struct kinfo {
+ struct kinfo *next;
+ int id;
+ int format;
+
+
+
+ char name[256];
+} killer;
+
+extern long done_money;
+extern const char *configfile;
+extern char lastconfigfile[256];
+extern char plname[32];
+extern char dogname[];
+extern char catname[];
+extern char horsename[];
+extern char preferred_pet;
+extern const char *occtxt;
+extern const char *nomovemsg;
+extern char lock[];
+
+extern const schar xdir[], ydir[], zdir[];
+
+extern schar tbx, tby;
+
+extern struct multishot { int n, i; short o; boolean s; } m_shot;
+
+extern long moves, monstermoves;
+extern long wailmsg;
+
+extern boolean in_mklev;
+extern boolean stoned;
+extern boolean unweapon;
+extern boolean mrg_to_wielded;
+extern boolean defer_see_monsters;
+
+extern boolean in_steed_dismounting;
+
+extern const int shield_static[];
+
+# 1 "../include/spell.h" 1
+# 15 "../include/spell.h"
+struct spell {
+ short sp_id;
+ xchar sp_lev;
+ int sp_know;
+};
+# 218 "../include/decl.h" 2
+extern struct spell spl_book[];
+
+# 1 "../include/color.h" 1
+# 54 "../include/color.h"
+struct menucoloring {
+ struct nhregex *match;
+ char *origstr;
+ int color, attr;
+ struct menucoloring *next;
+};
+# 221 "../include/decl.h" 2
+
+extern const int zapcolors[];
+
+
+extern const struct class_sym def_oc_syms[18];
+extern uchar oc_syms[18];
+extern const struct class_sym def_monsyms[61];
+extern uchar monsyms[61];
+
+# 1 "../include/obj.h" 1
+# 12 "../include/obj.h"
+union vptrs {
+ struct obj *v_nexthere;
+ struct obj *v_ocontainer;
+ struct monst *v_ocarry;
+};
+
+
+
+
+
+struct oextra {
+ char *oname;
+ struct monst *omonst;
+ unsigned *omid;
+ long *olong;
+ char *omailcmd;
+};
+
+struct obj {
+ struct obj *nobj;
+ union vptrs v;
+
+
+
+
+ struct obj *cobj;
+ unsigned o_id;
+ xchar ox,oy;
+ short otyp;
+ unsigned owt;
+ long quan;
+
+ schar spe;
+# 54 "../include/obj.h"
+ char oclass;
+ char invlet;
+ char oartifact;
+
+ xchar where;
+# 68 "../include/obj.h"
+ xchar timed;
+
+ unsigned cursed:1;
+ unsigned blessed:1;
+ unsigned unpaid:1;
+ unsigned no_charge:1;
+ unsigned known:1;
+ unsigned dknown:1;
+ unsigned bknown:1;
+ unsigned rknown:1;
+
+ unsigned oeroded:2;
+ unsigned oeroded2:2;
+
+
+
+
+
+ unsigned oerodeproof:1;
+ unsigned olocked:1;
+ unsigned obroken:1;
+
+ unsigned otrapped:1;
+
+
+
+ unsigned recharged:3;
+
+ unsigned lamplit:1;
+ unsigned globby:1;
+ unsigned greased:1;
+ unsigned nomerge:1;
+ unsigned was_thrown:1;
+
+ unsigned in_use:1;
+ unsigned bypass:1;
+ unsigned cknown:1;
+ unsigned lknown:1;
+
+
+ int corpsenm;
+
+
+
+
+ int usecount;
+
+ unsigned oeaten;
+ long age;
+ long owornmask;
+ struct oextra *oextra;
+};
+# 231 "../include/decl.h" 2
+extern struct obj *invent,
+ *uarm, *uarmc, *uarmh, *uarms, *uarmg, *uarmf,
+ *uarmu,
+ *uskin, *uamul, *uleft, *uright, *ublindf,
+ *uwep, *uswapwep, *uquiver;
+
+extern struct obj *uchain;
+extern struct obj *uball;
+extern struct obj *migrating_objs;
+extern struct obj *billobjs;
+extern struct obj *current_wand, *thrownobj, *kickedobj;
+
+extern struct obj zeroobj;
+extern anything zeroany;
+
+# 1 "../include/you.h" 1
+# 9 "../include/you.h"
+# 1 "../include/attrib.h" 1
+# 39 "../include/attrib.h"
+struct attribs {
+ schar a[6];
+};
+# 10 "../include/you.h" 2
+# 1 "../include/monst.h" 1
+# 39 "../include/monst.h"
+# 1 "../include/mextra.h" 1
+# 66 "../include/mextra.h"
+struct fakecorridor {
+ xchar fx, fy, ftyp;
+};
+
+struct egd {
+ int fcbeg, fcend;
+ int vroom;
+ xchar gdx, gdy;
+ xchar ogx, ogy;
+ d_level gdlevel;
+ xchar warncnt;
+ unsigned gddone:1;
+ unsigned witness:2;
+ unsigned unused:5;
+ struct fakecorridor fakecorr[(21 +80)];
+};
+
+
+
+
+struct epri {
+ aligntyp shralign;
+ schar shroom;
+ coord shrpos;
+ d_level shrlevel;
+ long intone_time,
+ enter_time,
+ hostile_time,
+ peaceful_time;
+};
+# 105 "../include/mextra.h"
+struct bill_x {
+ unsigned bo_id;
+ boolean useup;
+ long price;
+ long bquan;
+};
+
+struct eshk {
+ long robbed;
+ long credit;
+ long debit;
+ long loan;
+ int shoptype;
+ schar shoproom;
+ schar unused;
+ boolean following;
+ boolean surcharge;
+ boolean dismiss_kops;
+ coord shk;
+ coord shd;
+ d_level shoplevel;
+ int billct;
+ struct bill_x bill[200];
+ struct bill_x *bill_p;
+ int visitct;
+ char customer[32];
+ char shknam[32];
+};
+
+
+
+
+struct emin {
+ aligntyp min_align;
+ boolean renegade;
+};
+# 155 "../include/mextra.h"
+struct edog {
+ long droptime;
+ unsigned dropdist;
+ int apport;
+ long whistletime;
+ long hungrytime;
+ coord ogoal;
+ int abuse;
+ int revivals;
+ int mhpmax_penalty;
+ unsigned killed_by_u:1;
+};
+
+
+
+
+struct mextra {
+ char *mname;
+ struct egd *egd;
+ struct epri *epri;
+ struct eshk *eshk;
+ struct emin *emin;
+ struct edog *edog;
+ int mcorpsenm;
+};
+# 40 "../include/monst.h" 2
+
+
+struct monst {
+ struct monst *nmon;
+ struct permonst *data;
+ unsigned m_id;
+ short mnum;
+ short cham;
+ short movement;
+ uchar m_lev;
+ aligntyp malign;
+
+ xchar mx, my;
+ xchar mux, muy;
+
+ coord mtrack[4];
+ int mhp, mhpmax;
+ unsigned mappearance;
+ uchar m_ap_type;
+
+
+
+
+
+
+ schar mtame;
+ unsigned short mintrinsics;
+ int mspec_used;
+
+ unsigned female:1;
+ unsigned minvis:1;
+ unsigned invis_blkd:1;
+ unsigned perminvis:1;
+ unsigned mcan:1;
+ unsigned mburied:1;
+ unsigned mundetected:1;
+
+
+
+
+ unsigned mcansee:1;
+
+ unsigned mspeed:2;
+ unsigned permspeed:2;
+ unsigned mrevived:1;
+ unsigned mcloned:1;
+ unsigned mavenge:1;
+ unsigned mflee:1;
+
+ unsigned mfleetim:7;
+ unsigned msleeping:1;
+
+ unsigned mblinded:7;
+ unsigned mstun:1;
+
+ unsigned mfrozen:7;
+ unsigned mcanmove:1;
+
+ unsigned mconf:1;
+ unsigned mpeaceful:1;
+ unsigned mtrapped:1;
+ unsigned mleashed:1;
+ unsigned isshk:1;
+ unsigned isminion:1;
+ unsigned isgd:1;
+ unsigned ispriest:1;
+
+ unsigned iswiz:1;
+ unsigned wormno:5;
+
+
+
+
+ unsigned long mstrategy;
+# 135 "../include/monst.h"
+ long mtrapseen;
+ long mlstmv;
+ long mspare1;
+ struct obj *minvent;
+
+ struct obj *mw;
+ long misc_worn_check;
+ xchar weapon_check;
+
+ int meating;
+ struct mextra *mextra;
+};
+# 11 "../include/you.h" 2
+
+
+
+# 1 "../include/skills.h" 1
+# 99 "../include/skills.h"
+struct skills {
+ xchar skill;
+ xchar max_skill;
+ unsigned short advance;
+};
+# 113 "../include/skills.h"
+struct def_skill {
+ xchar skill;
+ xchar skmax;
+};
+# 15 "../include/you.h" 2
+
+
+
+struct RoleName {
+ const char *m;
+ const char *f;
+};
+
+struct RoleAdvance {
+
+ xchar infix, inrnd;
+ xchar lofix, lornd;
+ xchar hifix, hirnd;
+};
+
+struct u_have {
+ unsigned amulet:1;
+ unsigned bell:1;
+ unsigned book:1;
+ unsigned menorah:1;
+ unsigned questart:1;
+ unsigned unused:3;
+};
+
+struct u_event {
+ unsigned minor_oracle:1;
+ unsigned major_oracle:1;
+ unsigned read_tribute:1;
+ unsigned qcalled:1;
+ unsigned qexpelled:1;
+ unsigned qcompleted:1;
+ unsigned uheard_tune:2;
+
+ unsigned uopened_dbridge:1;
+ unsigned invoked:1;
+ unsigned gehennom_entered:1;
+ unsigned uhand_of_elbereth:2;
+ unsigned udemigod:1;
+ unsigned uvibrated:1;
+ unsigned ascended:1;
+};
+
+struct u_achieve {
+ unsigned amulet:1;
+ unsigned bell:1;
+ unsigned book:1;
+ unsigned menorah:1;
+ unsigned enter_gehennom:1;
+ unsigned ascended:1;
+ unsigned mines_luckstone:1;
+ unsigned finish_sokoban:1;
+
+ unsigned killed_medusa:1;
+};
+
+struct u_realtime {
+ long realtime;
+ time_t restored;
+ time_t endtime;
+};
+
+
+
+
+
+
+struct u_conduct {
+ long unvegetarian;
+ long unvegan;
+ long food;
+ long gnostic;
+ long weaphit;
+ long killer;
+ long literate;
+ long polypiles;
+ long polyselfs;
+ long wishes;
+ long wisharti;
+
+};
+
+struct u_roleplay {
+ boolean blind;
+ boolean nudist;
+ long numbones;
+};
+
+
+struct Role {
+
+ struct RoleName name;
+ struct RoleName rank[9];
+ const char *lgod, *ngod, *cgod;
+ const char *filecode;
+ const char *homebase;
+ const char *intermed;
+
+
+ short malenum,
+ femalenum,
+ petnum,
+ ldrnum,
+ guardnum,
+ neminum,
+ enemy1num,
+ enemy2num;
+ char enemy1sym,
+ enemy2sym;
+ short questarti;
+
+
+ short allow;
+# 138 "../include/you.h"
+ xchar attrbase[6];
+ xchar attrdist[6];
+ struct RoleAdvance hpadv;
+ struct RoleAdvance enadv;
+ xchar xlev;
+ xchar initrecord;
+
+
+ int spelbase;
+ int spelheal;
+ int spelshld;
+ int spelarmr;
+ int spelstat;
+ int spelspec;
+ int spelsbon;
+# 165 "../include/you.h"
+};
+
+extern const struct Role roles[];
+extern struct Role urole;
+# 179 "../include/you.h"
+struct Race {
+
+ const char *noun;
+ const char *adj;
+ const char *coll;
+ const char *filecode;
+ struct RoleName individual;
+
+
+ short malenum,
+ femalenum,
+ mummynum,
+ zombienum;
+
+
+ short allow;
+ short selfmask,
+ lovemask,
+ hatemask;
+
+
+ xchar attrmin[6];
+ xchar attrmax[6];
+ struct RoleAdvance hpadv;
+ struct RoleAdvance enadv;
+# 217 "../include/you.h"
+};
+
+extern const struct Race races[];
+extern struct Race urace;
+
+
+
+
+struct Gender {
+ const char *adj;
+ const char *he;
+ const char *him;
+ const char *his;
+ const char *filecode;
+ short allow;
+};
+
+
+
+extern const struct Gender genders[];
+# 246 "../include/you.h"
+struct Align {
+ const char *noun;
+ const char *adj;
+ const char *filecode;
+ short allow;
+ aligntyp value;
+};
+
+
+extern const struct Align aligns[];
+
+
+
+struct you {
+ xchar ux, uy;
+ schar dx, dy, dz;
+ schar di;
+ xchar tx, ty;
+ xchar ux0, uy0;
+ d_level uz, uz0;
+ d_level utolev;
+ uchar utotype;
+ boolean umoved;
+ int last_str_turn;
+
+ int ulevel;
+ int ulevelmax;
+ unsigned utrap;
+ unsigned utraptype;
+
+
+
+
+
+
+ char urooms[5];
+ char urooms0[5];
+ char uentered[5];
+ char ushops[5];
+ char ushops0[5];
+ char ushops_entered[5];
+ char ushops_left[5];
+
+ int uhunger;
+ unsigned uhs;
+
+ struct prop uprops[(67)+1];
+
+ unsigned umconf;
+ unsigned usick_type:2;
+
+
+
+
+
+ int nv_range;
+ int xray_range;
+
+
+
+
+
+
+ int bglyph;
+ int cglyph;
+ int bc_order;
+ int bc_felt;
+
+ int umonster;
+ int umonnum;
+
+ int mh, mhmax, mtimedone;
+ struct attribs macurr,
+ mamax;
+ int ulycn;
+
+ unsigned ucreamed;
+ unsigned uswldtim;
+
+ unsigned uswallow:1;
+ unsigned uinwater:1;
+
+ unsigned uundetected:1;
+ unsigned mfemale:1;
+ unsigned uinvulnerable:1;
+ unsigned uburied:1;
+ unsigned uedibility:1;
+
+
+ unsigned udg_cnt;
+ struct u_achieve uachieve;
+ struct u_event uevent;
+ struct u_have uhave;
+ struct u_conduct uconduct;
+ struct u_roleplay uroleplay;
+ struct attribs acurr,
+ aexe,
+ abon,
+ amax,
+ atemp,
+ atime;
+ align ualign;
+
+
+
+ aligntyp ualignbase[2];
+ schar uluck, moreluck;
+
+
+
+
+ schar uhitinc;
+ schar udaminc;
+ schar uac;
+ uchar uspellprot;
+ uchar usptime;
+ uchar uspmtime;
+ int uhp,uhpmax;
+ int uen, uenmax;
+ xchar uhpinc[30], ueninc[30];
+ int ugangr;
+ int ugifts;
+ int ublessed, ublesscnt;
+ long umoney0;
+ long uspare1;
+ long uexp, urexp;
+ long ucleansed;
+ long usleep;
+ int uinvault;
+ struct monst *ustuck;
+ struct monst *usteed;
+ long ugallop;
+ int urideturns;
+ int umortality;
+ int ugrave_arise;
+ int weapon_slots;
+ int skills_advanced;
+ xchar skill_record[60];
+ struct skills weapon_skills[(38 +1)];
+ boolean twoweap;
+
+};
+# 247 "../include/decl.h" 2
+extern struct you u;
+extern time_t ubirthday;
+extern struct u_realtime urealtime;
+
+# 1 "../include/onames.h" 1
+# 252 "../include/decl.h" 2
+
+
+
+
+extern struct monst youmonst;
+extern struct monst *mydogs, *migrating_mons;
+
+extern struct mvitals {
+ uchar born;
+ uchar died;
+ uchar mvflags;
+} mvitals[381];
+
+extern struct c_color_names {
+ const char *const c_black, *const c_amber, *const c_golden,
+ *const c_light_blue,*const c_red, *const c_green,
+ *const c_silver, *const c_blue, *const c_purple,
+ *const c_white, *const c_orange;
+} c_color_names;
+# 284 "../include/decl.h"
+extern const char *c_obj_colors[];
+
+extern struct c_common_strings {
+ const char *const c_nothing_happens, *const c_thats_enough_tries,
+ *const c_silly_thing_to, *const c_shudder_for_moment,
+ *const c_something, *const c_Something,
+ *const c_You_can_move_again,
+ *const c_Never_mind, *c_vision_clears,
+ *const c_the_your[2];
+} c_common_strings;
+# 306 "../include/decl.h"
+extern const char *materialnm[];
+# 322 "../include/decl.h"
+extern boolean vision_full_recalc;
+extern char **viz_array;
+
+
+extern winid WIN_MESSAGE;
+
+
+
+extern winid WIN_MAP, WIN_INVEN;
+# 341 "../include/decl.h"
+extern char toplines[];
+
+extern struct tc_gbl_data {
+ char *tc_AS, *tc_AE;
+ int tc_LI, tc_CO;
+} tc_gbl_data;
+
+
+
+
+
+
+
+extern const char * const monexplain[], invisexplain[], * const oclass_names[];
+# 384 "../include/decl.h"
+extern char *fqn_prefix[10];
+
+
+
+
+extern struct savefile_info sfcap, sfrestinfo, sfsaveinfo;
+
+struct autopickup_exception {
+ char *pattern;
+ boolean grab;
+ struct autopickup_exception *next;
+};
+
+
+extern char *ARGV0;
+# 129 "../include/hack.h" 2
+# 1 "../include/timeout.h" 1
+# 11 "../include/timeout.h"
+typedef void (*timeout_proc) (union any *, long);
+# 37 "../include/timeout.h"
+typedef struct fe {
+ struct fe *next;
+ long timeout;
+ unsigned long tid;
+ short kind;
+ short func_index;
+ anything arg;
+ unsigned needs_fixup:1;
+} timer_element;
+# 130 "../include/hack.h" 2
+
+ extern coord bhitpos;
+# 155 "../include/hack.h"
+# 1 "../include/trap.h" 1
+# 12 "../include/trap.h"
+union vlaunchinfo {
+ short v_launch_otyp;
+ coord v_launch2;
+ uchar v_conjoined;
+ short v_tnote;
+};
+
+struct trap {
+ struct trap *ntrap;
+ xchar tx,ty;
+ d_level dst;
+ coord launch;
+ unsigned ttyp:5;
+ unsigned tseen:1;
+ unsigned once:1;
+ unsigned madeby_u:1;
+
+
+
+
+
+
+ union vlaunchinfo vl;
+
+
+
+
+};
+
+extern struct trap *ftrap;
+# 156 "../include/hack.h" 2
+# 1 "../include/flag.h" 1
+# 18 "../include/flag.h"
+struct flag {
+ boolean acoustics;
+ boolean autodig;
+ boolean autoquiver;
+ boolean autoopen;
+ boolean beginner;
+ boolean biff;
+ boolean bones;
+ boolean confirm;
+ boolean dark_room;
+ boolean debug;
+
+ boolean end_own;
+ boolean explore;
+
+ boolean female;
+ boolean friday13;
+ boolean help;
+ boolean ignintr;
+ boolean ins_chkpt;
+ boolean invlet_constant;
+ boolean legacy;
+ boolean lit_corridor;
+ boolean nap;
+ boolean null;
+ boolean perm_invent;
+ boolean pickup;
+ boolean pickup_thrown;
+ boolean pushweapon;
+ boolean rest_on_space;
+ boolean safe_dog;
+ boolean showexp;
+ boolean showscore;
+ boolean silent;
+ boolean sortloot;
+ boolean sortpack;
+ boolean sparkle;
+ boolean standout;
+ boolean time;
+ boolean tombstone;
+ boolean verbose;
+ int end_top, end_around;
+ unsigned moonphase;
+ unsigned long suppress_alert;
+
+
+ int paranoia_bits;
+
+
+
+
+
+
+
+ int pickup_burden;
+ int pile_limit;
+ char inv_order[18];
+ char pickup_types[18];
+
+
+
+
+
+ char end_disclose[6 + 1];
+
+ char menu_style;
+ boolean made_fruit;
+# 112 "../include/flag.h"
+ int initrole;
+ int initrace;
+ int initgend;
+ int initalign;
+ int randomall;
+ int pantheon;
+
+ boolean lootabc;
+ boolean showrace;
+ boolean travelcmd;
+ int runmode;
+};
+# 167 "../include/flag.h"
+struct instance_flags {
+
+
+
+
+
+ int in_lava_effects;
+ int last_msg;
+ int purge_monsters;
+ int override_ID;
+ int suppress_price;
+ coord travelcc;
+ boolean window_inited;
+ boolean vision_inited;
+ boolean sanity_check;
+ boolean mon_polycontrol;
+
+ unsigned msg_history;
+ int menu_headings;
+ int *opt_booldup;
+ int *opt_compdup;
+
+ boolean altmeta;
+
+ boolean cbreak;
+ boolean deferred_X;
+ boolean num_pad;
+ boolean news;
+ boolean mention_walls;
+ boolean menu_tab_sep;
+ boolean menu_head_objsym;
+ boolean menu_requested;
+
+ boolean renameallowed;
+ boolean renameinprogress;
+ boolean toptenwin;
+ boolean zerocomp;
+ boolean rlecomp;
+ uchar num_pad_mode;
+ boolean echo;
+ boolean use_menu_color;
+# 216 "../include/flag.h"
+ uchar bouldersym;
+
+ char prevmsg_window;
+ boolean extmenu;
+# 257 "../include/flag.h"
+ boolean wc_color;
+ boolean wc_hilite_pet;
+ boolean wc_ascii_map;
+ boolean wc_tiled_map;
+ boolean wc_preload_tiles;
+ int wc_tile_width;
+ int wc_tile_height;
+ char *wc_tile_file;
+ boolean wc_inverse;
+ int wc_align_status;
+ int wc_align_message;
+ int wc_vary_msgcount;
+ char *wc_foregrnd_menu;
+ char *wc_backgrnd_menu;
+ char *wc_foregrnd_message;
+ char *wc_backgrnd_message;
+ char *wc_foregrnd_status;
+ char *wc_backgrnd_status;
+ char *wc_foregrnd_text;
+ char *wc_backgrnd_text;
+ char *wc_font_map;
+ char *wc_font_message;
+ char *wc_font_status;
+ char *wc_font_menu;
+ char *wc_font_text;
+ int wc_fontsiz_map;
+ int wc_fontsiz_message;
+ int wc_fontsiz_status;
+ int wc_fontsiz_menu;
+ int wc_fontsiz_text;
+ int wc_scroll_amount;
+ int wc_scroll_margin;
+
+ int wc_map_mode;
+
+ int wc_player_selection;
+ boolean wc_splash_screen;
+ boolean wc_popup_dialog;
+
+ boolean wc_eight_bit_input;
+ boolean wc_mouse_support;
+ boolean wc2_fullscreen;
+ boolean wc2_softkeyboard;
+ boolean wc2_wraptext;
+ boolean wc2_selectsaved;
+ boolean wc2_darkgray;
+ boolean cmdassist;
+ boolean clicklook;
+ boolean obsolete;
+ struct autopickup_exception *autopickup_exceptions[2];
+# 316 "../include/flag.h"
+ unsigned save_uinwater:1;
+ unsigned save_uburied:1;
+};
+# 339 "../include/flag.h"
+extern struct flag flags;
+
+
+
+extern struct instance_flags iflags;
+# 381 "../include/flag.h"
+struct func_tab;
+# 391 "../include/flag.h"
+struct cmd {
+ unsigned serialno;
+ boolean num_pad;
+ boolean pcHack_compat;
+ boolean phone_layout;
+ boolean swap_yz;
+ char move_W, move_NW, move_N, move_NE,
+ move_E, move_SE, move_S, move_SW;
+ const char *dirchars;
+ const char *alphadirchars;
+ const struct func_tab *commands[256];
+};
+
+extern struct cmd Cmd;
+# 157 "../include/hack.h" 2
+# 1 "../include/rm.h" 1
+# 227 "../include/rm.h"
+struct symdef {
+ uchar sym;
+ const char *explanation;
+
+ uchar color;
+
+};
+
+struct symparse {
+ unsigned range;
+
+
+
+
+
+ int idx;
+ const char *name;
+};
+
+
+
+
+
+
+
+struct symsetentry {
+ struct symsetentry *next;
+ char *name;
+ char *desc;
+ int idx;
+ int handling;
+ unsigned nocolor:1;
+ unsigned primary:1;
+ unsigned rogue:1;
+
+};
+# 281 "../include/rm.h"
+extern const struct symdef defsyms[95];
+extern const struct symdef def_warnsyms[6];
+extern int currentgraphics;
+extern nhsym showsyms[];
+
+extern struct symsetentry symset[2];
+# 388 "../include/rm.h"
+struct rm {
+ int glyph;
+ schar typ;
+ uchar seenv;
+ unsigned flags:5;
+ unsigned horizontal:1;
+ unsigned lit:1;
+ unsigned waslit:1;
+
+ unsigned roomno:6;
+ unsigned edge:1;
+ unsigned candig:1;
+};
+# 507 "../include/rm.h"
+struct damage {
+ struct damage *next;
+ long when, cost;
+ coord place;
+ schar typ;
+};
+
+
+
+struct cemetery {
+ struct cemetery *next;
+
+ char who[32 + 4*(1+3) + 1];
+
+ char how[100 + 1];
+
+ char when[4+2+2 + 2+2+2 + 1];
+
+ schar frpx, frpy;
+ boolean bonesknown;
+};
+
+struct levelflags {
+ uchar nfountains;
+ uchar nsinks;
+
+ unsigned has_shop:1;
+ unsigned has_vault:1;
+ unsigned has_zoo:1;
+ unsigned has_court:1;
+ unsigned has_morgue:1;
+ unsigned has_beehive:1;
+ unsigned has_barracks:1;
+ unsigned has_temple:1;
+
+ unsigned has_swamp:1;
+ unsigned noteleport:1;
+ unsigned hardfloor:1;
+ unsigned nommap:1;
+ unsigned hero_memory:1;
+ unsigned shortsighted:1;
+ unsigned graveyard:1;
+ unsigned sokoban_rules:1;
+
+ unsigned is_maze_lev:1;
+ unsigned is_cavernous_lev:1;
+ unsigned arboreal:1;
+ unsigned wizard_bones:1;
+
+
+ unsigned corrmaze:1;
+
+};
+
+typedef struct
+{
+ struct rm locations[80][21];
+
+ struct obj *objects[80][21];
+ struct monst *monsters[80][21];
+
+
+
+
+
+
+ struct obj *objlist;
+ struct obj *buriedobjlist;
+ struct monst *monlist;
+ struct damage *damagelist;
+ struct cemetery *bonesinfo;
+ struct levelflags flags;
+}
+dlevel_t;
+
+extern schar lastseentyp[80][21];
+
+extern dlevel_t level;
+# 158 "../include/hack.h" 2
+# 1 "../include/vision.h" 1
+# 159 "../include/hack.h" 2
+# 1 "../include/display.h" 1
+# 160 "../include/hack.h" 2
+# 1 "../include/engrave.h" 1
+# 10 "../include/engrave.h"
+struct engr {
+ struct engr *nxt_engr;
+ char *engr_txt;
+ xchar engr_x, engr_y;
+ unsigned engr_lth;
+ long engr_time;
+ xchar engr_type;
+
+
+
+
+
+
+
+};
+# 161 "../include/hack.h" 2
+# 1 "../include/rect.h" 1
+# 10 "../include/rect.h"
+typedef struct nhrect {
+ xchar lx, ly;
+ xchar hx, hy;
+} NhRect;
+# 162 "../include/hack.h" 2
+# 1 "../include/region.h" 1
+# 12 "../include/region.h"
+typedef boolean (*callback_proc) (genericptr_t, genericptr_t);
+# 34 "../include/region.h"
+typedef struct {
+ NhRect bounding_box;
+ NhRect *rects;
+ short nrects;
+ boolean attach_2_u;
+ unsigned int attach_2_m;
+
+ const char* enter_msg;
+ const char* leave_msg;
+ long ttl;
+ short expire_f;
+ short can_enter_f;
+
+ short enter_f;
+ short can_leave_f;
+
+ short leave_f;
+ short inside_f;
+
+ unsigned int player_flags;
+ unsigned int* monsters;
+ short n_monst;
+ short max_monst;
+
+
+
+
+
+ boolean visible;
+ int glyph;
+ anything arg;
+
+} NhRegion;
+# 163 "../include/hack.h" 2
+# 177 "../include/hack.h"
+# 1 "../include/extern.h" 1
+# 15 "../include/extern.h"
+extern char *fmt_ptr (const void *);
+
+
+
+
+
+
+
+extern void moveloop (int);
+extern void stop_occupation(void);
+extern void display_gamewindows(void);
+extern void newgame(void);
+extern void welcome (int);
+extern time_t get_realtime(void);
+
+
+
+extern int doapply(void);
+extern int dorub(void);
+extern int dojump(void);
+extern int jump (int);
+extern int number_leashed(void);
+extern void o_unleash (struct obj *);
+extern void m_unleash (struct monst *,int);
+extern void unleash_all(void);
+extern boolean next_to_u(void);
+extern struct obj *get_mleash (struct monst *);
+extern const char *beautiful(void);
+extern void check_leash (int,int);
+extern boolean um_dist (int,int,int);
+extern boolean snuff_candle (struct obj *);
+extern boolean snuff_lit (struct obj *);
+extern boolean catch_lit (struct obj *);
+extern void use_unicorn_horn (struct obj *);
+extern boolean tinnable (struct obj *);
+extern void reset_trapset(void);
+extern void fig_transform (union any *, long);
+extern int unfixable_trouble_count (int);
+
+
+
+extern void init_artifacts(void);
+extern void save_artifacts (int);
+extern void restore_artifacts (int);
+extern const char *artiname (int);
+extern struct obj *mk_artifact (struct obj *,int);
+extern const char *artifact_name (const char *,short *);
+extern boolean exist_artifact (int,const char *);
+extern void artifact_exists (struct obj *,const char *,int);
+extern int nartifact_exist(void);
+extern boolean arti_immune (struct obj *,int);
+extern boolean spec_ability (struct obj *,unsigned long);
+extern boolean confers_luck (struct obj *);
+extern boolean arti_reflects (struct obj *);
+extern boolean shade_glare (struct obj *);
+extern boolean restrict_name (struct obj *,const char *);
+extern boolean defends (int,struct obj *);
+extern boolean defends_when_carried (int,struct obj *);
+extern boolean protects (struct obj *,int);
+extern void set_artifact_intrinsic (struct obj *,int,long);
+extern int touch_artifact (struct obj *,struct monst *);
+extern int spec_abon (struct obj *,struct monst *);
+extern int spec_dbon (struct obj *,struct monst *,int);
+extern void discover_artifact (int);
+extern boolean undiscovered_artifact (int);
+extern int disp_artifact_discoveries (winid);
+extern boolean artifact_hit (struct monst *,struct monst *, struct obj *,int *,int);
+
+extern int doinvoke(void);
+extern boolean finesse_ahriman (struct obj *);
+extern void arti_speak (struct obj *);
+extern boolean artifact_light (struct obj *);
+extern long spec_m2 (struct obj *);
+extern boolean artifact_has_invprop (struct obj *,int);
+extern long arti_cost (struct obj *);
+extern struct obj *what_gives (long *);
+extern void Sting_effects (int);
+extern int retouch_object (struct obj **,int);
+extern void retouch_equipment (int);
+
+
+
+extern boolean adjattrib (int,int,int);
+extern void gainstr (struct obj *,int,int);
+extern void losestr (int);
+extern void poisontell (int,int);
+extern void poisoned (const char *,int,const char *,int,int);
+extern void change_luck (int);
+extern int stone_luck (int);
+extern void set_moreluck(void);
+extern void restore_attrib(void);
+extern void exercise (int,int);
+extern void exerchk(void);
+extern void init_attr (int);
+extern void redist_attr(void);
+extern void adjabil (int,int);
+extern int newhp(void);
+extern schar acurr (int);
+extern schar acurrstr(void);
+extern boolean extremeattr (int);
+extern void adjalign (int);
+extern int is_innate (int);
+extern char *from_what (int);
+extern void uchangealign (int,int);
+
+
+
+extern void ballrelease (int);
+extern void ballfall(void);
+extern void placebc(void);
+extern void unplacebc(void);
+extern void set_bc (int);
+extern void move_bc (int,int,int,int,int,int);
+extern boolean drag_ball (int,int, int *,xchar *,xchar *,xchar *,xchar *, boolean *,int);
+
+extern void drop_ball (int,int);
+extern void drag_down(void);
+
+
+
+extern void sanitize_name (char *);
+extern void drop_upon_death (struct monst *,struct obj *,int,int);
+extern boolean can_make_bones(void);
+extern void savebones (int,time_t,struct obj *);
+extern int getbones(void);
+
+
+
+extern int xlev_to_rank (int);
+extern int title_to_mon (const char *,int *,int *);
+extern void max_rank_sz(void);
+
+
+
+extern int describe_level (char *);
+extern const char *rank_of (int,int,int);
+extern void bot(void);
+
+extern void status_initialize (int);
+extern void status_finish(void);
+extern void genl_status_init(void);
+extern void genl_status_finish(void);
+extern void genl_status_update (int, genericptr_t, int, int);
+extern void genl_status_enablefield (int, const char *, const char *,int);
+
+extern void genl_status_threshold (int,int,anything,int,int,int);
+extern boolean set_status_hilites (char *op);
+extern void clear_status_hilites(void);
+extern char *get_status_hilites (char *, int);
+extern boolean status_hilite_menu(void);
+
+
+
+
+
+extern boolean redraw_cmd (int);
+# 185 "../include/extern.h"
+extern void reset_occupations(void);
+extern void set_occupation (int (*)(void),const char *,int);
+extern char pgetchar(void);
+extern void pushch (int);
+extern void savech (int);
+extern void add_debug_extended_commands(void);
+extern void reset_commands (int);
+extern void rhack (char *);
+extern int doextlist(void);
+extern int extcmd_via_menu(void);
+extern int enter_explore_mode(void);
+extern void enlightenment (int,int);
+extern void youhiding (int,int);
+extern void show_conduct (int);
+extern int xytod (int,int);
+extern void dtoxy (coord *,int);
+extern int movecmd (int);
+extern int dxdy_moveok(void);
+extern int getdir (const char *);
+extern void confdir(void);
+extern const char *directionname (int);
+extern int isok (int,int);
+extern int get_adjacent_loc (const char *, const char *, int, int, coord *);
+extern const char *click_to_cmd (int,int,int);
+
+extern void hangup (int);
+extern void end_of_input(void);
+
+extern char readchar(void);
+extern void sanity_check(void);
+extern char yn_function (const char *, const char *, int);
+extern boolean paranoid_query (int,const char *);
+
+
+
+extern boolean is_pool (int,int);
+extern boolean is_lava (int,int);
+extern boolean is_pool_or_lava (int,int);
+extern boolean is_ice (int,int);
+extern boolean is_moat (int,int);
+extern schar db_under_typ (int);
+extern int is_drawbridge_wall (int,int);
+extern boolean is_db_wall (int,int);
+extern boolean find_drawbridge (int *,int*);
+extern boolean create_drawbridge (int,int,int,int);
+extern void open_drawbridge (int,int);
+extern void close_drawbridge (int,int);
+extern void destroy_drawbridge (int,int);
+
+
+
+extern void decl_init(void);
+
+
+
+extern struct obj *o_in (struct obj*,int);
+extern struct obj *o_material (struct obj*,unsigned);
+extern int gold_detect (struct obj *);
+extern int food_detect (struct obj *);
+extern int object_detect (struct obj *,int);
+extern int monster_detect (struct obj *,int);
+extern int trap_detect (struct obj *);
+extern const char *level_distance (d_level *);
+extern void use_crystal_ball (struct obj *);
+extern void do_mapping(void);
+extern void do_vicinity_map(void);
+extern void cvt_sdoor_to_door (struct rm *);
+
+
+
+
+extern int findit(void);
+extern int openit(void);
+extern boolean detecting (void (*)(int,int,void *));
+extern void find_trap (struct trap *);
+extern int dosearch0 (int);
+extern int dosearch(void);
+extern void sokoban_detect(void);
+extern void reveal_terrain (int);
+
+
+
+extern int dig_typ (struct obj *,int,int);
+extern boolean is_digging(void);
+
+
+
+extern int holetime(void);
+extern boolean dig_check (struct monst *, int, int, int);
+extern void digactualhole (int,int,struct monst *,int);
+extern boolean dighole (int,int,coord *);
+extern int use_pick_axe (struct obj *);
+extern int use_pick_axe2 (struct obj *);
+extern boolean mdig_tunnel (struct monst *);
+extern void watch_dig (struct monst *,int,int,int);
+extern void zap_dig(void);
+extern struct obj *bury_an_obj (struct obj *, boolean *);
+extern void bury_objs (int,int);
+extern void unearth_objs (int,int);
+extern void rot_organic (union any *, long);
+extern void rot_corpse (union any *, long);
+extern struct obj *buried_ball (coord *);
+extern void buried_ball_to_punishment(void);
+extern void buried_ball_to_freedom(void);
+extern schar fillholetyp (int,int,int);
+extern void liquid_flow (int,int,int,struct trap *, const char *);
+extern boolean conjoined_pits (struct trap *,struct trap *,int);
+# 302 "../include/extern.h"
+extern void magic_map_background (int,int,int);
+extern void map_background (int,int,int);
+extern void map_trap (struct trap *,int);
+extern void map_object (struct obj *,int);
+extern void map_invisible (int,int);
+extern void unmap_object (int,int);
+extern void map_location (int,int,int);
+extern void feel_location (int,int);
+extern void newsym (int,int);
+extern void shieldeff (int,int);
+extern void tmp_at (int,int);
+extern void swallowed (int);
+extern void under_ground (int);
+extern void under_water (int);
+extern void see_monsters(void);
+extern void set_mimic_blocking(void);
+extern void see_objects(void);
+extern void see_traps(void);
+extern void curs_on_u(void);
+extern int doredraw(void);
+extern void docrt(void);
+extern void show_glyph (int,int,int);
+extern void clear_glyph_buffer(void);
+extern void row_refresh (int,int,int);
+extern void cls(void);
+extern void flush_screen (int);
+extern int back_to_glyph (int,int);
+extern int zapdir_to_glyph (int,int,int);
+extern int glyph_at (int,int);
+extern void set_wall_state(void);
+extern void unset_seenv (struct rm *,int,int,int,int);
+
+
+
+
+
+
+
+extern int dodrop(void);
+extern boolean boulder_hits_pool (struct obj *,int,int,int);
+extern boolean flooreffects (struct obj *,int,int,const char *);
+extern void doaltarobj (struct obj *);
+extern boolean canletgo (struct obj *,const char *);
+extern void dropx (struct obj *);
+extern void dropy (struct obj *);
+extern void dropz (struct obj *,int);
+extern void obj_no_longer_held (struct obj *);
+extern int doddrop(void);
+extern int dodown(void);
+extern int doup(void);
+
+extern void save_currentstate(void);
+
+extern void goto_level (d_level *,int,int,int);
+extern void schedule_goto (d_level *,int,int,int, const char *,const char *);
+
+extern void deferred_goto(void);
+extern boolean revive_corpse (struct obj *);
+extern void revive_mon (union any *, long);
+extern int donull(void);
+extern int dowipe(void);
+extern void set_wounded_legs (long,int);
+extern void heal_legs(void);
+
+
+
+extern int getpos (coord *,int,const char *);
+extern void getpos_sethilite (void (*f)(int) );
+extern void new_mname (struct monst *,int);
+extern void free_mname (struct monst *);
+extern void new_oname (struct obj *,int);
+extern void free_oname (struct obj *);
+extern const char *safe_oname (struct obj *);
+extern struct monst *christen_monst (struct monst *,const char *);
+extern struct obj *oname (struct obj *,const char *);
+extern boolean objtyp_is_callable (int);
+extern int docallcmd(void);
+extern void docall (struct obj *);
+extern const char *rndghostname(void);
+extern char *x_monnam (struct monst *,int,const char *,int,int);
+extern char *l_monnam (struct monst *);
+extern char *mon_nam (struct monst *);
+extern char *noit_mon_nam (struct monst *);
+extern char *Monnam (struct monst *);
+extern char *noit_Monnam (struct monst *);
+extern char *m_monnam (struct monst *);
+extern char *y_monnam (struct monst *);
+extern char *Adjmonnam (struct monst *,const char *);
+extern char *Amonnam (struct monst *);
+extern char *a_monnam (struct monst *);
+extern char *distant_monnam (struct monst *,int,char *);
+extern char *rndmonnam (char *);
+extern const char *hcolor (const char *);
+extern const char *rndcolor(void);
+extern const char *roguename(void);
+extern struct obj *realloc_obj (struct obj *, int, genericptr_t, int, const char *);
+
+extern char *coyotename (struct monst *,char *);
+extern const char *noveltitle (int *);
+extern const char *lookup_novel (const char *, int *);
+# 413 "../include/extern.h"
+extern void off_msg (struct obj *);
+extern void set_wear (struct obj *);
+extern boolean donning (struct obj *);
+extern boolean doffing (struct obj *);
+extern void cancel_don(void);
+extern int stop_donning (struct obj *);
+extern int Armor_off(void);
+extern int Armor_gone(void);
+extern int Helmet_off(void);
+extern int Gloves_off(void);
+extern int Boots_off(void);
+extern int Cloak_off(void);
+extern int Shield_off(void);
+extern int Shirt_off(void);
+extern void Amulet_off(void);
+extern void Ring_on (struct obj *);
+extern void Ring_off (struct obj *);
+extern void Ring_gone (struct obj *);
+extern void Blindf_on (struct obj *);
+extern void Blindf_off (struct obj *);
+extern int dotakeoff(void);
+extern int doremring(void);
+extern int cursed (struct obj *);
+extern int armoroff (struct obj *);
+extern int canwearobj (struct obj *, long *, int);
+extern int dowear(void);
+extern int doputon(void);
+extern void find_ac(void);
+extern void glibr(void);
+extern struct obj *some_armor (struct monst *);
+extern struct obj *stuck_ring (struct obj *,int);
+extern struct obj *unchanger(void);
+extern void reset_remarm(void);
+extern int doddoremarm(void);
+extern int destroy_arm (struct obj *);
+extern void adj_abon (struct obj *,int);
+extern boolean inaccessible_equipment (struct obj *,const char *,int);
+
+
+
+extern void newedog (struct monst *);
+extern void free_edog (struct monst *);
+extern void initedog (struct monst *);
+extern struct monst *make_familiar (struct obj *,int,int,int);
+extern struct monst *makedog(void);
+extern void update_mlstmv(void);
+extern void losedogs(void);
+extern void mon_arrive (struct monst *,int);
+extern void mon_catchup_elapsed_time (struct monst *,long);
+extern void keepdogs (int);
+extern void migrate_to_level (struct monst *,int,int,coord *);
+extern int dogfood (struct monst *,struct obj *);
+extern boolean tamedog (struct monst *,struct obj *);
+extern void abuse_dog (struct monst *);
+extern void wary_dog (struct monst *, int);
+
+
+
+extern struct obj *droppables (struct monst *);
+extern int dog_nutrition (struct monst *,struct obj *);
+extern int dog_eat (struct monst *,struct obj *,int,int,int);
+extern int dog_move (struct monst *,int);
+
+
+
+extern void finish_meating (struct monst *);
+
+
+
+extern boolean ghitm (struct monst *,struct obj *);
+extern void container_impact_dmg (struct obj *,int,int);
+extern int dokick(void);
+extern boolean ship_object (struct obj *,int,int,int);
+extern void obj_delivery (int);
+extern schar down_gate (int,int);
+extern void impact_drop (struct obj *,int,int,int);
+
+
+
+extern int dothrow(void);
+extern int dofire(void);
+extern void endmultishot (int);
+extern void hitfloor (struct obj *);
+extern void hurtle (int,int,int,int);
+extern void mhurtle (struct monst *,int,int,int);
+extern void throwit (struct obj *,long,int);
+extern int omon_adj (struct monst *,struct obj *,int);
+extern int thitmonst (struct monst *,struct obj *);
+extern int hero_breaks (struct obj *,int,int,int);
+extern int breaks (struct obj *,int,int);
+extern void release_camera_demon (struct obj *, int,int);
+extern void breakobj (struct obj *,int,int,int,int);
+extern boolean breaktest (struct obj *);
+extern boolean walk_path (coord *, coord *, boolean (*)(genericptr_t,int,int), genericptr_t);
+extern boolean hurtle_step (genericptr_t, int, int);
+
+
+
+extern int def_char_to_objclass (int);
+extern int def_char_to_monclass (int);
+
+extern void switch_symbols (int);
+extern void assign_graphics (int);
+extern void init_r_symbols(void);
+extern void init_symbols(void);
+extern void update_bouldersym(void);
+extern void init_showsyms(void);
+extern void init_l_symbols(void);
+extern void clear_symsetentry (int,int);
+extern void update_l_symset (struct symparse *,int);
+extern void update_r_symset (struct symparse *,int);
+extern boolean cursed_object_at (int, int);
+
+
+
+extern void save_dungeon (int,int,int);
+extern void restore_dungeon (int);
+extern void insert_branch (branch *,int);
+extern void init_dungeons(void);
+extern s_level *find_level (const char *);
+extern s_level *Is_special (d_level *);
+extern branch *Is_branchlev (d_level *);
+extern xchar ledger_no (d_level *);
+extern xchar maxledgerno(void);
+extern schar depth (d_level *);
+extern xchar dunlev (d_level *);
+extern xchar dunlevs_in_dungeon (d_level *);
+extern xchar ledger_to_dnum (int);
+extern xchar ledger_to_dlev (int);
+extern xchar deepest_lev_reached (int);
+extern boolean on_level (d_level *,d_level *);
+extern void next_level (int);
+extern void prev_level (int);
+extern void u_on_newpos (int,int);
+extern void u_on_rndspot (int);
+extern void u_on_sstairs (int);
+extern void u_on_upstairs(void);
+extern void u_on_dnstairs(void);
+extern boolean On_stairs (int,int);
+extern void get_level (d_level *,int);
+extern boolean Is_botlevel (d_level *);
+extern boolean Can_fall_thru (d_level *);
+extern boolean Can_dig_down (d_level *);
+extern boolean Can_rise_up (int,int,d_level *);
+extern boolean has_ceiling (d_level *);
+extern boolean In_quest (d_level *);
+extern boolean In_mines (d_level *);
+extern branch *dungeon_branch (const char *);
+extern boolean at_dgn_entrance (const char *);
+extern boolean In_hell (d_level *);
+extern boolean In_V_tower (d_level *);
+extern boolean On_W_tower_level (d_level *);
+extern boolean In_W_tower (int,int,d_level *);
+extern void find_hell (d_level *);
+extern void goto_hell (int,int);
+extern void assign_level (d_level *,d_level *);
+extern void assign_rnd_level (d_level *,d_level *,int);
+extern int induced_align (int);
+extern boolean Invocation_lev (d_level *);
+extern xchar level_difficulty(void);
+extern schar lev_by_name (const char *);
+extern schar print_dungeon (int,schar *,xchar *);
+extern char *get_annotation (d_level *);
+extern int donamelevel(void);
+extern int dooverview(void);
+extern void show_overview (int,int);
+extern void forget_mapseen (int);
+extern void init_mapseen (d_level *);
+extern void recalc_mapseen(void);
+extern void mapseen_temple (struct monst *);
+extern void room_discovered (int);
+extern void recbranch_mapseen (d_level *, d_level *);
+extern void remdun_mapseen (int);
+# 595 "../include/extern.h"
+extern void eatmupdate(void);
+extern boolean is_edible (struct obj *);
+extern void init_uhunger(void);
+extern int Hear_again(void);
+extern void reset_eat(void);
+extern int doeat(void);
+extern void gethungry(void);
+extern void morehungry (int);
+extern void lesshungry (int);
+extern boolean is_fainted(void);
+extern void reset_faint(void);
+extern void violated_vegetarian(void);
+extern void newuhs (int);
+extern struct obj *floorfood (const char *,int);
+extern void vomit(void);
+extern int eaten_stat (int,struct obj *);
+extern void food_disappears (struct obj *);
+extern void food_substitution (struct obj *,struct obj *);
+extern void eating_conducts (struct permonst *);
+extern int eat_brains (struct monst *,struct monst *,int,int *);
+extern void fix_petrification(void);
+extern void consume_oeaten (struct obj *,int);
+extern boolean maybe_finished_meal (int);
+extern void set_tin_variety (struct obj *,int);
+extern int tin_variety_txt (char *,int *);
+extern void tin_details (struct obj *,int,char *);
+extern boolean Popeye (int);
+
+
+
+extern void done1 (int);
+extern int done2(void);
+
+
+
+extern void done_in_by (struct monst *,int);
+
+extern void panic (const char *,...) __attribute__ ((format (printf, 1, 2)));
+
+extern void done (int);
+extern void container_contents (struct obj *,int,int,int);
+extern void terminate (int);
+extern int dovanquished(void);
+extern int num_genocides(void);
+extern void delayed_killer (int, int, const char*);
+extern struct kinfo *find_delayed_killer (int);
+extern void dealloc_killer (struct kinfo*);
+extern void save_killers (int,int);
+extern void restore_killers (int);
+extern char *build_english_list (char *);
+
+extern void panictrace_setsignals (int);
+
+
+
+
+extern char *random_engraving (char *);
+extern void wipeout_text (char *,int,unsigned);
+extern boolean can_reach_floor (int);
+extern void cant_reach_floor (int,int,int,int);
+extern const char *surface (int,int);
+extern const char *ceiling (int,int);
+extern struct engr *engr_at (int,int);
+extern int sengr_at (const char *,int,int,int);
+extern void u_wipe_engr (int);
+extern void wipe_engr_at (int,int,int,int);
+extern void read_engr_at (int,int);
+extern void make_engr_at (int,int,const char *,long,int);
+extern void del_engr_at (int,int);
+extern int freehand(void);
+extern int doengrave(void);
+extern void sanitize_engravings(void);
+extern void save_engravings (int,int);
+extern void rest_engravings (int);
+extern void del_engr (struct engr *);
+extern void rloc_engr (struct engr *);
+extern void make_grave (int,int,const char *);
+
+
+
+extern int newpw(void);
+extern int experience (struct monst *,int);
+extern void more_experienced (int,int);
+extern void losexp (const char *);
+extern void newexplevel(void);
+extern void pluslvl (int);
+extern long rndexp (int);
+
+
+
+extern void explode (int,int,int,int,int,int);
+extern long scatter (int, int, int, unsigned int, struct obj *);
+extern void splatter_burning_oil (int, int);
+extern void explode_oil (struct obj *,int,int);
+
+
+
+extern void makeroguerooms(void);
+extern void corr (int,int);
+extern void makerogueghost(void);
+
+
+
+extern char *fname_encode (const char *, int, char *, char *, int);
+extern char *fname_decode (int, char *, char *, int);
+extern const char *fqname (const char *, int, int);
+extern FILE *fopen_datafile (const char *,const char *,int);
+
+
+
+extern void set_levelfile_name (char *,int);
+extern int create_levelfile (int,char *);
+extern int open_levelfile (int,char *);
+extern void delete_levelfile (int);
+extern void clearlocks(void);
+extern int create_bonesfile (d_level*,char **, char *);
+
+
+
+extern void commit_bonesfile (d_level *);
+extern int open_bonesfile (d_level*,char **);
+extern int delete_bonesfile (d_level*);
+extern void compress_bonesfile(void);
+extern void set_savefile_name (int);
+
+extern void save_savefile_name (int);
+
+
+extern void set_error_savefile(void);
+
+extern int create_savefile(void);
+extern int open_savefile(void);
+extern int delete_savefile(void);
+extern int restore_saved_game(void);
+extern void nh_compress (const char *);
+extern void nh_uncompress (const char *);
+extern boolean lock_file (const char *,int,int);
+extern void unlock_file (const char *);
+
+
+
+extern boolean read_config_file (const char *, int);
+extern void check_recordfile (const char *);
+extern void read_wizkit(void);
+extern int read_sym_file (int);
+extern int parse_sym_line (char *,int);
+extern void paniclog (const char *, const char *);
+extern int validate_prefix_locations (char *);
+
+
+
+extern char** get_saved_games(void);
+extern void free_saved_games (char**);
+
+
+
+
+extern void assure_syscf_file(void);
+
+extern int nhclose (int);
+
+
+
+
+extern boolean debugcore (const char *, int);
+
+extern boolean read_tribute (const char *,const char *,int);
+
+
+
+extern void floating_above (const char *);
+extern void dogushforth (int);
+
+
+
+extern void dryup (int,int, int);
+extern void drinkfountain(void);
+extern void dipfountain (struct obj *);
+extern void breaksink (int,int);
+extern void drinksink(void);
+
+
+
+extern anything *uint_to_any (unsigned);
+extern anything *long_to_any (long);
+extern anything *monst_to_any (struct monst *);
+extern anything *obj_to_any (struct obj *);
+extern boolean revive_nasty (int,int,const char*);
+extern void movobj (struct obj *,int,int);
+extern boolean may_dig (int,int);
+extern boolean may_passwall (int,int);
+extern boolean bad_rock (struct permonst *,int,int);
+extern int cant_squeeze_thru (struct monst *);
+extern boolean invocation_pos (int,int);
+extern boolean test_move (int, int, int, int, int);
+extern boolean u_rooted(void);
+extern void domove(void);
+extern boolean overexertion(void);
+extern void invocation_message(void);
+extern boolean pooleffects (int);
+extern void spoteffects (int);
+extern char *in_rooms (int,int,int);
+extern boolean in_town (int,int);
+extern void check_special_room (int);
+extern int dopickup(void);
+extern void lookaround(void);
+extern boolean crawl_destination (int,int);
+extern int monster_nearby(void);
+extern void nomul (int);
+extern void unmul (const char *);
+extern void losehp (int,const char *,int);
+extern int weight_cap(void);
+extern int inv_weight(void);
+extern int near_capacity(void);
+extern int calc_capacity (int);
+extern int max_capacity(void);
+extern boolean check_capacity (const char *);
+extern int inv_cnt (int);
+extern long money_cnt (struct obj *);
+
+
+
+extern boolean digit (int);
+extern boolean letter (int);
+extern char highc (int);
+extern char lowc (int);
+extern char *lcase (char *);
+extern char *ucase (char *);
+extern char *upstart (char *);
+extern char *mungspaces (char *);
+extern char *eos (char *);
+extern char *strkitten (char *,int);
+extern void copynchars (char *,const char *,int);
+extern char chrcasecpy (int,int);
+extern char *strcasecpy (char *,const char *);
+extern char *s_suffix (const char *);
+extern char *ing_suffix (const char *);
+extern char *xcrypt (const char *,char *);
+extern boolean onlyspace (const char *);
+extern char *tabexpand (char *);
+extern char *visctrl (int);
+extern char *strsubst (char *,const char *,const char *);
+extern const char *ordin (int);
+extern char *sitoa (int);
+extern int sgn (int);
+extern int rounddiv (long,int);
+extern int dist2 (int,int,int,int);
+extern int isqrt (int);
+extern int distmin (int,int,int,int);
+extern boolean online2 (int,int,int,int);
+extern boolean pmatch (const char *,const char *);
+extern boolean pmatchi (const char *,const char *);
+extern boolean pmatchz (const char *,const char *);
+
+extern int strncmpi (const char *,const char *,int);
+
+
+extern char *strstri (const char *,const char *);
+
+extern boolean fuzzymatch (const char *,const char *,const char *,int);
+extern void setrandom(void);
+extern time_t getnow(void);
+extern int getyear(void);
+
+
+
+extern long yyyymmdd (time_t);
+extern long hhmmss (time_t);
+extern char *yyyymmddhhmmss (time_t);
+extern time_t time_from_yyyymmddhhmmss (char *);
+extern int phase_of_the_moon(void);
+extern boolean friday_13th(void);
+extern int night(void);
+extern int midnight(void);
+
+
+
+extern struct obj **objarr_init (int);
+extern void objarr_set (struct obj *, int, struct obj **, int);
+extern void assigninvlet (struct obj *);
+extern struct obj *merge_choice (struct obj *,struct obj *);
+extern int merged (struct obj **,struct obj **);
+
+
+
+extern void addinv_core1 (struct obj *);
+extern void addinv_core2 (struct obj *);
+extern struct obj *addinv (struct obj *);
+extern struct obj *hold_another_object (struct obj *,const char *,const char *,const char *);
+
+extern void useupall (struct obj *);
+extern void useup (struct obj *);
+extern void consume_obj_charge (struct obj *,int);
+extern void freeinv_core (struct obj *);
+extern void freeinv (struct obj *);
+extern void delallobj (int,int);
+extern void delobj (struct obj *);
+extern struct obj *sobj_at (int,int,int);
+extern struct obj *nxtobj (struct obj *,int,int);
+extern struct obj *carrying (int);
+extern boolean have_lizard(void);
+extern struct obj *o_on (unsigned int,struct obj *);
+extern boolean obj_here (struct obj *,int,int);
+extern boolean wearing_armor(void);
+extern boolean is_worn (struct obj *);
+extern struct obj *g_at (int,int);
+extern struct obj *getobj (const char *,const char *);
+extern int ggetobj (const char *,int (*)(struct obj *),int,int,unsigned *);
+extern int askchain (struct obj **,const char *,int,int (*)(struct obj *), int (*)(struct obj *),int,const char *);
+
+extern void fully_identify_obj (struct obj *);
+extern int identify (struct obj *);
+extern void identify_pack (int,int);
+extern void learn_unseen_invent(void);
+extern void prinv (const char *,struct obj *,long);
+extern char *xprname (struct obj *,const char *,int,int,long,long);
+extern int ddoinv(void);
+extern char display_inventory (const char *,int);
+extern int display_binventory (int,int,int);
+extern struct obj *display_cinventory (struct obj *);
+extern struct obj *display_minventory (struct monst *,int,char *);
+extern int dotypeinv(void);
+extern const char *dfeature_at (int,int,char *);
+extern int look_here (int,int);
+extern int dolook(void);
+extern boolean will_feel_cockatrice (struct obj *,int);
+extern void feel_cockatrice (struct obj *,int);
+extern void stackobj (struct obj *);
+extern int doprgold(void);
+extern int doprwep(void);
+extern int doprarm(void);
+extern int doprring(void);
+extern int dopramulet(void);
+extern int doprtool(void);
+extern int doprinuse(void);
+extern void useupf (struct obj *,long);
+extern char *let_to_name (int,int,int);
+extern void free_invbuf(void);
+extern void reassign(void);
+extern int doorganize(void);
+extern int count_unpaid (struct obj *);
+extern int count_buc (struct obj *,int);
+extern long count_contents (struct obj *,int,int,int);
+extern void carry_obj_effects (struct obj *);
+extern const char *currency (long);
+extern void silly_thing (const char *,struct obj *);
+
+
+
+
+extern void getwindowsz(void);
+extern void getioctls(void);
+extern void setioctls(void);
+
+extern int dosuspend(void);
+
+
+
+
+
+extern void new_light_source (int, int, int, int, union any *);
+extern void del_light_source (int, union any *);
+extern void do_light_sources (char **);
+extern struct monst *find_mid (unsigned, unsigned);
+extern void save_light_sources (int, int, int);
+extern void restore_light_sources (int);
+extern void relink_light_sources (int);
+extern void obj_move_light_source (struct obj *, struct obj *);
+extern boolean any_light_source(void);
+extern void snuff_light_source (int, int);
+extern boolean obj_sheds_light (struct obj *);
+extern boolean obj_is_burning (struct obj *);
+extern void obj_split_light_source (struct obj *, struct obj *);
+extern void obj_merge_light_sources (struct obj *,struct obj *);
+extern void obj_adjust_light_radius (struct obj *,int);
+extern int candle_light_range (struct obj *);
+extern int arti_light_radius (struct obj *);
+extern const char *arti_light_description (struct obj *);
+extern int wiz_light_sources(void);
+
+
+
+
+
+
+
+extern boolean picking_lock (int *,int *);
+extern boolean picking_at (int,int);
+extern void breakchestlock (struct obj *,int);
+extern void reset_pick(void);
+extern int pick_lock (struct obj *);
+extern int doforce(void);
+extern boolean boxlock (struct obj *,struct obj *);
+extern boolean doorlock (struct obj *,int,int);
+extern int doopen(void);
+extern boolean stumble_on_door_mimic (int,int);
+extern int doopen_indir (int,int);
+extern int doclose(void);
+# 1042 "../include/extern.h"
+extern void getmailstatus(void);
+
+extern void ckmailstatus(void);
+extern void readmail (struct obj *);
+
+
+
+
+extern void dealloc_monst (struct monst *);
+extern boolean is_home_elemental (struct permonst *);
+extern struct monst *clone_mon (struct monst *,int,int);
+extern int monhp_per_lvl (struct monst *);
+extern void newmonhp (struct monst *,int);
+extern struct mextra *newmextra(void);
+extern void copy_mextra (struct monst *,struct monst *);
+extern struct monst *makemon (struct permonst *,int,int,int);
+extern boolean create_critters (int,struct permonst *,int);
+extern struct permonst *rndmonst(void);
+extern void reset_rndmonst (int);
+extern struct permonst *mkclass (int,int);
+extern int mkclass_poly (int);
+extern int adj_lev (struct permonst *);
+extern struct permonst *grow_up (struct monst *,struct monst *);
+extern int mongets (struct monst *,int);
+extern int golemhp (int);
+extern boolean peace_minded (struct permonst *);
+extern void set_malign (struct monst *);
+extern void newmcorpsenm (struct monst *);
+extern void freemcorpsenm (struct monst *);
+extern void set_mimic_sym (struct monst *);
+extern int mbirth_limit (int);
+extern void mimic_hit_msg (struct monst *, int);
+extern void mkmonmoney (struct monst *, long);
+extern int bagotricks (struct obj *,int,int *);
+extern boolean propagate (int, int,int);
+extern boolean usmellmon (struct permonst *);
+
+
+
+extern int mapglyph (int, int *, int *, unsigned *, int, int);
+extern char *encglyph (int);
+extern void genl_putmixed (winid, int, const char *);
+
+
+
+extern int castmu (struct monst *,struct attack *,int,int);
+extern int buzzmu (struct monst *,struct attack *);
+
+
+
+extern int fightm (struct monst *);
+extern int mattackm (struct monst *,struct monst *);
+extern boolean engulf_target (struct monst *,struct monst *);
+extern int mdisplacem (struct monst *,struct monst *,int);
+extern void paralyze_monst (struct monst *,int);
+extern int sleep_monst (struct monst *,int,int);
+extern void slept_monst (struct monst *);
+extern void xdrainenergym (struct monst *,int);
+extern long attk_protection (int);
+extern void rustm (struct monst *,struct obj *);
+
+
+
+extern const char *mpoisons_subj (struct monst *,struct attack *);
+extern void u_slow_down(void);
+extern struct monst *cloneu(void);
+extern void expels (struct monst *,struct permonst *,int);
+extern struct attack *getmattk (struct permonst *,int,int *,struct attack *);
+extern int mattacku (struct monst *);
+extern int magic_negation (struct monst *);
+extern boolean gulp_blnd_check(void);
+extern int gazemu (struct monst *,struct attack *);
+extern void mdamageu (struct monst *,int);
+extern int could_seduce (struct monst *,struct monst *,struct attack *);
+extern int doseduce (struct monst *);
+
+
+
+extern void newemin (struct monst *);
+extern void free_emin (struct monst *);
+extern int monster_census (int);
+extern int msummon (struct monst *);
+extern void summon_minion (int,int);
+extern int demon_talk (struct monst *);
+extern long bribe (struct monst *);
+extern int dprince (int);
+extern int dlord (int);
+extern int llord(void);
+extern int ndemon (int);
+extern int lminion(void);
+extern void lose_guardian_angel (struct monst *);
+extern void gain_guardian_angel(void);
+
+
+
+
+
+
+extern void sort_rooms(void);
+extern void add_room (int,int,int,int,int,int,int);
+extern void add_subroom (struct mkroom *,int,int,int,int, int,int,int);
+
+extern void makecorridors(void);
+extern void add_door (int,int,struct mkroom *);
+extern void mklev(void);
+
+
+
+extern void topologize (struct mkroom *);
+
+extern void place_branch (branch *,int,int);
+extern boolean occupied (int,int);
+extern int okdoor (int,int);
+extern void dodoor (int,int,struct mkroom *);
+extern void mktrap (int,int,struct mkroom *,coord*);
+extern void mkstairs (int,int,int,struct mkroom *);
+extern void mkinvokearea(void);
+extern void mineralize (int, int, int, int, int);
+
+
+
+void flood_fill_rm (int,int,int,int,int);
+void remove_rooms (int,int,int,int);
+
+
+
+extern void wallification (int,int,int,int);
+extern void walkfrom (int,int,int);
+extern void makemaz (const char *);
+extern void mazexy (coord *);
+extern void bound_digging(void);
+extern void mkportal (int,int,int,int);
+extern boolean bad_location (int,int,int,int,int,int);
+extern void place_lregion (int,int,int,int, int,int,int,int, int,d_level *);
+
+
+extern void fumaroles(void);
+extern void movebubbles(void);
+extern void water_friction(void);
+extern void save_waterlevel (int,int);
+extern void restore_waterlevel (int);
+extern const char *waterbody_name (int,int);
+
+
+
+extern struct oextra *newoextra(void);
+extern void copy_oextra (struct obj *,struct obj *);
+extern void dealloc_oextra (struct oextra *);
+extern void newomonst (struct obj *);
+extern void free_omonst (struct obj *);
+extern void newomid (struct obj *);
+extern void free_omid (struct obj *);
+extern void newolong (struct obj *);
+extern void free_olong (struct obj *);
+extern void new_omailcmd (struct obj *,const char *);
+extern void free_omailcmd (struct obj *);
+extern struct obj *mkobj_at (int,int,int,int);
+extern struct obj *mksobj_at (int,int,int,int,int);
+extern struct obj *mkobj (int,int);
+extern int rndmonnum(void);
+extern boolean bogon_is_pname (int);
+extern struct obj *splitobj (struct obj *,long);
+extern void replace_object (struct obj *,struct obj *);
+extern void bill_dummy_object (struct obj *);
+extern void costly_alteration (struct obj *,int);
+extern struct obj *mksobj (int,int,int);
+extern int bcsign (struct obj *);
+extern int weight (struct obj *);
+extern struct obj *mkgold (long,int,int);
+extern struct obj *mkcorpstat (int,struct monst *,struct permonst *,int,int,unsigned);
+
+extern int corpse_revive_type (struct obj *);
+extern struct obj *obj_attach_mid (struct obj *, unsigned);
+extern struct monst *get_mtraits (struct obj *, int);
+extern struct obj *mk_tt_object (int,int,int);
+extern struct obj *mk_named_object (int,struct permonst *,int,int,const char *);
+
+extern struct obj *rnd_treefruit_at (int, int);
+extern void set_corpsenm (struct obj *, int);
+extern void start_corpse_timeout (struct obj *);
+extern void bless (struct obj *);
+extern void unbless (struct obj *);
+extern void curse (struct obj *);
+extern void uncurse (struct obj *);
+extern void blessorcurse (struct obj *,int);
+extern boolean is_flammable (struct obj *);
+extern boolean is_rottable (struct obj *);
+extern void place_object (struct obj *,int,int);
+extern void remove_object (struct obj *);
+extern void discard_minvent (struct monst *);
+extern void obj_extract_self (struct obj *);
+extern void extract_nobj (struct obj *, struct obj **);
+extern void extract_nexthere (struct obj *, struct obj **);
+extern int add_to_minv (struct monst *, struct obj *);
+extern struct obj *add_to_container (struct obj *, struct obj *);
+extern void add_to_migration (struct obj *);
+extern void add_to_buried (struct obj *);
+extern void dealloc_obj (struct obj *);
+extern void obj_ice_effects (int, int, int);
+extern long peek_at_iced_corpse_age (struct obj *);
+extern int hornoplenty (struct obj *,int);
+extern void obj_sanity_check(void);
+extern struct obj* obj_nexto (struct obj*);
+extern struct obj* obj_nexto_xy (int, int, int, unsigned);
+extern struct obj* obj_absorb (struct obj**, struct obj**);
+extern struct obj* obj_meld (struct obj**, struct obj**);
+
+
+
+extern void mkroom (int);
+extern void fill_zoo (struct mkroom *);
+extern struct permonst *antholemon(void);
+extern boolean nexttodoor (int,int);
+extern boolean has_dnstairs (struct mkroom *);
+extern boolean has_upstairs (struct mkroom *);
+extern int somex (struct mkroom *);
+extern int somey (struct mkroom *);
+extern boolean inside_room (struct mkroom *,int,int);
+extern boolean somexy (struct mkroom *,coord *);
+extern void mkundead (coord *,int,int);
+extern struct permonst *courtmon(void);
+extern void save_rooms (int);
+extern void rest_rooms (int);
+extern struct mkroom *search_special (int);
+extern int cmap_to_type (int);
+
+
+
+extern int undead_to_corpse (int);
+extern int genus (int,int);
+extern int pm_to_cham (int);
+extern int minliquid (struct monst *);
+extern int movemon(void);
+extern int meatmetal (struct monst *);
+extern int meatobj (struct monst *);
+extern void mpickgold (struct monst *);
+extern boolean mpickstuff (struct monst *,const char *);
+extern int curr_mon_load (struct monst *);
+extern int max_mon_load (struct monst *);
+extern boolean can_carry (struct monst *,struct obj *);
+extern int mfndpos (struct monst *,coord *,long *,long);
+extern boolean monnear (struct monst *,int,int);
+extern void dmonsfree(void);
+extern int mcalcmove (struct monst*);
+extern void mcalcdistress(void);
+extern void replmon (struct monst *,struct monst *);
+extern void relmon (struct monst *,struct monst **);
+extern struct obj *mlifesaver (struct monst *);
+extern boolean corpse_chance (struct monst *,struct monst *,int);
+extern void mondead (struct monst *);
+extern void mondied (struct monst *);
+extern void mongone (struct monst *);
+extern void monstone (struct monst *);
+extern void monkilled (struct monst *,const char *,int);
+extern void unstuck (struct monst *);
+extern void killed (struct monst *);
+extern void xkilled (struct monst *,int);
+extern void mon_to_stone (struct monst*);
+extern void mnexto (struct monst *);
+extern void maybe_mnexto (struct monst *);
+extern boolean mnearto (struct monst *,int,int,int);
+extern void m_respond (struct monst *);
+extern void setmangry (struct monst *);
+extern void wakeup (struct monst *);
+extern void wake_nearby(void);
+extern void wake_nearto (int,int,int);
+extern void seemimic (struct monst *);
+extern void rescham(void);
+extern void restartcham(void);
+extern void restore_cham (struct monst *);
+extern boolean hideunder (struct monst*);
+extern void hide_monst (struct monst *);
+extern void mon_animal_list (int);
+extern int select_newcham_form (struct monst *);
+extern void mgender_from_permonst (struct monst *, struct permonst *);
+extern int newcham (struct monst *,struct permonst *,int,int);
+extern int can_be_hatched (int);
+extern int egg_type_from_parent (int,int);
+extern boolean dead_species (int,int);
+extern void kill_genocided_monsters(void);
+extern void golemeffects (struct monst *,int,int);
+extern boolean angry_guards (int);
+extern void pacify_guards(void);
+extern void decide_to_shapeshift (struct monst *,int);
+
+
+
+extern void set_mon_data (struct monst *,struct permonst *,int);
+extern struct attack *attacktype_fordmg (struct permonst *,int,int);
+extern boolean attacktype (struct permonst *,int);
+extern boolean noattacks (struct permonst *);
+extern boolean poly_when_stoned (struct permonst *);
+extern boolean resists_drli (struct monst *);
+extern boolean resists_magm (struct monst *);
+extern boolean resists_blnd (struct monst *);
+extern boolean can_blnd (struct monst *,struct monst *,int,struct obj *);
+extern boolean ranged_attk (struct permonst *);
+extern boolean hates_silver (struct permonst *);
+extern boolean mon_hates_silver (struct monst *);
+extern boolean passes_bars (struct permonst *);
+extern boolean can_blow (struct monst *);
+extern boolean can_be_strangled (struct monst *);
+extern boolean can_track (struct permonst *);
+extern boolean breakarm (struct permonst *);
+extern boolean sliparm (struct permonst *);
+extern boolean sticks (struct permonst *);
+extern boolean cantvomit (struct permonst *);
+extern int num_horns (struct permonst *);
+
+extern struct attack *dmgtype_fromattack (struct permonst *,int,int);
+extern boolean dmgtype (struct permonst *,int);
+extern int max_passive_dmg (struct monst *,struct monst *);
+extern boolean same_race (struct permonst *,struct permonst *);
+extern int monsndx (struct permonst *);
+extern int name_to_mon (const char *);
+extern int name_to_monclass (const char *,int *);
+extern int gender (struct monst *);
+extern int pronoun_gender (struct monst *);
+extern boolean levl_follower (struct monst *);
+extern int little_to_big (int);
+extern int big_to_little (int);
+extern const char *locomotion (const struct permonst *,const char *);
+extern const char *stagger (const struct permonst *,const char *);
+extern const char *on_fire (struct permonst *,struct attack *);
+extern const struct permonst *raceptr (struct monst *);
+extern boolean olfaction (struct permonst *);
+
+
+
+extern boolean itsstuck (struct monst *);
+extern boolean mb_trapped (struct monst *);
+extern boolean monhaskey (struct monst *,int);
+extern void mon_regen (struct monst *,int);
+extern int dochugw (struct monst *);
+extern boolean onscary (int,int,struct monst *);
+extern void monflee (struct monst *, int, int, int);
+extern void mon_yells (struct monst *, const char *);
+extern int dochug (struct monst *);
+extern int m_move (struct monst *,int);
+extern void dissolve_bars (int,int);
+extern boolean closed_door (int,int);
+extern boolean accessible (int,int);
+extern void set_apparxy (struct monst *);
+extern boolean can_ooze (struct monst *);
+extern boolean can_fog (struct monst *);
+extern boolean should_displace (struct monst *,coord *,long *,int, int,int);
+
+extern boolean undesirable_disp (struct monst *,int,int);
+
+
+
+extern void monst_init(void);
+
+
+
+extern void monstr_init(void);
+
+
+
+extern struct monst *mk_mplayer (struct permonst *,int, int,int);
+
+extern void create_mplayers (int,int);
+extern void mplayer_talk (struct monst *);
+# 1459 "../include/extern.h"
+extern int thitu (int,int,struct obj *,const char *);
+extern int ohitmon (struct monst *,struct obj *,int,int);
+extern void thrwmu (struct monst *);
+extern int spitmu (struct monst *,struct attack *);
+extern int breamu (struct monst *,struct attack *);
+extern boolean linedup (int,int,int,int,int);
+extern boolean lined_up (struct monst *);
+extern struct obj *m_carrying (struct monst *,int);
+extern void m_useupall (struct monst *,struct obj *);
+extern void m_useup (struct monst *,struct obj *);
+extern void m_throw (struct monst *,int,int,int,int,int,struct obj *);
+extern boolean hits_bars (struct obj **,int,int,int,int);
+
+
+
+extern boolean find_defensive (struct monst *);
+extern int use_defensive (struct monst *);
+extern int rnd_defensive_item (struct monst *);
+extern boolean find_offensive (struct monst *);
+
+
+
+extern int use_offensive (struct monst *);
+extern int rnd_offensive_item (struct monst *);
+extern boolean find_misc (struct monst *);
+extern int use_misc (struct monst *);
+extern int rnd_misc_item (struct monst *);
+extern boolean searches_for_item (struct monst *,struct obj *);
+extern boolean mon_reflects (struct monst *,const char *);
+extern boolean ureflects (const char *,const char *);
+extern boolean munstone (struct monst *,int);
+extern boolean munslime (struct monst *,int);
+
+
+
+extern void awaken_soldiers (struct monst *);
+extern int do_play_instrument (struct obj *);
+# 1504 "../include/extern.h"
+extern struct nhregex * regex_init(void);
+extern boolean regex_compile (const char *, struct nhregex *);
+extern const char *regex_error_desc (struct nhregex *);
+extern boolean regex_match (const char *, struct nhregex*);
+extern void regex_free (struct nhregex *);
+# 1525 "../include/extern.h"
+extern void init_objects(void);
+extern void obj_shuffle_range (int,int *,int *);
+extern int find_skates(void);
+extern void oinit(void);
+extern void savenames (int,int);
+extern void restnames (int);
+extern void discover_object (int,int,int);
+extern void undiscover_object (int);
+extern int dodiscovered(void);
+extern int doclassdisco(void);
+extern void rename_disco(void);
+
+
+
+extern void objects_init(void);
+
+
+
+extern char *obj_typename (int);
+extern char *simple_typename (int);
+extern boolean obj_is_pname (struct obj *);
+extern char *distant_name (struct obj *,char *(*)(struct obj *));
+extern char *fruitname (int);
+extern char *xname (struct obj *);
+extern char *mshot_xname (struct obj *);
+extern boolean the_unique_obj (struct obj *);
+extern boolean the_unique_pm (struct permonst *);
+extern char *doname (struct obj *);
+extern boolean not_fully_identified (struct obj *);
+extern char *corpse_xname (struct obj *,const char *,unsigned);
+extern char *cxname (struct obj *);
+extern char *cxname_singular (struct obj *);
+extern char *killer_xname (struct obj *);
+extern char *short_oname (struct obj *,char *(*)(struct obj *),char *(*)(struct obj *), unsigned);
+
+extern const char *singular (struct obj *,char *(*)(struct obj *));
+extern char *an (const char *);
+extern char *An (const char *);
+extern char *The (const char *);
+extern char *the (const char *);
+extern char *aobjnam (struct obj *,const char *);
+extern char *yobjnam (struct obj *,const char *);
+extern char *Yobjnam2 (struct obj *,const char *);
+extern char *Tobjnam (struct obj *,const char *);
+extern char *otense (struct obj *,const char *);
+extern char *vtense (const char *,const char *);
+extern char *Doname2 (struct obj *);
+extern char *yname (struct obj *);
+extern char *Yname2 (struct obj *);
+extern char *ysimple_name (struct obj *);
+extern char *Ysimple_name2 (struct obj *);
+extern char *simpleonames (struct obj *);
+extern char *ansimpleoname (struct obj *);
+extern char *thesimpleoname (struct obj *);
+extern char *bare_artifactname (struct obj *);
+extern char *makeplural (const char *);
+extern char *makesingular (const char *);
+extern struct obj *readobjnam (char *,struct obj *);
+extern int rnd_class (int,int);
+extern const char *suit_simple_name (struct obj *);
+extern const char *cloak_simple_name (struct obj *);
+extern const char *helm_simple_name (struct obj *);
+extern const char *mimic_obj_name (struct monst *);
+extern char *safe_qbuf (char *,const char *,const char *,struct obj *, char *(*)(struct obj *),char *(*)(struct obj *),const char *);
+
+
+
+
+extern boolean match_optname (const char *,const char *,int,int);
+extern void initoptions(void);
+extern void initoptions_init(void);
+extern void initoptions_finish(void);
+extern void parseoptions (char *,int,int);
+extern int doset(void);
+extern int dotogglepickup(void);
+extern void option_help(void);
+extern void next_opt (winid,const char *);
+extern int fruitadd (char *,struct fruit *);
+extern int choose_classes_menu (const char *,int,int,char *,char *);
+extern void add_menu_cmd_alias (int, int);
+extern char map_menu_cmd (int);
+extern void assign_warnings (uchar *);
+extern char *nh_getenv (const char *);
+extern void set_duplicate_opt_detection (int);
+extern void set_wc_option_mod_status (unsigned long, int);
+extern void set_wc2_option_mod_status (unsigned long, int);
+extern void set_option_mod_status (const char *,int);
+extern int add_autopickup_exception (const char *);
+extern void free_autopickup_exceptions(void);
+extern int load_symset (const char *,int);
+extern void parsesymbols (char *);
+extern struct symparse *match_sym (char *);
+extern void set_playmode(void);
+extern int sym_val (char *);
+extern boolean add_menu_coloring (char *);
+extern boolean get_menu_coloring (char *, int *, int *);
+extern void free_menu_coloring(void);
+
+
+
+extern char *self_lookat (char *);
+extern int dowhatis(void);
+extern int doquickwhatis(void);
+extern int doidtrap(void);
+extern int dowhatdoes(void);
+extern char *dowhatdoes_core (int, char *);
+extern int dohelp(void);
+extern int dohistory(void);
+extern int do_screen_description (coord, int, int, char *, const char **);
+extern int do_look (int, coord *);
+# 1688 "../include/extern.h"
+extern int collect_obj_classes (char *,struct obj *,int,boolean (*) (struct obj *), int *);
+
+extern boolean rider_corpse_revival (struct obj *,int);
+extern void add_valid_menu_class (int);
+extern boolean allow_all (struct obj *);
+extern boolean allow_category (struct obj *);
+extern boolean is_worn_by_type (struct obj *);
+extern int ck_bag (struct obj *);
+
+
+
+
+extern int pickup (int);
+extern int pickup_object (struct obj *, long, int);
+extern int query_category (const char *, struct obj *, int, menu_item **, int);
+
+extern int query_objlist (const char *, struct obj *, int, menu_item **, int, boolean (*)(struct obj *));
+
+extern struct obj *pick_obj (struct obj *);
+extern int encumber_msg(void);
+extern int doloot(void);
+extern boolean container_gone (int (*)(struct obj *));
+extern boolean u_handsy(void);
+extern int use_container (struct obj **,int);
+extern int loot_mon (struct monst *,int *,boolean *);
+extern int dotip(void);
+extern boolean is_autopickup_exception (struct obj *, int);
+
+
+
+extern void pline (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void Norep (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void free_youbuf(void);
+extern void You (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void Your (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void You_feel (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void You_cant (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void You_hear (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void You_see (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void pline_The (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void There (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void verbalize (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void raw_printf (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern void impossible (const char *,...) __attribute__ ((format (printf, 1, 2)));
+extern const char *align_str (int);
+extern void mstatusline (struct monst *);
+extern void ustatusline(void);
+extern void self_invis_message(void);
+extern void pudding_merge_message (struct obj*, struct obj*);
+
+
+
+extern void set_uasmon(void);
+extern void float_vs_flight(void);
+extern void change_sex(void);
+extern void polyself (int);
+extern int polymon (int);
+extern void rehumanize(void);
+extern int dobreathe(void);
+extern int dospit(void);
+extern int doremove(void);
+extern int dospinweb(void);
+extern int dosummon(void);
+extern int dogaze(void);
+extern int dohide(void);
+extern int dopoly(void);
+extern int domindblast(void);
+extern void skinback (int);
+extern const char *mbodypart (struct monst *,int);
+extern const char *body_part (int);
+extern int poly_gender(void);
+extern void ugolemeffects (int,int);
+
+
+
+extern void set_itimeout (long *,long);
+extern void incr_itimeout (long *,int);
+extern void make_confused (long,int);
+extern void make_stunned (long,int);
+extern void make_blinded (long,int);
+extern void make_sick (long, const char *, int,int);
+extern void make_slimed (long,const char *);
+extern void make_stoned (long,const char *,int,const char *);
+extern void make_vomiting (long,int);
+extern boolean make_hallucinated (long,int,long);
+extern int dodrink(void);
+extern int dopotion (struct obj *);
+extern int peffects (struct obj *);
+extern void healup (int,int,int,int);
+extern void strange_feeling (struct obj *,const char *);
+extern void potionhit (struct monst *,struct obj *,int);
+extern void potionbreathe (struct obj *);
+extern int dodip(void);
+extern void mongrantswish (struct monst **);
+extern void djinni_from_bottle (struct obj *);
+extern struct monst *split_mon (struct monst *,struct monst *);
+extern const char *bottlename(void);
+
+
+
+extern boolean critically_low_hp (int);
+
+
+
+extern int dosacrifice(void);
+extern boolean can_pray (int);
+extern int dopray(void);
+extern const char *u_gname(void);
+extern int doturn(void);
+extern const char *a_gname(void);
+extern const char *a_gname_at (int x,int y);
+extern const char *align_gname (int);
+extern const char *halu_gname (int);
+extern const char *align_gtitle (int);
+extern void altar_wrath (int,int);
+
+
+
+
+extern int move_special (struct monst *,int,int,int,int, int,int,int,int);
+
+extern char temple_occupied (char *);
+extern boolean inhistemple (struct monst *);
+extern int pri_move (struct monst *);
+extern void priestini (d_level *,struct mkroom *,int,int,int);
+extern aligntyp mon_aligntyp (struct monst *);
+extern char *priestname (struct monst *,char *);
+extern boolean p_coaligned (struct monst *);
+extern struct monst *findpriest (int);
+extern void intemple (int);
+extern void forget_temple_entry (struct monst *);
+extern void priest_talk (struct monst *);
+extern struct monst *mk_roamer (struct permonst *,int, int,int,int);
+
+extern void reset_hostility (struct monst *);
+extern boolean in_your_sanctuary (struct monst *,int,int);
+extern void ghod_hitsu (struct monst *);
+extern void angry_priest(void);
+extern void clearpriests(void);
+extern void restpriest (struct monst *,int);
+extern void newepri (struct monst *);
+extern void free_epri (struct monst *);
+
+
+
+extern void onquest(void);
+extern void nemdead(void);
+extern void artitouch (struct obj *);
+extern boolean ok_to_quest(void);
+extern void leader_speaks (struct monst *);
+extern void nemesis_speaks(void);
+extern void quest_chat (struct monst *);
+extern void quest_talk (struct monst *);
+extern void quest_stat_check (struct monst *);
+extern void finish_quest (struct obj *);
+
+
+
+extern void load_qtlist(void);
+extern void unload_qtlist(void);
+extern short quest_info (int);
+extern const char *ldrname(void);
+extern boolean is_quest_artifact (struct obj*);
+extern void com_pager (int);
+extern void qt_pager (int);
+extern struct permonst *qt_montype(void);
+extern void deliver_splev_message(void);
+# 1867 "../include/extern.h"
+extern void learnscroll (struct obj *);
+extern char *tshirt_text (struct obj *, char *);
+extern int doread(void);
+extern boolean is_chargeable (struct obj *);
+extern void recharge (struct obj *,int);
+extern void forget_objects (int);
+extern void forget_levels (int);
+extern void forget_traps(void);
+extern void forget_map (int);
+extern int seffects (struct obj *);
+extern void drop_boulder_on_player (int, int, int, int);
+extern boolean drop_boulder_on_monster (int, int, int, int);
+extern void wand_explode (struct obj *,int);
+
+
+
+extern void litroom (int,struct obj *);
+extern void do_genocide (int);
+extern void punish (struct obj *);
+extern void unpunish(void);
+extern boolean cant_revive (int *,int,struct obj *);
+extern boolean create_particular(void);
+
+
+
+extern void init_rect(void);
+extern NhRect *get_rect (NhRect *);
+extern NhRect *rnd_rect(void);
+extern void remove_rect (NhRect *);
+extern void add_rect (NhRect *);
+extern void split_rects (NhRect *,NhRect *);
+
+
+extern void clear_regions(void);
+extern void run_regions(void);
+extern boolean in_out_region (int,int);
+extern boolean m_in_out_region (struct monst *,int,int);
+extern void update_player_regions(void);
+extern void update_monster_region (struct monst *);
+extern NhRegion *visible_region_at (int,int);
+extern void show_region (NhRegion*, int, int);
+extern void save_regions (int,int);
+extern void rest_regions (int,int);
+extern NhRegion* create_gas_cloud (int, int, int, int);
+extern boolean region_danger(void);
+extern void region_safety(void);
+
+
+
+extern void inven_inuse (int);
+extern int dorecover (int);
+extern void restcemetery (int,struct cemetery **);
+extern void trickery (char *);
+extern void getlev (int,int,int,int);
+extern void get_plname_from_file (int, char *);
+
+
+
+extern void minit(void);
+extern boolean lookup_id_mapping (unsigned, unsigned *);
+extern void mread (int,genericptr_t,unsigned int);
+extern int validate (int,const char *);
+extern void reset_restpref(void);
+extern void set_restpref (const char *);
+extern void set_savepref (const char *);
+
+
+
+extern void genl_outrip (winid,int,time_t);
+
+
+
+extern int rn2 (int);
+extern int rnl (int);
+extern int rnd (int);
+extern int d (int,int);
+extern int rne (int);
+extern int rnz (int);
+
+
+
+extern boolean validrole (int);
+extern boolean validrace (int, int);
+extern boolean validgend (int, int, int);
+extern boolean validalign (int, int, int);
+extern int randrole(void);
+extern int randrace (int);
+extern int randgend (int, int);
+extern int randalign (int, int);
+extern int str2role (const char *);
+extern int str2race (const char *);
+extern int str2gend (char *);
+extern int str2align (char *);
+extern boolean ok_role (int, int, int, int);
+extern int pick_role (int, int, int, int);
+extern boolean ok_race (int, int, int, int);
+extern int pick_race (int, int, int, int);
+extern boolean ok_gend (int, int, int, int);
+extern int pick_gend (int, int, int, int);
+extern boolean ok_align (int, int, int, int);
+extern int pick_align (int, int, int, int);
+extern void rigid_role_checks(void);
+extern boolean setrolefilter (char *);
+extern char *build_plselection_prompt (char *,int,int,int,int,int);
+extern char *root_plselection_prompt (char *,int,int,int,int,int);
+extern void plnamesuffix(void);
+extern void role_selection_prolog (int,winid);
+extern void role_menu_extra (int,winid);
+extern void role_init(void);
+extern const char *Hello (struct monst *);
+extern const char *Goodbye(void);
+
+
+
+extern char *getrumor (int,char *, int);
+extern char *get_rnd_text (const char *, char *);
+extern void outrumor (int,int);
+extern void outoracle (int, int);
+extern void save_oracles (int,int);
+extern void restore_oracles (int);
+extern int doconsult (struct monst *);
+extern void rumor_check(void);
+
+
+
+extern int dosave(void);
+extern int dosave0(void);
+extern boolean tricked_fileremoved (int, char *);
+
+extern void savestateinlock(void);
+
+
+
+
+
+
+extern void savelev (int,int,int);
+
+extern genericptr_t mon_to_buffer (struct monst *, int *);
+extern void bufon (int);
+extern void bufoff (int);
+extern void bflush (int);
+extern void bwrite (int,genericptr_t,unsigned int);
+extern void bclose (int);
+extern void def_bclose (int);
+
+
+
+extern void savecemetery (int,int,struct cemetery **);
+extern void savefruitchn (int,int);
+extern void store_plname_in_file (int);
+extern void free_dungeons(void);
+extern void freedynamicdata(void);
+extern void store_savefileinfo (int);
+
+
+
+extern long money2mon (struct monst *, long);
+extern void money2u (struct monst *, long);
+extern void shkgone (struct monst *);
+extern void set_residency (struct monst *,int);
+extern void replshk (struct monst *,struct monst *);
+extern void restshk (struct monst *,int);
+extern char inside_shop (int,int);
+extern void u_left_shop (char *,int);
+extern void remote_burglary (int,int);
+extern void u_entered_shop (char *);
+extern void pick_pick (struct obj *);
+extern boolean same_price (struct obj *,struct obj *);
+extern void shopper_financial_report(void);
+extern int inhishop (struct monst *);
+extern struct monst *shop_keeper (int);
+extern boolean tended_shop (struct mkroom *);
+extern boolean is_unpaid (struct obj *);
+extern void delete_contents (struct obj *);
+extern void obfree (struct obj *,struct obj *);
+extern void home_shk (struct monst *,int);
+extern void make_happy_shk (struct monst *,int);
+extern void make_happy_shoppers (int);
+extern void hot_pursuit (struct monst *);
+extern void make_angry_shk (struct monst *,int,int);
+extern int dopay(void);
+extern boolean paybill (int);
+extern void finish_paybill(void);
+extern struct obj *find_oid (unsigned);
+extern long contained_cost (struct obj *,struct monst *,long,int, int);
+extern long contained_gold (struct obj *);
+extern void picked_container (struct obj *);
+extern void alter_cost (struct obj *,long);
+extern long unpaid_cost (struct obj *,int);
+extern boolean billable (struct monst **,struct obj *,int,int);
+extern void addtobill (struct obj *,int,int,int);
+extern void splitbill (struct obj *,struct obj *);
+extern void subfrombill (struct obj *,struct monst *);
+extern long stolen_value (struct obj *,int,int,int,int);
+extern void sellobj_state (int);
+extern void sellobj (struct obj *,int,int);
+extern int doinvbill (int);
+extern struct monst *shkcatch (struct obj *,int,int);
+extern void add_damage (int,int,long);
+extern int repair_damage (struct monst *,struct damage *,int);
+extern int shk_move (struct monst *);
+extern void after_shk_move (struct monst *);
+extern boolean is_fshk (struct monst *);
+extern void shopdig (int);
+extern void pay_for_damage (const char *,int);
+extern boolean costly_spot (int,int);
+extern struct obj *shop_object (int,int);
+extern void price_quote (struct obj *);
+extern void shk_chat (struct monst *);
+extern void check_unpaid_usage (struct obj *,int);
+extern void check_unpaid (struct obj *);
+extern void costly_gold (int,int,long);
+extern boolean block_door (int,int);
+extern boolean block_entry (int,int);
+extern char *shk_your (char *,struct obj *);
+extern char *Shk_Your (char *,struct obj *);
+
+
+
+extern void neweshk (struct monst *);
+extern void free_eshk (struct monst *);
+extern void stock_room (int,struct mkroom *);
+extern boolean saleable (struct monst *,struct obj *);
+extern int get_shop_item (int);
+extern const char *shkname (struct monst *);
+extern boolean shkname_is_pname (struct monst *);
+extern boolean is_izchak (struct monst *,int);
+
+
+
+extern void take_gold(void);
+extern int dosit(void);
+extern void rndcurse(void);
+extern void attrcurse(void);
+
+
+
+extern void dosounds(void);
+extern const char *growl_sound (struct monst *);
+extern void growl (struct monst *);
+extern void yelp (struct monst *);
+extern void whimper (struct monst *);
+extern void beg (struct monst *);
+extern int dotalk(void);
+
+
+
+
+
+
+
+extern void sys_early_init(void);
+extern void sysopt_release(void);
+extern void sysopt_seduce_set (int);
+# 2131 "../include/extern.h"
+extern boolean check_room (xchar *,xchar *,xchar *,xchar *,int);
+extern boolean create_room (int,int,int,int, int,int,int,int);
+
+extern void create_secret_door (struct mkroom *,int);
+extern boolean dig_corridor (coord *,coord *,int,int,int);
+extern void fill_room (struct mkroom *,int);
+extern boolean load_special (const char *);
+
+
+
+
+
+
+extern int study_book (struct obj *);
+extern void book_disappears (struct obj *);
+extern void book_substitution (struct obj *,struct obj *);
+extern void age_spells(void);
+extern int docast(void);
+extern int spell_skilltype (int);
+extern int spelleffects (int,int);
+extern void losespells(void);
+extern int dovspell(void);
+extern void initialspell (struct obj *);
+
+
+
+
+
+
+extern long somegold (long);
+extern void stealgold (struct monst *);
+extern void remove_worn_item (struct obj *,int);
+extern int steal (struct monst *, char *);
+extern int mpickobj (struct monst *,struct obj *);
+extern void stealamulet (struct monst *);
+extern void maybe_absorb_item (struct monst *,struct obj *,int,int);
+extern void mdrop_obj (struct monst *,struct obj *,int);
+extern void mdrop_special_objs (struct monst *);
+extern void relobj (struct monst *,int,int);
+extern struct obj *findgold (struct obj *);
+
+
+
+extern void rider_cant_reach(void);
+extern boolean can_saddle (struct monst *);
+extern int use_saddle (struct obj *);
+extern boolean can_ride (struct monst *);
+extern int doride(void);
+extern boolean mount_steed (struct monst *, int);
+extern void exercise_steed(void);
+extern void kick_steed(void);
+extern void dismount_steed (int);
+extern void place_monster (struct monst *,int,int);
+extern boolean stucksteed (int);
+
+
+
+extern boolean goodpos (int,int,struct monst *,unsigned);
+extern boolean enexto (coord *,int,int,struct permonst *);
+extern boolean enexto_core (coord *,int,int,struct permonst *,unsigned);
+extern void teleds (int,int,int);
+extern boolean safe_teleds (int);
+extern boolean teleport_pet (struct monst *,int);
+extern void tele(void);
+extern boolean scrolltele (struct obj *);
+extern int dotele(void);
+extern void level_tele(void);
+extern void domagicportal (struct trap *);
+extern void tele_trap (struct trap *);
+extern void level_tele_trap (struct trap *);
+extern void rloc_to (struct monst *,int,int);
+extern boolean rloc (struct monst *, int);
+extern boolean tele_restrict (struct monst *);
+extern void mtele_trap (struct monst *, struct trap *,int);
+extern int mlevel_tele_trap (struct monst *, struct trap *,int,int);
+extern boolean rloco (struct obj *);
+extern int random_teleport_level(void);
+extern boolean u_teleport_mon (struct monst *,int);
+# 2217 "../include/extern.h"
+extern void burn_away_slime(void);
+extern void nh_timeout(void);
+extern void fall_asleep (int, int);
+extern void attach_egg_hatch_timeout (struct obj *, long);
+extern void attach_fig_transform_timeout (struct obj *);
+extern void kill_egg (struct obj *);
+extern void hatch_egg (union any *, long);
+extern void learn_egg_type (int);
+extern void burn_object (union any *, long);
+extern void begin_burn (struct obj *, int);
+extern void end_burn (struct obj *, int);
+extern void do_storms(void);
+extern boolean start_timer (long, int, int, union any *);
+extern long stop_timer (int, union any *);
+extern long peek_timer (int,union any *);
+extern void run_timers(void);
+extern void obj_move_timers (struct obj *, struct obj *);
+extern void obj_split_timers (struct obj *, struct obj *);
+extern void obj_stop_timers (struct obj *);
+extern boolean obj_has_timer (struct obj *,int);
+extern void spot_stop_timers (int,int,int);
+extern long spot_time_expires (int,int,int);
+extern long spot_time_left (int,int,int);
+extern boolean obj_is_local (struct obj *);
+extern void save_timers (int,int,int);
+extern void restore_timers (int,int,int,long);
+extern void relink_timers (int);
+extern int wiz_timeout_queue(void);
+extern void timer_sanity_check(void);
+
+
+
+extern void formatkiller (char *,unsigned,int);
+extern void topten (int,time_t);
+extern void prscore (int,char **);
+extern struct obj *tt_oname (struct obj *);
+
+
+
+extern void initrack(void);
+extern void settrack(void);
+extern coord *gettrack (int,int);
+
+
+
+extern boolean burnarmor (struct monst *);
+extern int erode_obj (struct obj *,const char *,int,int);
+extern boolean grease_protect (struct obj *,const char *,struct monst *);
+extern struct trap *maketrap (int,int,int);
+extern void fall_through (int);
+extern struct monst *animate_statue (struct obj *,int,int,int,int *);
+extern struct monst *activate_statue_trap (struct trap *,int,int,int);
+
+extern void dotrap (struct trap *, unsigned);
+extern void seetrap (struct trap *);
+extern void feeltrap (struct trap *);
+extern int mintrap (struct monst *);
+extern void instapetrify (const char *);
+extern void minstapetrify (struct monst *,int);
+extern void selftouch (const char *);
+extern void mselftouch (struct monst *,const char *,int);
+extern void float_up(void);
+extern void fill_pit (int,int);
+extern int float_down (long, long);
+extern void climb_pit(void);
+extern boolean fire_damage (struct obj *,int,int,int);
+extern int fire_damage_chain (struct obj *,int,int,int,int);
+extern void acid_damage(struct obj *);
+extern int water_damage (struct obj *,const char*,int);
+extern void water_damage_chain (struct obj *,int);
+extern boolean drown(void);
+extern void drain_en (int);
+extern int dountrap(void);
+extern void cnv_trap_obj (int,int,struct trap *,int);
+extern int untrap (int);
+extern boolean openholdingtrap (struct monst *,boolean *);
+extern boolean closeholdingtrap (struct monst *,boolean *);
+extern boolean openfallingtrap (struct monst *,int,boolean *);
+extern boolean chest_trap (struct obj *,int,int);
+extern void deltrap (struct trap *);
+extern boolean delfloortrap (struct trap *);
+extern struct trap *t_at (int,int);
+extern void b_trapped (const char *,int);
+extern boolean unconscious(void);
+extern void blow_up_landmine (struct trap *);
+extern int launch_obj (int,int,int,int,int,int);
+extern boolean launch_in_progress(void);
+extern void force_launch_placement(void);
+extern boolean uteetering_at_seen_pit (struct trap *);
+extern boolean lava_effects(void);
+extern void sink_into_lava(void);
+extern void sokoban_guilt(void);
+
+
+
+extern void u_init(void);
+
+
+
+extern void erode_armor (struct monst *,int);
+extern boolean attack_checks (struct monst *,struct obj *);
+extern void check_caitiff (struct monst *);
+extern int find_roll_to_hit (struct monst *,int,struct obj *,int *,int *);
+extern boolean attack (struct monst *);
+extern boolean hmon (struct monst *,struct obj *,int);
+extern int damageum (struct monst *,struct attack *);
+extern void missum (struct monst *,struct attack *,int);
+extern int passive (struct monst *,int,int,int,int);
+extern void passive_obj (struct monst *,struct obj *,struct attack *);
+extern void stumble_onto_mimic (struct monst *);
+extern int flash_hits_mon (struct monst *,struct obj *);
+extern void light_hits_gremlin (struct monst *,int);
+
+
+
+
+
+
+
+extern void sethanguphandler (void (*)(int));
+extern boolean authorize_wizard_mode(void);
+extern boolean check_user_string (char *);
+
+
+
+
+
+extern void gettty(void);
+extern void settty (const char *);
+extern void setftty(void);
+extern void intron(void);
+extern void introff(void);
+extern void error (const char *,...) __attribute__ ((format (printf, 1, 2)));
+
+
+
+
+
+extern void getlock(void);
+extern void regularize (char *);
+
+
+
+
+extern int dosh(void);
+
+
+extern int child (int);
+
+
+extern boolean file_exists (const char *);
+# 2381 "../include/extern.h"
+extern void newegd (struct monst *);
+extern void free_egd (struct monst *);
+extern boolean grddead (struct monst *);
+extern char vault_occupied (char *);
+extern void invault(void);
+extern int gd_move (struct monst *);
+extern void paygd(void);
+extern long hidden_gold(void);
+extern boolean gd_sound(void);
+extern void vault_gd_watching (unsigned int);
+
+
+
+extern char *version_string (char *);
+extern char *getversionstring (char *);
+extern int doversion(void);
+extern int doextversion(void);
+
+
+
+extern boolean check_version (struct version_info *, const char *,int);
+
+extern boolean uptodate (int,const char *);
+extern void store_version (int);
+extern unsigned long get_feature_notice_ver (char *);
+extern unsigned long get_current_feature_ver(void);
+extern const char *copyright_banner_line (int);
+# 2436 "../include/extern.h"
+extern void vision_init(void);
+extern int does_block (int,int,struct rm*);
+extern void vision_reset(void);
+extern void vision_recalc (int);
+extern void block_point (int,int);
+extern void unblock_point (int,int);
+extern boolean clear_path (int,int,int,int);
+extern void do_clear_area (int,int,int, void (*)(int,int,genericptr_t),genericptr_t);
+
+extern unsigned howmonseen (struct monst *);
+# 2529 "../include/extern.h"
+extern const char *weapon_descr (struct obj *);
+extern int hitval (struct obj *,struct monst *);
+extern int dmgval (struct obj *,struct monst *);
+extern struct obj *select_rwep (struct monst *);
+extern struct obj *select_hwep (struct monst *);
+extern void possibly_unwield (struct monst *,int);
+extern void mwepgone (struct monst *);
+extern int mon_wield_item (struct monst *);
+extern int abon(void);
+extern int dbon(void);
+extern int enhance_weapon_skill(void);
+extern void unrestrict_weapon_skill (int);
+extern void use_skill (int,int);
+extern void add_weapon_skill (int);
+extern void lose_weapon_skill (int);
+extern int weapon_type (struct obj *);
+extern int uwep_skill_type(void);
+extern int weapon_hit_bonus (struct obj *);
+extern int weapon_dam_bonus (struct obj *);
+extern void skill_init (const struct def_skill *);
+
+
+
+extern void were_change (struct monst *);
+extern int counter_were (int);
+extern int were_beastie (int);
+extern void new_were (struct monst *);
+extern int were_summon (struct permonst *,int,int *,char *);
+extern void you_were(void);
+extern void you_unwere (int);
+
+
+
+extern void setuwep (struct obj *);
+extern void setuqwep (struct obj *);
+extern void setuswapwep (struct obj *);
+extern int dowield(void);
+extern int doswapweapon(void);
+extern int dowieldquiver(void);
+extern boolean wield_tool (struct obj *,const char *);
+extern int can_twoweapon(void);
+extern void drop_uswapwep(void);
+extern int dotwoweapon(void);
+extern void uwepgone(void);
+extern void uswapwepgone(void);
+extern void uqwepgone(void);
+extern void untwoweapon(void);
+extern int chwepon (struct obj *,int);
+extern int welded (struct obj *);
+extern void weldmsg (struct obj *);
+extern void setmnotwielded (struct monst *,struct obj *);
+extern boolean mwelded (struct obj *);
+
+
+
+extern void choose_windows (const char *);
+
+
+
+
+extern boolean genl_can_suspend_no(void);
+extern boolean genl_can_suspend_yes(void);
+extern char genl_message_menu (int,int,const char *);
+extern void genl_preference_update (const char *);
+extern char *genl_getmsghistory (int);
+extern void genl_putmsghistory (const char *,int);
+
+extern void nhwindows_hangup(void);
+
+
+
+
+extern void amulet(void);
+extern int mon_has_amulet (struct monst *);
+extern int mon_has_special (struct monst *);
+extern int tactics (struct monst *);
+extern void aggravate(void);
+extern void clonewiz(void);
+extern int pick_nasty(void);
+extern int nasty (struct monst*);
+extern void resurrect(void);
+extern void intervene(void);
+extern void wizdead(void);
+extern void cuss (struct monst *);
+
+
+
+extern int get_wormno(void);
+extern void initworm (struct monst *,int);
+extern void worm_move (struct monst *);
+extern void worm_nomove (struct monst *);
+extern void wormgone (struct monst *);
+extern void wormhitu (struct monst *);
+extern void cutworm (struct monst *,int,int,struct obj *);
+extern void see_wsegs (struct monst *);
+extern void detect_wsegs (struct monst *,int);
+extern void save_worm (int,int);
+extern void rest_worm (int);
+extern void place_wsegs (struct monst *);
+extern void remove_worm (struct monst *);
+extern void place_worm_tail_randomly (struct monst *,int,int);
+extern int count_wsegs (struct monst *);
+extern boolean worm_known (struct monst *);
+extern boolean worm_cross (int,int,int,int);
+
+
+
+extern void setworn (struct obj *,long);
+extern void setnotworn (struct obj *);
+extern long wearslot (struct obj *);
+extern void mon_set_minvis (struct monst *);
+extern void mon_adjust_speed (struct monst *,int,struct obj *);
+extern void update_mon_intrinsics (struct monst *,struct obj *,int,int);
+
+extern int find_mac (struct monst *);
+extern void m_dowear (struct monst *,int);
+extern struct obj *which_armor (struct monst *,long);
+extern void mon_break_armor (struct monst *,int);
+extern void bypass_obj (struct obj *);
+extern void clear_bypasses(void);
+extern void bypass_objlist (struct obj *,int);
+extern struct obj *nxt_unbypassed_obj (struct obj *);
+extern int racial_exception (struct monst *, struct obj *);
+
+
+
+extern int dowrite (struct obj *);
+
+
+
+extern void learnwand (struct obj *);
+extern int bhitm (struct monst *,struct obj *);
+extern void probe_monster (struct monst *);
+extern boolean get_obj_location (struct obj *,xchar *,xchar *,int);
+extern boolean get_mon_location (struct monst *,xchar *,xchar *,int);
+extern struct monst *get_container_location (struct obj *obj, int *, int *);
+extern struct monst *montraits (struct obj *,coord *);
+extern struct monst *revive (struct obj *,int);
+extern int unturn_dead (struct monst *);
+extern void cancel_item (struct obj *);
+extern boolean drain_item (struct obj *);
+extern struct obj *poly_obj (struct obj *, int);
+extern boolean obj_resists (struct obj *,int,int);
+extern boolean obj_shudders (struct obj *);
+extern void do_osshock (struct obj *);
+extern int bhito (struct obj *,struct obj *);
+extern int bhitpile (struct obj *,int (*)(struct obj *,struct obj *),int,int,int);
+extern int zappable (struct obj *);
+extern void zapnodir (struct obj *);
+extern int dozap(void);
+extern int zapyourself (struct obj *,int);
+extern void ubreatheu (struct attack *);
+extern int lightdamage (struct obj *,int,int);
+extern boolean flashburn (long);
+extern boolean cancel_monst (struct monst *,struct obj *, int,int,int);
+
+extern void zapsetup(void);
+extern void zapwrapup(void);
+extern void weffects (struct obj *);
+extern int spell_damage_bonus (int);
+extern const char *exclam (int force);
+extern void hit (const char *,struct monst *,const char *);
+extern void miss (const char *,struct monst *);
+extern struct monst *bhit (int,int,int,int,int (*)(struct monst *,struct obj *), int (*)(struct obj *,struct obj *),struct obj **);
+
+extern struct monst *boomhit (struct obj *,int,int);
+extern int zhitm (struct monst *,int,int,struct obj **);
+extern int burn_floor_objects (int,int,int,int);
+extern void buzz (int,int,int,int,int,int);
+extern void melt_ice (int,int,const char *);
+extern void start_melt_ice_timeout (int,int,long);
+extern void melt_ice_away (union any *, long);
+extern int zap_over_floor (int,int,int,boolean *,int);
+extern void fracture_rock (struct obj *);
+extern boolean break_statue (struct obj *);
+extern void destroy_item (int,int);
+extern int destroy_mitem (struct monst *,int,int);
+extern int resist (struct monst *,int,int,int);
+extern void makewish(void);
+# 178 "../include/hack.h" 2
+# 1 "../include/winprocs.h" 1
+# 9 "../include/winprocs.h"
+# 1 "../include/botl.h" 1
+# 62 "../include/botl.h"
+extern const char *status_fieldnames[];
+# 10 "../include/winprocs.h" 2
+
+
+struct window_procs {
+ const char *name;
+
+
+ unsigned long wincap;
+ unsigned long wincap2;
+ void (*win_init_nhwindows) (int *, char **);
+ void (*win_player_selection)(void);
+ void (*win_askname)(void);
+ void (*win_get_nh_event)(void) ;
+ void (*win_exit_nhwindows) (const char *);
+ void (*win_suspend_nhwindows) (const char *);
+ void (*win_resume_nhwindows)(void);
+ winid (*win_create_nhwindow) (int);
+ void (*win_clear_nhwindow) (winid);
+ void (*win_display_nhwindow) (winid, int);
+ void (*win_destroy_nhwindow) (winid);
+ void (*win_curs) (winid,int,int);
+ void (*win_putstr) (winid, int, const char *);
+ void (*win_putmixed) (winid, int, const char *);
+ void (*win_display_file) (const char *, int);
+ void (*win_start_menu) (winid);
+ void (*win_add_menu) (winid,int,const union any *, int,int,int,const char *, int);
+
+ void (*win_end_menu) (winid, const char *);
+ int (*win_select_menu) (winid, int, struct mi **);
+ char (*win_message_menu) (int,int,const char *);
+ void (*win_update_inventory)(void);
+ void (*win_mark_synch)(void);
+ void (*win_wait_synch)(void);
+
+ void (*win_cliparound) (int, int);
+
+
+
+
+ void (*win_print_glyph) (winid,int,int,int);
+ void (*win_raw_print) (const char *);
+ void (*win_raw_print_bold) (const char *);
+ int (*win_nhgetch)(void);
+ int (*win_nh_poskey) (int *, int *, int *);
+ void (*win_nhbell)(void);
+ int (*win_doprev_message)(void);
+ char (*win_yn_function) (const char *, const char *, int);
+ void (*win_getlin) (const char *,char *);
+ int (*win_get_ext_cmd)(void);
+ void (*win_number_pad) (int);
+ void (*win_delay_output)(void);
+# 70 "../include/winprocs.h"
+ void (*win_start_screen)(void);
+ void (*win_end_screen)(void);
+
+ void (*win_outrip) (winid,int,time_t);
+ void (*win_preference_update) (const char *);
+ char * (*win_getmsghistory) (int);
+ void (*win_putmsghistory) (const char *,int);
+
+ void (*win_status_init)(void);
+ void (*win_status_finish)(void);
+ void (*win_status_enablefield) (int,const char *,const char *,int);
+ void (*win_status_update) (int,genericptr_t,int,int);
+
+ void (*win_status_threshold) (int,int,anything,int,int,int);
+
+
+ boolean (*win_can_suspend)(void);
+};
+
+extern
+
+volatile
+
+ struct window_procs windowprocs;
+# 258 "../include/winprocs.h"
+struct wc_Opt {
+ const char *wc_name;
+ unsigned long wc_bit;
+};
+# 179 "../include/hack.h" 2
+# 1 "../include/sys.h" 1
+# 9 "../include/sys.h"
+struct sysopt {
+ char *support;
+ char *recover;
+ char *wizards;
+ char *explorers;
+ char *shellers;
+ char *debugfiles;
+ int env_dbgfl;
+
+
+
+
+ int maxplayers;
+
+ int persmax;
+ int pers_is_uid;
+ int entrymax;
+ int pointsmin;
+ int tt_oname_maxrank;
+
+
+ char *gdbpath;
+ char *greppath;
+ int panictrace_gdb;
+
+ int panictrace_libc;
+
+
+ int seduce;
+ int check_save_uid;
+};
+
+extern struct sysopt sysopt;
+# 180 "../include/hack.h" 2
+# 15 "lev_main.c" 2
+# 1 "../include/date.h" 1
+# 16 "lev_main.c" 2
+# 1 "../include/sp_lev.h" 1
+# 57 "../include/sp_lev.h"
+enum opcode_defs {
+ SPO_NULL = 0,
+ SPO_MESSAGE,
+ SPO_MONSTER,
+ SPO_OBJECT,
+ SPO_ENGRAVING,
+ SPO_ROOM,
+ SPO_SUBROOM,
+ SPO_DOOR,
+ SPO_STAIR,
+ SPO_LADDER,
+ SPO_ALTAR,
+ SPO_FOUNTAIN,
+ SPO_SINK,
+ SPO_POOL,
+ SPO_TRAP,
+ SPO_GOLD,
+ SPO_CORRIDOR,
+ SPO_LEVREGION,
+ SPO_DRAWBRIDGE,
+ SPO_MAZEWALK,
+ SPO_NON_DIGGABLE,
+ SPO_NON_PASSWALL,
+ SPO_WALLIFY,
+ SPO_MAP,
+ SPO_ROOM_DOOR,
+ SPO_REGION,
+ SPO_MINERALIZE,
+ SPO_CMP,
+ SPO_JMP,
+ SPO_JL,
+ SPO_JLE,
+ SPO_JG,
+ SPO_JGE,
+ SPO_JE,
+ SPO_JNE,
+ SPO_TERRAIN,
+ SPO_REPLACETERRAIN,
+ SPO_EXIT,
+ SPO_ENDROOM,
+ SPO_POP_CONTAINER,
+ SPO_PUSH,
+ SPO_POP,
+ SPO_RN2,
+ SPO_DEC,
+ SPO_INC,
+ SPO_MATH_ADD,
+ SPO_MATH_SUB,
+ SPO_MATH_MUL,
+ SPO_MATH_DIV,
+ SPO_MATH_MOD,
+ SPO_MATH_SIGN,
+ SPO_COPY,
+ SPO_END_MONINVENT,
+ SPO_GRAVE,
+ SPO_FRAME_PUSH,
+ SPO_FRAME_POP,
+ SPO_CALL,
+ SPO_RETURN,
+ SPO_INITLEVEL,
+ SPO_LEVEL_FLAGS,
+ SPO_VAR_INIT,
+ SPO_SHUFFLE_ARRAY,
+ SPO_DICE,
+
+ SPO_SEL_ADD,
+ SPO_SEL_POINT,
+ SPO_SEL_RECT,
+ SPO_SEL_FILLRECT,
+ SPO_SEL_LINE,
+ SPO_SEL_RNDLINE,
+ SPO_SEL_GROW,
+ SPO_SEL_FLOOD,
+ SPO_SEL_RNDCOORD,
+ SPO_SEL_ELLIPSE,
+ SPO_SEL_FILTER,
+ SPO_SEL_GRADIENT,
+ SPO_SEL_COMPLEMENT,
+
+ MAX_SP_OPCODES
+};
+# 246 "../include/sp_lev.h"
+struct opvar {
+ xchar spovartyp;
+ union {
+ char *str;
+ long l;
+ } vardata;
+};
+
+struct splev_var {
+ struct splev_var *next;
+ char *name;
+ xchar svtyp;
+ union {
+ struct opvar *value;
+ struct opvar **arrayvalues;
+ } data;
+ long array_len;
+};
+
+struct splevstack {
+ long depth;
+ long depth_alloc;
+ struct opvar **stackdata;
+};
+
+
+struct sp_frame {
+ struct sp_frame *next;
+ struct splevstack *stack;
+ struct splev_var *variables;
+ long n_opcode;
+};
+
+
+struct sp_coder {
+ struct splevstack *stack;
+ struct sp_frame *frame;
+ int premapped;
+ boolean solidify;
+ struct mkroom *croom;
+ struct mkroom *tmproomlist[5 +1];
+ boolean failed_room[5 +1];
+ int n_subroom;
+ boolean exit_script;
+ int lvl_is_joined;
+
+ int opcode;
+ struct opvar *opdat;
+};
+# 307 "../include/sp_lev.h"
+typedef struct {
+ xchar is_random;
+ long getloc_flags;
+ int x, y;
+} unpacked_coord;
+
+typedef struct {
+ int cmp_what;
+ int cmp_val;
+} opcmp;
+
+typedef struct {
+ long jmp_target;
+} opjmp;
+
+
+typedef union str_or_len {
+ char *str;
+ int len;
+} Str_or_Len;
+
+typedef struct {
+ xchar init_style;
+ long flags;
+ schar filling;
+ boolean init_present, padding;
+ char fg, bg;
+ boolean smoothed, joined;
+ xchar lit, walled;
+ boolean icedpools;
+} lev_init;
+
+typedef struct {
+ xchar wall, pos, secret, mask;
+} room_door;
+
+typedef struct {
+ long coord;
+ xchar x, y, type;
+} trap;
+
+typedef struct {
+ Str_or_Len name, appear_as;
+ short id;
+ aligntyp align;
+ long coord;
+ xchar x, y, class, appear;
+ schar peaceful, asleep;
+ short female, invis, cancelled, revived, avenge, fleeing, blinded, paralyzed, stunned, confused;
+ long seentraps;
+ short has_invent;
+} monster;
+
+typedef struct {
+ Str_or_Len name;
+ int corpsenm;
+ short id, spe;
+ long coord;
+ xchar x, y, class, containment;
+ schar curse_state;
+ int quan;
+ short buried;
+ short lit;
+ short eroded, locked, trapped, recharged, invis, greased, broken;
+} object;
+
+typedef struct {
+ long coord;
+ xchar x, y;
+ aligntyp align;
+ xchar shrine;
+} altar;
+
+typedef struct {
+ xchar x1, y1, x2, y2;
+ xchar rtype, rlit, rirreg;
+} region;
+
+typedef struct {
+ xchar ter, tlit;
+} terrain;
+
+typedef struct {
+ xchar chance;
+ xchar x1,y1,x2,y2;
+ xchar fromter, toter, tolit;
+} replaceterrain;
+
+
+typedef struct {
+ struct { xchar x1, y1, x2, y2; } inarea;
+ struct { xchar x1, y1, x2, y2; } delarea;
+ boolean in_islev, del_islev;
+ xchar rtype, padding;
+ Str_or_Len rname;
+} lev_region;
+
+typedef struct {
+ struct {
+ xchar room;
+ xchar wall;
+ xchar door;
+ } src, dest;
+} corridor;
+
+typedef struct _room {
+ Str_or_Len name;
+ Str_or_Len parent;
+ xchar x, y, w, h;
+ xchar xalign, yalign;
+ xchar rtype, chance, rlit, filled, joined;
+} room;
+
+typedef struct {
+ schar zaligntyp;
+ schar keep_region;
+ schar halign, valign;
+ char xsize, ysize;
+ char **map;
+} mazepart;
+
+typedef struct {
+ int opcode;
+ struct opvar *opdat;
+} _opcode;
+
+typedef struct {
+ _opcode *opcodes;
+ long n_opcodes;
+} sp_lev;
+
+typedef struct {
+ xchar x, y, direction, count, lit;
+ char typ;
+} spill;
+
+
+
+struct lc_funcdefs_parm {
+ char *name;
+ char parmtype;
+ struct lc_funcdefs_parm *next;
+};
+
+struct lc_funcdefs {
+ struct lc_funcdefs *next;
+ char *name;
+ long addr;
+ sp_lev code;
+ long n_called;
+ struct lc_funcdefs_parm *params;
+ long n_params;
+};
+
+struct lc_vardefs {
+ struct lc_vardefs *next;
+ char *name;
+ long var_type;
+ long n_used;
+};
+
+struct lc_breakdef {
+ struct lc_breakdef *next;
+ struct opvar *breakpoint;
+ int break_depth;
+};
+# 17 "lev_main.c" 2
+
+
+
+# 1 "/usr/include/ctype.h" 1 3 4
+# 69 "/usr/include/ctype.h" 3 4
+# 1 "/usr/include/runetype.h" 1 3 4
+# 70 "/usr/include/runetype.h" 3 4
+typedef __darwin_wint_t wint_t;
+# 81 "/usr/include/runetype.h" 3 4
+typedef struct {
+ __darwin_rune_t __min;
+ __darwin_rune_t __max;
+ __darwin_rune_t __map;
+ __uint32_t *__types;
+} _RuneEntry;
+
+typedef struct {
+ int __nranges;
+ _RuneEntry *__ranges;
+} _RuneRange;
+
+typedef struct {
+ char __name[14];
+ __uint32_t __mask;
+} _RuneCharClass;
+
+typedef struct {
+ char __magic[8];
+ char __encoding[32];
+
+ __darwin_rune_t (*__sgetrune)(const char *, __darwin_size_t, char const **);
+ int (*__sputrune)(__darwin_rune_t, char *, __darwin_size_t, char **);
+ __darwin_rune_t __invalid_rune;
+
+ __uint32_t __runetype[(1 <<8 )];
+ __darwin_rune_t __maplower[(1 <<8 )];
+ __darwin_rune_t __mapupper[(1 <<8 )];
+
+
+
+
+
+
+ _RuneRange __runetype_ext;
+ _RuneRange __maplower_ext;
+ _RuneRange __mapupper_ext;
+
+ void *__variable;
+ int __variable_len;
+
+
+
+
+ int __ncharclasses;
+ _RuneCharClass *__charclasses;
+} _RuneLocale;
+
+
+
+
+extern _RuneLocale _DefaultRuneLocale;
+extern _RuneLocale *_CurrentRuneLocale;
+
+# 70 "/usr/include/ctype.h" 2 3 4
+# 145 "/usr/include/ctype.h" 3 4
+
+unsigned long ___runetype(__darwin_ct_rune_t);
+__darwin_ct_rune_t ___tolower(__darwin_ct_rune_t);
+__darwin_ct_rune_t ___toupper(__darwin_ct_rune_t);
+
+
+static __inline int
+isascii(int _c)
+{
+ return ((_c & ~0x7F) == 0);
+}
+# 164 "/usr/include/ctype.h" 3 4
+
+int __maskrune(__darwin_ct_rune_t, unsigned long);
+
+
+
+static __inline int
+__istype(__darwin_ct_rune_t _c, unsigned long _f)
+{
+
+
+
+ return (isascii(_c) ? !!(_DefaultRuneLocale.__runetype[_c] & _f)
+ : !!__maskrune(_c, _f));
+
+}
+
+static __inline __darwin_ct_rune_t
+__isctype(__darwin_ct_rune_t _c, unsigned long _f)
+{
+
+
+
+ return (_c < 0 || _c >= (1 <<8 )) ? 0 :
+ !!(_DefaultRuneLocale.__runetype[_c] & _f);
+
+}
+# 204 "/usr/include/ctype.h" 3 4
+
+__darwin_ct_rune_t __toupper(__darwin_ct_rune_t);
+__darwin_ct_rune_t __tolower(__darwin_ct_rune_t);
+
+
+
+static __inline int
+__wcwidth(__darwin_ct_rune_t _c)
+{
+ unsigned int _x;
+
+ if (_c == 0)
+ return (0);
+ _x = (unsigned int)__maskrune(_c, 0xe0000000L|0x00040000L);
+ if ((_x & 0xe0000000L) != 0)
+ return ((_x & 0xe0000000L) >> 30);
+ return ((_x & 0x00040000L) != 0 ? 1 : -1);
+}
+
+
+
+
+
+
+static __inline int
+isalnum(int _c)
+{
+ return (__istype(_c, 0x00000100L|0x00000400L));
+}
+
+static __inline int
+isalpha(int _c)
+{
+ return (__istype(_c, 0x00000100L));
+}
+
+static __inline int
+isblank(int _c)
+{
+ return (__istype(_c, 0x00020000L));
+}
+
+static __inline int
+iscntrl(int _c)
+{
+ return (__istype(_c, 0x00000200L));
+}
+
+
+static __inline int
+isdigit(int _c)
+{
+ return (__isctype(_c, 0x00000400L));
+}
+
+static __inline int
+isgraph(int _c)
+{
+ return (__istype(_c, 0x00000800L));
+}
+
+static __inline int
+islower(int _c)
+{
+ return (__istype(_c, 0x00001000L));
+}
+
+static __inline int
+isprint(int _c)
+{
+ return (__istype(_c, 0x00040000L));
+}
+
+static __inline int
+ispunct(int _c)
+{
+ return (__istype(_c, 0x00002000L));
+}
+
+static __inline int
+isspace(int _c)
+{
+ return (__istype(_c, 0x00004000L));
+}
+
+static __inline int
+isupper(int _c)
+{
+ return (__istype(_c, 0x00008000L));
+}
+
+
+static __inline int
+isxdigit(int _c)
+{
+ return (__isctype(_c, 0x00010000L));
+}
+
+static __inline int
+toascii(int _c)
+{
+ return (_c & 0x7F);
+}
+
+static __inline int
+tolower(int _c)
+{
+ return (__tolower(_c));
+}
+
+static __inline int
+toupper(int _c)
+{
+ return (__toupper(_c));
+}
+
+
+static __inline int
+digittoint(int _c)
+{
+ return (__maskrune(_c, 0x0F));
+}
+
+static __inline int
+ishexnumber(int _c)
+{
+ return (__istype(_c, 0x00010000L));
+}
+
+static __inline int
+isideogram(int _c)
+{
+ return (__istype(_c, 0x00080000L));
+}
+
+static __inline int
+isnumber(int _c)
+{
+ return (__istype(_c, 0x00000400L));
+}
+
+static __inline int
+isphonogram(int _c)
+{
+ return (__istype(_c, 0x00200000L));
+}
+
+static __inline int
+isrune(int _c)
+{
+ return (__istype(_c, 0xFFFFFFF0L));
+}
+
+static __inline int
+isspecial(int _c)
+{
+ return (__istype(_c, 0x00100000L));
+}
+# 21 "lev_main.c" 2
+# 47 "lev_main.c"
+# 1 "/usr/include/fcntl.h" 1 3 4
+# 23 "/usr/include/fcntl.h" 3 4
+# 1 "/usr/include/sys/fcntl.h" 1 3 4
+# 305 "/usr/include/sys/fcntl.h" 3 4
+struct flock {
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+ short l_type;
+ short l_whence;
+};
+
+
+
+
+
+
+
+struct radvisory {
+ off_t ra_offset;
+ int ra_count;
+};
+
+
+
+
+
+
+typedef struct fsignatures {
+ off_t fs_file_start;
+ void *fs_blob_start;
+ size_t fs_blob_size;
+} fsignatures_t;
+# 343 "/usr/include/sys/fcntl.h" 3 4
+typedef struct fstore {
+ unsigned int fst_flags;
+ int fst_posmode;
+ off_t fst_offset;
+ off_t fst_length;
+ off_t fst_bytesalloc;
+} fstore_t;
+
+
+
+typedef struct fbootstraptransfer {
+ off_t fbt_offset;
+ size_t fbt_length;
+ void *fbt_buffer;
+} fbootstraptransfer_t;
+# 377 "/usr/include/sys/fcntl.h" 3 4
+#pragma pack(4)
+
+struct log2phys {
+ unsigned int l2p_flags;
+ off_t l2p_contigbytes;
+ off_t l2p_devoffset;
+};
+
+#pragma pack()
+# 396 "/usr/include/sys/fcntl.h" 3 4
+struct _filesec;
+typedef struct _filesec *filesec_t;
+
+
+typedef enum {
+ FILESEC_OWNER = 1,
+ FILESEC_GROUP = 2,
+ FILESEC_UUID = 3,
+ FILESEC_MODE = 4,
+ FILESEC_ACL = 5,
+ FILESEC_GRPUUID = 6,
+
+
+ FILESEC_ACL_RAW = 100,
+ FILESEC_ACL_ALLOCSIZE = 101
+} filesec_property_t;
+
+
+
+
+
+
+int open(const char *, int, ...) __asm("_" "open" "$UNIX2003");
+int creat(const char *, mode_t) __asm("_" "creat" "$UNIX2003");
+int fcntl(int, int, ...) __asm("_" "fcntl" "$UNIX2003");
+
+int openx_np(const char *, int, filesec_t);
+int flock(int, int);
+filesec_t filesec_init(void);
+filesec_t filesec_dup(filesec_t);
+void filesec_free(filesec_t);
+int filesec_get_property(filesec_t, filesec_property_t, void *);
+int filesec_set_property(filesec_t, filesec_property_t, const void *);
+int filesec_query_property(filesec_t, filesec_property_t, int *);
+
+
+
+
+# 23 "/usr/include/fcntl.h" 2 3 4
+# 48 "lev_main.c" 2
+# 82 "lev_main.c"
+extern int yyparse(void);
+extern void init_yyin (FILE *);
+extern void init_yyout (FILE *);
+
+int main (int, char **);
+void yyerror (const char *);
+void yywarning (const char *);
+int yywrap(void);
+int get_floor_type (int);
+int get_room_type (char *);
+int get_trap_type (char *);
+int get_monster_id (char *, int);
+int get_object_id (char *, int);
+boolean check_monster_char (int);
+boolean check_object_char (int);
+char what_map_char (int);
+void scan_map (char *, sp_lev *);
+boolean check_subrooms(void);
+boolean write_level_file (char *, sp_lev *);
+
+struct lc_funcdefs *funcdef_new (long, char *);
+void funcdef_free_all (struct lc_funcdefs *);
+struct lc_funcdefs *funcdef_defined (struct lc_funcdefs *, char *, int);
+
+
+struct lc_vardefs *vardef_new (long, char *);
+void vardef_free_all (struct lc_vardefs *);
+struct lc_vardefs *vardef_defined (struct lc_vardefs *, char *, int);
+
+void splev_add_from (sp_lev *, sp_lev *);
+
+extern void monst_init(void);
+extern void objects_init(void);
+extern void decl_init(void);
+
+void add_opcode (sp_lev *, int, genericptr_t);
+
+static boolean write_common_data (int);
+static boolean write_maze (int, sp_lev *);
+static void init_obj_classes(void);
+static int case_insensitive_comp (const char *, const char *);
+
+void lc_pline (const char *, ...);
+void lc_error (const char *, ...);
+void lc_warning (const char *, ...);
+char *decode_parm_chr (int);
+char *decode_parm_str (char *);
+struct opvar *set_opvar_int (struct opvar *, long);
+struct opvar *set_opvar_coord (struct opvar *, long);
+struct opvar *set_opvar_region (struct opvar *, long);
+struct opvar *set_opvar_mapchar (struct opvar *, long);
+struct opvar *set_opvar_monst (struct opvar *, long);
+struct opvar *set_opvar_obj (struct opvar *, long);
+struct opvar *set_opvar_str (struct opvar *, const char *);
+struct opvar *set_opvar_var (struct opvar *, const char *);
+void add_opvars (sp_lev *, const char *, ...);
+void break_stmt_start(void);
+void break_stmt_end (sp_lev *);
+void break_stmt_new (sp_lev *, long);
+char *funcdef_paramtypes (struct lc_funcdefs *);
+const char *spovar2str (long);
+void vardef_used (struct lc_vardefs *, char *);
+void check_vardef_type (struct lc_vardefs *, char *, long);
+struct lc_vardefs *add_vardef_type (struct lc_vardefs *, char *, long);
+
+int reverse_jmp_opcode (int);
+struct opvar *opvar_clone (struct opvar *);
+void start_level_def (sp_lev **, char *);
+
+static struct {
+ const char *name;
+ int type;
+} trap_types[] = { { "arrow", 1 },
+ { "dart", 2 },
+ { "falling rock", 3 },
+ { "board", 4 },
+ { "bear", 5 },
+ { "land mine", 6 },
+ { "rolling boulder", 7 },
+ { "sleep gas", 8 },
+ { "rust", 9 },
+ { "fire", 10 },
+ { "pit", 11 },
+ { "spiked pit", 12 },
+ { "hole", 13 },
+ { "trap door", 14 },
+ { "teleport", 15 },
+ { "level teleport", 16 },
+ { "magic portal", 17 },
+ { "web", 18 },
+ { "statue", 19 },
+ { "magic", 20 },
+ { "anti magic", 21 },
+ { "polymorph", 22 },
+ { 0, 0 } };
+
+static struct {
+ const char *name;
+ int type;
+} room_types[] = {
+
+
+ { "ordinary", 0 },
+ { "throne", 2 },
+ { "swamp", 3 },
+ { "vault", 4 },
+ { "beehive", 5 },
+ { "morgue", 6 },
+ { "barracks", 7 },
+ { "zoo", 8 },
+ { "delphi", 9 },
+ { "temple", 10 },
+ { "anthole", 13 },
+ { "cocknest", 12 },
+ { "leprehall", 11 },
+ { "shop", 14 },
+ { "armor shop", 15 },
+ { "scroll shop", 16 },
+ { "potion shop", 17 },
+ { "weapon shop", 18 },
+ { "food shop", 19 },
+ { "ring shop", 20 },
+ { "wand shop", 21 },
+ { "tool shop", 22 },
+ { "book shop", 23 },
+ { "health food shop", 24 },
+ { "candle shop", 25 },
+ { 0, 0 }
+};
+
+const char *fname = "(stdin)";
+int fatal_error = 0;
+int got_errors = 0;
+int be_verbose = 0;
+int fname_counter = 1;
+
+
+
+
+
+
+extern unsigned int max_x_map, max_y_map;
+
+extern int nh_line_number;
+
+extern int token_start_pos;
+extern char curr_token[512];
+
+struct lc_vardefs *variable_definitions = ((void *)0);
+struct lc_funcdefs *function_definitions = ((void *)0);
+
+extern int allow_break_statements;
+extern struct lc_breakdef *break_list;
+
+int
+main(argc, argv)
+int argc;
+char **argv;
+{
+ FILE *fin;
+ int i;
+ boolean errors_encountered = ((boolean)0);
+# 263 "lev_main.c"
+ monst_init();
+ objects_init();
+ decl_init();
+
+ init_obj_classes();
+
+ init_yyout(__stdoutp);
+ if (argc == 1) {
+ init_yyin(__stdinp);
+ (void) yyparse();
+ if (fatal_error > 0) {
+ errors_encountered = ((boolean)1);
+ }
+ } else {
+ for (i = 1; i < argc; i++) {
+ fname = argv[i];
+ if (!strcmp(fname, "-v")) {
+ be_verbose++;
+ continue;
+ }
+ fin = freopen(fname, "r", __stdinp);
+ if (!fin) {
+ lc_pline("Can't open \"%s\" for input.\n", fname);
+ perror(fname);
+ errors_encountered = ((boolean)1);
+ } else {
+ fname_counter = 1;
+ init_yyin(fin);
+ (void) yyparse();
+ nh_line_number = 1;
+ if (fatal_error > 0 || got_errors > 0) {
+ errors_encountered = ((boolean)1);
+ fatal_error = 0;
+ }
+ }
+ }
+ }
+ exit(errors_encountered ? 1 : 0);
+
+ return 0;
+}
+# 313 "lev_main.c"
+void
+yyerror(s)
+const char *s;
+{
+ char *e = ((char *) s + strlen(s) - 1);
+
+ (void) fprintf(__stderrp, "%s: line %d, pos %d: %s", fname, nh_line_number,
+ token_start_pos - (int) strlen(curr_token), s);
+ if (*e != '.' && *e != '!')
+ (void) fprintf(__stderrp, " at \"%s\"", curr_token);
+ (void) fprintf(__stderrp, "\n");
+
+ if (++fatal_error > 25) {
+ (void) fprintf(__stderrp, "Too many errors, good bye!\n");
+ exit(1);
+ }
+}
+
+
+
+
+void
+yywarning(s)
+const char *s;
+{
+ (void) fprintf(__stderrp, "%s: line %d : WARNING : %s\n", fname,
+ nh_line_number, s);
+}
+
+
+
+
+int
+yywrap()
+{
+ return 1;
+}
+# 361 "lev_main.c"
+static int lc_pline_mode = 0;
+
+
+static void lc_vpline (const char *, va_list);
+
+void lc_pline
+(const char * line, ...) { va_list the_args;
+{
+ __builtin_va_start(the_args,line);
+ ;
+ lc_vpline(line, the_args);
+ __builtin_va_end(the_args); };
+}
+
+
+static void
+lc_vpline(const char *line, va_list the_args)
+# 392 "lev_main.c"
+{
+
+ char pbuf[3 * 256];
+ static char nomsg[] = "(no message)";
+
+
+ if (!line || !*line)
+ line = nomsg;
+ if (strchr(line, '%')) {
+ (void) vsprintf(pbuf, line, the_args);
+ pbuf[256 - 1] = '\0';
+ line = pbuf;
+ }
+ switch (lc_pline_mode) {
+ case 2:
+ yyerror(line);
+ break;
+ case 1:
+ yywarning(line);
+ break;
+ default:
+ (void) fprintf(__stderrp, "%s\n", line);
+ break;
+ }
+ lc_pline_mode = 0;
+ return;
+
+
+
+}
+
+
+void lc_error
+(const char * line, ...) { va_list the_args;
+{
+ __builtin_va_start(the_args,line);
+ ;
+ lc_pline_mode = 2;
+ lc_vpline(line, the_args);
+ __builtin_va_end(the_args); };
+ return;
+}
+
+
+void lc_warning
+(const char * line, ...) { va_list the_args;
+{
+ __builtin_va_start(the_args,line);
+ ;
+ lc_pline_mode = 1;
+ lc_vpline(line, the_args);
+ __builtin_va_end(the_args); };
+ return;
+}
+
+char *
+decode_parm_chr(chr)
+char chr;
+{
+ static char buf[32];
+
+ switch (chr) {
+ default:
+ (void) strcpy(buf, "unknown");
+ break;
+ case 'i':
+ (void) strcpy(buf, "int");
+ break;
+ case 'r':
+ (void) strcpy(buf, "region");
+ break;
+ case 's':
+ (void) strcpy(buf, "str");
+ break;
+ case 'O':
+ (void) strcpy(buf, "obj");
+ break;
+ case 'c':
+ (void) strcpy(buf, "coord");
+ break;
+ case ' ':
+ (void) strcpy(buf, "nothing");
+ break;
+ case 'm':
+ (void) strcpy(buf, "mapchar");
+ break;
+ case 'M':
+ (void) strcpy(buf, "monster");
+ break;
+ }
+ return buf;
+}
+
+char *
+decode_parm_str(str)
+char *str;
+{
+ static char tmpbuf[1024];
+ char *p = str;
+ tmpbuf[0] = '\0';
+ if (str) {
+ for (; *p; p++) {
+ (void) strcat(tmpbuf, decode_parm_chr(*p));
+ if (*(p + 1))
+ (void) strcat(tmpbuf, ", ");
+ }
+ }
+ return tmpbuf;
+}
+
+struct opvar *
+set_opvar_int(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x01;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_coord(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x04;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_region(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x05;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_mapchar(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x06;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_monst(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x07;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_obj(ov, val)
+struct opvar *ov;
+long val;
+{
+ if (ov) {
+ ov->spovartyp = 0x08;
+ ov->vardata.l = val;
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_str(ov, val)
+struct opvar *ov;
+const char *val;
+{
+ if (ov) {
+ ov->spovartyp = 0x02;
+ ov->vardata.str = (val) ? strdup(val) : ((void *)0);
+ }
+ return ov;
+}
+
+struct opvar *
+set_opvar_var(ov, val)
+struct opvar *ov;
+const char *val;
+{
+ if (ov) {
+ ov->spovartyp = 0x03;
+ ov->vardata.str = (val) ? strdup(val) : ((void *)0);
+ }
+ return ov;
+}
+
+
+
+
+
+static void vadd_opvars (sp_lev *, const char *, va_list);
+
+void add_opvars
+(sp_lev * sp, const char * fmt, ...) { va_list the_args;
+ __builtin_va_start(the_args,fmt);
+ ;
+ vadd_opvars(sp, fmt, the_args);
+ __builtin_va_end(the_args); };
+}
+
+
+static void
+vadd_opvars(sp_lev *sp, const char *fmt, va_list the_args)
+{
+# 633 "lev_main.c"
+ const char *p, *lp;
+ long la;
+
+
+ for (p = fmt; *p != '\0'; p++) {
+ switch (*p) {
+ case ' ':
+ break;
+ case 'i':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_int(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'c':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_coord(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'r':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_region(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'm':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_mapchar(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'M':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_monst(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'O':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_obj(ov, la = __builtin_va_arg(the_args,long) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 's':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_str(ov, lp = __builtin_va_arg(the_args,const char *) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'v':
+ {
+ struct opvar *ov = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ set_opvar_var(ov, lp = __builtin_va_arg(the_args,const char *) );
+ add_opcode(sp, SPO_PUSH, ov);
+ break;
+ }
+ case 'o':
+ {
+ long i = la = __builtin_va_arg(the_args,int);
+ if (i < 0 || i >= MAX_SP_OPCODES)
+ lc_pline("add_opvars: unknown opcode '%ld'.", i);
+ add_opcode(sp, i, ((void *)0));
+ break;
+ }
+ default:
+ lc_pline("add_opvars: illegal format character '%c'.", *p);
+ break;
+ }
+ }
+ return;
+}
+
+void
+break_stmt_start()
+{
+ allow_break_statements++;
+}
+
+void
+break_stmt_end(splev)
+sp_lev *splev;
+{
+ struct lc_breakdef *tmp = break_list;
+ struct lc_breakdef *prv = ((void *)0);
+ while (tmp) {
+ if (tmp->break_depth == allow_break_statements) {
+ struct lc_breakdef *nxt = tmp->next;
+ set_opvar_int(tmp->breakpoint,
+ splev->n_opcodes - tmp->breakpoint->vardata.l - 1);
+ tmp->next = ((void *)0);
+ if (tmp) free((genericptr_t)(tmp));
+ if (!prv)
+ break_list = ((void *)0);
+ else
+ prv->next = nxt;
+ tmp = nxt;
+ } else {
+ prv = tmp;
+ tmp = tmp->next;
+ }
+ }
+ allow_break_statements--;
+}
+
+void
+break_stmt_new(splev, i)
+sp_lev *splev;
+long i;
+{
+ struct lc_breakdef *tmp = (struct lc_breakdef *) memset((genericptr_t) alloc(sizeof(struct lc_breakdef)), 0, sizeof(struct lc_breakdef));
+ tmp->breakpoint = (struct opvar *) memset((genericptr_t) alloc(sizeof(struct opvar)), 0, sizeof(struct opvar));
+ tmp->break_depth = allow_break_statements;
+ tmp->next = break_list;
+ break_list = tmp;
+ set_opvar_int(tmp->breakpoint, i);
+ add_opcode(splev, SPO_PUSH, tmp->breakpoint);
+ add_opcode(splev, SPO_JMP, ((void *)0));
+}
+
+struct lc_funcdefs *
+funcdef_new(addr, name)
+long addr;
+char *name;
+{
+ struct lc_funcdefs *f = (struct lc_funcdefs *) memset((genericptr_t) alloc(sizeof(struct lc_funcdefs)), 0, sizeof(struct lc_funcdefs));
+ if (!f) {
+ lc_error("Could not alloc function definition for '%s'.", name);
+ return ((void *)0);
+ }
+ f->next = ((void *)0);
+ f->addr = addr;
+ f->name = strdup(name);
+ f->n_called = 0;
+ f->n_params = 0;
+ f->params = ((void *)0);
+ f->code.opcodes = ((void *)0);
+ f->code.n_opcodes = 0;
+ return f;
+}
+
+void
+funcdef_free_all(fchain)
+struct lc_funcdefs *fchain;
+{
+ struct lc_funcdefs *tmp = fchain;
+ struct lc_funcdefs *nxt;
+ struct lc_funcdefs_parm *tmpparam;
+ while (tmp) {
+ nxt = tmp->next;
+ if (tmp->name) free((genericptr_t)(tmp->name));
+ while (tmp->params) {
+ tmpparam = tmp->params->next;
+ if (tmp->params->name) free((genericptr_t)(tmp->params->name));
+ tmp->params = tmpparam;
+ }
+
+ if (tmp) free((genericptr_t)(tmp));
+ tmp = nxt;
+ }
+}
+
+char *
+funcdef_paramtypes(f)
+struct lc_funcdefs *f;
+{
+ int i = 0;
+ struct lc_funcdefs_parm *fp = f->params;
+ char *tmp = (char *) alloc((f->n_params) + 1);
+ if (!tmp)
+ return ((void *)0);
+ while (fp) {
+ tmp[i++] = fp->parmtype;
+ fp = fp->next;
+ }
+ tmp[i] = '\0';
+ return tmp;
+}
+
+struct lc_funcdefs *
+funcdef_defined(f, name, casesense)
+struct lc_funcdefs *f;
+char *name;
+int casesense;
+{
+ while (f) {
+ if (casesense) {
+ if (!strcmp(name, f->name))
+ return f;
+ } else {
+ if (!case_insensitive_comp(name, f->name))
+ return f;
+ }
+ f = f->next;
+ }
+ return ((void *)0);
+}
+
+struct lc_vardefs *
+vardef_new(typ, name)
+long typ;
+char *name;
+{
+ struct lc_vardefs *f = (struct lc_vardefs *) memset((genericptr_t) alloc(sizeof(struct lc_vardefs)), 0, sizeof(struct lc_vardefs));
+ if (!f) {
+ lc_error("Could not alloc variable definition for '%s'.", name);
+ return ((void *)0);
+ }
+ f->next = ((void *)0);
+ f->var_type = typ;
+ f->name = strdup(name);
+ f->n_used = 0;
+ return f;
+}
+
+void
+vardef_free_all(fchain)
+struct lc_vardefs *fchain;
+{
+ struct lc_vardefs *tmp = fchain;
+ struct lc_vardefs *nxt;
+ while (tmp) {
+ if (be_verbose && (tmp->n_used == 0))
+ lc_warning("Unused variable '%s'", tmp->name);
+ nxt = tmp->next;
+ if (tmp->name) free((genericptr_t)(tmp->name));
+ if (tmp) free((genericptr_t)(tmp));
+ tmp = nxt;
+ }
+}
+
+struct lc_vardefs *
+vardef_defined(f, name, casesense)
+struct lc_vardefs *f;
+char *name;
+int casesense;
+{
+ while (f) {
+ if (casesense) {
+ if (!strcmp(name, f->name))
+ return f;
+ } else {
+ if (!case_insensitive_comp(name, f->name))
+ return f;
+ }
+ f = f->next;
+ }
+ return ((void *)0);
+}
+
+const char *
+spovar2str(spovar)
+long spovar;
+{
+ static int togl = 0;
+ static char buf[2][128];
+ const char *n = ((void *)0);
+ int is_array = (spovar & 0x40);
+ spovar &= ~0x40;
+
+ switch (spovar) {
+ default:
+ lc_error("spovar2str(%ld)", spovar);
+ break;
+ case 0x01:
+ n = "integer";
+ break;
+ case 0x02:
+ n = "string";
+ break;
+ case 0x03:
+ n = "variable";
+ break;
+ case 0x04:
+ n = "coordinate";
+ break;
+ case 0x05:
+ n = "region";
+ break;
+ case 0x06:
+ n = "mapchar";
+ break;
+ case 0x07:
+ n = "monster";
+ break;
+ case 0x08:
+ n = "object";
+ break;
+ }
+
+ togl = ((togl + 1) % 2);
+
+ snprintf(buf[togl], 127, "%s%s", n, (is_array ? " array" : ""));
+ return buf[togl];
+}
+
+void
+vardef_used(vd, varname)
+struct lc_vardefs *vd;
+char *varname;
+{
+ struct lc_vardefs *tmp;
+ if ((tmp = vardef_defined(vd, varname, 1)))
+ tmp->n_used++;
+}
+
+void
+check_vardef_type(vd, varname, vartype)
+struct lc_vardefs *vd;
+char *varname;
+long vartype;
+{
+ struct lc_vardefs *tmp;
+ if ((tmp = vardef_defined(vd, varname, 1))) {
+ if (tmp->var_type != vartype)
+ lc_error("Trying to use variable '%s' as %s, when it is %s.",
+ varname, spovar2str(vartype), spovar2str(tmp->var_type));
+ } else
+ lc_error("Variable '%s' not defined.", varname);
+}
+
+struct lc_vardefs *
+add_vardef_type(vd, varname, vartype)
+struct lc_vardefs *vd;
+char *varname;
+long vartype;
+{
+ struct lc_vardefs *tmp;
+ if ((tmp = vardef_defined(vd, varname, 1))) {
+ if (tmp->var_type != vartype)
+ lc_error("Trying to redefine variable '%s' as %s, when it is %s.",
+ varname, spovar2str(vartype), spovar2str(tmp->var_type));
+ } else {
+ tmp = vardef_new(vartype, varname);
+ tmp->next = vd;
+ return tmp;
+ }
+ return vd;
+}
+
+int
+reverse_jmp_opcode(opcode)
+int opcode;
+{
+ switch (opcode) {
+ case SPO_JE:
+ return SPO_JNE;
+ case SPO_JNE:
+ return SPO_JE;
+ case SPO_JL:
+ return SPO_JGE;
+ case SPO_JG:
+ return SPO_JLE;
+ case SPO_JLE:
+ return SPO_JG;
+ case SPO_JGE:
+ return SPO_JL;
+ default:
+ lc_error("Cannot reverse comparison jmp opcode %d.", opcode);
+ return SPO_NULL;
+ }
+}
+
+
+struct opvar *
+opvar_clone(ov)
+struct opvar *ov;
+{
+ if (ov) {
+ struct opvar *tmpov = (struct opvar *) alloc(sizeof(struct opvar));
+ if (!tmpov)
+ panic("could not alloc opvar struct");
+ switch (ov->spovartyp) {
+ case 0x04:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ case 0x08:
+ case 0x01: {
+ tmpov->spovartyp = ov->spovartyp;
+ tmpov->vardata.l = ov->vardata.l;
+ } break;
+ case 0x03:
+ case 0x02: {
+ int len = strlen(ov->vardata.str);
+ tmpov->spovartyp = ov->spovartyp;
+ tmpov->vardata.str = (char *) alloc(len + 1);
+ (void) memcpy((genericptr_t) tmpov->vardata.str,
+ (genericptr_t) ov->vardata.str, len);
+ tmpov->vardata.str[len] = '\0';
+ } break;
+ default: {
+ lc_error("Unknown opvar_clone value type (%d)!", ov->spovartyp);
+ }
+ }
+ return tmpov;
+ }
+ return ((void *)0);
+}
+
+void
+splev_add_from(splev, from_splev)
+sp_lev *splev;
+sp_lev *from_splev;
+{
+ int i;
+ if (splev && from_splev)
+ for (i = 0; i < from_splev->n_opcodes; i++)
+ add_opcode(splev, from_splev->opcodes[i].opcode,
+ opvar_clone(from_splev->opcodes[i].opdat));
+}
+
+void
+start_level_def(splev, ldfname)
+sp_lev **splev;
+char *ldfname;
+{
+ struct lc_funcdefs *f;
+ if (strchr(ldfname, '.'))
+ lc_error("Invalid dot ('.') in level name '%s'.", ldfname);
+ if ((int) strlen(ldfname) > 14)
+ lc_error("Level names limited to 14 characters ('%s').", ldfname);
+ f = function_definitions;
+ while (f) {
+ f->n_called = 0;
+ f = f->next;
+ }
+ *splev = (sp_lev *) alloc(sizeof(sp_lev));
+ (*splev)->n_opcodes = 0;
+ (*splev)->opcodes = ((void *)0);
+
+ vardef_free_all(variable_definitions);
+ variable_definitions = ((void *)0);
+}
+
+
+
+
+int
+get_floor_type(c)
+char c;
+{
+ int val;
+
+ ;
+ val = what_map_char(c);
+ if (val == 127) {
+ val = (-1);
+ yywarning("Invalid fill character in MAZE declaration");
+ }
+ return val;
+}
+
+
+
+
+int
+get_room_type(s)
+char *s;
+{
+ register int i;
+
+ ;
+ for (i = 0; room_types[i].name; i++)
+ if (!strcmp(s, room_types[i].name))
+ return ((int) room_types[i].type);
+ return (-1);
+}
+
+
+
+
+int
+get_trap_type(s)
+char *s;
+{
+ register int i;
+
+ ;
+ for (i = 0; trap_types[i].name; i++)
+ if (!strcmp(s, trap_types[i].name))
+ return trap_types[i].type;
+ return (-1);
+}
+
+
+
+
+int
+get_monster_id(s, c)
+char *s;
+char c;
+{
+ register int i, class;
+
+ ;
+ class = c ? def_char_to_monclass(c) : 0;
+ if (class == 61)
+ return (-1);
+
+ for (i = ((-1)+1); i < 381; i++)
+ if (!class || class == mons[i].mlet)
+ if (!strcmp(s, mons[i].mname))
+ return i;
+
+ for (i = ((-1)+1); i < 381; i++)
+ if (!class || class == mons[i].mlet)
+ if (!case_insensitive_comp(s, mons[i].mname)) {
+ if (be_verbose)
+ lc_warning("Monster type \"%s\" matches \"%s\".", s,
+ mons[i].mname);
+ return i;
+ }
+ return (-1);
+}
+
+
+
+
+int
+get_object_id(s, c)
+char *s;
+char c;
+{
+ int i, class;
+ const char *objname;
+
+ ;
+ class = (c > 0) ? def_char_to_objclass(c) : 0;
+ if (class == 18)
+ return (-1);
+
+ for (i = class ? bases[class] : 0; i < 437; i++) {
+ if (class && objects[i].oc_class != class)
+ break;
+ objname = obj_descr[i].oc_name;
+ if (objname && !strcmp(s, objname))
+ return i;
+ }
+ for (i = class ? bases[class] : 0; i < 437; i++) {
+ if (class && objects[i].oc_class != class)
+ break;
+ objname = obj_descr[i].oc_name;
+ if (objname && !case_insensitive_comp(s, objname)) {
+ if (be_verbose)
+ lc_warning("Object type \"%s\" matches \"%s\".", s, objname);
+ return i;
+ }
+ }
+ return (-1);
+}
+
+static void
+init_obj_classes()
+{
+ int i, class, prev_class;
+
+ prev_class = -1;
+ for (i = 0; i < 437; i++) {
+ class = objects[i].oc_class;
+ if (class != prev_class) {
+ bases[class] = i;
+ prev_class = class;
+ }
+ }
+}
+
+
+
+
+boolean
+check_monster_char(c)
+char c;
+{
+ return (def_char_to_monclass(c) != 61);
+}
+
+
+
+
+boolean
+check_object_char(c)
+char c;
+{
+ return (def_char_to_objclass(c) != 18);
+}
+
+
+
+
+char
+what_map_char(c)
+char c;
+{
+ ;
+ switch (c) {
+ case ' ':
+ return (0);
+ case '#':
+ return (23);
+ case '.':
+ return (24);
+ case '-':
+ return (2);
+ case '|':
+ return (1);
+ case '+':
+ return (22);
+ case 'A':
+ return (34);
+ case 'B':
+ return (7);
+ case 'C':
+ return (35);
+ case 'S':
+ return (14);
+ case 'H':
+ return (15);
+ case '{':
+ return (27);
+ case '\\':
+ return (28);
+ case 'K':
+ return (29);
+ case '}':
+ return (17);
+ case 'P':
+ return (16);
+ case 'L':
+ return (20);
+ case 'I':
+ return (32);
+ case 'W':
+ return (18);
+ case 'T':
+ return (13);
+ case 'F':
+ return (21);
+ case 'x':
+ return (36);
+ }
+ return (127);
+}
+
+void
+add_opcode(sp, opc, dat)
+sp_lev *sp;
+int opc;
+genericptr_t dat;
+{
+ long nop = sp->n_opcodes;
+ _opcode *tmp;
+
+ if ((opc < 0) || (opc >= MAX_SP_OPCODES))
+ lc_error("Unknown opcode '%d'", opc);
+
+ tmp = (_opcode *) alloc(sizeof(_opcode) * (nop + 1));
+ if (sp->opcodes && nop) {
+ (void) memcpy(tmp, sp->opcodes, sizeof(_opcode) * nop);
+ free(sp->opcodes);
+ } else if (!tmp)
+ lc_error("Could not alloc opcode space");
+
+ sp->opcodes = tmp;
+
+ sp->opcodes[nop].opcode = opc;
+ sp->opcodes[nop].opdat = dat;
+
+ sp->n_opcodes++;
+}
+
+
+
+
+
+void
+scan_map(map, sp)
+char *map;
+sp_lev *sp;
+{
+ register int i, len;
+ register char *s1, *s2;
+ int max_len = 0;
+ int max_hig = 0;
+ char *tmpmap[21];
+ int dx, dy;
+ char *mbuf;
+
+
+ for (s1 = s2 = map; *s1; s1++)
+ if (*s1 < '0' || *s1 > '9')
+ *s2++ = *s1;
+ *s2 = '\0';
+
+
+ s1 = map;
+ while (s1 && *s1) {
+ s2 = strchr(s1, '\n');
+ if (s2) {
+ len = (int) (s2 - s1);
+ s1 = s2 + 1;
+ } else {
+ len = (int) strlen(s1);
+ s1 = (char *) 0;
+ }
+ if (len > max_len)
+ max_len = len;
+ }
+
+
+ while (map && *map) {
+ tmpmap[max_hig] = (char *) alloc(max_len);
+ s1 = strchr(map, '\n');
+ if (s1) {
+ len = (int) (s1 - map);
+ s1++;
+ } else {
+ len = (int) strlen(map);
+ s1 = map + len;
+ }
+ for (i = 0; i < len; i++)
+ if ((tmpmap[max_hig][i] = what_map_char(map[i]))
+ == 127) {
+ lc_warning("Invalid character '%c' @ (%d, %d) - replacing "
+ "with stone",
+ map[i], max_hig, i);
+ tmpmap[max_hig][i] = 0;
+ }
+ while (i < max_len)
+ tmpmap[max_hig][i++] = 0;
+ map = s1;
+ max_hig++;
+ }
+
+
+
+ max_x_map = max_len - 1;
+ max_y_map = max_hig - 1;
+
+ if (max_len > 76 || max_hig > 21) {
+ lc_error("Map too large at (%d x %d), max is (%d x %d)", max_len,
+ max_hig, 76, 21);
+ }
+
+ mbuf = (char *) alloc(((max_hig - 1) * max_len) + (max_len - 1) + 2);
+ for (dy = 0; dy < max_hig; dy++)
+ for (dx = 0; dx < max_len; dx++)
+ mbuf[(dy * max_len) + dx] = (tmpmap[dy][dx] + 1);
+
+ mbuf[((max_hig - 1) * max_len) + (max_len - 1) + 1] = '\0';
+
+ add_opvars(sp, "siio", mbuf,max_hig,max_len,SPO_MAP);
+
+ for (dy = 0; dy < max_hig; dy++)
+ if (tmpmap[dy]) free((genericptr_t)(tmpmap[dy]));
+ if (mbuf) free((genericptr_t)(mbuf));
+}
+
+
+
+
+static boolean
+write_common_data(fd)
+int fd;
+{
+ static struct version_info version_data = {
+ 0x03060000UL, 0x00060000UL, 0x211b517dUL, 0xc48195c4UL,
+ 0x00025000UL
+ };
+
+ if ((long) write(fd, (genericptr_t)(&version_data), sizeof version_data) != (long) (sizeof version_data)) return ((boolean)0);;
+ return ((boolean)1);
+}
+
+
+
+
+
+static boolean
+write_maze(fd, maze)
+int fd;
+sp_lev *maze;
+{
+ int i;
+
+ if (!write_common_data(fd))
+ return ((boolean)0);
+
+ if ((long) write(fd, (genericptr_t)(&(maze->n_opcodes)), sizeof(maze->n_opcodes)) != (long) (sizeof(maze->n_opcodes))) return ((boolean)0);;
+
+ for (i = 0; i < maze->n_opcodes; i++) {
+ _opcode tmpo = maze->opcodes[i];
+
+ if ((long) write(fd, (genericptr_t)(&(tmpo.opcode)), sizeof(tmpo.opcode)) != (long) (sizeof(tmpo.opcode))) return ((boolean)0);;
+
+ if (tmpo.opcode < SPO_NULL || tmpo.opcode >= MAX_SP_OPCODES)
+ panic("write_maze: unknown opcode (%d).", tmpo.opcode);
+
+ if (tmpo.opcode == SPO_PUSH) {
+ genericptr_t opdat = tmpo.opdat;
+ if (opdat) {
+ struct opvar *ov = (struct opvar *) opdat;
+ int size;
+ if ((long) write(fd, (genericptr_t)(&(ov->spovartyp)), sizeof(ov->spovartyp)) != (long) (sizeof(ov->spovartyp))) return ((boolean)0);;
+ switch (ov->spovartyp) {
+ case 0x00:
+ break;
+ case 0x04:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ case 0x08:
+ case 0x01:
+ if ((long) write(fd, (genericptr_t)(&(ov->vardata.l)), sizeof(ov->vardata.l)) != (long) (sizeof(ov->vardata.l))) return ((boolean)0);;
+ break;
+ case 0x03:
+ case 0x02:
+ if (ov->vardata.str)
+ size = strlen(ov->vardata.str);
+ else
+ size = 0;
+ if ((long) write(fd, (genericptr_t)(&size), sizeof(size)) != (long) (sizeof(size))) return ((boolean)0);;
+ if (size) {
+ if ((long) write(fd, (genericptr_t)(ov->vardata.str), size) != (long) (size)) return ((boolean)0);;
+ if (ov->vardata.str) free((genericptr_t)(ov->vardata.str));
+ }
+ break;
+ default:
+ panic("write_maze: unknown data type (%d).",
+ ov->spovartyp);
+ }
+ } else
+ panic("write_maze: PUSH with no data.");
+ } else {
+
+ genericptr_t opdat = tmpo.opdat;
+ if (opdat)
+ panic("write_maze: opcode (%d) has data.", tmpo.opcode);
+ }
+
+ if (tmpo.opdat) free((genericptr_t)(tmpo.opdat));
+ }
+
+ if (maze->opcodes) free((genericptr_t)(maze->opcodes));
+ maze->opcodes = ((void *)0);
+
+
+
+ return ((boolean)1);
+}
+
+
+
+
+
+boolean
+write_level_file(filename, lvl)
+char *filename;
+sp_lev *lvl;
+{
+ int fout;
+ char lbuf[60];
+
+ lbuf[0] = '\0';
+
+
+
+ (void) strcat(lbuf, filename);
+ (void) strcat(lbuf, ".lev");
+
+
+
+
+ fout = open(lbuf, 0x0001 | 0x0200 | 0, 0644);
+
+ if (fout < 0)
+ return ((boolean)0);
+
+ if (!lvl)
+ panic("write_level_file");
+
+ if (be_verbose)
+ fprintf(__stdoutp, "File: '%s', opcodes: %ld\n", lbuf, lvl->n_opcodes);
+
+ if (!write_maze(fout, lvl))
+ return ((boolean)0);
+
+ (void) close(fout);
+
+ return ((boolean)1);
+}
+
+static int
+case_insensitive_comp(s1, s2)
+const char *s1;
+const char *s2;
+{
+ unsigned char u1, u2;
+
+ for (;; s1++, s2++) {
+ u1 = tolower((unsigned char) *s1);
+ u2 = tolower((unsigned char) *s2);
+ if ((u1 == '\0') || (u1 != u2)) {
+ break;
+ }
+ }
+ return u1 - u2;
+}