ReactOS 0.4.17-dev-806-gffa4164
hhctrl.c File Reference
#include "wine/debug.h"
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "htmlhelp.h"
#include "ole2.h"
#include "rpcproxy.h"
#include "hhctrl.h"
Include dependency graph for hhctrl.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 
#define INIT_GUID
 
#define X(x)   case x: return #x
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (htmlhelp)
 
BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
 
static const charcommand_to_string (UINT command)
 
static BOOL resolve_filename (const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
 
HWND WINAPI HtmlHelpW (HWND caller, LPCWSTR filename, UINT command, DWORD_PTR data)
 
static void wintypeAtoW (const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
 
static void wintypeWtoA (const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
 
HWND WINAPI HtmlHelpA (HWND caller, LPCSTR filename, UINT command, DWORD_PTR data)
 
int WINAPI doWinMain (HINSTANCE hInstance, LPSTR szCmdLine)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 

Variables

HINSTANCE hhctrl_hinstance
 
BOOL hh_process = FALSE
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 26 of file hhctrl.c.

◆ INIT_GUID

#define INIT_GUID

Definition at line 36 of file hhctrl.c.

◆ X

#define X (   x)    case x: return #x

Function Documentation

◆ command_to_string()

static const char * command_to_string ( UINT  command)
static

Definition at line 59 of file hhctrl.c.

60{
61#define X(x) case x: return #x
62 switch (command)
63 {
73 X( HH_SYNC );
74 X( HH_RESERVED1 );
75 X( HH_RESERVED2 );
76 X( HH_RESERVED3 );
82 X( HH_CLOSE_ALL );
95 default: return "???";
96 }
97#undef X
98}
#define X(x)
#define HH_ENUM_CATEGORY
Definition: htmlhelp.h:44
#define HH_SET_INFO_TYPE
Definition: htmlhelp.h:31
#define HH_DISPLAY_INDEX
Definition: htmlhelp.h:25
#define HH_UNINITIALIZE
Definition: htmlhelp.h:50
#define HH_RESET_IT_FILTER
Definition: htmlhelp.h:46
#define HH_SET_WIN_TYPE
Definition: htmlhelp.h:27
#define HH_SET_EXCLUSIVE_FILTER
Definition: htmlhelp.h:48
#define HH_DISPLAY_TOPIC
Definition: htmlhelp.h:22
#define HH_ENUM_CATEGORY_IT
Definition: htmlhelp.h:45
#define HH_SET_INCLUSIVE_FILTER
Definition: htmlhelp.h:47
#define HH_GET_LAST_ERROR
Definition: htmlhelp.h:43
#define HH_TP_HELP_WM_HELP
Definition: htmlhelp.h:40
#define HH_PRETRANSLATEMESSAGE
Definition: htmlhelp.h:52
#define HH_SAFE_DISPLAY_TOPIC
Definition: htmlhelp.h:51
#define HH_CLOSE_ALL
Definition: htmlhelp.h:41
#define HH_HELP_CONTEXT
Definition: htmlhelp.h:38
#define HH_DISPLAY_TEXT_POPUP
Definition: htmlhelp.h:37
#define HH_ENUM_INFO_TYPE
Definition: htmlhelp.h:30
#define HH_DISPLAY_SEARCH
Definition: htmlhelp.h:26
#define HH_RESERVED1
Definition: htmlhelp.h:33
#define HH_SET_GLOBAL_PROPERTY
Definition: htmlhelp.h:53
#define HH_DISPLAY_TOC
Definition: htmlhelp.h:24
#define HH_ALINK_LOOKUP
Definition: htmlhelp.h:42
#define HH_GET_WIN_TYPE
Definition: htmlhelp.h:28
#define HH_KEYWORD_LOOKUP
Definition: htmlhelp.h:36
#define HH_RESERVED3
Definition: htmlhelp.h:35
#define HH_TP_HELP_CONTEXTMENU
Definition: htmlhelp.h:39
#define HH_RESERVED2
Definition: htmlhelp.h:34
#define HH_INITIALIZE
Definition: htmlhelp.h:49
#define HH_SYNC
Definition: htmlhelp.h:32
#define HH_GET_WIN_HANDLE
Definition: htmlhelp.h:29

Referenced by HtmlHelpA(), and HtmlHelpW().

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
LPVOID ppv 
)

Definition at line 593 of file hhctrl.c.

594{
595 FIXME("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
597}
#define FIXME(fmt,...)
Definition: precomp.h:53
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hInstance,
DWORD  fdwReason,
LPVOID  lpvReserved 
)

Definition at line 45 of file hhctrl.c.

46{
47 TRACE("(%p,%ld,%p)\n", hInstance, fdwReason, lpvReserved);
48
49 switch (fdwReason)
50 {
54 break;
55 }
56 return TRUE;
57}
static DWORD const fdwReason
HINSTANCE hInstance
Definition: charmap.c:19
#define TRUE
Definition: types.h:120
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
HINSTANCE hhctrl_hinstance
Definition: hhctrl.c:41
static IN DWORD IN LPVOID lpvReserved
#define TRACE(s)
Definition: solgame.cpp:4

◆ doWinMain()

int WINAPI doWinMain ( HINSTANCE  hInstance,
LPSTR  szCmdLine 
)

Definition at line 507 of file hhctrl.c.

508{
509 MSG msg;
510 int len, buflen, mapid = -1;
512 char *endq = NULL;
513 HWND hwnd;
514
516
517 /* Parse command line option of the HTML Help command.
518 *
519 * Note: The only currently handled action is "mapid",
520 * which corresponds to opening a specific page.
521 */
522 while(*szCmdLine == '-')
523 {
524 LPSTR space, ptr;
525
526 ptr = szCmdLine + 1;
527 space = strchr(ptr, ' ');
528 if(!strncmp(ptr, "mapid", space-ptr))
529 {
530 char idtxt[10];
531
532 ptr += strlen("mapid")+1;
533 space = strchr(ptr, ' ');
534 /* command line ends without number */
535 if (!space)
536 return 0;
537 memcpy(idtxt, ptr, space-ptr);
538 idtxt[space-ptr] = '\0';
539 mapid = atoi(idtxt);
540 szCmdLine = space+1;
541 }
542 else
543 {
544 FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", (int)(space-szCmdLine), szCmdLine);
545 return 0;
546 }
547 }
548
549 /* FIXME: Check szCmdLine for bad arguments */
550 if (*szCmdLine == '\"')
551 endq = strchr(++szCmdLine, '\"');
552
553 if (endq)
554 len = endq - szCmdLine;
555 else
556 len = strlen(szCmdLine);
557
558 /* no filename given */
559 if (!len)
560 return 0;
561
562 buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1;
563 filename = malloc(buflen * sizeof(WCHAR));
564 MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen);
565 filename[buflen-1] = 0;
566
567 /* Open a specific help topic */
568 if(mapid != -1)
570 else
572
573 free(filename);
574
575 if (!hwnd)
576 {
577 ERR("Failed to open HTML Help file '%s'.\n", szCmdLine);
578 return 0;
579 }
580
581 while (GetMessageW(&msg, 0, 0, 0))
582 {
585 }
586
587 return 0;
588}
#define msg(x)
Definition: auth_time.c:54
#define ERR(fmt,...)
Definition: precomp.h:57
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
_ACRTIMP int __cdecl atoi(const char *)
Definition: string.c:1720
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
Definition: string.c:3335
GLenum GLsizei len
Definition: glext.h:6722
BOOL hh_process
Definition: hhctrl.c:42
HWND WINAPI HtmlHelpW(HWND caller, LPCWSTR filename, UINT command, DWORD_PTR data)
Definition: hhctrl.c:164
const char * filename
Definition: ioapi.h:137
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
short WCHAR
Definition: pedump.c:58
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
char * LPSTR
Definition: typedefs.h:51
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)

