ReactOS  0.4.15-dev-1187-g119f102
hhctrl.c
Go to the documentation of this file.
1 /*
2  * hhctrl implementation
3  *
4  * Copyright 2004 Krzysztof Foltman
5  * Copyright 2007 Jacek Caban for CodeWeavers
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include "wine/debug.h"
23 
24 #include <stdarg.h>
25 
26 #define COBJMACROS
27 
28 #include "windef.h"
29 #include "winbase.h"
30 #include "winuser.h"
31 #include "winnls.h"
32 #include "htmlhelp.h"
33 #include "ole2.h"
34 #include "rpcproxy.h"
35 
36 #define INIT_GUID
37 #include "hhctrl.h"
38 
40 
43 
44 
46 {
47  TRACE("(%p,%d,%p)\n", hInstance, fdwReason, lpvReserved);
48 
49  switch (fdwReason)
50  {
51  case DLL_PROCESS_ATTACH:
54  break;
55  }
56  return TRUE;
57 }
58 
59 static const char *command_to_string(UINT command)
60 {
61 #define X(x) case x: return #x
62  switch (command)
63  {
65  X( HH_DISPLAY_TOC );
68  X( HH_SET_WIN_TYPE );
69  X( HH_GET_WIN_TYPE );
73  X( HH_SYNC );
74  X( HH_RESERVED1 );
75  X( HH_RESERVED2 );
76  X( HH_RESERVED3 );
79  X( HH_HELP_CONTEXT );
82  X( HH_CLOSE_ALL );
83  X( HH_ALINK_LOOKUP );
90  X( HH_INITIALIZE );
91  X( HH_UNINITIALIZE );
95  default: return "???";
96  }
97 #undef X
98 }
99 
100 static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
101 {
102  static const WCHAR helpW[] = {'\\','h','e','l','p','\\',0};
103  static const WCHAR delimW[] = {':',':',0};
104  static const WCHAR delim2W[] = {'>',0};
105 
106  DWORD env_len;
107  WCHAR *filename, *extra;
108 
109  env_filename = skip_schema(env_filename);
110 
111  /* the format is "helpFile[::/index][>window]" */
112  if (index) *index = NULL;
113  if (window) *window = NULL;
114 
115  env_len = ExpandEnvironmentStringsW(env_filename, NULL, 0);
116  if (!env_len)
117  return 0;
118 
119  filename = heap_alloc(env_len * sizeof(WCHAR));
120  if (filename == NULL)
121  return 0;
122 
123  ExpandEnvironmentStringsW(env_filename, filename, env_len);
124 
125  extra = wcsstr(filename, delim2W);
126  if (extra)
127  {
128  *extra = 0;
129  if (window)
130  *window = strdupW(extra+1);
131  }
132 
133  extra = wcsstr(filename, delimW);
134  if (extra)
135  {
136  *extra = 0;
137  if (index)
138  *index = strdupW(extra+2);
139  }
140 
143  {
147  }
148 
150 
152 }
153 
154 /******************************************************************
155  * HtmlHelpW (HHCTRL.OCX.15)
156  */
158 {
160 
161  TRACE("(%p, %s, command=%s, data=%lx)\n",
162  caller, debugstr_w( filename ),
164 
165  switch (command)
166  {
167  case HH_DISPLAY_TOPIC:
168  case HH_DISPLAY_TOC:
169  case HH_DISPLAY_INDEX:
170  case HH_DISPLAY_SEARCH:{
171  BOOL res;
172  NMHDR nmhdr;
173  HHInfo *info = NULL;
174  WCHAR *window = NULL;
175  const WCHAR *index = NULL;
176  WCHAR *default_index = NULL;
177  int tab_index = TAB_CONTENTS;
178 
179  if (!filename)
180  return NULL;
181 
182  if (!resolve_filename(filename, fullname, MAX_PATH, &default_index, &window))
183  {
184  WARN("can't find %s\n", debugstr_w(filename));
185  return 0;
186  }
187  index = default_index;
188 
189  if (window)
191 
192  info = CreateHelpViewer(info, fullname, caller);
193  if(!info)
194  {
195  heap_free(default_index);
196  heap_free(window);
197  return NULL;
198  }
199 
200  if(!index)
201  index = info->WinType.pszFile;
202  if(!info->WinType.pszType)
203  info->WinType.pszType = info->stringsW.pszType = window;
204  else
205  heap_free(window);
206 
207  /* called to load a specified topic */
208  switch(command)
209  {
210  case HH_DISPLAY_TOPIC:
211  case HH_DISPLAY_TOC:
212  if (data)
213  {
214  static const WCHAR delimW[] = {':',':',0};
215  const WCHAR *i = (const WCHAR *)data;
216 
217  index = wcsstr(i, delimW);
218  if(index)
219  {
220  if(memcmp(info->pCHMInfo->szFile, i, index-i))
221  FIXME("Opening a CHM file in the context of another is not supported.\n");
222  index += lstrlenW(delimW);
223  }
224  else
225  index = i;
226  }
227  break;
228  }
229 
230  res = NavigateToChm(info, info->pCHMInfo->szFile, index);
231  heap_free(default_index);
232 
233  if(!res)
234  {
236  return NULL;
237  }
238 
239  switch(command)
240  {
241  case HH_DISPLAY_TOPIC:
242  case HH_DISPLAY_TOC:
243  tab_index = TAB_CONTENTS;
244  break;
245  case HH_DISPLAY_INDEX:
246  tab_index = TAB_INDEX;
247  if (data)
248  FIXME("Should select keyword '%s'.\n", debugstr_w((WCHAR *)data));
249  break;
250  case HH_DISPLAY_SEARCH:
251  tab_index = TAB_SEARCH;
252  if (data)
253  FIXME("Should display search specified by HH_FTS_QUERY structure.\n");
254  break;
255  }
256  /* open the requested tab */
257  memset(&nmhdr, 0, sizeof(nmhdr));
258  nmhdr.code = TCN_SELCHANGE;
259  SendMessageW(info->hwndTabCtrl, TCM_SETCURSEL, (WPARAM)info->tabs[tab_index].id, 0);
260  SendMessageW(info->WinType.hwndNavigation, WM_NOTIFY, 0, (LPARAM)&nmhdr);
261 
262  return info->WinType.hwndHelp;
263  }
264  case HH_HELP_CONTEXT: {
265  WCHAR *window = NULL;
266  HHInfo *info = NULL;
267  LPWSTR url;
268 
269  if (!filename)
270  return NULL;
271 
273  {
274  WARN("can't find %s\n", debugstr_w(filename));
275  return 0;
276  }
277 
278  if (window)
280 
281  info = CreateHelpViewer(info, fullname, caller);
282  if(!info)
283  {
284  heap_free(window);
285  return NULL;
286  }
287 
288  if(!info->WinType.pszType)
289  info->WinType.pszType = info->stringsW.pszType = window;
290  else
291  heap_free(window);
292 
293  url = FindContextAlias(info->pCHMInfo, data);
294  if(!url)
295  {
296  if(!data) /* there may legitimately be no context alias for id 0 */
297  return info->WinType.hwndHelp;
299  return NULL;
300  }
301 
303  heap_free(url);
304  return info->WinType.hwndHelp;
305  }
306  case HH_PRETRANSLATEMESSAGE: {
307  static BOOL warned = FALSE;
308 
309  if (!warned)
310  {
311  FIXME("HH_PRETRANSLATEMESSAGE unimplemented\n");
312  warned = TRUE;
313  }
314  return 0;
315  }
316  case HH_CLOSE_ALL: {
317  HHInfo *info, *next;
318 
320  {
321  TRACE("Destroying window %s.\n", debugstr_w(info->WinType.pszType));
323  }
324  return 0;
325  }
326  case HH_SET_WIN_TYPE: {
327  HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
328  WCHAR *window = NULL;
329  HHInfo *info = NULL;
330 
331  if (!filename && wintype->pszType)
332  window = strdupW(wintype->pszType);
334  {
335  WARN("can't find window name: %s\n", debugstr_w(filename));
336  return 0;
337  }
339  if (!info)
340  {
341  info = heap_alloc_zero(sizeof(HHInfo));
342  info->WinType.pszType = info->stringsW.pszType = window;
343  list_add_tail(&window_list, &info->entry);
344  }
345  else
346  heap_free(window);
347 
348  TRACE("Changing WINTYPE, fsValidMembers=0x%x\n", wintype->fsValidMembers);
349 
350  MergeChmProperties(wintype, info, TRUE);
352  return 0;
353  }
354  case HH_GET_WIN_TYPE: {
355  HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
356  WCHAR *window = NULL;
357  HHInfo *info = NULL;
358 
360  {
361  WARN("can't find window name: %s\n", debugstr_w(filename));
362  return 0;
363  }
365  if (!info)
366  {
367  WARN("Could not find window named %s.\n", debugstr_w(window));
368  heap_free(window);
369  return (HWND)~0;
370  }
371 
372  TRACE("Retrieving WINTYPE for %s.\n", debugstr_w(window));
373  *wintype = info->WinType;
374  heap_free(window);
375  return 0;
376  }
377  default:
378  FIXME("HH case %s not handled.\n", command_to_string( command ));
379  }
380 
381  return 0;
382 }
383 
384 static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
385 {
386  memcpy(wdata, data, sizeof(*data));
387  /* convert all of the ANSI strings to Unicode */
388  wdata->pszType = stringsW->pszType = strdupAtoW(data->pszType);
389  wdata->pszCaption = stringsW->pszCaption = strdupAtoW(data->pszCaption);
390  wdata->pszToc = stringsW->pszToc = strdupAtoW(data->pszToc);
391  wdata->pszIndex = stringsW->pszIndex = strdupAtoW(data->pszIndex);
392  wdata->pszFile = stringsW->pszFile = strdupAtoW(data->pszFile);
393  wdata->pszHome = stringsW->pszHome = strdupAtoW(data->pszHome);
394  wdata->pszJump1 = stringsW->pszJump1 = strdupAtoW(data->pszJump1);
395  wdata->pszJump2 = stringsW->pszJump2 = strdupAtoW(data->pszJump2);
396  wdata->pszUrlJump1 = stringsW->pszUrlJump1 = strdupAtoW(data->pszUrlJump1);
397  wdata->pszUrlJump2 = stringsW->pszUrlJump2 = strdupAtoW(data->pszUrlJump2);
398  wdata->pszCustomTabs = stringsW->pszCustomTabs = strdupAtoW(data->pszCustomTabs);
399 }
400 
401 static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
402 {
403  memcpy(data, wdata, sizeof(*wdata));
404  /* convert all of the Unicode strings to ANSI */
405  data->pszType = stringsA->pszType = strdupWtoA(wdata->pszType);
406  data->pszCaption = stringsA->pszCaption = strdupWtoA(wdata->pszCaption);
407  data->pszToc = stringsA->pszToc = strdupWtoA(wdata->pszToc);
408  data->pszIndex = stringsA->pszFile = strdupWtoA(wdata->pszIndex);
409  data->pszFile = stringsA->pszFile = strdupWtoA(wdata->pszFile);
410  data->pszHome = stringsA->pszHome = strdupWtoA(wdata->pszHome);
411  data->pszJump1 = stringsA->pszJump1 = strdupWtoA(wdata->pszJump1);
412  data->pszJump2 = stringsA->pszJump2 = strdupWtoA(wdata->pszJump2);
413  data->pszUrlJump1 = stringsA->pszUrlJump1 = strdupWtoA(wdata->pszUrlJump1);
414  data->pszUrlJump2 = stringsA->pszUrlJump2 = strdupWtoA(wdata->pszUrlJump2);
415  data->pszCustomTabs = stringsA->pszCustomTabs = strdupWtoA(wdata->pszCustomTabs);
416 }
417 
418 /******************************************************************
419  * HtmlHelpA (HHCTRL.OCX.14)
420  */
422 {
423  WCHAR *wfile = strdupAtoW( filename );
424  HWND result = 0;
425 
426  if (data)
427  {
428  switch(command)
429  {
430  case HH_ALINK_LOOKUP:
431  case HH_DISPLAY_SEARCH:
433  case HH_GET_LAST_ERROR:
434  case HH_KEYWORD_LOOKUP:
435  case HH_SYNC:
436  FIXME("structures not handled yet\n");
437  break;
438 
439  case HH_SET_WIN_TYPE:
440  {
441  struct wintype_stringsW stringsW;
442  HH_WINTYPEW wdata;
443 
444  wintypeAtoW((HH_WINTYPEA *)data, &wdata, &stringsW);
445  result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
446  wintype_stringsW_free(&stringsW);
447  goto done;
448  }
449  case HH_GET_WIN_TYPE:
450  {
451  HH_WINTYPEW wdata;
452  HHInfo *info;
453 
454  result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
455  if (!wdata.pszType) break;
456  info = find_window(wdata.pszType);
457  if (!info) break;
458  wintype_stringsA_free(&info->stringsA);
459  wintypeWtoA(&wdata, (HH_WINTYPEA *)data, &info->stringsA);
460  goto done;
461  }
462 
463  case HH_DISPLAY_INDEX:
464  case HH_DISPLAY_TOPIC:
465  case HH_DISPLAY_TOC:
466  case HH_GET_WIN_HANDLE:
468  {
469  WCHAR *wdata = strdupAtoW( (const char *)data );
470  result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)wdata );
471  heap_free(wdata);
472  goto done;
473  }
474 
475  case HH_CLOSE_ALL:
476  case HH_HELP_CONTEXT:
477  case HH_INITIALIZE:
480  case HH_TP_HELP_WM_HELP:
481  case HH_UNINITIALIZE:
482  /* either scalar or pointer to scalar - do nothing */
483  break;
484 
485  default:
486  FIXME("Unknown command: %s (%d)\n", command_to_string(command), command);
487  break;
488  }
489  }
490 
491  result = HtmlHelpW( caller, wfile, command, data );
492 done:
493  heap_free(wfile);
494  return result;
495 }
496 
497 /******************************************************************
498  * doWinMain (HHCTRL.OCX.13)
499  */
501 {
502  MSG msg;
503  int len, buflen, mapid = -1;
504  WCHAR *filename;
505  char *endq = NULL;
506  HWND hwnd;
507 
508  hh_process = TRUE;
509 
510  /* Parse command line option of the HTML Help command.
511  *
512  * Note: The only currently handled action is "mapid",
513  * which corresponds to opening a specific page.
514  */
515  while(*szCmdLine == '-')
516  {
517  LPSTR space, ptr;
518 
519  ptr = szCmdLine + 1;
520  space = strchr(ptr, ' ');
521  if(!strncmp(ptr, "mapid", space-ptr))
522  {
523  char idtxt[10];
524 
525  ptr += strlen("mapid")+1;
526  space = strchr(ptr, ' ');
527  /* command line ends without number */
528  if (!space)
529  return 0;
530  memcpy(idtxt, ptr, space-ptr);
531  idtxt[space-ptr] = '\0';
532  mapid = atoi(idtxt);
533  szCmdLine = space+1;
534  }
535  else
536  {
537  FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", (int)(space-szCmdLine), szCmdLine);
538  return 0;
539  }
540  }
541 
542  /* FIXME: Check szCmdLine for bad arguments */
543  if (*szCmdLine == '\"')
544  endq = strchr(++szCmdLine, '\"');
545 
546  if (endq)
547  len = endq - szCmdLine;
548  else
549  len = strlen(szCmdLine);
550 
551  /* no filename given */
552  if (!len)
553  return 0;
554 
555  buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1;
556  filename = heap_alloc(buflen * sizeof(WCHAR));
557  MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen);
558  filename[buflen-1] = 0;
559 
560  /* Open a specific help topic */
561  if(mapid != -1)
563  else
565 
567 
568  if (!hwnd)
569  {
570  ERR("Failed to open HTML Help file '%s'.\n", szCmdLine);
571  return 0;
572  }
573 
574  while (GetMessageW(&msg, 0, 0, 0))
575  {
578  }
579 
580  return 0;
581 }
582 
583 /******************************************************************
584  * DllGetClassObject (HHCTRL.OCX.@)
585  */
587 {
588  FIXME("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
590 }
591 
592 /***********************************************************************
593  * DllRegisterServer (HHCTRL.OCX.@)
594  */
596 {
598 }
599 
600 /***********************************************************************
601  * DllUnregisterServer (HHCTRL.OCX.@)
602  */
604 {
606 }
DWORD fsValidMembers
Definition: htmlhelp.h:343
#define HH_ALINK_LOOKUP
Definition: htmlhelp.h:42
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
void wintype_stringsW_free(struct wintype_stringsW *stringsW)
Definition: help.c:1761
WCHAR * pszCustomTabs
Definition: hhctrl.h:155
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define HH_SET_WIN_TYPE
Definition: htmlhelp.h:27
#define REFIID
Definition: guiddef.h:118
#define HH_TP_HELP_CONTEXTMENU
Definition: htmlhelp.h:39
#define HH_GET_WIN_HANDLE
Definition: htmlhelp.h:29
char * pszToc
Definition: hhctrl.h:161
LPCWSTR pszIndex
Definition: htmlhelp.h:359
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
WCHAR * pszJump1
Definition: hhctrl.h:151
#define HH_SAFE_DISPLAY_TOPIC
Definition: htmlhelp.h:51
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPCWSTR pszType
Definition: htmlhelp.h:342
#define HH_PRETRANSLATEMESSAGE
Definition: htmlhelp.h:52
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define HH_KEYWORD_LOOKUP
Definition: htmlhelp.h:36
#define TRUE
Definition: types.h:120
#define X(x)
WCHAR * pszType
Definition: hhctrl.h:145
static WCHAR * strdupW(const WCHAR *src)
Definition: main.c:92
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
REFIID riid
Definition: precomp.h:44
LPWSTR FindContextAlias(CHMInfo *chm, DWORD index)
Definition: chm.c:172
#define REFCLSID
Definition: guiddef.h:117
#define CP_ACP
Definition: compat.h:109
char * pszUrlJump1
Definition: hhctrl.h:167
#define HH_DISPLAY_TOC
Definition: htmlhelp.h:24
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define WARN(fmt,...)
Definition: debug.h:112
static LPSTR strdupWtoA(LPCWSTR str)
Definition: hhctrl.h:296
REFIID LPVOID * ppv
Definition: atlbase.h:39
HHInfo * CreateHelpViewer(HHInfo *info, LPCWSTR filename, HWND caller)
Definition: help.c:1819
WCHAR * pszJump2
Definition: hhctrl.h:152
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define TAB_CONTENTS
Definition: hhctrl.h:116
LPCWSTR pszCaption
Definition: htmlhelp.h:345
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1105
#define TCM_SETCURSEL
Definition: commctrl.h:4061
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
char * pszCaption
Definition: hhctrl.h:160
UINT_PTR WPARAM
Definition: windef.h:207
#define HH_HELP_CONTEXT
Definition: htmlhelp.h:38
BOOL NavigateToChm(HHInfo *info, LPCWSTR file, LPCWSTR index)
Definition: help.c:253
#define HH_GET_LAST_ERROR
Definition: htmlhelp.h:43
char * LPSTR
Definition: xmlstorage.h:182
char * pszJump1
Definition: hhctrl.h:165
const char * filename
Definition: ioapi.h:135
char * pszCustomTabs
Definition: hhctrl.h:169
#define lstrlenW
Definition: compat.h:498
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
static IN DWORD IN LPVOID lpvReserved
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
#define HH_DISPLAY_SEARCH
Definition: htmlhelp.h:26
struct _test_info info[]
Definition: SetCursorPos.c:19
int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine)
Definition: hhctrl.c:500
UINT code
Definition: winuser.h:3134
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
#define HH_INITIALIZE
Definition: htmlhelp.h:49
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HINSTANCE hInstance
Definition: charmap.c:20
void UpdateHelpWindow(HHInfo *info)
Definition: help.c:1559
#define FALSE
Definition: types.h:117
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
unsigned int BOOL
Definition: ntddk_ex.h:94
#define HH_DISPLAY_INDEX
Definition: htmlhelp.h:25
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
static PVOID ptr
Definition: dispmode.c:27
#define HH_ENUM_CATEGORY
Definition: htmlhelp.h:44
HWND WINAPI HtmlHelpW(HWND caller, LPCWSTR filename, UINT command, DWORD_PTR data)
Definition: hhctrl.c:157
HRESULT WINAPI DllRegisterServer(void)
Definition: hhctrl.c:595
WCHAR * pszToc
Definition: hhctrl.h:147
smooth NULL
Definition: ftsmooth.c:416
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
BOOL hh_process
Definition: hhctrl.c:42
LONG_PTR LPARAM
Definition: windef.h:208
#define HH_UNINITIALIZE
Definition: htmlhelp.h:50
GLuint index
Definition: glext.h:6031
const char * LPCSTR
Definition: xmlstorage.h:183
#define debugstr_guid
Definition: kernel32.h:35
LPCWSTR pszToc
Definition: htmlhelp.h:358
WCHAR * pszUrlJump2
Definition: hhctrl.h:154
LPCWSTR pszJump2
Definition: htmlhelp.h:370
#define HH_TP_HELP_WM_HELP
Definition: htmlhelp.h:40
#define HH_GET_WIN_TYPE
Definition: htmlhelp.h:28
#define HH_DISPLAY_TOPIC
Definition: htmlhelp.h:22
#define TCN_SELCHANGE
Definition: commctrl.h:4128
LPCWSTR pszHome
Definition: htmlhelp.h:361
#define TRACE(s)
Definition: solgame.cpp:4
Definition: id3.c:95
__wchar_t WCHAR
Definition: xmlstorage.h:180
char * pszJump2
Definition: hhctrl.h:166
void MergeChmProperties(HH_WINTYPEW *src, HHInfo *info, BOOL override)
Definition: chm.c:253
LONG HRESULT
Definition: typedefs.h:79
#define HH_RESERVED2
Definition: htmlhelp.h:34
static const WCHAR url[]
Definition: encode.c:1432
WCHAR * pszHome
Definition: hhctrl.h:150
static const char * command_to_string(UINT command)
Definition: hhctrl.c:59
Definition: hhctrl.h:185
#define MAX_PATH
Definition: compat.h:34
#define WINAPI
Definition: msvc.h:6
LPCWSTR pszUrlJump1
Definition: htmlhelp.h:371
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
Definition: hhctrl.c:45
LPCWSTR pszCustomTabs
Definition: htmlhelp.h:375
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
unsigned long DWORD
Definition: ntddk_ex.h:95
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define HH_RESERVED1
Definition: htmlhelp.h:33
static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
Definition: hhctrl.c:384
static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
Definition: hhctrl.c:401
char * pszType
Definition: hhctrl.h:159
void ReleaseHelpViewer(HHInfo *info)
Definition: help.c:1790
const char * fullname
Definition: shader.c:1766
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
static const WCHAR space[]
Definition: ConsoleCP.c:24
HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data)
Definition: hhctrl.c:421
#define HH_CLOSE_ALL
Definition: htmlhelp.h:41
uint32_t entry
Definition: isohybrid.c:63
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define TAB_SEARCH
Definition: hhctrl.h:118
static IHTMLWindow2 * window
Definition: events.c:77
uint32_t DWORD_PTR
Definition: typedefs.h:65
static const WCHAR helpW[]
Definition: htmlevent.c:70
#define TAB_INDEX
Definition: hhctrl.h:117
#define HH_SET_INCLUSIVE_FILTER
Definition: htmlhelp.h:47
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: hhctrl.c:586
LPCWSTR pszFile
Definition: htmlhelp.h:360
#define ERR(fmt,...)
Definition: debug.h:110
LPCWSTR pszUrlJump2
Definition: htmlhelp.h:372
#define HH_SET_INFO_TYPE
Definition: htmlhelp.h:31
#define HH_ENUM_CATEGORY_IT
Definition: htmlhelp.h:45
static unsigned __int64 next
Definition: rand_nt.c:6
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define HH_SYNC
Definition: htmlhelp.h:32
void wintype_stringsA_free(struct wintype_stringsA *stringsA)
Definition: help.c:1775
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
WCHAR * pszUrlJump1
Definition: hhctrl.h:153
WCHAR * pszIndex
Definition: hhctrl.h:148
unsigned int UINT
Definition: ndis.h:50
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
struct list window_list
Definition: help.c:51
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define HH_RESET_IT_FILTER
Definition: htmlhelp.h:46
#define MultiByteToWideChar
Definition: compat.h:110
char * strchr(const char *String, int ch)
Definition: utclib.c:501
WINE_DEFAULT_DEBUG_CHANNEL(htmlhelp)
LPCWSTR pszJump1
Definition: htmlhelp.h:369
BOOL NavigateToUrl(HHInfo *info, LPCWSTR surl)
Definition: help.c:209
#define msg(x)
Definition: auth_time.c:54
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
char * pszUrlJump2
Definition: hhctrl.h:168
GLuint res
Definition: glext.h:9613
static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
Definition: hhctrl.c:100
#define HH_RESERVED3
Definition: htmlhelp.h:35
HINSTANCE hhctrl_hinstance
Definition: hhctrl.c:41
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define HH_DISPLAY_TEXT_POPUP
Definition: htmlhelp.h:37
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HH_ENUM_INFO_TYPE
Definition: htmlhelp.h:30
HHInfo * find_window(const WCHAR *window)
Definition: help.c:1955
GLuint64EXT * result
Definition: glext.h:11304
#define memset(x, y, z)
Definition: compat.h:39
char * pszFile
Definition: hhctrl.h:163
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:65
HRESULT WINAPI DllUnregisterServer(void)
Definition: hhctrl.c:603
#define HH_SET_GLOBAL_PROPERTY
Definition: htmlhelp.h:53
LPCWSTR skip_schema(LPCWSTR url)
Definition: chm.c:480
char * pszHome
Definition: hhctrl.h:164
#define WM_NOTIFY
Definition: richedit.h:61
WCHAR * pszFile
Definition: hhctrl.h:149
#define HH_SET_EXCLUSIVE_FILTER
Definition: htmlhelp.h:48
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
WCHAR * pszCaption
Definition: hhctrl.h:146