Merge branch 'NetHack-3.6'

This commit is contained in:
nhmall
2019-07-13 00:38:10 -04:00
27 changed files with 123 additions and 89 deletions

View File

@@ -404,12 +404,6 @@ struct early_opt {
boolean valallowed;
};
/* topline states */
#define TOPLINE_EMPTY 0 /* empty */
#define TOPLINE_NEED_MORE 1 /* non-empty, need --More-- */
#define TOPLINE_NON_EMPTY 2 /* non-empty, no --More-- required */
#define TOPLINE_SPECIAL_PROMPT 3 /* special prompt state */
/* special key functions */
enum nh_keyfunc {
NHKF_ESC = 0,

View File

@@ -1931,6 +1931,7 @@ E void VDECL(verbalize, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(raw_printf, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(impossible, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(config_error_add, (const char *, ...)) PRINTF_F(1, 2);
E void FDECL(nhassert_failed, (const char *, int));
/* ### polyself.c ### */

View File

@@ -380,5 +380,10 @@ struct savefile_info {
#define nhassert(e) ((void)0)
#endif
/* Supply nhassert macro if not supplied by port */
#ifndef nhassert
#define nhassert(expression) (void)((!!(expression)) || \
(nhassert_failed(__FILE__, __LINE__), 0))
#endif
#endif /* GLOBAL_H */

View File

@@ -134,6 +134,8 @@ extern void NDECL(getlock);
#ifndef HAS_STDINT_H
#define HAS_STDINT_H /* force include of stdint.h in integer.h */
#endif
/* Turn on some additional warnings */
#pragma warning(3:4389)
#endif /* _MSC_VER */
/* The following is needed for prototypes of certain functions */
@@ -146,14 +148,6 @@ extern void NDECL(getlock);
#define strncmpi(a, b, c) strnicmp(a, b, c)
#endif
#ifdef _MSC_VER
/* Visual Studio defines this in their own headers, which we don't use */
#ifndef snprintf
#define snprintf _snprintf
#pragma warning( \
disable : 4996) /* deprecation warning suggesting snprintf_s */
#endif
#endif
#include <sys/types.h>
#include <stdlib.h>
@@ -274,17 +268,17 @@ extern int FDECL(set_win32_option, (const char *, const char *));
extern int FDECL(alternative_palette, (char *));
#endif
#ifdef NDEBUG
#define nhassert(expression) ((void)0)
#else
extern void FDECL(nhassert_failed, (const char * exp, const char * file,
int line));
#define nhassert(expression) (void)((!!(expression)) || \
(nhassert_failed(#expression, __FILE__, __LINE__), 0))
#endif
#define nethack_enter(argc, argv) nethack_enter_winnt()
extern void FDECL(nethack_exit, (int)) NORETURN;
extern boolean FDECL(file_exists, (const char *));
/* Override the default version of nhassert. The default version is unable
* to generate a string form of the expression due to the need to be
* compatible with compilers which do not support macro stringization (i.e.
* #x to turn x into its string form).
*/
extern void FDECL(nt_assert_failed, (const char *, const char *, int));
#define nhassert(expression) (void)((!!(expression)) || \
(nt_assert_failed(#expression, __FILE__, __LINE__), 0))
#endif /* NTCONF_H */

View File

@@ -50,6 +50,12 @@ struct WinDesc {
#define WIN_STOP 1 /* for NHW_MESSAGE; stops output */
#define WIN_LOCKHISTORY 2 /* for NHW_MESSAGE; suppress history updates */
/* topline states */
#define TOPLINE_EMPTY 0 /* empty */
#define TOPLINE_NEED_MORE 1 /* non-empty, need --More-- */
#define TOPLINE_NON_EMPTY 2 /* non-empty, no --More-- required */
#define TOPLINE_SPECIAL_PROMPT 3 /* special prompt state */
/* descriptor for tty-based displays -- all the per-display data */
struct DisplayDesc {
short rows, cols; /* width and height of tty display */

View File

@@ -881,7 +881,7 @@ enum earlyarg e_arg;
* optimization so that display output
* can be debugged without buffering.
*/
void
STATIC_OVL void
debug_fields(opts)
const char *opts;
{

View File

@@ -1595,7 +1595,7 @@ int x,y;
&& is_valid_jump_pos(x, y, g.jumping_is_magic, FALSE));
}
void
STATIC_OVL void
display_jump_positions(state)
int state;
{
@@ -2848,7 +2848,7 @@ static const char
cant_reach[] = "can't reach that spot from here.";
/* find pos of monster in range, if only one monster */
boolean
STATIC_OVL boolean
find_poleable_mon(pos, min_range, max_range)
coord *pos;
int min_range, max_range;
@@ -2901,7 +2901,7 @@ int x, y;
&& distu(x, y) <= g.polearm_range_max);
}
void
STATIC_OVL void
display_polearm_positions(state)
int state;
{

View File

@@ -520,7 +520,7 @@ STATIC_VAR struct istat_s initblstats[MAXBLSTATS] = {
* without STATUS_HILITES.
*/
void
STATIC_OVL void
bot_via_windowport()
{
char buf[BUFSZ];
@@ -2769,7 +2769,7 @@ status_hilite_linestr_gather()
}
char *
STATIC_OVL char *
status_hilite2str(hl)
struct hilite_s *hl;
{

View File

@@ -2567,7 +2567,7 @@ int final;
}
/* attributes: intrinsics and the like, other non-obvious capabilities */
void
STATIC_OVL void
attributes_enlightenment(unused_mode, final)
int unused_mode UNUSED;
int final;

View File

@@ -897,7 +897,7 @@ xchar x, y;
}
}
int
STATIC_OVL int
tether_glyph(x, y)
int x, y;
{

View File

@@ -1341,7 +1341,7 @@ domove()
g.domove_attempting = 0L;
}
void
STATIC_OVL void
domove_core()
{
register struct monst *mtmp;
@@ -1939,7 +1939,7 @@ domove_core()
}
}
void
STATIC_OVL void
maybe_smudge_engr(x1,y1,x2,y2)
int x1, y1, x2, y2;
{

View File

@@ -19,7 +19,9 @@
#define ISAAC64_MASK ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
#if !defined(HAS_INLINE)
#define HAS_INLINE
#endif
#else
# if (defined(__GNUC__) && __GNUC__ >= 2 && !defined(inline))
# define inline __inline__

View File

@@ -1033,7 +1033,7 @@ newmextra()
return mextra;
}
boolean
STATIC_OVL boolean
makemon_rnd_goodpos(mon, gpflags, cc)
struct monst *mon;
unsigned gpflags;

View File

@@ -613,7 +613,7 @@ fixup_special()
g.num_lregions = 0;
}
void
STATIC_OVL void
check_ransacked(s)
char *s;
{
@@ -624,7 +624,7 @@ char *s;
#define ORC_LEADER 1
static const char *orcfruit[] = { "paddle cactus", "dwarven root" };
void
STATIC_OVL void
migrate_orc(mtmp, mflags)
struct monst *mtmp;
unsigned long mflags;
@@ -689,7 +689,7 @@ struct monst *mtmp;
add_to_minv(mtmp, otmp);
}
}
void
STATIC_OVL void
migr_booty_item(otyp, gang)
int otyp;
const char *gang;
@@ -710,7 +710,7 @@ const char *gang;
}
}
void
STATIC_OVL void
stolen_booty(VOID_ARGS)
{
char *gang, gang_name[BUFSZ];

View File

@@ -43,7 +43,7 @@ const char *warnings[] = {
#endif /* 0 */
void
STATIC_OVL void
sanity_check_single_mon(mtmp, chk_geno, msg)
struct monst *mtmp;
boolean chk_geno;
@@ -2733,7 +2733,7 @@ struct monst *mtmp;
return;
}
void
STATIC_OVL void
deal_with_overcrowding(mtmp)
struct monst *mtmp;
{

View File

@@ -411,7 +411,7 @@ struct obj *obj;
return xname_flags(obj, CXN_NORMAL);
}
char *
STATIC_OVL char *
xname_flags(obj, cxn_flags)
register struct obj *obj;
unsigned cxn_flags; /* bitmask of CXN_xxx values */
@@ -2570,7 +2570,7 @@ const char *oldstr;
return bp;
}
boolean
STATIC_OVL boolean
badman(basestr, to_plural)
const char *basestr;
boolean to_plural; /* true => makeplural, false => makesingular */

View File

@@ -1589,7 +1589,7 @@ int typ;
return (char *) 0;
}
int
STATIC_OVL int
query_msgtype()
{
winid tmpwin;
@@ -1783,7 +1783,7 @@ const char *errmsg;
return retval;
}
boolean
STATIC_OVL boolean
add_menu_coloring_parsed(str, c, a)
char *str;
int c, a;

View File

@@ -1409,7 +1409,7 @@ static const char *suptext2[] = {
(char *) 0,
};
void
STATIC_OVL void
do_supplemental_info(name, pm, without_asking)
char *name;
struct permonst *pm;
@@ -1885,61 +1885,61 @@ docontact(VOID_ARGS)
destroy_nhwindow(cwin);
}
void
STATIC_OVL void
dispfile_help(VOID_ARGS)
{
display_file(HELP, TRUE);
}
void
STATIC_OVL void
dispfile_shelp(VOID_ARGS)
{
display_file(SHELP, TRUE);
}
void
STATIC_OVL void
dispfile_optionfile(VOID_ARGS)
{
display_file(OPTIONFILE, TRUE);
}
void
STATIC_OVL void
dispfile_license(VOID_ARGS)
{
display_file(LICENSE, TRUE);
}
void
STATIC_OVL void
dispfile_debughelp(VOID_ARGS)
{
display_file(DEBUGHELP, TRUE);
}
void
STATIC_OVL void
hmenu_doextversion(VOID_ARGS)
{
(void) doextversion();
}
void
STATIC_OVL void
hmenu_dohistory(VOID_ARGS)
{
(void) dohistory();
}
void
STATIC_OVL void
hmenu_dowhatis(VOID_ARGS)
{
(void) dowhatis();
}
void
STATIC_OVL void
hmenu_dowhatdoes(VOID_ARGS)
{
(void) dowhatdoes();
}
void
STATIC_OVL void
hmenu_doextlist(VOID_ARGS)
{
(void) doextlist();

View File

@@ -1697,7 +1697,7 @@ int x, y;
return FALSE;
}
int
STATIC_OVL int
do_loot_cont(cobjp, cindex, ccount)
struct obj **cobjp;
int cindex, ccount; /* index of this container (1..N), number of them (N) */

