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

#include "MiniView_ver.h"

#define TEMPLATE	"Sorry, no extra help available...\n" \
					"DataBase/A,Doc=Document/K,Line/N,PS=PubScreen/K,Port=PortName/K"

//                  01234567890123456789012345678901234567890123456789012345678901234

#define TOFFS		(sizeof(TEMPLATE)-64)


typedef struct Library LIB;
typedef struct RDArgs ARGS;
typedef struct NewAmigaGuide NAG;

extern LONG MiniView(VOID);


LONG
MiniView(VOID)
{
	LONG RC = 20L;

	LIB *SysBase = *((LIB **) 4L);
	LIB *DOSBase = OpenLibrary("dos.library", 37L);

	if (DOSBase)
	{
		extern const TEXT AGName[];

		LIB *AmigaGuideBase = OpenLibrary(AGName, 38L);

		if (AmigaGuideBase)
		{
			ARGS *dobj = (ARGS *) AllocDosObject(DOS_RDARGS, NULL);

			if (dobj)
			{
				NAG *nag = AllocVec(sizeof(*nag), MEMF_PUBLIC | MEMF_CLEAR);

				if (nag)
				{
					ARGS *args;
					LONG argv[6];

					for (RC = 0; RC < 6; ++RC)
						argv[RC] = NULL;

					RC = 10L;

					dobj->RDA_ExtHelp = TEMPLATE;

					if (args = ReadArgs(&(dobj->RDA_ExtHelp[TOFFS]), argv, dobj))
					{
						VOID *agh;

						nag->nag_Name = (TEXT *) argv[0];
						nag->nag_Flags = HTF_CACHE_NODE | HTF_CACHE_DB | HTF_UNIQUE;

						if (argv[1])
							nag->nag_Node = (TEXT *) argv[1];

						if (argv[2])
							nag->nag_Line = *((LONG *) argv[2]);

						if (argv[3])
							nag->nag_PubScreen = (TEXT *) argv[3];

						if (argv[4])
							nag->nag_ClientPort = (TEXT *) argv[4];

						SetIoErr(0L);

						if (agh = OpenAmigaGuideA(nag, NULL))
						{
							LONG R2 = IoErr();

							if (R2 == 0L)
								RC = 0L;
							else
								SetIoErr(R2);

							CloseAmigaGuide(agh);
						}
						else
						{
							RC = IoErr();
							PrintFault(RC, (TEXT *) argv[0]);
						}
						FreeArgs(args);
					}
					else
						PrintFault(IoErr(), NULL);

					FreeVec(nag);
				}
				else
					PrintFault(ERROR_NO_FREE_STORE, NULL);

				FreeDosObject(DOS_RDARGS, dobj);
			}
			else
				PrintFault(ERROR_NO_FREE_STORE, NULL);

			CloseLibrary(AmigaGuideBase);

		}
		else
			PrintFault(ERROR_INVALID_RESIDENT_LIBRARY, AGName);

		CloseLibrary(DOSBase);
	}
	return RC;
}

static const TEXT VersTag[] 	= "$VER: " VSTR;
static const TEXT Compiled[] 	= "Compiled on " __DATE__ " at " __TIME__;
static const TEXT Copyright[] 	= "Copyright © 1994,95 Klaus Alexander Seistrup @ Magnetic Ink";
static const TEXT EMail[] 		= "E-mail: kas@mink.ping.dk";

const TEXT AGName[] 	= "amigaguide.library";


/*
**	EOF
*/
