home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
255.lha
/
Isam
/
ISAM.h
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-13
|
6KB
|
175 lines
/***************************************
* ISAM File System
****************************************
* Copyright © 1989 by Kai Ploog
* A.d. Huehnerhecke 1
* D-6074 Roedermark
*
****************************************
* Header: ISAM.h (set TAB to 4)
* V0.9 beta rev 02 2/13/1989
* first version: 1/15/1989
***************************************/
/* include your system's type definition header before ISAM.h !!! */
/*********************
* defines
*********************/
/*** field types ***/
#define ISAM_KEY (0x0001) /* key field */
#define ISAM_TEXT (0x0002) /* text field */
#define ISAM_NUMERIC (0x0004) /* numeric field (float) */
#define ISAM_DATE (0x0008) /* date field */
#define ISAM_TIME (0x0010) /* time field */
/*** ISAM types (hi-byte internal, lo-byte external) ***/
#define ISAM_SINGLEFILE (0x0001) /* single file sytem (no data base) */
#define ISAM_PREDEFINED (0x0002) /* predefined ISAMData structure */
#define ISAM_DATABASE (0x0004) /* data base system */
/*** ISAM Key flags (hi-byte external, lo-byte internal) ***/
#define ISAM_MODIFIED (0x0001) /* flag if keys have been modified */
#define ISAM_AUTOUPDATE (0x0100) /* automatic update when modified */
#define ISAM_DUPLICATEKEYS (0x0200) /* allows duplicate keys */
/*** ISAMOpen and function modes ***/
#define ISAM_REPLACE (0x01L) /* replace file/data set */
#define ISAM_NEWFILE (0x02L) /* create new ISAM file */
#define ISAM_OLDFILE (0x04L) /* open old ISAM file */
/*** Error numbers in Hd->Error ***/
#define ISAMe_CANT_OPEN_INDEX (1)
#define ISAMe_CANT_WRITE_INDEX (2)
#define ISAMe_CANT_READ_INDEX (3)
#define ISAMe_CANT_SEEK_INDEX (4)
#define ISAMe_CANT_CLOSE_INDEX (5)
#define ISAMe_CANT_OPEN_DATA (6)
#define ISAMe_CANT_WRITE_DATA (7)
#define ISAMe_CANT_READ_DATA (8)
#define ISAMe_CANT_SEEK_DATA (9)
#define ISAMe_CANT_CLOSE_DATA (10)
#define ISAMe_CANT_OPEN_DEF (11)
#define ISAMe_CANT_WRITE_DEF (12)
#define ISAMe_CANT_READ_DEF (13)
#define ISAMe_CANT_SEEK_DEF (14)
#define ISAMe_CANT_CLOSE_DEF (15)
#define ISAMe_KEYS_NOT_EQUAL (16)
#define ISAMe_KEY_EXISTS (17)
#define ISAMe_MAXKEYS_REACHED (18)
#define ISAMe_KEY_TOO_LONG (19)
#define ISAMe_NOT_ENOUGH_MEM (20)
/*************************
* function prototypes
*************************/
struct ISAMHeader *ISAMOpen(struct ISAMNewFile *, USHORT);
int ISAMClose(struct ISAMHeader *);
int ISAMUpdate(struct ISAMHeader *);
int ISAMSearch (struct ISAMHeader *, STRPTR, int);
int ISAMAdd (struct ISAMHeader *, APTR);
int ISAMReplace (struct ISAMHeader *, APTR);
int ISAMDelete (struct ISAMHeader *);
int ISAMRead (struct ISAMHeader *, APTR);
int ISAMFirst (struct ISAMHeader *);
int ISAMLast (struct ISAMHeader *);
int ISAMNext (struct ISAMHeader *);
int ISAMPrev (struct ISAMHeader *);
int ISAMError (struct ISAMHeader *);
/*********************
* structures
*********************/
#define NAMLEN (32)
#define FORMLEN (18)
struct ISAMField {
USHORT Size; /* the overall field size: sign+dec+point+frac */
USHORT Type; /* field type */
char Name[NAMLEN]; /* field name */
char Format[FORMLEN]; /* format of field contents */
UBYTE reserved[10]; /* reserved for future INTERNAL! use */
/* user defined data: */
/* insert user data above and update the number of reserved bytes: */
UBYTE user[14]; /* user reserved bytes */
};
#undef NAMLEN
#undef FORMLEN
struct ISAMDataHeader {
USHORT Fields; /* number of fields in structure */
/* structure items MUST keep this
* position and length (SHORT) !!!
*/
USHORT KeyPos; /* position of key field */
USHORT RecLength; /* length of whole record */
struct ISAMField Field[1]; /* field definition structures */
UBYTE reserved[10]; /* reserved for future INTERNAL! use */
/* user defined data: */
/* insert user data above and update the number of reserved bytes: */
UBYTE user[20]; /* user reserved bytes */
};
struct ISAMKey {
struct ISAMKey *NextKey; /* next ISAMKey structure in list */
struct ISAMKey *PrevKey; /* previous ISAMKey structure in list */
ULONG Position; /* position of this key in data file */
char Key[1]; /* key string */
};
struct ISAMKeyHeader {
struct ISAMKey *FirstKey; /* pointer to first ISAMKey structure */
struct ISAMKey *LastKey; /* pointer to last ISAMKey structure */
USHORT KeyLength; /* length of key field */
ULONG Keys; /* current number of keys in list */
ULONG MaxKeys; /* maximum number of keys allowed */
ULONG Records; /* number of filled-in records */
USHORT Flags; /* internal flags */
struct ISAMKey *Current; /* address of current key in key list */
};
struct ISAMFiles {
STRPTR IndexName; /* pointer to file name for index (keys) */
int IndexFh; /* index file handle */
STRPTR DataName; /* pointer to file name for data */
int DataFh; /* data file handle */
STRPTR DefName; /* pointer to file name for data definitions */
int DefFh; /* defititions file handle */
};
struct ISAMHeader {
struct ISAMHeader *NextHeader; /* pointer to next ISAMHeader structure */
APTR DBase; /* pointer to DataBase structure */
USHORT Type; /* ISAM types */
struct ISAMFiles *Files; /* pointer to ISAMFiles structure */
struct ISAMKeyHeader *Keys; /* pointer to ISAMKeyHeader structure */
struct ISAMDataHeader *Data; /* pointer to ISAMDataHeader structure */
int Error; /* last error number */
};
struct ISAMNewFile {
STRPTR IndexName; /* pointer to index file name */
STRPTR DataName; /* pointer to data file name */
STRPTR DefName; /* pointer to definitions file name */
USHORT Type; /* type of ISAM file */
APTR DBase; /* pointer to DataBase structure */
struct ISAMDataHeader *Data; /* pointer to initialized data definition structure */
ULONG MaxKeys; /* maximum possible keys */
};