@{"pOS_Library" LINK "pExec/Library.h/File" 26} @{"pOS_LibraryFunction" LINK "pExec/Library.h/File" 17} @{"pOS_ResidentLibInit" LINK "pExec/Library.h/File" 95}
@{"pOS_StdLibraryFunction" LINK "pExec/Library.h/File" 64}
@{b}#defines@{ub}
@{"_pOS_FreeLibraryMem()" LINK "pExec/Library.h/File" 115} @{"_pOS_FreeLibraryMem2()" LINK "pExec/Library.h/File" 118} @{"_pOS_GetLibraryFunction()" LINK "pExec/Library.h/File" 80}
@{"_pOS_GetStdLibFunc()" LINK "pExec/Library.h/File" 83} @{"_pOS_GetStdLibraryFunction()" LINK "pExec/Library.h/File" 77}
#include <@{"pExec/List.h" LINK "pExec/List.h/File"}>
#endif
/*----------------------------------
-----------------------------------*/
struct pOS_LibraryFunction
{
@{"ULONG" LINK "pExec/Types.h/File" 91} (*func)(@{"_R_LB" LINK "pExec/Types.h/File" 35} @{"struct pOS_Library" LINK File 26}*,...);
@{"UBYTE" LINK "pExec/Types.h/File" 95} _d[8];
};
/*----------------------------------
-----------------------------------*/
struct pOS_Library
{
@{"struct pOS_ExNode" LINK "pExec/List.h/File" 37} lib_Node;
@{"ULONG" LINK "pExec/Types.h/File" 91} lib_Flags; /* (enum pOS_LibraryFlags) */
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_NegSize; /* number of bytes before library */
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_PosSize; /* number of bytes after library */
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_Version; /* major */
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_Revision; /* minor */
const @{"CHAR" LINK "pExec/Types.h/File" 100} *lib_IdString; /* ASCII Identification */
const @{"struct pOS_TagItem" LINK "pUtil/TagItem.h/File" 19} *lib_Describe; /* */
@{"ULONG" LINK "pExec/Types.h/File" 91} lib_Sum; /* the Checksum itself */
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_OpenCnt; /* number of current opens */
@{"struct pOS_SegmentLst" LINK "pDOS/Segment.h/File" 32} *lib_Segm;
@{"UWORD" LINK "pExec/Types.h/File" 93} lib_pad1;
};
enum pOS_LibraryFlags
{
LIBF_SUMMING =0x01, /* we are currently checksumming */
LIBF_CHANGED =0x02, /* we have just changed the lib */
LIBF_SUMUSED =0x04, /* set if we should bother to sum */
LIBF_DELEXP =0x08, /* delayed expunge */
LIBF_ROM =0x20, /* Lib is RomLib */
/** 0x80 => reserved in resident **/
LIBF_Unique =0x1000, /* Lib wird geklont, kein Multi-Open erlaubt */
LIBF_DevAsLib =0x2000, /* Device kann als Library geöffnet werden */
};
/*----------------------------------
Rückwärtsgerichtete Struktur, LibBase
steht auf das Ende der Struct.
-----------------------------------*/
struct pOS_StdLibraryFunction
{
@{"struct pOS_LibraryFunction" LINK File 17} Reserved[8];
@{"struct pOS_SegmentLst" LINK "pDOS/Segment.h/File" 32}* (*Expunge_func)(@{"_R_LB" LINK "pExec/Types.h/File" 35} @{"struct pOS_Library" LINK File 26}*);
@{"UBYTE" LINK "pExec/Types.h/File" 95} _d3[8];
@{"VOID" LINK "pExec/Types.h/File" 83} (*Close_func)(@{"_R_LB" LINK "pExec/Types.h/File" 35} @{"struct pOS_Library" LINK File 26}*);
@{"UBYTE" LINK "pExec/Types.h/File" 95} _d2[8];
@{"BOOL" LINK "pExec/Types.h/File" 99} (*Open_func)(@{"_R_LB" LINK "pExec/Types.h/File" 35} @{"struct pOS_Library" LINK File 26}*);
@{"UBYTE" LINK "pExec/Types.h/File" 95} _d1[8];
}; /* => LibBase */
#define _pOS_GetStdLibraryFunction(lib) \\
( (@{"struct pOS_StdLibraryFunction" LINK File 64}*)((@{"ULONG" LINK "pExec/Types.h/File" 91})(lib) - sizeof(@{"struct pOS_StdLibraryFunction" LINK File 64})) )
#define _pOS_GetLibraryFunction(lib,index) \\
( (@{"struct pOS_LibraryFunction" LINK File 17}*)((@{"ULONG" LINK "pExec/Types.h/File" 91})(lib) - (index)*sizeof(@{"struct pOS_LibraryFunction" LINK File 17})) )
#define _pOS_GetStdLibFunc(type,lib) \\
( (type*)((@{"ULONG" LINK "pExec/Types.h/File" 91})(lib) - sizeof(type)) )
/*----------------------------------
-----------------------------------*/
struct pOS_ResidentLibInit
{
@{"size_t" LINK "pExec/Types.h/File" 113} lit_DataSize; /* library data space size */
@{"__CONST__" LINK "pExec/Types.h/File" 120} @{"ULONG" LINK "pExec/Types.h/File" 91} **lit_FuncTable; /* table of entry points */
@{"VOID" LINK "pExec/Types.h/File" 83} *lit_DataInit; /* table of data initializers */
@{"BOOL" LINK "pExec/Types.h/File" 99} (*lit_InitFunc)(@{"_R_LB" LINK "pExec/Types.h/File" 35} struct pOS_ExecBase*,_R_A0 struct pOS_Library*); /* initialization function to run */
@{"UBYTE" LINK "pExec/Types.h/File" 95} lit_Reserved[8];
};
enum pOS_LibraryFuncID
{
LIBFUNCID_Base = 0xffffff00, /** z.B. (@{"ULONG" LINK "pExec/Types.h/File" 91}*)(LIBFUNCID_Base | LIBFUNCID_Reverse) **/
LIBFUNCID_Reverse = 0x80,
};
/*********************************/
#define _pOS_FreeLibraryMem(exec,lib) \\
pOS_FreeMem(exec,(@{"APTR" LINK "pExec/Types.h/File" 87})((@{"ULONG" LINK "pExec/Types.h/File" 91})(lib)-(lib)->lib_NegSize),(lib)->lib_NegSize+(lib)->lib_PosSize);
#define _pOS_FreeLibraryMem2(lib) \\
pOS_FreeMem((@{"APTR" LINK "pExec/Types.h/File" 87})((@{"ULONG" LINK "pExec/Types.h/File" 91})(lib)-(lib)->lib_NegSize),(lib)->lib_NegSize+(lib)->lib_PosSize);