Referenced by WinMain().

◆ HtmlHelpA()

HWND WINAPI HtmlHelpA ( HWND  caller,
LPCSTR  filename,
UINT  command,
DWORD_PTR  data 
)

Definition at line 428 of file hhctrl.c.

429{
430 WCHAR *wfile = strdupAtoW( filename );
431 HWND result = 0;
432
433 if (data)
434 {
435 switch(command)
436 {
437 case HH_ALINK_LOOKUP:
442 case HH_SYNC:
443 FIXME("structures not handled yet\n");
444 break;
445
446 case HH_SET_WIN_TYPE:
447 {
448 struct wintype_stringsW stringsW;
449 HH_WINTYPEW wdata;
450
451 wintypeAtoW((HH_WINTYPEA *)data, &wdata, &stringsW);
452 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
453 wintype_stringsW_free(&stringsW);
454 goto done;
455 }
456 case HH_GET_WIN_TYPE:
457 {
458 HH_WINTYPEW wdata;
459 HHInfo *info;
460
461 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
462 if (!wdata.pszType) break;
463 info = find_window(wdata.pszType);
464 if (!info) break;
465 wintype_stringsA_free(&info->stringsA);
466 wintypeWtoA(&wdata, (HH_WINTYPEA *)data, &info->stringsA);
467 goto done;
468 }
469
470 case HH_DISPLAY_INDEX:
471 case HH_DISPLAY_TOPIC:
472 case HH_DISPLAY_TOC:
475 {
476 WCHAR *wdata = strdupAtoW( (const char *)data );
477 result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)wdata );
478 free(wdata);
479 goto done;
480 }
481
482 case HH_CLOSE_ALL:
483 case HH_HELP_CONTEXT:
484 case HH_INITIALIZE:
488 case HH_UNINITIALIZE:
489 /* either scalar or pointer to scalar - do nothing */
490 break;
491
492 default:
493 FIXME("Unknown command: %s (%d)\n", command_to_string(command), command);
494 break;
495 }
496 }
497
498 result = HtmlHelpW( caller, wfile, command, data );
499done:
500 free(wfile);
501 return result;
502}
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:61
void wintype_stringsW_free(struct wintype_stringsW *stringsW)
Definition: help.c:1773
void wintype_stringsA_free(struct wintype_stringsA *stringsA)
Definition: help.c:1787
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint64EXT * result
Definition: glext.h:11304
static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
Definition: hhctrl.c:408
static const char * command_to_string(UINT command)
Definition: hhctrl.c:59
static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
Definition: hhctrl.c:391
Definition: hhctrl.h:184
LPCWSTR pszType
Definition: htmlhelp.h:342
uint32_t DWORD_PTR
Definition: typedefs.h:65
static HWND find_window()
Definition: wclickat.c:251

