#ifndef AROS_STRUCTDESC_H
#define AROS_STRUCTDESC_H
/*
    (C) 1995-96 AROS - The Amiga Replacement OS
    $Id: structdesc.h,v 1.1 1997/01/09 18:21:17 digulla Exp $

    Desc: Read and write big endian structures from and to a file
    Lang: english
*/
#ifndef EXEC_TYPES_H
#   include <exec/types.h>
#endif
#ifndef DOS_DOS_H
#   include <dos/dos.h>
#endif
#ifndef UTILITY_HOOKS_H
#   include <utility/hooks.h>
#endif
#include <stddef.h>

#define SDT_END 	0 /* Read one  8bit byte */
#define SDT_UBYTE	1 /* Read one  8bit byte */
#define SDT_UWORD	2 /* Read one 16bit word */
#define SDT_ULONG	3 /* Read one 32bit long */
#define SDT_FLOAT	4 /* Read one 32bit IEEE */
#define SDT_DOUBLE	5 /* Read one 64bit IEEE */
#define SDT_STRING	6 /* Read a string */
#define SDT_STRUCT	7 /* Read a structure */
#define SDT_PTR 	8 /* Follow a pointer */
#define SDT_IGNORE	9 /* Ignore x bytes */
#define SDT_FILL_BYTE  10 /* Fill x bytes */
#define SDT_FILL_LONG  11 /* Fill x longs */
#define SDT_IFILL_BYTE 12 /* Ignore and fill x bytes */
#define SDT_IFILL_LONG 13 /* Ignore and fill x longs */
#define SDT_SPECIAL    14 /* Call user routine */

struct SDData
{
    APTR sdd_Dest;
    WORD sdd_Mode;
};

#define SDV_SPECIALMODE_READ	0  /* Function was called to read from file */
#define SDV_SPECIALMODE_WRITE	1  /* Function was called to write to file */
#define SDV_SPECIALMODE_FREE	2  /* Function was called to free memory */

#define SDM_END 			SDT_END
#define SDM_UBYTE(offset)               SDT_UBYTE, offset
#define SDM_UWORD(offset)               SDT_UWORD, offset
#define SDM_ULONG(offset)               SDT_ULONG, offset
#define SDM_FLOAT(offset)               SDT_FLOAT, offset
#define SDM_DOUBLE(offset)              SDT_DOUBLE, offset
#define SDM_STRING(offset)              SDT_STRING, offset
#define SDM_STRUCT(offset,sd)           SDT_STRUCT, offset, ((IPTR)sd)
#define SDM_PTR(offset,sd)              SDT_PTR, offset, ((IPTR)sd)
#define SDM_IGNORE(n)                   SDT_IGNORE, n
#define SDM_FILL_BYTE(offset,v,n)       SDT_FILL_BYTE, offset, v, n
#define SDM_FILL_LONG(offset,v,n)       SDT_FILL_LONG, offset, v, n
#define SDM_IFILL_BYTE(offset,v,n)      SDT_FILL_BYTE, offset, v, n
#define SDM_IFILL_LONG(offset,v,n)      SDT_FILL_LONG, offset, v, n
#define SDM_SPECIAL(offset,sdhook)      SDT_SPECIAL, offset, ((IPTR)sdhook)

#define SDM_BYTE    SDM_UBYTE
#define SDM_WORD    SDM_UWORD
#define SDM_LONG    SDM_ULONG

#endif /* AROS_STRUCTDESC_H */

