Changes to get fuzzer working in NetHackW.

This commit is contained in:
Bart House
2018-12-12 21:46:14 -08:00
parent ce7c9d5077
commit 0cd50847fb
13 changed files with 121 additions and 20 deletions

View File

@@ -174,6 +174,7 @@ E boolean NDECL(status_hilite_menu);
/* ### cmd.c ### */
E char NDECL(randomkey);
E void FDECL(random_response, (char * buf, int size));
E int NDECL(doconduct);
E int NDECL(domonability);
E char FDECL(cmd_from_func, (int NDECL((*))));

View File

@@ -4421,6 +4421,27 @@ randomkey()
return c;
}
void random_response(char * buf, int size)
{
int count = 0;
while (1) {
char c = randomkey();
if (c == '\n')
break;
if (c == '\033') {
count = 0;
break;
}
if (count < size)
buf[count++] = c;
}
buf[count] = '\0';
}
int
ch2spkeys(c, start, end)
char c;

View File

@@ -348,7 +348,10 @@ attempt_restore:
if (discover)
You("are in non-scoring discovery mode.");
}
moveloop(resuming);
// iflags.debug_fuzzer = TRUE;
moveloop(resuming);
nethack_exit(EXIT_SUCCESS);
/*NOTREACHED*/
return 0;

View File

@@ -25,6 +25,14 @@ INT_PTR CALLBACK GetlinDlgProc(HWND, UINT, WPARAM, LPARAM);
int
mswin_getlin_window(const char *question, char *result, size_t result_size)
{
if (iflags.debug_fuzzer) {
random_response(result, result_size);
if (result[0] != '\0')
return IDOK;
else
return IDCANCEL;
}
INT_PTR ret;
struct getlin_data data;

View File

@@ -529,6 +529,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
child = GetNHApp()->windowlist[msg_param->wid].win;
} break;
case MSNH_MSG_RANDOM_INPUT:
nhassert(0); // unexpected
break;
}
}

View File

@@ -722,7 +722,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
}
} break;
} /* end switch(wParam) */
case MSNH_MSG_RANDOM_INPUT:
nhassert(0); // unexpected
break;
} /* end switch(wParam) */
}
/* on WM_CREATE */

View File

@@ -687,6 +687,18 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
ZeroMemory(data->menu.prompt, sizeof(data->menu.prompt));
}
} break;
case MSNH_MSG_RANDOM_INPUT: {
char c = randomkey();
if (c == '\n')
PostMessage(hWnd, WM_COMMAND, MAKELONG(IDOK, 0), 0);
else if (c == '\033')
PostMessage(hWnd, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
else
PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL), WM_CHAR, c, 0);
} break;
}
}
/*-----------------------------------------------------------------------------*/

View File

@@ -21,6 +21,7 @@
#define MSNH_MSG_CARET 110
#define MSNH_MSG_GETTEXT 111
#define MSNH_MSG_UPDATE_STATUS 112
#define MSNH_MSG_RANDOM_INPUT 113
typedef struct mswin_nhmsg_add_wnd {
winid wid;

View File

@@ -416,6 +416,10 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
}
} break;
case MSNH_MSG_RANDOM_INPUT:
nhassert(0); // unexpected
break;
} /* switch( wParam ) */
}

View File

@@ -282,6 +282,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
data->window_text = NULL;
break;
}
case MSNH_MSG_RANDOM_INPUT:
nhassert(0); // unexpected
break;
}
}

View File

@@ -219,6 +219,11 @@ StatusWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
data->status_lines = msg_data->status_lines;
InvalidateRect(hWnd, NULL, TRUE);
} break;
case MSNH_MSG_RANDOM_INPUT:
nhassert(0); // unexpected
break;
} /* end switch( wParam ) { */
} break;

View File

@@ -212,6 +212,19 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
_tcscat(data->window_text, TEXT("\r\n"));
break;
}
case MSNH_MSG_RANDOM_INPUT: {
char c = randomkey();
if (c == '\n')
PostMessage(hWnd, WM_COMMAND, MAKELONG(IDOK, 0), 0);
else if (c == '\033')
PostMessage(hWnd, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
else
PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL), WM_CHAR, c, 0);
}
break;
}
}

View File

@@ -2102,14 +2102,24 @@ mswin_main_loop()
{
MSG msg;
while (!mswin_have_input() && GetMessage(&msg, NULL, 0, 0) != 0) {
if (GetNHApp()->regNetHackMode
|| !TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
while (!mswin_have_input()) {
if (!iflags.debug_fuzzer || PeekMessage(&msg, NULL, 0, 0, FALSE)) {
if(GetMessage(&msg, NULL, 0, 0) != 0) {
if (GetNHApp()->regNetHackMode
|| !TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else {
/* WM_QUIT */
break;
}
} else {
nhassert(iflags.debug_fuzzer);
NHEVENT_KBD(randomkey());
}
}
}
/* clean up and quit */
@@ -2222,16 +2232,25 @@ mswin_popup_display(HWND hWnd, int *done_indicator)
SetFocus(hWnd);
/* go into message loop */
while (IsWindow(hWnd) && (done_indicator == NULL || !*done_indicator)
&& GetMessage(&msg, NULL, 0, 0) != 0) {
if (!IsDialogMessage(hWnd, &msg)) {
if (!TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
while (IsWindow(hWnd) && (done_indicator == NULL || !*done_indicator)) {
if (!iflags.debug_fuzzer || PeekMessage(&msg, NULL, 0, 0, FALSE)) {
if(GetMessage(&msg, NULL, 0, 0) != 0) {
if (!IsDialogMessage(hWnd, &msg)) {
if (!TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
} else {
/* WM_QUIT */
break;
}
} else {
nhassert(iflags.debug_fuzzer);
PostMessage(hWnd, WM_MSNH_COMMAND, MSNH_MSG_RANDOM_INPUT, 0);
}
}
}
void