home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / ImageLib / Image_lib / lib_source / StartUp.c < prev   
Encoding:
C/C++ Source or Header  |  1999-05-24  |  3.6 KB  |  182 lines

  1. /*
  2. **      $VER: StartUp.c 37.11 (24.6.97)
  3. **
  4. **      Library startup-code and function table definition
  5. **
  6. **      (C) Copyright 1996-97 Andreas R. Kleinert
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #define __USE_SYSBASE
  11.  
  12. #include <exec/types.h>
  13. #include <exec/memory.h>
  14. #include <exec/libraries.h>
  15. #include <exec/execbase.h>
  16. #include <exec/resident.h>
  17. #include <exec/initializers.h>
  18. #include <proto/exec.h>
  19.  
  20. #include "/include/libraries/imagebase.h"
  21. #include "funcproto.h"
  22.  
  23. extern ULONG __saveds __stdargs StartLib(void);
  24. extern void  __saveds __stdargs EndLib(void);
  25.  
  26. struct ImageBase * __saveds __asm InitLib( register __a6 struct ExecBase *sysbase,
  27.                     register __a0 APTR           *seglist,
  28.                     register __d0 struct ImageBase *ib);
  29. struct ImageBase * __saveds __asm OpenLib( register __a6 struct ImageBase *ImageBase);
  30. APTR __saveds __asm CloseLib( register __a6 struct ImageBase *ImageBase);
  31. APTR __saveds __asm ExpungeLib( register __a6 struct ImageBase *ib);
  32. ULONG __asm ExtFuncLib(void);
  33.  
  34. LONG __asm LibStart(void)
  35. {
  36.  return(-1);
  37. }
  38.  
  39. extern APTR FuncTab [];
  40. extern struct MyDataInit DataTab;
  41.  
  42. struct InitTable
  43. {
  44.  ULONG              LibBaseSize;
  45.  APTR              *FunctionTable;
  46.  struct MyDataInit *DataTable;
  47.  APTR               InitLibTable;
  48. } InitTab =
  49. {
  50.  sizeof(struct ImageBase),
  51.  &FuncTab[0],
  52.  &DataTab,
  53.  InitLib
  54. };
  55.  
  56. APTR FuncTab [] =                      
  57. {
  58.  OpenLib,
  59.  CloseLib,
  60.  ExpungeLib,
  61.  ExtFuncLib,
  62.  
  63.  DrawBitMap,
  64.  ChunkyToBitMapA,
  65.  FreeChunky,
  66.  DrawTextA,
  67.  Draw3DBoxA,
  68.  ScaleBitMapA,
  69.  ChunkyToHAMA,
  70.  
  71.  (APTR) ((LONG)-1)
  72. };
  73.  
  74.  
  75. extern struct ImageBase *ImageBase;
  76.  
  77. struct ImageBase * __saveds __asm InitLib( register __a6 struct ExecBase      *sysbase,
  78.                     register __a0 APTR           *seglist,
  79.                     register __d0 struct ImageBase *ib)
  80. {
  81.  ImageBase = ib;
  82.  
  83.  ImageBase->ib_SysBase = sysbase;
  84.  ImageBase->ib_SegList = seglist;
  85.  
  86.  if(StartLib()) return(ImageBase);
  87.  
  88.  EndLib();
  89.  
  90.  FreeMem(ib, sizeof(struct ImageBase));
  91.  
  92.  return(NULL);
  93. }
  94.  
  95. struct ImageBase * __saveds __asm OpenLib( register __a6 struct ImageBase *ImageBase)
  96. {
  97.  ImageBase->ib_LibNode.lib_OpenCnt++;
  98.  
  99.  ImageBase->ib_LibNode.lib_Flags &= ~LIBF_DELEXP;
  100.  
  101.  return(ImageBase);
  102. }
  103.  
  104. APTR __saveds __asm CloseLib( register __a6 struct ImageBase *ImageBase)
  105. {
  106.  ImageBase->ib_LibNode.lib_OpenCnt--;
  107.  
  108.  if(!ImageBase->ib_LibNode.lib_OpenCnt)
  109.   {
  110.    if(ImageBase->ib_LibNode.lib_Flags & LIBF_DELEXP)
  111.     {
  112.      return( ExpungeLib(ImageBase) );
  113.     }
  114.   }
  115.  
  116.  return(NULL);
  117. }
  118.  
  119. APTR __saveds __asm ExpungeLib( register __a6 struct ImageBase *ib)
  120. {
  121.  struct ImageBase *ImageBase = ib;
  122.  APTR seglist;
  123.  
  124.  if(!ImageBase->ib_LibNode.lib_OpenCnt)
  125.   {
  126.    ULONG negsize, possize, fullsize;
  127.    UBYTE *negptr = (UBYTE *) ImageBase;
  128.  
  129.    seglist = ImageBase->ib_SegList;
  130.  
  131.    Remove((struct Node *)ImageBase);
  132.  
  133.    EndLib();
  134.  
  135.    negsize  = ImageBase->ib_LibNode.lib_NegSize;
  136.    possize  = ImageBase->ib_LibNode.lib_PosSize;
  137.    fullsize = negsize + possize;
  138.    negptr  -= negsize;
  139.  
  140.    FreeMem(negptr, fullsize);
  141.  
  142.    return(seglist);
  143.   }
  144.   
  145.  ImageBase->ib_LibNode.lib_Flags |= LIBF_DELEXP;
  146.  
  147.  return(NULL);
  148. }
  149.  
  150. ULONG __asm ExtFuncLib(void)
  151. {
  152.  return(NULL);
  153. }
  154.  
  155. struct ImageBase *ImageBase = NULL;
  156.  
  157. #ifdef __SASC
  158.  
  159. #ifdef ARK_OLD_STDIO_FIX
  160.  
  161. ULONG XCEXIT       = NULL;
  162. ULONG _XCEXIT      = NULL;
  163. ULONG ONBREAK      = NULL;
  164. ULONG _ONBREAK     = NULL;
  165. ULONG base         = NULL;
  166. ULONG _base        = NULL;
  167. ULONG ProgramName  = NULL;
  168. ULONG _ProgramName = NULL;
  169. ULONG StackPtr     = NULL;
  170. ULONG _StackPtr    = NULL;
  171. ULONG oserr        = NULL;
  172. ULONG _oserr       = NULL;
  173. ULONG OSERR        = NULL;
  174. ULONG _OSERR       = NULL;
  175.  
  176. #endif /* ARK_OLD_STDIO_FIX */
  177.  
  178. void __regargs __chkabort(void) { }
  179. void __regargs _CXBRK(void)     { }
  180.  
  181. #endif /* __SASC */
  182.