4 * Copyright 1996 Ulrich Schmid
5 * Copyright 2002, 2008 Eric Pouech
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.
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.
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
22 #define WIN32_LEAN_AND_MEAN
30 #include "wine/debug.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(winhelp
);
34 /**************************************************/
36 /**************************************************/
41 const char* arguments
;
45 static struct MacroDesc
*MACRO_Loaded
/* = NULL */;
46 static unsigned MACRO_NumLoaded
/* = 0 */;
48 /******* helper functions *******/
50 static WINHELP_BUTTON
** MACRO_LookupButton(WINHELP_WINDOW
* win
, LPCSTR name
)
54 for (b
= &win
->first_button
; *b
; b
= &(*b
)->next
)
55 if (!lstrcmpi(name
, (*b
)->lpszID
)) break;
59 /******* real macro implementation *******/
61 void CALLBACK
MACRO_CreateButton(LPCSTR id
, LPCSTR name
, LPCSTR macro
)
63 WINHELP_WINDOW
*win
= Globals
.active_win
;
64 WINHELP_BUTTON
*button
, **b
;
68 WINE_TRACE("(\"%s\", \"%s\", %s)\n", id
, name
, macro
);
70 size
= sizeof(WINHELP_BUTTON
) + lstrlen(id
) + lstrlen(name
) + lstrlen(macro
) + 3;
72 button
= HeapAlloc(GetProcessHeap(), 0, size
);
78 ptr
= (char*)button
+ sizeof(WINHELP_BUTTON
);
82 ptr
+= lstrlen(id
) + 1;
85 button
->lpszName
= ptr
;
86 ptr
+= lstrlen(name
) + 1;
89 button
->lpszMacro
= ptr
;
91 button
->wParam
= WH_FIRST_BUTTON
;
92 for (b
= &win
->first_button
; *b
; b
= &(*b
)->next
)
93 button
->wParam
= max(button
->wParam
, (*b
)->wParam
+ 1);
96 WINHELP_LayoutMainWindow(win
);
99 static void CALLBACK
MACRO_DestroyButton(LPCSTR str
)
101 WINE_FIXME("(\"%s\")\n", str
);
104 void CALLBACK
MACRO_DisableButton(LPCSTR id
)
108 WINE_TRACE("(\"%s\")\n", id
);
110 b
= MACRO_LookupButton(Globals
.active_win
, id
);
111 if (!*b
) {WINE_FIXME("Couldn't find button '%s'\n", id
); return;}
113 EnableWindow((*b
)->hWnd
, FALSE
);
116 static void CALLBACK
MACRO_EnableButton(LPCSTR id
)
120 WINE_TRACE("(\"%s\")\n", id
);
122 b
= MACRO_LookupButton(Globals
.active_win
, id
);
123 if (!*b
) {WINE_FIXME("Couldn't find button '%s'\n", id
); return;}
125 EnableWindow((*b
)->hWnd
, TRUE
);
128 void CALLBACK
MACRO_JumpContents(LPCSTR lpszPath
, LPCSTR lpszWindow
)
132 WINE_TRACE("(\"%s\", \"%s\")\n", lpszPath
, lpszWindow
);
133 if ((hlpfile
= WINHELP_LookupHelpFile(lpszPath
)))
134 WINHELP_OpenHelpWindow(HLPFILE_PageByHash
, hlpfile
, 0,
135 WINHELP_GetWindowInfo(hlpfile
, lpszWindow
),
140 void CALLBACK
MACRO_About(void)
145 static void CALLBACK
MACRO_AddAccelerator(LONG u1
, LONG u2
, LPCSTR str
)
147 WINE_FIXME("(%u, %u, \"%s\")\n", u1
, u2
, str
);
150 static void CALLBACK
MACRO_ALink(LPCSTR str1
, LONG u
, LPCSTR str2
)
152 WINE_FIXME("(\"%s\", %u, \"%s\")\n", str1
, u
, str2
);
155 void CALLBACK
MACRO_Annotate(void)
160 static void CALLBACK
MACRO_AppendItem(LPCSTR str1
, LPCSTR str2
, LPCSTR str3
, LPCSTR str4
)
162 WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\")\n", str1
, str2
, str3
, str4
);
165 static void CALLBACK
MACRO_Back(void)
167 WINHELP_WINDOW
* win
= Globals
.active_win
;
171 if (win
&& win
->back
.index
>= 2)
172 WINHELP_CreateHelpWindow(&win
->back
.set
[--win
->back
.index
- 1], SW_SHOW
, FALSE
);
175 static void CALLBACK
MACRO_BackFlush(void)
177 WINHELP_WINDOW
* win
= Globals
.active_win
;
181 if (win
) WINHELP_DeleteBackSet(win
);
184 void CALLBACK
MACRO_BookmarkDefine(void)
189 static void CALLBACK
MACRO_BookmarkMore(void)
194 static void CALLBACK
MACRO_BrowseButtons(void)
196 HLPFILE_PAGE
* page
= Globals
.active_win
->page
;
201 MACRO_CreateButton("BTN_PREV", "&<<", "Prev()");
202 MACRO_CreateButton("BTN_NEXT", "&>>", "Next()");
204 if (!HLPFILE_PageByOffset(page
->file
, page
->browse_bwd
, &relative
))
205 MACRO_DisableButton("BTN_PREV");
206 if (!HLPFILE_PageByOffset(page
->file
, page
->browse_fwd
, &relative
))
207 MACRO_DisableButton("BTN_NEXT");
210 static void CALLBACK
MACRO_ChangeButtonBinding(LPCSTR id
, LPCSTR macro
)
212 WINHELP_WINDOW
* win
= Globals
.active_win
;
213 WINHELP_BUTTON
* button
;
218 WINE_TRACE("(\"%s\", \"%s\")\n", id
, macro
);
220 b
= MACRO_LookupButton(win
, id
);
221 if (!*b
) {WINE_FIXME("Couldn't find button '%s'\n", id
); return;}
223 size
= sizeof(WINHELP_BUTTON
) + lstrlen(id
) +
224 lstrlen((*b
)->lpszName
) + lstrlen(macro
) + 3;
226 button
= HeapAlloc(GetProcessHeap(), 0, size
);
229 button
->next
= (*b
)->next
;
230 button
->hWnd
= (*b
)->hWnd
;
231 button
->wParam
= (*b
)->wParam
;
233 ptr
= (char*)button
+ sizeof(WINHELP_BUTTON
);
236 button
->lpszID
= ptr
;
237 ptr
+= lstrlen(id
) + 1;
239 lstrcpy(ptr
, (*b
)->lpszName
);
240 button
->lpszName
= ptr
;
241 ptr
+= lstrlen((*b
)->lpszName
) + 1;
244 button
->lpszMacro
= ptr
;
248 WINHELP_LayoutMainWindow(win
);
251 static void CALLBACK
MACRO_ChangeEnable(LPCSTR id
, LPCSTR macro
)
253 WINE_TRACE("(\"%s\", \"%s\")\n", id
, macro
);
255 MACRO_ChangeButtonBinding(id
, macro
);
256 MACRO_EnableButton(id
);
259 static void CALLBACK
MACRO_ChangeItemBinding(LPCSTR str1
, LPCSTR str2
)
261 WINE_FIXME("(\"%s\", \"%s\")\n", str1
, str2
);
264 static void CALLBACK
MACRO_CheckItem(LPCSTR str
)
266 WINE_FIXME("(\"%s\")\n", str
);
269 static void CALLBACK
MACRO_CloseSecondarys(void)
274 for (win
= Globals
.win_list
; win
; win
= win
->next
)
275 if (win
->lpszName
&& lstrcmpi(win
->lpszName
, "main"))
276 DestroyWindow(win
->hMainWnd
);
279 static void CALLBACK
MACRO_CloseWindow(LPCSTR lpszWindow
)
283 WINE_TRACE("(\"%s\")\n", lpszWindow
);
285 if (!lpszWindow
|| !lpszWindow
[0]) lpszWindow
= "main";
287 for (win
= Globals
.win_list
; win
; win
= win
->next
)
288 if (win
->lpszName
&& !lstrcmpi(win
->lpszName
, lpszWindow
))
289 DestroyWindow(win
->hMainWnd
);
292 static void CALLBACK
MACRO_Compare(LPCSTR str
)
294 WINE_FIXME("(\"%s\")\n", str
);
297 static void CALLBACK
MACRO_Contents(void)
301 if (Globals
.active_win
->page
)
302 MACRO_JumpContents(Globals
.active_win
->page
->file
->lpszPath
, NULL
);
305 static void CALLBACK
MACRO_ControlPanel(LPCSTR str1
, LPCSTR str2
, LONG u
)
307 WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1
, str2
, u
);
310 void CALLBACK
MACRO_CopyDialog(void)
315 static void CALLBACK
MACRO_CopyTopic(void)
320 static void CALLBACK
MACRO_DeleteItem(LPCSTR str
)
322 WINE_FIXME("(\"%s\")\n", str
);
325 static void CALLBACK
MACRO_DeleteMark(LPCSTR str
)
327 WINE_FIXME("(\"%s\")\n", str
);
330 static void CALLBACK
MACRO_DisableItem(LPCSTR str
)
332 WINE_FIXME("(\"%s\")\n", str
);
335 static void CALLBACK
MACRO_EnableItem(LPCSTR str
)
337 WINE_FIXME("(\"%s\")\n", str
);
340 static void CALLBACK
MACRO_EndMPrint(void)
345 static void CALLBACK
MACRO_ExecFile(LPCSTR str1
, LPCSTR str2
, LONG u
, LPCSTR str3
)
347 WINE_FIXME("(\"%s\", \"%s\", %u, \"%s\")\n", str1
, str2
, u
, str3
);
350 static void CALLBACK
MACRO_ExecProgram(LPCSTR str
, LONG u
)
352 WINE_FIXME("(\"%s\", %u)\n", str
, u
);
355 void CALLBACK
MACRO_Exit(void)
359 while (Globals
.win_list
)
360 DestroyWindow(Globals
.win_list
->hMainWnd
);
363 static void CALLBACK
MACRO_ExtAbleItem(LPCSTR str
, LONG u
)
365 WINE_FIXME("(\"%s\", %u)\n", str
, u
);
368 static void CALLBACK
MACRO_ExtInsertItem(LPCSTR str1
, LPCSTR str2
, LPCSTR str3
, LPCSTR str4
, LONG u1
, LONG u2
)
370 WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u, %u)\n", str1
, str2
, str3
, str4
, u1
, u2
);
373 static void CALLBACK
MACRO_ExtInsertMenu(LPCSTR str1
, LPCSTR str2
, LPCSTR str3
, LONG u1
, LONG u2
)
375 WINE_FIXME("(\"%s\", \"%s\", \"%s\", %u, %u)\n", str1
, str2
, str3
, u1
, u2
);
378 static BOOL CALLBACK
MACRO_FileExist(LPCSTR str
)
380 WINE_TRACE("(\"%s\")\n", str
);
381 return GetFileAttributes(str
) != INVALID_FILE_ATTRIBUTES
;
384 void CALLBACK
MACRO_FileOpen(void)
386 char szFile
[MAX_PATH
];
388 if (WINHELP_GetOpenFileName(szFile
, MAX_PATH
))
390 MACRO_JumpContents(szFile
, "main");
394 static void CALLBACK
MACRO_Find(void)
399 static void CALLBACK
MACRO_Finder(void)
401 WINHELP_CreateIndexWindow(FALSE
);
404 static void CALLBACK
MACRO_FloatingMenu(void)
409 static void CALLBACK
MACRO_Flush(void)
414 static void CALLBACK
MACRO_FocusWindow(LPCSTR lpszWindow
)
418 WINE_TRACE("(\"%s\")\n", lpszWindow
);
420 if (!lpszWindow
|| !lpszWindow
[0]) lpszWindow
= "main";
422 for (win
= Globals
.win_list
; win
; win
= win
->next
)
423 if (win
->lpszName
&& !lstrcmpi(win
->lpszName
, lpszWindow
))
424 SetFocus(win
->hMainWnd
);
427 static void CALLBACK
MACRO_Generate(LPCSTR str
, LONG w
, LONG l
)
429 WINE_FIXME("(\"%s\", %x, %x)\n", str
, w
, l
);
432 static void CALLBACK
MACRO_GotoMark(LPCSTR str
)
434 WINE_FIXME("(\"%s\")\n", str
);
437 void CALLBACK
MACRO_HelpOn(void)
442 file
= Globals
.active_win
->page
->file
->help_on_file
;
444 file
= (Globals
.wVersion
> 4) ? "winhlp32.hlp" : "winhelp.hlp";
446 MACRO_JumpContents(file
, NULL
);
449 void CALLBACK
MACRO_HelpOnTop(void)
454 void CALLBACK
MACRO_History(void)
458 if (Globals
.active_win
&& !Globals
.active_win
->hHistoryWnd
)
460 HWND hWnd
= CreateWindow(HISTORY_WIN_CLASS_NAME
, "History", WS_OVERLAPPEDWINDOW
,
461 0, 0, 0, 0, 0, 0, Globals
.hInstance
, Globals
.active_win
);
462 ShowWindow(hWnd
, SW_NORMAL
);
466 static void CALLBACK
MACRO_IfThen(BOOL b
, LPCSTR t
)
468 if (b
) MACRO_ExecuteMacro(t
);
471 static void CALLBACK
MACRO_IfThenElse(BOOL b
, LPCSTR t
, LPCSTR f
)
473 if (b
) MACRO_ExecuteMacro(t
); else MACRO_ExecuteMacro(f
);
476 static BOOL CALLBACK
MACRO_InitMPrint(void)
482 static void CALLBACK
MACRO_InsertItem(LPCSTR str1
, LPCSTR str2
, LPCSTR str3
, LPCSTR str4
, LONG u
)
484 WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u)\n", str1
, str2
, str3
, str4
, u
);
487 static void CALLBACK
MACRO_InsertMenu(LPCSTR str1
, LPCSTR str2
, LONG u
)
489 WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1
, str2
, u
);
492 static BOOL CALLBACK
MACRO_IsBook(void)
495 return Globals
.isBook
;
498 static BOOL CALLBACK
MACRO_IsMark(LPCSTR str
)
500 WINE_FIXME("(\"%s\")\n", str
);
504 static BOOL CALLBACK
MACRO_IsNotMark(LPCSTR str
)
506 WINE_FIXME("(\"%s\")\n", str
);
510 void CALLBACK
MACRO_JumpContext(LPCSTR lpszPath
, LPCSTR lpszWindow
, LONG context
)
514 WINE_TRACE("(\"%s\", \"%s\", %d)\n", lpszPath
, lpszWindow
, context
);
515 hlpfile
= WINHELP_LookupHelpFile(lpszPath
);
516 /* Some madness: what user calls 'context', hlpfile calls 'map' */
517 WINHELP_OpenHelpWindow(HLPFILE_PageByMap
, hlpfile
, context
,
518 WINHELP_GetWindowInfo(hlpfile
, lpszWindow
),
522 void CALLBACK
MACRO_JumpHash(LPCSTR lpszPath
, LPCSTR lpszWindow
, LONG lHash
)
526 WINE_TRACE("(\"%s\", \"%s\", %u)\n", lpszPath
, lpszWindow
, lHash
);
527 hlpfile
= WINHELP_LookupHelpFile(lpszPath
);
528 WINHELP_OpenHelpWindow(HLPFILE_PageByHash
, hlpfile
, lHash
,
529 WINHELP_GetWindowInfo(hlpfile
, lpszWindow
),
533 static void CALLBACK
MACRO_JumpHelpOn(void)
538 static void CALLBACK
MACRO_JumpID(LPCSTR lpszPathWindow
, LPCSTR topic_id
)
542 WINE_TRACE("(\"%s\", \"%s\")\n", lpszPathWindow
, topic_id
);
543 if ((ptr
= strchr(lpszPathWindow
, '>')) != NULL
)
546 size_t sz
= ptr
- lpszPathWindow
;
548 tmp
= HeapAlloc(GetProcessHeap(), 0, sz
+ 1);
551 memcpy(tmp
, lpszPathWindow
, sz
);
553 MACRO_JumpHash(tmp
, ptr
+ 1, HLPFILE_Hash(topic_id
));
554 HeapFree(GetProcessHeap(), 0, tmp
);
558 MACRO_JumpHash(lpszPathWindow
, NULL
, HLPFILE_Hash(topic_id
));
561 /* FIXME: this macros is wrong
562 * it should only contain 2 strings, path & window are coded as path>window
564 static void CALLBACK
MACRO_JumpKeyword(LPCSTR lpszPath
, LPCSTR lpszWindow
, LPCSTR keyword
)
566 WINE_FIXME("(\"%s\", \"%s\", \"%s\")\n", lpszPath
, lpszWindow
, keyword
);
569 static void CALLBACK
MACRO_KLink(LPCSTR str1
, LONG u
, LPCSTR str2
, LPCSTR str3
)
571 WINE_FIXME("(\"%s\", %u, \"%s\", \"%s\")\n", str1
, u
, str2
, str3
);
574 static void CALLBACK
MACRO_Menu(void)
579 static void CALLBACK
MACRO_MPrintHash(LONG u
)
581 WINE_FIXME("(%u)\n", u
);
584 static void CALLBACK
MACRO_MPrintID(LPCSTR str
)
586 WINE_FIXME("(\"%s\")\n", str
);
589 static void CALLBACK
MACRO_Next(void)
594 wp
.page
= Globals
.active_win
->page
;
595 wp
.page
= HLPFILE_PageByOffset(wp
.page
->file
, wp
.page
->browse_fwd
, &wp
.relative
);
598 wp
.page
->file
->wRefCount
++;
599 wp
.wininfo
= Globals
.active_win
->info
;
600 WINHELP_CreateHelpWindow(&wp
, SW_NORMAL
, TRUE
);
604 static void CALLBACK
MACRO_NoShow(void)
609 void CALLBACK
MACRO_PopupContext(LPCSTR str
, LONG u
)
611 WINE_FIXME("(\"%s\", %u)\n", str
, u
);
614 static void CALLBACK
MACRO_PopupHash(LPCSTR str
, LONG u
)
616 WINE_FIXME("(\"%s\", %u)\n", str
, u
);
619 static void CALLBACK
MACRO_PopupId(LPCSTR str1
, LPCSTR str2
)
621 WINE_FIXME("(\"%s\", \"%s\")\n", str1
, str2
);
624 static void CALLBACK
MACRO_PositionWindow(LONG i1
, LONG i2
, LONG u1
, LONG u2
, LONG u3
, LPCSTR str
)
626 WINE_FIXME("(%i, %i, %u, %u, %u, \"%s\")\n", i1
, i2
, u1
, u2
, u3
, str
);
629 static void CALLBACK
MACRO_Prev(void)
634 wp
.page
= Globals
.active_win
->page
;
635 wp
.page
= HLPFILE_PageByOffset(wp
.page
->file
, wp
.page
->browse_bwd
, &wp
.relative
);
638 wp
.page
->file
->wRefCount
++;
639 wp
.wininfo
= Globals
.active_win
->info
;
640 WINHELP_CreateHelpWindow(&wp
, SW_NORMAL
, TRUE
);
644 void CALLBACK
MACRO_Print(void)
650 printer
.lStructSize
= sizeof(printer
);
651 printer
.hwndOwner
= Globals
.active_win
->hMainWnd
;
652 printer
.hInstance
= Globals
.hInstance
;
653 printer
.hDevMode
= 0;
654 printer
.hDevNames
= 0;
657 printer
.nFromPage
= 0;
659 printer
.nMinPage
= 0;
660 printer
.nMaxPage
= 0;
662 printer
.lCustData
= 0;
663 printer
.lpfnPrintHook
= 0;
664 printer
.lpfnSetupHook
= 0;
665 printer
.lpPrintTemplateName
= 0;
666 printer
.lpSetupTemplateName
= 0;
667 printer
.hPrintTemplate
= 0;
668 printer
.hSetupTemplate
= 0;
670 if (PrintDlgA(&printer
)) {
671 WINE_FIXME("Print()\n");
675 void CALLBACK
MACRO_PrinterSetup(void)
680 static void CALLBACK
MACRO_RegisterRoutine(LPCSTR dll_name
, LPCSTR proc
, LPCSTR args
)
686 WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", dll_name
, proc
, args
);
688 /* FIXME: are the registered DLLs global or linked to the current file ???
689 * We assume globals (as we did for macros, but is this really the case ???)
691 for (dll
= Globals
.dlls
; dll
; dll
= dll
->next
)
693 if (!strcmp(dll
->name
, dll_name
)) break;
697 HANDLE hLib
= LoadLibrary(dll_name
);
699 /* FIXME: the library will not be unloaded until exit of program
700 * We don't send the DW_TERM message
702 WINE_TRACE("Loading %s\n", dll_name
);
703 /* FIXME: should look in the directory where current hlpfile
708 /* FIXME: internationalisation for error messages */
709 WINE_FIXME("Cannot find dll %s\n", dll_name
);
711 else if ((dll
= HeapAlloc(GetProcessHeap(), 0, sizeof(*dll
))))
714 dll
->name
= strdup(dll_name
); /* FIXME */
715 dll
->next
= Globals
.dlls
;
717 dll
->handler
= (WINHELP_LDLLHandler
)GetProcAddress(dll
->hLib
, "LDLLHandler");
718 dll
->class = dll
->handler
? (dll
->handler
)(DW_WHATMSG
, 0, 0) : DC_NOMSG
;
719 WINE_TRACE("Got class %x for DLL %s\n", dll
->class, dll_name
);
720 if (dll
->class & DC_INITTERM
) dll
->handler(DW_INIT
, 0, 0);
721 if (dll
->class & DC_CALLBACKS
) dll
->handler(DW_CALLBACKS
, (DWORD
)Callbacks
, 0);
723 else WINE_WARN("OOM\n");
725 if (dll
&& !(fn
= GetProcAddress(dll
->hLib
, proc
)))
727 /* FIXME: internationalisation for error messages */
728 WINE_FIXME("Cannot find proc %s in dll %s\n", dll_name
, proc
);
731 size
= ++MACRO_NumLoaded
* sizeof(struct MacroDesc
);
732 if (!MACRO_Loaded
) MACRO_Loaded
= HeapAlloc(GetProcessHeap(), 0, size
);
733 else MACRO_Loaded
= HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded
, size
);
734 MACRO_Loaded
[MACRO_NumLoaded
- 1].name
= strdup(proc
); /* FIXME */
735 MACRO_Loaded
[MACRO_NumLoaded
- 1].alias
= NULL
;
736 MACRO_Loaded
[MACRO_NumLoaded
- 1].isBool
= 0;
737 MACRO_Loaded
[MACRO_NumLoaded
- 1].arguments
= strdup(args
); /* FIXME */
738 MACRO_Loaded
[MACRO_NumLoaded
- 1].fn
= fn
;
739 WINE_TRACE("Added %s(%s) at %p\n", proc
, args
, fn
);
742 static void CALLBACK
MACRO_RemoveAccelerator(LONG u1
, LONG u2
)
744 WINE_FIXME("(%u, %u)\n", u1
, u2
);
747 static void CALLBACK
MACRO_ResetMenu(void)
752 static void CALLBACK
MACRO_SaveMark(LPCSTR str
)
754 WINE_FIXME("(\"%s\")\n", str
);
757 static void CALLBACK
MACRO_Search(void)
759 WINHELP_CreateIndexWindow(TRUE
);
762 void CALLBACK
MACRO_SetContents(LPCSTR str
, LONG u
)
764 WINE_FIXME("(\"%s\", %u)\n", str
, u
);
767 static void CALLBACK
MACRO_SetHelpOnFile(LPCSTR str
)
769 WINE_TRACE("(\"%s\")\n", str
);
771 HeapFree(GetProcessHeap(), 0, Globals
.active_win
->page
->file
->help_on_file
);
772 Globals
.active_win
->page
->file
->help_on_file
= HeapAlloc(GetProcessHeap(), 0, strlen(str
) + 1);
773 if (Globals
.active_win
->page
->file
->help_on_file
)
774 strcpy(Globals
.active_win
->page
->file
->help_on_file
, str
);
777 static void CALLBACK
MACRO_SetPopupColor(LONG r
, LONG g
, LONG b
)
779 WINE_TRACE("(%x, %x, %x)\n", r
, g
, b
);
780 Globals
.active_win
->page
->file
->has_popup_color
= TRUE
;
781 Globals
.active_win
->page
->file
->popup_color
= RGB(r
, g
, b
);
784 static void CALLBACK
MACRO_ShellExecute(LPCSTR str1
, LPCSTR str2
, LONG u1
, LONG u2
, LPCSTR str3
, LPCSTR str4
)
786 WINE_FIXME("(\"%s\", \"%s\", %u, %u, \"%s\", \"%s\")\n", str1
, str2
, u1
, u2
, str3
, str4
);
789 static void CALLBACK
MACRO_ShortCut(LPCSTR str1
, LPCSTR str2
, LONG w
, LONG l
, LPCSTR str
)
791 WINE_FIXME("(\"%s\", \"%s\", %x, %x, \"%s\")\n", str1
, str2
, w
, l
, str
);
794 static void CALLBACK
MACRO_TCard(LONG u
)
796 WINE_FIXME("(%u)\n", u
);
799 static void CALLBACK
MACRO_Test(LONG u
)
801 WINE_FIXME("(%u)\n", u
);
804 static BOOL CALLBACK
MACRO_TestALink(LPCSTR str
)
806 WINE_FIXME("(\"%s\")\n", str
);
810 static BOOL CALLBACK
MACRO_TestKLink(LPCSTR str
)
812 WINE_FIXME("(\"%s\")\n", str
);
816 static void CALLBACK
MACRO_UncheckItem(LPCSTR str
)
818 WINE_FIXME("(\"%s\")\n", str
);
821 static void CALLBACK
MACRO_UpdateWindow(LPCSTR str1
, LPCSTR str2
)
823 WINE_FIXME("(\"%s\", \"%s\")\n", str1
, str2
);
827 /**************************************************/
829 /**************************************************/
832 * U: 32 bit unsigned int
833 * I: 32 bit signed int
835 * v: unknown (32 bit entity)
838 static struct MacroDesc MACRO_Builtins
[] = {
839 {"About", NULL
, 0, "", (FARPROC
)MACRO_About
},
840 {"AddAccelerator", "AA", 0, "UUS", (FARPROC
)MACRO_AddAccelerator
},
841 {"ALink", "AL", 0, "SUS", (FARPROC
)MACRO_ALink
},
842 {"Annotate", NULL
, 0, "", (FARPROC
)MACRO_Annotate
},
843 {"AppendItem", NULL
, 0, "SSSS", (FARPROC
)MACRO_AppendItem
},
844 {"Back", NULL
, 0, "", (FARPROC
)MACRO_Back
},
845 {"BackFlush", "BF", 0, "", (FARPROC
)MACRO_BackFlush
},
846 {"BookmarkDefine", NULL
, 0, "", (FARPROC
)MACRO_BookmarkDefine
},
847 {"BookmarkMore", NULL
, 0, "", (FARPROC
)MACRO_BookmarkMore
},
848 {"BrowseButtons", NULL
, 0, "", (FARPROC
)MACRO_BrowseButtons
},
849 {"ChangeButtonBinding", "CBB",0, "SS", (FARPROC
)MACRO_ChangeButtonBinding
},
850 {"ChangeEnable", "CE", 0, "SS", (FARPROC
)MACRO_ChangeEnable
},
851 {"ChangeItemBinding", "CIB",0, "SS", (FARPROC
)MACRO_ChangeItemBinding
},
852 {"CheckItem", "CI", 0, "S", (FARPROC
)MACRO_CheckItem
},
853 {"CloseSecondarys", "CS", 0, "", (FARPROC
)MACRO_CloseSecondarys
},
854 {"CloseWindow", "CW", 0, "S", (FARPROC
)MACRO_CloseWindow
},
855 {"Compare", NULL
, 0, "S", (FARPROC
)MACRO_Compare
},
856 {"Contents", NULL
, 0, "", (FARPROC
)MACRO_Contents
},
857 {"ControlPanel", NULL
, 0, "SSU", (FARPROC
)MACRO_ControlPanel
},
858 {"CopyDialog", NULL
, 0, "", (FARPROC
)MACRO_CopyDialog
},
859 {"CopyTopic", "CT", 0, "", (FARPROC
)MACRO_CopyTopic
},
860 {"CreateButton", "CB", 0, "SSS", (FARPROC
)MACRO_CreateButton
},
861 {"DeleteItem", NULL
, 0, "S", (FARPROC
)MACRO_DeleteItem
},
862 {"DeleteMark", NULL
, 0, "S", (FARPROC
)MACRO_DeleteMark
},
863 {"DestroyButton", NULL
, 0, "S", (FARPROC
)MACRO_DestroyButton
},
864 {"DisableButton", "DB", 0, "S", (FARPROC
)MACRO_DisableButton
},
865 {"DisableItem", "DI", 0, "S", (FARPROC
)MACRO_DisableItem
},
866 {"EnableButton", "EB", 0, "S", (FARPROC
)MACRO_EnableButton
},
867 {"EnableItem", "EI", 0, "S", (FARPROC
)MACRO_EnableItem
},
868 {"EndMPrint", NULL
, 0, "", (FARPROC
)MACRO_EndMPrint
},
869 {"ExecFile", "EF", 0, "SSUS", (FARPROC
)MACRO_ExecFile
},
870 {"ExecProgram", "EP", 0, "SU", (FARPROC
)MACRO_ExecProgram
},
871 {"Exit", NULL
, 0, "", (FARPROC
)MACRO_Exit
},
872 {"ExtAbleItem", NULL
, 0, "SU", (FARPROC
)MACRO_ExtAbleItem
},
873 {"ExtInsertItem", NULL
, 0, "SSSSUU", (FARPROC
)MACRO_ExtInsertItem
},
874 {"ExtInsertMenu", NULL
, 0, "SSSUU", (FARPROC
)MACRO_ExtInsertMenu
},
875 {"FileExist", "FE", 1, "S", (FARPROC
)MACRO_FileExist
},
876 {"FileOpen", "FO", 0, "", (FARPROC
)MACRO_FileOpen
},
877 {"Find", NULL
, 0, "", (FARPROC
)MACRO_Find
},
878 {"Finder", "FD", 0, "", (FARPROC
)MACRO_Finder
},
879 {"FloatingMenu", NULL
, 0, "", (FARPROC
)MACRO_FloatingMenu
},
880 {"Flush", "FH", 0, "", (FARPROC
)MACRO_Flush
},
881 {"FocusWindow", NULL
, 0, "S", (FARPROC
)MACRO_FocusWindow
},
882 {"Generate", NULL
, 0, "SUU", (FARPROC
)MACRO_Generate
},
883 {"GotoMark", NULL
, 0, "S", (FARPROC
)MACRO_GotoMark
},
884 {"HelpOn", NULL
, 0, "", (FARPROC
)MACRO_HelpOn
},
885 {"HelpOnTop", NULL
, 0, "", (FARPROC
)MACRO_HelpOnTop
},
886 {"History", NULL
, 0, "", (FARPROC
)MACRO_History
},
887 {"InitMPrint", NULL
, 1, "", (FARPROC
)MACRO_InitMPrint
},
888 {"InsertItem", NULL
, 0, "SSSSU", (FARPROC
)MACRO_InsertItem
},
889 {"InsertMenu", NULL
, 0, "SSU", (FARPROC
)MACRO_InsertMenu
},
890 {"IfThen", "IF", 0, "BS", (FARPROC
)MACRO_IfThen
},
891 {"IfThenElse", "IE", 0, "BSS", (FARPROC
)MACRO_IfThenElse
},
892 {"IsBook", NULL
, 1, "", (FARPROC
)MACRO_IsBook
},
893 {"IsMark", NULL
, 1, "S", (FARPROC
)MACRO_IsMark
},
894 {"IsNotMark", "NM", 1, "S", (FARPROC
)MACRO_IsNotMark
},
895 {"JumpContents", NULL
, 0, "SS", (FARPROC
)MACRO_JumpContents
},
896 {"JumpContext", "JC", 0, "SSU", (FARPROC
)MACRO_JumpContext
},
897 {"JumpHash", "JH", 0, "SSU", (FARPROC
)MACRO_JumpHash
},
898 {"JumpHelpOn", NULL
, 0, "", (FARPROC
)MACRO_JumpHelpOn
},
899 {"JumpID", "JI", 0, "SS", (FARPROC
)MACRO_JumpID
},
900 {"JumpKeyword", "JK", 0, "SSS", (FARPROC
)MACRO_JumpKeyword
},
901 {"KLink", "KL", 0, "SUSS", (FARPROC
)MACRO_KLink
},
902 {"Menu", "MU", 0, "", (FARPROC
)MACRO_Menu
},
903 {"MPrintHash", NULL
, 0, "U", (FARPROC
)MACRO_MPrintHash
},
904 {"MPrintID", NULL
, 0, "S", (FARPROC
)MACRO_MPrintID
},
905 {"Next", NULL
, 0, "", (FARPROC
)MACRO_Next
},
906 {"NoShow", NULL
, 0, "", (FARPROC
)MACRO_NoShow
},
907 {"PopupContext", "PC", 0, "SU", (FARPROC
)MACRO_PopupContext
},
908 {"PopupHash", NULL
, 0, "SU", (FARPROC
)MACRO_PopupHash
},
909 {"PopupId", "PI", 0, "SS", (FARPROC
)MACRO_PopupId
},
910 {"PositionWindow", "PW", 0, "IIUUUS", (FARPROC
)MACRO_PositionWindow
},
911 {"Prev", NULL
, 0, "", (FARPROC
)MACRO_Prev
},
912 {"Print", NULL
, 0, "", (FARPROC
)MACRO_Print
},
913 {"PrinterSetup", NULL
, 0, "", (FARPROC
)MACRO_PrinterSetup
},
914 {"RegisterRoutine", "RR", 0, "SSS", (FARPROC
)MACRO_RegisterRoutine
},
915 {"RemoveAccelerator", "RA", 0, "UU", (FARPROC
)MACRO_RemoveAccelerator
},
916 {"ResetMenu", NULL
, 0, "", (FARPROC
)MACRO_ResetMenu
},
917 {"SaveMark", NULL
, 0, "S", (FARPROC
)MACRO_SaveMark
},
918 {"Search", NULL
, 0, "", (FARPROC
)MACRO_Search
},
919 {"SetContents", NULL
, 0, "SU", (FARPROC
)MACRO_SetContents
},
920 {"SetHelpOnFile", NULL
, 0, "S", (FARPROC
)MACRO_SetHelpOnFile
},
921 {"SetPopupColor", "SPC",0, "UUU", (FARPROC
)MACRO_SetPopupColor
},
922 {"ShellExecute", "SE", 0, "SSUUSS", (FARPROC
)MACRO_ShellExecute
},
923 {"ShortCut", "SH", 0, "SSUUS", (FARPROC
)MACRO_ShortCut
},
924 {"TCard", NULL
, 0, "U", (FARPROC
)MACRO_TCard
},
925 {"Test", NULL
, 0, "U", (FARPROC
)MACRO_Test
},
926 {"TestALink", NULL
, 1, "S", (FARPROC
)MACRO_TestALink
},
927 {"TestKLink", NULL
, 1, "S", (FARPROC
)MACRO_TestKLink
},
928 {"UncheckItem", "UI", 0, "S", (FARPROC
)MACRO_UncheckItem
},
929 {"UpdateWindow", "UW", 0, "SS", (FARPROC
)MACRO_UpdateWindow
},
930 {NULL
, NULL
, 0, NULL
, NULL
}
933 static int MACRO_DoLookUp(struct MacroDesc
* start
, const char* name
, struct lexret
* lr
, unsigned len
)
935 struct MacroDesc
* md
;
937 for (md
= start
; md
->name
&& len
!= 0; md
++, len
--)
939 if (strcasecmp(md
->name
, name
) == 0 || (md
->alias
!= NULL
&& strcasecmp(md
->alias
, name
) == 0))
941 lr
->proto
= md
->arguments
;
942 lr
->function
= md
->fn
;
943 return md
->isBool
? BOOL_FUNCTION
: VOID_FUNCTION
;
949 int MACRO_Lookup(const char* name
, struct lexret
* lr
)
953 if ((ret
= MACRO_DoLookUp(MACRO_Builtins
, name
, lr
, -1)) != EMPTY
)
955 if (MACRO_Loaded
&& (ret
= MACRO_DoLookUp(MACRO_Loaded
, name
, lr
, MACRO_NumLoaded
)) != EMPTY
)