1 /* Copyright (C) 2001 by Alex Kompel <shurikk@pacbell.net> */
2 /* NetHack may be freely redistributed.  See license for details. */
3 
4 #ifndef WINMS_H
5 #define WINMS_H
6 
7 #pragma warning(disable:4142) /* benign redefinition of type */
8 
9 #define WIN32_LEAN_AND_MEAN
10 #include <windows.h>
11 #include <commctrl.h>
12 #include <tchar.h>
13 #include <newres.h>
14 #include "resource.h"
15 #include "hack.h"
16 
17 #if defined(WIN_CE_POCKETPC)
18 #include <aygshell.h>
19 #include <sipapi.h>
20 #endif
21 
22 #if defined(WIN_CE_SMARTPHONE)
23 #include <aygshell.h>
24 #include <sipapi.h>
25 #include <shlobj.h>
26 #include <prsht.h>
27 #include <Tpcshell.h>
28 #include <windowsm.h>
29 #include <KEYBD.H>
30 #endif
31 
32 #if defined(WIN_CE_PS2xx) || defined(WIN32_PLATFORM_HPCPRO)
33 #include <sipapi.h>
34 #endif
35 
36 /* Taskbar Menu height */
37 #define MENU_HEIGHT 26
38 
39 /* Create an array to keep track of the various windows */
40 
41 #ifndef MAXWINDOWS
42 #define MAXWINDOWS 15
43 #endif
44 
45 /* RIP window ID */
46 #define NHW_RIP		32
47 #define NHW_KEYPAD  33
48 
49 /* size of tiles */
50 #ifndef TILE_X
51 #define TILE_X 16
52 #endif
53 #define TILE_Y 16
54 
55 /* tiles per line in the bitmap */
56 #define TILES_PER_LINE  40
57 
58 /* tile background color */
59 #define TILE_BK_COLOR RGB(71, 108, 108)
60 
61 /* minimum/maximum font size (in points - 1/72 inch) */
62 #define NHFONT_DEFAULT_SIZE 9
63 #define NHFONT_STATUS_DEFAULT_SIZE 6
64 #define NHFONT_SIZE_MIN 3
65 #define NHFONT_SIZE_MAX 20
66 
67 typedef struct mswin_nhwindow_data {
68   HWND	      win;
69   int		  type;
70   int		  dead;
71 } MSNHWinData, *PMSNHWinData;
72 
73 /* global application data - alailable thour GetNHApp() */
74 typedef struct mswin_nhwindow_app {
75 	HINSTANCE   hApp;		/* hInstance from WinMain */
76 	int			nCmdShow;	/* main window mode flag */
77 	HWND		hMainWnd;	/* main window handle */
78 	HACCEL		hAccelTable; /* accelerator table */
79 	HWND		hPopupWnd;	/* active dialog window (nethack menu, text, etc) */
80 	HWND		hMenuBar;	/* menu bar */
81 
82 	MSNHWinData windowlist[MAXWINDOWS];	/* nethack windows array */
83 
84 	HBITMAP		bmpTiles;	/* nethack tiles */
85 	HBITMAP		bmpPetMark; /* pet mark Bitmap */
86 	HBITMAP		bmpMapTiles; /* alternative map tiles */
87 	int			mapTile_X;	/* alt. tiles width */
88 	int			mapTile_Y;	/* alt. tiles height */
89 	int			mapTilesPerLine;	/* number of tile per row in the bitmap */
90 
91 	boolean		bNoHScroll;	/* disable cliparound for horizontal grid (map) */
92 	boolean		bNoVScroll; /* disable cliparound for vertical grid (map) */
93 
94 	int			mapDisplayModeSave;	/* saved map display mode */
95 
96 	int			bCmdPad;	/* command pad - on-screen keyboard */
97 	HWND		hCmdWnd;	/* handle of on-screen keyboard window */
98 
99 	/* options */
100 	boolean		bWrapText;	/* format text to fit the window */
101 	boolean		bFullScreen;/* run nethack in full-screen mode  */
102 	boolean		bHideScrollBars; /* hide scroll bars */
103 	boolean		bUseSIP; /* use SIP (built-in software keyboard) for menus (PocketPC only) */
104 } NHWinApp, *PNHWinApp;
105 extern PNHWinApp GetNHApp();
106 
107 #define E extern
108 
109 E struct window_procs mswin_procs;
110 
111 #undef E
112 
113 /* Some prototypes */
114 void mswin_init_nhwindows(int* argc, char** argv);
115 void mswin_player_selection(void);
116 void mswin_askname(void);
117 void mswin_get_nh_event(void);
118 void mswin_exit_nhwindows(const char *);
119 void mswin_suspend_nhwindows(const char *);
120 void mswin_resume_nhwindows(void);
121 winid mswin_create_nhwindow(int type);
122 void mswin_clear_nhwindow(winid wid);
123 void mswin_display_nhwindow(winid wid, BOOLEAN_P block);
124 void mswin_destroy_nhwindow(winid wid);
125 void mswin_curs(winid wid, int x, int y);
126 void mswin_putstr(winid wid, int attr, const char *text);
127 void mswin_putstr_ex(winid wid, int attr, const char *text, boolean append);
128 void mswin_display_file(const char *filename,BOOLEAN_P must_exist);
129 void mswin_start_menu(winid wid);
130 void mswin_add_menu(winid wid, int glyph, const ANY_P * identifier,
131 		CHAR_P accelerator, CHAR_P group_accel, int attr,
132 		const char *str, BOOLEAN_P presel);
133 void mswin_end_menu(winid wid, const char *prompt);
134 int  mswin_select_menu(winid wid, int how, MENU_ITEM_P **selected);
135 void mswin_update_inventory(void);
136 void mswin_mark_synch(void);
137 void mswin_wait_synch(void);
138 void mswin_cliparound(int x, int y);
139 void mswin_print_glyph(winid wid,XCHAR_P x,XCHAR_P y,int glyph);
140 void mswin_raw_print(const char *str);
141 void mswin_raw_print_bold(const char *str);
142 int  mswin_nhgetch(void);
143 int  mswin_nh_poskey(int *x, int *y, int *mod);
144 void mswin_nhbell(void);
145 int  mswin_doprev_message(void);
146 char mswin_yn_function(const char *question, const char *choices,
147 		CHAR_P def);
148 void mswin_getlin(const char *question, char *input);
149 int  mswin_get_ext_cmd(void);
150 void mswin_number_pad(int state);
151 void mswin_delay_output(void);
152 void mswin_change_color(void);
153 char *mswin_get_color_string(void);
154 void mswin_start_screen(void);
155 void mswin_end_screen(void);
156 void mswin_outrip(winid wid, int how);
157 void mswin_preference_update(const char *pref);
158 
159 /* helper function */
160 HWND mswin_hwnd_from_winid(winid wid);
161 winid mswin_winid_from_type(int type);
162 winid mswin_winid_from_handle(HWND hWnd);
163 void mswin_window_mark_dead(winid wid);
164 void bail(const char *mesg);
165 void nhapply_image_transparent(
166 	HDC hDC, int x, int y, int width, int height,
167 	HDC sourceDC, int s_x, int s_y, int s_width, int s_height,
168 	COLORREF cTransparent
169 );
170 void mswin_popup_display(HWND popup, int* done_indicator);
171 void mswin_popup_destroy(HWND popup);
172 
173 #if defined(WIN_CE_SMARTPHONE)
174 void NHSPhoneDialogSetup(HWND hDlg, BOOL is_edit, BOOL is_fullscreen);
175 #endif
176 
177 void mswin_read_reg(void);
178 void mswin_destroy_reg(void);
179 void mswin_write_reg(void);
180 
181 void mswin_set_fullscreen(BOOL is_fullscreen);
182 #endif /* WINmswin_H */
183