Referenced by HtmlHelp_Start().

◆ HtmlHelpW()

HWND WINAPI HtmlHelpW ( HWND  caller,
LPCWSTR  filename,
UINT  command,
DWORD_PTR  data 
)

Definition at line 164 of file hhctrl.c.

165{
167
168 TRACE("(%p, %s, command=%s, data=%Ix)\n",
169 caller, debugstr_w( filename ),
171
172 switch (command)
173 {
174 case HH_DISPLAY_TOPIC:
175 case HH_DISPLAY_TOC:
176 case HH_DISPLAY_INDEX:
177 case HH_DISPLAY_SEARCH:{
178 BOOL res;
179 NMHDR nmhdr;
180 HHInfo *info = NULL;
181 WCHAR *window = NULL;
182 const WCHAR *index = NULL;
183 WCHAR *default_index = NULL;
184 int tab_index = TAB_CONTENTS;
185
186 if (!filename)
187 return NULL;
188
189 if (!resolve_filename(filename, fullname, MAX_PATH, &default_index, &window))
190 {
191 WARN("can't find %s\n", debugstr_w(filename));
192 return 0;
193 }
194 index = default_index;
195
196 if (window)
198
200 if(!info)
201 {
202 free(default_index);
203 free(window);
204 return NULL;
205 }
206
207 if(!index)
208 index = info->WinType.pszFile;
209 if(!info->WinType.pszType)
210 info->WinType.pszType = info->stringsW.pszType = window;
211 else
212 free(window);
213
214 /* called to load a specified topic */
215 switch(command)
216 {
217 case HH_DISPLAY_TOPIC:
218 case HH_DISPLAY_TOC:
219 if (data)
220 {
221 static const WCHAR delimW[] = {':',':',0};
222 const WCHAR *i = (const WCHAR *)data;
223
224 index = wcsstr(i, delimW);
225 if(index)
226 {
227 if(memcmp(info->pCHMInfo->szFile, i, index-i))
228 FIXME("Opening a CHM file in the context of another is not supported.\n");
229 index += lstrlenW(delimW);
230 }
231 else
232 index = i;
233 }
234 break;
235 }
236
237 res = NavigateToChm(info, info->pCHMInfo->szFile, index);
238 free(default_index);
239
240 if(!res)
241 {
243 return NULL;
244 }
245
246 switch(command)
247 {
248 case HH_DISPLAY_TOPIC:
249 case HH_DISPLAY_TOC:
250 tab_index = TAB_CONTENTS;
251 break;
252 case HH_DISPLAY_INDEX:
253 tab_index = TAB_INDEX;
254 if (data)
255 FIXME("Should select keyword '%s'.\n", debugstr_w((WCHAR *)data));
256 break;
258 tab_index = TAB_SEARCH;
259 if (data)
260 FIXME("Should display search specified by HH_FTS_QUERY structure.\n");
261 break;
262 }
263 /* open the requested tab */
264 memset(&nmhdr, 0, sizeof(nmhdr));
265 nmhdr.code = TCN_SELCHANGE;
266 SendMessageW(info->hwndTabCtrl, TCM_SETCURSEL, (WPARAM)info->tabs[tab_index].id, 0);
267 SendMessageW(info->WinType.hwndNavigation, WM_NOTIFY, 0, (LPARAM)&nmhdr);
268
269 return info->WinType.hwndHelp;
270 }
271 case HH_HELP_CONTEXT: {
272 WCHAR *window = NULL;
273 HHInfo *info = NULL;
274 LPWSTR url;
275
276 if (!filename)
277 return NULL;
278
280 {
281 WARN("can't find %s\n", debugstr_w(filename));
282 return 0;
283 }
284
285 if (window)
287
289 if(!info)
290 {
291 free(window);
292 return NULL;
293 }
294
295 if(!info->WinType.pszType)
296 info->WinType.pszType = info->stringsW.pszType = window;
297 else
298 free(window);
299
300 url = FindContextAlias(info->pCHMInfo, data);
301 if(!url)
302 {
303 if(!data) /* there may legitimately be no context alias for id 0 */
304 return info->WinType.hwndHelp;
306 return NULL;
307 }
308
310 free(url);
311 return info->WinType.hwndHelp;
312 }
314 static BOOL warned = FALSE;
315
316 if (!warned)
317 {
318 FIXME("HH_PRETRANSLATEMESSAGE unimplemented\n");
319 warned = TRUE;
320 }
321 return 0;
322 }
323 case HH_CLOSE_ALL: {
324 HHInfo *info, *next;
325
327 {
328 TRACE("Destroying window %s.\n", debugstr_w(info->WinType.pszType));
330 }
331 return 0;
332 }
333 case HH_SET_WIN_TYPE: {
334 HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
335 WCHAR *window = NULL;
336 HHInfo *info = NULL;
337
338 if (!filename && wintype->pszType)
339 window = wcsdup(wintype->pszType);
341 {
342 WARN("can't find window name: %s\n", debugstr_w(filename));
343 return 0;
344 }
346 if (!info)
347 {
348 info = calloc(1, sizeof(HHInfo));
349 info->WinType.pszType = info->stringsW.pszType = window;
350 list_add_tail(&window_list, &info->entry);
351 }
352 else
353 free(window);
354
355 TRACE("Changing WINTYPE, fsValidMembers=0x%lx\n", wintype->fsValidMembers);
356
357 MergeChmProperties(wintype, info, TRUE);
359 return 0;
360 }
361 case HH_GET_WIN_TYPE: {
362 HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
363 WCHAR *window = NULL;
364 HHInfo *info = NULL;
365
367 {
368 WARN("can't find window name: %s\n", debugstr_w(filename));
369 return 0;
370 }
372 if (!info)
373 {
374 WARN("Could not find window named %s.\n", debugstr_w(window));
375 free(window);
376 return (HWND)~0;
377 }
378
379 TRACE("Retrieving WINTYPE for %s.\n", debugstr_w(window));
380 *wintype = info->WinType;
381 free(window);
382 return 0;
383 }
384 default:
385 FIXME("HH case %s not handled.\n", command_to_string( command ));
386 }
387
388 return 0;
389}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define WARN(fmt,...)
Definition: precomp.h:61
LPWSTR FindContextAlias(CHMInfo *chm, DWORD index)
Definition: chm.c:188
void MergeChmProperties(HH_WINTYPEW *src, HHInfo *info, BOOL override)
Definition: chm.c:269
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
#define lstrlenW
Definition: compat.h:750
HHInfo * CreateHelpViewer(HHInfo *info, LPCWSTR filename, HWND caller)
Definition: help.c:1831
struct list window_list
Definition: help.c:51
void ReleaseHelpViewer(HHInfo *info)
Definition: help.c:1802
BOOL NavigateToChm(HHInfo *info, LPCWSTR file, LPCWSTR index)
Definition: help.c:257
void UpdateHelpWindow(HHInfo *info)
Definition: help.c:1563
BOOL NavigateToUrl(HHInfo *info, LPCWSTR surl)
Definition: help.c:213
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *)
Definition: wcs.c:2998
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint res
Definition: glext.h:9613
GLuint index
Definition: glext.h:6031
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
static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
Definition: hhctrl.c:100
#define TAB_CONTENTS
Definition: hhctrl.h:115
#define TAB_INDEX
Definition: hhctrl.h:116
#define TAB_SEARCH
Definition: hhctrl.h:117
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_w
Definition: kernel32.h:32
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
static const WCHAR url[]
Definition: encode.c:1384
const char * fullname
Definition: shader.c:1766
static IHTMLWindow2 * window
Definition: events.c:77
#define TCN_SELCHANGE
Definition: commctrl.h:4137
#define TCM_SETCURSEL
Definition: commctrl.h:4070
static unsigned __int64 next
Definition: rand_nt.c:6
#define WM_NOTIFY
Definition: richedit.h:61
#define calloc
Definition: rosglue.h:14
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define memset(x, y, z)
Definition: compat.h:39
DWORD fsValidMembers
Definition: htmlhelp.h:343
UINT code
Definition: winuser.h:3267
uint16_t * LPWSTR
Definition: typedefs.h:56
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by doWinMain(), HtmlHelp_Start(), HtmlHelpA(), and OnCommand().

