
 /* spobject.h
    - Include File for ST.spobject -
    (c) 1993-94 by Andreas R. Kleinert
    Last changes : 17.05.1994
 */

#ifndef SPOBJECT_H
#define SPOBJECT_H

#ifndef SUPERPLAY_SUPERPLAYBASE_H
#include <superplay/superplaybase.h>
#endif  /* SUPERPLAY_SUPERPLAYBASE_H */

#ifndef SPOBJECTS_SPOBJECTBASE_H
#include <spobjects/spobjectbase.h>
#endif  /* SPOBJECTS_SPOBJECTBASE_H

#ifndef INTUITION_INTUITIONBASE_H
#include <intuition/intuitionbase.h>
#endif /* INTUITION_INTUITIONBASE_H */

#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif /* EXEC_MEMORY_H */

#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif /* EXEC_LISTS_H */

#ifndef EXEC_INTERRUPTS_H
#include <exec/interrupts.h>
#endif /* EXEC_INTERRUPTS_H */

#ifndef LIBRARIES_IFFPARSE_H
#include <libraries/iffparse.h>     /* for MAKE_ID macro : I'm lazy ... */
#endif /* LIBRARIES_IFFPARSE_H */

#include <libraries/xpk.h>
#include <libraries/ppbase.h>

#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/utility.h>

#include <proto/powerpacker.h>

#include "SP_MemSubs.h"
#include "st.h"


/* macros */

#define ID_PP20 MAKE_ID('P','P','2','0')
#define ID_XPKF MAKE_ID('X','P','K','F')


/* *************************************************** */
/* *						     * */
/* * SP_SuperVisor.c : Functions	             * */
/* *						     * */
/* *************************************************** */

extern struct SPObjectHandle * __saveds __asm SPO_AllocHandle( register __a1 APTR future_a1);
extern void __saveds __asm SPO_FreeHandle( register __a1 struct SPObjectHandle *SPObjectHandle_a1);
extern void __saveds __asm SPO_StopReplay( register __a1 struct SPObjectHandle *SPObjectHandle_a1);
extern void __saveds __asm SPO_FreeResources( register __a1 struct SPObjectHandle *SPObjectHandle_a1);


/* *************************************************** */
/* *						     * */
/* * SP_WriteSubs.c : ...                            * */
/* *						     * */
/* *************************************************** */

extern ULONG __saveds __asm SPO_Write( register __a1 struct SPObjectHandle *SPObjectHandle_a1,
                                       register __a2 struct SPObjectBase   *SPO_SourceBase,
                                       register __a3 struct SPObjectHandle *source_handle);


/* *************************************************** */
/* *						     * */
/* * SP_InfoSubs.c : ...                             * */
/* *						     * */
/* *************************************************** */

 /* PUBLIC functions (high level) */

extern ULONG __saveds __asm SPO_FileInfoRequest( register __a1 struct SPObjectHandle *SPObjectHandle_a1, register __a2 struct Window *window, register __a3 ULONG future);
extern ULONG __saveds __asm SPO_CheckFileType(register __a1 BPTR handle, register __a2 UBYTE *filename, register __a3 APTR future);


/* *************************************************** */
/* *						     * */
/* * SP_ChangeSubs.c : ...                           * */
/* *						     * */
/* *************************************************** */

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


/* *************************************************** */
/* *						     * */
/* * SP_PlaySubs.c : ...                             * */
/* *						     * */
/* *************************************************** */

 /* Global Variables for SP_Player.a */

extern APTR  ST_Module;
extern ULONG ST_Len;
extern ULONG ST_RunState;

extern ULONG __saveds __asm SPO_Read( register __a1 struct SPObjectHandle *SPObjectHandle);
extern ULONG __saveds __asm SPO_StartReplay( register __a1 struct SPObjectHandle *SPObjectHandle);
extern ULONG __saveds __asm SPO_ContinueReplay( register __a1 struct SPObjectHandle *SPObjectHandle_a1);
extern ULONG __saveds __asm SPO_FastForward( register __a1 struct SPObjectHandle *SPObjectHandle_a1);
extern ULONG __saveds __asm SPO_FastBackward( register __a1 struct SPObjectHandle *SPObjectHandle_a1);


/* *************************************************** */
/* *						     * */
/* * SP_Player.a : ...                               * */
/* *						     * */
/* *************************************************** */

extern void __asm __saveds ST_UnLoadModule(void);
extern void __asm __saveds ST_Start(void);
extern void __asm __saveds ST_Stop(void);
extern long __asm __saveds ST_IsPlaying(void);


/* *************************************************** */
/* *						     * */
/* * Additional Base Declarations		     * */
/* *						     * */
/* *************************************************** */

extern struct SPObjectBase  *SPObjectBase;

extern struct ExecBase	    *SysBase;
extern struct DosLibrary    *DOSBase;
extern struct IntuitionBase *IntuitionBase;
extern struct Library       *UtilityBase;
extern struct XpkBase       *XpkBase;


 /* structures for File-Handling */

struct SPObjectHandle                   /* STRICTLY PRIVATE */
{
 BPTR                ah_filehandle_source;
 BPTR                ah_filehandle_dest;

 char               *ah_ReadName;
 char               *ah_WriteName;

 struct Window      *ah_ReqIOWindow;

 ULONG               ah_FileType;           /* SP_FILETYPE_ ... */
 ULONG               ah_Type;               /* SP_SUBTYPE_  ... */
 ULONG               ah_WriteMode;          /* SP_SUBTYPE_  ... */
 ULONG               ah_Medium;             /* SPO_MEDIUM_  ... */

 struct AIM_MemList *ah_ramhandle;

 APTR                ah_STModule;
 ULONG               ah_STLen;
 ULONG               ah_STRunState;
};

struct STSPObjectBase
{
 struct SPObjectBase spb_SPObjectBase;

 APTR                spb_SegList;       /* private part of Base Data */
 APTR                spb_SysBase;
 APTR                spb_DOSBase;
 APTR                spb_IntuitionBase;
 APTR                spb_XpkBase;
 APTR                spb_PPBase;

 ULONG               spb_ChannelsUsed;
};

#endif /* SPOBJECT_H */
