Use inlines and OS3ify amigaguide.class

This commit is contained in:
Chris Young 2015-01-10 22:47:20 +00:00
parent 2140f056dd
commit 3630d7348d
2 changed files with 31 additions and 25 deletions

View File

@ -4,8 +4,7 @@
* by Daniel "Trixie" Jedlicka * by Daniel "Trixie" Jedlicka
*/ */
#undef __USE_INLINE__ #include "amiga/os3support.h"
#include "amigaguide_class.h" #include "amigaguide_class.h"
@ -46,18 +45,22 @@ Class *initAGClass(void)
// Open amigaguide.library and its interface. // Open amigaguide.library and its interface.
if ( (AmigaGuideBase = IExec->OpenLibrary("amigaguide.library", 52)) ) if ( (AmigaGuideBase = OpenLibrary("amigaguide.library", 52)) )
{ {
if ( (IAmigaGuide = (struct AmigaGuideIFace *)IExec->GetInterface(AmigaGuideBase, "main", 1L, NULL)) ) #ifdef __amigaos4__
if ( (IAmigaGuide = (struct AmigaGuideIFace *)GetInterface(AmigaGuideBase, "main", 1L, NULL)) )
{ {
if ( (cl = IIntuition->MakeClass(NULL, "rootclass", NULL, sizeof(struct localObjectData), 0)) ) #endif
if ( (cl = MakeClass(NULL, "rootclass", NULL, sizeof(struct localObjectData), 0)) )
{ {
cl->cl_Dispatcher.h_Entry = (HOOKFUNC)dispatchAGClass; cl->cl_Dispatcher.h_Entry = (HOOKFUNC)dispatchAGClass;
IIntuition->AddClass(cl); AddClass(cl);
} }
else freeAGClass(NULL); else freeAGClass(NULL);
#ifdef __amigaos4__
} }
else freeAGClass(NULL); else freeAGClass(NULL);
#endif
} }
return cl; return cl;
@ -72,9 +75,11 @@ BOOL freeAGClass(Class *cl)
// Close amigaguide.library and free the class. // Close amigaguide.library and free the class.
if (IAmigaGuide) IExec->DropInterface((struct Interface *)IAmigaGuide); #ifdef __amigaos4__
if (AmigaGuideBase) IExec->CloseLibrary(AmigaGuideBase); if (IAmigaGuide) DropInterface((struct Interface *)IAmigaGuide);
if (cl) retVal = IIntuition->FreeClass(cl); #endif
if (AmigaGuideBase) CloseLibrary(AmigaGuideBase);
if (cl) retVal = FreeClass(cl);
return retVal; return retVal;
} }
@ -112,7 +117,7 @@ static uint32 dispatchAGClass(Class *cl, Object *o, Msg msg)
return agm_process(cl, o, msg); return agm_process(cl, o, msg);
default: default:
return IIntuition->IDoSuperMethodA(cl, o, msg); return IDoSuperMethodA(cl, o, msg);
} }
} }
@ -126,7 +131,7 @@ uint32 om_new(Class *cl, Object *o, struct opSet *msg)
uint32 retVal = 0L; uint32 retVal = 0L;
if ( (retVal = IIntuition->IDoSuperMethodA(cl, o, (Msg)msg)) ) if ( (retVal = IDoSuperMethodA(cl, o, (Msg)msg)) )
{ {
// Obtain pointer to our object's local instance data. // Obtain pointer to our object's local instance data.
if ( (lod = (struct localObjectData *)INST_DATA(cl, retVal)) ) if ( (lod = (struct localObjectData *)INST_DATA(cl, retVal)) )
@ -161,7 +166,7 @@ uint32 om_dispose(Class *cl, Object *o, Msg msg)
agm_close(cl, o, msg); agm_close(cl, o, msg);
// Let superclass dispose of the object. // Let superclass dispose of the object.
return IIntuition->IDoSuperMethodA(cl, o, msg); return IDoSuperMethodA(cl, o, msg);
} }
@ -176,7 +181,7 @@ uint32 om_set(Class *cl, Object *o, struct opSet *msg)
uint32 retVal = 0L; uint32 retVal = 0L;
while ((ti = IUtility->NextTagItem (&tags))) while ((ti = NextTagItem (&tags)))
{ {
switch (ti->ti_Tag) switch (ti->ti_Tag)
{ {
@ -267,7 +272,7 @@ uint32 om_get(Class *cl, Object *o, struct opGet *msg)
break; break;
default: default:
retVal = IIntuition->IDoSuperMethodA(cl, o, (Msg)msg); retVal = IDoSuperMethodA(cl, o, (Msg)msg);
} }
return retVal; return retVal;
@ -289,15 +294,15 @@ uint32 agm_open(Class *cl, Object *o, Msg msg)
if ( lod->agHandle ) agm_close(cl, o, msg); if ( lod->agHandle ) agm_close(cl, o, msg);
// (Re)establish the AmigaGuide context and open the database asynchronously. // (Re)establish the AmigaGuide context and open the database asynchronously.
if ( (lod->agHandle = IAmigaGuide->OpenAmigaGuideAsync(&(lod->nag), NULL)) ) if ( (lod->agHandle = OpenAmigaGuideAsync(&(lod->nag), NULL)) )
{ {
if ( (lod->agSignal = IAmigaGuide->AmigaGuideSignal(lod->agHandle)) ) if ( (lod->agSignal = AmigaGuideSignal(lod->agHandle)) )
{ {
// Wait until the database is displayed and ready. // Wait until the database is displayed and ready.
IExec->Wait(lod->agSignal); Wait(lod->agSignal);
while ( agActive == FALSE ) while ( agActive == FALSE )
{ {
while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) while ( (lod->agm = GetAmigaGuideMsg(lod->agHandle)) )
{ {
// The AmigaGuide process started OK. // The AmigaGuide process started OK.
if ( lod->agm->agm_Type == ActiveToolID ) agActive = TRUE; if ( lod->agm->agm_Type == ActiveToolID ) agActive = TRUE;
@ -305,19 +310,19 @@ uint32 agm_open(Class *cl, Object *o, Msg msg)
// Opening the guide file failed for some reason, continue as usual. // Opening the guide file failed for some reason, continue as usual.
if ( lod->agm->agm_Type == ToolStatusID && lod->agm->agm_Pri_Ret ) agActive = TRUE; if ( lod->agm->agm_Type == ToolStatusID && lod->agm->agm_Pri_Ret ) agActive = TRUE;
IAmigaGuide->ReplyAmigaGuideMsg(lod->agm); ReplyAmigaGuideMsg(lod->agm);
} }
} }
if ( lod->nag.nag_Context ) if ( lod->nag.nag_Context )
{ {
// A context node array is provided = open the current context node. // A context node array is provided = open the current context node.
IAmigaGuide->SetAmigaGuideContext(lod->agHandle, lod->agContextID, NULL); SetAmigaGuideContext(lod->agHandle, lod->agContextID, NULL);
retVal = IAmigaGuide->SendAmigaGuideContext(lod->agHandle, NULL); retVal = SendAmigaGuideContext(lod->agHandle, NULL);
} }
else else
{ {
// No context array is provided = open the main node. // No context array is provided = open the main node.
retVal = IAmigaGuide->SendAmigaGuideCmd(lod->agHandle, "LINK MAIN", TAG_DONE); retVal = SendAmigaGuideCmd(lod->agHandle, "LINK MAIN", TAG_DONE);
} }
} }
} }
@ -338,7 +343,7 @@ uint32 agm_close(Class *cl, Object *o, Msg msg)
if ( lod->agHandle ) if ( lod->agHandle )
{ {
IAmigaGuide->CloseAmigaGuide(lod->agHandle); CloseAmigaGuide(lod->agHandle);
lod->agHandle = NULL; lod->agHandle = NULL;
lod->agSignal = 0; lod->agSignal = 0;
retVal = 1L; retVal = 1L;
@ -361,7 +366,7 @@ uint32 agm_process(Class *cl, Object *o, Msg msg)
if (lod->agHandle) if (lod->agHandle)
{ {
while ( (lod->agm = IAmigaGuide->GetAmigaGuideMsg(lod->agHandle)) ) while ( (lod->agm = GetAmigaGuideMsg(lod->agHandle)) )
{ {
switch (lod->agm->agm_Type) switch (lod->agm->agm_Type)
{ {
@ -374,7 +379,7 @@ uint32 agm_process(Class *cl, Object *o, Msg msg)
//printf("%d\n", lod->agm->agm_Type); //printf("%d\n", lod->agm->agm_Type);
break; break;
} }
IAmigaGuide->ReplyAmigaGuideMsg(lod->agm); ReplyAmigaGuideMsg(lod->agm);
} }
} }

View File

@ -62,6 +62,7 @@
/* Intuition */ /* Intuition */
#define IDoMethod DoMethod #define IDoMethod DoMethod
#define IDoSuperMethodA DoSuperMethodA
/* Integral type definitions */ /* Integral type definitions */
typedef int8_t int8; typedef int8_t int8;