home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma58.dms / ma58.adf / superplay-lib_DEV / Programmers / Example_SPObjects / SPO / SP_InfoSubs.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  3KB  |  128 lines

  1.  
  2.  /* SP_InfoSubs.c
  3.     - Functions for SPO-Support -
  4.     (c) 1994 by Andreas R. Kleinert
  5.     Last changes : 27.03.1994
  6.  */
  7.  
  8. #include "spobject.h"
  9.  
  10.  
  11.  /* PUBLIC functions (high level) */
  12.  
  13. ULONG __saveds __asm SPO_FileInfoRequest( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future);
  14. ULONG __saveds __asm SPO_CheckFileType(register __a1 BPTR handle, register __a2 UBYTE *filename, register __a3 APTR future);
  15.  
  16.  
  17. /* *************************************************** */
  18. /* *                                                 * */
  19. /* * SPO_FileInfoRequest : Display File Information  * */
  20. /* *                                                 * */
  21. /* *************************************************** */
  22.  
  23. ULONG __saveds __asm SPO_FileInfoRequest( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future)
  24. {
  25.  struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
  26.  
  27.  ULONG retval = SPERR_NO_ERROR;
  28.  char buffer [1024], hbuf[80];
  29.  ULONG idcmp = N, noinfo = TRUE;
  30.  struct EasyStruct *estr;
  31.  struct Window     *disp_win = window;
  32.  
  33.  if(!SPObjectHandle) return(SPERR_NO_HANDLE);
  34.  
  35.  buffer[0] = (char) 0;
  36.  
  37.  if(SPObjectHandle->ah_SPOHeader)
  38.   {
  39.    noinfo = FALSE;
  40.  
  41.    strcat(buffer,   "\n File Information"
  42.                   "\n\n File Type : SPO Sample");
  43.  
  44.    strcat(buffer, "\n");
  45.  
  46.    sprintf(hbuf, "\n Length      : %ld Bytes", (ULONG) SPObjectHandle->ah_SPOHeader->spo_SampleLength);
  47.    strcat(buffer, hbuf);
  48.  
  49.    sprintf(hbuf, "\n Frequency   : %ld Hz",    (ULONG) SPObjectHandle->ah_SPOHeader->spo_Frequency);
  50.    strcat(buffer, hbuf);
  51.  
  52.    strcat(buffer, "\n");
  53.  
  54.   }else retval = SPERR_NO_HANDLE;
  55.  
  56.  if(!retval)
  57.   {
  58.    if(noinfo)
  59.     {
  60.      strcat(buffer,   "\n File Information"
  61.                     "\n\n No information available\n");
  62.     }
  63.  
  64.    estr = AllocVec(sizeof(struct EasyStruct), MEMF_CLEAR);
  65.    if(estr)
  66.     {
  67.      estr->es_StructSize   = sizeof(struct EasyStruct);
  68.      estr->es_Flags        = N;
  69.      estr->es_Title        = "SuperPlay InfoRequester";
  70.      estr->es_TextFormat   = buffer;
  71.      estr->es_GadgetFormat = "Confirm";
  72.  
  73.      if(!disp_win) disp_win = SPObjectHandle->ah_ReqIOWindow;
  74.  
  75.      EasyRequestArgs(disp_win, estr, &idcmp, N);
  76.      FreeVec(estr);
  77.     }
  78.   }
  79.  
  80.  return(retval);
  81. }
  82.  
  83. /* *************************************************** */
  84. /* *                             * */
  85. /* * SPLI_CheckFileType : ...                    * */
  86. /* *                             * */
  87. /* *************************************************** */
  88.  
  89. ULONG __saveds __asm SPO_CheckFileType(register __a1 BPTR handle_a1, register __a2 UBYTE *filename, register __a3 APTR future)
  90. {
  91.  BPTR handle = handle_a1;
  92.  BPTR handle2;
  93.  ULONG retval = FALSE;
  94.  UBYTE SPO_id[256];
  95.  char spo_name [256];
  96.  
  97.  Seek(handle, N, OFFSET_BEGINNING);
  98.  Read(handle, &SPO_id[0], 256);
  99.  Seek(handle, N, OFFSET_BEGINNING);
  100.  
  101.  if(!strncmp(SPO_id, SPO_ID, strlen(SPO_ID))) retval = TRUE;
  102.  
  103.  if(!retval && filename)
  104.   {
  105.    strcpy(spo_name, filename);
  106.    strcat(spo_name, ".spo");
  107.  
  108.    handle2 = Open(spo_name, MODE_OLDFILE);
  109.    if(handle2)
  110.     {
  111.      Read(handle2, &SPO_id[0], 256);
  112.  
  113.      if(!strncmp(SPO_id, SPO_ID, strlen(SPO_ID))) retval = TRUE;
  114.  
  115.      Close(handle2);
  116.     }
  117.   }
  118.  
  119.  return(retval);
  120. }
  121.  
  122. extern void Fmt(void); /* Assembler-Routine for RawDoFmt */
  123.  
  124. void __saveds __stdargs SPLI_SPrintf(APTR buffer, char *formatstring, ...)
  125. {
  126.  RawDoFmt((APTR) formatstring, (APTR) (((ULONG *)&formatstring)+1), (APTR) &Fmt, (APTR) buffer);
  127. }
  128.