◆ resolve_filename()

static BOOL resolve_filename ( const WCHAR env_filename,
WCHAR fullname,
DWORD  buflen,
WCHAR **  index,
WCHAR **  window 
)
static

Definition at line 100 of file hhctrl.c.

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;
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 = malloc(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 = wcsdup(extra + 1);
131 }
132
133 extra = wcsstr(filename, delimW);
134 if (extra)
135 {
136 *extra = 0;
137 if (index)
138 *index = wcsdup(extra + 2);
139 }
140
143 {
147 }
148
149 free(filename);
150
152 {
153 if (window) free(*window);
154 if (index) free(*index);
155 return FALSE;
156 }
157
158 return TRUE;
159}
LPCWSTR skip_schema(LPCWSTR url)
Definition: chm.c:500
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2271
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR helpW[]
Definition: htmlevent.c:70
@ extra
Definition: id3.c:95
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23

Referenced by HtmlHelpW().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( htmlhelp  )

◆ wintypeAtoW()

static void wintypeAtoW ( const HH_WINTYPEA data,
HH_WINTYPEW wdata,
struct wintype_stringsW stringsW 
)
static

Definition at line 391 of file hhctrl.c.

392{
393 memcpy(wdata, data, sizeof(*data));
394 /* convert all of the ANSI strings to Unicode */
395 wdata->pszType = stringsW->pszType = strdupAtoW(data->pszType);
396 wdata->pszCaption = stringsW->pszCaption = strdupAtoW(data->pszCaption);
397 wdata->pszToc = stringsW->pszToc = strdupAtoW(data->pszToc);
398 wdata->pszIndex = stringsW->pszIndex = strdupAtoW(data->pszIndex);
399 wdata->pszFile = stringsW->pszFile = strdupAtoW(data->pszFile);
400 wdata->pszHome = stringsW->pszHome = strdupAtoW(data->pszHome);
401 wdata->pszJump1 = stringsW->pszJump1 = strdupAtoW(data->pszJump1);
402 wdata->pszJump2 = stringsW->pszJump2 = strdupAtoW(data->pszJump2);
403 wdata->pszUrlJump1 = stringsW->pszUrlJump1 = strdupAtoW(data->pszUrlJump1);
404 wdata->pszUrlJump2 = stringsW->pszUrlJump2 = strdupAtoW(data->pszUrlJump2);
405 wdata->pszCustomTabs = stringsW->pszCustomTabs = strdupAtoW(data->pszCustomTabs);
406}
LPCWSTR pszIndex
Definition: htmlhelp.h:359
LPCWSTR pszJump1
Definition: htmlhelp.h:369
LPCWSTR pszHome
Definition: htmlhelp.h:361
LPCWSTR pszToc
Definition: htmlhelp.h:358
LPCWSTR pszJump2
Definition: htmlhelp.h:370
LPCWSTR pszUrlJump2
Definition: htmlhelp.h:372
LPCWSTR pszFile
Definition: htmlhelp.h:360
LPCWSTR pszCaption
Definition: htmlhelp.h:345
LPCWSTR pszUrlJump1
Definition: htmlhelp.h:371
LPCWSTR pszCustomTabs
Definition: htmlhelp.h:375
WCHAR * pszUrlJump1
Definition: hhctrl.h:152
WCHAR * pszUrlJump2
Definition: hhctrl.h:153
WCHAR * pszJump1
Definition: hhctrl.h:150
WCHAR * pszHome
Definition: hhctrl.h:149
WCHAR * pszCustomTabs
Definition: hhctrl.h:154
WCHAR * pszToc
Definition: hhctrl.h:146
WCHAR * pszCaption
Definition: hhctrl.h:145
WCHAR * pszFile
Definition: hhctrl.h:148
WCHAR * pszJump2
Definition: hhctrl.h:151
WCHAR * pszType
Definition: hhctrl.h:144
WCHAR * pszIndex
Definition: hhctrl.h:147

