Initial commit.
[amiga/xmodule.git] / Help.c
1 /*
2 **      Help.c
3 **
4 **      Copyright (C) 1994,95,96 by Bernardo Innocenti
5 **
6 **      Handle on-line, context sensitive, AmigaGuide help.
7 */
8
9 #include <libraries/amigaguide.h>
10
11 #include <proto/exec.h>
12 #include <proto/dos.h>
13 #include <proto/amigaguide.h>
14
15 #include "XModulePriv.h"
16 #include "Gui.h"
17
18
19 XDEF ULONG      AmigaGuideSig = 0L;
20
21 static struct Library *AmigaGuideBase = NULL;
22 static struct NewAmigaGuide NewGuide = { 0 };
23 static AMIGAGUIDECONTEXT Context = NULL;
24
25 static STRPTR ContextList[] =
26 {
27         "Main",
28         NULL
29 };
30
31
32
33 GLOBALCALL void HandleHelp (struct IntuiMessage *msg)
34 {
35
36         if (!AmigaGuideBase)
37         {
38                 if (!(AmigaGuideBase = OpenLibrary ("amigaguide.library", 33)))
39                 {
40                         CantOpenLib ("amigaguide.library", 33);
41                         return;
42                 }
43
44                 NewGuide.nag_Name               = (STRPTR) PRGNAME ".guide";
45                 NewGuide.nag_Node               = (STRPTR) "MAIN";
46                 NewGuide.nag_BaseName   = (STRPTR) PRGNAME;
47                 NewGuide.nag_ClientPort = NULL; // (STRPTR) "XMODULE_HELP";
48                 NewGuide.nag_Context    = ContextList;
49                 NewGuide.nag_Screen             = Scr;
50
51                 if(Context = OpenAmigaGuideAsync (&NewGuide,
52                         AGA_HelpGroup,  UniqueID,
53                         TAG_DONE))
54                 {
55                         AmigaGuideSig = AmigaGuideSignal (Context);
56                         Signals |= AmigaGuideSig;
57
58                         /* Get startup message */
59                         Wait (AmigaGuideSig);
60                         HandleAmigaGuide();
61                 }
62                 else
63                 {
64                         LastErr = IoErr();
65                         CloseLibrary (AmigaGuideBase); AmigaGuideBase = NULL;
66                         return;
67                 }
68         }
69
70
71         /* Link with node */
72         {
73                 UBYTE cmd[48];
74
75                 if (IntuiMsg.Class == IDCMP_RAWKEY || IntuiMsg.Class == IDCMP_MENUHELP)
76                         SPrintf (cmd, "LINK \"%s\"", ((struct WinUserData *)IntuiMsg.IDCMPWindow->UserData)->HelpNode);
77                 else
78                         strcpy (cmd, "LINK Main");
79
80                 SendAmigaGuideCmdA (Context, cmd, NULL);
81         }
82 }
83
84
85
86 GLOBALCALL void HandleAmigaGuide (void)
87 {
88         struct AmigaGuideMsg *agm;
89
90         while (agm = GetAmigaGuideMsg (Context))
91         {
92                 if (agm->agm_Pri_Ret) /* Error? */
93                 {
94                         STRPTR reason;
95
96                         if (reason = GetAmigaGuideString (agm->agm_Sec_Ret))
97                                 ShowRequest (MSG_AMIGAGUIDE_ERROR, 0, reason);
98                 }
99
100 //              switch (agm->agm_Type)
101 //              {
102 //                      case ToolCmdReplyID:            /* A command has completed */
103 //                      case ToolStatusID:
104
105 //                      default:
106 //                              break;
107 //              }
108
109                 ReplyAmigaGuideMsg (agm);
110         }
111 }
112
113
114
115 GLOBALCALL void CleanupHelp (void)
116 {
117         if (AmigaGuideBase)
118         {
119                 Signals &= ~AmigaGuideSig;
120                 AmigaGuideSig = 0;
121                 CloseAmigaGuide (Context);              Context = NULL;
122                 CloseLibrary (AmigaGuideBase);  AmigaGuideBase = NULL;
123         }
124 }