home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 5
/
FreshFish_July-August1994.bin
/
bbs
/
text
/
amigaguide-34.6.lha
/
AmigaGuide-34.6
/
AmigaGuide.lha
/
AG_V39
/
Src
/
HyperBrowser
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-29
|
6KB
|
192 lines
/* 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));
}