/* svobjects/svobjects.h            */
/* Version    : 4.1                 */
/* Date       : 15.05.1994          */
/* Written by : Andreas R. Kleinert */

/* SVObject-Version V2.x+ */

#ifndef SVOBJECTS_SVOBJECTS_H
#define SVOBJECTS_SVOBJECTS_H


struct SVO_ObjectNode
{
 struct Node svo_Node;              /* chaining Node                         */
                                    /* (svo_Node->ln_Name is NULL            */
                                    /*  by default !)                        */

 ULONG svo_Version;                 /* Library-Version of svobject           */

 ULONG svo_ObjectType;              /* see below (SVO_OBJECTTYPE_...)        */

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

 UBYTE svo_TypeID      [32];        /* e.g. "GIF"                            */
 ULONG svo_TypeCode;                /* ... and its appropriate Code,  ,      */
                                    /* assigned by superview.library LATER.  */

 ULONG svo_SubTypeNum;              /* actually available SubTypes           */
                                    /* (maximum 16) of the svobject.         */

                                    /* 0xFFFFFFFF means, that it is an       */
                                    /* INDEPENDENT entry, which is an        */
                                    /* unimplemented feature yet and         */
                                    /* means that the SubTypeID and          */
                                    /* SubTypeCode fields should be skipped. */

 UBYTE svo_SubTypeID   [16][16];    /* e.g. "87a" or "89a"                   */
 ULONG svo_SubTypeCode [16];        /* ... and their appropriate Codes,      */
                                    /* assigned by superview.library LATER.  */

 /* version 2 extensions : */

 ULONG svo_Flags;                   /* SVO_FLAG_... (see below)              */

 /* size may grow with bigger svo_Version, see below */
};

#define SVO_VERSION (2)             /* If this Version, which depends on the */
                                    /* svobject's Library-Version, is set,   */
                                    /* it is guaranteed, that at least the   */
                                    /* above information is available.       */

#define SVO_FILENAME "INTERNAL"     /* for internal svobjects only.          */


#define SVO_OBJECTTYPE_NONE    ((ULONG) 0)
#define SVO_OBJECTTYPE_UNKNOWN SVO_OBJECTTYPE_NONE
#define SVO_OBJECTTYPE_ILLEGAL ((ULONG) 0xFFFFFFFF)

#define SVO_OBJECTTYPE_INTERNAL    ((ULONG) 1) /* internal                   */
#define SVO_OBJECTTYPE_INDEPENDENT ((ULONG) 2) /* UNIMPLEMENTED              */
                                               /* Handle them like EXTERNAL, */
                                               /* but ignore some entries.   */
#define SVO_OBJECTTYPE_EXTERNAL    ((ULONG) 3) /* external svobject          */


  /* The following flags have been introduced with the V2 SVObjects
     (depending on svo_Version : do not check them with V1 SVObjects).
     They should help any applications deciding, whether a specific
     SVObject may fulfil an action or not.
     Note : Some SVObjects may not have the correct flags set and might
            return SVERR_ACTION_NOT_SUPPORTED nevertheless
  */


#define SVO_FLAG_READS_TO_BUFFER    (1<<0) /* allows reading to SV_GfxBuffer */
#define SVO_FLAG_READS_TO_SCREEN    (1<<1) /* allows displaying on Screen    */

#define SVO_FLAG_WRITES_FROM_BUFFER (1<<2) /* writes SV_GfxBuffer to file    */
#define SVO_FLAG_WRITES_FROM_SCREEN (1<<3) /* writes Screen to file          */

#define SVO_FLAG_SUPPORTS_SVDRIVER  (1<<4) /* uses default SVDriver,         */
                                           /* if available                   */
#define SVO_FLAG_NEEDS_SVDRIVER     (1<<5) /* needs valid default SVDriver   */
                                           /* for working. Developers :      */
                                           /* Set SVO_FLAG_SVDRIVER instead  */

#define SVO_FLAG_SVDRIVER (SVO_FLAG_SUPPORTS_SVDRIVER | SVO_FLAG_NEEDS_SVDRIVER)


 /* This structure has to be passed to SVObject's SVO_CheckFileType()
    function, if media other than AKO_MEDIUM_DISK are used for reading.
    This is supported since superview.library V4 and may be ignored by
    SVObjects for compatibility reasons. To prevent older SVO_CheckFileType()
    functions from crashing, superview.library will create a dummy-file and
    pass it's handle also ...
    ("You wanna something to check ? - Here you get it !")

     In the V3-SVObject specification this structure will HAVE TO be
     examined, then. In the current V2-specification this is not the case.
  */
    
struct SVOCheckFile
{
 ULONG svc_Medium;   /* AKO_MEDIUM_... */

 ULONG svc_Future;   /* as usual       */ 
};

#endif /* SVOBJECTS_SVOBJECTS_H */
