-/*
- * Help Viewer
- *
- * Copyright 1996 Ulrich Schmid
- * Copyright 2002 Eric Pouech
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#define WIN32_LEAN_AND_MEAN
-
-#include <stdio.h>
-
-#include "windows.h"
-#include "commdlg.h"
-#include "winhelp.h"
-
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(winhelp);
-
-/**************************************************/
-/* Macro table */
-/**************************************************/
-struct MacroDesc {
- const char* name;
- const char* alias;
- BOOL isBool;
- const char* arguments;
- FARPROC fn;
-};
-
-/* types:
- * U: 32 bit unsigned int
- * I: 32 bit signed int
- * S: string
- * v: unknown (32 bit entity)
- */
-
-static struct MacroDesc MACRO_Builtins[] = {
- {"About", NULL, 0, "", (FARPROC)MACRO_About},
- {"AddAccelerator", "AA", 0, "UUS", (FARPROC)MACRO_AddAccelerator},
- {"ALink", "AL", 0, "SUS", (FARPROC)MACRO_ALink},
- {"Annotate", NULL, 0, "", (FARPROC)MACRO_Annotate},
- {"AppendItem", NULL, 0, "SSSS", (FARPROC)MACRO_AppendItem},
- {"Back", NULL, 0, "", (FARPROC)MACRO_Back},
- {"BackFlush", "BF", 0, "", (FARPROC)MACRO_BackFlush},
- {"BookmarkDefine", NULL, 0, "", (FARPROC)MACRO_BookmarkDefine},
- {"BookmarkMore", NULL, 0, "", (FARPROC)MACRO_BookmarkMore},
- {"BrowseButtons", NULL, 0, "", (FARPROC)MACRO_BrowseButtons},
- {"ChangeButtonBinding", "CBB",0, "SS", (FARPROC)MACRO_ChangeButtonBinding},
- {"ChangeEnable", "CE", 0, "SS", (FARPROC)MACRO_ChangeEnable},
- {"ChangeItemBinding", "CIB",0, "SS", (FARPROC)MACRO_ChangeItemBinding},
- {"CheckItem", "CI", 0, "S", (FARPROC)MACRO_CheckItem},
- {"CloseSecondarys", "CS", 0, "", (FARPROC)MACRO_CloseSecondarys},
- {"CloseWindow", "CW", 0, "S", (FARPROC)MACRO_CloseWindow},
- {"Compare", NULL, 0, "S", (FARPROC)MACRO_Compare},
- {"Contents", NULL, 0, "", (FARPROC)MACRO_Contents},
- {"ControlPanel", NULL, 0, "SSU", (FARPROC)MACRO_ControlPanel},
- {"CopyDialog", NULL, 0, "", (FARPROC)MACRO_CopyDialog},
- {"CopyTopic", "CT", 0, "", (FARPROC)MACRO_CopyTopic},
- {"CreateButton", "CB", 0, "SSS", (FARPROC)MACRO_CreateButton},
- {"DeleteItem", NULL, 0, "S", (FARPROC)MACRO_DeleteItem},
- {"DeleteMark", NULL, 0, "S", (FARPROC)MACRO_DeleteMark},
- {"DestroyButton", NULL, 0, "S", (FARPROC)MACRO_DestroyButton},
- {"DisableButton", "DB", 0, "S", (FARPROC)MACRO_DisableButton},
- {"DisableItem", "DI", 0, "S", (FARPROC)MACRO_DisableItem},
- {"EnableButton", "EB", 0, "S", (FARPROC)MACRO_EnableButton},
- {"EnableItem", "EI", 0, "S", (FARPROC)MACRO_EnableItem},
- {"EndMPrint", NULL, 0, "", (FARPROC)MACRO_EndMPrint},
- {"ExecFile", "EF", 0, "SSUS", (FARPROC)MACRO_ExecFile},
- {"ExecProgram", "EP", 0, "SU", (FARPROC)MACRO_ExecProgram},
- {"Exit", NULL, 0, "", (FARPROC)MACRO_Exit},
- {"ExtAbleItem", NULL, 0, "SU", (FARPROC)MACRO_ExtAbleItem},
- {"ExtInsertItem", NULL, 0, "SSSSUU", (FARPROC)MACRO_ExtInsertItem},
- {"ExtInsertMenu", NULL, 0, "SSSUU", (FARPROC)MACRO_ExtInsertMenu},
- {"FileExist", "FE", 1, "S", (FARPROC)MACRO_FileExist},
- {"FileOpen", "FO", 0, "", (FARPROC)MACRO_FileOpen},
- {"Find", NULL, 0, "", (FARPROC)MACRO_Find},
- {"Finder", "FD", 0, "", (FARPROC)MACRO_Finder},
- {"FloatingMenu", NULL, 0, "", (FARPROC)MACRO_FloatingMenu},
- {"Flush", "FH", 0, "", (FARPROC)MACRO_Flush},
- {"FocusWindow", NULL, 0, "S", (FARPROC)MACRO_FocusWindow},
- {"Generate", NULL, 0, "SUU", (FARPROC)MACRO_Generate},
- {"GotoMark", NULL, 0, "S", (FARPROC)MACRO_GotoMark},
- {"HelpOn", NULL, 0, "", (FARPROC)MACRO_HelpOn},
- {"HelpOnTop", NULL, 0, "", (FARPROC)MACRO_HelpOnTop},
- {"History", NULL, 0, "", (FARPROC)MACRO_History},
- {"InitMPrint", NULL, 1, "", (FARPROC)MACRO_InitMPrint},
- {"InsertItem", NULL, 0, "SSSSU", (FARPROC)MACRO_InsertItem},
- {"InsertMenu", NULL, 0, "SSU", (FARPROC)MACRO_InsertMenu},
- {"IfThen", "IF", 0, "BS", (FARPROC)MACRO_IfThen},
- {"IfThenElse", "IE", 0, "BSS", (FARPROC)MACRO_IfThenElse},
- {"IsBook", NULL, 1, "", (FARPROC)MACRO_IsBook},
- {"IsMark", NULL, 1, "S", (FARPROC)MACRO_IsMark},
- {"IsNotMark", "NM", 1, "S", (FARPROC)MACRO_IsNotMark},
- {"JumpContents", NULL, 0, "SS", (FARPROC)MACRO_JumpContents},
- {"JumpContext", "JC", 0, "SSU", (FARPROC)MACRO_JumpContext},
- {"JumpHash", "JH", 0, "SSU", (FARPROC)MACRO_JumpHash},
- {"JumpHelpOn", NULL, 0, "", (FARPROC)MACRO_JumpHelpOn},
- {"JumpID", "JI", 0, "SSS", (FARPROC)MACRO_JumpID},
- {"JumpKeyword", "JK", 0, "SSS", (FARPROC)MACRO_JumpKeyword},
- {"KLink", "KL", 0, "SUSS", (FARPROC)MACRO_KLink},
- {"Menu", "MU", 0, "", (FARPROC)MACRO_Menu},
- {"MPrintHash", NULL, 0, "U", (FARPROC)MACRO_MPrintHash},
- {"MPrintID", NULL, 0, "S", (FARPROC)MACRO_MPrintID},
- {"Next", NULL, 0, "", (FARPROC)MACRO_Next},
- {"NoShow", NULL, 0, "", (FARPROC)MACRO_NoShow},
- {"PopupContext", "PC", 0, "SU", (FARPROC)MACRO_PopupContext},
- {"PopupHash", NULL, 0, "SU", (FARPROC)MACRO_PopupHash},
- {"PopupId", "PI", 0, "SS", (FARPROC)MACRO_PopupId},
- {"PositionWindow", "PW", 0, "IIUUUS", (FARPROC)MACRO_PositionWindow},
- {"Prev", NULL, 0, "", (FARPROC)MACRO_Prev},
- {"Print", NULL, 0, "", (FARPROC)MACRO_Print},
- {"PrinterSetup", NULL, 0, "", (FARPROC)MACRO_PrinterSetup},
- {"RegisterRoutine", "RR", 0, "SSS", (FARPROC)MACRO_RegisterRoutine},
- {"RemoveAccelerator", "RA", 0, "UU", (FARPROC)MACRO_RemoveAccelerator},
- {"ResetMenu", NULL, 0, "", (FARPROC)MACRO_ResetMenu},
- {"SaveMark", NULL, 0, "S", (FARPROC)MACRO_SaveMark},
- {"Search", NULL, 0, "", (FARPROC)MACRO_Search},
- {"SetContents", NULL, 0, "SU", (FARPROC)MACRO_SetContents},
- {"SetHelpOnFile", NULL, 0, "S", (FARPROC)MACRO_SetHelpOnFile},
- {"SetPopupColor", "SPC",0, "UUU", (FARPROC)MACRO_SetPopupColor},
- {"ShellExecute", "SE", 0, "SSUUSS", (FARPROC)MACRO_ShellExecute},
- {"ShortCut", "SH", 0, "SSUUS", (FARPROC)MACRO_ShortCut},
- {"TCard", NULL, 0, "U", (FARPROC)MACRO_TCard},
- {"Test", NULL, 0, "U", (FARPROC)MACRO_Test},
- {"TestALink", NULL, 1, "S", (FARPROC)MACRO_TestALink},
- {"TestKLink", NULL, 1, "S", (FARPROC)MACRO_TestKLink},
- {"UncheckItem", "UI", 0, "S", (FARPROC)MACRO_UncheckItem},
- {"UpdateWindow", "UW", 0, "SS", (FARPROC)MACRO_UpdateWindow},
- {NULL, NULL, 0, NULL, NULL}
-};
-
-static struct MacroDesc*MACRO_Loaded /* = NULL */;
-static unsigned MACRO_NumLoaded /* = 0 */;
-
-static int MACRO_DoLookUp(struct MacroDesc* start, const char* name, struct lexret* lr, unsigned len)
-{
- struct MacroDesc* md;
-
- for (md = start; md->name && len != 0; md++, len--)
- {
- if (strcasecmp(md->name, name) == 0 || (md->alias != NULL && strcasecmp(md->alias, name) == 0))
- {
- lr->proto = md->arguments;
- lr->function = md->fn;
- return md->isBool ? BOOL_FUNCTION : VOID_FUNCTION;
- }
- }
- return EMPTY;
-}
-
-int MACRO_Lookup(const char* name, struct lexret* lr)
-{
- int ret;
-
- if ((ret = MACRO_DoLookUp(MACRO_Builtins, name, lr, -1)) != EMPTY)
- return ret;
- if (MACRO_Loaded && (ret = MACRO_DoLookUp(MACRO_Loaded, name, lr, MACRO_NumLoaded)) != EMPTY)
- return ret;
-
- lr->string = name;
- return IDENTIFIER;
-}
-
-/******* helper functions *******/
-
-static WINHELP_BUTTON** MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name)
-{
- WINHELP_BUTTON** b;
-
- for (b = &win->first_button; *b; b = &(*b)->next)
- if (!lstrcmpi(name, (*b)->lpszID)) break;
- return b;
-}
-
-/******* real macro implementation *******/
-
-void CALLBACK MACRO_About(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_AddAccelerator(LONG u1, LONG u2, LPCSTR str)
-{
- WINE_FIXME("(%u, %u, \"%s\")\n", u1, u2, str);
-}
-
-void CALLBACK MACRO_ALink(LPCSTR str1, LONG u, LPCSTR str2)
-{
- WINE_FIXME("(\"%s\", %u, \"%s\")\n", str1, u, str2);
-}
-
-void CALLBACK MACRO_Annotate(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_AppendItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4)
-{
- WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\")\n", str1, str2, str3, str4);
-}
-
-void CALLBACK MACRO_Back(void)
-{
- WINHELP_WINDOW* win = Globals.active_win;
-
- WINE_TRACE("()\n");
-
- if (win && win->backIndex >= 2)
- WINHELP_CreateHelpWindow(win->back[--win->backIndex - 1],
- win->info, SW_SHOW);
-}
-
-void CALLBACK MACRO_BackFlush(void)
-{
- WINHELP_WINDOW* win = Globals.active_win;
-
- WINE_TRACE("()\n");
-
- if (win)
- {
- int i;
-
- for (i = 0; i < win->backIndex; i++)
- {
- HLPFILE_FreeHlpFile(win->back[i]->file);
- win->back[i] = NULL;
- }
- win->backIndex = 0;
- }
-}
-
-void CALLBACK MACRO_BookmarkDefine(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_BookmarkMore(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_BrowseButtons(void)
-{
- WINE_TRACE("()\n");
-
- MACRO_CreateButton("BTN_PREV", "&<<", "Prev()");
- MACRO_CreateButton("BTN_NEXT", "&>>", "Next()");
-}
-
-void CALLBACK MACRO_ChangeButtonBinding(LPCSTR id, LPCSTR macro)
-{
- WINHELP_WINDOW* win = Globals.active_win;
- WINHELP_BUTTON* button;
- WINHELP_BUTTON** b;
- LONG size;
- LPSTR ptr;
-
- WINE_TRACE("(\"%s\", \"%s\")\n", id, macro);
-
- b = MACRO_LookupButton(win, id);
- if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
-
- size = sizeof(WINHELP_BUTTON) + lstrlen(id) +
- lstrlen((*b)->lpszName) + lstrlen(macro) + 3;
-
- button = HeapAlloc(GetProcessHeap(), 0, size);
- if (!button) return;
-
- button->next = (*b)->next;
- button->hWnd = (*b)->hWnd;
- button->wParam = (*b)->wParam;
-
- ptr = (char*)button + sizeof(WINHELP_BUTTON);
-
- lstrcpy(ptr, id);
- button->lpszID = ptr;
- ptr += lstrlen(id) + 1;
-
- lstrcpy(ptr, (*b)->lpszName);
- button->lpszName = ptr;
- ptr += lstrlen((*b)->lpszName) + 1;
-
- lstrcpy(ptr, macro);
- button->lpszMacro = ptr;
-
- *b = button;
-
- SendMessage(win->hMainWnd, WM_USER, 0, 0);
-}
-
-void CALLBACK MACRO_ChangeEnable(LPCSTR id, LPCSTR macro)
-{
- WINE_TRACE("(\"%s\", \"%s\")\n", id, macro);
-
- MACRO_ChangeButtonBinding(id, macro);
- MACRO_EnableButton(id);
-}
-
-void CALLBACK MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2)
-{
- WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);
-}
-
-void CALLBACK MACRO_CheckItem(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_CloseSecondarys(void)
-{
- WINHELP_WINDOW *win;
-
- WINE_TRACE("()\n");
- for (win = Globals.win_list; win; win = win->next)
- if (win->lpszName && lstrcmpi(win->lpszName, "main"))
- DestroyWindow(win->hMainWnd);
-}
-
-void CALLBACK MACRO_CloseWindow(LPCSTR lpszWindow)
-{
- WINHELP_WINDOW *win;
-
- WINE_TRACE("(\"%s\")\n", lpszWindow);
-
- if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main";
-
- for (win = Globals.win_list; win; win = win->next)
- if (win->lpszName && !lstrcmpi(win->lpszName, lpszWindow))
- DestroyWindow(win->hMainWnd);
-}
-
-void CALLBACK MACRO_Compare(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_Contents(void)
-{
- WINE_TRACE("()\n");
-
- if (Globals.active_win->page)
- MACRO_JumpContents(Globals.active_win->page->file->lpszPath, NULL);
-}
-
-void CALLBACK MACRO_ControlPanel(LPCSTR str1, LPCSTR str2, LONG u)
-{
- WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1, str2, u);
-}
-
-void CALLBACK MACRO_CopyDialog(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_CopyTopic(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro)
-{
- WINHELP_WINDOW *win = Globals.active_win;
- WINHELP_BUTTON *button, **b;
- LONG size;
- LPSTR ptr;
-
- WINE_TRACE("(\"%s\", \"%s\", %s)\n", id, name, macro);
-
- size = sizeof(WINHELP_BUTTON) + lstrlen(id) + lstrlen(name) + lstrlen(macro) + 3;
-
- button = HeapAlloc(GetProcessHeap(), 0, size);
- if (!button) return;
-
- button->next = 0;
- button->hWnd = 0;
-
- ptr = (char*)button + sizeof(WINHELP_BUTTON);
-
- lstrcpy(ptr, id);
- button->lpszID = ptr;
- ptr += lstrlen(id) + 1;
-
- lstrcpy(ptr, name);
- button->lpszName = ptr;
- ptr += lstrlen(name) + 1;
-
- lstrcpy(ptr, macro);
- button->lpszMacro = ptr;
-
- button->wParam = WH_FIRST_BUTTON;
- for (b = &win->first_button; *b; b = &(*b)->next)
- button->wParam = max(button->wParam, (*b)->wParam + 1);
- *b = button;
-
- SendMessage(win->hMainWnd, WM_USER, 0, 0);
-}
-
-void CALLBACK MACRO_DeleteItem(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_DeleteMark(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_DestroyButton(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_DisableButton(LPCSTR id)
-{
- WINHELP_BUTTON** b;
-
- WINE_FIXME("(\"%s\")\n", id);
-
- b = MACRO_LookupButton(Globals.active_win, id);
- if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
-
- EnableWindow((*b)->hWnd, FALSE);
-}
-
-void CALLBACK MACRO_DisableItem(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_EnableButton(LPCSTR id)
-{
- WINHELP_BUTTON** b;
-
- WINE_TRACE("(\"%s\")\n", id);
-
- b = MACRO_LookupButton(Globals.active_win, id);
- if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}
-
- EnableWindow((*b)->hWnd, TRUE);
-}
-
-void CALLBACK MACRO_EnableItem(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_EndMPrint(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_ExecFile(LPCSTR str1, LPCSTR str2, LONG u, LPCSTR str3)
-{
- WINE_FIXME("(\"%s\", \"%s\", %u, \"%s\")\n", str1, str2, u, str3);
-}
-
-void CALLBACK MACRO_ExecProgram(LPCSTR str, LONG u)
-{
- WINE_FIXME("(\"%s\", %u)\n", str, u);
-}
-
-void CALLBACK MACRO_Exit(void)
-{
- WINE_TRACE("()\n");
-
- while (Globals.win_list)
- DestroyWindow(Globals.win_list->hMainWnd);
-}
-
-void CALLBACK MACRO_ExtAbleItem(LPCSTR str, LONG u)
-{
- WINE_FIXME("(\"%s\", %u)\n", str, u);
-}
-
-void CALLBACK MACRO_ExtInsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u1, LONG u2)
-{
- WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u, %u)\n", str1, str2, str3, str4, u1, u2);
-}
-
-void CALLBACK MACRO_ExtInsertMenu(LPCSTR str1, LPCSTR str2, LPCSTR str3, LONG u1, LONG u2)
-{
- WINE_FIXME("(\"%s\", \"%s\", \"%s\", %u, %u)\n", str1, str2, str3, u1, u2);
-}
-
-BOOL CALLBACK MACRO_FileExist(LPCSTR str)
-{
- WINE_TRACE("(\"%s\")\n", str);
- return GetFileAttributes(str) != INVALID_FILE_ATTRIBUTES;
-}
-
-void CALLBACK MACRO_FileOpen(void)
-{
- char szFile[MAX_PATH];
-
- if (WINHELP_GetOpenFileName(szFile, MAX_PATH))
- {
- HLPFILE* hlpfile = WINHELP_LookupHelpFile(szFile);
-
- WINHELP_CreateHelpWindowByHash(hlpfile, 0,
- WINHELP_GetWindowInfo(hlpfile, "main"), SW_SHOWNORMAL);
- }
-}
-
-void CALLBACK MACRO_Find(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_Finder(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_FloatingMenu(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_Flush(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_FocusWindow(LPCSTR lpszWindow)
-{
- WINHELP_WINDOW *win;
-
- WINE_TRACE("(\"%s\")\n", lpszWindow);
-
- if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main";
-
- for (win = Globals.win_list; win; win = win->next)
- if (win->lpszName && !lstrcmpi(win->lpszName, lpszWindow))
- SetFocus(win->hMainWnd);
-}
-
-void CALLBACK MACRO_Generate(LPCSTR str, LONG w, LONG l)
-{
- WINE_FIXME("(\"%s\", %x, %x)\n", str, w, l);
-}
-
-void CALLBACK MACRO_GotoMark(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_HelpOn(void)
-{
- WINE_TRACE("()\n");
- MACRO_JumpContents((Globals.wVersion > 4) ? "winhelp32.hlp" : "winhelp.hlp", NULL);
-}
-
-void CALLBACK MACRO_HelpOnTop(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_History(void)
-{
- WINE_TRACE("()\n");
-
- if (Globals.active_win && !Globals.active_win->hHistoryWnd)
- {
- HWND hWnd = CreateWindow(HISTORY_WIN_CLASS_NAME, "History", WS_OVERLAPPEDWINDOW,
- 0, 0, 0, 0, 0, 0, Globals.hInstance, Globals.active_win);
- ShowWindow(hWnd, SW_NORMAL);
- }
-}
-
-void CALLBACK MACRO_IfThen(BOOL b, LPCSTR t)
-{
- if (b) MACRO_ExecuteMacro(t);
-}
-
-void CALLBACK MACRO_IfThenElse(BOOL b, LPCSTR t, LPCSTR f)
-{
- if (b) MACRO_ExecuteMacro(t); else MACRO_ExecuteMacro(f);
-}
-
-BOOL CALLBACK MACRO_InitMPrint(void)
-{
- WINE_FIXME("()\n");
- return FALSE;
-}
-
-void CALLBACK MACRO_InsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u)
-{
- WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u)\n", str1, str2, str3, str4, u);
-}
-
-void CALLBACK MACRO_InsertMenu(LPCSTR str1, LPCSTR str2, LONG u)
-{
- WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1, str2, u);
-}
-
-BOOL CALLBACK MACRO_IsBook(void)
-{
- WINE_TRACE("()\n");
- return Globals.isBook;
-}
-
-BOOL CALLBACK MACRO_IsMark(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
- return FALSE;
-}
-
-BOOL CALLBACK MACRO_IsNotMark(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
- return TRUE;
-}
-
-void CALLBACK MACRO_JumpContents(LPCSTR lpszPath, LPCSTR lpszWindow)
-{
- HLPFILE* hlpfile;
-
- WINE_TRACE("(\"%s\", \"%s\")\n", lpszPath, lpszWindow);
- hlpfile = WINHELP_LookupHelpFile(lpszPath);
- WINHELP_CreateHelpWindowByHash(hlpfile, 0,
- WINHELP_GetWindowInfo(hlpfile, lpszWindow),
- SW_NORMAL);
-}
-
-void CALLBACK MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context)
-{
- HLPFILE* hlpfile;
-
- WINE_TRACE("(\"%s\", \"%s\", %d)\n", lpszPath, lpszWindow, context);
- hlpfile = WINHELP_LookupHelpFile(lpszPath);
- /* Some madness: what user calls 'context', hlpfile calls 'map' */
- WINHELP_CreateHelpWindowByMap(hlpfile, context,
- WINHELP_GetWindowInfo(hlpfile, lpszWindow),
- SW_NORMAL);
-}
-
-void CALLBACK MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash)
-{
- HLPFILE* hlpfile;
-
- WINE_TRACE("(\"%s\", \"%s\", %u)\n", lpszPath, lpszWindow, lHash);
- hlpfile = WINHELP_LookupHelpFile(lpszPath);
- WINHELP_CreateHelpWindowByHash(hlpfile, lHash,
- WINHELP_GetWindowInfo(hlpfile, lpszWindow),
- SW_NORMAL);
-}
-
-void CALLBACK MACRO_JumpHelpOn(void)
-{
- WINE_FIXME("()\n");
-}
-
-/* FIXME: those two macros are wrong
- * they should only contain 2 strings, path & window are coded as path>window
- */
-void CALLBACK MACRO_JumpID(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR topic_id)
-{
- WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, topic_id);
- MACRO_JumpHash(lpszPath, lpszWindow, HLPFILE_Hash(topic_id));
-}
-
-void CALLBACK MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword)
-{
- WINE_FIXME("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, keyword);
-}
-
-void CALLBACK MACRO_KLink(LPCSTR str1, LONG u, LPCSTR str2, LPCSTR str3)
-{
- WINE_FIXME("(\"%s\", %u, \"%s\", \"%s\")\n", str1, u, str2, str3);
-}
-
-void CALLBACK MACRO_Menu(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_MPrintHash(LONG u)
-{
- WINE_FIXME("(%u)\n", u);
-}
-
-void CALLBACK MACRO_MPrintID(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_Next(void)
-{
- HLPFILE_PAGE* page;
-
- WINE_TRACE("()\n");
- page = Globals.active_win->page;
- page = HLPFILE_PageByOffset(page->file, page->browse_fwd);
- if (page)
- {
- page->file->wRefCount++;
- WINHELP_CreateHelpWindow(page, Globals.active_win->info, SW_NORMAL);
- }
-}
-
-void CALLBACK MACRO_NoShow(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_PopupContext(LPCSTR str, LONG u)
-{
- WINE_FIXME("(\"%s\", %u)\n", str, u);
-}
-
-void CALLBACK MACRO_PopupHash(LPCSTR str, LONG u)
-{
- WINE_FIXME("(\"%s\", %u)\n", str, u);
-}
-
-void CALLBACK MACRO_PopupId(LPCSTR str1, LPCSTR str2)
-{
- WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);
-}
-
-void CALLBACK MACRO_PositionWindow(LONG i1, LONG i2, LONG u1, LONG u2, LONG u3, LPCSTR str)
-{
- WINE_FIXME("(%i, %i, %u, %u, %u, \"%s\")\n", i1, i2, u1, u2, u3, str);
-}
-
-void CALLBACK MACRO_Prev(void)
-{
- HLPFILE_PAGE* page;
-
- WINE_TRACE("()\n");
- page = Globals.active_win->page;
- page = HLPFILE_PageByOffset(page->file, page->browse_bwd);
- if (page)
- {
- page->file->wRefCount++;
- WINHELP_CreateHelpWindow(page, Globals.active_win->info, SW_NORMAL);
- }
-}
-
-void CALLBACK MACRO_Print(void)
-{
- PRINTDLG printer;
-
- WINE_TRACE("()\n");
-
- printer.lStructSize = sizeof(printer);
- printer.hwndOwner = Globals.active_win->hMainWnd;
- printer.hInstance = Globals.hInstance;
- printer.hDevMode = 0;
- printer.hDevNames = 0;
- printer.hDC = 0;
- printer.Flags = 0;
- printer.nFromPage = 0;
- printer.nToPage = 0;
- printer.nMinPage = 0;
- printer.nMaxPage = 0;
- printer.nCopies = 0;
- printer.lCustData = 0;
- printer.lpfnPrintHook = 0;
- printer.lpfnSetupHook = 0;
- printer.lpPrintTemplateName = 0;
- printer.lpSetupTemplateName = 0;
- printer.hPrintTemplate = 0;
- printer.hSetupTemplate = 0;
-
- if (PrintDlgA(&printer)) {
- WINE_FIXME("Print()\n");
- }
-}
-
-void CALLBACK MACRO_PrinterSetup(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_RegisterRoutine(LPCSTR dll_name, LPCSTR proc, LPCSTR args)
-{
- FARPROC fn = NULL;
- int size;
- WINHELP_DLL* dll;
-
- WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", dll_name, proc, args);
-
- /* FIXME: are the registered DLLs global or linked to the current file ???
- * We assume globals (as we did for macros, but is this really the case ???)
- */
- for (dll = Globals.dlls; dll; dll = dll->next)
- {
- if (!strcmp(dll->name, dll_name)) break;
- }
- if (!dll)
- {
- HANDLE hLib = LoadLibrary(dll_name);
-
- /* FIXME: the library will not be unloaded until exit of program
- * We don't send the DW_TERM message
- */
- WINE_TRACE("Loading %s\n", dll_name);
- /* FIXME: should look in the directory where current hlpfile
- * is loaded from
- */
- if (hLib == NULL)
- {
- /* FIXME: internationalisation for error messages */
- WINE_FIXME("Cannot find dll %s\n", dll_name);
- }
- else if ((dll = HeapAlloc(GetProcessHeap(), 0, sizeof(*dll))))
- {
- dll->hLib = hLib;
- dll->name = strdup(dll_name); /* FIXME */
- dll->next = Globals.dlls;
- Globals.dlls = dll;
- dll->handler = (WINHELP_LDLLHandler)GetProcAddress(dll->hLib, "LDLLHandler");
- dll->class = dll->handler ? (dll->handler)(DW_WHATMSG, 0, 0) : DC_NOMSG;
- WINE_TRACE("Got class %x for DLL %s\n", dll->class, dll_name);
- if (dll->class & DC_INITTERM) dll->handler(DW_INIT, 0, 0);
- if (dll->class & DC_CALLBACKS) dll->handler(DW_CALLBACKS, (DWORD)Callbacks, 0);
- }
- else WINE_WARN("OOM\n");
- }
- if (dll && !(fn = GetProcAddress(dll->hLib, proc)))
- {
- /* FIXME: internationalisation for error messages */
- WINE_FIXME("Cannot find proc %s in dll %s\n", dll_name, proc);
- }
-
- size = ++MACRO_NumLoaded * sizeof(struct MacroDesc);
- if (!MACRO_Loaded) MACRO_Loaded = HeapAlloc(GetProcessHeap(), 0, size);
- else MACRO_Loaded = HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded, size);
- MACRO_Loaded[MACRO_NumLoaded - 1].name = strdup(proc); /* FIXME */
- MACRO_Loaded[MACRO_NumLoaded - 1].alias = NULL;
- MACRO_Loaded[MACRO_NumLoaded - 1].isBool = 0;
- MACRO_Loaded[MACRO_NumLoaded - 1].arguments = strdup(args); /* FIXME */
- MACRO_Loaded[MACRO_NumLoaded - 1].fn = fn;
- WINE_TRACE("Added %s(%s) at %p\n", proc, args, fn);
-}
-
-void CALLBACK MACRO_RemoveAccelerator(LONG u1, LONG u2)
-{
- WINE_FIXME("(%u, %u)\n", u1, u2);
-}
-
-void CALLBACK MACRO_ResetMenu(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_SaveMark(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_Search(void)
-{
- WINE_FIXME("()\n");
-}
-
-void CALLBACK MACRO_SetContents(LPCSTR str, LONG u)
-{
- WINE_FIXME("(\"%s\", %u)\n", str, u);
-}
-
-void CALLBACK MACRO_SetHelpOnFile(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_SetPopupColor(LONG u1, LONG u2, LONG u3)
-{
- WINE_FIXME("(%u, %u, %u)\n", u1, u2, u3);
-}
-
-void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4)
-{
- WINE_FIXME("(\"%s\", \"%s\", %u, %u, \"%s\", \"%s\")\n", str1, str2, u1, u2, str3, str4);
-}
-
-void CALLBACK MACRO_ShortCut(LPCSTR str1, LPCSTR str2, LONG w, LONG l, LPCSTR str)
-{
- WINE_FIXME("(\"%s\", \"%s\", %x, %x, \"%s\")\n", str1, str2, w, l, str);
-}
-
-void CALLBACK MACRO_TCard(LONG u)
-{
- WINE_FIXME("(%u)\n", u);
-}
-
-void CALLBACK MACRO_Test(LONG u)
-{
- WINE_FIXME("(%u)\n", u);
-}
-
-BOOL CALLBACK MACRO_TestALink(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
- return FALSE;
-}
-
-BOOL CALLBACK MACRO_TestKLink(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
- return FALSE;
-}
-
-void CALLBACK MACRO_UncheckItem(LPCSTR str)
-{
- WINE_FIXME("(\"%s\")\n", str);
-}
-
-void CALLBACK MACRO_UpdateWindow(LPCSTR str1, LPCSTR str2)
-{
- WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);
-}
+/*\r
+ * Help Viewer\r
+ *\r
+ * Copyright 1996 Ulrich Schmid\r
+ * Copyright 2002 Eric Pouech\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Lesser General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 2.1 of the License, or (at your option) any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Lesser General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Lesser General Public\r
+ * License along with this library; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\r
+ */\r
+\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
+#include <stdio.h>\r
+\r
+#include "windows.h"\r
+#include "commdlg.h"\r
+#include "winhelp.h"\r
+\r
+#include "wine/debug.h"\r
+\r
+WINE_DEFAULT_DEBUG_CHANNEL(winhelp);\r
+\r
+/**************************************************/\r
+/* Macro table */\r
+/**************************************************/\r
+struct MacroDesc {\r
+ const char* name;\r
+ const char* alias;\r
+ BOOL isBool;\r
+ const char* arguments;\r
+ FARPROC fn;\r
+};\r
+\r
+/* types:\r
+ * U: 32 bit unsigned int\r
+ * I: 32 bit signed int\r
+ * S: string\r
+ * v: unknown (32 bit entity)\r
+ */\r
+\r
+static struct MacroDesc MACRO_Builtins[] = {\r
+ {"About", NULL, 0, "", (FARPROC)MACRO_About},\r
+ {"AddAccelerator", "AA", 0, "UUS", (FARPROC)MACRO_AddAccelerator},\r
+ {"ALink", "AL", 0, "SUS", (FARPROC)MACRO_ALink},\r
+ {"Annotate", NULL, 0, "", (FARPROC)MACRO_Annotate},\r
+ {"AppendItem", NULL, 0, "SSSS", (FARPROC)MACRO_AppendItem},\r
+ {"Back", NULL, 0, "", (FARPROC)MACRO_Back},\r
+ {"BackFlush", "BF", 0, "", (FARPROC)MACRO_BackFlush},\r
+ {"BookmarkDefine", NULL, 0, "", (FARPROC)MACRO_BookmarkDefine},\r
+ {"BookmarkMore", NULL, 0, "", (FARPROC)MACRO_BookmarkMore},\r
+ {"BrowseButtons", NULL, 0, "", (FARPROC)MACRO_BrowseButtons},\r
+ {"ChangeButtonBinding", "CBB",0, "SS", (FARPROC)MACRO_ChangeButtonBinding},\r
+ {"ChangeEnable", "CE", 0, "SS", (FARPROC)MACRO_ChangeEnable},\r
+ {"ChangeItemBinding", "CIB",0, "SS", (FARPROC)MACRO_ChangeItemBinding},\r
+ {"CheckItem", "CI", 0, "S", (FARPROC)MACRO_CheckItem},\r
+ {"CloseSecondarys", "CS", 0, "", (FARPROC)MACRO_CloseSecondarys},\r
+ {"CloseWindow", "CW", 0, "S", (FARPROC)MACRO_CloseWindow},\r
+ {"Compare", NULL, 0, "S", (FARPROC)MACRO_Compare},\r
+ {"Contents", NULL, 0, "", (FARPROC)MACRO_Contents},\r
+ {"ControlPanel", NULL, 0, "SSU", (FARPROC)MACRO_ControlPanel},\r
+ {"CopyDialog", NULL, 0, "", (FARPROC)MACRO_CopyDialog},\r
+ {"CopyTopic", "CT", 0, "", (FARPROC)MACRO_CopyTopic},\r
+ {"CreateButton", "CB", 0, "SSS", (FARPROC)MACRO_CreateButton},\r
+ {"DeleteItem", NULL, 0, "S", (FARPROC)MACRO_DeleteItem},\r
+ {"DeleteMark", NULL, 0, "S", (FARPROC)MACRO_DeleteMark},\r
+ {"DestroyButton", NULL, 0, "S", (FARPROC)MACRO_DestroyButton},\r
+ {"DisableButton", "DB", 0, "S", (FARPROC)MACRO_DisableButton},\r
+ {"DisableItem", "DI", 0, "S", (FARPROC)MACRO_DisableItem},\r
+ {"EnableButton", "EB", 0, "S", (FARPROC)MACRO_EnableButton},\r
+ {"EnableItem", "EI", 0, "S", (FARPROC)MACRO_EnableItem},\r
+ {"EndMPrint", NULL, 0, "", (FARPROC)MACRO_EndMPrint},\r
+ {"ExecFile", "EF", 0, "SSUS", (FARPROC)MACRO_ExecFile},\r
+ {"ExecProgram", "EP", 0, "SU", (FARPROC)MACRO_ExecProgram},\r
+ {"Exit", NULL, 0, "", (FARPROC)MACRO_Exit},\r
+ {"ExtAbleItem", NULL, 0, "SU", (FARPROC)MACRO_ExtAbleItem},\r
+ {"ExtInsertItem", NULL, 0, "SSSSUU", (FARPROC)MACRO_ExtInsertItem},\r
+ {"ExtInsertMenu", NULL, 0, "SSSUU", (FARPROC)MACRO_ExtInsertMenu},\r
+ {"FileExist", "FE", 1, "S", (FARPROC)MACRO_FileExist},\r
+ {"FileOpen", "FO", 0, "", (FARPROC)MACRO_FileOpen},\r
+ {"Find", NULL, 0, "", (FARPROC)MACRO_Find},\r
+ {"Finder", "FD", 0, "", (FARPROC)MACRO_Finder},\r
+ {"FloatingMenu", NULL, 0, "", (FARPROC)MACRO_FloatingMenu},\r
+ {"Flush", "FH", 0, "", (FARPROC)MACRO_Flush},\r
+ {"FocusWindow", NULL, 0, "S", (FARPROC)MACRO_FocusWindow},\r
+ {"Generate", NULL, 0, "SUU", (FARPROC)MACRO_Generate},\r
+ {"GotoMark", NULL, 0, "S", (FARPROC)MACRO_GotoMark},\r
+ {"HelpOn", NULL, 0, "", (FARPROC)MACRO_HelpOn},\r
+ {"HelpOnTop", NULL, 0, "", (FARPROC)MACRO_HelpOnTop},\r
+ {"History", NULL, 0, "", (FARPROC)MACRO_History},\r
+ {"InitMPrint", NULL, 1, "", (FARPROC)MACRO_InitMPrint},\r
+ {"InsertItem", NULL, 0, "SSSSU", (FARPROC)MACRO_InsertItem},\r
+ {"InsertMenu", NULL, 0, "SSU", (FARPROC)MACRO_InsertMenu},\r
+ {"IfThen", "IF", 0, "BS", (FARPROC)MACRO_IfThen},\r
+ {"IfThenElse", "IE", 0, "BSS", (FARPROC)MACRO_IfThenElse},\r
+ {"IsBook", NULL, 1, "", (FARPROC)MACRO_IsBook},\r
+ {"IsMark", NULL, 1, "S", (FARPROC)MACRO_IsMark},\r
+ {"IsNotMark", "NM", 1, "S", (FARPROC)MACRO_IsNotMark},\r
+ {"JumpContents", NULL, 0, "SS", (FARPROC)MACRO_JumpContents},\r
+ {"JumpContext", "JC", 0, "SSU", (FARPROC)MACRO_JumpContext},\r
+ {"JumpHash", "JH", 0, "SSU", (FARPROC)MACRO_JumpHash},\r
+ {"JumpHelpOn", NULL, 0, "", (FARPROC)MACRO_JumpHelpOn},\r
+ {"JumpID", "JI", 0, "SSS", (FARPROC)MACRO_JumpID},\r
+ {"JumpKeyword", "JK", 0, "SSS", (FARPROC)MACRO_JumpKeyword},\r
+ {"KLink", "KL", 0, "SUSS", (FARPROC)MACRO_KLink},\r
+ {"Menu", "MU", 0, "", (FARPROC)MACRO_Menu},\r
+ {"MPrintHash", NULL, 0, "U", (FARPROC)MACRO_MPrintHash},\r
+ {"MPrintID", NULL, 0, "S", (FARPROC)MACRO_MPrintID},\r
+ {"Next", NULL, 0, "", (FARPROC)MACRO_Next},\r
+ {"NoShow", NULL, 0, "", (FARPROC)MACRO_NoShow},\r
+ {"PopupContext", "PC", 0, "SU", (FARPROC)MACRO_PopupContext},\r
+ {"PopupHash", NULL, 0, "SU", (FARPROC)MACRO_PopupHash},\r
+ {"PopupId", "PI", 0, "SS", (FARPROC)MACRO_PopupId},\r
+ {"PositionWindow", "PW", 0, "IIUUUS", (FARPROC)MACRO_PositionWindow},\r
+ {"Prev", NULL, 0, "", (FARPROC)MACRO_Prev},\r
+ {"Print", NULL, 0, "", (FARPROC)MACRO_Print},\r
+ {"PrinterSetup", NULL, 0, "", (FARPROC)MACRO_PrinterSetup},\r
+ {"RegisterRoutine", "RR", 0, "SSS", (FARPROC)MACRO_RegisterRoutine},\r
+ {"RemoveAccelerator", "RA", 0, "UU", (FARPROC)MACRO_RemoveAccelerator},\r
+ {"ResetMenu", NULL, 0, "", (FARPROC)MACRO_ResetMenu},\r
+ {"SaveMark", NULL, 0, "S", (FARPROC)MACRO_SaveMark},\r
+ {"Search", NULL, 0, "", (FARPROC)MACRO_Search},\r
+ {"SetContents", NULL, 0, "SU", (FARPROC)MACRO_SetContents},\r
+ {"SetHelpOnFile", NULL, 0, "S", (FARPROC)MACRO_SetHelpOnFile},\r
+ {"SetPopupColor", "SPC",0, "UUU", (FARPROC)MACRO_SetPopupColor},\r
+ {"ShellExecute", "SE", 0, "SSUUSS", (FARPROC)MACRO_ShellExecute},\r
+ {"ShortCut", "SH", 0, "SSUUS", (FARPROC)MACRO_ShortCut},\r
+ {"TCard", NULL, 0, "U", (FARPROC)MACRO_TCard},\r
+ {"Test", NULL, 0, "U", (FARPROC)MACRO_Test},\r
+ {"TestALink", NULL, 1, "S", (FARPROC)MACRO_TestALink},\r
+ {"TestKLink", NULL, 1, "S", (FARPROC)MACRO_TestKLink},\r
+ {"UncheckItem", "UI", 0, "S", (FARPROC)MACRO_UncheckItem},\r
+ {"UpdateWindow", "UW", 0, "SS", (FARPROC)MACRO_UpdateWindow},\r
+ {NULL, NULL, 0, NULL, NULL}\r
+};\r
+\r
+static struct MacroDesc*MACRO_Loaded /* = NULL */;\r
+static unsigned MACRO_NumLoaded /* = 0 */;\r
+\r
+static int MACRO_DoLookUp(struct MacroDesc* start, const char* name, struct lexret* lr, unsigned len)\r
+{\r
+ struct MacroDesc* md;\r
+\r
+ for (md = start; md->name && len != 0; md++, len--)\r
+ {\r
+ if (strcasecmp(md->name, name) == 0 || (md->alias != NULL && strcasecmp(md->alias, name) == 0))\r
+ {\r
+ lr->proto = md->arguments;\r
+ lr->function = md->fn;\r
+ return md->isBool ? BOOL_FUNCTION : VOID_FUNCTION;\r
+ }\r
+ }\r
+ return EMPTY;\r
+}\r
+\r
+int MACRO_Lookup(const char* name, struct lexret* lr)\r
+{\r
+ int ret;\r
+\r
+ if ((ret = MACRO_DoLookUp(MACRO_Builtins, name, lr, -1)) != EMPTY)\r
+ return ret;\r
+ if (MACRO_Loaded && (ret = MACRO_DoLookUp(MACRO_Loaded, name, lr, MACRO_NumLoaded)) != EMPTY)\r
+ return ret;\r
+\r
+ lr->string = name;\r
+ return IDENTIFIER;\r
+}\r
+\r
+/******* helper functions *******/\r
+\r
+static WINHELP_BUTTON** MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name)\r
+{\r
+ WINHELP_BUTTON** b;\r
+\r
+ for (b = &win->first_button; *b; b = &(*b)->next)\r
+ if (!lstrcmpi(name, (*b)->lpszID)) break;\r
+ return b;\r
+}\r
+\r
+/******* real macro implementation *******/\r
+\r
+void CALLBACK MACRO_About(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_AddAccelerator(LONG u1, LONG u2, LPCSTR str)\r
+{\r
+ WINE_FIXME("(%u, %u, \"%s\")\n", u1, u2, str);\r
+}\r
+\r
+void CALLBACK MACRO_ALink(LPCSTR str1, LONG u, LPCSTR str2)\r
+{\r
+ WINE_FIXME("(\"%s\", %u, \"%s\")\n", str1, u, str2);\r
+}\r
+\r
+void CALLBACK MACRO_Annotate(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_AppendItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\")\n", str1, str2, str3, str4);\r
+}\r
+\r
+void CALLBACK MACRO_Back(void)\r
+{\r
+ WINHELP_WINDOW* win = Globals.active_win;\r
+\r
+ WINE_TRACE("()\n");\r
+\r
+ if (win && win->backIndex >= 2)\r
+ WINHELP_CreateHelpWindow(win->back[--win->backIndex - 1],\r
+ win->info, SW_SHOW);\r
+}\r
+\r
+void CALLBACK MACRO_BackFlush(void)\r
+{\r
+ WINHELP_WINDOW* win = Globals.active_win;\r
+\r
+ WINE_TRACE("()\n");\r
+\r
+ if (win)\r
+ {\r
+ int i;\r
+\r
+ for (i = 0; i < win->backIndex; i++)\r
+ {\r
+ HLPFILE_FreeHlpFile(win->back[i]->file);\r
+ win->back[i] = NULL;\r
+ }\r
+ win->backIndex = 0;\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_BookmarkDefine(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_BookmarkMore(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_BrowseButtons(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+\r
+ MACRO_CreateButton("BTN_PREV", "&<<", "Prev()");\r
+ MACRO_CreateButton("BTN_NEXT", "&>>", "Next()");\r
+}\r
+\r
+void CALLBACK MACRO_ChangeButtonBinding(LPCSTR id, LPCSTR macro)\r
+{\r
+ WINHELP_WINDOW* win = Globals.active_win;\r
+ WINHELP_BUTTON* button;\r
+ WINHELP_BUTTON** b;\r
+ LONG size;\r
+ LPSTR ptr;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\")\n", id, macro);\r
+\r
+ b = MACRO_LookupButton(win, id);\r
+ if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}\r
+\r
+ size = sizeof(WINHELP_BUTTON) + lstrlen(id) +\r
+ lstrlen((*b)->lpszName) + lstrlen(macro) + 3;\r
+\r
+ button = HeapAlloc(GetProcessHeap(), 0, size);\r
+ if (!button) return;\r
+\r
+ button->next = (*b)->next;\r
+ button->hWnd = (*b)->hWnd;\r
+ button->wParam = (*b)->wParam;\r
+\r
+ ptr = (char*)button + sizeof(WINHELP_BUTTON);\r
+\r
+ lstrcpy(ptr, id);\r
+ button->lpszID = ptr;\r
+ ptr += lstrlen(id) + 1;\r
+\r
+ lstrcpy(ptr, (*b)->lpszName);\r
+ button->lpszName = ptr;\r
+ ptr += lstrlen((*b)->lpszName) + 1;\r
+\r
+ lstrcpy(ptr, macro);\r
+ button->lpszMacro = ptr;\r
+\r
+ *b = button;\r
+\r
+ SendMessage(win->hMainWnd, WM_USER, 0, 0);\r
+}\r
+\r
+void CALLBACK MACRO_ChangeEnable(LPCSTR id, LPCSTR macro)\r
+{\r
+ WINE_TRACE("(\"%s\", \"%s\")\n", id, macro);\r
+\r
+ MACRO_ChangeButtonBinding(id, macro);\r
+ MACRO_EnableButton(id);\r
+}\r
+\r
+void CALLBACK MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);\r
+}\r
+\r
+void CALLBACK MACRO_CheckItem(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_CloseSecondarys(void)\r
+{\r
+ WINHELP_WINDOW *win;\r
+\r
+ WINE_TRACE("()\n");\r
+ for (win = Globals.win_list; win; win = win->next)\r
+ if (win->lpszName && lstrcmpi(win->lpszName, "main"))\r
+ DestroyWindow(win->hMainWnd);\r
+}\r
+\r
+void CALLBACK MACRO_CloseWindow(LPCSTR lpszWindow)\r
+{\r
+ WINHELP_WINDOW *win;\r
+\r
+ WINE_TRACE("(\"%s\")\n", lpszWindow);\r
+\r
+ if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main";\r
+\r
+ for (win = Globals.win_list; win; win = win->next)\r
+ if (win->lpszName && !lstrcmpi(win->lpszName, lpszWindow))\r
+ DestroyWindow(win->hMainWnd);\r
+}\r
+\r
+void CALLBACK MACRO_Compare(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_Contents(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+\r
+ if (Globals.active_win->page)\r
+ MACRO_JumpContents(Globals.active_win->page->file->lpszPath, NULL);\r
+}\r
+\r
+void CALLBACK MACRO_ControlPanel(LPCSTR str1, LPCSTR str2, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1, str2, u);\r
+}\r
+\r
+void CALLBACK MACRO_CopyDialog(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_CopyTopic(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro)\r
+{\r
+ WINHELP_WINDOW *win = Globals.active_win;\r
+ WINHELP_BUTTON *button, **b;\r
+ LONG size;\r
+ LPSTR ptr;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\", %s)\n", id, name, macro);\r
+\r
+ size = sizeof(WINHELP_BUTTON) + lstrlen(id) + lstrlen(name) + lstrlen(macro) + 3;\r
+\r
+ button = HeapAlloc(GetProcessHeap(), 0, size);\r
+ if (!button) return;\r
+\r
+ button->next = 0;\r
+ button->hWnd = 0;\r
+\r
+ ptr = (char*)button + sizeof(WINHELP_BUTTON);\r
+\r
+ lstrcpy(ptr, id);\r
+ button->lpszID = ptr;\r
+ ptr += lstrlen(id) + 1;\r
+\r
+ lstrcpy(ptr, name);\r
+ button->lpszName = ptr;\r
+ ptr += lstrlen(name) + 1;\r
+\r
+ lstrcpy(ptr, macro);\r
+ button->lpszMacro = ptr;\r
+\r
+ button->wParam = WH_FIRST_BUTTON;\r
+ for (b = &win->first_button; *b; b = &(*b)->next)\r
+ button->wParam = max(button->wParam, (*b)->wParam + 1);\r
+ *b = button;\r
+\r
+ SendMessage(win->hMainWnd, WM_USER, 0, 0);\r
+}\r
+\r
+void CALLBACK MACRO_DeleteItem(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_DeleteMark(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_DestroyButton(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_DisableButton(LPCSTR id)\r
+{\r
+ WINHELP_BUTTON** b;\r
+\r
+ WINE_FIXME("(\"%s\")\n", id);\r
+\r
+ b = MACRO_LookupButton(Globals.active_win, id);\r
+ if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}\r
+\r
+ EnableWindow((*b)->hWnd, FALSE);\r
+}\r
+\r
+void CALLBACK MACRO_DisableItem(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_EnableButton(LPCSTR id)\r
+{\r
+ WINHELP_BUTTON** b;\r
+\r
+ WINE_TRACE("(\"%s\")\n", id);\r
+\r
+ b = MACRO_LookupButton(Globals.active_win, id);\r
+ if (!*b) {WINE_FIXME("Couldn't find button '%s'\n", id); return;}\r
+\r
+ EnableWindow((*b)->hWnd, TRUE);\r
+}\r
+\r
+void CALLBACK MACRO_EnableItem(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_EndMPrint(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_ExecFile(LPCSTR str1, LPCSTR str2, LONG u, LPCSTR str3)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", %u, \"%s\")\n", str1, str2, u, str3);\r
+}\r
+\r
+void CALLBACK MACRO_ExecProgram(LPCSTR str, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", %u)\n", str, u);\r
+}\r
+\r
+void CALLBACK MACRO_Exit(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+\r
+ while (Globals.win_list)\r
+ DestroyWindow(Globals.win_list->hMainWnd);\r
+}\r
+\r
+void CALLBACK MACRO_ExtAbleItem(LPCSTR str, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", %u)\n", str, u);\r
+}\r
+\r
+void CALLBACK MACRO_ExtInsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u1, LONG u2)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u, %u)\n", str1, str2, str3, str4, u1, u2);\r
+}\r
+\r
+void CALLBACK MACRO_ExtInsertMenu(LPCSTR str1, LPCSTR str2, LPCSTR str3, LONG u1, LONG u2)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", \"%s\", %u, %u)\n", str1, str2, str3, u1, u2);\r
+}\r
+\r
+BOOL CALLBACK MACRO_FileExist(LPCSTR str)\r
+{\r
+ WINE_TRACE("(\"%s\")\n", str);\r
+ return GetFileAttributes(str) != INVALID_FILE_ATTRIBUTES;\r
+}\r
+\r
+void CALLBACK MACRO_FileOpen(void)\r
+{\r
+ char szFile[MAX_PATH];\r
+\r
+ if (WINHELP_GetOpenFileName(szFile, MAX_PATH))\r
+ {\r
+ HLPFILE* hlpfile = WINHELP_LookupHelpFile(szFile);\r
+\r
+ WINHELP_CreateHelpWindowByHash(hlpfile, 0,\r
+ WINHELP_GetWindowInfo(hlpfile, "main"), SW_SHOWNORMAL);\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_Find(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_Finder(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_FloatingMenu(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_Flush(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_FocusWindow(LPCSTR lpszWindow)\r
+{\r
+ WINHELP_WINDOW *win;\r
+\r
+ WINE_TRACE("(\"%s\")\n", lpszWindow);\r
+\r
+ if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main";\r
+\r
+ for (win = Globals.win_list; win; win = win->next)\r
+ if (win->lpszName && !lstrcmpi(win->lpszName, lpszWindow))\r
+ SetFocus(win->hMainWnd);\r
+}\r
+\r
+void CALLBACK MACRO_Generate(LPCSTR str, LONG w, LONG l)\r
+{\r
+ WINE_FIXME("(\"%s\", %x, %x)\n", str, w, l);\r
+}\r
+\r
+void CALLBACK MACRO_GotoMark(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_HelpOn(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+ MACRO_JumpContents((Globals.wVersion > 4) ? "winhelp32.hlp" : "winhelp.hlp", NULL);\r
+}\r
+\r
+void CALLBACK MACRO_HelpOnTop(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_History(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+\r
+ if (Globals.active_win && !Globals.active_win->hHistoryWnd)\r
+ {\r
+ HWND hWnd = CreateWindow(HISTORY_WIN_CLASS_NAME, "History", WS_OVERLAPPEDWINDOW,\r
+ 0, 0, 0, 0, 0, 0, Globals.hInstance, Globals.active_win);\r
+ ShowWindow(hWnd, SW_NORMAL);\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_IfThen(BOOL b, LPCSTR t)\r
+{\r
+ if (b) MACRO_ExecuteMacro(t);\r
+}\r
+\r
+void CALLBACK MACRO_IfThenElse(BOOL b, LPCSTR t, LPCSTR f)\r
+{\r
+ if (b) MACRO_ExecuteMacro(t); else MACRO_ExecuteMacro(f);\r
+}\r
+\r
+BOOL CALLBACK MACRO_InitMPrint(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+ return FALSE;\r
+}\r
+\r
+void CALLBACK MACRO_InsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %u)\n", str1, str2, str3, str4, u);\r
+}\r
+\r
+void CALLBACK MACRO_InsertMenu(LPCSTR str1, LPCSTR str2, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", %u)\n", str1, str2, u);\r
+}\r
+\r
+BOOL CALLBACK MACRO_IsBook(void)\r
+{\r
+ WINE_TRACE("()\n");\r
+ return Globals.isBook;\r
+}\r
+\r
+BOOL CALLBACK MACRO_IsMark(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+ return FALSE;\r
+}\r
+\r
+BOOL CALLBACK MACRO_IsNotMark(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+ return TRUE;\r
+}\r
+\r
+void CALLBACK MACRO_JumpContents(LPCSTR lpszPath, LPCSTR lpszWindow)\r
+{\r
+ HLPFILE* hlpfile;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\")\n", lpszPath, lpszWindow);\r
+ hlpfile = WINHELP_LookupHelpFile(lpszPath);\r
+ WINHELP_CreateHelpWindowByHash(hlpfile, 0,\r
+ WINHELP_GetWindowInfo(hlpfile, lpszWindow),\r
+ SW_NORMAL);\r
+}\r
+\r
+void CALLBACK MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context)\r
+{\r
+ HLPFILE* hlpfile;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\", %d)\n", lpszPath, lpszWindow, context);\r
+ hlpfile = WINHELP_LookupHelpFile(lpszPath);\r
+ /* Some madness: what user calls 'context', hlpfile calls 'map' */\r
+ WINHELP_CreateHelpWindowByMap(hlpfile, context,\r
+ WINHELP_GetWindowInfo(hlpfile, lpszWindow),\r
+ SW_NORMAL);\r
+}\r
+\r
+void CALLBACK MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash)\r
+{\r
+ HLPFILE* hlpfile;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\", %u)\n", lpszPath, lpszWindow, lHash);\r
+ hlpfile = WINHELP_LookupHelpFile(lpszPath);\r
+ WINHELP_CreateHelpWindowByHash(hlpfile, lHash,\r
+ WINHELP_GetWindowInfo(hlpfile, lpszWindow),\r
+ SW_NORMAL);\r
+}\r
+\r
+void CALLBACK MACRO_JumpHelpOn(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+/* FIXME: those two macros are wrong\r
+ * they should only contain 2 strings, path & window are coded as path>window\r
+ */\r
+void CALLBACK MACRO_JumpID(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR topic_id)\r
+{\r
+ WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, topic_id);\r
+ MACRO_JumpHash(lpszPath, lpszWindow, HLPFILE_Hash(topic_id));\r
+}\r
+\r
+void CALLBACK MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, keyword);\r
+}\r
+\r
+void CALLBACK MACRO_KLink(LPCSTR str1, LONG u, LPCSTR str2, LPCSTR str3)\r
+{\r
+ WINE_FIXME("(\"%s\", %u, \"%s\", \"%s\")\n", str1, u, str2, str3);\r
+}\r
+\r
+void CALLBACK MACRO_Menu(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_MPrintHash(LONG u)\r
+{\r
+ WINE_FIXME("(%u)\n", u);\r
+}\r
+\r
+void CALLBACK MACRO_MPrintID(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_Next(void)\r
+{\r
+ HLPFILE_PAGE* page;\r
+\r
+ WINE_TRACE("()\n");\r
+ page = Globals.active_win->page;\r
+ page = HLPFILE_PageByOffset(page->file, page->browse_fwd);\r
+ if (page)\r
+ {\r
+ page->file->wRefCount++;\r
+ WINHELP_CreateHelpWindow(page, Globals.active_win->info, SW_NORMAL);\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_NoShow(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_PopupContext(LPCSTR str, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", %u)\n", str, u);\r
+}\r
+\r
+void CALLBACK MACRO_PopupHash(LPCSTR str, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", %u)\n", str, u);\r
+}\r
+\r
+void CALLBACK MACRO_PopupId(LPCSTR str1, LPCSTR str2)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);\r
+}\r
+\r
+void CALLBACK MACRO_PositionWindow(LONG i1, LONG i2, LONG u1, LONG u2, LONG u3, LPCSTR str)\r
+{\r
+ WINE_FIXME("(%i, %i, %u, %u, %u, \"%s\")\n", i1, i2, u1, u2, u3, str);\r
+}\r
+\r
+void CALLBACK MACRO_Prev(void)\r
+{\r
+ HLPFILE_PAGE* page;\r
+\r
+ WINE_TRACE("()\n");\r
+ page = Globals.active_win->page;\r
+ page = HLPFILE_PageByOffset(page->file, page->browse_bwd);\r
+ if (page)\r
+ {\r
+ page->file->wRefCount++;\r
+ WINHELP_CreateHelpWindow(page, Globals.active_win->info, SW_NORMAL);\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_Print(void)\r
+{\r
+ PRINTDLG printer;\r
+\r
+ WINE_TRACE("()\n");\r
+\r
+ printer.lStructSize = sizeof(printer);\r
+ printer.hwndOwner = Globals.active_win->hMainWnd;\r
+ printer.hInstance = Globals.hInstance;\r
+ printer.hDevMode = 0;\r
+ printer.hDevNames = 0;\r
+ printer.hDC = 0;\r
+ printer.Flags = 0;\r
+ printer.nFromPage = 0;\r
+ printer.nToPage = 0;\r
+ printer.nMinPage = 0;\r
+ printer.nMaxPage = 0;\r
+ printer.nCopies = 0;\r
+ printer.lCustData = 0;\r
+ printer.lpfnPrintHook = 0;\r
+ printer.lpfnSetupHook = 0;\r
+ printer.lpPrintTemplateName = 0;\r
+ printer.lpSetupTemplateName = 0;\r
+ printer.hPrintTemplate = 0;\r
+ printer.hSetupTemplate = 0;\r
+\r
+ if (PrintDlgA(&printer)) {\r
+ WINE_FIXME("Print()\n");\r
+ }\r
+}\r
+\r
+void CALLBACK MACRO_PrinterSetup(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_RegisterRoutine(LPCSTR dll_name, LPCSTR proc, LPCSTR args)\r
+{\r
+ FARPROC fn = NULL;\r
+ int size;\r
+ WINHELP_DLL* dll;\r
+\r
+ WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", dll_name, proc, args);\r
+\r
+ /* FIXME: are the registered DLLs global or linked to the current file ???\r
+ * We assume globals (as we did for macros, but is this really the case ???)\r
+ */\r
+ for (dll = Globals.dlls; dll; dll = dll->next)\r
+ {\r
+ if (!strcmp(dll->name, dll_name)) break;\r
+ }\r
+ if (!dll)\r
+ {\r
+ HANDLE hLib = LoadLibrary(dll_name);\r
+\r
+ /* FIXME: the library will not be unloaded until exit of program\r
+ * We don't send the DW_TERM message\r
+ */\r
+ WINE_TRACE("Loading %s\n", dll_name);\r
+ /* FIXME: should look in the directory where current hlpfile\r
+ * is loaded from\r
+ */\r
+ if (hLib == NULL)\r
+ {\r
+ /* FIXME: internationalisation for error messages */\r
+ WINE_FIXME("Cannot find dll %s\n", dll_name);\r
+ }\r
+ else if ((dll = HeapAlloc(GetProcessHeap(), 0, sizeof(*dll))))\r
+ {\r
+ dll->hLib = hLib;\r
+ dll->name = strdup(dll_name); /* FIXME */\r
+ dll->next = Globals.dlls;\r
+ Globals.dlls = dll;\r
+ dll->handler = (WINHELP_LDLLHandler)GetProcAddress(dll->hLib, "LDLLHandler");\r
+ dll->class = dll->handler ? (dll->handler)(DW_WHATMSG, 0, 0) : DC_NOMSG;\r
+ WINE_TRACE("Got class %x for DLL %s\n", dll->class, dll_name);\r
+ if (dll->class & DC_INITTERM) dll->handler(DW_INIT, 0, 0);\r
+ if (dll->class & DC_CALLBACKS) dll->handler(DW_CALLBACKS, (DWORD)Callbacks, 0);\r
+ }\r
+ else WINE_WARN("OOM\n");\r
+ }\r
+ if (dll && !(fn = GetProcAddress(dll->hLib, proc)))\r
+ {\r
+ /* FIXME: internationalisation for error messages */\r
+ WINE_FIXME("Cannot find proc %s in dll %s\n", dll_name, proc);\r
+ }\r
+\r
+ size = ++MACRO_NumLoaded * sizeof(struct MacroDesc);\r
+ if (!MACRO_Loaded) MACRO_Loaded = HeapAlloc(GetProcessHeap(), 0, size);\r
+ else MACRO_Loaded = HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded, size);\r
+ MACRO_Loaded[MACRO_NumLoaded - 1].name = strdup(proc); /* FIXME */\r
+ MACRO_Loaded[MACRO_NumLoaded - 1].alias = NULL;\r
+ MACRO_Loaded[MACRO_NumLoaded - 1].isBool = 0;\r
+ MACRO_Loaded[MACRO_NumLoaded - 1].arguments = strdup(args); /* FIXME */\r
+ MACRO_Loaded[MACRO_NumLoaded - 1].fn = fn;\r
+ WINE_TRACE("Added %s(%s) at %p\n", proc, args, fn);\r
+}\r
+\r
+void CALLBACK MACRO_RemoveAccelerator(LONG u1, LONG u2)\r
+{\r
+ WINE_FIXME("(%u, %u)\n", u1, u2);\r
+}\r
+\r
+void CALLBACK MACRO_ResetMenu(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_SaveMark(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_Search(void)\r
+{\r
+ WINE_FIXME("()\n");\r
+}\r
+\r
+void CALLBACK MACRO_SetContents(LPCSTR str, LONG u)\r
+{\r
+ WINE_FIXME("(\"%s\", %u)\n", str, u);\r
+}\r
+\r
+void CALLBACK MACRO_SetHelpOnFile(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_SetPopupColor(LONG u1, LONG u2, LONG u3)\r
+{\r
+ WINE_FIXME("(%u, %u, %u)\n", u1, u2, u3);\r
+}\r
+\r
+void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", %u, %u, \"%s\", \"%s\")\n", str1, str2, u1, u2, str3, str4);\r
+}\r
+\r
+void CALLBACK MACRO_ShortCut(LPCSTR str1, LPCSTR str2, LONG w, LONG l, LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\", %x, %x, \"%s\")\n", str1, str2, w, l, str);\r
+}\r
+\r
+void CALLBACK MACRO_TCard(LONG u)\r
+{\r
+ WINE_FIXME("(%u)\n", u);\r
+}\r
+\r
+void CALLBACK MACRO_Test(LONG u)\r
+{\r
+ WINE_FIXME("(%u)\n", u);\r
+}\r
+\r
+BOOL CALLBACK MACRO_TestALink(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+ return FALSE;\r
+}\r
+\r
+BOOL CALLBACK MACRO_TestKLink(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+ return FALSE;\r
+}\r
+\r
+void CALLBACK MACRO_UncheckItem(LPCSTR str)\r
+{\r
+ WINE_FIXME("(\"%s\")\n", str);\r
+}\r
+\r
+void CALLBACK MACRO_UpdateWindow(LPCSTR str1, LPCSTR str2)\r
+{\r
+ WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2);\r
+}\r