home *** CD-ROM | disk | FTP | other *** search
- /***************************************
- * 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 */
- };
-
-
-