home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / DC-POS24.LZX / pOS / IncPOS.lzx / pExec / Library.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-18  |  3.6 KB  |  123 lines

  1. #ifndef __INC_POS_PEXEC_LIBRARY_H
  2. #define __INC_POS_PEXEC_LIBRARY_H
  3. /*******************************************************************
  4.  Includes Release 24
  5.  (C) Copyright 1995-1997 proDAD
  6.      All Rights Reserved
  7.  
  8.  $AUT Holger Burkarth
  9.  $DAT >>Library.h<<   05 Aug 1996    12:43:07 - (C) ProDAD
  10. *******************************************************************/
  11. #ifndef __INC_POS_PEXEC_LIST_H
  12. #include <pExec/List.h>
  13. #endif
  14.  
  15. /*----------------------------------
  16. -----------------------------------*/
  17. struct pOS_LibraryFunction
  18. {
  19.   ULONG (*func)(_R_LB struct pOS_Library*,...);
  20.   UBYTE _d[8];
  21. };
  22.  
  23.  
  24. /*----------------------------------
  25. -----------------------------------*/
  26. struct pOS_Library
  27. {
  28.   struct pOS_ExNode         lib_Node;
  29.   ULONG                     lib_Flags;       /* (enum pOS_LibraryFlags) */
  30.   UWORD                     lib_NegSize;     /* number of bytes before library */
  31.   UWORD                     lib_PosSize;     /* number of bytes after library */
  32.   UWORD                     lib_Version;     /* major */
  33.   UWORD                     lib_Revision;    /* minor */
  34.   const CHAR               *lib_IdString;    /* ASCII Identification */
  35.   const struct pOS_TagItem *lib_Describe;    /*  */
  36.   ULONG                     lib_Sum;         /* the Checksum itself */
  37.   UWORD                     lib_OpenCnt;     /* number of current opens */
  38.   struct pOS_SegmentLst    *lib_Segm;
  39.   UWORD                     lib_pad1;
  40. };
  41.  
  42.  
  43.  
  44. enum pOS_LibraryFlags
  45. {
  46.   LIBF_SUMMING =0x01, /* we are currently checksumming */
  47.   LIBF_CHANGED =0x02, /* we have just changed the lib */
  48.   LIBF_SUMUSED =0x04, /* set if we should bother to sum */
  49.   LIBF_DELEXP  =0x08, /* delayed expunge */
  50.  
  51.   LIBF_ROM     =0x20, /* Lib is RomLib */
  52. /** 0x80 => reserved in resident **/
  53.  
  54.   LIBF_Unique    =0x1000, /* Lib wird geklont, kein Multi-Open erlaubt */
  55.   LIBF_DevAsLib  =0x2000, /* Device kann als Library geöffnet werden */
  56. };
  57.  
  58.  
  59.  
  60. /*----------------------------------
  61.  Rückwärtsgerichtete Struktur, LibBase
  62.  steht auf das Ende der Struct.
  63. -----------------------------------*/
  64. struct pOS_StdLibraryFunction
  65. {
  66.   struct pOS_LibraryFunction Reserved[8];
  67.  
  68.   struct pOS_SegmentLst* (*Expunge_func)(_R_LB struct pOS_Library*);
  69.   UBYTE _d3[8];
  70.   VOID  (*Close_func)(_R_LB struct pOS_Library*);
  71.   UBYTE _d2[8];
  72.   BOOL  (*Open_func)(_R_LB struct pOS_Library*);
  73.   UBYTE _d1[8];
  74. }; /* => LibBase */
  75.  
  76.  
  77. #define _pOS_GetStdLibraryFunction(lib) \
  78.  ( (struct pOS_StdLibraryFunction*)((ULONG)(lib) - sizeof(struct pOS_StdLibraryFunction)) )
  79.  
  80. #define _pOS_GetLibraryFunction(lib,index) \
  81.  ( (struct pOS_LibraryFunction*)((ULONG)(lib) - (index)*sizeof(struct pOS_LibraryFunction)) )
  82.  
  83. #define _pOS_GetStdLibFunc(type,lib) \
  84.  ( (type*)((ULONG)(lib) - sizeof(type)) )
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93. /*----------------------------------
  94. -----------------------------------*/
  95. struct pOS_ResidentLibInit
  96. {
  97.             size_t  lit_DataSize;         /* library data space size */
  98.   __CONST__ ULONG **lit_FuncTable;        /* table of entry points   */
  99.             VOID   *lit_DataInit;         /* table of data initializers */
  100.             BOOL  (*lit_InitFunc)(_R_LB struct pOS_ExecBase*,_R_A0 struct pOS_Library*); /* initialization function to run */
  101.   UBYTE lit_Reserved[8];
  102. };
  103.  
  104.  
  105.  
  106. enum pOS_LibraryFuncID
  107. {
  108.   LIBFUNCID_Base    = 0xffffff00, /** z.B.  (ULONG*)(LIBFUNCID_Base | LIBFUNCID_Reverse) **/
  109.   LIBFUNCID_Reverse = 0x80,
  110. };
  111.  
  112.  
  113. /*********************************/
  114.  
  115. #define _pOS_FreeLibraryMem(exec,lib) \
  116.  pOS_FreeMem(exec,(APTR)((ULONG)(lib)-(lib)->lib_NegSize),(lib)->lib_NegSize+(lib)->lib_PosSize);
  117.  
  118. #define _pOS_FreeLibraryMem2(lib) \
  119.  pOS_FreeMem((APTR)((ULONG)(lib)-(lib)->lib_NegSize),(lib)->lib_NegSize+(lib)->lib_PosSize);
  120.  
  121.  
  122. #endif
  123.