[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

        IFND    IFF_IFFPARSE_I
IFF_IFFPARSE_I  SET     1
**
**      $Filename: libraries/iffparse.i $
**      $Release: 2.04 Includes, V37.4 $
**      $Revision: 33.1 $
**      $Date: 90/11/20 $
**
**      Assembly include file for iffparse.library.
**      Generated by hand from iffparse.h (9006.04)
**
**      (C) Copyright 1989-1999 Amiga, Inc., Stuart Ferguson
**      and Leo L. Schwab
**              All Rights Reserved
**

                IFND    EXEC_TYPES_I
                include "exec/types.i"
                ENDC

                IFND    EXEC_LISTS_I
                include "exec/lists.i"
                ENDC

                IFND    EXEC_PORTS_I
                include "exec/ports.i"
                ENDC

                IFND    DEVICES_CLIPBOARD_I
                include "devices/clipboard.i"
                ENDC

*\
* Struct associated with an active IFF stream.
* "iff_Stream" is a value used by the client's read/write/seek functions -
* it will not be accessed by the library itself and can have any value
* (could even be a pointer or a BPTR).
*/
        STRUCTURE IFFHandle,0
                ULONG   iff_Stream
                ULONG   iff_Flags
                LONG    iff_Depth       ; Depth of context stack.
* There are private fields hiding here.
        LABEL   iff_SIZEOF

*\
* Bit masks for "iff_Flags" field.
*/
IFFF_READ       EQU     0                       ; read mode - default
IFFF_WRITE      EQU     1                       ; write mode
IFFF_RWBITS     EQU     IFFF_READ!IFFF_WRITE    ; read/write bits
IFFF_FSEEK      EQU     1<<1                  ; forward seek only
IFFF_RSEEK      EQU     1<<2                  ; random seek
IFFF_RESERVED   EQU     $FFFF0000               ; Don't touch these bits.

*\
* When the library calls your stream handler, you'll be passed a pointer
* to this structure as the "message packet".
* NOTE:  ASSEMBLY PREFIX (isc_) DIFFERENT FROM C PREFIX (sc_).
*/
        STRUCTURE IFFStreamCmd,0
                LONG    isc_Command     ; Operation to be performed (IFFCMD_)
                APTR    isc_Buf         ; Pointer to data buffer
                LONG    isc_NBytes      ; Number of bytes to be affected
        LABEL   isc_SIZEOF

*\
* A node associated with a context on the iff_Stack.  Each node
* represents a chunk, the stack representing the current nesting
* of chunks in the open IFF file.  Each context node has associated
* local context items in the (private) LocalItems list.  The ID, type,
* size and scan values describe the chunk associated with this node.
*/
        STRUCTURE ContextNode,MLN_SIZE  ; cn_Node
                LONG    cn_ID
                LONG    cn_Type
                LONG    cn_Size         ; Size of this chunk
                LONG    cn_Scan         ; # of bytes read/written so far
* There are private fields hiding here.
        LABEL   cn_SIZEOF

*\
* Local context items live in the ContextNode's.  Each class is identified
* by its lci_Ident code and has a (private) purge vector for when the
* parent context node is popped.
*/
        STRUCTURE LocalContextItem,MLN_SIZE     ; lci_Node
                ULONG   lci_ID
                ULONG   lci_Type
                ULONG   lci_Ident
* There are private fields hiding here.
        LABEL   lci_SIZEOF

*\
* StoredProperty: a local context item containing the data stored
* from a previously encountered property chunk.
* NOTE:  ASSEMBLY PREFIX (spr_) DIFFERENT FROM C PREFIX (sp_).
*/
        STRUCTURE StoredProperty,0
                LONG    spr_Size
                APTR    spr_Data
        LABEL   spr_SIZEOF

*\
* Collection Item: the actual node in the collection list at which
* client will look.  The next pointers cross context boundaries so
* that the complete list is accessable.
* NOTE:  ASSEMBLY PREFIX (cit_) DIFFERENT FROM C PREFIX (ci_).
*/
        STRUCTURE CollectionItem,0
                APTR    cit_Next
                LONG    cit_Size
                APTR    cit_Data
        LABEL   cit_SIZEOF

*\
* Structure returned by OpenClipboard().  You may do CMD_POSTs and such
* using this structure.  However, once you call OpenIFF(), you may not
* do any more of your own I/O to the clipboard until you call CloseIFF().
*/
        STRUCTURE ClipboardHandle,iocr_SIZEOF   ; cbh_Reg
                STRUCT  cbh_CBport,MP_SIZE
                STRUCT  cbh_SatisfyPort,MP_SIZE
        LABEL   cbh_SIZEOF

*\
* IFF return codes.  Most functions return either zero for success or
* one of these codes.  The exceptions are the read/write functions which
* return positive values for number of bytes or records read or written,
* or a negative error code.  Some of these codes are not errors per sae,
* but valid conditions such as EOF or EOC (End of Chunk).
*/
IFFERR_EOF              EQU     -1      ; Reached logical end of file
IFFERR_EOC              EQU     -2      ; About to leave context
IFFERR_NOSCOPE          EQU     -3      ; No valid scope for property
IFFERR_NOMEM            EQU     -4      ; Internal memory alloc failed
IFFERR_READ             EQU     -5      ; Stream read error
IFFERR_WRITE            EQU     -6      ; Stream write error
IFFERR_SEEK             EQU     -7      ; Stream seek error
IFFERR_MANGLED          EQU     -8      ; Data in file is corrupt
IFFERR_SYNTAX           EQU     -9      ; IFF syntax error
IFFERR_NOTIFF           EQU     -10     ; Not an IFF file
IFFERR_NOHOOK           EQU     -11     ; No call-back hook provided
IFF_RETURN2CLIENT       EQU     -12     ; Client handler normal return

*\
* Universal IFF identifiers.
*/
ID_FORM                 EQU     'FORM'
ID_LIST                 EQU     'LIST'
ID_CAT                  EQU     'CAT '
ID_PROP                 EQU     'PROP'
ID_NULL                 EQU     '    '

*\
* Ident codes for universally recognized local context items.
*/
IFFLCI_PROP             EQU     'prop'
IFFLCI_COLLECTION       EQU     'coll'
IFFLCI_ENTRYHANDLER     EQU     'enhd'
IFFLCI_EXITHANDLER      EQU     'exhd'

*\
* Control modes for ParseIFF() function.
*/
IFFPARSE_SCAN           EQU     0
IFFPARSE_STEP           EQU     1
IFFPARSE_RAWSTEP        EQU     2

*\
* Control modes for StoreLocalItem().
*/
IFFSLI_ROOT             EQU     1       ; Store in default context
IFFSLI_TOP              EQU     2       ; Store in current context
IFFSLI_PROP             EQU     3       ; Store in topmost FORM or LIST

*\
* "Flag" for writing functions.  If you pass this value in as a size
* to PushChunk() when writing a file, the parser will figure out the
* size of the chunk for you.  (Chunk sizes >= 2**31 are forbidden by the
* IFF specification, so this works.)
*/
IFFSIZE_UNKNOWN         EQU     -1

*\
* Possible call-back command values.  (Gee, it would be nice if there was an
* ENUM macro.)
*/
IFFCMD_INIT             EQU     0       ; Prepare your stream for a session
IFFCMD_CLEANUP          EQU     1       ; Terminate stream session
IFFCMD_READ             EQU     2       ; Read bytes from stream
IFFCMD_WRITE            EQU     3       ; Write bytes to stream
IFFCMD_SEEK             EQU     4       ; Seek on stream
IFFCMD_ENTRY            EQU     5       ; You just entered a new context
IFFCMD_EXIT             EQU     6       ; You're about to leave a context
IFFCMD_PURGELCI         EQU     7       ; Purge a LocalContextItem

* Backward compatibility.  Don't use these in new code.
IFFSCC_INIT             EQU     IFFCMD_INIT
IFFSCC_CLEANUP          EQU     IFFCMD_CLEANUP
IFFSCC_READ             EQU     IFFCMD_READ
IFFSCC_WRITE            EQU     IFFCMD_WRITE
IFFSCC_SEEK             EQU     IFFCMD_SEEK

                ENDC    ; IFF_IFFPARSE_I