/*
**      $VER: SP_SampleSubs.c 3.4 (22.1.97)
**
**      SPObject sample handling API
**
**      (C) Copyright 1994-97 Andreas R. Kleinert
**      All Rights Reserved.
*/

#include "spobject.h"


 /* PUBLIC functions (high level) */

ULONG __saveds __asm SPO_GetSampleList( register __a1 struct SPObjectHandle *SPObjectHandle_a1,
                                        register __a2 struct SPO_SampleList **samplelist);
ULONG __saveds __asm SPO_SetSampleList( register __a1 struct SPObjectHandle *SPObjectHandle_a1,
                                        register __a2 struct SPO_SampleList *samplelist);


/* *************************************************** */
/* *                                                 * */
/* * SPO_GetSampleList : extract samples ...         * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_GetSampleList( register __a1 struct SPObjectHandle *SPObjectHandle_a1,
                                        register __a2 struct SPO_SampleList **samplelist)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval =  SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 *samplelist = N;

 if(SPObjectHandle->ah_STModule)
  {
   *samplelist = (SPObjectHandle->ah_SampleList = SPLI_GetSampleList());
   if(SPObjectHandle->ah_SampleList)
    {
     UBYTE           *start;
     struct STHeader *STHeader;

     ULONG  len   = N;
     ULONG  add   = N;
     ULONG  j     = N;

     start    = ((UBYTE *) SPObjectHandle->ah_STModule) + sizeof(struct STHeader);
     STHeader = (APTR) SPObjectHandle->ah_STModule;

     for(j=0; j<31; j++)
      {
       len = (STHeader->st_Instruments[j].st_InstrumentLength) << 1;

       if(len)
        {
         SPLI_AddSample(SPObjectHandle->ah_SampleList,
                        start + add,
                        len,
                        8,
                        8363,
                        STHeader->st_Instruments[j].st_Volume);

         add += len;
        }
      }
    }else retval = SPERR_NO_MEMORY;
  }else retval = SPERR_NO_SAMPLES_LOADED;

 return(retval);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_SetSampleList : set samples for writing     * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetSampleList( register __a1 struct SPObjectHandle *SPObjectHandle_a1,
                                        register __a2 struct SPO_SampleList *samplelist)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval =  SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 /*

 if(samplelist) SPObjectHanndle->ah_SampleList = samplelist;

 return(retval);

 */

 return(SPERR_ACTION_NOT_SUPPORTED); /* also writing */
}
