/* SV_RecogSubs.c - Functions for External Module Recognition and Binding - (c) 1993-95 by Andreas R. Kleinert Last changes : 16.12.1995 */ #include "svobject.h" #include #include #include ULONG __saveds __stdargs SVLI_OpenLibs(void); void __saveds __stdargs SVLI_CloseLibs(void); void __saveds __stdargs SVLI_InitSVOList(void); struct ExecBase *SysBase = N; struct DosLibrary *DOSBase = N; struct IntuitionBase *IntuitionBase = N; struct GfxBase *GfxBase = N; struct Library *UtilityBase = N; struct SVSupportBase *SVSupportBase = N; struct Library *MathBase = N; #define VERSION 3 #define REVISION 3 char __aligned SVLibName [] = "UtahRLE.svobject"; char __aligned SVLibID [] = "UtahRLE 3.3 (16.12.95)\15\12\0"; char __aligned AKCopyright [] = "(c) 1994-95 by Andreas R. Kleinert"; extern ULONG InitTab[]; extern APTR EndResident; /* below */ struct Resident ROMTag = { RTC_MATCHWORD, &ROMTag, &EndResident, RTF_AUTOINIT, VERSION, NT_LIBRARY, REVISION, &SVLibName[0], &SVLibID[0], &InitTab[0] }; APTR EndResident; struct MyDataInit { UWORD ainit1; UWORD binit1; UWORD ln_type; UWORD ainit2; UWORD binit2; ULONG ln_name2; UWORD ainit3; UWORD binit3; UWORD lib_flags; UWORD ainit4; UWORD binit4; UWORD lib_version; UWORD ainit5; UWORD binit5; UWORD lib_revision; UWORD ainit6; UWORD binit6; ULONG lib_idstring2; ULONG end; } DataTab = { INITBYTE(OFFSET(Node, ln_Type), NT_LIBRARY), 0x80, (UBYTE) OFFSET(Node, ln_Name), (ULONG) &SVLibName[0], INITBYTE(OFFSET(Library, lib_Flags), LIBF_SUMUSED|LIBF_CHANGED), INITWORD(OFFSET(Library, lib_Version), VERSION), INITWORD(OFFSET(Library, lib_Revision), REVISION), 0x80, (UBYTE) OFFSET(Library, lib_IdString), (ULONG) &SVLibID[0], (ULONG) 0 }; ULONG __saveds __stdargs SVLI_OpenLibs(void) { SysBase = (*((struct ExecBase **) 4)); DOSBase = (APTR) OpenLibrary("dos.library", 37); if(!DOSBase) return(FALSE); IntuitionBase = (APTR) OpenLibrary("intuition.library", 37); if(!IntuitionBase) return(FALSE); GfxBase = (APTR) OpenLibrary("graphics.library", 37); if(!GfxBase) return(FALSE); UtilityBase = (APTR) OpenLibrary("utility.library", 37); if(!UtilityBase) return(FALSE); SVSupportBase = (APTR) OpenLibrary("superviewsupport.library", 6); if(!SVSupportBase) return(FALSE); MathBase = (APTR) OpenLibrary("mathffp.library", 33); if(!MathBase) return(FALSE); return(TRUE); } void __saveds __stdargs SVLI_CloseLibs(void) { if(DOSBase) CloseLibrary((APTR) DOSBase); if(IntuitionBase) CloseLibrary((APTR) IntuitionBase); if(GfxBase) CloseLibrary((APTR) GfxBase); if(UtilityBase) CloseLibrary((APTR) UtilityBase); if(SVSupportBase) CloseLibrary((APTR) SVSupportBase); if(MathBase) CloseLibrary((APTR) MathBase); } void __saveds __stdargs SVLI_InitSVOList(void) { struct SVO_ObjectNode *svo_node = N; SVObjectBase->svb_SVObject = N; if(FindName(&SysBase->LibList, "superview.library")) { struct SuperViewBase *SuperViewBase = (APTR) OpenLibrary("superview.library", 2); if(SuperViewBase) { SVObjectBase->svb_SVObject = (APTR) FindName((APTR) &SuperViewBase->svb_SVObjectList, "MAC.svobject"); CloseLibrary((APTR) SuperViewBase); } }else { svo_node = AllocVec(sizeof(struct SVO_ObjectNode), (MEMF_CLEAR|MEMF_PUBLIC)); if(!svo_node) return; SVObjectBase->svb_SVObject = svo_node; ((struct Node *)svo_node)->ln_Type = NT_UNKNOWN; ((struct Node *)svo_node)->ln_Pri = -40; ((struct Node *)svo_node)->ln_Name = N; svo_node->svo_Version = LibVer(SVObjectBase); svo_node->svo_ObjectType = SVO_OBJECTTYPE_EXTERNAL; strcpy(svo_node->svo_FileName, "UtahRLE.svobject"); strcpy(svo_node->svo_TypeID, "UtahRLE"); svo_node->svo_TypeCode = N; /* set by superview.library */ svo_node->svo_SubTypeNum = 1; strcpy(svo_node->svo_SubTypeID[0], "RayTrace"); svo_node->svo_SubTypeCode[0] = N; /* set by superview.library */ svo_node->svo_Flags = SVO_FLAG_READS_TO_BUFFER | SVO_FLAG_READS_TO_SCREEN | SVO_FLAG_WRITES_FROM_BUFFER | SVO_FLAG_WRITES_FROM_SCREEN | SVO_FLAG_SVDRIVER; } }