deal with some win/win32 warnings

win/win32/mhdlg.c(137)   : warning C4456: declaration of 'wbuf' hides
                           previous local declaration
win/win32/mhdlg.c(62)    : note: see declaration of 'wbuf'
win/win32/mhdlg.c(875)   : warning C4189: 'gender': local variable is
                           initialized but not referenced
win/win32/mhdlg.c(874)   : warning C4189: 'race': local variable is
                           initialized but not referenced
win/win32/mhdlg.c(876)   : warning C4189: 'alignment': local variable is
                           initialized but not referenced
win/win32/mhdlg.c(873)   : warning C4189: 'role': local variable is
                           initialized but not referenced
win/win32/mhinput.h(24)  : warning C4201: nonstandard extension used:
                           nameless struct/union
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhinput.h(24)  : warning C4201: nonstandard extension used:
                           nameless struct/union
win/win32/mhinput.h(24)  : warning C4201: nonstandard extension used:
                           nameless struct/union
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhmenu.c(62)   : warning C4201: nonstandard extension used:
                           nameless struct/union
win/win32/mhmenu.c(1082) : warning C4456: declaration of 'monitorScale'
                           hides previous local declaration
win/win32/mhmenu.c(995)  : note: see declaration of 'monitorScale'
win/win32/mhmenu.c(1142) : warning C4456: declaration of 'wbuf' hides
                           previous local declaration
win/win32/mhmenu.c(986)  : note: see declaration of 'wbuf'
win/win32/mhmenu.c(1082) : warning C4189: 'monitorScale': local variable
                           is initialized but not referenced
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhmsgwnd.c(700): warning C4701: potentially uninitialized
                           local variable 'size' used
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhsplash.c(158): warning C4189: 'verstrsize': local variable
                           is initialized but not referenced
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhstatus.c(353): warning C4057: 'function':
                           'const unsigned char *' differs in indirection
                           to slightly different base types from 'const char *'
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/mhmsg.h(70)    : warning C4200: nonstandard extension used:
                           zero-sized array in struct/union
win/win32/NetHackW.c(181): warning C4456: declaration of 'buf' hides
                           previous local declaration
win/win32/NetHackW.c(90) : note: see declaration of 'buf'
win/win32/NetHackW.c(189): warning C4456: declaration of 'buf' hides
                           previous local declaration
win/win32/NetHackW.c(90) : note: see declaration of 'buf'
This commit is contained in:
nhmall
2021-01-29 13:00:00 -05:00
parent 7a07125ca3
commit ca1f7c88d4
12 changed files with 226 additions and 212 deletions

View File

@@ -178,21 +178,21 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
// init controls // init controls
if (FAILED(GetComCtlVersion(&major, &minor))) { if (FAILED(GetComCtlVersion(&major, &minor))) {
char buf[TBUFSZ]; char buf2[TBUFSZ];
Sprintf(buf, "Cannot load common control library.\n%s\n%s", Sprintf(buf2, "Cannot load common control library.\n%s\n%s",
"For further information, refer to the installation notes at", "For further information, refer to the installation notes at",
INSTALL_NOTES); INSTALL_NOTES);
panic(buf); panic(buf2);
} }
if (major < MIN_COMCTLMAJOR if (major < MIN_COMCTLMAJOR
|| (major == MIN_COMCTLMAJOR && minor < MIN_COMCTLMINOR)) { || (major == MIN_COMCTLMAJOR && minor < MIN_COMCTLMINOR)) {
char buf[TBUFSZ]; char buf2[TBUFSZ];
Sprintf(buf, "Common control library is outdated.\n%s %d.%d\n%s\n%s", Sprintf(buf2, "Common control library is outdated.\n%s %d.%d\n%s\n%s",
"NetHack requires at least version ", MIN_COMCTLMAJOR, "NetHack requires at least version ", MIN_COMCTLMAJOR,
MIN_COMCTLMINOR, MIN_COMCTLMINOR,
"For further information, refer to the installation notes at", "For further information, refer to the installation notes at",
INSTALL_NOTES); INSTALL_NOTES);
panic(buf); panic(buf2);
} }
ZeroMemory(&InitCtrls, sizeof(InitCtrls)); ZeroMemory(&InitCtrls, sizeof(InitCtrls));
InitCtrls.dwSize = sizeof(InitCtrls); InitCtrls.dwSize = sizeof(InitCtrls);

View File

