diff --git a/include/tradstdc.h b/include/tradstdc.h index 10146d8c8..64585517d 100644 --- a/include/tradstdc.h +++ b/include/tradstdc.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 tradstdc.h $NHDT-Date: 1428655166 2015/04/10 08:39:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.19 $ */ +/* NetHack 3.6 tradstdc.h $NHDT-Date: 1431737043 2015/05/16 00:44:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.22 $ */ /* NetHack 3.6 tradstdc.h $Date: 2012/01/11 18:23:26 $ $Revision: 1.15 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -65,6 +65,25 @@ #endif #ifdef NEED_VARARGS /* only define these if necessary */ +/* + * These have changed since 3.4.3. VA_END() now provides an explicit + * closing brace to complement VA_DECL()'s hidden opening brace, so code + * started with VA_DECL() needs an extra opening brace to complement + * the explicit final closing brace. This was done so that the source + * would look less strange, where VA_DECL() appeared to introduce a + * function whose opening brace was missing; there are now visible and + * invisible braces at beginning and end. Sample usage: +void foo VA_DECL(int, arg) --macro expansion has a hidden opening brace +{ --new, explicit opening brace (actually introduces a nested block) + VA_START(bar); + ...code for foo... + VA_END(); --expansion now provides a closing brace for the nested block +} --existing closing brace, still pairs with the hidden one in VA_DECL() + * Reading the code--or using source browsing tools which match braces-- + * results in seeing a matched set of braces. Usage of VA_END() is + * potentially trickier, but nethack uses it in a straightforward manner. + */ + #ifdef USE_STDARG #include # define VA_DECL(typ1,var1) (typ1 var1, ...) { va_list the_args; @@ -74,7 +93,7 @@ # define VA_NEXT(var1,typ1) var1 = va_arg(the_args, typ1) # define VA_ARGS the_args # define VA_START(x) va_start(the_args, x) -# define VA_END() va_end(the_args) +# define VA_END() va_end(the_args); } # if defined(ULTRIX_PROTO) && !defined(_VA_LIST_) # define _VA_LIST_ /* prevents multiple def in stdio.h */ # endif @@ -89,7 +108,7 @@ # define VA_START(x) va_start(the_args) # define VA_INIT(var1,typ1) var1 = va_arg(the_args, typ1) # define VA_NEXT(var1,typ1) var1 = va_arg(the_args,typ1) -# define VA_END() va_end(the_args) +# define VA_END() va_end(the_args); } # else # define VA_ARGS arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9 # define VA_DECL(typ1,var1) (var1,VA_ARGS) typ1 var1; \ @@ -106,9 +125,10 @@ # define VA_SHIFT() (arg1=arg2, arg2=arg3, arg3=arg4, arg4=arg5,\ arg5=arg6, arg6=arg7, arg7=arg8, arg8=arg9) # define VA_NEXT(var1,typ1) ((var1 = (typ1)arg1), VA_SHIFT(), var1) -# define VA_END() +# define VA_END() } # endif #endif + #endif /* NEED_VARARGS */ #if defined(NHSTDC) || defined(MSDOS) || defined(MAC) || defined(ULTRIX_PROTO) || defined(__BEOS__) diff --git a/src/end.c b/src/end.c index 893bee0fc..0a2bc2120 100644 --- a/src/end.c +++ b/src/end.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 end.c $NHDT-Date: 1431192755 2015/05/09 17:32:35 $ $NHDT-Branch: master $:$NHDT-Revision: 1.96 $ */ +/* NetHack 3.6 end.c $NHDT-Date: 1431737052 2015/05/16 00:44:12 $ $NHDT-Branch: master $:$NHDT-Revision: 1.97 $ */ /* NetHack 3.6 end.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.79 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -511,6 +511,7 @@ int how; /*VARARGS1*/ void panic VA_DECL(const char *, str) +{ VA_START(str); VA_INIT(str, char *); diff --git a/src/pline.c b/src/pline.c index 74e431184..eb8f7622e 100644 --- a/src/pline.c +++ b/src/pline.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pline.c $NHDT-Date: 1431192765 2015/05/09 17:32:45 $ $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */ +/* NetHack 3.6 pline.c $NHDT-Date: 1431737055 2015/05/16 00:44:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.41 $ */ /* NetHack 3.6 pline.c $Date: 2013/02/09 01:33:37 $ $Revision: 1.30 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -21,32 +21,31 @@ static void FDECL(vpline, (const char *, va_list)); void pline VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, char *); vpline(line, VA_ARGS); VA_END(); } -#ifdef USE_STDARG +# ifdef USE_STDARG static void vpline(const char *line, va_list the_args) -{ -#else +# else static void vpline(line, the_args) const char *line; va_list the_args; -{ -#endif +# endif #else /* USE_STDARG | USE_VARARG */ -#define vpline pline +# define vpline pline void pline VA_DECL(const char *, line) #endif /* USE_STDARG | USE_VARARG */ - +{ /* start of vpline() or of nested block in USE_OLDARG's pline() */ char pbuf[3 * BUFSZ]; int ln; /* Do NOT use VA_START and VA_END in here... see above */ @@ -94,11 +93,17 @@ VA_DECL(const char *, line) putstr(WIN_MESSAGE, 0, line); /* this gets cleared after every pline message */ iflags.last_msg = PLNMSG_UNKNOWN; +#if !(defined(USE_STDARG) || defined(USE_VARARGS)) + /* provide closing brace for the nested block + which immediately follows USE_OLDARGS's VA_DECL() */ + VA_END(); +#endif } /*VARARGS1*/ void Norep VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, const char *); no_repeat = TRUE; @@ -143,6 +148,7 @@ free_youbuf() /*VARARGS1*/ void You VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -153,6 +159,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void Your VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -163,6 +170,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void You_feel VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -177,6 +185,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void You_cant VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -187,6 +196,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void pline_The VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -197,6 +207,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void There VA_DECL(const char *, line) +{ char *tmp; VA_START(line); VA_INIT(line, const char *); @@ -207,6 +218,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void You_hear VA_DECL(const char *, line) +{ char *tmp; if (Deaf || !flags.acoustics) @@ -226,6 +238,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void You_see VA_DECL(const char *, line) +{ char *tmp; VA_START(line); @@ -247,6 +260,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void verbalize VA_DECL(const char *, line) +{ char *tmp; VA_START(line); @@ -269,30 +283,29 @@ static void FDECL(vraw_printf, (const char *, va_list)); void raw_printf VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, char *); vraw_printf(line, VA_ARGS); VA_END(); } -#ifdef USE_STDARG +# ifdef USE_STDARG static void vraw_printf(const char *line, va_list the_args) -{ -#else +# else static void vraw_printf(line, the_args) const char *line; va_list the_args; -{ -#endif +# endif #else /* USE_STDARG | USE_VARARG */ void raw_printf VA_DECL(const char *, line) #endif - +{ char pbuf[3 * BUFSZ]; int ln; /* Do NOT use VA_START and VA_END in here... see above */ @@ -308,11 +321,15 @@ VA_DECL(const char *, line) pbuf[BUFSZ - 1] = '\0'; /* terminate strncpy or truncate vsprintf */ } raw_print(line); +#if !(defined(USE_STDARG) || defined(USE_VARARGS)) + VA_END(); /* (see vpline) */ +#endif } /*VARARGS1*/ void impossible VA_DECL(const char *, s) +{ char pbuf[2 * BUFSZ]; VA_START(s); VA_INIT(s, const char *); diff --git a/sys/amiga/amiwind.c b/sys/amiga/amiwind.c index 576eaf91a..a423ca7d5 100644 --- a/sys/amiga/amiwind.c +++ b/sys/amiga/amiwind.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 amiwind.c $NHDT-Date: 1431192783 2015/05/09 17:33:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */ +/* NetHack 3.6 amiwind.c $NHDT-Date: 1431737059 2015/05/16 00:44:19 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */ /* NetHack 3.6 amiwind.c $Date: 2009/05/06 10:48:30 $ $Revision: 1.5 $ */ /* SCCS Id: @(#)amiwind.c 3.5 2000/01/12 /* Copyright (c) Olaf Seibert (KosmoSoft), 1989, 1992 */ @@ -889,6 +889,7 @@ amii_loadlib(void) /*VARARGS1*/ void error VA_DECL(const char *, s) +{ VA_START(s); VA_INIT(s, char *); diff --git a/sys/mac/macerrs.c b/sys/mac/macerrs.c index 092032b11..80be5b688 100644 --- a/sys/mac/macerrs.c +++ b/sys/mac/macerrs.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 macerrs.c $NHDT-Date: 1431192785 2015/05/09 17:33:05 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */ +/* NetHack 3.6 macerrs.c $NHDT-Date: 1431737061 2015/05/16 00:44:21 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */ /* NetHack 3.6 macerrs.c $Date: 2009/05/06 10:49:10 $ $Revision: 1.5 $ */ /* SCCS Id: @(#)macerrs.c 3.5 1993/01/24 */ /* Copyright (c) Michael Hamel, 1991 */ @@ -102,7 +102,8 @@ static void vprogerror(); #endif /* Macro substitute for error() */ -void error VA_DECL(const char *, line){ +void error VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, char *); vprogerror(line, VA_ARGS); @@ -111,18 +112,18 @@ void error VA_DECL(const char *, line){ #ifdef USE_STDARG static void -vprogerror(const char *line, va_list the_args) { +vprogerror(const char *line, va_list the_args) #else static void -vprogerror(line, the_args) const char *line; va_list the_args; { +vprogerror(line, the_args) const char *line; va_list the_args; #endif #else /* USE_STDARG | USE_VARARG */ void -error VA_DECL(const char *, line){ +error VA_DECL(const char *, line) #endif -/* Do NOT use VA_START and VA_END in here... see above */ +{ /* opening brace for vprogerror(), nested block for USE_OLDARG error() */ char pbuf[BUFSZ]; if(index(line, '%')) { @@ -130,6 +131,10 @@ error VA_DECL(const char *, line){ line = pbuf; } showerror("of an internal error",line); + +#if !(defined(USE_STDARG) || defined(USE_VARARGS)) + VA_END(); /* provides closing brace for USE_OLDARGS's nested block */ +#endif } diff --git a/sys/share/pcsys.c b/sys/share/pcsys.c index 45f9fb6ff..6f8dd3716 100644 --- a/sys/share/pcsys.c +++ b/sys/share/pcsys.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pcsys.c $NHDT-Date: 1431192778 2015/05/09 17:32:58 $ $NHDT-Branch: master $:$NHDT-Revision: 1.26 $ */ +/* NetHack 3.6 pcsys.c $NHDT-Date: 1431737062 2015/05/16 00:44:22 $ $NHDT-Branch: master $:$NHDT-Revision: 1.27 $ */ /* NetHack 3.6 pcsys.c $Date: 2012/01/22 06:33:47 $ $Revision: 1.18 $ */ /* SCCS Id: @(#)pcsys.c 3.5 2002/01/22 */ /* NetHack may be freely redistributed. See license for details. */ @@ -418,6 +418,7 @@ const char *str; #ifndef WIN32 void msmsg VA_DECL(const char *, fmt) +{ VA_START(fmt); VA_INIT(fmt, const char *); #if defined(MSDOS) && defined(NO_TERMS) diff --git a/sys/share/pctty.c b/sys/share/pctty.c index 34982d840..1ef24e5e2 100644 --- a/sys/share/pctty.c +++ b/sys/share/pctty.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 pctty.c $NHDT-Date: 1431192779 2015/05/09 17:32:59 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */ +/* NetHack 3.6 pctty.c $NHDT-Date: 1431737063 2015/05/16 00:44:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.10 $ */ /* NetHack 3.6 pctty.c $Date: 2009/05/06 10:50:30 $ $Revision: 1.6 $ */ /* SCCS Id: @(#)pctty.c 3.5 1990/22/02 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ @@ -75,6 +75,7 @@ unsigned mseconds; void error VA_DECL(const char *, s) +{ VA_START(s); VA_INIT(s, const char *); /* error() may get called before tty is initialized */ diff --git a/sys/share/unixtty.c b/sys/share/unixtty.c index 006649328..0e2699337 100644 --- a/sys/share/unixtty.c +++ b/sys/share/unixtty.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 unixtty.c $NHDT-Date: 1431192779 2015/05/09 17:32:59 $ $NHDT-Branch: master $:$NHDT-Revision: 1.17 $ */ +/* NetHack 3.6 unixtty.c $NHDT-Date: 1431737063 2015/05/16 00:44:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */ /* NetHack 3.6 unixtty.c $Date: 2012/01/23 07:11:09 $ $Revision: 1.10 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -456,6 +456,7 @@ init_linux_cons() /*VARARGS1*/ void error VA_DECL(const char *, s) +{ VA_START(s); VA_INIT(s, const char *); if (settty_needed) diff --git a/sys/vms/vmstty.c b/sys/vms/vmstty.c index 4795ada27..1d4d42b48 100644 --- a/sys/vms/vmstty.c +++ b/sys/vms/vmstty.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 vmstty.c $NHDT-Date: 1431192780 2015/05/09 17:33:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.13 $ */ +/* NetHack 3.6 vmstty.c $NHDT-Date: 1431737064 2015/05/16 00:44:24 $ $NHDT-Branch: master $:$NHDT-Revision: 1.14 $ */ /* NetHack 3.6 vmstty.c $Date: 2011/04/13 01:48:13 $ $Revision: 1.10 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -547,6 +547,7 @@ unsigned mseconds; /* milliseconds */ /*VARARGS1*/ void error VA_DECL(const char *, s) +{ VA_START(s); VA_INIT(s, const char *); diff --git a/sys/wince/winhack.c b/sys/wince/winhack.c index 187ca032e..baed68c06 100644 --- a/sys/wince/winhack.c +++ b/sys/wince/winhack.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 winhack.c $NHDT-Date: 1431192786 2015/05/09 17:33:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */ +/* NetHack 3.6 winhack.c $NHDT-Date: 1431737065 2015/05/16 00:44:25 $ $NHDT-Branch: master $:$NHDT-Revision: 1.17 $ */ /* NetHack 3.6 winhack.c $Date: 2009/10/22 02:59:35 $ $Revision: 1.11 $ */ /* Copyright (C) 2001 by Alex Kompel */ // winhack.cpp : Defines the entry point for the application. @@ -240,6 +240,7 @@ gotlock: /* misc functions */ void error VA_DECL(const char *, s) +{ TCHAR wbuf[1024]; char buf[1024]; DWORD last_error = GetLastError(); @@ -269,10 +270,8 @@ VA_DECL(const char *, s) LocalFree(lpMsgBuf); } } - VA_END(); - MessageBox(NULL, wbuf, TEXT("Error"), MB_OK | MB_ICONERROR); - + VA_END(); exit(EXIT_FAILURE); } diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 39e6ba178..7c0c72cf1 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 nttty.c $NHDT-Date: 1431192782 2015/05/09 17:33:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.62 $ */ +/* NetHack 3.6 nttty.c $NHDT-Date: 1431737067 2015/05/16 00:44:27 $ $NHDT-Branch: master $:$NHDT-Revision: 1.63 $ */ /* Copyright (c) NetHack PC Development Team 1993 */ /* NetHack may be freely redistributed. See license for details. */ @@ -1014,11 +1014,11 @@ load_keyboard_handler() */ void msmsg VA_DECL(const char *, fmt) +{ char buf[ROWNO * COLNO]; /* worst case scenario */ VA_START(fmt); VA_INIT(fmt, const char *); Vsprintf(buf, fmt, VA_ARGS); - VA_END(); if (redirect_stdout) fprintf(stdout, "%s", buf); else { @@ -1026,6 +1026,7 @@ VA_DECL(const char *, fmt) if (ttyDisplay) curs(BASE_WINDOW, cursor.X + 1, cursor.Y); } + VA_END(); return; } @@ -1033,6 +1034,7 @@ VA_DECL(const char *, fmt) /*VARARGS1*/ void nttty_error VA_DECL(const char *, s) +{ char buf[BUFSZ]; VA_START(s); VA_INIT(s, const char *); @@ -1041,9 +1043,9 @@ VA_DECL(const char *, s) end_screen(); buf[0] = '\n'; (void) vsprintf(&buf[1], s, VA_ARGS); - VA_END(); msmsg(buf); really_move_cursor(); + VA_END(); exit(EXIT_FAILURE); } diff --git a/sys/winnt/stubs.c b/sys/winnt/stubs.c index ccff931d6..924a8f9ea 100644 --- a/sys/winnt/stubs.c +++ b/sys/winnt/stubs.c @@ -138,6 +138,7 @@ load_keyboard_handler() */ void msmsg VA_DECL(const char *, fmt) +{ VA_START(fmt); VA_INIT(fmt, const char *); VA_END(); @@ -147,6 +148,7 @@ VA_DECL(const char *, fmt) /*VARARGS1*/ void nttty_error VA_DECL(const char *, s) +{ VA_START(s); VA_INIT(s, const char *); VA_END(); diff --git a/sys/winnt/winnt.c b/sys/winnt/winnt.c index c7ab7dfd3..e95fe4f1d 100644 --- a/sys/winnt/winnt.c +++ b/sys/winnt/winnt.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 winnt.c $NHDT-Date: 1431192782 2015/05/09 17:33:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.25 $ */ +/* NetHack 3.6 winnt.c $NHDT-Date: 1431737068 2015/05/16 00:44:28 $ $NHDT-Branch: master $:$NHDT-Revision: 1.26 $ */ /* Copyright (c) NetHack PC Development Team 1993, 1994 */ /* NetHack may be freely redistributed. See license for details. */ @@ -197,6 +197,7 @@ return &szFullPath[0]; /*VARARGS1*/ void error VA_DECL(const char *, s) +{ char buf[BUFSZ]; VA_START(s); VA_INIT(s, const char *); diff --git a/util/lev_main.c b/util/lev_main.c index a0827bb3d..c2ce813c6 100644 --- a/util/lev_main.c +++ b/util/lev_main.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 lev_main.c $NHDT-Date: 1431192770 2015/05/09 17:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.38 $ */ +/* NetHack 3.6 lev_main.c $NHDT-Date: 1431737057 2015/05/16 00:44:17 $ $NHDT-Branch: master $:$NHDT-Revision: 1.39 $ */ /* NetHack 3.6 lev_main.c $Date: 2012/01/12 04:48:12 $ $Revision: 1.20 $ */ /* SCCS Id: @(#)lev_main.c 3.5 2007/01/17 */ /* Copyright (c) 1989 by Jean-Christophe Collet */ @@ -365,6 +365,7 @@ static void FDECL(lc_vpline, (const char *, va_list)); void lc_pline VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, char *); lc_vpline(line, VA_ARGS); @@ -374,13 +375,11 @@ VA_DECL(const char *, line) #ifdef USE_STDARG static void lc_vpline(const char *line, va_list the_args) -{ #else static void lc_vpline(line, the_args) const char *line; va_list the_args; -{ #endif #else /* USE_STDARG | USE_VARARG */ @@ -390,6 +389,7 @@ va_list the_args; void lc_pline VA_DECL(const char *, line) #endif /* USE_STDARG | USE_VARARG */ +{ /* opening brace for lc_vpline, nested block for USE_OLDARGS lc_pline */ char pbuf[3 * BUFSZ]; static char nomsg[] = "(no message)"; @@ -415,11 +415,15 @@ VA_DECL(const char *, line) } lc_pline_mode = LC_PLINE_MESSAGE; /* reset to default */ return; +#if !(defined(USE_STDARG) || defined(USE_VARARGS)) + VA_END(); /* closing brace ofr USE_OLDARGS's nested block */ +#endif } /*VARARGS1*/ void lc_error VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, const char *); lc_pline_mode = LC_PLINE_ERROR; @@ -431,6 +435,7 @@ VA_DECL(const char *, line) /*VARARGS1*/ void lc_warning VA_DECL(const char *, line) +{ VA_START(line); VA_INIT(line, const char *); lc_pline_mode = LC_PLINE_WARNING; @@ -598,6 +603,7 @@ static void FDECL(vadd_opvars, (sp_lev *, const char *, va_list)); void add_opvars VA_DECL2(sp_lev *, sp, const char *, fmt) +{ VA_START(fmt); VA_INIT(fmt, char *); vadd_opvars(sp, fmt, VA_ARGS); diff --git a/util/lev_main.i b/util/lev_main.i new file mode 100644 index 000000000..38703b619 --- /dev/null +++ b/util/lev_main.i @@ -0,0 +1,8238 @@ +# 1 "lev_main.c" +# 1 "" +# 1 "" +# 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; +} diff --git a/util/panic.c b/util/panic.c index 84c6d3fd1..9655e923f 100644 --- a/util/panic.c +++ b/util/panic.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 panic.c $NHDT-Date: 1431192770 2015/05/09 17:32:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */ +/* NetHack 3.6 panic.c $NHDT-Date: 1431737058 2015/05/16 00:44:18 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */ /* NetHack 3.6 panic.c $Date: 2009/05/06 10:54:39 $ $Revision: 1.4 $ */ /* SCCS Id: @(#)panic.c 3.5 1994/03/02 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ @@ -25,6 +25,7 @@ void VDECL(panic, (char *, ...)); void panic VA_DECL(char *, str) +{ VA_START(str); VA_INIT(str, char *); if (panicking++)