]> granicus.if.org Git - nethack/commitdiff
Windows CE changes (from <Someone>)
authornethack.allison <nethack.allison>
Sat, 10 Oct 2009 14:39:53 +0000 (14:39 +0000)
committernethack.allison <nethack.allison>
Sat, 10 Oct 2009 14:39:53 +0000 (14:39 +0000)
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 <Someone>
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

18 files changed:
sys/wince/cesetup.bat
sys/wince/mhcmd.c
sys/wince/mhdlg.c
sys/wince/mhmain.c
sys/wince/mhmap.c
sys/wince/mhmap.h
sys/wince/mhmenu.c
sys/wince/mhmsgwnd.c
sys/wince/mhtext.c
sys/wince/mhtxtbuf.c
sys/wince/mhtxtbuf.h
sys/wince/mswproc.c
sys/wince/nhico.uu [new file with mode: 0644]
sys/wince/resource.h
sys/wince/winMS.h
sys/wince/winhack.c
sys/wince/winhack.rc
sys/wince/winhcksp.rc

index 5a45bcd32574b99f065d1dfff5d087bbbde01018..51869ec35164a28eb43bf2e0eeced120ea76319b 100755 (executable)
@@ -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
index b83ec6b90b30b991c3be562904af3bf5c8c11a76..e27da34dbf44002e1408ac80d54eed3949f04f4e 100644 (file)
@@ -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);
index fa3d39f9c89fae08149a2cd556fe7a415f5e3ed9..820bc6e38111d0b1467c120f6c5500d024e5d7e6 100644 (file)
@@ -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));
index 7b75f71e670f533e437349b5b10fea137f704894..df1486c45eb7f1b3ca048917748d69fdb2c8ae1d 100644 (file)
@@ -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 {
index c4281d9e83c81482bc61d350406981167d7de6e3..38abbbc12dff583bd540e2aaf916d2167872aef5 100644 (file)
@@ -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()
 {
index c0ad8c7c9c0be9865acd260c0de1e32560c71cb9..727565453c9da2a3107d4f2f101089024f216760 100644 (file)
@@ -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     
 
index 0174cb9451df97f2b6a4c2c1ed3ba0c572088535..658622b8423d917f21f1cb39499b17edab8ba807 100644 (file)
@@ -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 ) {
index 9b7f1f0de4e7c87bae6b61a5d3475515dd4396f6..16013097b6f585eeb5fb7fb6c59dc91a67c5536b 100644 (file)
@@ -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)
index 27596ec54c81bf71f6b0b08d4cb272b6152af428..56a93dea08919d77b660d64c461f1527cc53d804 100644 (file)
@@ -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 ) 
index ba8e3b6b6f700f4fbf72af18cbfbdf0df0453af6..1c9dd653a8791c17a33d5fac961f70c2f25b0c52 100644 (file)
@@ -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;
index ba726646fe9a6cf36073c59b9d5d592e542cf693..207938a40449478199d9e7930839efc511b460c6 100644 (file)
@@ -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 */
index d6c54da58ad48936c68f1f1b35dcf644e74823f7..a76335b5f7454cacc054aefd05421213e2989fa2 100644 (file)
@@ -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 <stdarg.h>
 
