home *** CD-ROM | disk | FTP | other *** search
- /* main.c
- * Written by David N. Junod
- *
- * (c) Copyright 1992 Commodore-Amiga, Inc. All rights reserved.
- *
- * This software is provided as-is and is subject to change; no warranties
- * are made. All use is at your own risk. No liability or responsibility
- * is assumed.
- *
- */
-
- #include "hyperbrowser.h"
-
- /*****************************************************************************/
-
- int main (void)
- {
- struct ExecBase *SysBase = (*((struct ExecBase **) 4));
- LONG failureLevel = RETURN_FAIL;
- struct WBStartup *wbMsg = NULL;
- struct GlobalData *gd = NULL;
- LONG failureCode = 0;
- struct Process *pr;
- UBYTE name[64];
- BPTR fh;
-
- pr = (struct Process *) SysBase->ThisTask;
- if (!(pr->pr_CLI))
- {
- WaitPort (&pr->pr_MsgPort);
- wbMsg = (struct WBStartup *) GetMsg (&pr->pr_MsgPort);
- }
-
- /* Make sure we are running with V39 or greater */
- if (SysBase->LibNode.lib_Version < 39)
- {
- /* DOS isn't open!!!! */
- vprintf (gd, "requires V39\n", NULL);
- }
- /* Allocate our global data */
- else if (gd = AllocVec (sizeof (struct GlobalData), MEMF_CLEAR))
- {
- /* Open the ROM libraries */
- DOSBase = OpenLibrary ("dos.library", 39);
- IntuitionBase = OpenLibrary ("intuition.library", 39);
- GfxBase = OpenLibrary ("graphics.library", 39);
- UtilityBase = OpenLibrary ("utility.library", 39);
-
- /* Our process */
- gd->gd_Process = pr = (struct Process *) FindTask (NULL);
-
- /* Initialize the node host hook */
- gd->gd_NHHook.h_Entry = nodehost;
- gd->gd_NHHook.h_Data = gd;
-
- /* Open AmigaGuide */
- if (AmigaGuideBase = OpenLibrary ("amigaguide.library", 33))
- {
- /* Build the unique name */
- gd->gd_NHID = GetUniqueID ();
- sprintf (gd->gd_NHName, "%s.%ld", BASENAME, gd->gd_NHID);
-
- /* Create the temporary guide file */
- sprintf (name, "T:%s.guide", gd->gd_NHName);
- if (fh = Open (name, MODE_NEWFILE))
- {
- /* Create the database */
- vfprintf (gd, fh, "@database %s.guide\n\n", (void *) gd->gd_NHName);
- vfprintf (gd, fh, "@node Main HyperBrowser\n", NULL);
- vfprintf (gd, fh, "\nExec Lists\n\n", NULL);
- vfprintf (gd, fh, " @{\"Resource\" link HYPERNOZY.RESOURCELIST}\n", NULL);
- vfprintf (gd, fh, " @{\"Device\" link HYPERNOZY.DEVICELIST}\n", NULL);
- vfprintf (gd, fh, " @{\"Interrupt\" link HYPERNOZY.INTRLIST}\n", NULL);
- vfprintf (gd, fh, " @{\"Library\" link HYPERNOZY.LIBRARYLIST}\n", NULL);
- vfprintf (gd, fh, " @{\"Port\" link HYPERNOZY.PORTLIST}\n", NULL);
- vfprintf (gd, fh, " @{\"TaskReady\" link HYPERNOZY.TASKREADYLIST}\n", NULL);
- vfprintf (gd, fh, " @{\"TaskWait\" link HYPERNOZY.TASKWAITLIST}\n\n", NULL);
- vfprintf (gd, fh, "Intuition Lists\n\n", NULL);
- vfprintf (gd, fh, " @{\"Class\" link HYPERNOZY.CLASSLIST}\n", NULL);
- vfprintf (gd, fh, " @{\"Screen\" link HYPERNOZY.SCREENLIST}\n", NULL);
- vfprintf (gd, fh, "@endnode\n", NULL);
-
- /* Close it */
- Close (fh);
-
- /* Start the Dynamic Node Host */
- gd->gd_NH = AddAmigaGuideHostA (&gd->gd_NHHook, gd->gd_NHName, NULL);
-
- /* Lock the default public screen */
- if (gd->gd_Screen = LockPubScreen (NULL))
- {
- /* We don't want the window to automatically activate */
- gd->gd_NAG.nag_Flags = HTF_NOACTIVATE;
-
- /* Set the document name */
- gd->gd_NAG.nag_Name = name;
-
- /* Set the screen */
- gd->gd_NAG.nag_Screen = gd->gd_Screen;
-
- /* Set the application base name */
- gd->gd_NAG.nag_ClientPort = gd->gd_NAG.nag_BaseName = BASENAME;
-
- /* Open the help system */
- if (gd->gd_AmigaGuide = openamigaguide (gd, &gd->gd_NAG,
- AGA_HelpGroup, gd->gd_NHID,
- TAG_DONE))
- {
- /* Show that we are OK */
- failureLevel = RETURN_OK;
-
- /* Close the help system */
- CloseAmigaGuide (gd->gd_AmigaGuide);
- }
- else
- {
- DisplayError (gd, pr->pr_Result2);
- }
-
- /* Unlock the default public screen */
- UnlockPubScreen (NULL, gd->gd_Screen);
- }
-
- /* Remove the dynamic node host */
- while (RemoveAmigaGuideHostA (gd->gd_NH, NULL) > 0)
- Delay (10);
-
- /* Delete the temporary file */
- DeleteFile (name);
- }
-
- /* Close AmigaGuide */
- CloseLibrary (AmigaGuideBase);
- }
-
- /* Close the ROM libraries */
- CloseLibrary (UtilityBase);
- CloseLibrary ((struct Library *) GfxBase);
- CloseLibrary ((struct Library *) IntuitionBase);
- CloseLibrary (DOSBase);
-
- FreeVec (gd);
- }
-
- if (wbMsg)
- {
- Forbid ();
- ReplyMsg ((struct Message *) wbMsg);
- }
- pr->pr_Result2 = failureCode;
- return (failureLevel);
- }
-
- /*****************************************************************************/
-
- APTR openamigaguide (struct GlobalData * gd, struct NewAmigaGuide * nag, Tag tag1,...)
- {
- if (AmigaGuideBase->lib_Version > 33)
- return OpenAmigaGuideA (nag, (struct TagItem *) & tag1);
- else
- return OpenAmigaGuideA (nag, NULL);
- }
-
- /*****************************************************************************/
-
- void bprintf (struct GlobalData *gd, STRPTR fmt, void *arg1, ...)
- {
- asprintf (gd->gd_Buffer, fmt, &arg1);
- strcat (gd->gd_Node, gd->gd_Buffer);
- }
-
- /*****************************************************************************/
-
- void vprintf (struct GlobalData * gd, STRPTR fmt, void *arg1,...)
- {
- VPrintf (fmt, (LONG *) & arg1);
- }
-
- /*****************************************************************************/
-
- void vfprintf (struct GlobalData * gd, BPTR fh, STRPTR fmt, void *arg1,...)
- {
- VFPrintf (fh, fmt, (LONG *) & arg1);
- }
-
- /*****************************************************************************/
-
- VOID DisplayError (struct GlobalData * gd, LONG err)
- {
- vprintf (gd, "%s\n", (void *) GetAmigaGuideString (err));
- }
-