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

  1.  
  2.  /* SV_BufferSubs.c
  3.     - Functions for Buffering SVO Files -
  4.     (c) 1993-94 by Andreas R. Kleinert
  5.     Last changes : 07.05.1994
  6.  */
  7.  
  8.  
  9. #include "svobject.h"
  10.  
  11. ULONG __saveds __asm SVO_ReadToGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1);
  12. ULONG __saveds __asm SVO_GetGfxBuffer(    register __a1 struct SVObjectHandle *SVObjectHandle_a1,
  13.                                           register __a2 struct SV_GfxBuffer **bufferhandle,
  14.                                           register __a3 ULONG future);
  15. ULONG __saveds __asm SVO_SetGfxBuffer(    register __a1 struct SVObjectHandle *SVObjectHandle_a1,
  16.                                           register __a2 struct SV_GfxBuffer *bufferhandle,
  17.                                           register __a3 ULONG future);
  18.  
  19. ULONG __saveds __asm SVO_ReadToGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1)
  20. {
  21.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  22.  
  23.  ULONG retval = SVERR_NO_ERROR;
  24.  struct TagItem __aligned xpk_pars [5];
  25.  char filename [256], filename_svo [256];
  26.  
  27.  if(!SVObjectHandle) return(SVERR_NO_HANDLE);
  28.  
  29.  SVObjectHandle->ah_SVOHeader = AllocVec(sizeof(struct SVOHeader), (MEMF_CLEAR|MEMF_PUBLIC));
  30.  if(!SVObjectHandle->ah_SVOHeader) return(SVERR_NO_MEMORY);
  31.  
  32.  SVObjectHandle->ah_ramhandle = SVSUP_GetMemList();
  33.  if(!SVObjectHandle->ah_ramhandle) return(SVERR_NO_MEMORY);
  34.  
  35.  if(strlen(SVObjectHandle->ah_ReadName) > 4)
  36.   {
  37.    if(!stricmp(&SVObjectHandle->ah_ReadName[strlen(SVObjectHandle->ah_ReadName)-4], ".svo"))
  38.     {
  39.      strcpy(filename_svo, SVObjectHandle->ah_ReadName);
  40.      strcpy(filename,     SVObjectHandle->ah_ReadName);
  41.      filename[strlen(filename)-4] = (char) 0;
  42.     }else
  43.     {
  44.      strcpy(filename,     SVObjectHandle->ah_ReadName);
  45.      strcpy(filename_svo, SVObjectHandle->ah_ReadName);
  46.      strcat(filename_svo, ".svo");
  47.     }
  48.   }else
  49.   {
  50.    strcpy(filename_svo, SVObjectHandle->ah_ReadName);
  51.    strcat(filename_svo, ".svo");
  52.    strcpy(filename,     SVObjectHandle->ah_ReadName);
  53.   }
  54.  
  55.  SVObjectHandle->ah_filehandle_dest = Open(filename_svo, MODE_OLDFILE);
  56.  if(!SVObjectHandle->ah_filehandle_dest) return(SVERR_NO_FILE);
  57.  
  58.  Read(SVObjectHandle->ah_filehandle_dest, SVObjectHandle->ah_SVOHeader, SVOHEADER_SIZE);
  59.  
  60.  /* Read XPK Data */
  61.  
  62.  xpk_pars[0].ti_Tag  = XPK_GetOutBuf;
  63.  xpk_pars[0].ti_Data = (ULONG) &SVObjectHandle->ah_XpkBuffer;
  64.  
  65.  xpk_pars[1].ti_Tag  = XPK_GetOutBufLen;
  66.  xpk_pars[1].ti_Data = (ULONG) &SVObjectHandle->ah_XpkBufferSize;
  67.  
  68.  xpk_pars[2].ti_Tag  = XPK_InName;
  69.  xpk_pars[2].ti_Data = (ULONG) filename;
  70.  
  71.  xpk_pars[3].ti_Tag  = XPK_PassThru;
  72.  xpk_pars[3].ti_Data = (ULONG) TRUE;
  73.  
  74.  xpk_pars[4].ti_Tag  = TAG_DONE;
  75.  xpk_pars[4].ti_Data = N;
  76.  
  77.  XpkUnpack(&xpk_pars[0]);
  78.  
  79.  if(!SVObjectHandle->ah_XpkBuffer || !SVObjectHandle->ah_XpkBufferSize) return(SVERR_NO_MEMORY);
  80.  
  81.  
  82.  /* Initialize SV_GfxBuffer */
  83.  
  84.  SVObjectHandle->ah_SV_GfxBuffer = AllocVec(sizeof(struct SV_GfxBuffer), (MEMF_CLEAR|MEMF_PUBLIC));
  85.  if(!SVObjectHandle->ah_SV_GfxBuffer) return(SVERR_NO_MEMORY);
  86.  
  87.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_Version = SVGFX_VERSION;
  88.  
  89.  if(SVObjectHandle->ah_SVOHeader->svo_PixelBits == 1)
  90.   {
  91.    SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferType   = SVGFX_BUFFERTYPE_BITPLANE;
  92.    SVObjectHandle->ah_SV_GfxBuffer->svgfx_BytesPerLine = SVObjectHandle->ah_SVOHeader->svo_BytesPerLine;
  93.   }else
  94.   {
  95.    SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferType   = SVGFX_BUFFERTYPE_ONEPLANE;
  96.    SVObjectHandle->ah_SV_GfxBuffer->svgfx_PixelBits    = SVObjectHandle->ah_SVOHeader->svo_PixelBits;
  97.   }
  98.  
  99.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_Width          = SVObjectHandle->ah_SVOHeader->svo_Width;
  100.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_Height         = SVObjectHandle->ah_SVOHeader->svo_Height;
  101.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_ColorDepth     = SVObjectHandle->ah_SVOHeader->svo_Depth;
  102.  
  103.  if(SVObjectHandle->ah_SVOHeader->svo_Version) SVObjectHandle->ah_SV_GfxBuffer->svgfx_ViewMode32 = SVObjectHandle->ah_SVOHeader->svo_ViewMode32;
  104.   else                                         SVObjectHandle->ah_SV_GfxBuffer->svgfx_ViewMode32 = SVObjectHandle->ah_SVOHeader->svo_BAD_ViewMode32;
  105.  
  106.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_Buffer         = SVObjectHandle->ah_XpkBuffer;
  107.  SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferSize     = SVObjectHandle->ah_XpkBufferSize;
  108.  
  109.  SVObjectHandle->ah_XpkBuffer     = N;
  110.  SVObjectHandle->ah_XpkBufferSize = N;
  111.  
  112.  CopyMem(SVObjectHandle->ah_SVOHeader->svo_Colors, SVObjectHandle->ah_SV_GfxBuffer->svgfx_Colors, 768);
  113.  
  114.  return(retval);
  115. }
  116.  
  117. ULONG __saveds __asm SVO_GetGfxBuffer(    register __a1 struct SVObjectHandle *SVObjectHandle_a1,
  118.                                           register __a2 struct SV_GfxBuffer **bufferhandle,
  119.                                           register __a3 ULONG future)
  120. {
  121.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  122.  ULONG retval = SVERR_NO_ERROR;
  123.  
  124.  if(!SVObjectHandle) return(SVERR_NO_HANDLE);
  125.  
  126.  if(!bufferhandle) return(SVERR_ILLEGAL_ACCESS);
  127.  
  128.  *bufferhandle = SVObjectHandle->ah_SV_GfxBuffer;
  129.  
  130.  return(retval);
  131. }
  132.  
  133. ULONG __saveds __asm SVO_SetGfxBuffer(    register __a1 struct SVObjectHandle *SVObjectHandle_a1,
  134.                                           register __a2 struct SV_GfxBuffer *bufferhandle,
  135.                                           register __a3 ULONG future)
  136. {
  137.  struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
  138.  ULONG retval = SVERR_NO_ERROR;
  139.  
  140.  if(!SVObjectHandle) return(SVERR_NO_HANDLE);
  141.  
  142.  if(!bufferhandle) return(SVERR_ILLEGAL_ACCESS);
  143.  
  144.  SVObjectHandle->ah_SV_GfxBuffer2 = bufferhandle;
  145.  
  146.  return(retval);
  147. }
  148.