Listing 2: transact.h


/*************************
File:	TRANSACT.H
Created
By:		Russell Cook
*************************/

#ifndef _TRANSACT_H_
#define _TRANSACT_H_

#define FHANDLE	int

#define BADFHANDLE	((FHANDLE)-1)

FHANDLE FARFNCT VFOpen( char FAR *,	/* fully qualified data file name */\
						int,		/* open flags (O_RDONLY...) */\
						int			/* permissions */\
						);
BOOL FARFNCT VFClose( FHANDLE	/* from VFOpen() */ );

FHANDLE FARFNCT OpenTransact(	char FAR *,	/* fully qualified log name */\
								BOOL		/* operation flags */\
							);
BOOL FARFNCT CloseTransact(	FHANDLE	/* from TransactOpen() */ );
BOOL FARFNCT DeleteTransactionFile(	\
					char FAR *	/* name of transaction file */\
					);
BOOL FARFNCT RollBack(	char FAR *	/* fully qualified log name */\
					);

	/* transaction log file type specifiers */
#define NORMAL_TRANS	((BOOL)1)
#define DEL_ON_CLOSE	((BOOL)(NORMAL_TRANS | 2 ))

BOOL FARFNCT BeginTransaction(	FHANDLE,	/* from VFOpen() */\
								FHANDLE		/* from TransactOpen() */\
								);
BOOL FARFNCT EndTransaction(	FHANDLE,	/* from VFOpen() */\
								FHANDLE		/* from TransactOpen() */\
								);

int FARFNCT VFRead(	FHANDLE,		/* from VFOpen() */\
					VOID FAR *,		/* buffer to be filled */\
					unsigned int	/* # bytes to be read */\
					);
int FARFNCT VFWrite(	FHANDLE,		/* from VFOpen() */\
						VOID FAR *,		/* buffer to be written */\
						unsigned int	/* # of bytes to be written */\
						);

long FARFNCT VFLSeek(	FHANDLE,		/* from VFOpen() */\
						long,			/* # of bytes to seek */\
						int				/* location from which to seek */\
						);
long FARFNCT VFTell(	FHANDLE	/* from VFOpen() */	);

BOOL FARFNCT VFLocking(	FHANDLE,		/* from VFOpen() */\
						int,			/* type of lock desired */\
						long			/* # of bytes to lock */\
						);
#define SHARED_LOCK		((int) 1)
#define EXCLUSIVE_LOCK	((int) 2)
#define UNLOCK_BYTES	((int) 4)

BOOL FARFNCT VFChangeSize(	FHANDLE,	/* from VFOpen() */\
							long		/* new file size */\
							);

BOOL FARFNCT VFStat(	FHANDLE,			/* from VFOpen() */\
						struct stat NEAR *	/* struct to be filled */\
						);

int FARFNCT VFLastError( void );


/* The following error codes may be returned by VFLastError() */
#define ENONE		0		/* no error */
#define EHANDLE		1		/* FHANDLE bad */
#define ECLOSED		2		/* FHANDLE references a closed file */
#define ENOTUSER	3		/* specified file is not a user file */
#define EACTIVE		4		/* unmatched BeginTransaction() */
#define ECLOSE		5		/* system file close failed */
#define EUSER		6		/* specified file is a user file */
#define EUNLINK		7		/* system file unlink failed */
#define ENOTTRACK	8		/* handles specify non-tracking files */
#define ESEEK		9		/* system file seek failed */
#define EOFFSET		10		/* pos. offset from EOF */
#define EPOS		11		/* file position < 0L */
#define ELTYPE		12		/* bad lock type */
#define ELOCK		13		/* system lock function failed */
#define ECHSIZ		14		/* system file size change function failed */
#define EFSTAT		15		/* system file status function failed */
#define EMALLOC		16		/* system memory allocation failed */
#define EREALLOC	17		/* system memory reallocation failed */
#define ESTRDUP		18		/* system string duplication failed */
#define EOPEN		19		/* system file open failed */
#define ETTYPE		20		/* transaction file type is invalid */
#define EREAD		21		/* system file read failed */
#define ENOTCLOSED	22		/* deleting non-closed file not permitted */
#define EWRITE		23		/* system file write failed */
#define ETRACK		24		/* failure storing transaction record */
#define EDELTA		25		/* file size change too great for tracking */
#define EROLL		26		/* failure during transaction log rollback */

#endif	/* _TRANSACT_H_ */