@@ -134,7 +134,7 @@ GetlinDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break; break;
case WM_COMMAND: { case WM_COMMAND: {
TCHAR wbuf[BUFSZ]; TCHAR wbuf2[BUFSZ];
switch (LOWORD(wParam)) { switch (LOWORD(wParam)) {
/* OK button was pressed */ /* OK button was pressed */
@@ -142,8 +142,8 @@ GetlinDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
data = data =
(struct getlin_data *) GetWindowLongPtr(hWnd, GWLP_USERDATA); (struct getlin_data *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
SendDlgItemMessage(hWnd, IDC_GETLIN_EDIT, WM_GETTEXT, SendDlgItemMessage(hWnd, IDC_GETLIN_EDIT, WM_GETTEXT,
(WPARAM) sizeof(wbuf), (LPARAM) wbuf); (WPARAM) sizeof(wbuf2), (LPARAM) wbuf2);
NH_W2A(wbuf, data->result, data->result_size); NH_W2A(wbuf2, data->result, data->result_size);
/* Fall through. */ /* Fall through. */
@@ -870,11 +870,16 @@ plselAdjustSelections(HWND hWnd)
int int
plselFinalSelection(HWND hWnd) plselFinalSelection(HWND hWnd)
{ {
int role = flags.initrole; int role, race, gender, alignment;
int race = flags.initrace;
int gender = flags.initgend;
int alignment = flags.initalign;
nhUse(role);
nhUse(race);
nhUse(gender);
nhUse(alignment);
role = flags.initrole;
race = flags.initrace;
gender = flags.initgend;
alignment = flags.initalign;
assert(role != ROLE_RANDOM && role != ROLE_NONE); assert(role != ROLE_RANDOM && role != ROLE_NONE);
assert(race != ROLE_RANDOM && race != ROLE_NONE); assert(race != ROLE_RANDOM && race != ROLE_NONE);
assert(gender != ROLE_RANDOM && gender != ROLE_NONE); assert(gender != ROLE_RANDOM && gender != ROLE_NONE);
@@ -889,6 +894,7 @@ plselFinalSelection(HWND hWnd)
static boolean plselRandomize(plsel_data_t * data) static boolean plselRandomize(plsel_data_t * data)
{ {
int role, race, gender, alignment;
boolean fully_specified = TRUE; boolean fully_specified = TRUE;
// restore back to configuration settings // restore back to configuration settings
@@ -914,10 +920,10 @@ static boolean plselRandomize(plsel_data_t * data)
rigid_role_checks(); rigid_role_checks();
int role = flags.initrole; role = flags.initrole;
int race = flags.initrace; race = flags.initrace;
int gender = flags.initgend; gender = flags.initgend;
int alignment = flags.initalign; alignment = flags.initalign;
assert(role != ROLE_RANDOM && role != ROLE_NONE); assert(role != ROLE_RANDOM && role != ROLE_NONE);
assert(race != ROLE_RANDOM && race != ROLE_NONE); assert(race != ROLE_RANDOM && race != ROLE_NONE);

View File

@@ -72,7 +72,7 @@ mswin_input_pop(void)
if (g.program_state.done_hup) { if (g.program_state.done_hup) {
static MSNHEvent hangup_event; static MSNHEvent hangup_event;
hangup_event.type = NHEVENT_CHAR; hangup_event.type = NHEVENT_CHAR;
hangup_event.kbd.ch = '\033'; hangup_event.ei.kbd.ch = '\033';
return &hangup_event; return &hangup_event;
} }
#endif #endif
@@ -101,7 +101,7 @@ mswin_input_peek(void)
if (g.program_state.done_hup) { if (g.program_state.done_hup) {
static MSNHEvent hangup_event; static MSNHEvent hangup_event;
hangup_event.type = NHEVENT_CHAR; hangup_event.type = NHEVENT_CHAR;
hangup_event.kbd.ch = '\033'; hangup_event.ei.kbd.ch = '\033';
return &hangup_event; return &hangup_event;
} }
#endif #endif

View File

@@ -10,34 +10,37 @@
#define NHEVENT_CHAR 1 #define NHEVENT_CHAR 1
#define NHEVENT_MOUSE 2 #define NHEVENT_MOUSE 2
union event_innards {
struct {
int ch;
} kbd;
struct {
int mod;
int x, y;
} ms;
};
typedef struct mswin_event { typedef struct mswin_event {
int type; int type;
union { union event_innards ei;
struct {
int ch;
} kbd;
struct {
int mod;
int x, y;
} ms;
};
} MSNHEvent, *PMSNHEvent; } MSNHEvent, *PMSNHEvent;
#define NHEVENT_KBD(c) \ #define NHEVENT_KBD(c) \
{ \ { \
MSNHEvent e; \ MSNHEvent e; \
e.type = NHEVENT_CHAR; \ e.type = NHEVENT_CHAR; \
e.kbd.ch = (c); \ e.ei.kbd.ch = (c); \
mswin_input_push(&e); \ mswin_input_push(&e); \
} }
#define NHEVENT_MS(_mod, _x, _y) \ #define NHEVENT_MS(_mod, _x, _y) \
{ \ { \
MSNHEvent e; \ MSNHEvent e; \
e.type = NHEVENT_MOUSE; \ e.type = NHEVENT_MOUSE; \
e.ms.mod = (_mod); \ e.ei.ms.mod = (_mod); \
e.ms.x = (_x); \ e.ei.ms.x = (_x); \
e.ms.y = (_y); \ e.ei.ms.y = (_y); \
mswin_input_push(&e); \ mswin_input_push(&e); \
} }

View File

@@ -1248,7 +1248,6 @@ mswin_apply_window_style_all(void)
} }
// returns strdup() created pointer - callee assumes the ownership // returns strdup() created pointer - callee assumes the ownership
#define TEXT_BUFFER_SIZE 4096
char * char *
nh_compose_ascii_screenshot(void) nh_compose_ascii_screenshot(void)
{ {

View File

@@ -39,27 +39,29 @@ typedef struct mswin_menu_item {
BOOL has_focus; BOOL has_focus;
} NHMenuItem, *PNHMenuItem; } NHMenuItem, *PNHMenuItem;
union menu_innards {
struct menu_list {
int size; /* number of items in items[] */
int allocated; /* number of allocated slots in items[] */
PNHMenuItem items; /* menu items */
char gacc[QBUFSZ]; /* group accelerators */
BOOL counting; /* counting flag */
char prompt[QBUFSZ]; /* menu prompt */
int tab_stop_size[NUMTABS]; /* tabstops to align option values */
int menu_cx; /* menu width */
} menu;
struct menu_text {
TCHAR *text;
SIZE text_box_size;
} text;
};
typedef struct mswin_nethack_menu_window { typedef struct mswin_nethack_menu_window {
int type; /* MENU_TYPE_TEXT or MENU_TYPE_MENU */ int type; /* MENU_TYPE_TEXT or MENU_TYPE_MENU */
int how; /* for menus: PICK_NONE, PICK_ONE, PICK_ANY */ int how; /* for menus: PICK_NONE, PICK_ONE, PICK_ANY */
union { union menu_innards menui;
struct menu_list {
int size; /* number of items in items[] */
int allocated; /* number of allocated slots in items[] */
PNHMenuItem items; /* menu items */
char gacc[QBUFSZ]; /* group accelerators */
BOOL counting; /* counting flag */
char prompt[QBUFSZ]; /* menu prompt */
int tab_stop_size[NUMTABS]; /* tabstops to align option values */
int menu_cx; /* menu width */
} menu;
struct menu_text {
TCHAR *text;
SIZE text_box_size;
} text;
};
int result; int result;
int done; int done;
@@ -162,23 +164,23 @@ mswin_menu_window_select_menu(HWND hWnd, int how, MENU_ITEM_P **_selected,
if (data->type == MENU_TYPE_MENU) { if (data->type == MENU_TYPE_MENU) {
char next_char = 'a'; char next_char = 'a';
data->menu.gacc[0] = '\0'; data->menui.menu.gacc[0] = '\0';
ap = data->menu.gacc; ap = data->menui.menu.gacc;
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (data->menu.items[i].accelerator != 0) { if (data->menui.menu.items[i].accelerator != 0) {
if (isalpha(data->menu.items[i].accelerator)) { if (isalpha(data->menui.menu.items[i].accelerator)) {
next_char = (char)(data->menu.items[i].accelerator + 1); next_char = (char)(data->menui.menu.items[i].accelerator + 1);
} }
} else if (NHMENU_IS_SELECTABLE(data->menu.items[i])) { } else if (NHMENU_IS_SELECTABLE(data->menui.menu.items[i])) {
if (isalpha(next_char)) { if (isalpha(next_char)) {
data->menu.items[i].accelerator = next_char; data->menui.menu.items[i].accelerator = next_char;
} else { } else {
if (next_char > 'z') if (next_char > 'z')
next_char = 'A'; next_char = 'A';
else if (next_char > 'Z') else if (next_char > 'Z')
next_char = 'a'; next_char = 'a';
data->menu.items[i].accelerator = next_char; data->menui.menu.items[i].accelerator = next_char;
} }
next_char++; next_char++;
@@ -186,12 +188,12 @@ mswin_menu_window_select_menu(HWND hWnd, int how, MENU_ITEM_P **_selected,
} }
/* collect group accelerators */ /* collect group accelerators */
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (data->how != PICK_NONE) { if (data->how != PICK_NONE) {
if (data->menu.items[i].group_accel if (data->menui.menu.items[i].group_accel
&& !strchr(data->menu.gacc, && !strchr(data->menui.menu.gacc,
data->menu.items[i].group_accel)) { data->menui.menu.items[i].group_accel)) {
*ap++ = data->menu.items[i].group_accel; *ap++ = data->menui.menu.items[i].group_accel;
*ap = '\x0'; *ap = '\x0';
} }
} }
@@ -219,9 +221,9 @@ mswin_menu_window_select_menu(HWND hWnd, int how, MENU_ITEM_P **_selected,
} else if (how == PICK_ONE || how == PICK_ANY) { } else if (how == PICK_ONE || how == PICK_ANY) {
/* count selected items */ /* count selected items */
ret_val = 0; ret_val = 0;
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (NHMENU_IS_SELECTABLE(data->menu.items[i]) if (NHMENU_IS_SELECTABLE(data->menui.menu.items[i])
&& NHMENU_IS_SELECTED(data->menu.items[i])) { && NHMENU_IS_SELECTED(data->menui.menu.items[i])) {
ret_val++; ret_val++;
} }
} }
@@ -234,12 +236,12 @@ mswin_menu_window_select_menu(HWND hWnd, int how, MENU_ITEM_P **_selected,
panic("out of memory"); panic("out of memory");
sel_ind = 0; sel_ind = 0;
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (NHMENU_IS_SELECTABLE(data->menu.items[i]) if (NHMENU_IS_SELECTABLE(data->menui.menu.items[i])
&& NHMENU_IS_SELECTED(data->menu.items[i])) { && NHMENU_IS_SELECTED(data->menui.menu.items[i])) {
selected[sel_ind].item = selected[sel_ind].item =
data->menu.items[i].identifier; data->menui.menu.items[i].identifier;
selected[sel_ind].count = data->menu.items[i].count; selected[sel_ind].count = data->menui.menu.items[i].count;
sel_ind++; sel_ind++;
} }
} }
@@ -259,10 +261,10 @@ mswin_menu_window_select_menu(HWND hWnd, int how, MENU_ITEM_P **_selected,
*/ */
if (iflags.perm_invent && mswin_winid_from_handle(hWnd) == WIN_INVEN if (iflags.perm_invent && mswin_winid_from_handle(hWnd) == WIN_INVEN
&& how != PICK_NONE) { && how != PICK_NONE) {
data->menu.prompt[0] = '\0'; data->menui.menu.prompt[0] = '\0';
SetMenuListType(hWnd, PICK_NONE); SetMenuListType(hWnd, PICK_NONE);
for (i = 0; i < data->menu.size; i++) for (i = 0; i < data->menui.menu.size; i++)
data->menu.items[i].count = 0; data->menui.menu.items[i].count = 0;
LayoutMenu(hWnd); LayoutMenu(hWnd);
} }
} }
@@ -362,7 +364,7 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDCANCEL: case IDCANCEL:
if (data->type == MENU_TYPE_MENU if (data->type == MENU_TYPE_MENU
&& (data->how == PICK_ONE || data->how == PICK_ANY) && (data->how == PICK_ONE || data->how == PICK_ANY)
&& data->menu.counting) { && data->menui.menu.counting) {
HWND list; HWND list;
int i; int i;
@@ -397,9 +399,9 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case LVN_ITEMACTIVATE: { case LVN_ITEMACTIVATE: {
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW) lParam; LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW) lParam;
if (data->how == PICK_ONE) { if (data->how == PICK_ONE) {
if (lpnmlv->iItem >= 0 && lpnmlv->iItem < data->menu.size if (lpnmlv->iItem >= 0 && lpnmlv->iItem < data->menui.menu.size
&& NHMENU_IS_SELECTABLE( && NHMENU_IS_SELECTABLE(
data->menu.items[lpnmlv->iItem])) { data->menui.menu.items[lpnmlv->iItem])) {
SelectMenuItem(lpnmlv->hdr.hwndFrom, data, SelectMenuItem(lpnmlv->hdr.hwndFrom, data,
lpnmlv->iItem, -1); lpnmlv->iItem, -1);
data->done = 1; data->done = 1;
@@ -416,7 +418,7 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
SelectMenuItem( SelectMenuItem(
lpnmitem->hdr.hwndFrom, data, lpnmitem->iItem, lpnmitem->hdr.hwndFrom, data, lpnmitem->iItem,
NHMENU_IS_SELECTED(data->menu.items[lpnmitem->iItem]) NHMENU_IS_SELECTED(data->menui.menu.items[lpnmitem->iItem])
? 0 ? 0
: -1); : -1);
} }
@@ -430,7 +432,7 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return 0; return 0;
if (data->how == PICK_ONE || data->how == PICK_ANY) { if (data->how == PICK_ONE || data->how == PICK_ANY) {
data->menu.items[lpnmlv->iItem].has_focus = data->menui.menu.items[lpnmlv->iItem].has_focus =
!!(lpnmlv->uNewState & LVIS_FOCUSED); !!(lpnmlv->uNewState & LVIS_FOCUSED);
ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem, ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem,
lpnmlv->iItem); lpnmlv->iItem);
@@ -447,7 +449,7 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
/* check item focus */ /* check item focus */
if (data->how == PICK_ONE || data->how == PICK_ANY) { if (data->how == PICK_ONE || data->how == PICK_ANY) {
data->menu.items[lpnmlv->iItem].has_focus = data->menui.menu.items[lpnmlv->iItem].has_focus =
!!(lpnmlv->uNewState & LVIS_FOCUSED); !!(lpnmlv->uNewState & LVIS_FOCUSED);
ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem, ListView_RedrawItems(lpnmlv->hdr.hwndFrom, lpnmlv->iItem,
lpnmlv->iItem); lpnmlv->iItem);
@@ -512,8 +514,8 @@ MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
DeleteObject(data->bmpCheckedCount); DeleteObject(data->bmpCheckedCount);
DeleteObject(data->bmpNotChecked); DeleteObject(data->bmpNotChecked);
if (data->type == MENU_TYPE_TEXT) { if (data->type == MENU_TYPE_TEXT) {
if (data->text.text) if (data->menui.text.text)
free(data->text.text); free(data->menui.text.text);
} }
free(data); free(data);
SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR) 0); SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR) 0);
@@ -542,27 +544,27 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (data->type != MENU_TYPE_TEXT) if (data->type != MENU_TYPE_TEXT)
SetMenuType(hWnd, MENU_TYPE_TEXT); SetMenuType(hWnd, MENU_TYPE_TEXT);
if (!data->text.text) { if (!data->menui.text.text) {
text_size = strlen(msg_data->text) + 4; text_size = strlen(msg_data->text) + 4;
data->text.text = data->menui.text.text =
(TCHAR *) malloc(text_size * sizeof(data->text.text[0])); (TCHAR *) malloc(text_size * sizeof(data->menui.text.text[0]));
ZeroMemory(data->text.text, ZeroMemory(data->menui.text.text,
text_size * sizeof(data->text.text[0])); text_size * sizeof(data->menui.text.text[0]));
} else { } else {
text_size = _tcslen(data->text.text) + strlen(msg_data->text) + 4; text_size = _tcslen(data->menui.text.text) + strlen(msg_data->text) + 4;
data->text.text = (TCHAR *) realloc( data->menui.text.text = (TCHAR *) realloc(
data->text.text, text_size * sizeof(data->text.text[0])); data->menui.text.text, text_size * sizeof(data->menui.text.text[0]));
} }
if (!data->text.text) if (!data->menui.text.text)
break; break;
_tcscat(data->text.text, NH_A2W(msg_data->text, wbuf, BUFSZ)); _tcscat(data->menui.text.text, NH_A2W(msg_data->text, wbuf, BUFSZ));
_tcscat(data->text.text, TEXT("\r\n")); _tcscat(data->menui.text.text, TEXT("\r\n"));
text_view = GetDlgItem(hWnd, IDC_MENU_TEXT); text_view = GetDlgItem(hWnd, IDC_MENU_TEXT);
if (!text_view) if (!text_view)
panic("cannot get text view window"); panic("cannot get text view window");
SetWindowText(text_view, data->text.text); SetWindowText(text_view, data->menui.text.text);
/* calculate dimensions of the added line of text */ /* calculate dimensions of the added line of text */
hdc = GetDC(text_view); hdc = GetDC(text_view);
@@ -572,9 +574,9 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
DrawTextA(hdc, msg_data->text, strlen(msg_data->text), &text_rt, DrawTextA(hdc, msg_data->text, strlen(msg_data->text), &text_rt,
DT_CALCRECT | DT_TOP | DT_LEFT | DT_NOPREFIX DT_CALCRECT | DT_TOP | DT_LEFT | DT_NOPREFIX
| DT_SINGLELINE); | DT_SINGLELINE);
data->text.text_box_size.cx = data->menui.text.text_box_size.cx =
max(text_rt.right - text_rt.left, data->text.text_box_size.cx); max(text_rt.right - text_rt.left, data->menui.text.text_box_size.cx);
data->text.text_box_size.cy += text_rt.bottom - text_rt.top; data->menui.text.text_box_size.cy += text_rt.bottom - text_rt.top;
SelectObject(hdc, saveFont); SelectObject(hdc, saveFont);
ReleaseDC(text_view, hdc); ReleaseDC(text_view, hdc);
} break; } break;
@@ -584,16 +586,16 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (data->type != MENU_TYPE_MENU) if (data->type != MENU_TYPE_MENU)
SetMenuType(hWnd, MENU_TYPE_MENU); SetMenuType(hWnd, MENU_TYPE_MENU);
if (data->menu.items) if (data->menui.menu.items)
free(data->menu.items); free(data->menui.menu.items);
data->how = PICK_NONE; data->how = PICK_NONE;
data->menu.items = NULL; data->menui.menu.items = NULL;
data->menu.size = 0; data->menui.menu.size = 0;
data->menu.allocated = 0; data->menui.menu.allocated = 0;
data->done = 0; data->done = 0;
data->result = 0; data->result = 0;
for (i = 0; i < NUMTABS; ++i) for (i = 0; i < NUMTABS; ++i)
data->menu.tab_stop_size[i] = MIN_TABSTOP_SIZE; data->menui.menu.tab_stop_size[i] = MIN_TABSTOP_SIZE;
} break; } break;
case MSNH_MSG_ADDMENU: { case MSNH_MSG_ADDMENU: {
@@ -609,34 +611,34 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (data->type != MENU_TYPE_MENU) if (data->type != MENU_TYPE_MENU)
break; break;
if (data->menu.size == data->menu.allocated) { if (data->menui.menu.size == data->menui.menu.allocated) {
data->menu.allocated += 10; data->menui.menu.allocated += 10;
data->menu.items = (PNHMenuItem) realloc( data->menui.menu.items = (PNHMenuItem) realloc(
data->menu.items, data->menu.allocated * sizeof(NHMenuItem)); data->menui.menu.items, data->menui.menu.allocated * sizeof(NHMenuItem));
} }
new_item = data->menu.size; new_item = data->menui.menu.size;
ZeroMemory(&data->menu.items[new_item], ZeroMemory(&data->menui.menu.items[new_item],
sizeof(data->menu.items[new_item])); sizeof(data->menui.menu.items[new_item]));
data->menu.items[new_item].glyphinfo = msg_data->glyphinfo; data->menui.menu.items[new_item].glyphinfo = msg_data->glyphinfo;
data->menu.items[new_item].identifier = *msg_data->identifier; data->menui.menu.items[new_item].identifier = *msg_data->identifier;
data->menu.items[new_item].accelerator = msg_data->accelerator; data->menui.menu.items[new_item].accelerator = msg_data->accelerator;
data->menu.items[new_item].group_accel = msg_data->group_accel; data->menui.menu.items[new_item].group_accel = msg_data->group_accel;
data->menu.items[new_item].attr = msg_data->attr; data->menui.menu.items[new_item].attr = msg_data->attr;
strncpy(data->menu.items[new_item].str, msg_data->str, strncpy(data->menui.menu.items[new_item].str, msg_data->str,
NHMENU_STR_SIZE); NHMENU_STR_SIZE);
/* prevent & being interpreted as a mnemonic start */ /* prevent & being interpreted as a mnemonic start */
strNsubst(data->menu.items[new_item].str, "&", "&&", 0); strNsubst(data->menui.menu.items[new_item].str, "&", "&&", 0);
data->menu.items[new_item].presel = msg_data->presel; data->menui.menu.items[new_item].presel = msg_data->presel;
data->menu.items[new_item].itemflags = msg_data->itemflags; data->menui.menu.items[new_item].itemflags = msg_data->itemflags;
/* calculate tabstop size */ /* calculate tabstop size */
hDC = GetDC(hWnd); hDC = GetDC(hWnd);
cached_font * font = mswin_get_font(NHW_MENU, msg_data->attr, hDC, FALSE); cached_font * font = mswin_get_font(NHW_MENU, msg_data->attr, hDC, FALSE);
saveFont = SelectObject(hDC, font->hFont); saveFont = SelectObject(hDC, font->hFont);
GetTextMetrics(hDC, &tm); GetTextMetrics(hDC, &tm);
p1 = data->menu.items[new_item].str; p1 = data->menui.menu.items[new_item].str;
p = strchr(data->menu.items[new_item].str, '\t'); p = strchr(data->menui.menu.items[new_item].str, '\t');
column = 0; column = 0;
for (;;) { for (;;) {
TCHAR wbuf[BUFSZ]; TCHAR wbuf[BUFSZ];
@@ -647,11 +649,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
DrawText(hDC, NH_A2W(p1, wbuf, BUFSZ), strlen(p1), &drawRect, DrawText(hDC, NH_A2W(p1, wbuf, BUFSZ), strlen(p1), &drawRect,
DT_CALCRECT | DT_LEFT | DT_VCENTER | DT_EXPANDTABS DT_CALCRECT | DT_LEFT | DT_VCENTER | DT_EXPANDTABS
| DT_SINGLELINE); | DT_SINGLELINE);
data->menu.tab_stop_size[column] = data->menui.menu.tab_stop_size[column] =
max(data->menu.tab_stop_size[column], max(data->menui.menu.tab_stop_size[column],
drawRect.right - drawRect.left); drawRect.right - drawRect.left);
menuitemwidth += data->menu.tab_stop_size[column]; menuitemwidth += data->menui.menu.tab_stop_size[column];
if (p != NULL) if (p != NULL)
*p = '\t'; *p = '\t';
@@ -671,22 +673,22 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
ReleaseDC(hWnd, hDC); ReleaseDC(hWnd, hDC);
/* calculate new menu width */ /* calculate new menu width */
data->menu.menu_cx = data->menui.menu.menu_cx =
max(data->menu.menu_cx, max(data->menui.menu.menu_cx,
2 * TILE_X + menuitemwidth 2 * TILE_X + menuitemwidth
+ (tm.tmAveCharWidth + tm.tmOverhang) * 12); + (tm.tmAveCharWidth + tm.tmOverhang) * 12);
/* increment size */ /* increment size */
data->menu.size++; data->menui.menu.size++;
} break; } break;
case MSNH_MSG_ENDMENU: { case MSNH_MSG_ENDMENU: {
PMSNHMsgEndMenu msg_data = (PMSNHMsgEndMenu) lParam; PMSNHMsgEndMenu msg_data = (PMSNHMsgEndMenu) lParam;
if (msg_data->text) { if (msg_data->text) {
strncpy(data->menu.prompt, msg_data->text, strncpy(data->menui.menu.prompt, msg_data->text,
sizeof(data->menu.prompt) - 1); sizeof(data->menui.menu.prompt) - 1);
} else { } else {
ZeroMemory(data->menu.prompt, sizeof(data->menu.prompt)); ZeroMemory(data->menui.menu.prompt, sizeof(data->menui.menu.prompt));
} }
} break; } break;
@@ -768,7 +770,7 @@ LayoutMenu(HWND hWnd)
ListView_SetColumnWidth( ListView_SetColumnWidth(
GetMenuControl(hWnd), 0, GetMenuControl(hWnd), 0,
max(clrt.right - clrt.left - GetSystemMetrics(SM_CXVSCROLL), max(clrt.right - clrt.left - GetSystemMetrics(SM_CXVSCROLL),
data->menu.menu_cx)); data->menui.menu.menu_cx));
} }
MoveWindow(GetMenuControl(hWnd), pt_elem.x, pt_elem.y, sz_elem.cx, MoveWindow(GetMenuControl(hWnd), pt_elem.x, pt_elem.y, sz_elem.cx,
@@ -845,7 +847,7 @@ SetMenuListType(HWND hWnd, int how)
panic("how should be one of PICK_NONE, PICK_ONE or PICK_ANY"); panic("how should be one of PICK_NONE, PICK_ONE or PICK_ANY");
}; };
if (strlen(data->menu.prompt) == 0) { if (strlen(data->menui.menu.prompt) == 0) {
dwStyles |= LVS_NOCOLUMNHEADER; dwStyles |= LVS_NOCOLUMNHEADER;
} }
@@ -882,22 +884,22 @@ SetMenuListType(HWND hWnd, int how)
ZeroMemory(&lvcol, sizeof(lvcol)); ZeroMemory(&lvcol, sizeof(lvcol));
lvcol.mask = LVCF_WIDTH | LVCF_TEXT; lvcol.mask = LVCF_WIDTH | LVCF_TEXT;
lvcol.cx = monitorInfo.width; lvcol.cx = monitorInfo.width;
lvcol.pszText = NH_A2W(data->menu.prompt, wbuf, BUFSZ); lvcol.pszText = NH_A2W(data->menui.menu.prompt, wbuf, BUFSZ);
ListView_InsertColumn(control, 0, &lvcol); ListView_InsertColumn(control, 0, &lvcol);
/* add items to the list view */ /* add items to the list view */
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
LVITEM lvitem; LVITEM lvitem;
ZeroMemory(&lvitem, sizeof(lvitem)); ZeroMemory(&lvitem, sizeof(lvitem));
sprintf(buf, "%c - %s", max(data->menu.items[i].accelerator, ' '), sprintf(buf, "%c - %s", max(data->menui.menu.items[i].accelerator, ' '),
data->menu.items[i].str); data->menui.menu.items[i].str);
lvitem.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT; lvitem.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT;
lvitem.iItem = i; lvitem.iItem = i;
lvitem.iSubItem = 0; lvitem.iSubItem = 0;
lvitem.state = data->menu.items[i].presel ? LVIS_SELECTED : 0; lvitem.state = data->menui.menu.items[i].presel ? LVIS_SELECTED : 0;
lvitem.pszText = NH_A2W(buf, wbuf, BUFSZ); lvitem.pszText = NH_A2W(buf, wbuf, BUFSZ);
lvitem.lParam = (LPARAM) &data->menu.items[i]; lvitem.lParam = (LPARAM) &data->menui.menu.items[i];
nItem = (int) SendMessage(control, LB_ADDSTRING, (WPARAM) 0, nItem = (int) SendMessage(control, LB_ADDSTRING, (WPARAM) 0,
(LPARAM) buf); (LPARAM) buf);
if (ListView_InsertItem(control, &lvitem) == -1) { if (ListView_InsertItem(control, &lvitem) == -1) {
@@ -951,8 +953,8 @@ onMeasureItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
/* Set the height of the list box items to max height of the individual /* Set the height of the list box items to max height of the individual
* items */ * items */
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (NHMENU_HAS_GLYPH(data->menu.items[i]) if (NHMENU_HAS_GLYPH(data->menui.menu.items[i])
&& !IS_MAP_ASCII(iflags.wc_map_mode)) { && !IS_MAP_ASCII(iflags.wc_map_mode)) {
lpmis->itemHeight = lpmis->itemHeight =
max(lpmis->itemHeight, max(lpmis->itemHeight,
@@ -1006,7 +1008,7 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
data = (PNHMenuWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA); data = (PNHMenuWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA);
item = &data->menu.items[lpdis->itemID]; item = &data->menui.menu.items[lpdis->itemID];
tileDC = CreateCompatibleDC(lpdis->hDC); tileDC = CreateCompatibleDC(lpdis->hDC);
cached_font * font = mswin_get_font(NHW_MENU, item->attr, lpdis->hDC, FALSE); cached_font * font = mswin_get_font(NHW_MENU, item->attr, lpdis->hDC, FALSE);
@@ -1046,7 +1048,7 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tileYScaled) / 2; y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tileYScaled) / 2;
bmpSaved = SelectBitmap(data->bmpDC, bmpCheck); bmpSaved = SelectBitmap(data->bmpDC, bmpCheck);
StretchBlt(lpdis->hDC, x, y, tileXScaled, tileYScaled, StretchBlt(lpdis->hDC, x, y, tileXScaled, tileYScaled,
data->bmpDC, 0, 0, CHECK_WIDTH, CHECK_HEIGHT, SRCCOPY); data->bmpDC, 0, 0, CHECK_WIDTH, CHECK_HEIGHT, SRCCOPY);
SelectObject(data->bmpDC, bmpSaved); SelectObject(data->bmpDC, bmpSaved);
} }
@@ -1079,7 +1081,10 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (NHMENU_HAS_GLYPH(*item)) { if (NHMENU_HAS_GLYPH(*item)) {
if (!IS_MAP_ASCII(iflags.wc_map_mode)) { if (!IS_MAP_ASCII(iflags.wc_map_mode)) {
HGDIOBJ saveBmp; HGDIOBJ saveBmp;
double monitorScale = win10_monitor_scale(hWnd); double monitorScale2;
nhUse(monitorScale2);
monitorScale2 = win10_monitor_scale(hWnd);
saveBmp = SelectObject(tileDC, GetNHApp()->bmpMapTiles); saveBmp = SelectObject(tileDC, GetNHApp()->bmpMapTiles);
ntile = glyph2tile[item->glyphinfo.glyph]; ntile = glyph2tile[item->glyphinfo.glyph];
@@ -1092,13 +1097,13 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (GetNHApp()->bmpMapTiles == GetNHApp()->bmpTiles) { if (GetNHApp()->bmpMapTiles == GetNHApp()->bmpTiles) {
/* using original nethack tiles - apply image transparently */ /* using original nethack tiles - apply image transparently */
(*GetNHApp()->lpfnTransparentBlt)(lpdis->hDC, x, y, (*GetNHApp()->lpfnTransparentBlt)(lpdis->hDC, x, y,
tileXScaled, tileYScaled, tileXScaled, tileYScaled,
tileDC, t_x, t_y, TILE_X, TILE_Y, tileDC, t_x, t_y, TILE_X, TILE_Y,
TILE_BK_COLOR); TILE_BK_COLOR);
} else { } else {
/* using custom tiles - simple blt */ /* using custom tiles - simple blt */
StretchBlt(lpdis->hDC, x, y, tileXScaled, tileYScaled, StretchBlt(lpdis->hDC, x, y, tileXScaled, tileYScaled,
tileDC, t_x, t_y, GetNHApp()->mapTile_X, GetNHApp()->mapTile_Y, SRCCOPY); tileDC, t_x, t_y, GetNHApp()->mapTile_X, GetNHApp()->mapTile_Y, SRCCOPY);
} }
SelectObject(tileDC, saveBmp); SelectObject(tileDC, saveBmp);
@@ -1136,13 +1141,13 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
p = strchr(item->str, '\t'); p = strchr(item->str, '\t');
column = 0; column = 0;
SetRect(&drawRect, x, lpdis->rcItem.top, SetRect(&drawRect, x, lpdis->rcItem.top,
min(x + data->menu.tab_stop_size[0], lpdis->rcItem.right), min(x + data->menui.menu.tab_stop_size[0], lpdis->rcItem.right),
lpdis->rcItem.bottom); lpdis->rcItem.bottom);
for (;;) { for (;;) {
TCHAR wbuf[BUFSZ]; TCHAR wbuf2[BUFSZ];
if (p != NULL) if (p != NULL)
*p = '\0'; /* for time being, view tab field as zstring */ *p = '\0'; /* for time being, view tab field as zstring */
DrawText(lpdis->hDC, NH_A2W(p1, wbuf, BUFSZ), strlen(p1), &drawRect, DrawText(lpdis->hDC, NH_A2W(p1, wbuf2, BUFSZ), strlen(p1), &drawRect,
DT_LEFT | DT_VCENTER | DT_SINGLELINE); DT_LEFT | DT_VCENTER | DT_SINGLELINE);
if (p != NULL) if (p != NULL)
*p = '\t'; *p = '\t';
@@ -1153,25 +1158,25 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
p = strchr(p1, '\t'); p = strchr(p1, '\t');
drawRect.left = drawRect.right + TAB_SEPARATION; drawRect.left = drawRect.right + TAB_SEPARATION;
++column; ++column;
drawRect.right = min(drawRect.left + data->menu.tab_stop_size[column], drawRect.right = min(drawRect.left + data->menui.menu.tab_stop_size[column],
lpdis->rcItem.right); lpdis->rcItem.right);
} }
/* draw focused item */ /* draw focused item */
if (item->has_focus || (NHMENU_IS_SELECTABLE(*item) if (item->has_focus || (NHMENU_IS_SELECTABLE(*item)
&& data->menu.items[lpdis->itemID].count != -1)) { && data->menui.menu.items[lpdis->itemID].count != -1)) {
RECT client_rt; RECT client_rt;
GetClientRect(lpdis->hwndItem, &client_rt); GetClientRect(lpdis->hwndItem, &client_rt);
client_rt.right = min(client_rt.right, lpdis->rcItem.right); client_rt.right = min(client_rt.right, lpdis->rcItem.right);
if (NHMENU_IS_SELECTABLE(*item) if (NHMENU_IS_SELECTABLE(*item)
&& data->menu.items[lpdis->itemID].count != 0 && data->menui.menu.items[lpdis->itemID].count != 0
&& item->glyphinfo.glyph != NO_GLYPH) { && item->glyphinfo.glyph != NO_GLYPH) {
if (data->menu.items[lpdis->itemID].count == -1) { if (data->menui.menu.items[lpdis->itemID].count == -1) {
_stprintf(wbuf, TEXT("Count: All")); _stprintf(wbuf, TEXT("Count: All"));
} else { } else {
_stprintf(wbuf, TEXT("Count: %d"), _stprintf(wbuf, TEXT("Count: %d"),
data->menu.items[lpdis->itemID].count); data->menui.menu.items[lpdis->itemID].count);
} }
/* TOOD: add blinking for blink text */ /* TOOD: add blinking for blink text */
@@ -1231,8 +1236,8 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
data = (PNHMenuWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA); data = (PNHMenuWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA);
is_accelerator = FALSE; is_accelerator = FALSE;
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (data->menu.items[i].accelerator == ch) { if (data->menui.menu.items[i].accelerator == ch) {
is_accelerator = TRUE; is_accelerator = TRUE;
break; break;
} }
@@ -1253,7 +1258,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
return -2; return -2;
case MENU_LAST_PAGE: case MENU_LAST_PAGE:
i = max(0, data->menu.size - 1); i = max(0, data->menui.menu.size - 1);
ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED); ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED);
ListView_EnsureVisible(hwndList, i, FALSE); ListView_EnsureVisible(hwndList, i, FALSE);
return -2; return -2;
@@ -1263,10 +1268,10 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
pageSize = ListView_GetCountPerPage(hwndList); pageSize = ListView_GetCountPerPage(hwndList);
curIndex = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED); curIndex = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED);
/* Focus down one page */ /* Focus down one page */
i = min(curIndex + pageSize, data->menu.size - 1); i = min(curIndex + pageSize, data->menui.menu.size - 1);
ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED); ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED);
/* Scrollpos down one page */ /* Scrollpos down one page */
i = min(topIndex + (2 * pageSize - 1), data->menu.size - 1); i = min(topIndex + (2 * pageSize - 1), data->menui.menu.size - 1);
ListView_EnsureVisible(hwndList, i, FALSE); ListView_EnsureVisible(hwndList, i, FALSE);
return -2; return -2;
@@ -1285,7 +1290,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
case MENU_SELECT_ALL: case MENU_SELECT_ALL:
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
reset_menu_count(hwndList, data); reset_menu_count(hwndList, data);
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
SelectMenuItem(hwndList, data, i, -1); SelectMenuItem(hwndList, data, i, -1);
} }
return -2; return -2;
@@ -1295,7 +1300,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
case MENU_UNSELECT_ALL: case MENU_UNSELECT_ALL:
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
reset_menu_count(hwndList, data); reset_menu_count(hwndList, data);
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
SelectMenuItem(hwndList, data, i, 0); SelectMenuItem(hwndList, data, i, 0);
} }
return -2; return -2;
@@ -1305,11 +1310,11 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
case MENU_INVERT_ALL: case MENU_INVERT_ALL:
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
reset_menu_count(hwndList, data); reset_menu_count(hwndList, data);
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (menuitem_invert_test(0, data->menu.items[i].itemflags, if (menuitem_invert_test(0, data->menui.menu.items[i].itemflags,
NHMENU_IS_SELECTED(data->menu.items[i]))) NHMENU_IS_SELECTED(data->menui.menu.items[i])))
SelectMenuItem(hwndList, data, i, SelectMenuItem(hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0
: -1); : -1);
} }
return -2; return -2;
@@ -1323,7 +1328,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
topIndex = ListView_GetTopIndex(hwndList); topIndex = ListView_GetTopIndex(hwndList);
pageSize = ListView_GetCountPerPage(hwndList); pageSize = ListView_GetCountPerPage(hwndList);
from = max(0, topIndex); from = max(0, topIndex);
to = min(data->menu.size, from + pageSize); to = min(data->menui.menu.size, from + pageSize);
for (i = from; i < to; i++) { for (i = from; i < to; i++) {
SelectMenuItem(hwndList, data, i, -1); SelectMenuItem(hwndList, data, i, -1);
} }
@@ -1338,7 +1343,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
topIndex = ListView_GetTopIndex(hwndList); topIndex = ListView_GetTopIndex(hwndList);
pageSize = ListView_GetCountPerPage(hwndList); pageSize = ListView_GetCountPerPage(hwndList);
from = max(0, topIndex); from = max(0, topIndex);
to = min(data->menu.size, from + pageSize); to = min(data->menui.menu.size, from + pageSize);
for (i = from; i < to; i++) { for (i = from; i < to; i++) {
SelectMenuItem(hwndList, data, i, 0); SelectMenuItem(hwndList, data, i, 0);
} }
@@ -1353,12 +1358,12 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
topIndex = ListView_GetTopIndex(hwndList); topIndex = ListView_GetTopIndex(hwndList);
pageSize = ListView_GetCountPerPage(hwndList); pageSize = ListView_GetCountPerPage(hwndList);
from = max(0, topIndex); from = max(0, topIndex);
to = min(data->menu.size, from + pageSize); to = min(data->menui.menu.size, from + pageSize);
for (i = from; i < to; i++) { for (i = from; i < to; i++) {
if (menuitem_invert_test(0, data->menu.items[i].itemflags, if (menuitem_invert_test(0, data->menui.menu.items[i].itemflags,
NHMENU_IS_SELECTED(data->menu.items[i]))) NHMENU_IS_SELECTED(data->menui.menu.items[i])))
SelectMenuItem(hwndList, data, i, SelectMenuItem(hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0
: -1); : -1);
} }
return -2; return -2;
@@ -1377,13 +1382,13 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
SetFocus(hwndList); // set focus back to the list control SetFocus(hwndList); // set focus back to the list control
if (!*buf || *buf == '\033') if (!*buf || *buf == '\033')
return -2; return -2;
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (NHMENU_IS_SELECTABLE(data->menu.items[i]) if (NHMENU_IS_SELECTABLE(data->menui.menu.items[i])
&& strstr(data->menu.items[i].str, buf)) { && strstr(data->menui.menu.items[i].str, buf)) {
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
SelectMenuItem( SelectMenuItem(
hwndList, data, i, hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 : -1); NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0 : -1);
} else if (data->how == PICK_ONE) { } else if (data->how == PICK_ONE) {
SelectMenuItem(hwndList, data, i, -1); SelectMenuItem(hwndList, data, i, -1);
ListView_SetItemState(hwndList, i, LVIS_FOCUSED, ListView_SetItemState(hwndList, i, LVIS_FOCUSED,
@@ -1418,10 +1423,10 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
pageSize = ListView_GetCountPerPage(hwndList); pageSize = ListView_GetCountPerPage(hwndList);
curIndex = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED); curIndex = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED);
/* Focus down one page */ /* Focus down one page */
i = min(curIndex + pageSize, data->menu.size - 1); i = min(curIndex + pageSize, data->menui.menu.size - 1);
ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED); ListView_SetItemState(hwndList, i, LVIS_FOCUSED, LVIS_FOCUSED);
/* Scrollpos down one page */ /* Scrollpos down one page */
i = min(topIndex + (2 * pageSize - 1), data->menu.size - 1); i = min(topIndex + (2 * pageSize - 1), data->menui.menu.size - 1);
ListView_EnsureVisible(hwndList, i, FALSE); ListView_EnsureVisible(hwndList, i, FALSE);
return -2; return -2;
@@ -1437,7 +1442,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
if (i >= 0) { if (i >= 0) {
SelectMenuItem( SelectMenuItem(
hwndList, data, i, hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 : -1); NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0 : -1);
} }
} }
} }
@@ -1445,18 +1450,18 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
accelerator: accelerator:
default: default:
if (strchr(data->menu.gacc, ch) if (strchr(data->menui.menu.gacc, ch)
&& !(ch == '0' && data->menu.counting)) { && !(ch == '0' && data->menui.menu.counting)) {
/* matched a group accelerator */ /* matched a group accelerator */
if (data->how == PICK_ANY || data->how == PICK_ONE) { if (data->how == PICK_ANY || data->how == PICK_ONE) {
reset_menu_count(hwndList, data); reset_menu_count(hwndList, data);
for (i = 0; i < data->menu.size; i++) { for (i = 0; i < data->menui.menu.size; i++) {
if (NHMENU_IS_SELECTABLE(data->menu.items[i]) if (NHMENU_IS_SELECTABLE(data->menui.menu.items[i])
&& data->menu.items[i].group_accel == ch) { && data->menui.menu.items[i].group_accel == ch) {
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
SelectMenuItem( SelectMenuItem(
hwndList, data, i, hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0
: -1); : -1);
} else if (data->how == PICK_ONE) { } else if (data->how == PICK_ONE) {
SelectMenuItem(hwndList, data, i, -1); SelectMenuItem(hwndList, data, i, -1);
@@ -1477,14 +1482,14 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
int count; int count;
i = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED); i = ListView_GetNextItem(hwndList, -1, LVNI_FOCUSED);
if (i >= 0) { if (i >= 0) {
count = data->menu.items[i].count; count = data->menui.menu.items[i].count;
if (count == -1) if (count == -1)
count = 0; count = 0;
count *= 10L; count *= 10L;
count += (int) (ch - '0'); count += (int) (ch - '0');
if (count != 0) /* ignore leading zeros */ { if (count != 0) /* ignore leading zeros */ {
data->menu.counting = TRUE; data->menui.menu.counting = TRUE;
data->menu.items[i].count = min(100000, count); data->menui.menu.items[i].count = min(100000, count);
ListView_RedrawItems(hwndList, i, ListView_RedrawItems(hwndList, i,
i); /* update count mark */ i); /* update count mark */
} }
@@ -1496,15 +1501,15 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
|| is_accelerator) { || is_accelerator) {
if (data->how == PICK_ANY || data->how == PICK_ONE) { if (data->how == PICK_ANY || data->how == PICK_ONE) {
topIndex = ListView_GetTopIndex(hwndList); topIndex = ListView_GetTopIndex(hwndList);
if( topIndex < 0 || topIndex > data->menu.size ) break; // impossible? if( topIndex < 0 || topIndex > data->menui.menu.size ) break; // impossible?
int iter = topIndex; int iter = topIndex;
do { do {
i = iter % data->menu.size; i = iter % data->menui.menu.size;
if (data->menu.items[i].accelerator == ch) { if (data->menui.menu.items[i].accelerator == ch) {
if (data->how == PICK_ANY) { if (data->how == PICK_ANY) {
SelectMenuItem( SelectMenuItem(
hwndList, data, i, hwndList, data, i,
NHMENU_IS_SELECTED(data->menu.items[i]) ? 0 NHMENU_IS_SELECTED(data->menui.menu.items[i]) ? 0
: -1); : -1);
ListView_SetItemState(hwndList, i, LVIS_FOCUSED, ListView_SetItemState(hwndList, i, LVIS_FOCUSED,
LVIS_FOCUSED); LVIS_FOCUSED);
@@ -1517,7 +1522,7 @@ onListChar(HWND hWnd, HWND hwndList, WORD ch)
return -2; return -2;
} }
} }
} while( (++iter % data->menu.size) != topIndex ); } while( (++iter % data->menui.menu.size) != topIndex );
} }
} }
break; break;
@@ -1549,10 +1554,10 @@ mswin_menu_window_size(HWND hWnd, LPSIZE sz)
extra_cx = (wrt.right - wrt.left) - sz->cx; extra_cx = (wrt.right - wrt.left) - sz->cx;
if (data->type == MENU_TYPE_MENU) { if (data->type == MENU_TYPE_MENU) {
sz->cx = data->menu.menu_cx + GetSystemMetrics(SM_CXVSCROLL); sz->cx = data->menui.menu.menu_cx + GetSystemMetrics(SM_CXVSCROLL);
} else { } else {
/* Use the width of the text box */ /* Use the width of the text box */
sz->cx = data->text.text_box_size.cx sz->cx = data->menui.text.text_box_size.cx
+ 2 * GetSystemMetrics(SM_CXVSCROLL); + 2 * GetSystemMetrics(SM_CXVSCROLL);
} }
sz->cx += extra_cx; sz->cx += extra_cx;
@@ -1569,18 +1574,18 @@ SelectMenuItem(HWND hwndList, PNHMenuWindow data, int item, int count)
{ {
int i; int i;
if (item < 0 || item >= data->menu.size) if (item < 0 || item >= data->menui.menu.size)
return; return;
if (data->how == PICK_ONE && count != 0) { if (data->how == PICK_ONE && count != 0) {
for (i = 0; i < data->menu.size; i++) for (i = 0; i < data->menui.menu.size; i++)
if (item != i && data->menu.items[i].count != 0) { if (item != i && data->menui.menu.items[i].count != 0) {
data->menu.items[i].count = 0; data->menui.menu.items[i].count = 0;
ListView_RedrawItems(hwndList, i, i); ListView_RedrawItems(hwndList, i, i);
}; };
} }
data->menu.items[item].count = count; data->menui.menu.items[item].count = count;
ListView_RedrawItems(hwndList, item, item); ListView_RedrawItems(hwndList, item, item);
reset_menu_count(hwndList, data); reset_menu_count(hwndList, data);
} }
@@ -1589,7 +1594,7 @@ void
reset_menu_count(HWND hwndList, PNHMenuWindow data) reset_menu_count(HWND hwndList, PNHMenuWindow data)
{ {
int i; int i;
data->menu.counting = FALSE; data->menui.menu.counting = FALSE;
if (IsWindow(hwndList)) { if (IsWindow(hwndList)) {
i = ListView_GetNextItem((hwndList), -1, LVNI_FOCUSED); i = ListView_GetNextItem((hwndList), -1, LVNI_FOCUSED);
if (i >= 0) if (i >= 0)

View File

@@ -67,7 +67,7 @@ typedef struct mswin_nhmsg_end_menu {
typedef struct mswin_nhmsg_get_text { typedef struct mswin_nhmsg_get_text {
size_t max_size; size_t max_size;
char buffer[]; char buffer[TEXT_BUFFER_SIZE];
} MSNHMsgGetText, *PMSNHMsgGetText; } MSNHMsgGetText, *PMSNHMsgGetText;
typedef struct mswin_nhmsg_update_status { typedef struct mswin_nhmsg_update_status {

View File

@@ -664,7 +664,7 @@ onPaint(HWND hWnd)
/* Find out the cursor (caret) position */ /* Find out the cursor (caret) position */
if (i == MSG_LINES - 1) { if (i == MSG_LINES - 1) {
int nnum, numfit; int nnum, numfit;
SIZE size; SIZE size = {0};
TCHAR *nbuf; TCHAR *nbuf;
int nlen; int nlen;

View File

@@ -155,8 +155,8 @@ mswin_display_splash_window(BOOL show_ver)
/* Show complete version information */ /* Show complete version information */
dlb *f; dlb *f;
char verbuf[BUFSZ]; char verbuf[BUFSZ];
int verstrsize = 0; /* int verstrsize = 0; */
getversionstring(verbuf); getversionstring(verbuf);
strbuf_append(&strbuf, verbuf); strbuf_append(&strbuf, verbuf);
strbuf_append(&strbuf, "\n\n"); strbuf_append(&strbuf, "\n\n");

View File

@@ -350,7 +350,7 @@ onWMPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
BOOL useUnicode = fnt->supportsUnicode; BOOL useUnicode = fnt->supportsUnicode;
winos_ascii_to_wide_str(str, wbuf, SIZE(wbuf)); winos_ascii_to_wide_str((const unsigned char *) str, wbuf, SIZE(wbuf));
nFg = (clr == NO_COLOR ? status_fg_color nFg = (clr == NO_COLOR ? status_fg_color
: ((clr >= 0 && clr < CLR_MAX) ? nhcolor_to_RGB(clr) : ((clr >= 0 && clr < CLR_MAX) ? nhcolor_to_RGB(clr)

View File

@@ -1418,7 +1418,7 @@ mswin_nhgetch(void)
while ((event = mswin_input_pop()) == NULL || event->type != NHEVENT_CHAR) while ((event = mswin_input_pop()) == NULL || event->type != NHEVENT_CHAR)
mswin_main_loop(); mswin_main_loop();
key = event->kbd.ch; key = event->ei.kbd.ch;
return (key); return (key);
} }
@@ -1450,13 +1450,13 @@ mswin_nh_poskey(int *x, int *y, int *mod)
if (event->type == NHEVENT_MOUSE) { if (event->type == NHEVENT_MOUSE) {
if (iflags.wc_mouse_support) { if (iflags.wc_mouse_support) {
*mod = event->ms.mod; *mod = event->ei.ms.mod;
*x = event->ms.x; *x = event->ei.ms.x;
*y = event->ms.y; *y = event->ei.ms.y;
} }
key = 0; key = 0;
} else { } else {
key = event->kbd.ch; key = event->ei.kbd.ch;
} }
return (key); return (key);
} }
@@ -2062,7 +2062,6 @@ mswin_preference_update(const char *pref)
} }
} }
#define TEXT_BUFFER_SIZE 4096
char * char *
mswin_getmsghistory(boolean init) mswin_getmsghistory(boolean init)
{ {

View File

@@ -35,6 +35,8 @@
#include "hack.h" #include "hack.h"
#include "color.h" #include "color.h"
#define TEXT_BUFFER_SIZE 4096
/* Create an array to keep track of the various windows */ /* Create an array to keep track of the various windows */
#ifndef MAXWINDOWS #ifndef MAXWINDOWS