/*© copyright 1996 UserLand Software, Inc. All Rights Reserved.*/


#ifndef odbEngineInclude
#define odbEngineInclude

#ifdef __cplusplus
extern "C" {
#endif


typedef struct odb_ * odbref;

typedef struct obj_ * objref;


#ifndef ctdirections
	
	typedef unsigned short boolean;

	typedef unsigned char bigstring [255];

	typedef enum tydirection {
		
		nodirection = 0, 
		
		up = 1, 
		
		down = 2, 
		
		left = 3,
		
		right = 4, 
		
		flatup = 5, 
		
		flatdown = 6, 
		
		sorted = 8,
		
		pageup = 9,
		
		pagedown = 10,
		
		pageleft = 11,
		
		pageright = 12
		} tydirection;
	
	#define ctdirections 12 /*for arrays indexed on directions*/

#endif

typedef enum odbValueType  {
	
	unknownvaluetype = '????',
	
	charvaluetype = 'char',
	
	shortvaluetype = 'shor',
	
	longvaluetype = 'long',
	
	binaryvaluetype = 'data',
	
	booleanvaluetype = 'bool',
	
	tokenvaluetype = 'tokn',
	
	datevaluetype = 'date',
	
	addressvaluetype = 'addr',
	
	codevaluetype = 'code',
	
	extendedvaluetype = 'exte',
	
	stringvaluetype = 'TEXT',
	
	externalvaluetype = 'xtrn',
	
	directionvaluetype = 'dir ',
	
	string4valuetype = 'type',
	
	pointvaluetype = 'QDpt',
	
	rectvaluetype = 'qdrt',
	
	patternvaluetype = 'tptn',
	
	rgbvaluetype = 'cRGB',
	
	fixedvaluetype = 'fixd',
	
	singlevaluetype = 'sing',
	
	doublevaluetype = 'doub',
	
	objspecvaluetype = 'obj ',
	
	filespecvaluetype = 'fss ',
	
	aliasvaluetype = 'alis',
	
	enumeratorvaluetype = 'enum',
	
	listvaluetype = 'list',
	
	recordvaluetype = 'reco',
	
	outlinevaluetype = 'optx',
	
	wptextvaluetype = 'wptx',
	
	tablevaluetype = 'tabl',
	
	scriptvaluetype = 'scpt',
	
	menubarvaluetype = 'mbar',
	
	picturevaluetype = 'pict'
	
	} odbValueType;


typedef union odbValueData {
	
	boolean flvalue;
	
	unsigned char chvalue;
	
	short intvalue;
	
	long longvalue;
	
	unsigned long datevalue;
	
	tydirection dirvalue;
	
	OSType ostypevalue;
	
	Handle stringvalue;
	
	Handle addressvalue;
	
	Handle binaryvalue;
	
	Handle externalvalue;
	
	Point pointvalue;
	
	Rect **rectvalue;
	
	Pattern **patternvalue;
	
	RGBColor **rgbvalue;
	
	Fixed fixedvalue;
	
	float singlevalue;
	
	double **doublevalue;
	
	Handle objspecvalue;
	
	FSSpec **filespecvalue;
	
	Handle aliasvalue; /*AliasHandle*/
	
	OSType enumvalue;
	
	Handle listvalue;
	
	Handle recordvalue;
	} odbValueData;


typedef struct odbValueRecord {
	
	odbValueType valuetype;
	
	odbValueData data;
	} odbValueRecord;

/*prototypes*/

extern boolean odbOpenFile (short, odbref *odb);

extern boolean odbSaveFile (odbref odb);

extern boolean odbCloseFile (odbref odb);

extern boolean odbCreate (odbref odb, bigstring bspath, objref *obj);

extern boolean odbLookup (odbref odb, bigstring bspath, objref *obj);

extern boolean odbDelete (odbref odb, bigstring bspath);

extern boolean odbGetType (odbref odb, objref obj, OSType *type);

extern boolean odbGetValue (odbref odb, objref obj, odbValueRecord *value);

extern boolean odbSetValue (odbref odb, objref obj, odbValueRecord *value);

extern boolean odbCountItems (odbref odb, objref obj, long *count);

extern boolean odbGetNthItem (odbref odb, objref obj, long n, bigstring bsname);

extern boolean odbGetModDate (odbref odb, objref obj, unsigned long *date);

extern void odbDisposeValue (odbref odb, odbValueRecord *value);


#ifdef __cplusplus
}
#endif

#endif