Can toggle fuzzer on/off using "Pause" key if attached to debugger.
Extended command selected randomly.
};
extern struct ext_func_tab extcmdlist[];
+extern int extcmdlist_length;
#endif /* FUNC_TAB_H */
{ '\0', (char *) 0, (char *) 0, donull, 0, (char *) 0 } /* sentinel */
};
+int extcmdlist_length = SIZE(extcmdlist) - 1;
+
const char *
key2extcmddesc(key)
uchar key;
int
mswin_ext_cmd_window(int *selection)
{
+ if (iflags.debug_fuzzer) {
+ *selection = rn2(extcmdlist_length + 1) - 1;
+
+ if (*selection != -1)
+ return IDOK;
+ else
+ return IDCANCEL;
+ }
+
INT_PTR ret;
struct extcmd_data data;
LRESULT CALLBACK
MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- PNHMainWindow data;
+ PNHMainWindow data = (PNHMainWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA);
switch (message) {
case WM_CREATE:
break;
case WM_KEYDOWN: {
- data = (PNHMainWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA);
/* translate arrow keys into nethack commands */
switch (wParam) {
NHEVENT_KBD(KEYTABLE(KEY_PLUS));
return 0;
+#if defined(DEBUG) && defined(_MSC_VER)
+ case VK_PAUSE:
+ if (IsDebuggerPresent()) {
+ iflags.debug_fuzzer = !iflags.debug_fuzzer;
+ return 0;
+ }
+ break;
+#endif
+
case VK_CLEAR: /* This is the '5' key */
NHEVENT_KBD(KEYTABLE(KEY_GOINTERESTING));
return 0;
child = GetNHApp()->windowlist[msg_param->wid].win;
} break;
- case MSNH_MSG_RANDOM_INPUT:
- nhassert(0); // unexpected
- break;
+ case MSNH_MSG_RANDOM_INPUT: {
+ nhassert(iflags.debug_fuzzer);
+ NHEVENT_KBD(randomkey());
+ } break;
}
}
} 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);
-
+ PostMessage(GetMenuControl(hWnd),
+ WM_MSNH_COMMAND, MSNH_MSG_RANDOM_INPUT, 0);
} break;
}
LRESULT CALLBACK
NHMenuListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
+ HWND hWndParent = GetParent(hWnd);
BOOL bUpdateFocusItem;
/* we will redraw focused item whenever horizontal scrolling occurs
SetFocus(GetNHApp()->hMainWnd);
}
return FALSE;
+
+ case WM_MSNH_COMMAND:
+ if (wParam == MSNH_MSG_RANDOM_INPUT) {
+ char c = randomkey();
+ if (c == '\n')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDOK, 0), 0);
+ else if (c == '\033')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
+ else
+ PostMessage(hWnd, WM_CHAR, c, 0);
+ return 0;
+ }
+ break;
+
}
/* update focused item */
LRESULT CALLBACK
NHMenuTextWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
+ HWND hWndParent = GetParent(hWnd);
HDC hDC;
RECT rc;
&& (si.nPos + (int) si.nPage) <= (si.nMax - si.nMin))
SendMessage(hWnd, EM_SCROLL, SB_PAGEDOWN, 0);
else
- PostMessage(GetParent(hWnd), WM_COMMAND, MAKELONG(IDOK, 0),
- 0);
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDOK, 0), 0);
return 0;
}
case VK_NEXT:
case WM_SETFOCUS:
HideCaret(hWnd);
return 0;
+
+ case WM_MSNH_COMMAND:
+ if (wParam == MSNH_MSG_RANDOM_INPUT) {
+ char c = randomkey();
+ if (c == '\n')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDOK, 0), 0);
+ else if (c == '\033')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
+ else
+ PostMessage(hWnd, WM_CHAR, c, 0);
+ return 0;
+ }
+ break;
+
}
if (editControlWndProc)
mswin_init_text_window()
{
HWND ret;
- PNHTextWindow data;
RECT rt;
/* get window position */
/* Set window caption */
SetWindowText(ret, "Text");
- /* create and set window data */
- data = (PNHTextWindow) malloc(sizeof(NHTextWindow));
- if (!data)
- panic("out of memory");
- ZeroMemory(data, sizeof(NHTextWindow));
- SetWindowLongPtr(ret, GWLP_USERDATA, (LONG_PTR) data);
-
mswin_apply_window_style(ret);
return ret;
switch (message) {
case WM_INITDIALOG: {
+ data = (PNHTextWindow)malloc(sizeof(NHTextWindow));
+ if (!data)
+ panic("out of memory");
+ ZeroMemory(data, sizeof(NHTextWindow));
+ SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)data);
+
HWND control = GetDlgItem(hWnd, IDC_TEXT_CONTROL);
HDC hdc = GetDC(control);
cached_font * font = mswin_get_font(NHW_TEXT, ATR_NONE, hdc, FALSE);
SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR) 0);
}
break;
+
}
+
+
return FALSE;
}
}
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);
-
+ PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL),
+ WM_MSNH_COMMAND, MSNH_MSG_RANDOM_INPUT, 0);
}
break;
LRESULT CALLBACK
NHEditHookWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
+ HWND hWndParent = GetParent(hWnd);
HDC hDC;
RECT rc;
&& (si.nPos + (int) si.nPage) <= (si.nMax - si.nMin))
SendMessage(hWnd, EM_SCROLL, SB_PAGEDOWN, 0);
else
- PostMessage(GetParent(hWnd), WM_COMMAND, MAKELONG(IDOK, 0),
- 0);
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDOK, 0), 0);
return 0;
}
case VK_NEXT:
case WM_SETFOCUS:
HideCaret(hWnd);
return 0;
+
+ case WM_MSNH_COMMAND:
+ if (wParam == MSNH_MSG_RANDOM_INPUT) {
+ char c = randomkey();
+ if (c == '\n')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDOK, 0), 0);
+ else if (c == '\033')
+ PostMessage(hWndParent, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
+ else
+ PostMessage(hWnd, WM_CHAR, c, 0);
+ return 0;
+ }
+ break;
+
}
if (editControlWndProc)
{
MSG 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());
- }
- }
+ 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);
+ PostMessage(GetNHApp()->hMainWnd, WM_MSNH_COMMAND,
+ MSNH_MSG_RANDOM_INPUT, 0);
+ }
+ }
}
/* clean up and quit */
SetFocus(hWnd);
/* go into message loop */
- 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);
- }
- }
+ 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 (msg.message == WM_MSNH_COMMAND ||
+ !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