home *** CD-ROM | disk | FTP | other *** search
-
- /* SV_BufferSubs.c
- - Functions for Buffering SVO Files -
- (c) 1993-94 by Andreas R. Kleinert
- Last changes : 07.05.1994
- */
-
-
- #include "svobject.h"
-
- ULONG __saveds __asm SVO_ReadToGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1);
- ULONG __saveds __asm SVO_GetGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1,
- register __a2 struct SV_GfxBuffer **bufferhandle,
- register __a3 ULONG future);
- ULONG __saveds __asm SVO_SetGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1,
- register __a2 struct SV_GfxBuffer *bufferhandle,
- register __a3 ULONG future);
-
- ULONG __saveds __asm SVO_ReadToGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1)
- {
- struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
-
- ULONG retval = SVERR_NO_ERROR;
- struct TagItem __aligned xpk_pars [5];
- char filename [256], filename_svo [256];
-
- if(!SVObjectHandle) return(SVERR_NO_HANDLE);
-
- SVObjectHandle->ah_SVOHeader = AllocVec(sizeof(struct SVOHeader), (MEMF_CLEAR|MEMF_PUBLIC));
- if(!SVObjectHandle->ah_SVOHeader) return(SVERR_NO_MEMORY);
-
- SVObjectHandle->ah_ramhandle = SVSUP_GetMemList();
- if(!SVObjectHandle->ah_ramhandle) return(SVERR_NO_MEMORY);
-
- if(strlen(SVObjectHandle->ah_ReadName) > 4)
- {
- if(!stricmp(&SVObjectHandle->ah_ReadName[strlen(SVObjectHandle->ah_ReadName)-4], ".svo"))
- {
- strcpy(filename_svo, SVObjectHandle->ah_ReadName);
- strcpy(filename, SVObjectHandle->ah_ReadName);
- filename[strlen(filename)-4] = (char) 0;
- }else
- {
- strcpy(filename, SVObjectHandle->ah_ReadName);
- strcpy(filename_svo, SVObjectHandle->ah_ReadName);
- strcat(filename_svo, ".svo");
- }
- }else
- {
- strcpy(filename_svo, SVObjectHandle->ah_ReadName);
- strcat(filename_svo, ".svo");
- strcpy(filename, SVObjectHandle->ah_ReadName);
- }
-
- SVObjectHandle->ah_filehandle_dest = Open(filename_svo, MODE_OLDFILE);
- if(!SVObjectHandle->ah_filehandle_dest) return(SVERR_NO_FILE);
-
- Read(SVObjectHandle->ah_filehandle_dest, SVObjectHandle->ah_SVOHeader, SVOHEADER_SIZE);
-
- /* Read XPK Data */
-
- xpk_pars[0].ti_Tag = XPK_GetOutBuf;
- xpk_pars[0].ti_Data = (ULONG) &SVObjectHandle->ah_XpkBuffer;
-
- xpk_pars[1].ti_Tag = XPK_GetOutBufLen;
- xpk_pars[1].ti_Data = (ULONG) &SVObjectHandle->ah_XpkBufferSize;
-
- xpk_pars[2].ti_Tag = XPK_InName;
- xpk_pars[2].ti_Data = (ULONG) filename;
-
- xpk_pars[3].ti_Tag = XPK_PassThru;
- xpk_pars[3].ti_Data = (ULONG) TRUE;
-
- xpk_pars[4].ti_Tag = TAG_DONE;
- xpk_pars[4].ti_Data = N;
-
- XpkUnpack(&xpk_pars[0]);
-
- if(!SVObjectHandle->ah_XpkBuffer || !SVObjectHandle->ah_XpkBufferSize) return(SVERR_NO_MEMORY);
-
-
- /* Initialize SV_GfxBuffer */
-
- SVObjectHandle->ah_SV_GfxBuffer = AllocVec(sizeof(struct SV_GfxBuffer), (MEMF_CLEAR|MEMF_PUBLIC));
- if(!SVObjectHandle->ah_SV_GfxBuffer) return(SVERR_NO_MEMORY);
-
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_Version = SVGFX_VERSION;
-
- if(SVObjectHandle->ah_SVOHeader->svo_PixelBits == 1)
- {
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferType = SVGFX_BUFFERTYPE_BITPLANE;
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_BytesPerLine = SVObjectHandle->ah_SVOHeader->svo_BytesPerLine;
- }else
- {
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferType = SVGFX_BUFFERTYPE_ONEPLANE;
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_PixelBits = SVObjectHandle->ah_SVOHeader->svo_PixelBits;
- }
-
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_Width = SVObjectHandle->ah_SVOHeader->svo_Width;
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_Height = SVObjectHandle->ah_SVOHeader->svo_Height;
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_ColorDepth = SVObjectHandle->ah_SVOHeader->svo_Depth;
-
- if(SVObjectHandle->ah_SVOHeader->svo_Version) SVObjectHandle->ah_SV_GfxBuffer->svgfx_ViewMode32 = SVObjectHandle->ah_SVOHeader->svo_ViewMode32;
- else SVObjectHandle->ah_SV_GfxBuffer->svgfx_ViewMode32 = SVObjectHandle->ah_SVOHeader->svo_BAD_ViewMode32;
-
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_Buffer = SVObjectHandle->ah_XpkBuffer;
- SVObjectHandle->ah_SV_GfxBuffer->svgfx_BufferSize = SVObjectHandle->ah_XpkBufferSize;
-
- SVObjectHandle->ah_XpkBuffer = N;
- SVObjectHandle->ah_XpkBufferSize = N;
-
- CopyMem(SVObjectHandle->ah_SVOHeader->svo_Colors, SVObjectHandle->ah_SV_GfxBuffer->svgfx_Colors, 768);
-
- return(retval);
- }
-
- ULONG __saveds __asm SVO_GetGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1,
- register __a2 struct SV_GfxBuffer **bufferhandle,
- register __a3 ULONG future)
- {
- struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
- ULONG retval = SVERR_NO_ERROR;
-
- if(!SVObjectHandle) return(SVERR_NO_HANDLE);
-
- if(!bufferhandle) return(SVERR_ILLEGAL_ACCESS);
-
- *bufferhandle = SVObjectHandle->ah_SV_GfxBuffer;
-
- return(retval);
- }
-
- ULONG __saveds __asm SVO_SetGfxBuffer( register __a1 struct SVObjectHandle *SVObjectHandle_a1,
- register __a2 struct SV_GfxBuffer *bufferhandle,
- register __a3 ULONG future)
- {
- struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;
- ULONG retval = SVERR_NO_ERROR;
-
- if(!SVObjectHandle) return(SVERR_NO_HANDLE);
-
- if(!bufferhandle) return(SVERR_ILLEGAL_ACCESS);
-
- SVObjectHandle->ah_SV_GfxBuffer2 = bufferhandle;
-
- return(retval);
- }
-