View File

@@ -572,4 +572,21 @@ VA_DECL(const char *, str)
#endif
}
/* nhassert_failed is called when an nhassert's condition is false */
void
nhassert_failed(filepath, line)
const char * filepath;
int line;
{
const char * filename;
/* attempt to get filename from path. TODO: we really need a port provided
* function to return a filename from a path */
filename = strrchr(filepath, '/');
filename = (filename == NULL ? strrchr(filepath, '\\') : filename);
filename = (filename == NULL ? filepath : filename + 1);
impossible("nhassert failed in file '%s' at line %d", filename, line);
}
/*pline.c*/

View File

@@ -569,7 +569,7 @@ int how;
putmsghistory(out_line, FALSE);
}
boolean
STATIC_OVL boolean
skip_pager(common)
boolean common;
{

View File

@@ -2719,7 +2719,7 @@ boolean ininv, dummy, silent;
}
}
void
STATIC_OVL void
append_honorific(buf)
char *buf;
{

View File

@@ -1140,10 +1140,10 @@ struct monst *mtmp;
sent out of his room (caller might resort to goodpos() if
we report failure here, so this isn't full prevention) */
if (mtmp->isshk && inhishop(mtmp)) {
if (levl[x][y].roomno != ESHK(mtmp)->shoproom)
if (levl[x][y].roomno != (unsigned char) ESHK(mtmp)->shoproom)
return FALSE;
} else if (mtmp->ispriest && inhistemple(mtmp)) {
if (levl[x][y].roomno != EPRI(mtmp)->shroom)
if (levl[x][y].roomno != (unsigned char) EPRI(mtmp)->shroom)
return FALSE;
}
/* current location is <xx,yy> */

View File

@@ -475,23 +475,6 @@ char *buf;
}
#endif /* RUNTIME_PORT_ID */
/* nhassert_failed is called when an nhassert's condition is false */
void nhassert_failed(const char * exp, const char * file, int line)
{
char message[128];
_snprintf(message, sizeof(message),
"NHASSERT(%s) in '%s' at line %d\n", exp, file, line);
if (IsDebuggerPresent()) {
OutputDebugStringA(message);
DebugBreak();
}
// strip off the newline
message[strlen(message) - 1] = '\0';
error(message);
}
void
nethack_exit(code)
int code;
@@ -725,6 +708,23 @@ sys_random_seed(VOID_ARGS)
}
return ourseed;
}
/* nt_assert_failed is called when an nhassert's condition is false */
void
nt_assert_failed(expression, filepath, line)
const char * expression;
const char * filepath;
int line;
{
const char * filename;
/* get file name from path */
filename = strrchr(filepath, '\\');
filename = (filename == NULL ? filepath : filename + 1);
impossible("nhassert(%s) failed in file '%s' at line %d",
expression, filename, line);
}
#endif /* WIN32 */
/*winnt.c*/

