/*
**      $VER: spobjects.h 5.1 (8.8.96)
**
**      main include file for SPObject programming
**
**      (C) Copyright 1994-96 Andreas R. Kleinert
**      All Rights Reserved.
*/

#ifndef SPOBJECTS_SPOBJECTS_H
#define SPOBJECTS_SPOBJECTS_H

#define SVO_LIB_MINIMUM 3 /* lowest supported version */
#define SVO_LIB_VERSION 3 /* just for information     */

struct SPO_ObjectNode
{
 struct Node spo_Node;		    /* chaining Node			     */

 ULONG spo_Version;		    /* Library-Version of spobject	     */

 ULONG spo_ObjectType;		    /* see below			     */

 UBYTE spo_FileName [108];	    /* use 30, as in struct FileInfoBlock    */

 UBYTE spo_TypeID      [32];	    /* e.g. "MED"                            */
 ULONG spo_TypeCode;		    /* ... and its appropriate Code,  ,      */
				    /* assigned by superplay.library LATER.  */

 ULONG spo_SubTypeNum;		    /* actually available SubTypes	     */
				    /* (maximum 16) of the spobject.         */

 UBYTE spo_SubTypeID   [16][16];    /* e.g. "MMD0" or "MMD1"                 */
 ULONG spo_SubTypeCode [16];	    /* ... and their appropriate Codes,      */
				    /* assigned by superplay.library LATER.  */

 ULONG spo_BackgroundReplay;	    /* Runs in the Background ? (Boolean)    */

 /* may grow dependent on spo_Version */
};

#define SPO_VERSION (3)


 /* ^ DO NOT USE THIS DEFINE IN SOURCECODE !  */
 /*   AVOID INCREASING IT VIA RECOMPILATION ! */

#define SPO_OBJECTTYPE_NONE    ((ULONG) 0)
#define SPO_OBJECTTYPE_UNKNOWN SPO_OBJECTTYPE_NONE
#define SPO_OBJECTTYPE_ILLEGAL ((ULONG) 0xFFFFFFFF)

#define SPO_OBJECTTYPE_SAMPLE	   ((ULONG) 1) /* Raw Sample                 */
#define SPO_OBJECTTYPE_MODULE	   ((ULONG) 2) /* Specific Sound Module      */

 /* There may be more types in the future : simply reject unknown types. */


 /* ----------------------------------------------------------------------- */

struct SPO_SampleList        /* Header of "SampleEntry"-List */
{
 struct List sl_EntryList;   /* List itself                  */

 ULONG       sl_NumEntries;  /* number of entries in List    */
};

struct SPO_SampleEntry       /* may e.g. contain SampleData  */
{
 struct Node             se_Node;          /* the chaining Node           */

 ULONG                   se_Version;       /* SPObject's Version (2)      */

 ULONG                   se_Type;          /* Sample ?                    */

 /* The following entries are only valid, if se_Type is == SE_TYPE_SAMPLE */

 UBYTE                  *se_SampleBuffer;  /* SampleData (CHIP-Ram)       */
 ULONG                   se_SampleSize;    /* size of SampleData in Bytes */

 ULONG                   se_SampleBits;    /* 8, 16                       */
 ULONG                   se_SamplesPerSec; /* as needed with audio.device */
 ULONG                   se_Volume;        /* as needed with audio.device */

 /* more entries may follow in the future */
};

#define SE_TYPE_NONE    ((ULONG) 0)
#define SE_TYPE_UNKNOWN SE_TYPE_NONE
#define SE_TYPE_ILLEGAL ((ULONG) 0xFFFFFFFF)

#define SE_TYPE_SAMPLE	((ULONG) 1) /* Entry contains Sample Data */

 /* There may be more types in the future : simply reject unknown types.
    Do not examine unknown SampleEntry-Types. They may contain data,
    which is structured different from the above in the future !
 */


 /* This structure has to be passed to SPObject's SPO_CheckFileType()
    function, if media other than SPO_MEDIUM_DISK are used for reading.
  */

struct SPOCheckFile
{
 ULONG spc_Medium;   /* SPO_MEDIUM_... */

 ULONG spc_Future;   /* as usual       */ 
};

#endif /* SPOBJECTS_SPOBJECTS_H */
