home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / viewer / SVLIBS81.LHA / superview-lib / Programmers / Example_SVObjects / SVO / SV_SuperVisor.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-13  |  5.7 KB  |  179 lines

  1.  
  2.  /* SV_SuperVisor.c
  3.     - SuperVising (global exit) Functions for SVO-Support -
  4.     (c) 1990-94 by Andreas R. Kleinert
  5.     Last changes : 07.05.1994
  6.  */
  7.  
  8. #include "svobject.h"
  9.  
  10. #include <proto/superview.h>
  11.  
  12.  
  13. struct SVObjectHandle * __saveds __asm SVO_AllocHandle( register __a1 APTR future_a1);
  14. void __saveds __asm SVO_FreeHandle( register __a1 struct SVObjectHandle *SVObjectHandle_a1);
  15. void __saveds __asm SVO_CloseDisplay( register __a1 struct SVObjectHandle *SVObjectHandle_a1);
  16. void __saveds __asm SVO_FreeResources( register __a1 struct SVObjectHandle *SVObjectHandle_a1);
  17.  
  18. /* *************************************************** */
  19. /* *                             * */
  20. /* * SVO_AllocHandle : Alloc SVObjectHandle and more * */
  21. /* *                             * */
  22. /* *************************************************** */
  23.  
  24. struct SVObjectHandle * __saveds __asm SVO_AllocHandle( register __a1 APTR future_a1)
  25. {
  26.  APTR future = future_a1;
  27.  
  28.  struct SuperViewBase *SuperViewBase = N;
  29.  struct SVDriverBase  *SVDriverBase  = N;
  30.  
  31.  struct SVObjectHandle *handle;
  32.  struct SVD_DriverNode *entry;
  33.  char open_name [256];
  34.  
  35.  handle = (APTR) AllocVec(sizeof(struct SVObjectHandle), (MEMF_CLEAR|MEMF_PUBLIC));
  36.  if(handle)
  37.   {
  38.    handle->ah_Type      = SV_SUBTYPE_NONE;
  39.    handle->ah_WriteMode = SV_SUBTYPE_NONE;
  40.    handle->ah_Medium    = AKO_MEDIUM_DISK; /* default */
  41.  
  42.    SuperViewBase = (APTR) OpenLibrary("superview.library", 2);
  43.    if(SuperViewBase)
  44.     {
  45.      if(LibVer(SuperViewBase) > 2)
  46.       {
  47.        if(!SVL_GetGlobalDriver(&entry, N))
  48.         {
  49.          strcpy(open_name, "LIBS:svdrivers/");
  50.          strcat(open_name, entry->svd_FileName);
  51.  
  52.          if(SVDriverBase = (APTR) OpenLibrary(open_name, SVD_VERSION))
  53.           {
  54.            if(handle->ah_SVDriverHandle = SVD_AllocHandle(N))
  55.             {
  56.              handle->ah_DriverBase   = SVDriverBase;
  57.              handle->ah_SVDriver     = entry;
  58.             }else CloseLibrary((APTR) SVDriverBase);
  59.           }
  60.         }
  61.  
  62.        CloseLibrary(SuperViewBase);
  63.       }
  64.     }
  65.   }
  66.  
  67.  return(handle);
  68. }
  69.  
  70. /* *************************************************** */
  71. /* *                             * */
  72. /* * SVO_FreeHandle : Free SVObjectHandle and more   * */
  73. /* *                             * */
  74. /* *************************************************** */
  75.  
  76. void __saveds __asm SVO_FreeHandle( register __a1 struct SVObjectHandle *SVObjectHandle_a1)
  77. {
  78.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  79.  struct SVDriverBase *SVDriverBase = N;
  80.  
  81.  SVO_CloseDisplay(SVObjectHandle);
  82.  SVO_FreeResources(SVObjectHandle);
  83.  
  84.  SVDriverBase = SVObjectHandle->ah_DriverBase;
  85.  if(SVDriverBase)
  86.   {
  87.    if(SVObjectHandle->ah_SVDriverHandle) SVD_FreeHandle(SVObjectHandle->ah_SVDriverHandle);
  88.  
  89.    CloseLibrary((APTR) SVDriverBase);
  90.  
  91.    SVObjectHandle->ah_DriverBase   = N;
  92.    SVObjectHandle->ah_SVDriverHandle = N;
  93.   }
  94.  
  95.  FreeVec(SVObjectHandle);
  96. }
  97.  
  98. /* *************************************************** */
  99. /* *                             * */
  100. /* * SVO_CloseDisplay : Close Display, ...           * */
  101. /* *                             * */
  102. /* *************************************************** */
  103.  
  104. void __saveds __asm SVO_CloseDisplay( register __a1 struct SVObjectHandle *SVObjectHandle_a1)
  105. {
  106.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  107.  struct SVDriverBase *SVDriverBase = N;
  108.  APTR msg;
  109.  
  110.  if(SVObjectHandle->ah_Screen)
  111.   {
  112.    if(SVObjectHandle->ah_Window)
  113.     {
  114.      while( msg = GetMsg(SVObjectHandle->ah_Window->UserPort) ) ReplyMsg(msg);
  115.  
  116.      CloseWindow(SVObjectHandle->ah_Window);
  117.     }
  118.  
  119.    CloseScreen(SVObjectHandle->ah_Screen);
  120.  
  121.    SVObjectHandle->ah_Window = N;
  122.    SVObjectHandle->ah_Screen = N;
  123.   }
  124.  
  125.  SVDriverBase = SVObjectHandle->ah_DriverBase;
  126.  if(SVDriverBase) if(SVObjectHandle->ah_SVDriverHandle) SVD_CloseDisplay(SVObjectHandle->ah_SVDriverHandle);
  127. }
  128.  
  129. /* *************************************************** */
  130. /* *                             * */
  131. /* * SVO_FreeResources : Free Memory and more        * */
  132. /* *                             * */
  133. /* *************************************************** */
  134.  
  135. void __saveds __asm SVO_FreeResources( register __a1 struct SVObjectHandle *SVObjectHandle_a1)
  136. {
  137.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  138.  struct SVDriverBase *SVDriverBase = N;
  139.  
  140.  if(!SVObjectHandle) return;
  141.  
  142.  if(SVObjectHandle->ah_filehandle_source)  Close(SVObjectHandle->ah_filehandle_source);
  143.  if(SVObjectHandle->ah_filehandle_source2) Close(SVObjectHandle->ah_filehandle_source2);
  144.  if(SVObjectHandle->ah_filehandle_dest)    Close(SVObjectHandle->ah_filehandle_dest);
  145.  if(SVObjectHandle->ah_filehandle_dest2)   Close(SVObjectHandle->ah_filehandle_dest2);
  146.  if(SVObjectHandle->ah_ramhandle)          SVSUP_FreeMemList(SVObjectHandle->ah_ramhandle);
  147.  
  148.  if(SVObjectHandle->ah_SVOHeader)
  149.   {
  150.    FreeVec(SVObjectHandle->ah_SVOHeader);
  151.  
  152.    if(SVObjectHandle->ah_XpkBuffer) FreeMem(SVObjectHandle->ah_XpkBuffer, SVObjectHandle->ah_XpkBufferSize);
  153.   }
  154.  
  155.  SVDriverBase = SVObjectHandle->ah_DriverBase;
  156.  if(SVDriverBase) if(SVObjectHandle->ah_SVDriverHandle) SVD_FreeResources(SVObjectHandle->ah_SVDriverHandle);
  157.  
  158.  if(SVObjectHandle->ah_SV_GfxBuffer)
  159.   {
  160.    /* Here, inside SVO.svobject, we cannot use AllocVec()/FreeVec() for
  161.       the GfxBuffers, because Xpk-Library's Buffers are all allocated via
  162.       AllocMem(). Otherwise we'll get "GURU : memory header not located".
  163.    */
  164.  
  165.    if(SVObjectHandle->ah_SV_GfxBuffer->svgfx_Buffer) FreeMem(SVObjectHandle->ah_SV_GfxBuffer->svgfx_Buffer, SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferSize);
  166.  
  167.    FreeVec(SVObjectHandle->ah_SV_GfxBuffer);
  168.   }
  169.  
  170.  SVObjectHandle->ah_filehandle_source  = N;
  171.  SVObjectHandle->ah_filehandle_source2 = N;
  172.  SVObjectHandle->ah_filehandle_dest    = N;
  173.  SVObjectHandle->ah_filehandle_dest2   = N;
  174.  SVObjectHandle->ah_ramhandle          = N;
  175.  SVObjectHandle->ah_SVOHeader          = N;
  176.  SVObjectHandle->ah_XpkBuffer          = N;
  177.  SVObjectHandle->ah_SV_GfxBuffer       = N;
  178. }
  179.