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 < OL */
#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      /* eleting 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_ */