From 142f13de3f2362666b3973e928a1449f8250c170 Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Sat, 10 Oct 2009 14:39:53 +0000 Subject: [PATCH] Windows CE changes (from ) The changes did not apply to the main trunk as easily as I wouuld have hoped, so I attempted a number of manual applications. I hope can tell me if there is a problem. Changelist: - bugfix: help text windows close immediately after open (unhandled WM_KEYDOWN in mhtext.c) - bugfix: action button uses hero coordinates instead of cursor position - pocketpc: bugfix: menu window closes on up/down keys from first/last position - smartphone: do not translate input when command helper is hidden (fixes Motorola Q keyboard bug) - smartphone: new keypad layouts - smartphone: wizard mode command layout - smartphone: option to feed arbitrary text as a command to nethack core - wrap/unwrap text option for text windows - hardware keyboard detection - hide keypad when hardware keyboard is present - backport message window highlighting from winnt port - new icon with recommended image sizes --- sys/wince/cesetup.bat | 1 - sys/wince/mhcmd.c | 55 ++++- sys/wince/mhdlg.c | 6 +- sys/wince/mhmain.c | 49 +++- sys/wince/mhmap.c | 11 + sys/wince/mhmap.h | 1 + sys/wince/mhmenu.c | 6 +- sys/wince/mhmsgwnd.c | 41 ++-- sys/wince/mhtext.c | 108 ++++++-- sys/wince/mhtxtbuf.c | 14 +- sys/wince/mhtxtbuf.h | 2 + sys/wince/mswproc.c | 23 +- sys/wince/nhico.uu | 555 ++++++++++++++++++++++++++++++++++++++++++ sys/wince/resource.h | 5 + sys/wince/winMS.h | 4 +- sys/wince/winhack.c | 6 +- sys/wince/winhack.rc | 15 +- sys/wince/winhcksp.rc | 23 +- 18 files changed, 844 insertions(+), 81 deletions(-) create mode 100644 sys/wince/nhico.uu diff --git a/sys/wince/cesetup.bat b/sys/wince/cesetup.bat index 5a45bcd32..51869ec35 100755 --- a/sys/wince/cesetup.bat +++ b/sys/wince/cesetup.bat @@ -15,7 +15,6 @@ copy ..\..\win\win32\mnsel.uu ..\..\wince\mnsel.uu copy ..\..\win\win32\mnselcnt.uu ..\..\wince\mnselcnt.uu copy ..\..\win\win32\mnunsel.uu ..\..\wince\mnunsel.uu copy ..\..\win\win32\petmark.uu ..\..\wince\petmark.uu -copy ..\..\sys\winnt\nhico.uu ..\..\wince\nhico.uu copy ..\..\sys\wince\menubar.uu ..\..\wince\menubar.uu copy ..\..\sys\wince\keypad.uu ..\..\wince\keypad.uu REM diff --git a/sys/wince/mhcmd.c b/sys/wince/mhcmd.c index b83ec6b90..e27da34db 100644 --- a/sys/wince/mhcmd.c +++ b/sys/wince/mhcmd.c @@ -155,6 +155,8 @@ static PNHCmdSet nhcmdset_default = 0; #define NH_LAYOUT_ITEM_HANDLING 3 #define NH_LAYOUT_CONTROLS 4 #define NH_LAYOUT_ADV_MOVEMENT 5 +#define NH_LAYOUT_ITEM_LOOKUP 6 +#define NH_LAYOUT_WIZARD 7 /* template menu layout */ NHCmdPadCell cells_layout_menu[NH_CMDPAD_CELLNUM] = @@ -218,7 +220,7 @@ NHCmdPadCell cells_layout_item_handling[NH_CMDPAD_CELLNUM] = { -1, "D", "D", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "Q", "Q", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "i", "i", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, - { -1, "[", "[", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "Q", "Q", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "A", "A", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "I", "I", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "X", "X", 13, NH_CELL_LAYOUT_MENU, 1 , 0 } @@ -232,7 +234,7 @@ NHCmdPadCell cells_layout_general[NH_CMDPAD_CELLNUM] = { -1, "l", "l", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "s", "s", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "E", "E", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, - { -1, "\x04", "^D", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x01", "^A", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "c", "c", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "o", "o", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "p", "p", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, @@ -268,12 +270,48 @@ NHCmdPadCell cells_layout_adv_movement[NH_CMDPAD_CELLNUM] = { -1, "_", "_", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "\x14", "^T", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "j", "j", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "<", "<", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, ">", ">", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "^", "^", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "", "", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "X", "X", 13, NH_CELL_LAYOUT_MENU, 1 , 0 } +}; + +/* item lookup layout */ +NHCmdPadCell cells_layout_lookup[NH_CMDPAD_CELLNUM] = +{ + { -1, ";", ";", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "^", "^", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "]", "]", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, ")", ")", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "=", "=", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "*", "*", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "(", "(", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\"", "\"", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "$", "$", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "+", "+", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "", "", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "X", "X", 13, NH_CELL_LAYOUT_MENU, 1 , 0 } +}; + +#ifdef WIZARD +/* wizard mode layout */ +NHCmdPadCell cells_layout_wizard[NH_CMDPAD_CELLNUM] = +{ + { -1, "\x05", "^e", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x06", "^f", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x07", "^g", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x09", "^i", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x0f", "^o", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x16", "^v", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x17", "^w", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "\x14", "^T", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, + { -1, "#", "#", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "", "", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "", "", -NH_CMDPAD_FONT_NORMAL, NH_CELL_REG, 1, (void*)-1 }, { -1, "X", "X", 13, NH_CELL_LAYOUT_MENU, 1 , 0 } }; +#endif #else /* !WIN_CE_SMARTPHONE */ @@ -512,6 +550,19 @@ void register_command_window_class() plt = nhcmdlayout_create("Advanced Movement", NH_CMDPAD_ROWS, NH_CMDPAD_COLS); nhcmdlayout_init(plt, cells_layout_adv_movement); nhcmdset_add(nhcmdset_current, plt); + + plt = nhcmdlayout_create("Item Lookup", NH_CMDPAD_ROWS, NH_CMDPAD_COLS); + nhcmdlayout_init(plt, cells_layout_lookup); + nhcmdset_add(nhcmdset_current, plt); + +#ifdef WIZARD + if( wizard ) { + plt = nhcmdlayout_create("Wizard Mode", NH_CMDPAD_ROWS, NH_CMDPAD_COLS); + nhcmdlayout_init(plt, cells_layout_wizard); + nhcmdset_add(nhcmdset_current, plt); + } +#endif + #else /* ! WIN_CE_SMARTPHONE */ plt = nhcmdlayout_create("lowercase", NH_CMDPAD_ROWS, NH_CMDPAD_COLS); nhcmdlayout_init(plt, cells_layout_mod1); diff --git a/sys/wince/mhdlg.c b/sys/wince/mhdlg.c index fa3d39f9c..820bc6e38 100644 --- a/sys/wince/mhdlg.c +++ b/sys/wince/mhdlg.c @@ -130,7 +130,7 @@ LRESULT CALLBACK GetlinDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP TRUE ); #if defined(WIN_CE_SMARTPHONE) - NHSPhoneDialogSetup(hWnd, TRUE, FALSE); + NHSPhoneDialogSetup(hWnd, IDC_SPHONE_DIALOGBAR, TRUE, FALSE); #endif /* set focus to the edit control */ @@ -242,7 +242,7 @@ LRESULT CALLBACK ExtCmdDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP } #if defined(WIN_CE_SMARTPHONE) - NHSPhoneDialogSetup(hWnd, FALSE, FALSE); + NHSPhoneDialogSetup(hWnd, IDC_SPHONE_DIALOGBAR, FALSE, FALSE); GetClientRect(hWnd, &dlg_rt); MoveWindow(GetDlgItem(hWnd, IDC_EXTCMD_LIST), @@ -364,7 +364,7 @@ BOOL CALLBACK PlayerSelectorDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPAR plselInitDialog(hWnd); #if defined(WIN_CE_SMARTPHONE) - NHSPhoneDialogSetup(hWnd, FALSE, FALSE); + NHSPhoneDialogSetup(hWnd, IDC_SPHONE_DIALOGBAR, FALSE, FALSE); #endif /* set focus on the role checkbox (random) field */ SetFocus(GetDlgItem(hWnd, IDC_PLSEL_ROLE_RANDOM)); diff --git a/sys/wince/mhmain.c b/sys/wince/mhmain.c index 7b75f71e6..df1486c45 100644 --- a/sys/wince/mhmain.c +++ b/sys/wince/mhmain.c @@ -200,8 +200,6 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar (GetNHApp()->bCmdPad? MF_CHECKED : MF_UNCHECKED) ); - /* create command pad (keyboard emulator) */ - GetNHApp()->hCmdWnd = mswin_init_command_window(); } break; /*-----------------------------------------------------------------------*/ @@ -397,13 +395,21 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar } return 0; - case VK_RETURN: - NHEVENT_MS( CLICK_1, u.ux, u.uy); + case VK_RETURN: { + int x, y; + if( WIN_MAP!=WIN_ERR ) { + mswin_map_get_cursor(mswin_hwnd_from_winid(WIN_MAP), &x, &y); + } else { + x = u.ux; + y = u.uy; + } + NHEVENT_MS(CLICK_1, x, y); + } return 0; } #if defined(WIN_CE_SMARTPHONE) - if( NHSPhoneTranslateKbdMessage(wParam, lParam, TRUE) ) return 0; + if( GetNHApp()->bCmdPad && NHSPhoneTranslateKbdMessage(wParam, lParam, TRUE) ) return 0; #endif return 1; /* end of WM_KEYDOWN */ @@ -411,13 +417,20 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar #if defined(WIN_CE_SMARTPHONE) case WM_KEYUP: - if( NHSPhoneTranslateKbdMessage(wParam, lParam, FALSE) ) return 0; + if( GetNHApp()->bCmdPad && NHSPhoneTranslateKbdMessage(wParam, lParam, FALSE) ) return 0; return 1; /* end of WM_KEYUP */ #endif /*-----------------------------------------------------------------------*/ -#if !defined(WIN_CE_SMARTPHONE) case WM_CHAR: +#if defined(WIN_CE_SMARTPHONE) + /* if smartphone cmdpad is up then translation happens - disable WM_CHAR processing + to avoid double input */ + if( GetNHApp()->bCmdPad ) { + return 1; + } +#endif + if( wParam=='\n' || wParam=='\r' || wParam==C('M') ) return 0; /* we already processed VK_RETURN */ /* all characters go to nethack except Ctrl-P that scrolls message window up */ @@ -427,7 +440,6 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar NHEVENT_KBD( (lParam & 1<<29)? M(tolower(wParam)) : wParam ); } return 0; -#endif /*-----------------------------------------------------------------------*/ @@ -865,6 +877,21 @@ LRESULT onWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) DialogBox(GetNHApp()->hApp, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; + case IDM_CMD_DLG: { + char input[BUFSZ]; + char* p; + boolean ctrl = FALSE; + mswin_getlin("Enter command", input); + for(p=input; *p; p++) { + if( *p == '^' ) { + ctrl = TRUE; + continue; + } + NHEVENT_KBD(ctrl? C(*p) : *p); + ctrl = FALSE; + } + } break; + case IDM_EXIT: done2(); break; @@ -1109,10 +1136,8 @@ void mswin_select_map_mode(int mode) ** first, check if WIN_MAP has been inialized. ** If not - attempt to retrieve it by type, then check it again */ - if( map_id==WIN_ERR ) - map_id = mswin_winid_from_type(NHW_MAP); - if( map_id!=WIN_ERR ) - mswin_map_mode(mswin_hwnd_from_winid(map_id), mode); + if( WIN_MAP!=WIN_ERR ) + mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode); } static struct t_menu2mapmode { diff --git a/sys/wince/mhmap.c b/sys/wince/mhmap.c index c4281d9e8..38abbbc12 100644 --- a/sys/wince/mhmap.c +++ b/sys/wince/mhmap.c @@ -299,6 +299,17 @@ int mswin_map_mode(HWND hWnd, int mode) return oldMode; } +/* retrieve cursor position */ +void mswin_map_get_cursor(HWND hWnd, int* x, int* y) +{ + PNHMapWindow data; + + data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA); + if( !data ) panic("mswin_map_get_cursor: no window data"); + if( x ) *x = data->xCur; + if( y ) *y = data->yCur; +} + /* register window class for map window */ void register_map_window_class() { diff --git a/sys/wince/mhmap.h b/sys/wince/mhmap.h index c0ad8c7c9..727565453 100644 --- a/sys/wince/mhmap.h +++ b/sys/wince/mhmap.h @@ -14,6 +14,7 @@ HWND mswin_init_map_window (void); void mswin_map_stretch(HWND hWnd, LPSIZE lpsz, BOOL redraw); int mswin_map_mode(HWND hWnd, int mode); +void mswin_map_get_cursor(HWND hWnd, int* x, int* y); #define ROGUE_LEVEL_MAP_MODE MAP_MODE_ASCII12x16 diff --git a/sys/wince/mhmenu.c b/sys/wince/mhmenu.c index 0174cb945..658622b84 100644 --- a/sys/wince/mhmenu.c +++ b/sys/wince/mhmenu.c @@ -271,7 +271,7 @@ LRESULT CALLBACK MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar #if defined(WIN_CE_SMARTPHONE) /* special initialization for SmartPhone dialogs */ - NHSPhoneDialogSetup(hWnd, FALSE, GetNHApp()->bFullScreen); + NHSPhoneDialogSetup(hWnd, IDC_SPHONE_DIALOGBAR, FALSE, GetNHApp()->bFullScreen); #endif } break; @@ -1441,6 +1441,10 @@ LRESULT CALLBACK NHMenuListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA bUpdateFocusItem = TRUE; } break; + /* tell Windows not to process arrow keys */ + case WM_GETDLGCODE: + return DLGC_WANTARROWS; + #else /* defined(WIN_CE_SMARTPHONE) */ case WM_KEYDOWN: if( wParam==VK_TACTION ) { diff --git a/sys/wince/mhmsgwnd.c b/sys/wince/mhmsgwnd.c index 9b7f1f0de..16013097b 100644 --- a/sys/wince/mhmsgwnd.c +++ b/sys/wince/mhmsgwnd.c @@ -46,6 +46,7 @@ static void onMSNH_VScroll(HWND hWnd, WPARAM wParam, LPARAM lParam); #ifndef MSG_WRAP_TEXT static void onMSNH_HScroll(HWND hWnd, WPARAM wParam, LPARAM lParam); #endif +static COLORREF setMsgTextColor(HDC hdc, int gray); static void onPaint(HWND hWnd); static void onCreate(HWND hWnd, WPARAM wParam, LPARAM lParam); @@ -457,6 +458,24 @@ void onMSNH_HScroll(HWND hWnd, WPARAM wParam, LPARAM lParam) } #endif // MSG_WRAP_TEXT +COLORREF setMsgTextColor(HDC hdc, int gray) +{ + COLORREF fg, color1, color2; + if (gray) { + color1 = mswin_get_color(NHW_MESSAGE, MSWIN_COLOR_BG); + color2 = mswin_get_color(NHW_MESSAGE, MSWIN_COLOR_FG); + /* Make a "gray" color by taking the average of the individual R,G,B + components of two colors. Thanks to Jonathan del Strother */ + fg = RGB((GetRValue(color1)+GetRValue(color2))/2, + (GetGValue(color1)+GetGValue(color2))/2, + (GetBValue(color1)+GetBValue(color2))/2); + } else { + fg = mswin_get_color(NHW_MESSAGE, MSWIN_COLOR_FG); + } + + return SetTextColor(hdc, fg); +} + void onPaint(HWND hWnd) { PAINTSTRUCT ps; @@ -473,7 +492,7 @@ void onPaint(HWND hWnd) hdc = BeginPaint(hWnd, &ps); OldBg = SetBkColor(hdc, mswin_get_color(NHW_MESSAGE, MSWIN_COLOR_BG)); - OldFg = SetTextColor(hdc, mswin_get_color(NHW_MESSAGE, MSWIN_COLOR_FG)); + OldFg = setMsgTextColor(hdc, 0); data = (PNHMessageWindow)GetWindowLong(hWnd, GWL_USERDATA); @@ -504,6 +523,7 @@ void onPaint(HWND hWnd) oldFont = SelectObject(hdc, mswin_get_font(NHW_MESSAGE, data->window_text[i].attr, hdc, FALSE)); + setMsgTextColor(hdc, i < (MSG_LINES - data->lines_last_turn)); #ifdef MSG_WRAP_TEXT DrawText(hdc, wbuf, wlen, &draw_rt, DT_NOPREFIX | DT_WORDBREAK | DT_CALCRECT); draw_rt.top = y - (draw_rt.bottom - draw_rt.top); @@ -518,21 +538,6 @@ void onPaint(HWND hWnd) } else { y -= data->yChar; } - - /* highligh the last line */ - if( i==MSG_LINES-1 ) { - draw_rt.left = client_rt.left; - draw_rt.right = draw_rt.left + 2*data->xChar; - DrawText(hdc, TEXT("> "), 2, &draw_rt, DT_NOPREFIX ); - - y -= 2; - draw_rt.left = client_rt.left; - draw_rt.right = client_rt.right; - draw_rt.top -= 2; - draw_rt.bottom = client_rt.bottom; - DrawEdge(hdc, &draw_rt, EDGE_SUNKEN, BF_TOP ); - DrawEdge(hdc, &draw_rt, EDGE_SUNKEN, BF_BOTTOM ); - } } } @@ -569,6 +574,10 @@ void onCreate(HWND hWnd, WPARAM wParam, LPARAM lParam) /* Free the device context. */ SelectObject(hdc, saveFont); ReleaseDC (hWnd, hdc); + + /* create command pad (keyboard emulator) */ + if( !GetNHApp()->hCmdWnd ) + GetNHApp()->hCmdWnd = mswin_init_command_window(); } void mswin_message_window_size (HWND hWnd, LPSIZE sz) diff --git a/sys/wince/mhtext.c b/sys/wince/mhtext.c index 27596ec54..56a93dea0 100644 --- a/sys/wince/mhtext.c +++ b/sys/wince/mhtext.c @@ -21,6 +21,7 @@ LRESULT CALLBACK TextWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK NHTextControlWndProc(HWND, UINT, WPARAM, LPARAM); static void onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam); static void LayoutText(HWND hwnd); +static void ToggleWrapStatus(HWND hDlg, BOOL bWrap); HWND mswin_init_text_window () { HWND ret; @@ -51,11 +52,7 @@ void mswin_display_text_window (HWND hWnd) data = (PNHTextWindow)GetWindowLong(hWnd, GWL_USERDATA); if( data ) { - HWND control; - control = GetDlgItem(hWnd, IDC_TEXT_CONTROL); - SendMessage(control, EM_FMTLINES, 1, 0 ); - mswin_render_text(data->window_text, GetDlgItem(hWnd, IDC_TEXT_CONTROL)); - + ToggleWrapStatus(hWnd, mswin_get_text_wrap(data->window_text)); data->done = 0; mswin_popup_display(hWnd, &data->done); mswin_popup_destroy(hWnd); @@ -84,22 +81,12 @@ LRESULT CALLBACK TextWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar #if defined(WIN_CE_SMARTPHONE) /* special initialization for SmartPhone dialogs */ - NHSPhoneDialogSetup(hWnd, FALSE, GetNHApp()->bFullScreen); + NHSPhoneDialogSetup(hWnd, IDC_SPHONE_TEXTDIALOGBAR, FALSE, GetNHApp()->bFullScreen); #endif /* subclass edit control */ editControlWndProc = (WNDPROC)GetWindowLong(control, GWL_WNDPROC); SetWindowLong(control, GWL_WNDPROC, (LONG)NHTextControlWndProc); - if( !program_state.gameover && GetNHApp()->bWrapText ) { - DWORD styles; - styles = GetWindowLong(control, GWL_STYLE); - if( styles ) { - SetWindowLong(control, GWL_STYLE, styles & (~WS_HSCROLL)); - SetWindowPos(control, NULL, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE ); - } - } - SetFocus(control); return FALSE; @@ -116,8 +103,11 @@ LRESULT CALLBACK TextWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar { case IDOK: case IDCANCEL: - data->done = 1; - return TRUE; + data->done = 1; + return TRUE; + case IDC_TEXT_TOGGLE_WRAP: + ToggleWrapStatus(hWnd, !mswin_get_text_wrap(data->window_text)); + return TRUE; } break; @@ -159,16 +149,80 @@ void onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) } } +void ToggleWrapStatus(HWND hDlg, BOOL bWrap) +{ + DWORD styles; + PNHTextWindow data; + HWND control; + TCHAR wbuf[BUFSZ]; + + data = (PNHTextWindow)GetWindowLong(hDlg, GWL_USERDATA); + + control = GetDlgItem(hDlg, IDC_TEXT_CONTROL); + if( !control ) { + panic("cannot get text view window"); + } + + /* set horizontal scrollbar status */ + styles = GetWindowLong(control, GWL_STYLE); + if( styles ) { + SetWindowLong(control, GWL_STYLE, (bWrap? (styles & (~WS_HSCROLL)) : (styles | WS_HSCROLL))); + SetWindowPos(control, NULL, 0, 0, 0, 0, + SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE ); + } + + /* set text wrap mode */ + mswin_set_text_wrap(data->window_text, bWrap); + mswin_render_text(data->window_text, control); + + /* change button status */ + ZeroMemory( wbuf, sizeof(wbuf) ); + if( !LoadString( + GetNHApp()->hApp, + (bWrap? IDS_TEXT_UNWRAP : IDS_TEXT_WRAP), + wbuf, + BUFSZ) ) { + panic("cannot load text window strings"); + } + +#if defined(WIN_CE_SMARTPHONE) + { + TBBUTTONINFO tbbi; + + ZeroMemory( &tbbi, sizeof(tbbi) ); + tbbi.cbSize = sizeof(tbbi); + tbbi.dwMask = TBIF_TEXT; + tbbi.pszText = wbuf; + if( !SendMessage( + SHFindMenuBar(hDlg), + TB_SETBUTTONINFO, + IDC_TEXT_TOGGLE_WRAP, + (LPARAM)&tbbi) ) { + error( "Cannot update IDC_TEXT_TOGGLE_WRAP menu item." ); + } + } +#else + SendDlgItemMessage( + hDlg, + IDC_TEXT_TOGGLE_WRAP, + WM_SETTEXT, + (WPARAM)0, + (LPARAM)wbuf + ); +#endif +} + void LayoutText(HWND hWnd) { - HWND btn_ok; + HWND btn_ok, btn_wrap; HWND text; RECT clrt, rt; - POINT pt_elem, pt_ok; - SIZE sz_elem, sz_ok; + POINT pt_elem, pt_ok, pt_wrap; + SIZE sz_elem, sz_ok, sz_wrap; text = GetDlgItem(hWnd, IDC_TEXT_CONTROL); btn_ok = GetDlgItem(hWnd, IDOK); + btn_wrap = GetDlgItem(hWnd, IDC_TEXT_TOGGLE_WRAP); /* get window coordinates */ GetClientRect(hWnd, &clrt ); @@ -176,12 +230,18 @@ void LayoutText(HWND hWnd) /* set window placements */ if( IsWindow(btn_ok) ) { GetWindowRect(btn_ok, &rt); - sz_ok.cx = clrt.right - clrt.left; + sz_ok.cx = (clrt.right - clrt.left)/2; sz_ok.cy = rt.bottom-rt.top; pt_ok.x = clrt.left; pt_ok.y = clrt.bottom - sz_ok.cy; MoveWindow(btn_ok, pt_ok.x, pt_ok.y, sz_ok.cx, sz_ok.cy, TRUE ); + sz_wrap.cx = (clrt.right - clrt.left)/2; + sz_wrap.cy = rt.bottom-rt.top; + pt_wrap.x = clrt.left + sz_ok.cx; + pt_wrap.y = clrt.bottom - sz_ok.cy; + MoveWindow(btn_wrap, pt_wrap.x, pt_wrap.y, sz_wrap.cx, sz_wrap.cy, TRUE ); + pt_elem.x = clrt.left; pt_elem.y = clrt.top; sz_elem.cx = clrt.right - clrt.left; @@ -200,7 +260,7 @@ void LayoutText(HWND hWnd) LRESULT CALLBACK NHTextControlWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { - case WM_KEYUP: + case WM_KEYDOWN: switch( wParam ) { case VK_SPACE: case VK_RETURN: @@ -228,7 +288,7 @@ LRESULT CALLBACK NHTextControlWndProc(HWND hWnd, UINT message, WPARAM wParam, LP PostMessage(hWnd, WM_HSCROLL, MAKEWPARAM(SB_LINERIGHT, 0), (LPARAM)NULL); return 0; } - break; /* case WM_KEYUP: */ + break; /* case WM_KEYDOWN: */ } if( editControlWndProc ) diff --git a/sys/wince/mhtxtbuf.c b/sys/wince/mhtxtbuf.c index ba8e3b6b6..1c9dd653a 100644 --- a/sys/wince/mhtxtbuf.c +++ b/sys/wince/mhtxtbuf.c @@ -96,7 +96,9 @@ void mswin_add_text(PNHTextBuffer pb, int attr, const char* text) /* if there are 3 (or more) consecutive spaces inside the string consider it formatted */ - new_line->formatted = (strstr(new_line->text, " ")!=NULL); + new_line->formatted = + (strstr(new_line->text, " ")!=NULL) + || (new_line->beg_padding>8); } else { new_line->end_padding = 0; new_line->text[0] = 0; @@ -105,6 +107,16 @@ void mswin_add_text(PNHTextBuffer pb, int attr, const char* text) pb->n_used++; } /*----------------------------------------------------------------*/ +void mswin_set_text_wrap(PNHTextBuffer pb, BOOL wrap_text) +{ + pb->b_wrap_text = wrap_text; +} +/*----------------------------------------------------------------*/ +BOOL mswin_get_text_wrap(PNHTextBuffer pb) +{ + return pb->b_wrap_text; +} +/*----------------------------------------------------------------*/ static TCHAR* nh_append( TCHAR* s, int* size, const char* ap ) { int tlen, tnewlen; diff --git a/sys/wince/mhtxtbuf.h b/sys/wince/mhtxtbuf.h index ba726646f..207938a40 100644 --- a/sys/wince/mhtxtbuf.h +++ b/sys/wince/mhtxtbuf.h @@ -12,6 +12,8 @@ typedef struct mswin_nethack_text_buffer* PNHTextBuffer; PNHTextBuffer mswin_init_text_buffer(BOOL wrap_text); void mswin_free_text_buffer(PNHTextBuffer pb); void mswin_add_text(PNHTextBuffer pb, int attr, const char* text); +void mswin_set_text_wrap(PNHTextBuffer pb, BOOL wrap_text); +BOOL mswin_get_text_wrap(PNHTextBuffer pb); void mswin_render_text(PNHTextBuffer pb, HWND edit_control); #endif /* MSWINTextBuffer_h */ diff --git a/sys/wince/mswproc.c b/sys/wince/mswproc.c index d6c54da58..a76335b5f 100644 --- a/sys/wince/mswproc.c +++ b/sys/wince/mswproc.c @@ -1891,7 +1891,7 @@ void mswin_set_fullscreen(BOOL is_fullscreen) } #if defined(WIN_CE_SMARTPHONE) -void NHSPhoneDialogSetup(HWND hDlg, BOOL is_edit, BOOL is_fullscreen) +void NHSPhoneDialogSetup(HWND hDlg, UINT nToolBarId, BOOL is_edit, BOOL is_fullscreen) { SHMENUBARINFO mbi; HWND hOK, hCancel; @@ -1901,7 +1901,7 @@ void NHSPhoneDialogSetup(HWND hDlg, BOOL is_edit, BOOL is_fullscreen) ZeroMemory(&mbi, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(mbi); mbi.hwndParent = hDlg; - mbi.nToolBarId = IDC_SPHONE_DIALOGBAR; + mbi.nToolBarId = nToolBarId; mbi.hInstRes = GetNHApp()->hApp; if(!SHCreateMenuBar(&mbi)) { error("cannot create dialog menu"); @@ -1961,6 +1961,25 @@ void mswin_write_reg(void) { } +/* check HKCU\Software\\Microsoft\\Shell\HasKeyboard for keyboard presence, + if the key is not there assume older device and no keyboard */ +BOOL mswin_has_keyboard(void) +{ + DWORD dwHasKB = 0; +#if defined(WIN_CE_POCKETPC) || defined(WIN_CE_SMARTPHONE) + HKEY hKey; + DWORD dwType; + DWORD dwSize = sizeof(dwHasKB); + if( RegOpenKeyEx(HKEY_CURRENT_USER , _T("Software\\Microsoft\\Shell"), 0, 0, &hKey)==ERROR_SUCCESS) { + if( RegQueryValueEx(hKey, _T("HasKeyboard"), NULL, &dwType, (LPBYTE)&dwHasKB, &dwSize)!=ERROR_SUCCESS) { + dwHasKB = 0; + } + RegCloseKey(hKey); + } +#endif + return (dwHasKB==1); +} + #ifdef _DEBUG #include diff --git a/sys/wince/nhico.uu b/sys/wince/nhico.uu new file mode 100644 index 000000000..d8f7e7764 --- /dev/null +++ b/sys/wince/nhico.uu @@ -0,0 +1,555 @@ +begin 700 nethack.ico +M```!``8`("``````"`"H"```9@```!`0``````@`:`4```X)```L+``````( +M`!@-``!V#@``0$``````"``H%@``CAL``%I:``````@`N"@``+8Q```6%@`` +M```(`)`&``!N6@``*````"````!``````0`(````````!``````````````` +M`0````$``````````(```(````"`@`"`````@`"``("```#`P,``P-S``/#* +MI@`$!`0`"`@(``P,#``1$1$`%A86`!P<'``B(B(`*2DI`%5550!-34T`0D)" +M`#DY.0"`?/\`4%#_`),`U@#_[,P`QM;O`-;GYP"0J:T````S````9@```)D` +M``#,```S````,S,``#-F```SF0``,\P``#/_``!F````9C,``&9F``!FF0`` +M9LP``&;_``"9````F3,``)EF``"9F0``F\\O,*"@H* +M"@H*"@H*"O3J1._R\`=&1P<'(&_OO`H'!_.\"@H*"@H*"@H*"@H*"O!$[+R3 +M("!'!Y,@($6\O`?S\/(*"@H*"@H*"@H*"@H*"N\''"`@($<'DR`@'T6\\/#Q +M"@H*"@H*"@H*"@H*"@KR!QP?("`@1P?O("`?'T7PO`H*"@H*"@H*"@H*"@H* +M"@<''Q\@("!&[.M%Z1\?`6[Q]`H*"@H*"@H*"@H*"@KR[VX!'^GL[`<'!P=M +M'Q\!`;SQ"@H*"@H*"@H*"@H*"O$'10%%!P<';_>2;D4?'P$!!_`*"@H*"@H* +M"@H*"@H*\`\!^N\!P?Q\_(';0?W!^R\!PH*"@H*"@H*"@H*"@KQ +MO+P';;SO!_+T\KSK\.\'[`<'"@H*"@H*"@H*"@H*"O*\`0?MZ6[W\/'P]^L? +M[`=$DP<*"@H*"@H*"@H*"@H*\O`![`=$(._O[^WO[!^2[`&3!PH*"@H*"@H* +M"@H*"@KR\`$!!_=%(&[W]^UN;0=$`9/O"@H*"@H*"@H*"@H*"O/Q`0%%!^]M +M1>WMZNL'$@$!'.\'!_(*"@H*"@H*"@H*\_$!`1_I'`<'[P<'[T4?`0$<[_$' +M[[P*"@H*"@H*"@KS\0$!'R`@(&^2]T8@'Q\!`>WW\`?O!_(*"@H*"@H*"O/Q +M`0$?("`@1@<'("`?'P$![9+P!^^2[_,*"@H*"@H*\_`!`1\?("!&!P<@(!\! +M`0%N[?`'[Y+L[PH*"@H*"@KS\._O!P?O[P<'\/"\O+P'!^V2O`?ODNP'"@H* +M"@H*"@?M[._R\+SP\?+R\O"\O`?O[^R\!^_M[.\*"@H*"@KQ1$1N"@H*"@H* +M"@KQ\_/Q!^\'[^V2!_`'[`H*"@H*"FU$ZO,*"@H*"@H*"@?S\_`'[Y*\[/(* +M"@KS"@H*"@KL1$0'"@H*"@H*"@H*\_/S\`?O[._Q[PH*"@H*"@H*[T1$'`H* +M"@H*"@H*"@H*\_/P!_<'"O0*"@H*"@H*"@KL'.P*"@H*"@H*"@H*"@KP!_`' +M]PH*"@H*"@H*"@H*"@H'\@H*"@H*"@H*"@H*"@KRO`?O"@H*"@H*"@H*"@H* +M"@H*"@H*"@H*"@H*"@H*"@H*\_#S"@H*"@H*"@H*^?C_?_#P/#_XP!@_^``( +M?_P``'_^``#__``!__P``/_X``#_^```__@``/_X``#_^```__@``/_X``#_ +M^```__@``/_X``#_^```'_@```_X```'^````_@```/X```#^````_#_``/P +M_P`[X?\`/\/_@7_'_X/_Y__#____\?\H````$````"`````!``@````````! +M```````````````!`````0``````````@```@````("``(````"``(``@(`` +M`,#`P`#`W,``\,JF``0$!``("`@`#`P,`!$1$0`6%A8`'!P<`"(B(@`I*2D` +M5555`$U-30!"0D(`.3DY`(!\_P!04/\`DP#6`/_LS`#&UN\`UN?G`)"IK0`` +M`#,```!F````F0```,P``#,````S,P``,V8``#.9```SS```,_\``&8```!F +M,P``9F8``&:9``!FS```9O\``)D```"9,P``F68``)F9``"9S```F?\``,P` +M``#,,P``S&8``,R9``#,S```S/\``/]F``#_F0``_\P`,P```#,`,P`S`&8` +M,P"9`#,`S``S`/\`,S,``#,S,P`S,V8`,S.9`#,SS``S,_\`,V8``#-F,P`S +M9F8`,V:9`#-FS``S9O\`,YD``#.9,P`SF68`,YF9`#.9S``SF?\`,\P``#/, +M,P`SS&8`,\R9`#/,S``SS/\`,_\S`#/_9@`S_YD`,__,`#/__P!F````9@`S +M`&8`9@!F`)D`9@#,`&8`_P!F,P``9C,S`&8S9@!F,YD`9C/,`&8S_P!F9@`` +M9F8S`&9F9@!F9ID`9F;,`&:9``!FF3,`9IEF`&:9F0!FF\ +M[_````#T[VXN\\O+T\O`'![SOD@``!T0<`````/'R +M[Y+W`````.MN``````#S\._S\@````#T`````````//P]`````#,9P``P`<` +M`.`/``#@#P``P`\``,`/``#`#P``P`\``,`/``#``P``P`$``,`!``#``0`` +MCP<``)\'``"_CP``*````"P```!8`````0`(``````"0!P`````````````` +M`0````$``````````(```(````"`@`"`````@`"``("```#`P,``P-S``/#* +MI@`$!`0`"`@(``P,#``1$1$`%A86`!P<'``B(B(`*2DI`%5550!-34T`0D)" +M`#DY.0"`?/\`4%#_`),`U@#_[,P`QM;O`-;GYP"0J:T````S````9@```)D` +M``#,```S````,S,``#-F```SF0``,\P``#/_``!F````9C,``&9F``!FF0`` +M9LP``&;_``"9````F3,``)EF``"9F0``F\;^_W[_$```#S!P?S\O(````````````````````` +M[T1$[0#T\/'N1OD6![P@(&_O[_$```<'\?.\```````````````````````` +M^$1$!_#PDR`@^18'[B`@($8'!_*\![SS\/````````````````````````#S +M;6T'O),@("#Y%@<'("`@'T7PO`<'\_&\```````````````````````````' +M[P>3("`@(/F3!P<@("`?'T7N\+SQ]```````````````````````````\P<' +MDQ\@("`@^9,'!R`@(!\?'T6\\0?T```````````````````````````'[^\? +M'R`@("#YD^_O("`@'Q\?`47Q\/0`````````````````````````\N\'11\? +M("`@($9N;6U$1>D?'Q\!`1SQ\?0````````````````````````'[^\!'Q\@ +MZ6UM]P<'!P<'ZQ\?'P$!1?"\]`````````````````````````<';@$?'T4' +M!P>\[^\'!P?L'Q\?`0$!![ST````````````````````````[^X!`1_M!P<' +M;OD6[^\@("`?'Q\!`0&3!_,```````````````````````#OO`$!10<'$B`@ +M(&YM^$7JZNKJZA,!`1P'\@```````````````````````.^\`0'O!^OI($7K +M[.WLZP<'O+P'[T0!DP?R````````````````````````!^X!10<'1"!%[>V2 +M]_?O[/=%'P<'$@&3!_(````````````````````````'!P'W!_=%Z0?W!_#P +MO`?O[44![P=M`1P'\0````````````````````````>\\.\'Z[SO[^_P\O+Q +MO._K[[SO!^R\O._Q````````````````````````![SP!P=MO._WO/'S]//P +M[^SO\>\'[>\'[_$````````````````````````'O.\'!^N3'.\'\?/T\O#O +M[.V3]P?M'`?O\0```````````````````````+SN`6X'[T4@!Y*\\?'PO)*2 +M'Q_O!^H!D^_P````````````````````````O+P!10<'$B!&!_<'!^_M[_\````````````````````````\/`!`1]%!P<';41N[_=%$NL'[T0! +M`0$_P!P?O[_+R``````````````#Q\`$!'Q\?("`@^6\'O"`@("`?'P$!`>WM +M[_`'!^^2D@<``````````````/+P`0$?'Q\@("#Y;P>\("`@(!\?`0$!;NSO +M\`?O[Y+L[/$`````````````\;QN;FYN;FYN;V^3!_"3;VYN;I,<[6[L[`>\ +M!^_ODNSM!P````````````#Q\;P'!P?O[^_O[P<'O/#Q\O"\!^_ODNWL![P' +M[_>2[.SQ``````````````?WDO?N\;P'!P>\\/'Q\?"\O+R\!^_O[^SOO`?O +M]^WL^+P```````````#O%$1$[P````````````#T]/3SO`<'!_?P[Q+O!^SM +M[>SX]P``````````O!)#1.T``````````````/'P]/3R\+P'[_?SDOB2]``` +M`/#M`````````/)M%41N]```````````````\;ST]/+P!^_ODN_O^/`````` +M`/0`````````^!5$;?$`````````````````\/3T\O`'[_?M[`<'D@`````` +M`````````!Q$1$H'````````````````````]/3R\`?O]^ST`.^2```````` +M``````#O$D-$'`````````````````````#P\_'P!^^2\@```/#Q```````` +M`````.T'[/@``````````````````````/#O\;P'[^\````````````````` +M`````)+M\P```````````````````````/('O`?O!P`````````````````` +M`````````````````````````````````/3Q\`?O```````````````````` +M``````````````````````````````````#T\O#S````````````````_C_C +M___P``#\/X#_#_```/P?`#X/\```_@P`'`_P``#_"``,'_```/^````?\``` +M_X```#_P``#_P```?_```/^```!_\```_X```'_P``#_````/_```/\````_ +M\```_P```#_P``#_````/_```/\````_\```_P```#_P``#_````/_```/\` +M```_\```_P```#_P``#_````/_```/\````_\```_P```#_P``#_````/_`` +M`/\````_\```_P```#_P``#_`````_```/\````!\```_P````#P``#_```` +M`'```/\`````<```_P`````P``#_`````#```/\`````,```_P`````P``#^ +M#_P``#```/P?_``',```^!_\``^P``#X/_X`#_```/!__P!/\```X/__`.?P +M``#A__\!__```/'__X'_\```____P?_P``#____P__```"@```!`````@``` +M``$`"````````!````````````````$````!``````````"```"`````@(`` +M@````(``@`"`@```P,#``,#\ +M]`````````````#S\;P'\O0`````````````````````````````!VU$0VWQ +M``````````#Q\/'PO+P'!P?O[^_P``````````#TO`<'O/3S```````````` +M``````````````````#O2D05^/0``````/3P\O+Q!Y.\!P>3[^_W]P?T```` +M``#T\.\'!_3R\0```````````````````````````````.Q$1$0<`````/+P +M\O+PDT<7O`<';T:3]_?O!_,`````\^\'!_3SO/,````````````````````` +M``````````#S;D1#$NX``/+P\?+N;R#Y%P<'!V\@(&_W[^\'\@``]`<'!_+S +M\0<```````````````````````````````````?J1$/K\O*\\/&31B`@^1<' +M!P=O("`@1ASO!P?R``<'!_#T\KSP```````````````````````````````` +M````'$1#1`<'O/!O("`@(/D7!P<';R`@("#IDP<'O+SO![ST\O`']``````` +M``````````````````````````````!N1.\'O/!O("`@("#Y%P<'!V\@("`@ +M'Q^3\;R\!P?S\_`'\P``````````````````````````````````````\?<' +M!P=O("`@("`@^1<'!P=O("`@(!\?Z6^\\/"\\_&\\@`````````````````` +M`````````````````````/#O!P=N'R`@("`@(/D7!P<';R`@("`?'Q\!;O#Q +M\`>\\0```````````````````````````````````````/+O!P>3'Q\@("`@ +M("#Y%P?O[V\@("`@'Q\?`0$<\?&\\``````````````````````````````` +M```````````'[P>3'Q\?("`@("`@^1<'[^]O("`@(!\?'P$!`1SR\KP````` +M``````````````````````````````````#Q[^\'`1\?'R`@("`@(/D7!^_O +M;B`@("`?'Q\!`0%%O/+P\P`````````````````````````````````````` +M!^\''`$?'Q\@("`@("!%$A(3$Q-$1$7I'Q\?`0$!`6[Q\?`````````````` +M````````````````````````\>_O!P$!'Q\?("#I1!/K]^\'!P<'!^_W%!\? +M'P$!`0$![O"\`````````````````````````````````````+SO[^\!`1\? +M'^GMO`<'!P<'!P<'!P<'!Q0?'Q\!`0$!`1SPO/,````````````````````` +M```````````````'[P?M`0$?'^F\!P<'!_`'')+O[^\'!P<3'Q\?`0$!`0%N +M\+SR````````````````````````````````````!^^\10$!'^F\!P<'O!P@ +M^1?O[_=N("`@(!\?'P$!`0$!1;P'\0`````````````````````````````` +M``````?OO`$!`1_N!P?OZT8@(/D7[^_W;NE$1$1$1$1$1`$!`0&\!_$````` +M```````````````````````````````'[[P!`0%N!P<';>D@("!%$A(3$NKM +M]_?O[^_O[^Q$`0$!O`?Q````````````````````````````````````!P>\ +M`0$!\`<'[$4@("`3[/CL^&WKD@<'!P<'!P?O$P$!`>X'\0`````````````` +M``````````````````````<'O`$!;@<'[T0@("`4DNR2DO?O[VWO!^MN;@<' +M!VT!`0'N!_`````````````````````````````````````'![P!`0<'!Y)% +M("#K[Y*2[^_O]P<';0<2'Q]N!P?W1`%%!P?P```````````````````````` +M````````````!P<'`0&\!P?K'Q]%O/?OO+SP\+P'O._L$Q\?1;P'[Q0!10<' +M\`````````````````````````````````````<'O.X'\`<'$@<'!P?OO/#Q +M\?'P\`<'ZQ+O[P>\!P<2[NX'[_`````````````````````````````````` +M``"\![SP!_`'!^KPO`?O[_#Q\O/S\O`'[>T2\/#Q!P<'$KP'!^^\```````` +M````````````````````````````O`>\\`?P!P?JO+R\]P?P\O/T]/+QO)*2 +M$O#Q\;P'!^J\!P?OO````````````````````````````````````+R\O+P' +M\`<'$P<'!^\'\/+S]/3R\;R2[1*\[NZ\!P?J!P<'[[P````````````````` +M``````````````````#PO`21`$!1>_W!P`````````` +M`````````````````````````/'PO`$!`1^3!P?OZD4@(/E&[?<';R`@Z>D4 +M]P?O%`$!`47O]P<```````````````````````````````````#Q\?`!`0$? +M'^X'!P?M$T;Y1N\'!V\@($03[P?O$@$!`0%%[Y+O[P>\]``````````````` +M````````````````\?'P`0$!'Q\?[[P'!^_L$Q)M[/@2%.J2!P<'$@$!`0$! +M1>^2!_#O[.R2\0```````````````````````````/'Q\`$!`1\?'Q]OO`<' +M!P<'[_?W[P<'!P>\DQ\?`0$!`47OD@?Q\+P'[_<'```````````````````` +M``````#Q\?$!`0$?'Q\?($:3![P'!P<'!P<'O+SO11\?'P$!`0%%[Y+O\/"\ +M!P<'O+P`````````````````````````\?+Q`0$!'Q\?'R`@("!&D^\'![P' +MDT8@(!\?'Q\!`0$!1??M[[SPO`?O[P?S\@```````````````````````/'R +M\`$!`1\?'Q\@("`@(/E&!P<';R`@("`?'Q\?`0$!`47W[>_P\+P'[^_W[_/Q +M``````````````````````#Q\O`!`0$?'Q\?("`@("#Y1@<'O&\@("`@'Q\? +M'P$!`0%%]^WW\?`'!^_O]Y+OO/(`````````````````````\?*\`0$!'Q\? +M'R`@("`@^48'![QO("`@(!\?'Q\!`0$!1??LDO&\!P?O[_>2[>_O```````` +M`````````````/'RO`$!`1\?'Q\@("`@(/D7!P>\;R`@("`?'Q\?`0$!`462 +M[._PO`<'[^_W[>SLDO,```````````````````#Q\@2[>SL[_(```````````````````"\\+P' +M!P<'O`?O[^_O[^\'![R\\/#P\?&\O`<'!P?O[_>2[>WW\+P'[^_WDNWL[/?Q +M``````````````````#Q$D1$1$3L]`````````````````#T\O/S!P?O[^_O +M!P?O\+SL;?>\!^_O]Y+M[/CM!P````````````````#T;1%#1$3J]``````` +M`````````````+ST]/3T\_'PO`?O[^_S!VWL]P?LZ^WW[Y+L[)(````````` +M````````["(10T1$\`````````````````````#W\O3T]//Q\+P'[^_W[_+O +M$NUM!P``````\NWL````````````````[T,B0T1$[P`````````````````` +M````[?#T]/3R\?"\!^_ODI('!^T3\@``````````!P``````````````\401 +M(D1$;@````````````````````````?P]/3T\O'P!P?O[Y+M]_`'[/<````` +M````````````````````]!)#0T1$2O0```````````````````````#RO/3T +M]/+Q\`<'[_>2[&WO\VWX`````````````````````````/A#0T-$1+P````` +M`````````````````````//T]//R\;P'!^_W[6WT\N_RZO,````````````` +M`````````.]#0T-$1!P```````````````````````````#T\_3S\O&\!P?O +M]_@`````O/3O`````````````````````._O0T-$1.P````````````````` +M`````````````/#R\_+PO`<'[Y('``````#R``````````````````````#M +M$A)$1&WT``````````````````````````````#P[_#R\+P'[^^2```````` +M`/0`````````````````````\Y+Q\NWQ```````````````````````````` +M``````?M!_"\!^_O]P````````````````````````````````#R[._Q```` +M````````````````````````````````O.\'O`?O[^\````````````````` +M``````````````````````````````````````````````````````````#S +M\/"\!^_O```````````````````````````````````````````````````` +M``````````````````````````#S]/+R!_(````````````````````````` +M``````````````````````````````````````````````````````#S\?#P +M`````````````````````````/____'______\?_P'_^7___@_\`'_@?__^! +M_@`/\!___\#X``/@'___X/```>`?___@8```P#____````!`/___^``````_ +M___\`````'____P`````_____`````'____X`````_____@````#____\``` +M``'____P`````?___^`````!____X`````#____@`````/___^``````____ +MX`````#____@`````/___^``````____X`````#____@`````/___^`````` +M____X`````#____@`````/___^``````____X`````#____@`````/___^`` +M````____X`````#____@`````/___^``````____X`````#____@``````__ +M_^```````___X``````!___@``````#__^```````'__X```````/__@```` +M```?_^```````!__X```````#__@```````/_^````````__X```````#__@ +M```````/_\`__@````__@'__````#_^`__\```^/_P'__P``'^_^`___```? +M__P#__\``!___`?__X``#__X#___@`>/__`?___`!]__\!___\`/[__P/___ +MX`____A____P#_________@/_________@?_________A___*````%H```"T +M`````0`(``````!8(````````````````0````$``````````(```(````"` +M@`"`````@`"``("```#`P,``P-S``/#*I@`$!`0`"`@(``P,#``1$1$`%A86 +M`!P<'``B(B(`*2DI`%5550!-34T`0D)"`#DY.0"`?/\`4%#_`),`U@#_[,P` +MQM;O`-;GYP"0J:T````S````9@```)D```#,```S````,S,``#-F```SF0`` +M,\P``#/_``!F````9C,``&9F``!FF0``9LP``&;_``"9````F3,``)EF``"9 +MF0``FSQ```` +M`````````````````````/*\O+P'\/(````````````````````````````` +M````````````````````````````````````````````````````\?/O$I(` +M`````````````````````/,'O/"\O`<'![SQ```````````````````````` +M`//S\_3S\P```````````````````````````````````````````/+P\1,5 +M$>\```````````````````"\!_'P\+R\!P<'!^^\\P`````````````````` +M`/3R\`<'!_3T````````````````````````````````````````````\/!M +M1$,B$_$```````````````#T!_#Q\?#PO+P'!P<'[^_OO``````````````` +M``#T\0?O!P?R]/,```````````````````````````````````````````#T +M[T1$0R)#;?0`````````````\0?R\?'PO`>\!P<'[N_O[^_O[_,````````` +M````]/('[P<'\`#S\0`````````````````````````````````````````` +M``#T;41$0T,B[0```````````+SP\O+Q\0=OD[P'!P?OD^_O[_?W[_`````` +M``````#S!^\'![P`]/'P```````````````````````````````````````` +M``````#S2D1$0R)$!P```````//P\?+R\O"31OF3O`<'!^\@;^_O]_?O[[ST +M````````]`?O!P<']/3R!_,````````````````````````````````````` +M``````````#O1$1#(D,3\@````#R\/'Q\O(';R#Y^9,'!P<'[R`@1I/W[^_O +M[P?S``````#Q[P<'!_/T\_'O```````````````````````````````````` +M``````````````#L1$1#0Q'K````\KSP\?+R[T8@(/GYDP<'!P>3("`@(&_W +M[^_O![SS````\N\'!P?Q]//Q![P````````````````````````````````` +M`````````````````/1M1$1#(D/M`/*\\/#QO&\@("`@^?F3!P<'!Y,@("`@ +M($8<[^\'![SS`/,'[P<'O/3S\O#O\P`````````````````````````````` +M`````````````````````/!$1$0B$>KPO+SP\>Y&("`@("#Y^9,'!P<'DR`@ +M("`@(!]O[P<'![SQ!^\'!P?T\_+P!P<````````````````````````````` +M`````````````````````````.]$1$-$[P>\O/`'1B`@("`@(/GYDP<'!P?O +M("`@("`@'Q]O![P'O+P'!P<'\_3R\;P']``````````````````````````` +M`````````````````````````````&Y$1.\'![SP!^D@("`@("`@^?F3!P<' +M!Y,@("`@("`?'Q]O\[R\O/`'!_+T\O&\!_,````````````````````````` +M````````````````````````````````].KW!P<'O`?I("`@("`@("#Y^9,' +M!P<'[R`@("`@(!\?'Q]O![R\\+P']//Q\`?Q```````````````````````` +M````````````````````````````````````!P<'![SOZ1\@("`@("`@(/GY +MDP<'[^^3("`@("`@'Q\?'Q]%!_#P\;R\\?`'\``````````````````````` +M`````````````````````````````````````/`'!P<'!^D?'R`@("`@("`@ +M^?F3!P?O[Y,@("`@("`?'Q\?'P%%!_#Q\0<'O/`````````````````````` +M``````````````````````````````````````#R!^\'!P=%'Q\?("`@("`@ +M("#Y^9,'!^_O'"`@("`@(!\?'Q\?`0%NO/'Q\N_P```````````````````` +M``````````````````````````````````````````?O[P<';A\?'Q\@("`@ +M("`@(/GYDP?O[^\<("`@("`@'Q\?'Q\!`0%N\/'R\;P````````````````` +M``````````````````````````````````````````#Q[^\'!Y,?'Q\?'R`@ +M("`@("`@^?F3!^_O[Y(@("`@("`?'Q\?'P$!`0'M\?+R!P`````````````` +M``````````````````````````````````````````````?O[P<'`1\?'Q\? +M("`@("`@("#Y^9,'[^_O[2`@("`@(!\?'Q\?`0$!`44'\O+Q\``````````` +M``````````````````````````````````````````````#P[^_O!VX!'Q\? +M'Q\@("`@("`@("!&;FUM;6WJ147I("`@'Q\?'Q\!`0$!`6[R\?&\]``````` +M``````````````````````````````````````````````````?O[^\'`0$? +M'Q\?'R`@("`@1403;>OL[.SL[.SL^&WJ$T0?'Q\?'P$!`0$!`>_Q\/#P```` +M``````````````````````````````````````````````````#R[^_O!T4! +M`1\?'Q\?("`@;FWKDN_O[^_O[^_O[^_O[^_L1!\?'Q\?`0$!`0$!;O#PO/`` +M``````````````````````````````````````````````````````?O[^_N +M`0$!'Q\?'Q\@1;R\[^\'!P<'!P<'!P<'!P<'!Y)$'Q\?'Q\!`0$!`0$!!_"\ +MO/0`````````````````````````````````````````````````````!^_O +M[P_P!P<'!P<'O/#P!P<'!P>\\?"\]T0?'Q\?'P$!`0$!`0'O +M\+P'\@`````````````````````````````````````````````````````' +M[^\'[P$!`1\?'Q\'O`<'!P>\\.]O1I/O[^_O;B`@1F[M1!\?'Q\?`0$!`0$! +M`9+PO`?R```````````````````````````````````````````````````` +M`._O[[QN`0$!'Q\?![P'!P<'\.]&(/GYD^_O[_?L("`@("`@'Q\?'Q\!`0$! +M`0$!;KR\!_(````````````````````````````````````````````````` +M````[^_O\$4!`0$?'P>\!P?O]_=&("`@^?F3[^_O]^P@("`@("`?'Q\?'P$! +M`0$!`0%%O`<'\@`````````````````````````````````````````````` +M``````#O[^_P10$!`1]N\`<'!^T3("`@("#Y^9/L^.SW["#KZA(2ZNKJZNKJ +MZA,!`0$!`46\!P?Q```````````````````````````````````````````` +M``````````?O!_!%`0$!1?`'!P?W$^D@("`@($43ZFWX;1(2(._O[^_O[^_O +M[^_O[1,!`0$!1;P'!_$````````````````````````````````````````` +M````````````!^\'O$4!`0'OO`<'[VU%("`@("`3^)+L;>IM^/CK[P<'!P<' +M!P<'!P?O;0$!`0%%O`<'\0`````````````````````````````````````` +M```````````````'[P>\10$!`?`'!P?M$R`@("#I$^WL[)+O[P?O^.KO!P?O +MDN\'[KP'!^_L1`$!`44'!P?Q```````````````````````````````````` +M``````````````````<'![Q%`0%N\`<'[VT?("`@(!+M[)+M[.SL[)('[Q+W +M!^_J'Q\?;KP'!_<3`0$!10<'!_$````````````````````````````````` +M````````````````````!P<'O$4!`0<'!P?W$R`@("#L]_?W[??O[^_W]P?P +M!Q+O[Q(?'Q]%\`<'[VT>`0%N!P<'\0`````````````````````````````` +M```````````````````````'!P>\1`$!\0<'[^Q$("`@;KSO[Y+O![R\O`<' +M![SQ[VWO$Q\?'Q^\!P?O[$0!`6X'!^_P```````````````````````````` +M``````````````````````````<'![QN143Q!P?OZT1%147N!P?W![SP\/#P +M\+R\O+R\Z_<2145%1>\'!P?W$T5%;@<'[_`````````````````````````` +M````````````````````````````!P<'O+R\[_$'!^]M!P<'[_$'[P>\\/'Q +M\?'Q\+R\!^_W[!('!P<'[[P'!_<2O+R\!P?O\``````````````````````` +M```````````````````````````````'!P>\\/#W\0<'[^KP\+SW\`?OO/#Q +M\O+S\O+Q\+SODN]M$KSP\/'O\`<'[Q*\O`<'[^_P```````````````````` +M``````````````````````````````````<'O+SP\9+P!P?OZO"\O.^\[^^\ +M\/+S\_3S\_+QO`?M[VT2\/#Q\0?P!P?O$[P'!P?O[_`````````````````` +M````````````````````````````````````O`>\O/#Q[_`'!^]M\+R\[_#O +M[_#Q\O/T]/3S\O'P!^T'[!+P\/'Q![P'!^\2O`<'!^_OO``````````````` +M``````````````````````````````````````"\![R\\/`'\`<'[VWO!P<' +M\`?W\/'R\_3T]//R\?`'[>_W$KR\O+P'O`<'[Q('!P<'[^^\```````````` +M`````````````````````````````````````````+P'O`=%147Q!P?O[$5& +M1D:\!Y*\\/'R\_3S\O+PO._M]^\31D5%1>V\!P?O$T5%;P?O[[P````````` +M````````````````````````````````````````````O+R\!T0!`;P'!P>2 +M$R`@(.V\[^_P\?+R\O+R\?"\[^_W[Q,?'Q\?[P<'!_<4`0%N!^_OO``````` +M``````````````````````````````````````````````#PO/`'1`$![P<' +M!^_JZ2`@1O$']P?P\?'Q\?'PO`?W[0?O$Q\?'Q_P!P?O[$0!`6X'[_>\```` +M`````````````````````````````````````````````````/"\\`=$`0%% +M\`<'[^Q$("`@;_`'[^_P\/#P\+P'DNT'!^\3'Q\?1;P'!^]M`0$!;N_O][P` +M````````````````````````````````````````````````````\+SP!T0! +M`0&\!P<']Q,@("`@[[P'!^\'!P?O]Y*2!P<'[Q,?'Q\2[P<']Q0!`0%N[^_W +M!P````````````````````````````````````````````````````#PO/"\ +M1`$!`6[P!P?O[!,@("`@[_&\!_+P!^\'![P'!P?O$B`?1/CO!^_K1`$!`6[O +M[_<'`````````````````````````````````````````````````````/#P +M\+Q$`0$!`?>\!P?O^$0@("`@1N_Q\+R\O/`'[_'PO`?J(!_J[P<'DA,!`0$! +M;N_W]P<````````````````````````````````````````````````````` +M\?#QO$0!`0$!`;P'!P?OZT0@("`@^482!P`````````````````````````````````````````````````` +M``#Q\/&\1`$!`0$?1?`'!P?O^!/I("#Y^6_O[P<''"`@("`@11*2!P?OZT0! +M`0$!`6[O]Y('\P`````````````````````````````````````````````` +M`````/'P\;Q$`0$!`1\?[?$'!P?ODFT31OGY;^_O!P<<("`@11-M]P<'[^M$ +M`0$!`0$!;N_WD@?O[^\'\0`````````````````````````````````````` +M````````\?#Q\$0!`0$!'Q\?;O"\!P<'[^WJ$T1NDN\'!_A%1!/KDN\'!P?X +M1`$!`0$!`0%N[_>2!_$']^WL[0?T```````````````````````````````` +M``````````#Q\?'P1`$!`0$?'Q\?10?P!P<'!^_W[>SK;>KJ;?CL]^\'!P>\ +M!T0?`0$!`0$!`6[ODI('\?'PO.^2[9('```````````````````````````` +M`````````````/'Q\O!%`0$!`1\?'Q\@'^WQO`<'!P<'[^_O[^_O[P<'!P>\ +M\/2[0?Q\?"\!P?O[^\']``````````````````````` +M````````````````\?'R\$4!`0$!'Q\?'R`@($;MO/"\!P<'!P<'!P<'!P?P +M\0=%'Q\?'P$!`0$!`0%N]Y+M!_#Q\+P'!P?O![R\]``````````````````` +M``````````````````#Q\?+P10$!`0$?'Q\?("`@("`@19.\\/'Q\/#P\/&\ +M[V[I("`?'Q\?`0$!`0$!`6[WDNT'O/#PO`<'[^_OO/+Q]``````````````` +M`````````````````````/'R\O!%`0$!`1\?'Q\@("`@("`@(/GY;Y*2]^_M +M("`@("`@(!\?'Q\!`0$!`0$!;O?M[>\'\/"\!P?O[^_W\0#T```````````` +M````````````````````````\?+R\$4!`0$!'Q\?'R`@("`@("`@^?EO!P<' +MO!P@("`@("`@'Q\?'P$!`0$!`0%N]^WM[_#PO+P'!^_O[_>2\//Q```````` +M``````````````````````````#Q\O+P10$!`0$?'Q\?("`@("`@("#Y^6\' +M!P>\'"`@("`@("`?'Q\?`0$!`0$!`462[>SW\?"\O`<'[^_O]Y+MO/#R```` +M`````````````````````````````/'R\KQ%`0$!`1\?'Q\@("`@("`@(/GY +M;P<'![P<("`@("`@(!\?'Q\!`0$!`0$!19+M[)+Q\+P'!P?O[_?WDNV2!^\` +M````````````````````````````````\?+RO$4!`0$!'Q\?'R`@("`@("`@ +M^?EO!P<'O),@("`@("`@'Q\?'P$!`0$!`0%%DNWL]_'PO`<'!^_O]_>2[>R2 +M][P```````````````````````````````#Q\O*\10$!`0$?'Q\?("`@("`@ +M("#Y^6\'!P>\DR`@("`@("`?'Q\?`0$!`0$!`462[.SO\?"\!P<'[^_WDI+M +M[.SMD@```````````````````````````````/'R\0=%`0$!`1\?'Q\?("`@ +M("`@(/GYDP<'O+SO("`@("`@(!\?'Q\!`0$!`0$!19+L[._Q\+P'!P?O[_>2 +MDNWL[/?O````````````````````````````````\?+Q!T4>(T0C(R-$145$ +M`45%145%1463!P>\\.]%145%145%145%145$1$1$1$1N[>SL[_#PO`<'[^_O +M]Y+M[>SL]P?P``````````````````````````````#P\O$'[^\'!P<'!P<' +M!^_W]_?O[^\'![P'![SP\+R\!P?O[^\'!P>\\/'P\+P'[_?M[.SO\/"\!P?O +M[^_WDNWM[.SM\;P``````````````````````````````/#Q\?#PO+P'!P<' +M[^_O[_?W[^_O[P<'!P<'O+SP\/'Q\O+Q\/"\!P<'[^_O]Y*2[>SL[._PO+P' +M!^_O[_>2[>SL[.SS\0````````````````````````````#T\/'Q\/"\O`<' +M!P<'[^_O]_?O[^_O!P<'![R\\/#Q\?+R\O'P\+P'!P?O[^_WDI+M[.SL[_"\ +MO`<'[^_O]Y+M[.SL^//R```````````````````````````````'!P<'[^\' +M!P>\\?`'!^_O[^_O[^\'!P>\\/#Q\/#P\+P'!P<'!P<'!P<'[^_O]_?M[>WO +M![P'!P?O[_?WDNWL[.SX!_``````````````````````````````O!(4%41$ +M1$1N\/0```````````````````````#T\_+S\_('[_>2DI*2[P<'!^\'\KR2 +M;?B2!P<'!^_O]_>2[>SL^/CO!P```````````````````````````/+J$")# +M(D1$1`<```````````````````````````#S\/3T]/3T]//R\?"\!P?O[Y*\ +M``?L$^R2!P<'DFUMZ_CK[.SX^)+O````````````````````````````^!`1 +M(D-$1$0<`````````````````````````````/$']/3T]/3S\O+Q\+P'!^_O +M]_?P]._K$Y*2[^KX!P````#Q!_?X[.T``````````````````````````!Q$ +M$")#(D1$;O0`````````````````````````````\/?T]/3T]//R\?'PO`<' +M[^_W]^_R\O=MZO@2\```````````]._L[0````````````````````````"\ +M$Q`10T-$1$KT``````````````````````````````#P[/'T]/3T\_+Q\/"\ +M!P?O[_>2D@?T!^SJZ_0```````````````?O```````````````````````` +M`!(1(B)#1$1$\````````````````````````````````/+MO/3T]/3S\O'P +MO+P'!^_O]Y+MDKP'^.P3]P`````````````````````````````````````` +M`/3K0Q!#0T1$1!P`````````````````````````````````].\']/3T]//R +M\?"\!P<'[^_WDNWM]_#T[^N2```````````````````````````````````` +M````[1`10R)$1$3L````````````````````````````````````\+ST]/3T +M\_+Q\+P'!^_O[_>2[!+L[_*\%6T````````````````````````````````` +M``````=$$2)#1$1$;?(```````````````````````````````````#T\O3T +M]/3S\O'PO`<'[^_O]^T3[`#O[0?O%/$````````````````````````````` +M``````#P$A`10T-$1$J\```````````````````````````````````````` +M]/3T]//R\?"\!P?O[_?WZNT`````]_#W[0`````````````````````````` +M`````````.LB$2)#1$1$[P`````````````````````````````````````` +M``#S]/3T\_+Q\+P'!^_O]^SL````````!_*2```````````````````````` +M`````````/`'$B(B0T1$1/CU```````````````````````````````````` +M`````/'P]//S\O'PO`<'[^_W^/0`````````\?/P```````````````````` +M````````````[.\20R)$1$1N```````````````````````````````````` +M````````\0>\\_+R\?"\!P?O[_>2````````````]``````````````````` +M``````````````#W$FUM1$1$2O(````````````````````````````````` +M````````````!^\'\O'P\+P'!^_ODO`````````````````````````````` +M``````````````````"2!_'Q'&WO```````````````````````````````` +M``````````````#T]^WO\?"\O`<'[^_M\P`````````````````````````` +M`````````````````````/22O/+R\0`````````````````````````````` +M``````````````````#T[^_O\+P'!P?O[Y+T```````````````````````` +M``````````````````````````"\[`?Q```````````````````````````` +M``````````````````````#TO`<'O`<'!^_O]_0````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````\O#Q\`?O[^_W\@`````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````//S]/*\[_<'```````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````#S]/3T\@<````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````]/'P\/(````````` +M``````````````````````````#______X_______\#__P___@/______\#_ +M_@__^`#__^!__\#__`?_\``__X!__\#__`/_P``?_P!__\#__`'_@``'_@)_ +M_\#__@'_```#_@1__\#__P#\````_`!__\#__X!X````?`#__\#__\!P```` +M.`#__\#__\`@````$`#__\#__^````````'__\#___````````'__\#___@` +M``````/__\#___@```````?__\#___P```````___\#___@``````!___\#_ +M__```````#___\#___```````#___\#__^```````#___\#__^```````!__ +M_\#__\````````___\#__\````````___\#__X````````___\#__X`````` +M``?__\#__X````````?__\#__X````````?__\#__X````````?__\#__X`` +M``````?__\#__X````````?__\#__X````````?__\#__X````````?__\#_ +M_X````````?__\#__X````````?__\#__X````````?__\#__X````````?_ +M_\#__X````````?__\#__X````````?__\#__X````````?__\#__X`````` +M``?__\#__X````````?__\#__X````````?__\#__X````````?__\#__X`` +M``````?__\#__X````````?__\#__X````````?__\#__X````````?__\#_ +M_X````````?__\#__X````````?__\#__X````````?__\#__X````````/_ +M_\#__X`````````__\#__X`````````'_\#__X`````````#_\#__X`````` +M````_\#__X``````````?\#__X``````````/\#__X``````````O\#__X`` +M````````'\#__X``````````#\#__X``````````#\#__X``````````!\#_ +M_X``````````!\#__X``````````!\#__X```````````\#__X`````````` +M`\#__X```````````\#__P```````````\#__X```````````\#__P`?__@` +M`````\#__@!___P``$```\#__@#___P````/`\#__`#___P````_P\#_^`'_ +M__P```!_\\#_^`/___P```!__\#_X`?___P```!__\#_X`____X```!__\#_ +MP`____X``!`__\#_@!____^``#P__\#_@#____^``'X__\#^`#____^``'\? +M_\#^`/____^``/^__\#^`/_____``/___\#_`?_____``/___\#_`______@ +M`/___\#_P______P`/___\#________\`/___\#_________`/___\#_____ +M____P/___\#_________\'___\`H````%@```"P````!``@``````!`"```` +M```````````!`````0``````````@```@````("``(````"``(``@(```,#` +MP`#`W,``\,JF``0$!``("`@`#`P,`!$1$0`6%A8`'!P<`"(B(@`I*2D`5555 +M`$U-30!"0D(`.3DY`(!\_P!04/\`DP#6`/_LS`#&UN\`UN?G`)"IK0```#,` +M``!F````F0```,P``#,````S,P``,V8``#.9```SS```,_\``&8```!F,P`` +M9F8``&:9``!FS```9O\``)D```"9,P``F68``)F9``"9S```F?\``,P```#, +M,P``S&8``,R9``#,S```S/\``/]F``#_F0``_\P`,P```#,`,P`S`&8`,P"9 +M`#,`S``S`/\`,S,``#,S,P`S,V8`,S.9`#,SS``S,_\`,V8``#-F,P`S9F8` +M,V:9`#-FS``S9O\`,YD``#.9,P`SF68`,YF9`#.9S``SF?\`,\P``#/,,P`S +MS&8`,\R9`#/,S``SS/\`,_\S`#/_9@`S_YD`,__,`#/__P!F````9@`S`&8` +M9@!F`)D`9@#,`&8`_P!F,P``9C,S`&8S9@!F,YD`9C/,`&8S_P!F9@``9F8S +M`&9F9@!F9ID`9F;,`&:9``!FF3,`9IEF`&:9F0!FF]O(/D';R!% +MO/'P````````````````!VX?(/D';R`?1?#T``````````````#T!Q\?16[X +MZT0?`0?S``````````````#P[Q_L!QR2;D4?`6[Q``````````````"\'&[M +MZ47KZ^SLZD6\``````````````#P'.\2;O?P!^M%[$6\``````````````#P +M\`?M]_#T\>R\[^\'``````````````#QD^]M[0?QO/AN[VX'```````````` +M``#Q'&[M1??W]^MM^$4'``````````````#R'`'M[$7W;FV21$7O\?,````` +M``````#R'`$?;O?O!^Q%`47O\`?P``````````#S'`$?("`';R`?`47WO._O +M\0````````#S[45%1D;NDT9%16Z2O._M[P````````#N[^\'[P?P\?"\!^_M +MO._M[P```````/-$$O,`````\O3R!_<'[^\'[0```````!)$[@``````\O3R +M!_>2D@``````````DD3M`````````/3Q!^WR!_,`````````[Y(````````` +M`/('!P<`````````````````````````````\KP``````````/.//`#S`CP` +M\``\`/@`?`#X`'P`\`!\`/``?`#P`'P`\`!\`/``?`#P`'P`\`!\`/``'`#P +C``P`\``$`/``!`#P``0`X>`$`./@/`#'\!P`S_#\`/_\_``` +` +end diff --git a/sys/wince/resource.h b/sys/wince/resource.h index b68489aee..babfb343f 100644 --- a/sys/wince/resource.h +++ b/sys/wince/resource.h @@ -12,6 +12,7 @@ #define IDI_WINHACK 107 #define IDC_WINHACK 109 #define IDC_SPHONE_DIALOGBAR 111 +#define IDC_SPHONE_TEXTDIALOGBAR 112 #define IDR_MAINFRAME 128 #define IDB_TILES 129 #define IDD_TEXT 130 @@ -110,6 +111,7 @@ #define IDC_ABOUT_VERSION 1327 #define IDC_TEXT_CONTROL 1331 #define IDC_ABOUT_COPYRIGHT 1332 +#define IDC_TEXT_TOGGLE_WRAP 1333 #define IDM_SAVE 32771 #define IDM_HELP_LONG 32772 #define IDM_HELP_COMMANDS 32773 @@ -147,6 +149,9 @@ #define IDM_HELP_MENU 32828 #define IDM_VIEW_OPTIONS 32829 #define IDM_DIRECT_COMMAND 32830 +#define IDM_CMD_DLG 32832 +#define IDS_TEXT_WRAP 32833 +#define IDS_TEXT_UNWRAP 32834 // Next default values for new objects // diff --git a/sys/wince/winMS.h b/sys/wince/winMS.h index d5655bfc6..07ab0b4ec 100644 --- a/sys/wince/winMS.h +++ b/sys/wince/winMS.h @@ -173,12 +173,14 @@ void mswin_popup_display(HWND popup, int* done_indicator); void mswin_popup_destroy(HWND popup); #if defined(WIN_CE_SMARTPHONE) -void NHSPhoneDialogSetup(HWND hDlg, BOOL is_edit, BOOL is_fullscreen); +void NHSPhoneDialogSetup(HWND hDlg, UINT nToolBarId, BOOL is_edit, BOOL is_fullscreen); #endif void mswin_read_reg(void); void mswin_destroy_reg(void); void mswin_write_reg(void); +BOOL mswin_has_keyboard(void); + void mswin_set_fullscreen(BOOL is_fullscreen); #endif /* WINmswin_H */ diff --git a/sys/wince/winhack.c b/sys/wince/winhack.c index b319f6b30..3fc8cf4a4 100644 --- a/sys/wince/winhack.c +++ b/sys/wince/winhack.c @@ -67,11 +67,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, _nethack_app.bNoHScroll = FALSE; _nethack_app.bNoVScroll = FALSE; -#if defined(WIN_CE_PS2xx) || defined(WIN_CE_POCKETPC) || defined(WIN_CE_SMARTPHONE) - _nethack_app.bCmdPad = TRUE; -#else - _nethack_app.bCmdPad = FALSE; -#endif + _nethack_app.bCmdPad = !mswin_has_keyboard(); _nethack_app.bWrapText = TRUE; _nethack_app.bFullScreen = TRUE; diff --git a/sys/wince/winhack.rc b/sys/wince/winhack.rc index e867f6e17..9340c5509 100644 --- a/sys/wince/winhack.rc +++ b/sys/wince/winhack.rc @@ -160,11 +160,12 @@ BEGIN PUSHBUTTON "Quit",IDCANCEL,55,110,50,14 END -IDD_NHTEXT DIALOG DISCARDABLE 0, 0, 83, 97 +IDD_NHTEXT DIALOG DISCARDABLE 0, 0, 100, 97 STYLE WS_CHILD | WS_BORDER FONT 8, "System" BEGIN - DEFPUSHBUTTON "OK",IDOK,15,80,50,14 + DEFPUSHBUTTON "OK",IDOK,0,80,50,14 + PUSHBUTTON "Wrap",IDC_TEXT_TOGGLE_WRAP,50,80,50,14 EDITTEXT IDC_TEXT_CONTROL,5,0,70,75,ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_HSCROLL END @@ -283,8 +284,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,4,1,0 - PRODUCTVERSION 3,4,1,0 + FILEVERSION 3,5,0,0 + PRODUCTVERSION 3,5,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x9L @@ -304,10 +305,10 @@ BEGIN VALUE "FileDescription", "nethackm\0" VALUE "FileVersion", "3, 5, 0, 0\0" VALUE "InternalName", "nethackm\0" - VALUE "LegalCopyright", "Copyright © 2005\0" + VALUE "LegalCopyright", "Copyright © 1985-2009\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "nethackm.exe\0" - VALUE "PrivateBuild", "050102\0" + VALUE "PrivateBuild", "090914\0" VALUE "ProductName", "NetHack\0" VALUE "ProductVersion", "3, 5, 0, 0\0" VALUE "SpecialBuild", "\0" @@ -345,6 +346,8 @@ STRINGTABLE DISCARDABLE BEGIN IDM_VIEW_KEYPAD "Show/Hide keypad." IDS_CAP_VIEW "View" + IDS_TEXT_WRAP "Wrap" + IDS_TEXT_UNWRAP "Unwrap" END STRINGTABLE DISCARDABLE diff --git a/sys/wince/winhcksp.rc b/sys/wince/winhcksp.rc index 15d67f34e..ddc3bf54c 100644 --- a/sys/wince/winhcksp.rc +++ b/sys/wince/winhcksp.rc @@ -42,11 +42,11 @@ BEGIN BEGIN MENUITEM "Options", IDM_VIEW_OPTIONS MENUITEM "Keypad", IDM_VIEW_KEYPAD - MENUITEM SEPARATOR - MENUITEM "Entire Map", IDM_MAP_FIT_TO_SCREEN + MENUITEM "Cmd", IDM_CMD_DLG + MENUITEM SEPARATOR MENUITEM "ASCII", IDM_MAP_ASCII8X8 - MENUITEM "Use Tiles", IDM_MAP_TILES - MENUITEM SEPARATOR + MENUITEM "Tiles", IDM_MAP_TILES + MENUITEM SEPARATOR MENUITEM "Help", IDM_HELP_MENU MENUITEM "Save", IDM_SAVE MENUITEM "Quit", IDM_EXIT @@ -59,7 +59,6 @@ BEGIN MENUITEM "Cancel", IDCANCEL END - ///////////////////////////////////////////////////////////////////////////// // // Accelerator @@ -245,6 +244,14 @@ BEGIN NOMENU, END +IDC_SPHONE_TEXTDIALOGBAR SHMENUBAR DISCARDABLE +BEGIN + IDC_SPHONE_DIALOGBAR, 2, + I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, IDOK, 0, NOMENU, + I_IMAGENONE, IDC_TEXT_TOGGLE_WRAP, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE, IDS_TEXT_WRAP, 0, + NOMENU, +END + #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// @@ -274,10 +281,10 @@ BEGIN VALUE "FileDescription", "nethackm\0" VALUE "FileVersion", "3, 5, 0, 0\0" VALUE "InternalName", "nethackm\0" - VALUE "LegalCopyright", "Copyright © 2005\0" + VALUE "LegalCopyright", "Copyright © 1985-2010\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "nethackm.exe\0" - VALUE "PrivateBuild", "050309\0" + VALUE "PrivateBuild", "090914\0" VALUE "ProductName", "NetHack For Smartphone\0" VALUE "ProductVersion", "3, 5, 0, 0\0" VALUE "SpecialBuild", "\0" @@ -329,6 +336,8 @@ BEGIN IDS_CAP_ENTIREMAP "Entire Map" IDS_CAP_NORMALMAP "Normal Map" IDM_HELP_MENU "Help Menu" + IDS_TEXT_WRAP "Wrap" + IDS_TEXT_UNWRAP "Unwrap" END #endif // English (U.S.) resources