#ifndef __ASDataStream__
#define __ASDataStream__

/*
 *        Name:	ASDataStream.h
 *   $Revision: 6 $
 *      Author:	 
 *        Date:	   
 *     Purpose:	Adobe AS 2.0 Data Filter Suite.
 *
 * Copyright (c) 1986-1998,2002 Adobe Systems Incorporated, All Rights Reserved.
 *
 */


/*******************************************************************************
 **
 **	Imports
 **
 **/

#ifndef __ASTypes__
#include "ASTypes.h"
#endif

#ifndef __ASNameSpace__
#include "ASNameSpace.h"
#endif

#ifndef __SPFiles__
#include "SPFiles.h"
#endif

#ifndef __SPPlugins__
#include "SPPlugs.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifndef UNIX_ENV
#pragma PRAGMA_ALIGN_BEGIN
#pragma PRAGMA_IMPORT_BEGIN
#elif defined(HPUX) && defined(__HP_aCC)
HPUX_Pragma (PRAGMA_ALIGN_BEGIN)
#else
_Pragma (PRAGMA_ALIGN_BEGIN)
#endif


/*******************************************************************************
 **
 **	Constants
 **
 **/

#define kASDataStreamSuite		"AS Data Filter Suite"
#define kASDataStreamSuiteVersion	2


#define kASDataStreamErr			'DFER'


/*******************************************************************************
 **
 **	Types
 **
 **/
 
#ifndef ASDataStreamRef
typedef struct t_ASDataStream *ASDataStreamRef;
#endif

/*******************************************************************************
 **
 **	Suite
 **
 **/

typedef struct {

	ASAPI ASErr (*LinkDataStream) ( ASDataStreamRef prev, ASDataStreamRef next );
	ASAPI ASErr (*UnlinkDataStream) ( ASDataStreamRef next, ASDataStreamRef *prev );
	ASAPI ASErr (*ReadDataStream) ( ASDataStreamRef filter, char *store, long *count );
	ASAPI ASErr (*WriteDataStream) ( ASDataStreamRef filter, char *store, long *count );
	ASAPI ASErr (*SeekDataStream) ( ASDataStreamRef filter, long *count );
	ASAPI ASErr (*MarkDataStream) ( ASDataStreamRef filter, long *count );
	ASAPI ASErr (*NewFileDataStream) ( SPPlatformFileSpecification *spec, char *mode, long creator, long type, ASDataStreamRef *filter );
	ASAPI ASErr (*NewBufferDataStream) ( long size, ASDataStreamRef *filter );
	ASAPI ASErr (*NewHexdecDataStream) ( char *state, long shift, ASDataStreamRef *filter );
	ASAPI ASErr (*NewBlockDataStream) ( void *address, long size, ASDataStreamRef *filter );
	ASAPI ASErr (*NewResourceDataStream) ( SPPluginRef plugin, long type, long id, char *name, ASDataStreamRef *filter);

} ASDataStreamSuite;


#ifndef UNIX_ENV
#pragma PRAGMA_IMPORT_END
#pragma PRAGMA_ALIGN_END
#elif defined(HPUX) && defined(__HP_aCC)
HPUX_Pragma (PRAGMA_ALIGN_END)
#else
_Pragma (PRAGMA_ALIGN_END)
#endif

#ifdef __cplusplus
}
#endif


#endif