/*
**      $VER: SP_ChangeSubs.c 3.3 (4.1.97)
**
**      SPObject settings API
**
**      (C) Copyright 1994-97 Andreas R. Kleinert
**      All Rights Reserved.
*/

#include "spobject.h"

ULONG __saveds __asm SPO_SetAccessMode(  register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __d1 ULONG mode);
ULONG __saveds __asm SPO_SetWriteSubType( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 ULONG akt_type, register __a3 APTR future);
ULONG __saveds __asm SPO_SetReadName( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 char *readname, register __a3 APTR future);
ULONG __saveds __asm SPO_SetWriteName( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 char *writename, register __a3 APTR future);
ULONG __saveds __asm SPO_SetReqIOWindow(  register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *ReqIOWindow);
ULONG __saveds __asm SPO_GetSampleBuffer( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 UBYTE **buffer, register __a3 ULONG *buffersize);
ULONG __saveds __asm SPO_GetSampleInfo( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 ULONG *samplesPerSec, register __a3 ULONG *volume, register __d1 APTR future);


/* *************************************************** */
/* *                                                 * */
/* * SPO_SetAccessMode : ...                         * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetAccessMode(  register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __d1 ULONG mode)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval = SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 if(mode != SPO_MEDIUM_DISK) retval = SPERR_ACTION_NOT_SUPPORTED;
  else                       SPObjectHandle->ah_Medium = mode;

 return(retval);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_SetWriteType :                              * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetWriteSubType( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 ULONG akt_type, register __a3 APTR future)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 SPObjectHandle->ah_WriteMode = akt_type;

 return(SPERR_NO_ERROR);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_SetReadName :                               * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetReadName( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 char *readname, register __a3 APTR future)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 SPObjectHandle->ah_ReadName = readname;

 return(SPERR_NO_ERROR);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_SetWriteName :                              * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetWriteName( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 char *writename, register __a3 APTR future)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 SPObjectHandle->ah_WriteName = writename;

 return(SPERR_NO_ERROR);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_SetReqIOWindow : ...                        * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_SetReqIOWindow(  register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *ReqIOWindow)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval = SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);
 if(!ReqIOWindow)    return(SPERR_ILLEGAL_ACCESS);

 SPObjectHandle->ah_ReqIOWindow = ReqIOWindow;

 return(retval);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_GetSampleBuffer : ...                       * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_GetSampleBuffer( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 UBYTE **buffer, register __a3 ULONG *buffersize)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval = SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 if(SPObjectHandle->ah_SPOHeader && SPObjectHandle->ah_XpkBuffer)
  {
   *buffer     = SPObjectHandle->ah_XpkBuffer;
   *buffersize = SPObjectHandle->ah_SPOHeader->spo_SampleLength;

  }else retval = SPERR_ILLEGAL_ACCESS;

 return(retval);
}

/* *************************************************** */
/* *                                                 * */
/* * SPO_GetSampleBuffer : ...                       * */
/* *                                                 * */
/* *************************************************** */

ULONG __saveds __asm SPO_GetSampleInfo( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 ULONG *samplesPerSec, register __a3 ULONG *volume, register __d1 APTR future)
{
 struct SPObjectHandle *SPObjectHandle = SPObjectHandle_a1;
 ULONG retval = SPERR_NO_ERROR;

 if(!SPObjectHandle) return(SPERR_NO_HANDLE);

 if(SPObjectHandle->ah_SPOHeader)
  {
   *samplesPerSec = SPObjectHandle->ah_SPOHeader->spo_Frequency;
   *volume        = SPObjectHandle->ah_SPOHeader->spo_Volume;

  }else retval = SPERR_ILLEGAL_ACCESS;

 return(retval);
}