diff --git a/sys/wince/nhico.uu b/sys/wince/nhico.uu
new file mode 100644 (file)
index 0000000..d8f7e77
--- /dev/null
@@ -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<P``)G_``#,````S#,``,QF``#,
+MF0``S,P``,S_``#_9@``_YD``/_,`#,````S`#,`,P!F`#,`F0`S`,P`,P#_
+M`#,S```S,S,`,S-F`#,SF0`S,\P`,S/_`#-F```S9C,`,V9F`#-FF0`S9LP`
+M,V;_`#.9```SF3,`,YEF`#.9F0`SF<P`,YG_`#/,```SS#,`,\QF`#/,F0`S
+MS,P`,\S_`#/_,P`S_V8`,_^9`#/_S``S__\`9@```&8`,P!F`&8`9@"9`&8`
+MS`!F`/\`9C,``&8S,P!F,V8`9C.9`&8SS`!F,_\`9F8``&9F,P!F9F8`9F:9
+M`&9FS`!FF0``9IDS`&:99@!FF9D`9IG,`&:9_P!FS```9LPS`&;,F0!FS,P`
+M9LS_`&;_``!F_S,`9O^9`&;_S`#,`/\`_P#,`)F9``"9,YD`F0"9`)D`S`"9
+M````F3,S`)D`9@"9,\P`F0#_`)EF``"99C,`F3-F`)EFF0"99LP`F3/_`)F9
+M,P"9F68`F9F9`)F9S`"9F?\`F<P``)G,,P!FS&8`F<R9`)G,S`"9S/\`F?\`
+M`)G_,P"9S&8`F?^9`)G_S`"9__\`S````)D`,P#,`&8`S`"9`,P`S`"9,P``
+MS#,S`,PS9@#,,YD`S#/,`,PS_P#,9@``S&8S`)EF9@#,9ID`S&;,`)EF_P#,
+MF0``S)DS`,R99@#,F9D`S)G,`,R9_P#,S```S,PS`,S,9@#,S)D`S,S,`,S,
+M_P#,_P``S/\S`)G_9@#,_YD`S/_,`,S__P#,`#,`_P!F`/\`F0#,,P``_S,S
+M`/\S9@#_,YD`_S/,`/\S_P#_9@``_V8S`,QF9@#_9ID`_V;,`,QF_P#_F0``
+M_YDS`/^99@#_F9D`_YG,`/^9_P#_S```_\PS`/_,9@#_S)D`_\S,`/_,_P#_
+M_S,`S/]F`/__F0#__\P`9F;_`&;_9@!F__\`_V9F`/]F_P#__V8`(0"E`%]?
+M7P!W=W<`AH:&`):6E@#+R\L`LK*R`-?7UP#=W=T`X^/C`.KJZ@#Q\?$`^/CX
+M`/#[_P"DH*``@("`````_P``_P```/__`/\```#_`/\`__\``/___P`*"@H*
+M"O3R"@H*"@H*\_#R"@H*"@H*"@KT"@H*"@H*"@H*"@KS;1+T"@H*"O'PO`<'
+M\@H*"@KSO/'T"@H*"@H*"@H*"@KL1.L*"O/Q\&\'!Y/WO`H*]`>\\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*\`<!`0?W12!&Z^QNZNKJ1`&3O`H*"@H*"@H*"@H*"@KP!P%N!T0@
+M$NR2[/?WD@?L`9.\"@H*"@H*"@H*"@H*"O$'`0?W'V[W!_"\[^P?D@=$D[P*
+M"@H*"@H*"@H*"@H*\0>\!^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<P`9IG_`&;,``!F
+MS#,`9LR9`&;,S`!FS/\`9O\``&;_,P!F_YD`9O_,`,P`_P#_`,P`F9D``)DS
+MF0"9`)D`F0#,`)D```"9,S,`F0!F`)DSS`"9`/\`F68``)EF,P"9,V8`F6:9
+M`)EFS`"9,_\`F9DS`)F99@"9F9D`F9G,`)F9_P"9S```F<PS`&;,9@"9S)D`
+MF<S,`)G,_P"9_P``F?\S`)G,9@"9_YD`F?_,`)G__P#,````F0`S`,P`9@#,
+M`)D`S`#,`)DS``#,,S,`S#-F`,PSF0#,,\P`S#/_`,QF``#,9C,`F69F`,QF
+MF0#,9LP`F6;_`,R9``#,F3,`S)EF`,R9F0#,F<P`S)G_`,S,``#,S#,`S,QF
+M`,S,F0#,S,P`S,S_`,S_``#,_S,`F?]F`,S_F0#,_\P`S/__`,P`,P#_`&8`
+M_P"9`,PS``#_,S,`_S-F`/\SF0#_,\P`_S/_`/]F``#_9C,`S&9F`/]FF0#_
+M9LP`S&;_`/^9``#_F3,`_YEF`/^9F0#_F<P`_YG_`/_,``#_S#,`_\QF`/_,
+MF0#_S,P`_\S_`/__,P#,_V8`__^9`/__S`!F9O\`9O]F`&;__P#_9F8`_V;_
+M`/__9@`A`*4`7U]?`'=W=P"&AH8`EI:6`,O+RP"RLK(`U]?7`-W=W0#CX^,`
+MZNKJ`/'Q\0#X^/@`\/O_`*2@H`"`@(````#_``#_````__\`_P```/\`_P#_
+M_P``____````[QP``/'P\@``\O0```````=$\/!O[I.\\[SR````````[.]&
+M1@<@;^[P`````````+Q%($;MZ1^3\@```````/0''^SWDO@?`;P```````#R
+MD^Q%;NSX^$3N````````\N[W[._S]Y+K[@```````//N]^SW\??MZP<`````
+M``#SD^QN[.WM;43O````````\^\![.WL[.H![P<'`````/23'R!&[R`?`?>\
+M[_````#T[VX<D[R3DQR2O/?O````[>N\\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<P``)G_``#,````S#,``,QF``#,
+MF0``S,P``,S_``#_9@``_YD``/_,`#,````S`#,`,P!F`#,`F0`S`,P`,P#_
+M`#,S```S,S,`,S-F`#,SF0`S,\P`,S/_`#-F```S9C,`,V9F`#-FF0`S9LP`
+M,V;_`#.9```SF3,`,YEF`#.9F0`SF<P`,YG_`#/,```SS#,`,\QF`#/,F0`S
+MS,P`,\S_`#/_,P`S_V8`,_^9`#/_S``S__\`9@```&8`,P!F`&8`9@"9`&8`
+MS`!F`/\`9C,``&8S,P!F,V8`9C.9`&8SS`!F,_\`9F8``&9F,P!F9F8`9F:9
+M`&9FS`!FF0``9IDS`&:99@!FF9D`9IG,`&:9_P!FS```9LPS`&;,F0!FS,P`
+M9LS_`&;_``!F_S,`9O^9`&;_S`#,`/\`_P#,`)F9``"9,YD`F0"9`)D`S`"9
+M````F3,S`)D`9@"9,\P`F0#_`)EF``"99C,`F3-F`)EFF0"99LP`F3/_`)F9
+M,P"9F68`F9F9`)F9S`"9F?\`F<P``)G,,P!FS&8`F<R9`)G,S`"9S/\`F?\`
+M`)G_,P"9S&8`F?^9`)G_S`"9__\`S````)D`,P#,`&8`S`"9`,P`S`"9,P``
+MS#,S`,PS9@#,,YD`S#/,`,PS_P#,9@``S&8S`)EF9@#,9ID`S&;,`)EF_P#,
+MF0``S)DS`,R99@#,F9D`S)G,`,R9_P#,S```S,PS`,S,9@#,S)D`S,S,`,S,
+M_P#,_P``S/\S`)G_9@#,_YD`S/_,`,S__P#,`#,`_P!F`/\`F0#,,P``_S,S
+M`/\S9@#_,YD`_S/,`/\S_P#_9@``_V8S`,QF9@#_9ID`_V;,`,QF_P#_F0``
+M_YDS`/^99@#_F9D`_YG,`/^9_P#_S```_\PS`/_,9@#_S)D`_\S,`/_,_P#_
+M_S,`S/]F`/__F0#__\P`9F;_`&;_9@!F__\`_V9F`/]F_P#__V8`(0"E`%]?
+M7P!W=W<`AH:&`):6E@#+R\L`LK*R`-?7UP#=W=T`X^/C`.KJZ@#Q\?$`^/CX
+M`/#[_P"DH*``@("`````_P``_P```/__`/\```#_`/\`__\``/___P``````
+M````]/+T````````````\O#R````````````````````````````````````
+M`/3Q$^\`````````\_#PO`<'\0``````````\_'R]```````````````````
+M\^M$1/```````/'P\+P'!P?O!_,``````/('!_3S````````````````````
+MO$I$;?0``/3Q\O"3DP>\;^_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[_<?
+M'P<'$P&3[_````````````````````````#PO`$!'`?O1"!&!_`'!P<'[Q\2
+M!^U$`1SW\````````````````````````/#P`0$?!P?W1"#Y;Y+O($9%$^_W
+M1`$!'/>\````````````````````````\/`!`1]%!P<';41N[_=%$NL'[T0!
+M`0$<D@?O[[ST``````````````````#Q\0$!'Q_ID[P'!^^2D@<'!^YN'P$!
+M`9.2!_`'[^_R`````````````````/'Q`0$?'Q\@1FX'![R\[N]NZ1\?`0$!
+M[9('\+P'[_#R````````````````\?$!`1\?'R`@(/EO!P<@("`@'Q\!`0'M
+M[>_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,#``,#<P`#PRJ8`!`0$``@("``,#`P`$1$1`!86%@`<
+M'!P`(B(B`"DI*0!5554`34U-`$)"0@`Y.3D`@'S_`%!0_P"3`-8`_^S,`,;6
+M[P#6Y^<`D*FM````,P```&8```"9````S```,P```#,S```S9@``,YD``#/,
+M```S_P``9@```&8S``!F9@``9ID``&;,``!F_P``F0```)DS``"99@``F9D`
+M`)G,``"9_P``S````,PS``#,9@``S)D``,S,``#,_P``_V8``/^9``#_S``S
+M````,P`S`#,`9@`S`)D`,P#,`#,`_P`S,P``,S,S`#,S9@`S,YD`,S/,`#,S
+M_P`S9@``,V8S`#-F9@`S9ID`,V;,`#-F_P`SF0``,YDS`#.99@`SF9D`,YG,
+M`#.9_P`SS```,\PS`#/,9@`SS)D`,\S,`#/,_P`S_S,`,_]F`#/_F0`S_\P`
+M,___`&8```!F`#,`9@!F`&8`F0!F`,P`9@#_`&8S``!F,S,`9C-F`&8SF0!F
+M,\P`9C/_`&9F``!F9C,`9F9F`&9FF0!F9LP`9ID``&:9,P!FF68`9IF9`&:9
+MS`!FF?\`9LP``&;,,P!FS)D`9LS,`&;,_P!F_P``9O\S`&;_F0!F_\P`S`#_
+M`/\`S`"9F0``F3.9`)D`F0"9`,P`F0```)DS,P"9`&8`F3/,`)D`_P"99@``
+MF68S`)DS9@"99ID`F6;,`)DS_P"9F3,`F9EF`)F9F0"9F<P`F9G_`)G,``"9
+MS#,`9LQF`)G,F0"9S,P`F<S_`)G_``"9_S,`F<QF`)G_F0"9_\P`F?__`,P`
+M``"9`#,`S`!F`,P`F0#,`,P`F3,``,PS,P#,,V8`S#.9`,PSS`#,,_\`S&8`
+M`,QF,P"99F8`S&:9`,QFS`"99O\`S)D``,R9,P#,F68`S)F9`,R9S`#,F?\`
+MS,P``,S,,P#,S&8`S,R9`,S,S`#,S/\`S/\``,S_,P"9_V8`S/^9`,S_S`#,
+M__\`S``S`/\`9@#_`)D`S#,``/\S,P#_,V8`_S.9`/\SS`#_,_\`_V8``/]F
+M,P#,9F8`_V:9`/]FS`#,9O\`_YD``/^9,P#_F68`_YF9`/^9S`#_F?\`_\P`
+M`/_,,P#_S&8`_\R9`/_,S`#_S/\`__\S`,S_9@#__YD`___,`&9F_P!F_V8`
+M9O__`/]F9@#_9O\`__]F`"$`I0!?7U\`=W=W`(:&A@"6EI8`R\O+`+*RL@#7
+MU]<`W=W=`./CXP#JZNH`\?'Q`/CX^`#P^_\`I*"@`("`@````/\``/\```#_
+M_P#_````_P#_`/__``#___\`````````````````````````````````````
+M`/'P\P``````````````````````````````````````````````````````
+M``#RO&T`````````````````\+R\O`?P\@``````````````````]/0`]```
+M```````````````````````````'\A,3[P````````````#S!_#PO`<'!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`<!`;P'!Q+I(&X']_#Q\O/R\?`']^T3Z1\?O`<'
+M$P%%!^^\````````````````````````````````````\+P'`0'O!P?M12`@
+MO.\'\/'Q\?"\[Y('$Q\?1;P'!Q,!10?O!P``````````````````````````
+M`````````/"\!P$!;@<'!Q,@(&^\[^^\\+R\]^T'!Q(?'_@'!Y)$`44'[P<`
+M``````````````````````````````````#P\+P!`0&\!P?L1"`@D[P'!P?W
+MDO<'!P<2'P'K!P<2`0%%!_<'````````````````````````````````````
+M\?"\`0$!1;P'!VWI("!&!_"\O+SO\?"\ZA\4[P>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\@<!`0$!`0$?'Q\?("`@
+M1@<'\&X@'Q\?'P$!`0$!`0%$DNSO\+P'!^_ODNWL[.\'````````````````
+M````\?$']^_O[^\'!^^2[^_O!^X'O/"\O`<'[P<'[KSPO.[O]^WL[_"\!P?O
+M]Y+M[.SO!P```````````````````/#Q\/"\!P<'[^_O]^_O[P<'![R\\/'R
+M\O'PO`<'[^_WDNWL[._PO`<'[_>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``F<P``)G_``#,````S#,``,QF``#,F0``S,P``,S_``#_9@``_YD``/_,
+M`#,````S`#,`,P!F`#,`F0`S`,P`,P#_`#,S```S,S,`,S-F`#,SF0`S,\P`
+M,S/_`#-F```S9C,`,V9F`#-FF0`S9LP`,V;_`#.9```SF3,`,YEF`#.9F0`S
+MF<P`,YG_`#/,```SS#,`,\QF`#/,F0`SS,P`,\S_`#/_,P`S_V8`,_^9`#/_
+MS``S__\`9@```&8`,P!F`&8`9@"9`&8`S`!F`/\`9C,``&8S,P!F,V8`9C.9
+M`&8SS`!F,_\`9F8``&9F,P!F9F8`9F:9`&9FS`!FF0``9IDS`&:99@!FF9D`
+M9IG,`&:9_P!FS```9LPS`&;,F0!FS,P`9LS_`&;_``!F_S,`9O^9`&;_S`#,
+M`/\`_P#,`)F9``"9,YD`F0"9`)D`S`"9````F3,S`)D`9@"9,\P`F0#_`)EF
+M``"99C,`F3-F`)EFF0"99LP`F3/_`)F9,P"9F68`F9F9`)F9S`"9F?\`F<P`
+M`)G,,P!FS&8`F<R9`)G,S`"9S/\`F?\``)G_,P"9S&8`F?^9`)G_S`"9__\`
+MS````)D`,P#,`&8`S`"9`,P`S`"9,P``S#,S`,PS9@#,,YD`S#/,`,PS_P#,
+M9@``S&8S`)EF9@#,9ID`S&;,`)EF_P#,F0``S)DS`,R99@#,F9D`S)G,`,R9
+M_P#,S```S,PS`,S,9@#,S)D`S,S,`,S,_P#,_P``S/\S`)G_9@#,_YD`S/_,
+M`,S__P#,`#,`_P!F`/\`F0#,,P``_S,S`/\S9@#_,YD`_S/,`/\S_P#_9@``
+M_V8S`,QF9@#_9ID`_V;,`,QF_P#_F0``_YDS`/^99@#_F9D`_YG,`/^9_P#_
+MS```_\PS`/_,9@#_S)D`_\S,`/_,_P#__S,`S/]F`/__F0#__\P`9F;_`&;_
+M9@!F__\`_V9F`/]F_P#__V8`(0"E`%]?7P!W=W<`AH:&`):6E@#+R\L`LK*R
+M`-?7UP#=W=T`X^/C`.KJZ@#Q\?$`^/CX`/#[_P"DH*``@("`````_P``_P``
+M`/__`/\```#_`/\`__\``/___P``````````````````````````````````
+M`````````````````````/+P\0``````````````````````````````````
+M``````````````````````````````````````````````````#T\>SQ````
+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<!`0$?'Q\?Z>_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@("`@^48<DO?O]Y-&;FYN;D7I$Y('!^_J`0$!
+M`0%N[_>2!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\/<?'Q\!`0$!`0$!;O>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<P`9IG_`&;,``!FS#,`
+M9LR9`&;,S`!FS/\`9O\``&;_,P!F_YD`9O_,`,P`_P#_`,P`F9D``)DSF0"9
+M`)D`F0#,`)D```"9,S,`F0!F`)DSS`"9`/\`F68``)EF,P"9,V8`F6:9`)EF
+MS`"9,_\`F9DS`)F99@"9F9D`F9G,`)F9_P"9S```F<PS`&;,9@"9S)D`F<S,
+M`)G,_P"9_P``F?\S`)G,9@"9_YD`F?_,`)G__P#,````F0`S`,P`9@#,`)D`
+MS`#,`)DS``#,,S,`S#-F`,PSF0#,,\P`S#/_`,QF``#,9C,`F69F`,QFF0#,
+M9LP`F6;_`,R9``#,F3,`S)EF`,R9F0#,F<P`S)G_`,S,``#,S#,`S,QF`,S,
+MF0#,S,P`S,S_`,S_``#,_S,`F?]F`,S_F0#,_\P`S/__`,P`,P#_`&8`_P"9
+M`,PS``#_,S,`_S-F`/\SF0#_,\P`_S/_`/]F``#_9C,`S&9F`/]FF0#_9LP`
+MS&;_`/^9``#_F3,`_YEF`/^9F0#_F<P`_YG_`/_,``#_S#,`_\QF`/_,F0#_
+MS,P`_\S_`/__,P#,_V8`__^9`/__S`!F9O\`9O]F`&;__P#_9F8`_V;_`/__
+M9@`A`*4`7U]?`'=W=P"&AH8`EI:6`,O+RP"RLK(`U]?7`-W=W0#CX^,`ZNKJ
+M`/'Q\0#X^/@`\/O_`*2@H`"`@(````#_``#_````__\`_P```/\`_P#__P``
+M____``````#Q\P```//P\@````#S]`````````````!*Z@``\NZ\!^_S`/('
+M\P````````````#N1.WPD_GN;V\'\P?R\0``````````````[>]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
index b68489aee6a5c4eb1acdd2b0477fef4ed47b7c77..babfb343f5319aa8fded626ab6dc6350325e364f 100644 (file)
@@ -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
 #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
 #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
 // 
index d5655bfc6ae43b09ad94d1d6daf2ebf354db4010..07ab0b4eccdc28b05c425213cd75c02bb9261a36 100644 (file)
@@ -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 */
index b319f6b30e2b2e0c621a7a74dc83844dda9220f6..3fc8cf4a48dbaf50690cecdce203f67993424a28 100644 (file)
@@ -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;
index e867f6e1776592475c887f756c3ebe87b527657c..9340c5509cffbbd929bedc5afa6a53d13a5e0eea 100644 (file)
@@ -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 
index 15d67f34eb364e3a485fb51d4805f6652389df52..ddc3bf54c283d42d482f82791017a992d48b459a 100644 (file)
@@ -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