/* ** Help.c ** ** Copyright (C) 1994,95,96 by Bernardo Innocenti ** ** Handle on-line, context sensitive, AmigaGuide help. */ #include #include #include #include #include "XModulePriv.h" #include "Gui.h" XDEF ULONG AmigaGuideSig = 0L; static struct Library *AmigaGuideBase = NULL; static struct NewAmigaGuide NewGuide = { 0 }; static AMIGAGUIDECONTEXT Context = NULL; static STRPTR ContextList[] = { "Main", NULL }; GLOBALCALL void HandleHelp (struct IntuiMessage *msg) { if (!AmigaGuideBase) { if (!(AmigaGuideBase = OpenLibrary ("amigaguide.library", 33))) { CantOpenLib ("amigaguide.library", 33); return; } NewGuide.nag_Name = (STRPTR) PRGNAME ".guide"; NewGuide.nag_Node = (STRPTR) "MAIN"; NewGuide.nag_BaseName = (STRPTR) PRGNAME; NewGuide.nag_ClientPort = NULL; // (STRPTR) "XMODULE_HELP"; NewGuide.nag_Context = ContextList; NewGuide.nag_Screen = Scr; if(Context = OpenAmigaGuideAsync (&NewGuide, AGA_HelpGroup, UniqueID, TAG_DONE)) { AmigaGuideSig = AmigaGuideSignal (Context); Signals |= AmigaGuideSig; /* Get startup message */ Wait (AmigaGuideSig); HandleAmigaGuide(); } else { LastErr = IoErr(); CloseLibrary (AmigaGuideBase); AmigaGuideBase = NULL; return; } } /* Link with node */ { UBYTE cmd[48]; if (IntuiMsg.Class == IDCMP_RAWKEY || IntuiMsg.Class == IDCMP_MENUHELP) SPrintf (cmd, "LINK \"%s\"", ((struct WinUserData *)IntuiMsg.IDCMPWindow->UserData)->HelpNode); else strcpy (cmd, "LINK Main"); SendAmigaGuideCmdA (Context, cmd, NULL); } } GLOBALCALL void HandleAmigaGuide (void) { struct AmigaGuideMsg *agm; while (agm = GetAmigaGuideMsg (Context)) { if (agm->agm_Pri_Ret) /* Error? */ { STRPTR reason; if (reason = GetAmigaGuideString (agm->agm_Sec_Ret)) ShowRequest (MSG_AMIGAGUIDE_ERROR, 0, reason); } // switch (agm->agm_Type) // { // case ToolCmdReplyID: /* A command has completed */ // case ToolStatusID: // default: // break; // } ReplyAmigaGuideMsg (agm); } } GLOBALCALL void CleanupHelp (void) { if (AmigaGuideBase) { Signals &= ~AmigaGuideSig; AmigaGuideSig = 0; CloseAmigaGuide (Context); Context = NULL; CloseLibrary (AmigaGuideBase); AmigaGuideBase = NULL; } }