View File

@@ -938,7 +938,7 @@ unsigned long old_rumor_offset;
return rumor_offset;
}
void
static void
do_rnd_access_file(fname)
const char *fname;
{
@@ -1403,7 +1403,7 @@ do_date()
return;
}
boolean
static boolean
get_gitinfo(githash, gitbranch)
char *githash, *gitbranch;
{

View File

@@ -139,7 +139,7 @@ const char *str;
putsyms(str);
cl_end();
ttyDisplay->toplin = TOPLINE_NEED_MORE;
if (ttyDisplay->cury && otoplin != 3)
if (ttyDisplay->cury && otoplin != TOPLINE_SPECIAL_PROMPT)
more();
}
@@ -204,12 +204,15 @@ more()
{
struct WinDesc *cw = wins[WIN_MESSAGE];
/* avoid recursion -- only happens from interrupts */
if (ttyDisplay->inmore++)
return;
if (iflags.debug_fuzzer)
return;
/* avoid recursion -- only happens from interrupts */
if (ttyDisplay->inmore)
return;
ttyDisplay->inmore++;
if (ttyDisplay->toplin) {
tty_curs(BASE_WINDOW, cw->curx + 1, cw->cury);
if (cw->curx >= CO - 8)
@@ -256,7 +259,8 @@ register const char *bp;
&& cw->cury == 0
&& n0 + (int) strlen(g.toplines) + 3 < CO - 8 /* room for --More-- */
&& (notdied = strncmp(bp, "You die", 7)) != 0) {
Strcat(g.toplines, " ");
nhassert((long) strlen(g.toplines) == cw->curx);
Strcat(toplines, " ");
Strcat(g.toplines, bp);
cw->curx += 2;
if (!(cw->flags & WIN_STOP))
@@ -309,6 +313,7 @@ char c;
if (ttyDisplay->curx == 0 && ttyDisplay->cury > 0)
tty_curs(BASE_WINDOW, CO, (int) ttyDisplay->cury - 1);
backsp();
nhassert(ttyDisplay->curx > 0);
ttyDisplay->curx--;
cw->curx = ttyDisplay->curx;
return;
@@ -686,6 +691,13 @@ boolean restoring_msghist;
}
if (msg) {
/* Caller is asking us to remember a top line that needed more.
Should we call more? This can happen when the player has set
iflags.force_invmenu and they attempt to shoot with nothing in
the quiver. */
if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE)
ttyDisplay->toplin = TOPLINE_NON_EMPTY;
/* move most recent message to history, make this become most recent */
remember_topl();
Strcpy(g.toplines, msg);
@@ -693,6 +705,9 @@ boolean restoring_msghist;
dumplogmsg(g.toplines);
#endif
} else if (snapshot_mesgs) {
nhassert(ttyDisplay == NULL ||
ttyDisplay->toplin != TOPLINE_NEED_MORE);
/* done putting arbitrary messages in; put the snapshot ones back */
for (idx = 0; snapshot_mesgs[idx]; ++idx) {
remember_topl();

View File

@@ -2319,7 +2319,7 @@ boolean blocking; /* with ttys, all windows are blocking */
more();
ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */
tty_clear_nhwindow(window);
/* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
nhassert(ttyDisplay->toplin == TOPLINE_EMPTY);
} else
ttyDisplay->toplin = TOPLINE_EMPTY;
cw->curx = cw->cury = 0;
@@ -2407,7 +2407,7 @@ winid window;
case NHW_MESSAGE:
if (ttyDisplay->toplin != TOPLINE_EMPTY)
tty_display_nhwindow(WIN_MESSAGE, TRUE);
/* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
nhassert(ttyDisplay->toplin == TOPLINE_EMPTY);
/*FALLTHRU*/
case NHW_STATUS:
case NHW_BASE:
@@ -3162,7 +3162,7 @@ const char *mesg;
more();
ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */
tty_clear_nhwindow(WIN_MESSAGE);
/* nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); */
nhassert(ttyDisplay->toplin == TOPLINE_EMPTY);
}
/* normally <ESC> means skip further messages, but in this case
it means cancel the current prompt; any other messages should
@@ -4130,7 +4130,7 @@ boolean force_update;
* must be updated because they need to change.
* This is now done at an individual field case-by-case level.
*/
boolean
STATIC_OVL boolean
check_fields(forcefields, sz)
boolean forcefields;
int sz[3];