/*
**	Help.c
**
**	Copyright (C) 1994,95,96 by Bernardo Innocenti
**
**	Handle on-line, context sensitive, AmigaGuide help.
*/

#include <libraries/amigaguide.h>

#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/amigaguide.h>

#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;
	}
}

