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
/
class.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-29
|
3KB
|
89 lines
/* class.c
*
* (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"
/*****************************************************************************/
/* Find the list pointer given a node pointer */
struct MinList *FindHead (struct MinNode * node)
{
struct MinList *list;
while (node)
{
if (!node->mln_Pred)
list = (struct MinList *) node;
node = node->mln_Pred;
}
return (list);
}
/*****************************************************************************/
void showclasslist (struct GlobalData * gd)
{
struct ExecBase *SysBase = (*((struct ExecBase **) 4));
struct MinList *list;
struct MinNode *node;
struct _Object *o;
struct IClass *cl;
struct Image *im;
UBYTE notes[12];
ULONG min, max;
ULONG aEntry;
ULONG cEntry;
/* Clear notes */
memset (notes, 0, sizeof (notes));
/* Get the rom start and stop for this machine */
min = ((ULONG) (SysBase->LibNode.lib_IdString)) & 0xFFFF0000;
max = min + 0x80000;
/* Get a handle on a boopsi object */
if (im = (struct Image *) NewObjectA (NULL, "frameiclass", NULL))
{
/* Convert the image to a boopsi object */
o = (struct _Object *) (((ULONG) im) - (sizeof (struct MinNode) + sizeof (ULONG)));
/* Find the pointer to the boopsi class list */
list = FindHead (&(o->o_Class->cl_Dispatcher.h_MinNode));
/* Build the title */
strcpy (gd->gd_Node, "@{b}Name Super P Objs Subs Address@{ub}\n");
/* Step through the list */
for (node = list->mlh_Head; node->mln_Succ; node = node->mln_Succ)
{
cl = (struct IClass *) node;
aEntry = (ULONG) cl->cl_Dispatcher.h_Entry;
cEntry = (ULONG) cl->cl_Dispatcher.h_SubEntry;
sprintf (notes, "%08lx", cEntry);
if ((aEntry >= min) && (aEntry <= max))
strcpy (notes, "ROM");
else if ((cEntry >= min) && (cEntry <= max))
strcpy (notes, "ROM");
else
strcpy (notes, "Disk");
bprintf (gd, "@{\"%-25s\" link HYPERNOZY.CLASS.(%08lx)} @{\"%-25s\" link HYPERNOZY.CLASS.(%08lx)} %ld %4ld %4ld @{\"%08lx\" link HYPERNOZY.MEMORY.(%08lx)}\n", cl->cl_ID, cl, ((cl->cl_Super) ? cl->cl_Super->cl_ID : ""), cl->cl_Super, cl->cl_Flags, cl->cl_ObjectCount, cl->cl_SubclassCount, cl, cl);
}
/* Delete the object, now that we are done with it */
DisposeObject (im);
}
else
strcpy (gd->gd_Node, "@{b}couldn't create first object.@{ub}\n");
}