diff --git a/include/config.h b/include/config.h index f054de5c4..d12576f9d 100644 --- a/include/config.h +++ b/include/config.h @@ -564,13 +564,9 @@ typedef unsigned char uchar; %N first character of player name DUMPLOG_FILE is not used if SYSCF is defined */ -#endif /* DUMPLOG_FILE */ +#endif -#endif /* DUMPLOG */ - -/* NEW_KEYBOARD_HIT adds new window proc to return whether keyboard has been hit - and character input is available */ -/* #define NEW_KEYBOARD_HIT */ +#endif #define USE_ISAAC64 /* Use cross-plattform, bundled RNG */ diff --git a/include/decl.h b/include/decl.h index 47030b35c..05aa7f895 100644 --- a/include/decl.h +++ b/include/decl.h @@ -470,17 +470,6 @@ struct early_opt { boolean valallowed; }; -struct ptr_array { - size_t length; - size_t max_length; - void ** elements; -}; -typedef struct ptr_array ptr_array_t; - -/* logging verbosity levels */ -#define LOG_MINIMAL 0 -#define LOG_VERBOSE 1 - /* special key functions */ enum nh_keyfunc { NHKF_ESC = 0, diff --git a/include/extern.h b/include/extern.h index 33e6c0c15..68c270cd4 100644 --- a/include/extern.h +++ b/include/extern.h @@ -28,10 +28,6 @@ E void FDECL(welcome, (BOOLEAN_P)); E time_t NDECL(get_realtime); E int FDECL(argcheck, (int, char **, enum earlyarg)); E void NDECL(early_init); -E void NDECL(fuzzer_toggle); -E void NDECL(fuzzer_check); -E void NDECL(fuzzer_auto_start); -E boolean FDECL(fuzzer_msg_history, (const char *)); /* ### apply.c ### */ @@ -955,7 +951,6 @@ E boolean FDECL(fuzzymatch, (const char *, const char *, const char *, BOOLEAN_P)); E void FDECL(init_random, (int FDECL((*fn), (int)))); E void FDECL(reseed_random, (int FDECL((*fn), (int)))); -E void FDECL(set_random, (unsigned long, int FDECL((*fn), (int)))); E time_t NDECL(getnow); E int NDECL(getyear); #if 0 @@ -974,8 +969,6 @@ E void FDECL(strbuf_append, (strbuf_t *, const char *)); E void FDECL(strbuf_reserve, (strbuf_t *, int)); E void FDECL(strbuf_empty, (strbuf_t *)); E void FDECL(strbuf_nl_to_crlf, (strbuf_t *)); -E struct ptr_array * FDECL(ptr_array_new, (size_t length)); -E void FDECL(ptr_array_free, (struct ptr_array *)); /* ### invent.c ### */ @@ -1151,9 +1144,6 @@ E void NDECL(gettty); E void NDECL(setftty); E void FDECL(settty, (const char *)); E int NDECL(tgetch); -#ifdef NEW_KEYBOARD_HIT -E boolean NDECL(tkbhit); -#endif E void FDECL(cmov, (int x, int y)); E void FDECL(nocmov, (int x, int y)); @@ -1560,9 +1550,6 @@ E void FDECL(mplayer_talk, (struct monst *)); #ifndef WIN32 E int NDECL(tgetch); -#ifdef NEW_KEYBOARD_HIT -E boolean NDECL(tkbhit); -#endif #endif #ifndef TOS E char NDECL(switchar); @@ -1593,9 +1580,7 @@ E void FDECL(gotoxy, (int, int)); #endif #ifdef TOS E int FDECL(_copyfile, (char *, char *)); -#ifndef NEW_KEYBOARD_HIT E int NDECL(kbhit); -#endif E void NDECL(set_colors); E void NDECL(restore_colors); #ifdef SUSPEND @@ -1605,9 +1590,7 @@ E int NDECL(dosuspend); #ifdef WIN32 E char *FDECL(get_username, (int *)); E void FDECL(nt_regularize, (char *)); -#ifndef NEW_KEYBOARD_HIT E int NDECL((*nt_kbhit)); -#endif E void FDECL(Delay, (int)); #endif /* WIN32 */ #endif /* MICRO || WIN32 */ @@ -1675,15 +1658,10 @@ E void FDECL(regex_free, (struct nhregex *)); #ifdef WIN32 E void NDECL(get_scr_size); -#ifndef NEW_KEYBOARD_HIT E int NDECL(nttty_kbhit); -#endif E void FDECL(nttty_open, (int)); E void NDECL(nttty_rubout); E int NDECL(tgetch); -#ifdef NEW_KEYBOARD_HIT -E boolean NDECL(tkbhit); -#endif E int FDECL(ntposkey, (int *, int *, int *)); E void FDECL(set_output_mode, (int)); E void NDECL(synch_cursor); @@ -1938,10 +1916,6 @@ 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)); -E void NDECL(fuzzer_start); -E void NDECL(fuzzer_stop); -E void VDECL(fuzzer_log, (int, const char *, ...)) PRINTF_F(2, 3); /* ### polyself.c ### */ @@ -2167,7 +2141,6 @@ E int FDECL(rnd, (int)); E int FDECL(d, (int, int)); E int FDECL(rne, (int)); E int FDECL(rnz, (int)); -E unsigned long NDECL(rul); /* ### role.c ### */ diff --git a/include/flag.h b/include/flag.h index 9e189d060..472e34ade 100644 --- a/include/flag.h +++ b/include/flag.h @@ -433,10 +433,6 @@ struct instance_flags { chosen_windowport[], but do not switch to it in the midst of options processing */ boolean obsolete; /* obsolete options can point at this, it isn't used */ - boolean fuzzer_auto_start; /* start fuzzer automatically */ - int fuzzer_stop_and_save; /* move when fuzzer stops and saves game */ - boolean fuzzer_saving; /* fuzzer is saving game */ - int verbose_logging_start; /* move when verbose fuzzer logging starts */ }; /* diff --git a/include/global.h b/include/global.h index fbb6393f8..e6f0ec4a4 100644 --- a/include/global.h +++ b/include/global.h @@ -382,10 +382,5 @@ 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 */ diff --git a/include/ntconf.h b/include/ntconf.h index 176c465de..c2b0b3af0 100644 --- a/include/ntconf.h +++ b/include/ntconf.h @@ -134,8 +134,6 @@ 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 */ @@ -148,6 +146,14 @@ 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 #include @@ -245,11 +251,8 @@ int _RTLENTRY _EXPFUNC read(int __handle, void _FAR *__buf, unsigned __len); #ifndef CURSES_GRAPHICS #include /* conflicting definitions with curses.h */ #endif - -#ifndef NEW_KEYBOARD_HIT #undef kbhit /* Use our special NT kbhit */ #define kbhit (*nt_kbhit) -#endif #ifdef LAN_FEATURES #define MAX_LAN_USERNAME 20 @@ -268,17 +271,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 */ diff --git a/include/unixconf.h b/include/unixconf.h index ac5b016e5..9f2076186 100644 --- a/include/unixconf.h +++ b/include/unixconf.h @@ -305,9 +305,7 @@ #define HLOCK "perm" /* an empty file used for locking purposes */ -#ifndef NEW_KEYBOARD_HIT #define tgetch getchar -#endif #ifndef NOSHELL #define SHELL /* do not delete the '!' command */ diff --git a/include/winprocs.h b/include/winprocs.h index d1cea9a3c..36962750e 100644 --- a/include/winprocs.h +++ b/include/winprocs.h @@ -79,9 +79,6 @@ struct window_procs { (int, const char *, const char *, BOOLEAN_P)); void FDECL((*win_status_update), (int, genericptr_t, int, int, int, unsigned long *)); boolean NDECL((*win_can_suspend)); -#ifdef NEW_KEYBOARD_HIT - boolean NDECL((*win_keyboard_hit)); -#endif }; extern @@ -163,9 +160,6 @@ extern */ #define status_enablefield (*windowprocs.win_status_enablefield) #define status_update (*windowprocs.win_status_update) -#ifdef NEW_KEYBOARD_HIT -#define keyboard_hit (*windowprocs.win_keyboard_hit) -#endif /* * WINCAP @@ -385,9 +379,6 @@ struct chain_procs { (CARGS, int, const char *, const char *, BOOLEAN_P)); void FDECL((*win_status_update), (CARGS, int, genericptr_t, int, int, int, unsigned long *)); boolean FDECL((*win_can_suspend), (CARGS)); -#ifdef NEW_KEYBOARD_HIT - boolean FDECL((*keyboard_hit), (CARGS)); -#endif }; #endif /* WINCHAIN */ @@ -458,9 +449,6 @@ extern void FDECL(safe_status_enablefield, (int, const char *, const char *, BOOLEAN_P)); extern void FDECL(safe_status_update, (int, genericptr_t, int, int, int, unsigned long *)); extern boolean NDECL(safe_can_suspend); -#ifdef NEW_KEYBOARD_HIT -extern boolean NDECL(safe_keyboard_hit); -#endif extern void FDECL(stdio_raw_print, (const char *)); extern void FDECL(stdio_raw_print_bold, (const char *)); extern void NDECL(stdio_wait_synch); diff --git a/include/wintty.h b/include/wintty.h index e6388ec0d..4863d6e10 100644 --- a/include/wintty.h +++ b/include/wintty.h @@ -50,12 +50,6 @@ 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 */ @@ -253,10 +247,6 @@ E void FDECL(genl_outrip, (winid, int, time_t)); E char *FDECL(tty_getmsghistory, (BOOLEAN_P)); E void FDECL(tty_putmsghistory, (const char *, BOOLEAN_P)); -#ifdef NEW_KEYBOARD_HIT -E boolean NDECL(tty_keyboard_hit); -#endif - #ifdef NO_TERMS #ifdef MAC #ifdef putchar diff --git a/src/allmain.c b/src/allmain.c index b00c6312f..9a8d31276 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -4,6 +4,7 @@ /* NetHack may be freely redistributed. See license for details. */ /* various code that was replicated in *main.c */ + #include "hack.h" #include @@ -378,11 +379,7 @@ boolean resuming; if (g.multi >= 0 && g.occupation) { #if defined(MICRO) || defined(WIN32) abort_lev = 0; -#ifdef NEW_KEYBOARD_HIT - if (keyboard_hit()) { -#else if (kbhit()) { -#endif if ((ch = pgetchar()) == ABORT) abort_lev++; else @@ -440,8 +437,6 @@ boolean resuming; #ifdef MAIL ckmailstatus(); #endif - fuzzer_check(); - rhack((char *) 0); } if (u.utotype) /* change dungeon level */ @@ -589,8 +584,6 @@ newgame() { int i; - fuzzer_auto_start(); - #ifdef MFLOPPY gameDiskPrompt(); #endif @@ -930,78 +923,4 @@ const char *opts; #endif return; } - -/* fuzzer_toggle() toggles fuzzer state */ -void -fuzzer_toggle() -{ - if (iflags.debug_fuzzer) - fuzzer_stop(); - else - fuzzer_start(); -} - -/* fuzzer_check() is called prior to rhack(0) to allow the fuzzer to - * check if it should stop and to allow it to reseed the game. - */ -void -fuzzer_check() -{ - if (iflags.debug_fuzzer) - { - unsigned long seed; - if (g.moves >= iflags.fuzzer_stop_and_save) { - iflags.fuzzer_saving = TRUE; - dosave0(); - exit_nhwindows("Goodbye from the fuzzer..."); - fuzzer_stop(); - nh_terminate(EXIT_SUCCESS); - } - - seed = rul(); - set_random(seed, rn2); - fuzzer_log(LOG_MINIMAL, "SEED:%ld:%lu\n", g.moves, seed); - - } -} - -/* fuzzer_auto_start is called when creating a new game to allow - * the fuzzer to start itself. - */ -void -fuzzer_auto_start() -{ - if (iflags.fuzzer_auto_start) { - unsigned long seed; - nhassert(!iflags.debug_fuzzer); - fuzzer_start(); - seed = rul(); - set_random(seed, rn2); - fuzzer_log(LOG_MINIMAL, "START:%ld:%lu\n", g.moves, seed); - } -} - -/* fuzzer_msg_history is called during save file recovery to allow - * the fuzzer to snoop the messages being recovered. The fuzzer - * saves a seed as a message in save files and this is the mechanism - * used to recover that seed if the fuzzer is being auto started. - */ -boolean -fuzzer_msg_history(msg) - const char * msg; -{ - long saved_moves; - unsigned long saved_seed; - if (sscanf(msg, "SEED:%ld:%lu", &saved_moves, &saved_seed) == 2) { - nhassert(saved_moves == g.moves); - if (iflags.fuzzer_auto_start) { - fuzzer_start(); - set_random(saved_seed, rn2); - fuzzer_log(LOG_MINIMAL, "START:%ld:%lu\n", g.moves, saved_seed); - } - return TRUE; - } - - return FALSE; -} /*allmain.c*/ diff --git a/src/dungeon.c b/src/dungeon.c index 42b507740..3b119284a 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -2516,8 +2516,7 @@ recalc_mapseen() struct cemetery *bp, **bonesaddr; struct trap *t; unsigned i, ridx; - int x, y, ltyp, count; - unsigned int atmp; + int x, y, ltyp, count, atmp; /* Should not happen in general, but possible if in the process * of being booted from the quest. The mapseen object gets diff --git a/src/hacklib.c b/src/hacklib.c index ef3e0df0f..e33d17e8a 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -854,7 +854,7 @@ static struct tm *NDECL(getlt); /* Sets the seed for the random number generator */ #ifdef USE_ISAAC64 -void +static void set_random(seed, fn) unsigned long seed; int FDECL((*fn), (int)); @@ -865,7 +865,7 @@ int FDECL((*fn), (int)); #else /* USE_ISAAC64 */ /*ARGSUSED*/ -void +static void set_random(seed, fn) unsigned long seed; int FDECL((*fn), (int)) UNUSED; @@ -917,7 +917,7 @@ int FDECL((*fn), (int)); { /* only reseed if we are certain that the seed generation is unguessable * by the players. */ - if (has_strong_rngseed && !iflags.debug_fuzzer) + if (has_strong_rngseed) init_random(fn); } @@ -1108,9 +1108,6 @@ phase_of_the_moon() /* 0-7, with 0: new, 4: full */ register struct tm *lt = getlt(); register int epact, diy, goldn; - if(iflags.debug_fuzzer) - return rn2(8); - diy = lt->tm_yday; goldn = (lt->tm_year % 19) + 1; epact = (11 * goldn + 18) % 30; @@ -1125,9 +1122,6 @@ friday_13th() { register struct tm *lt = getlt(); - if(iflags.debug_fuzzer) - return rn2(30); - /* tm_wday (day of week; 0==Sunday) == 5 => Friday */ return (boolean) (lt->tm_wday == 5 && lt->tm_mday == 13); } @@ -1135,8 +1129,7 @@ friday_13th() int night() { - register int hour = (iflags.debug_fuzzer ? (g.moves / 1000) % 24 : - getlt()->tm_hour); + register int hour = getlt()->tm_hour; return (hour < 6 || hour > 21); } @@ -1144,10 +1137,7 @@ night() int midnight() { - register int hour = (iflags.debug_fuzzer ? (g.moves / 1000) % 24 : - getlt()->tm_hour); - - return (hour == 0); + return (getlt()->tm_hour == 0); } /* strbuf_init() initializes strbuf state for use */ @@ -1229,38 +1219,4 @@ strbuf_t *strbuf; } } -ptr_array_t * -ptr_array_new(max_length) - size_t max_length; -{ - size_t esize = max_length * sizeof(void *); - ptr_array_t * a = (ptr_array_t *) malloc(sizeof(ptr_array_t) + esize); - a->elements = (void **)(a + 1); - a->length = 0; - a->max_length = max_length; - memset(a->elements, 0, esize); - return a; -} - -void -ptr_array_free(a) - ptr_array_t * a; -{ - size_t i; - - nhassert(a->length <= a->max_length); - - for(i = 0; i < a->length; i++) - if(a->elements[i]) - free(a->elements[i]); - - for (i = a->length; i < a->max_length; i++) { - nhassert(a->elements[i] == NULL); - if(a->elements[i]) - free(a->elements[i]); - } - - free(a); -} - /*hacklib.c*/ diff --git a/src/pline.c b/src/pline.c index 13f782fef..6f3bfa537 100644 --- a/src/pline.c +++ b/src/pline.c @@ -572,78 +572,4 @@ 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); -} - -static FILE * g_fuzzer_log_file = NULL; -static int g_fuzzer_log_level = LOG_MINIMAL; - -/* fuzzer_start() starts the fuzzer opening the fuzzer log file */ -void -fuzzer_start() -{ - if (!iflags.debug_fuzzer) { - const char * fq_replay; - - iflags.debug_fuzzer = TRUE; - iflags.fuzzer_auto_start = FALSE; - - nhassert(g_fuzzer_log_file == NULL); - fq_replay = fqname("fuzzer.log", SAVEPREFIX, 0); - - g_fuzzer_log_file = fopen(fq_replay, "w"); - } -} - -/* fuzzer_stop() stops the fuzzer and close the fuzzer log file */ -void -fuzzer_stop() -{ - if (iflags.debug_fuzzer) { - if(g_fuzzer_log_file != NULL) { - fclose(g_fuzzer_log_file); - g_fuzzer_log_file = NULL; - } - } -} - -/* fuzzer_log() is used to place messages in the file 'fuzzer.log'. This - * log is the primary tool for monitoring fuzzer activity and tracking down - * issues that the fuzzer is able to reproduce. - */ -void -fuzzer_log -VA_DECL2(int, lvl, const char *, str) -{ - VA_START(str); - VA_INIT(str, char *); - - if (!g_fuzzer_log_file) - return; - - if (iflags.verbose_logging_start != 0 && - g.moves >= iflags.verbose_logging_start) - g_fuzzer_log_level = LOG_VERBOSE; - - if (lvl <= g_fuzzer_log_level) - Vfprintf(g_fuzzer_log_file, str, VA_ARGS); - - VA_END(); -} - - /*pline.c*/ diff --git a/src/restore.c b/src/restore.c index ba9ef8f93..9c01c5432 100644 --- a/src/restore.c +++ b/src/restore.c @@ -1509,8 +1509,6 @@ NHFILE *nhfp; if (nhfp->fieldlevel) sfi_str(nhfp, msg, "msghistory", "msg", msgsize); msg[msgsize] = '\0'; - if(fuzzer_msg_history(msg)) - continue; putmsghistory(msg, TRUE); ++msgcount; } diff --git a/src/rnd.c b/src/rnd.c index 02ffddce3..0ca649fbb 100644 --- a/src/rnd.c +++ b/src/rnd.c @@ -56,21 +56,10 @@ int FDECL((*fn), (int)); (int) sizeof seed); } -unsigned long -rul() -{ - unsigned long value; - - value = (unsigned long) isaac64_next_uint64(&rnglist[CORE].rng_state); - fuzzer_log(LOG_VERBOSE, "RANDOM:%lu\n", value); - - return value; -} - static int RND(int x) { - return (rul() % x); + return (isaac64_next_uint64(&rnglist[CORE].rng_state) % x); } /* 0 <= rn2(x) < x, but on a different sequence from the "main" rn2; @@ -80,8 +69,6 @@ int rn2_on_display_rng(x) register int x; { - if (iflags.debug_fuzzer) - return rn2(x); return (isaac64_next_uint64(&rnglist[DISP].rng_state) % x); } @@ -107,20 +94,6 @@ register int x; seed *= 2739110765; return (int)((seed >> 16) % (unsigned)x); } - -unsigned long -rul() -{ -#if defined(LINT) && defined(UNIX) - return (unsigned long) rand(); -#else /* LINT */ -#if defined(UNIX) || defined(RANDOM) - return (unsigned long) Rand(); -#else - return (unsigned long) (Rand() >> 3); -#endif /* defined(UNIX) || defined(RANDOM) */ -#endif /* LINT */ -} #endif /* USE_ISAAC64 */ /* 0 <= rn2(x) < x */ diff --git a/src/save.c b/src/save.c index fbe133c9b..b651ce52f 100644 --- a/src/save.c +++ b/src/save.c @@ -132,7 +132,7 @@ dosave0() return 0; #endif - HUP if (!iflags.debug_fuzzer && iflags.window_inited) { + HUP if (iflags.window_inited) { nh_uncompress(fq_save); nhfp = open_savefile(); if (nhfp) { @@ -1225,25 +1225,6 @@ NHFILE *nhfp; } ++msgcount; } - /* If the fuzzer is stopping and saving, save a seed as a message. - In 3.7, we will modify the save file format and save the seed - directly in the saved game state. */ - if (iflags.fuzzer_saving) { - char message[BUFSIZ]; - unsigned long seed = rul(); - - sprintf(message, "SEED:%ld:%lu", g.moves, seed); - fuzzer_log(LOG_MINIMAL, "STOP:%ld:%lu\n", g.moves, seed); - msglen = strlen(message); - if (nhfp->structlevel) { - bwrite(nhfp->fd, (genericptr_t) &msglen, sizeof msglen); - bwrite(nhfp->fd, (genericptr_t) message, msglen); - } - if (nhfp->fieldlevel) { - sfo_int(nhfp, &msglen, "msghistory", "msghistory_length", 1); - sfo_str(nhfp, message, "msghistory", "msg", msglen); - } - } if (nhfp->structlevel) bwrite(nhfp->fd, (genericptr_t) &minusone, sizeof (int)); if (nhfp->fieldlevel) diff --git a/src/sp_lev.c b/src/sp_lev.c index 51c36ab0d..ffb966671 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -3762,7 +3762,7 @@ struct opvar *mc; break; case 0: case 1: - if (levl[x][y].lit == (unsigned int) lit) + if (levl[x][y].lit == lit) selection_setpoint(x, y, ret, 1); break; } diff --git a/src/teleport.c b/src/teleport.c index 88d33325c..ff41b95a3 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -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 != (unsigned char) ESHK(mtmp)->shoproom) + if (levl[x][y].roomno != ESHK(mtmp)->shoproom) return FALSE; } else if (mtmp->ispriest && inhistemple(mtmp)) { - if (levl[x][y].roomno != (unsigned char) EPRI(mtmp)->shroom) + if (levl[x][y].roomno != EPRI(mtmp)->shroom) return FALSE; } /* current location is */ diff --git a/src/windows.c b/src/windows.c index 9d0ed7ceb..dfb3f3629 100644 --- a/src/windows.c +++ b/src/windows.c @@ -521,9 +521,6 @@ static void NDECL(hup_void_ndecl); static void FDECL(hup_void_fdecl_int, (int)); static void FDECL(hup_void_fdecl_winid, (winid)); static void FDECL(hup_void_fdecl_constchar_p, (const char *)); -#ifdef NEW_KEYBOARD_HIT -static boolean NDECL(hup_keyboard_hit); -#endif static struct window_procs hup_procs = { "hup", 0L, 0L, hup_init_nhwindows, @@ -571,9 +568,6 @@ static struct window_procs hup_procs = { hup_void_ndecl, /* status_finish */ genl_status_enablefield, hup_status_update, genl_can_suspend_no, -#ifdef NEW_KEYBOARD_HIT - hup_keyboard_hit -#endif }; static void FDECL((*previnterface_exit_nhwindows), (const char *)) = 0; @@ -628,14 +622,6 @@ hup_nhgetch(VOID_ARGS) return '\033'; /* ESC */ } -#ifdef NEW_KEYBOARD_HIT -static boolean -hup_keyboard_hit(VOID_ARGS) -{ - return FALSE; -} -#endif - /*ARGSUSED*/ static char hup_yn_function(prompt, resp, deflt) diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 05abe249b..ede8c22ec 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -398,12 +398,10 @@ int mode; // unused { DWORD cmode; -#ifndef NEW_KEYBOARD_HIT /* Initialize the function pointer that points to * the kbhit() equivalent, in this TTY case nttty_kbhit() */ nt_kbhit = nttty_kbhit; -#endif if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE)) { /* Unable to set control handler */ @@ -438,19 +436,11 @@ int portdebug; return ch; } -#ifndef NEW_KEYBOARD_HIT int nttty_kbhit() { return keyboard_handler.pNHkbhit(console.hConIn, &ir); } -#else -boolean -tkbhit() -{ - return keyboard_handler.pNHkbhit(console.hConIn, &ir) != 0; -} -#endif int tgetch() diff --git a/sys/winnt/windmain.c b/sys/winnt/windmain.c index 5b9f76cba..1f5264670 100644 --- a/sys/winnt/windmain.c +++ b/sys/winnt/windmain.c @@ -337,7 +337,7 @@ attempt_restore: resuming = TRUE; /* not starting new game */ if (discover) You("are in non-scoring discovery mode."); - if ((discover || wizard) && !iflags.fuzzer_auto_start) { + if (discover || wizard) { if (yn("Do you want to keep the save file?") == 'n') (void) delete_savefile(); else { @@ -462,28 +462,6 @@ char *argv[]; case 'X': discover = TRUE, wizard = FALSE; break; - case 'F': - { - iflags.fuzzer_auto_start = 1; - - if (argc > 1 && argv[1][0] != '-') { - argc--; - argv++; - iflags.fuzzer_stop_and_save = atoi(*argv); - - /* turn off getreturn_enabled so that game does not - * prompt for input when exiting - */ - getreturn_enabled = FALSE; - - if (argc > 1 && argv[1][0] != '-') { - argc--; - argv++; - iflags.verbose_logging_start = atoi(*argv); - } - } - } - break; #ifdef NEWS case 'n': iflags.news = FALSE; diff --git a/sys/winnt/winnt.c b/sys/winnt/winnt.c index 127e9391a..f06775a4b 100644 --- a/sys/winnt/winnt.c +++ b/sys/winnt/winnt.c @@ -56,7 +56,6 @@ extern void NDECL(backsp); int NDECL(windows_console_custom_nhgetch); extern void NDECL(safe_routines); -#ifndef NEW_KEYBOARD_HIT /* The function pointer nt_kbhit contains a kbhit() equivalent * which varies depending on which window port is active. * For the tty port it is tty_kbhit() [from nttty.c] @@ -66,7 +65,6 @@ extern void NDECL(safe_routines); int def_kbhit(void); int (*nt_kbhit)() = def_kbhit; -#endif char switchar() @@ -160,13 +158,11 @@ max_filename() return 0; } -#ifndef NEW_KEYBOARD_HIT int def_kbhit() { return 0; } -#endif /* * Strip out troublesome file system characters. @@ -475,6 +471,23 @@ 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; @@ -499,9 +512,7 @@ int code; exit(code); } -#ifndef NEW_KEYBOARD_HIT #undef kbhit -#endif #include int @@ -711,32 +722,6 @@ 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; - - filename = strrchr(filepath, '\\'); - filename = (filename == NULL ? filepath : filename + 1); - - if (IsDebuggerPresent()) { - char message[BUFSIZ]; - snprintf(message, sizeof(message), - "nhassert(%s) failed in file '%s' at line %d", - expression, filename, line); - OutputDebugStringA(message); - DebugBreak(); - } - - /* get file name from path */ - impossible("nhassert(%s) failed in file '%s' at line %d", - expression, filename, line); -} - #endif /* WIN32 */ /*winnt.c*/ diff --git a/win/share/safeproc.c b/win/share/safeproc.c index 9f3e0ce2f..ab5cb1c5a 100644 --- a/win/share/safeproc.c +++ b/win/share/safeproc.c @@ -101,9 +101,6 @@ struct window_procs safe_procs = { safe_status_update, #endif safe_can_suspend, -#ifdef NEW_KEYBOARD_HIT - safe_keyboard_hit -#endif }; struct window_procs * @@ -389,14 +386,6 @@ safe_can_suspend() return FALSE; } -#ifdef NEW_KEYBOARD_HIT -boolean -safe_keyboard_hit() -{ - return FALSE; -} -#endif - void safe_nhbell() { diff --git a/win/tty/getline.c b/win/tty/getline.c index bf2c79666..754dbeff4 100644 --- a/win/tty/getline.c +++ b/win/tty/getline.c @@ -52,10 +52,10 @@ getlin_hook_proc hook; struct WinDesc *cw = wins[WIN_MESSAGE]; boolean doprev = 0; - if (ttyDisplay->toplin == TOPLINE_NEED_MORE && !(cw->flags & WIN_STOP)) + if (ttyDisplay->toplin == 1 && !(cw->flags & WIN_STOP)) more(); cw->flags &= ~WIN_STOP; - ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT; + ttyDisplay->toplin = 3; /* special prompt state */ ttyDisplay->inread++; /* issue the prompt */ @@ -193,7 +193,7 @@ getlin_hook_proc hook; } else tty_nhbell(); } - ttyDisplay->toplin = TOPLINE_NON_EMPTY; + ttyDisplay->toplin = 2; /* nonempty, no --More-- required */ ttyDisplay->inread--; clear_nhwindow(WIN_MESSAGE); /* clean up after ourselves */ diff --git a/win/tty/topl.c b/win/tty/topl.c index 00e5b5d52..242ba78c7 100644 --- a/win/tty/topl.c +++ b/win/tty/topl.c @@ -138,8 +138,8 @@ const char *str; end_glyphout(); /* in case message printed during graphics output */ putsyms(str); cl_end(); - ttyDisplay->toplin = TOPLINE_NEED_MORE; - if (ttyDisplay->cury && otoplin != TOPLINE_SPECIAL_PROMPT) + ttyDisplay->toplin = 1; + if (ttyDisplay->cury && otoplin != 3) more(); } @@ -151,7 +151,7 @@ const char *str; struct WinDesc *cw = wins[WIN_MESSAGE]; if (!(cw->flags & WIN_STOP)) { - if (ttyDisplay->cury && ttyDisplay->toplin == TOPLINE_NON_EMPTY) + if (ttyDisplay->cury && ttyDisplay->toplin == 2) tty_clear_nhwindow(WIN_MESSAGE); cw->curx = cw->cury = 0; @@ -159,8 +159,8 @@ const char *str; cl_end(); addtopl(str); - if (ttyDisplay->cury && ttyDisplay->toplin != TOPLINE_SPECIAL_PROMPT) - ttyDisplay->toplin = TOPLINE_NON_EMPTY; + if (ttyDisplay->cury && ttyDisplay->toplin != 3) + ttyDisplay->toplin = 2; } } @@ -196,7 +196,7 @@ const char *s; tty_curs(BASE_WINDOW, cw->curx + 1, cw->cury); putsyms(s); cl_end(); - ttyDisplay->toplin = TOPLINE_NEED_MORE; + ttyDisplay->toplin = 1; } void @@ -204,15 +204,12 @@ 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) @@ -239,7 +236,7 @@ more() home(); cl_end(); } - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; ttyDisplay->inmore = 0; } @@ -255,11 +252,10 @@ register const char *bp; /* If there is room on the line, print message on same line */ /* But messages like "You die..." deserve their own line */ n0 = strlen(bp); - if ((ttyDisplay->toplin == TOPLINE_NEED_MORE || (cw->flags & WIN_STOP)) + if ((ttyDisplay->toplin == 1 || (cw->flags & WIN_STOP)) && cw->cury == 0 && n0 + (int) strlen(g.toplines) + 3 < CO - 8 /* room for --More-- */ && (notdied = strncmp(bp, "You die", 7)) != 0) { - /* nhassert((long) strlen(g.toplines) == cw->curx); */ Strcat(g.toplines, " "); Strcat(g.toplines, bp); cw->curx += 2; @@ -267,9 +263,9 @@ register const char *bp; addtopl(bp); return; } else if (!(cw->flags & WIN_STOP)) { - if (ttyDisplay->toplin == TOPLINE_NEED_MORE) { + if (ttyDisplay->toplin == 1) { more(); - } else if (cw->cury) { /* for toplin == TOPLINE_NON_EMPTY && cury > 1 */ + } else if (cw->cury) { /* for when flags.toplin == 2 && cury > 1 */ docorner(1, cw->cury + 1); /* reset cury = 0 if redraw screen */ cw->curx = cw->cury = 0; /* from home--cls() & docorner(1,n) */ } @@ -313,7 +309,6 @@ 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; @@ -386,10 +381,10 @@ char def; char prompt[BUFSZ]; yn_number = 0L; - if (ttyDisplay->toplin == TOPLINE_NEED_MORE && !(cw->flags & WIN_STOP)) + if (ttyDisplay->toplin == 1 && !(cw->flags & WIN_STOP)) more(); cw->flags &= ~WIN_STOP; - ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT; + ttyDisplay->toplin = 3; /* special prompt state */ ttyDisplay->inread++; if (resp) { char *rb, respbuf[QBUFSZ]; @@ -536,7 +531,7 @@ char def; dumplogmsg(g.toplines); #endif ttyDisplay->inread--; - ttyDisplay->toplin = TOPLINE_NON_EMPTY; + ttyDisplay->toplin = 2; if (ttyDisplay->intr) ttyDisplay->intr--; if (wins[WIN_MESSAGE]->cury) @@ -545,64 +540,76 @@ char def; return q; } -static ptr_array_t * -get_message_history() +/* shared by tty_getmsghistory() and tty_putmsghistory() */ +static char **snapshot_mesgs = 0; + +/* collect currently available message history data into a sequential array; + optionally, purge that data from the active circular buffer set as we go */ +static void +msghistory_snapshot(purge) +boolean purge; /* clear message history buffer as we copy it */ { char *mesg; - int i; + int i, inidx, outidx; struct WinDesc *cw; - size_t max_length; - ptr_array_t * a; - - nhassert(WIN_MESSAGE != WIN_ERR); - nhassert(wins[WIN_MESSAGE] != NULL); /* paranoia (too early or too late panic save attempt?) */ if (WIN_MESSAGE == WIN_ERR || !wins[WIN_MESSAGE]) - return NULL; - + return; cw = wins[WIN_MESSAGE]; - max_length = cw->rows; + /* flush g.toplines[], moving most recent message to history */ + remember_topl(); - if (*g.toplines) max_length++; + /* for a passive snapshot, we just copy pointers, so can't allow further + history updating to take place because that could clobber them */ + if (!purge) + cw->flags |= WIN_LOCKHISTORY; - a = ptr_array_new(max_length); - - nhassert(cw->maxrow <= cw->rows); + snapshot_mesgs = (char **) alloc((cw->rows + 1) * sizeof(char *)); + outidx = 0; + inidx = cw->maxrow; for (i = 0; i < cw->rows; ++i) { - mesg = cw->data[(i + cw->maxrow) % cw->rows]; - if (mesg && *mesg) - a->elements[a->length++] = strdup(mesg); + snapshot_mesgs[i] = (char *) 0; + mesg = cw->data[inidx]; + if (mesg && *mesg) { + snapshot_mesgs[outidx++] = mesg; + if (purge) { + /* we're taking this pointer away; subsequest history + updates will eventually allocate a new one to replace it */ + cw->data[inidx] = (char *) 0; + cw->datlen[inidx] = 0; + } + } + inidx = (inidx + 1) % cw->rows; } - if (*g.toplines) - a->elements[a->length++] = strdup(g.toplines); + snapshot_mesgs[cw->rows] = (char *) 0; /* sentinel */ - return a; + /* for a destructive snapshot, history is now completely empty */ + if (purge) + cw->maxcol = cw->maxrow = 0; } +/* release memory allocated to message history snapshot */ static void -purge_message_history() +free_msghistory_snapshot(purged) +boolean purged; /* True: took history's pointers, False: just cloned them */ { - int i; - struct WinDesc *cw; + if (snapshot_mesgs) { + /* snapshot pointers are no longer in use */ + if (purged) { + int i; - nhassert(WIN_MESSAGE != WIN_ERR); - nhassert(wins[WIN_MESSAGE] != NULL); - - cw = wins[WIN_MESSAGE]; - - *g.toplines = '\0'; - - for (i = 0; i < cw->rows; ++i) { - if (cw->data[i]) { - free(cw->data[i]); - cw->data[i] = (char *) 0; - cw->datlen[i] = 0; + for (i = 0; snapshot_mesgs[i]; ++i) + free((genericptr_t) snapshot_mesgs[i]); } - } - cw->maxcol = cw->maxrow = 0; + free((genericptr_t) snapshot_mesgs), snapshot_mesgs = (char **) 0; + + /* history can resume being updated at will now... */ + if (!purged) + wins[WIN_MESSAGE]->flags &= ~WIN_LOCKHISTORY; + } } /* @@ -619,25 +626,21 @@ char * tty_getmsghistory(init) boolean init; { - static size_t nxtidx; - static ptr_array_t * saved_messages = NULL; - char *result = NULL; + static int nxtidx; + char *nextmesg; + char *result = 0; if (init) { - nhassert(saved_messages == NULL); - saved_messages = get_message_history(); + msghistory_snapshot(FALSE); nxtidx = 0; - wins[WIN_MESSAGE]->flags |= WIN_LOCKHISTORY; } - if (saved_messages) { - if (nxtidx < saved_messages->length) - result = saved_messages->elements[nxtidx++]; - - if (result == NULL) { - ptr_array_free(saved_messages); - saved_messages = NULL; - wins[WIN_MESSAGE]->flags &= ~WIN_LOCKHISTORY; + if (snapshot_mesgs) { + nextmesg = snapshot_mesgs[nxtidx++]; + if (nextmesg) { + result = (char *) nextmesg; + } else { + free_msghistory_snapshot(FALSE); } } return result; @@ -666,10 +669,7 @@ const char *msg; boolean restoring_msghist; { static boolean initd = FALSE; - static ptr_array_t * saved_messages = NULL; - size_t i; - - nhassert(!(wins[WIN_MESSAGE]->flags & WIN_LOCKHISTORY)); + int idx; if (restoring_msghist && !initd) { /* we're restoring history from the previous session, but new @@ -677,9 +677,7 @@ boolean restoring_msghist; for instance); collect current history (ie, those new messages), and also clear it out so that nothing will be present when the restored ones are being put into place */ - nhassert(saved_messages == NULL); - saved_messages = get_message_history(); - purge_message_history(); + msghistory_snapshot(TRUE); initd = TRUE; #ifdef DUMPLOG /* this suffices; there's no need to scrub saved_pline[] pointers */ @@ -688,52 +686,25 @@ 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); #ifdef DUMPLOG dumplogmsg(g.toplines); #endif - return; - } - - /* tty_putmsghistory() is called with msg==NULL to indidate that - * we are finished restoring the message history. If we saved - * some message history when we started, its time now to appened - * those saved messages. - * - * We don't otherwise expect to get called with msg==NULL. - * - */ - nhassert(restoring_msghist && initd); - - if (initd && restoring_msghist) { - if (saved_messages) { - nhassert(ttyDisplay == NULL || - ttyDisplay->toplin != TOPLINE_NEED_MORE); - - for (i = 0; i < saved_messages->length; i++) { - const char * mesg = saved_messages->elements[i]; - remember_topl(); - nhassert(mesg); - Strcpy(g.toplines, mesg); + } else if (snapshot_mesgs) { + /* done putting arbitrary messages in; put the snapshot ones back */ + for (idx = 0; snapshot_mesgs[idx]; ++idx) { + remember_topl(); + Strcpy(g.toplines, snapshot_mesgs[idx]); #ifdef DUMPLOG - dumplogmsg(g.toplines); + dumplogmsg(g.toplines); #endif - } - ptr_array_free(saved_messages); - saved_messages = NULL; - } - initd = FALSE; + } + /* now release the snapshot */ + free_msghistory_snapshot(TRUE); + initd = FALSE; /* reset */ } - } #endif /* TTY_GRAPHICS */ diff --git a/win/tty/wintty.c b/win/tty/wintty.c index f27e08593..934a452c6 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -36,12 +36,6 @@ extern void msmsg(const char *, ...); #endif #endif -#ifdef NEW_KEYBOARD_HIT -#if defined(UNIX) -#include -#endif -#endif - #ifdef TTY_TILES_ESCCODES extern short glyph2tile[]; #define TILE_ANSI_COMMAND 'z' @@ -137,9 +131,6 @@ struct window_procs tty_procs = { genl_status_update, #endif genl_can_suspend_yes, -#ifdef NEW_KEYBOARD_HIT - tty_keyboard_hit -#endif }; static int maxwin = 0; /* number of windows in use */ @@ -330,7 +321,7 @@ int sig_unused UNUSED; new_status_window(); if (u.ux) { i = ttyDisplay->toplin; - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; docrt(); bot(); ttyDisplay->toplin = i; @@ -418,7 +409,7 @@ char **argv UNUSED; /* set up tty descriptor */ ttyDisplay = (struct DisplayDesc *) alloc(sizeof (struct DisplayDesc)); - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; ttyDisplay->rows = hgt; ttyDisplay->cols = wid; ttyDisplay->curx = ttyDisplay->cury = 0; @@ -1619,12 +1610,12 @@ winid window; switch (cw->type) { case NHW_MESSAGE: - if (ttyDisplay->toplin != TOPLINE_EMPTY) { + if (ttyDisplay->toplin) { home(); cl_end(); if (cw->cury) docorner(1, cw->cury + 1); - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; } break; case NHW_STATUS: @@ -2315,13 +2306,12 @@ boolean blocking; /* with ttys, all windows are blocking */ switch (cw->type) { case NHW_MESSAGE: - if (ttyDisplay->toplin == TOPLINE_NEED_MORE) { + if (ttyDisplay->toplin == 1) { more(); - ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */ + ttyDisplay->toplin = 1; /* more resets this */ tty_clear_nhwindow(window); - nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); } else - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; cw->curx = cw->cury = 0; if (!cw->active) iflags.window_inited = TRUE; @@ -2329,8 +2319,8 @@ boolean blocking; /* with ttys, all windows are blocking */ case NHW_MAP: end_glyphout(); if (blocking) { - if (ttyDisplay->toplin != TOPLINE_EMPTY) - ttyDisplay->toplin = TOPLINE_NEED_MORE; + if (!ttyDisplay->toplin) + ttyDisplay->toplin = 1; tty_display_nhwindow(WIN_MESSAGE, TRUE); return; } @@ -2360,7 +2350,7 @@ boolean blocking; /* with ttys, all windows are blocking */ cw->offx = 0; if (cw->type == NHW_MENU) cw->offy = 0; - if (ttyDisplay->toplin == TOPLINE_NEED_MORE) + if (ttyDisplay->toplin == 1) tty_display_nhwindow(WIN_MESSAGE, TRUE); #ifdef H2344_BROKEN if (cw->maxrow >= (int) ttyDisplay->rows @@ -2376,7 +2366,7 @@ boolean blocking; /* with ttys, all windows are blocking */ cl_eos(); } else clear_screen(); - ttyDisplay->toplin = TOPLINE_EMPTY; + ttyDisplay->toplin = 0; } else { if (WIN_MESSAGE != WIN_ERR) tty_clear_nhwindow(WIN_MESSAGE); @@ -2405,9 +2395,8 @@ winid window; switch (cw->type) { case NHW_MESSAGE: - if (ttyDisplay->toplin != TOPLINE_EMPTY) + if (ttyDisplay->toplin) tty_display_nhwindow(WIN_MESSAGE, TRUE); - nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); /*FALLTHRU*/ case NHW_STATUS: case NHW_BASE: @@ -3158,11 +3147,10 @@ const char *mesg; response to a prompt, we'll assume that the display is up to date */ tty_putstr(WIN_MESSAGE, 0, mesg); /* if `mesg' didn't wrap (triggering --More--), force --More-- now */ - if (ttyDisplay->toplin == TOPLINE_NEED_MORE) { + if (ttyDisplay->toplin == 1) { more(); - ttyDisplay->toplin = TOPLINE_NEED_MORE; /* more resets this */ + ttyDisplay->toplin = 1; /* more resets this */ tty_clear_nhwindow(WIN_MESSAGE); - nhassert(ttyDisplay->toplin == TOPLINE_EMPTY); } /* normally means skip further messages, but in this case it means cancel the current prompt; any other messages should @@ -3202,7 +3190,7 @@ tty_wait_synch() (void) fflush(stdout); } else if (ttyDisplay->inread > g.program_state.gameover) { /* this can only happen if we were reading and got interrupted */ - ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT; + ttyDisplay->toplin = 3; /* do this twice; 1st time gets the Quit? message again */ (void) tty_doprev_message(); (void) tty_doprev_message(); @@ -3489,7 +3477,6 @@ const char *str; #endif } -#ifndef NEW_KEYBOARD_HIT int tty_nhgetch() { @@ -3531,9 +3518,8 @@ tty_nhgetch() i = '\033'; /* map NUL to ESC since nethack doesn't expect NUL */ else if (i == EOF) i = '\033'; /* same for EOF */ - /* topline has been seen - we can clear need for more */ - if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE) - ttyDisplay->toplin = TOPLINE_NON_EMPTY; + if (ttyDisplay && ttyDisplay->toplin == 1) + ttyDisplay->toplin = 2; #ifdef TTY_TILES_ESCCODES { /* hack to force output of the window select code */ @@ -3545,94 +3531,6 @@ tty_nhgetch() #endif /* TTY_TILES_ESCCODES */ return i; } -#else /* NEW_KEYBOARD_HIT */ -#ifdef UNIX -static boolean stdin_non_blocking = FALSE; - -int -tgetch() -{ - static volatile int nesting = 0; - int i; - char nestbuf; - - if (stdin_non_blocking) { - fcntl(0, F_SETFL, fcntl(0, F_GETFL) & ~O_NONBLOCK); - stdin_non_blocking = FALSE; - } - - /* kludge alert: Some Unix variants return funny values if getc() - * is called, interrupted, and then called again. There - * is non-reentrant code in the internal _filbuf() routine, called by - * getc(). - */ - i = (++nesting == 1) - ? getchar() - : (read(fileno(stdin), (genericptr_t) &nestbuf, 1) == 1) - ? (int) nestbuf : EOF; - --nesting; - - return i; -} - -boolean -tkbhit() -{ - int i; - if (!stdin_non_blocking) { - fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); - stdin_non_blocking = TRUE; - } - i = getchar(); - if (i != EOF) ungetc(i, stdin); - return (i != EOF); - } -#endif - -int -tty_nhgetch() -{ - int i; - HUPSKIP_RESULT('\033'); - print_vt_code1(AVTC_INLINE_SYNC); - (void) fflush(stdout); - /* Note: if raw_print() and wait_synch() get called to report terminal - * initialization problems, then wins[] and ttyDisplay might not be - * available yet. Such problems will probably be fatal before we get - * here, but validate those pointers just in case... - */ - if (WIN_MESSAGE != WIN_ERR && wins[WIN_MESSAGE]) - wins[WIN_MESSAGE]->flags &= ~WIN_STOP; - if (iflags.debug_fuzzer) { - i = randomkey(); - } else { - i = tgetch(); - } - if (!i) - i = '\033'; /* map NUL to ESC since nethack doesn't expect NUL */ - else if (i == EOF) - i = '\033'; /* same for EOF */ - /* topline has been seen - we can clear need for more */ - if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE) - ttyDisplay->toplin = TOPLINE_NON_EMPTY; -#ifdef TTY_TILES_ESCCODES - { - /* hack to force output of the window select code */ - int tmp = vt_tile_current_window; - - vt_tile_current_window++; - print_vt_code2(AVTC_SELECT_WINDOW, tmp); - } -#endif /* TTY_TILES_ESCCODES */ - return i; -} - -boolean tty_keyboard_hit() -{ - /* tgetch provider needs to also provide tkbhit() */ - return tkbhit(); -} -#endif /* NEW_KEYBOARD_HIT */ /* * return a key, or 0, in which case a mouse button was pressed @@ -3659,9 +3557,8 @@ int *x, *y, *mod; i = ntposkey(x, y, mod); if (!i && mod && (*mod == 0 || *mod == EOF)) i = '\033'; /* map NUL or EOF to ESC, nethack doesn't expect either */ - /* topline has been seen - we can clear need for more */ - if (ttyDisplay && ttyDisplay->toplin == TOPLINE_NEED_MORE) - ttyDisplay->toplin = TOPLINE_NON_EMPTY; + if (ttyDisplay && ttyDisplay->toplin == 1) + ttyDisplay->toplin = 2; #else /* !WIN32CON */ nhUse(x); nhUse(y); diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 0fb183c6a..1d9907b42 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -116,9 +116,6 @@ struct window_procs mswin_procs = { mswin_status_init, mswin_status_finish, mswin_status_enablefield, mswin_status_update, genl_can_suspend_yes, -#ifdef NEW_KEYBOARD_HIT - mswin_keyboard_hit -#endif }; /* @@ -1405,15 +1402,6 @@ mswin_nhgetch() return (key); } -#ifdef NEW_KEYBOARD_HIT -/* boolean keyboard_hit() -- returns TRUE if input is available */ -boolean -mswin_keyboard_hit() -{ - return mswin_have_input() != 0; -} -#endif - /* int nh_poskey(int *x, int *y, int *mod) -- Returns a single character input from the user or a diff --git a/win/win32/scripts/fuzzer/clean.bat b/win/win32/scripts/fuzzer/clean.bat deleted file mode 100644 index a02c48739..000000000 --- a/win/win32/scripts/fuzzer/clean.bat +++ /dev/null @@ -1,8 +0,0 @@ -set BIN_DIR=..\..\..\..\bin\Debug\Win32 - -set FUZZER_LOG=%BIN_DIR%\fuzzer.log -set FUZZER_DIR=%BIN_DIR%\fuzzer - -if exist %BIN_DIR%\%USERNAME%* del %BIN_DIR%\%USERNAME%* -if exist %FUZZER_LOG% del %FUZZER_LOG% - diff --git a/win/win32/scripts/fuzzer/longtest.bat b/win/win32/scripts/fuzzer/longtest.bat deleted file mode 100644 index d1e1586e7..000000000 --- a/win/win32/scripts/fuzzer/longtest.bat +++ /dev/null @@ -1,26 +0,0 @@ -echo off - -SETLOCAL ENABLEEXTENSIONS -SETLOCAL ENABLEDELAYEDEXPANSION - -call setenv.bat - -if exist %FUZZER_DIR% rmdir /s /q %FUZZER_DIR% - -mkdir %FUZZER_DIR% -mkdir %SAVE_DIR% - -for /L %%i in (%START_MOVE%, %STEP_SIZE%, %FINAL_MOVE%) do ( - - call runtill.bat %%i - - if ERRORLEVEL 1 ( - echo FAILED getting running to %%i. - exit /b 1 - ) - -) - -echo SUCCESS. - - diff --git a/win/win32/scripts/fuzzer/restore.bat b/win/win32/scripts/fuzzer/restore.bat deleted file mode 100644 index b411ea857..000000000 --- a/win/win32/scripts/fuzzer/restore.bat +++ /dev/null @@ -1,4 +0,0 @@ -call clean.bat -call setenv.bat - -copy %FUZZER_DIR%\%SAVED_GAME% %BIN_DIR%\%SAVED_GAME% diff --git a/win/win32/scripts/fuzzer/runtill.bat b/win/win32/scripts/fuzzer/runtill.bat deleted file mode 100644 index e67ddfd17..000000000 --- a/win/win32/scripts/fuzzer/runtill.bat +++ /dev/null @@ -1,70 +0,0 @@ -REM -REM runtill target_move -REM -echo on - -SETLOCAL ENABLEEXTENSIONS -SETLOCAL ENABLEDELAYEDEXPANSION - -set TARGET_MOVE=%1 - -if %TARGET_MOVE% == "" ( - echo Usage:runtill target_move - goto :eof -) - -call setenv.bat - -if not exist %FUZZER_DIR% mkdir %FUZZER_DIR% -if not exist %SAVE_DIR% mkdir %SAVE_DIR% - -call clean.bat - -if not exist %FUZZER_DIR%\%SAVED_GAME% ( - %BIN_DIR%\nethack -D -F 0 - - copy %BIN_DIR%\%SAVED_GAME% %FUZZER_DIR% - copy %BIN_DIR%\%SAVED_GAME% %SAVE_DIR%\0.save -) - -call restore.bat - -%BIN_DIR%\nethack -D -F %TARGET_MOVE% - -copy %FUZZER_LOG% %BASELINE% - -for /f "tokens=2,3 delims=: usebackq" %%i in (`findstr /c:START %BASELINE%`) do ( - set START_SEED=%%j - set START_MOVE=%%i -) - -for /f "tokens=2,3 delims=: usebackq" %%i in (`findstr /c:STOP %BASELINE%`) do ( - set STOP_SEED=%%j - set STOP_MOVE=%%i -) - -if !STOP_MOVE! LSS %TARGET_MOVE% ( - cls - echo FAILED: Failed to reach target move. !STOP_MOVE! is not GTE %TARGET_MOVE%. - exit /b 1 -) - -call restore.bat - -%BIN_DIR%\nethack -D -F %TARGET_MOVE% - -fc %FUZZER_LOG% %BASELINE% - -if ERRORLEVEL 1 ( - cls - echo FAILED: Unable to reproduce same timeline - exit /b 1 -) - -del /q %FUZZER_DIR%\%SAVED_GAME% - -copy %BIN_DIR%\%SAVED_GAME% %FUZZER_DIR% -copy %BIN_DIR%\%SAVED_GAME% %SAVE_DIR%\!STOP_MOVE!.save - -echo !START_MOVE! to !STOP_MOVE!. -echo SUCCESS. diff --git a/win/win32/scripts/fuzzer/setenv.bat b/win/win32/scripts/fuzzer/setenv.bat deleted file mode 100644 index 3b3807371..000000000 --- a/win/win32/scripts/fuzzer/setenv.bat +++ /dev/null @@ -1,13 +0,0 @@ -echo on - -set STEP_SIZE=5000 -set FINAL_MOVE=500000 -set START_MOVE=5000 - -set BIN_DIR=..\..\..\..\bin\Debug\Win32 -set SAVED_GAME=wizard.NetHack-saved-game -set LOG_FILE=%BIN_DIR%\runtil.log -set FUZZER_LOG=%BIN_DIR%\fuzzer.log -set FUZZER_DIR=%BIN_DIR%\fuzzer -set SAVE_DIR=%FUZZER_DIR%\save -set BASELINE=%FUZZER_DIR%\fuzzer.log diff --git a/win/win32/winMS.h b/win/win32/winMS.h index c649917dc..c5ee77368 100644 --- a/win/win32/winMS.h +++ b/win/win32/winMS.h @@ -167,9 +167,6 @@ void mswin_raw_print(const char *str); void mswin_raw_print_bold(const char *str); void mswin_raw_print_flush(); int mswin_nhgetch(void); -#ifdef NEW_KEYBOARD_HIT -boolean mswin_keyboard_hit(void); -#endif int mswin_nh_poskey(int *x, int *y, int *mod); void mswin_nhbell(void); int mswin_doprev_message(void);