Rewrote macro engine for adding dynamic macro loading capability. Wrote RegisterRoutine and IsBook macros.
diff --git a/programs/winhelp/macro.c b/programs/winhelp/macro.c index abef291..3884146 100644 --- a/programs/winhelp/macro.c +++ b/programs/winhelp/macro.c
@@ -2,6 +2,7 @@ * 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 @@ -18,16 +19,171 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <stdio.h> + #include "windows.h" #include "commdlg.h" #include "winhelp.h" -#include "macro.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(winhelp); +/**************************************************/ +/* Macro table */ +/**************************************************/ +struct MacroDesc { + char* name; + char* alias; + BOOL isBool; + char* arguments; + void (*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, "", MACRO_About}, + {"AddAccelerator", "AA", 0, "UUS", MACRO_AddAccelerator}, + {"ALink", "AL", 0, "SUS", MACRO_ALink}, + {"Annotate", NULL, 0, "", MACRO_Annotate}, + {"AppendItem", NULL, 0, "SSSS", MACRO_AppendItem}, + {"Back", NULL, 0, "", MACRO_Back}, + {"BackFlush", "BF", 0, "", MACRO_BackFlush}, + {"BookmarkDefine", NULL, 0, "", MACRO_BookmarkDefine}, + {"BookmarkMore", NULL, 0, "", MACRO_BookmarkMore}, + {"BrowseButtons", NULL, 0, "", MACRO_BrowseButtons}, + {"ChangeButtonBinding", "CBB",0, "SS", MACRO_ChangeButtonBinding}, + {"ChangeEnable", "CE", 0, "SS", MACRO_ChangeEnable}, + {"ChangeItemBinding", "CIB",0, "SS", MACRO_ChangeItemBinding}, + {"CheckItem", "CI", 0, "S", MACRO_CheckItem}, + {"CloseSecondarys", "CS", 0, "", MACRO_CloseSecondarys}, + {"CloseWindow", "CW", 0, "S", MACRO_CloseWindow}, + {"Compare", NULL, 0, "S", MACRO_Compare}, + {"Contents", NULL, 0, "", MACRO_Contents}, + {"ControlPanel", NULL, 0, "SSU", MACRO_ControlPanel}, + {"CopyDialog", NULL, 0, "", MACRO_CopyDialog}, + {"CopyTopic", "CT", 0, "", MACRO_CopyTopic}, + {"CreateButton", "CB", 0, "SSS", MACRO_CreateButton}, + {"DeleteItem", NULL, 0, "S", MACRO_DeleteItem}, + {"DeleteMark", NULL, 0, "S", MACRO_DeleteMark}, + {"DestroyButton", NULL, 0, "S", MACRO_DestroyButton}, + {"DisableButton", "DB", 0, "S", MACRO_DisableButton}, + {"DisableItem", "DI", 0, "S", MACRO_DisableItem}, + {"EnableButton", "EB", 0, "S", MACRO_EnableButton}, + {"EnableItem", "EI", 0, "S", MACRO_EnableItem}, + {"EndMPrint", NULL, 0, "", MACRO_EndMPrint}, + {"ExecFile", "EF", 0, "SSUS", MACRO_ExecFile}, + {"ExecProgram", "EP", 0, "SU", MACRO_ExecProgram}, + {"Exit", NULL, 0, "", MACRO_Exit}, + {"ExtAbleItem", NULL, 0, "SU", MACRO_ExtAbleItem}, + {"ExtInsertItem", NULL, 0, "SSSSUU", MACRO_ExtInsertItem}, + {"ExtInsertMenu", NULL, 0, "SSSUU", MACRO_ExtInsertMenu}, + {"FileExist", "FE", 1, "S", (void (*)())MACRO_FileExist}, + {"FileOpen", "FO", 0, "", MACRO_FileOpen}, + {"Find", NULL, 0, "", MACRO_Find}, + {"Finder", "FD", 0, "", MACRO_Finder}, + {"FloatingMenu", NULL, 0, "", MACRO_FloatingMenu}, + {"Flush", "FH", 0, "", MACRO_Flush}, + {"FocusWindow", NULL, 0, "S", MACRO_FocusWindow}, + {"Generate", NULL, 0, "SUU", MACRO_Generate}, + {"GotoMark", NULL, 0, "S", MACRO_GotoMark}, + {"HelpOn", NULL, 0, "", MACRO_HelpOn}, + {"HelpOnTop", NULL, 0, "", MACRO_HelpOnTop}, + {"History", NULL, 0, "", MACRO_History}, + {"InitMPrint", NULL, 1, "", (void (*)())MACRO_InitMPrint}, + {"InsertItem", NULL, 0, "SSSSU", MACRO_InsertItem}, + {"InsertMenu", NULL, 0, "SSU", MACRO_InsertMenu}, + {"IfThen", "IF", 0, "BS", MACRO_IfThen}, + {"IfThenElse", "IE", 0, "BSS", MACRO_IfThenElse}, + {"IsBook", NULL, 1, "", (void (*)())MACRO_IsBook}, + {"IsMark", NULL, 1, "S", (void (*)())MACRO_IsMark}, + {"IsNotMark", "NM", 1, "S", (void (*)())MACRO_IsNotMark}, + {"JumpContents", NULL, 0, "SS", MACRO_JumpContents}, + {"JumpContext", "JC", 0, "SSU", MACRO_JumpContext}, + {"JumpHash", "JH", 0, "SSU", MACRO_JumpHash}, + {"JumpHelpOn", NULL, 0, "", MACRO_JumpHelpOn}, + {"JumpID", "JI", 0, "SSS", MACRO_JumpID}, + {"JumpKeyword", "JK", 0, "SSS", MACRO_JumpKeyword}, + {"KLink", "KL", 0, "SUSS", MACRO_KLink}, + {"Menu", "MU", 0, "", MACRO_Menu}, + {"MPrintHash", NULL, 0, "U", MACRO_MPrintHash}, + {"MPrintID", NULL, 0, "S", MACRO_MPrintID}, + {"Next", NULL, 0, "", MACRO_Next}, + {"NoShow", NULL, 0, "", MACRO_NoShow}, + {"PopupContext", "PC", 0, "SU", MACRO_PopupContext}, + {"PopupHash", NULL, 0, "SU", MACRO_PopupHash}, + {"PopupId", "PI", 0, "SS", MACRO_PopupId}, + {"PositionWindow", "PW", 0, "IIUUUS", MACRO_PositionWindow}, + {"Prev", NULL, 0, "", MACRO_Prev}, + {"Print", NULL, 0, "", MACRO_Print}, + {"PrinterSetup", NULL, 0, "", MACRO_PrinterSetup}, + {"RegisterRoutine", "RR", 0, "SSS", MACRO_RegisterRoutine}, + {"RemoveAccelerator", "RA", 0, "UU", MACRO_RemoveAccelerator}, + {"ResetMenu", NULL, 0, "", MACRO_ResetMenu}, + {"SaveMark", NULL, 0, "S", MACRO_SaveMark}, + {"Search", NULL, 0, "", MACRO_Search}, + {"SetContents", NULL, 0, "SU", MACRO_SetContents}, + {"SetHelpOnFile", NULL, 0, "S", MACRO_SetHelpOnFile}, + {"SetPopupColor", "SPC",0, "UUU", MACRO_SetPopupColor}, + {"ShellExecute", "SE", 0, "SSUUSS", MACRO_ShellExecute}, + {"ShortCut", "SH", 0, "SSUUS", MACRO_ShortCut}, + {"TCard", NULL, 0, "U", MACRO_TCard}, + {"Test", NULL, 0, "U", MACRO_Test}, + {"TestALink", NULL, 1, "S", (void (*)())MACRO_TestALink}, + {"TestKLink", NULL, 1, "S", (void (*)())MACRO_TestKLink}, + {"UncheckItem", "UI", 0, "S", MACRO_UncheckItem}, + {"UpdateWindow", "UW", 0, "SS", 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; + if (md->isBool) + { + lr->bool_function = (BOOL (*)())md->fn; + return BOOL_FUNCTION; + } + else + { + lr->void_function = md->fn; + return 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 *******/ + WINHELP_BUTTON** MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name) { WINHELP_BUTTON** b; @@ -41,51 +197,53 @@ void MACRO_About(void) { - WINE_FIXME("About()\n"); + WINE_FIXME("()\n"); } void MACRO_AddAccelerator(LONG u1, LONG u2, LPCSTR str) { - WINE_FIXME("AddAccelerator(%lu, %lu, \"%s\")\n", u1, u2, str); + WINE_FIXME("(%lu, %lu, \"%s\")\n", u1, u2, str); } void MACRO_ALink(LPCSTR str1, LONG u, LPCSTR str2) { - WINE_FIXME("ALink(\"%s\", %lu, \"%s\")\n", str1, u, str2); + WINE_FIXME("(\"%s\", %lu, \"%s\")\n", str1, u, str2); } void MACRO_Annotate(void) { - WINE_FIXME("Annotate()\n"); + WINE_FIXME("()\n"); } void MACRO_AppendItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4) { - WINE_FIXME("AppendItem(\"%s\", \"%s\", \"%s\", \"%s\")\n", str1, str2, str3, str4); + WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\")\n", str1, str2, str3, str4); } void MACRO_Back(void) { - WINE_FIXME("Back()\n"); + WINE_FIXME("()\n"); } void MACRO_BackFlush(void) { - WINE_FIXME("BackFlush()\n"); + WINE_FIXME("()\n"); } void MACRO_BookmarkDefine(void) { - WINE_FIXME("BookmarkDefine()\n"); + WINE_FIXME("()\n"); } void MACRO_BookmarkMore(void) { - WINE_FIXME("BookmarkMore()\n"); + WINE_FIXME("()\n"); } void MACRO_BrowseButtons(void) { + WINE_TRACE("()\n"); + MACRO_CreateButton("BTN_PREV", "&<<", "Prev()"); MACRO_CreateButton("BTN_NEXT", "&>>", "Next()"); } @@ -98,6 +256,8 @@ 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;} @@ -131,23 +291,27 @@ void MACRO_ChangeEnable(LPCSTR id, LPCSTR macro) { + WINE_TRACE("(\"%s\", \"%s\")\n", id, macro); + MACRO_ChangeButtonBinding(id, macro); MACRO_EnableButton(id); } void MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2) { - WINE_FIXME("ChangeItemBinding(\"%s\", \"%s\")\n", str1, str2); + WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2); } void MACRO_CheckItem(LPCSTR str) { - WINE_FIXME("CheckItem(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void 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); @@ -156,6 +320,9 @@ void 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) @@ -165,28 +332,30 @@ void MACRO_Compare(LPCSTR str) { - WINE_FIXME("Compare(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_Contents(void) { + WINE_TRACE("()\n"); + if (Globals.active_win->page) MACRO_JumpContents(Globals.active_win->page->file->lpszPath, NULL); } void MACRO_ControlPanel(LPCSTR str1, LPCSTR str2, LONG u) { - WINE_FIXME("ControlPanel(\"%s\", \"%s\", %lu)\n", str1, str2, u); + WINE_FIXME("(\"%s\", \"%s\", %lu)\n", str1, str2, u); } void MACRO_CopyDialog(void) { - WINE_FIXME("CopyDialog()\n"); + WINE_FIXME("()\n"); } void MACRO_CopyTopic(void) { - WINE_FIXME("CopyTopic()\n"); + WINE_FIXME("()\n"); } void MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro) @@ -196,6 +365,8 @@ 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); @@ -227,23 +398,25 @@ void MACRO_DeleteItem(LPCSTR str) { - WINE_FIXME("DeleteItem(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_DeleteMark(LPCSTR str) { - WINE_FIXME("DeleteMark(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_DestroyButton(LPCSTR str) { - WINE_FIXME("DestroyButton(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void 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;} @@ -252,13 +425,15 @@ void MACRO_DisableItem(LPCSTR str) { - WINE_FIXME("DisableItem(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void 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;} @@ -267,47 +442,50 @@ void MACRO_EnableItem(LPCSTR str) { - WINE_FIXME("EnableItem(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_EndMPrint(void) { - WINE_FIXME("EndMPrint()\n"); + WINE_FIXME("()\n"); } void MACRO_ExecFile(LPCSTR str1, LPCSTR str2, LONG u, LPCSTR str3) { - WINE_FIXME("ExecFile(\"%s\", \"%s\", %lu, \"%s\")\n", str1, str2, u, str3); + WINE_FIXME("(\"%s\", \"%s\", %lu, \"%s\")\n", str1, str2, u, str3); } void MACRO_ExecProgram(LPCSTR str, LONG u) { - WINE_FIXME("ExecProgram(\"%s\", %lu)\n", str, u); + WINE_FIXME("(\"%s\", %lu)\n", str, u); } void MACRO_Exit(void) { + WINE_TRACE("()\n"); + while (Globals.win_list) DestroyWindow(Globals.win_list->hMainWnd); } void MACRO_ExtAbleItem(LPCSTR str, LONG u) { - WINE_FIXME("ExtAbleItem(\"%s\", %lu)\n", str, u); + WINE_FIXME("(\"%s\", %lu)\n", str, u); } void MACRO_ExtInsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u1, LONG u2) { - WINE_FIXME("ExtInsertItem(\"%s\", \"%s\", \"%s\", \"%s\", %lu, %lu)\n", str1, str2, str3, str4, u1, u2); + WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %lu, %lu)\n", str1, str2, str3, str4, u1, u2); } void MACRO_ExtInsertMenu(LPCSTR str1, LPCSTR str2, LPCSTR str3, LONG u1, LONG u2) { - WINE_FIXME("ExtInsertMenu(\"%s\", \"%s\", \"%s\", %lu, %lu)\n", str1, str2, str3, u1, u2); + WINE_FIXME("(\"%s\", \"%s\", \"%s\", %lu, %lu)\n", str1, str2, str3, u1, u2); } BOOL MACRO_FileExist(LPCSTR str) { + WINE_TRACE("(\"%s\")\n", str); return GetFileAttributes(str) != 0xFFFFFFFF; } @@ -319,6 +497,8 @@ CHAR szzFilter[2 * MAX_STRING_LEN + 100]; LPSTR p = szzFilter; + WINE_TRACE("()\n"); + LoadString(Globals.hInstance, STID_HELP_FILES_HLP, p, MAX_STRING_LEN); p += strlen(p) + 1; lstrcpy(p, "*.hlp"); @@ -360,171 +540,198 @@ void MACRO_Find(void) { - WINE_FIXME("Find()\n"); + WINE_FIXME("()\n"); } void MACRO_Finder(void) { - WINE_FIXME("Finder()\n"); + WINE_FIXME("()\n"); } void MACRO_FloatingMenu(void) { - WINE_FIXME("FloatingMenu()\n"); + WINE_FIXME("()\n"); } void MACRO_Flush(void) { - WINE_FIXME("Flush()\n"); + WINE_FIXME("()\n"); } -void MACRO_FocusWindow(LPCSTR str) +void MACRO_FocusWindow(LPCSTR lpszWindow) { - WINE_FIXME("FocusWindow(\"%s\")\n", str); + 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 MACRO_Generate(LPCSTR str, WPARAM w, LPARAM l) +void MACRO_Generate(LPCSTR str, LONG w, LONG l) { - WINE_FIXME("Generate(\"%s\", %x, %lx)\n", str, w, l); + WINE_FIXME("(\"%s\", %lx, %lx)\n", str, w, l); } void MACRO_GotoMark(LPCSTR str) { - WINE_FIXME("GotoMark(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_HelpOn(void) { + WINE_TRACE("()\n"); MACRO_JumpContents((Globals.wVersion > 4) ? "winhelp32.hlp" : "winhelp.hlp", NULL); } void MACRO_HelpOnTop(void) { - WINE_FIXME("HelpOnTop()\n"); + WINE_FIXME("()\n"); } void MACRO_History(void) { - WINE_FIXME("History()\n"); + WINE_FIXME("()\n"); +} + +void MACRO_IfThen(BOOL b, LPCSTR t) +{ + if (b) MACRO_ExecuteMacro(t); +} + +void MACRO_IfThenElse(BOOL b, LPCSTR t, LPCSTR f) +{ + if (b) MACRO_ExecuteMacro(t); else MACRO_ExecuteMacro(f); } BOOL MACRO_InitMPrint(void) { - WINE_FIXME("InitMPrint()\n"); + WINE_FIXME("()\n"); return FALSE; } void MACRO_InsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u) { - WINE_FIXME("InsertItem(\"%s\", \"%s\", \"%s\", \"%s\", %lu)\n", str1, str2, str3, str4, u); + WINE_FIXME("(\"%s\", \"%s\", \"%s\", \"%s\", %lu)\n", str1, str2, str3, str4, u); } void MACRO_InsertMenu(LPCSTR str1, LPCSTR str2, LONG u) { - WINE_FIXME("InsertMenu(\"%s\", \"%s\", %lu)\n", str1, str2, u); + WINE_FIXME("(\"%s\", \"%s\", %lu)\n", str1, str2, u); } BOOL MACRO_IsBook(void) { - WINE_FIXME("IsBook()\n"); - return TRUE; + WINE_TRACE("()\n"); + return Globals.isBook; } BOOL MACRO_IsMark(LPCSTR str) { - WINE_FIXME("IsMark(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); return FALSE; } BOOL MACRO_IsNotMark(LPCSTR str) { - WINE_FIXME("IsNotMark(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); return TRUE; } void MACRO_JumpContents(LPCSTR lpszPath, LPCSTR lpszWindow) { + WINE_TRACE("(\"%s\", \"%s\")\n", lpszPath, lpszWindow); WINHELP_CreateHelpWindowByHash(lpszPath, 0, lpszWindow, FALSE, 0, NULL, SW_NORMAL); } void MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context) { - WINE_FIXME("JumpContext(\"%s\", \"%s\", %lu)\n", lpszPath, lpszWindow, context); + WINE_FIXME("(\"%s\", \"%s\", %lu)\n", lpszPath, lpszWindow, context); } void MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash) { + WINE_TRACE("(\"%s\", \"%s\", %lu)\n", lpszPath, lpszWindow, lHash); WINHELP_CreateHelpWindowByHash(lpszPath, lHash, lpszWindow, FALSE, 0, NULL, SW_NORMAL); } void MACRO_JumpHelpOn(void) { - WINE_FIXME("JumpHelpOn()\n"); + WINE_FIXME("()\n"); } +/* FIXME: those two macros are wrong + * they should only contain 2 strings, path & window are coded as path>window + */ void 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 MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword) { - WINE_FIXME("JumpKeyword(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, keyword); + WINE_FIXME("(\"%s\", \"%s\", \"%s\")\n", lpszPath, lpszWindow, keyword); } void MACRO_KLink(LPCSTR str1, LONG u, LPCSTR str2, LPCSTR str3) { - WINE_FIXME("KLink(\"%s\", %lu, \"%s\", \"%s\")\n", str1, u, str2, str3); + WINE_FIXME("(\"%s\", %lu, \"%s\", \"%s\")\n", str1, u, str2, str3); } void MACRO_Menu(void) { - WINE_FIXME("Menu()\n"); + WINE_FIXME("()\n"); } void MACRO_MPrintHash(LONG u) { - WINE_FIXME("MPrintHash(%lu)\n", u); + WINE_FIXME("(%lu)\n", u); } void MACRO_MPrintID(LPCSTR str) { - WINE_FIXME("MPrintID(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_Next(void) { + WINE_TRACE("()\n"); if (Globals.active_win->page->next) WINHELP_CreateHelpWindowByPage(Globals.active_win->page->next, "main", FALSE, 0, NULL, SW_NORMAL); } void MACRO_NoShow(void) { - WINE_FIXME("NoShow()\n"); + WINE_FIXME("()\n"); } void MACRO_PopupContext(LPCSTR str, LONG u) { - WINE_FIXME("PopupContext(\"%s\", %lu)\n", str, u); + WINE_FIXME("(\"%s\", %lu)\n", str, u); } void MACRO_PopupHash(LPCSTR str, LONG u) { - WINE_FIXME("PopupHash(\"%s\", %lu)\n", str, u); + WINE_FIXME("(\"%s\", %lu)\n", str, u); } void MACRO_PopupId(LPCSTR str1, LPCSTR str2) { - WINE_FIXME("PopupId(\"%s\", \"%s\")\n", str1, str2); + WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2); } void MACRO_PositionWindow(LONG i1, LONG i2, LONG u1, LONG u2, LONG u3, LPCSTR str) { - WINE_FIXME("PositionWindow(%li, %li, %lu, %lu, %lu, \"%s\")\n", i1, i2, u1, u2, u3, str); + WINE_FIXME("(%li, %li, %lu, %lu, %lu, \"%s\")\n", i1, i2, u1, u2, u3, str); } void MACRO_Prev(void) { + WINE_TRACE("()\n"); if (Globals.active_win->page->prev) WINHELP_CreateHelpWindowByPage(Globals.active_win->page->prev, "main", FALSE, 0, NULL, SW_NORMAL); } @@ -533,6 +740,8 @@ { PRINTDLG printer; + WINE_TRACE("()\n"); + printer.lStructSize = sizeof(printer); printer.hwndOwner = Globals.active_win->hMainWnd; printer.hInstance = Globals.hInstance; @@ -560,87 +769,113 @@ void MACRO_PrinterSetup(void) { - WINE_FIXME("PrinterSetup()\n"); + WINE_FIXME("()\n"); } -void MACRO_RegisterRoutine(LPCSTR str1, LPCSTR str2, LPCSTR str3) +void MACRO_RegisterRoutine(LPCSTR dll, LPCSTR proc, LPCSTR args) { - WINE_FIXME("RegisterRoutine(\"%s\", \"%s\", \"%s\")\n", str1, str2, str3); + HANDLE hLib; + void (*fn)(); + + WINE_TRACE("(\"%s\", \"%s\", \"%s\")\n", dll, proc, args); + + if ((hLib = LoadLibrary(dll)) == NULL) + { + /* FIXME: internationalisation for error messages */ + WINE_FIXME("Cannot find dll %s\n", dll); + fn = NULL; + } + else if (!(fn = (void (*)())GetProcAddress(hLib, proc))) + { + /* FIXME: internationalisation for error messages */ + WINE_FIXME("Cannot find proc %s in dll %s\n", dll, proc); + fn = NULL; + } + + /* FIXME: the library will not be unloaded until exit of program */ + + MACRO_Loaded = HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded, + ++MACRO_NumLoaded * sizeof(struct MacroDesc)); + 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; } void MACRO_RemoveAccelerator(LONG u1, LONG u2) { - WINE_FIXME("RemoveAccelerator(%lu, %lu)\n", u1, u2); + WINE_FIXME("(%lu, %lu)\n", u1, u2); } void MACRO_ResetMenu(void) { - WINE_FIXME("ResetMenu()\n"); + WINE_FIXME("()\n"); } void MACRO_SaveMark(LPCSTR str) { - WINE_FIXME("SaveMark(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_Search(void) { - WINE_FIXME("Search()\n"); + WINE_FIXME("()\n"); } void MACRO_SetContents(LPCSTR str, LONG u) { - WINE_FIXME("SetContents(\"%s\", %lu)\n", str, u); + WINE_FIXME("(\"%s\", %lu)\n", str, u); } void MACRO_SetHelpOnFile(LPCSTR str) { - WINE_FIXME("SetHelpOnFile(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_SetPopupColor(LONG u1, LONG u2, LONG u3) { - WINE_FIXME("SetPopupColor(%lu, %lu, %lu)\n", u1, u2, u3); + WINE_FIXME("(%lu, %lu, %lu)\n", u1, u2, u3); } void MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4) { - WINE_FIXME("ShellExecute(\"%s\", \"%s\", %lu, %lu, \"%s\", \"%s\")\n", str1, str2, u1, u2, str3, str4); + WINE_FIXME("(\"%s\", \"%s\", %lu, %lu, \"%s\", \"%s\")\n", str1, str2, u1, u2, str3, str4); } -void MACRO_ShortCut(LPCSTR str1, LPCSTR str2, WPARAM w, LPARAM l, LPCSTR str) +void MACRO_ShortCut(LPCSTR str1, LPCSTR str2, LONG w, LONG l, LPCSTR str) { - WINE_FIXME("ShortCut(\"%s\", \"%s\", %x, %lx, \"%s\")\n", str1, str2, w, l, str); + WINE_FIXME("(\"%s\", \"%s\", %lx, %lx, \"%s\")\n", str1, str2, w, l, str); } void MACRO_TCard(LONG u) { - WINE_FIXME("TCard(%lu)\n", u); + WINE_FIXME("(%lu)\n", u); } void MACRO_Test(LONG u) { - WINE_FIXME("Test(%lu)\n", u); + WINE_FIXME("(%lu)\n", u); } BOOL MACRO_TestALink(LPCSTR str) { - WINE_FIXME("TestALink(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); return FALSE; } BOOL MACRO_TestKLink(LPCSTR str) { - WINE_FIXME("TestKLink(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); return FALSE; } void MACRO_UncheckItem(LPCSTR str) { - WINE_FIXME("UncheckItem(\"%s\")\n", str); + WINE_FIXME("(\"%s\")\n", str); } void MACRO_UpdateWindow(LPCSTR str1, LPCSTR str2) { - WINE_FIXME("UpdateWindow(\"%s\", \"%s\")\n", str1, str2); + WINE_FIXME("(\"%s\", \"%s\")\n", str1, str2); }