
 /* SV_InfoSubs.c
    - Functions for UtahRLE-Support -
    (c) 1990-95 by Andreas R. Kleinert
    Last changes : 07.10.1995
 */

#include "svobject.h"


ULONG __saveds __asm SVO_FileInfoRequest( register __a1 struct SVObjectHandle *SVObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future);
ULONG __saveds __asm SVO_CheckFileType(register __a1 BPTR handle, register __a2 UBYTE *filename, register __a3 APTR future);


void __saveds __stdargs SVLI_SPrintf(APTR buffer, char *formatstring, ...);


/* *************************************************** */
/* *                                                 * */
/* * SVO_FileInfoRequest : Display File Information  * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SVO_FileInfoRequest( register __a1 struct SVObjectHandle *SVObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future)
{
 struct SVObjectHandle *SVObjectHandle = SVObjectHandle_a1;

 ULONG retval = SVERR_NO_ERROR;
 char hbuf[80], buffer [1024];
 ULONG idcmp = N, noinfo = TRUE;
 struct EasyStruct *estr;
 struct Window     *disp_win = window;

 if(!SVObjectHandle) return(SVERR_NO_HANDLE);

 buffer[0] = (char) 0;

 if(SVObjectHandle->ah_SV_GfxBuffer)
  {
   noinfo = FALSE;

   strcat(buffer,   "\n File Information"
                  "\n\n UtahRLE");

   strcat(buffer, " (Raytracer)");

   strcat(buffer, "\n");

   sprintf(hbuf, "\n GfxWidth       : %ld", (long) SVObjectHandle->ah_SV_GfxBuffer->svgfx_Width);
   strcat(buffer, hbuf);

   sprintf(hbuf, "\n GfxHeight      : %ld", (long) SVObjectHandle->ah_SV_GfxBuffer->svgfx_Height);
   strcat(buffer, hbuf);

   sprintf(hbuf, "\n Colordepth     : 24");
   strcat(buffer, hbuf);

   sprintf(hbuf, "\n => # of Colors : %ld", (long) ColorAcc(24));
   strcat(buffer, hbuf);

   strcat(buffer, "\n");

  }else retval = SVERR_NO_HANDLE;

 if(!retval)
  {
   if(noinfo)
    {
     strcat(buffer,   "\n File Information"
                    "\n\n No information available\n");
    }

   estr = AllocVec(sizeof(struct EasyStruct), MEMF_CLEAR);
   if(estr)
    {
     estr->es_StructSize   = sizeof(struct EasyStruct);
     estr->es_Flags        = N;
     estr->es_Title        = "SuperView InfoRequester";
     estr->es_TextFormat   = buffer;
     estr->es_GadgetFormat = "Confirm";

     if(!disp_win) disp_win = SVObjectHandle->ah_Window;

     EasyRequestArgs(disp_win, estr, &idcmp, N);
     FreeVec(estr);
    }
  }

 return(retval);
}

/* *************************************************** */
/* *						     * */
/* * SVLI_CheckFileType : ...           	     * */
/* *						     * */
/* *************************************************** */

ULONG __saveds __asm SVO_CheckFileType(register __a1 BPTR handle_a1, register __a2 UBYTE *filename, register __a3 APTR future)
{
 BPTR handle = handle_a1;
 UWORD id;

 if(!handle) return(FALSE);

 Seek(handle, N, OFFSET_BEGINNING);
 Read(handle, &id, 2);

 if(id == RLE_ID) return(TRUE);

 return(FALSE);
}

extern void Fmt(void); /* Assembler-Routine for RawDoFmt */

void __saveds __stdargs SVLI_SPrintf(APTR buffer, char *formatstring, ...)
{
 RawDoFmt((APTR) formatstring, (APTR) (((ULONG *)&formatstring)+1), (APTR) &Fmt, (APTR) buffer);
}