Referenced by HtmlHelpA().

◆ wintypeWtoA()

static void wintypeWtoA ( const HH_WINTYPEW wdata,
HH_WINTYPEA data,
struct wintype_stringsA stringsA 
)
static

Definition at line 408 of file hhctrl.c.

409{
410 memcpy(data, wdata, sizeof(*wdata));
411 /* convert all of the Unicode strings to ANSI */
412 data->pszType = stringsA->pszType = strdupWtoA(wdata->pszType);
413 data->pszCaption = stringsA->pszCaption = strdupWtoA(wdata->pszCaption);
414 data->pszToc = stringsA->pszToc = strdupWtoA(wdata->pszToc);
415 data->pszIndex = stringsA->pszFile = strdupWtoA(wdata->pszIndex);
416 data->pszFile = stringsA->pszFile = strdupWtoA(wdata->pszFile);
417 data->pszHome = stringsA->pszHome = strdupWtoA(wdata->pszHome);
418 data->pszJump1 = stringsA->pszJump1 = strdupWtoA(wdata->pszJump1);
419 data->pszJump2 = stringsA->pszJump2 = strdupWtoA(wdata->pszJump2);
420 data->pszUrlJump1 = stringsA->pszUrlJump1 = strdupWtoA(wdata->pszUrlJump1);
421 data->pszUrlJump2 = stringsA->pszUrlJump2 = strdupWtoA(wdata->pszUrlJump2);
422 data->pszCustomTabs = stringsA->pszCustomTabs = strdupWtoA(wdata->pszCustomTabs);
423}
static char * strdupWtoA(const WCHAR *str)
char * pszToc
Definition: hhctrl.h:160
char * pszCustomTabs
Definition: hhctrl.h:168
char * pszHome
Definition: hhctrl.h:163
char * pszType
Definition: hhctrl.h:158
char * pszUrlJump2
Definition: hhctrl.h:167
char * pszJump1
Definition: hhctrl.h:164
char * pszUrlJump1
Definition: hhctrl.h:166
char * pszJump2
Definition: hhctrl.h:165
char * pszCaption
Definition: hhctrl.h:159
char * pszFile
Definition: hhctrl.h:162

Referenced by HtmlHelpA().

Variable Documentation

◆ hh_process

BOOL hh_process = FALSE

Definition at line 42 of file hhctrl.c.

Referenced by doWinMain(), and Help_WndProc().

◆ hhctrl_hinstance