================================ = SOME COMMENTS ON ERROR CODES = ================================ ERROR_BLANK_LINE - This is returned when a blank line is found where a data/index file name was expected. ERROR_CANNOT_DELETE_DATA_FILE ERROR_CANNOT_DELETE_INDEX_FILE - These are returned from DeleteISAMFile. ERROR_CANNOT_SET_ONEXIT - this is returned from the first function attempted, if for some reasonefine ERROR_DATA_FILE_NOT_FOUND (long) (ISAMErrStart + 30 ) #define ERROR_DELETED_RECORD (long) (ISAMErrStart + 35 ) #define ERROR_FILE_ALREADY_OPEN (long) (ISAMErrStart + 40 ) #define ERROR_FILE_IN_USE (long) (ISAMErrStart + 45 ) #define ERROR_FILE_LOCKED (long) (ISAMErrStart + 50 ) #define ERROR_FILE_NOT_OPEN (long) (ISAMErrStart + 55 ) #define ERROR_FROM_KEY_MISSING (long) (ISAMErrStart + 60 ) #define ERROR_FROM_KEY_PRESENT (long) (ISAMErrStart + 65 ) #define ERROR_INCOMPLETE_KEY_LINE (long) (ISAMErrStart + 70 ) #define ERROR_INCOMPLETE_PATH (long) (ISAMErrStart + 75 ) #define ERROR_INDEX_FILE_NOT_FOUND (long) (ISAMErrStart + 80 ) #ifndef ERROR_INSUFFICIENT_MEMORY #define ERROR_INSUFFICIENT_MEMORY (long) (ISAMErrStart + 85 ) #endif #define ERROR_INVALID_AorD (long) (ISAMErrStart + 90 ) #define ERROR_INVALID_DATA_FILE (long) (ISAMErrStart + 95 ) #define ERROR_INVALID_DATA_FILE_SIZE (long) (ISAMErrStart + 100 ) #define ERROR_INVALID_INDEX_FILE (long) (ISAMErrStart + 105 ) #define ERROR_INVALID_ITERATION_TYPE (long) (ISAMErrStart + 110 ) #define ERROR_INVALID_KEY_LENGTH (long) (ISAMErrStart + 115 ) #define ERROR_INVALID_KEY_OFFSET (long) (ISAMErrStart + 120 ) #define ERROR_INVALID_KEY_TYPE (long) (ISAMErrStart + 125 ) #define ERROR_INVALID_LOCK_TYPE (long) (ISAMErrStart + 130 ) #define ERROR_INVALID_PREFIX_LENGTH (long) (ISAMErrStart + 135 ) #define ERROR_INVALID_RECORD_LENGTH (long) (ISAMErrStart + 140 ) #define ERROR_INVALID_UorR (long) (ISAMErrStart + 145 ) #define ERROR_ISAM_ALREADY_INSTALLED (long) (ISAMErrStart + 150 ) #define ERROR_ISAM_NOT_INSTALLED (long) (ISAMErrStart + 155 ) #define ERROR_ISAM_SHUTTING_DOWN (long) (ISAMErrStart + 160 ) #define ERROR_KEY_IS_ASCENDING (long) (ISAMErrStart + 165 ) #define ERROR_KEY_IS_DESCENDING (long) (ISAMErrStart + 170 ) #define ERROR_KEY_LINE_TOO_LONG (long) (ISAMErrStart + 175 ) #define ERROR_KEY_NOT_UNIQUE (long) (ISAMErrStart + 180 ) #define ERROR_MAX_FILES_OPEN (long) (ISAMErrStart + 185 ) #ifndef ERROR_NO_FREE_SIGNALS #define ERROR_NO_FREE_SIGNALS (long) (ISAMErrStart + 190 ) #endif #define ERROR_NO_KEY_INFO (long) (ISAMErrStart + 195 ) #define ERROR_NO_MORE_RECORDS (long) (ISAMErrStart + 200 ) #define ERROR_NO_SUCH_KEY (long) (ISAMErrStart + 205 ) #define ERROR_NO_SUCH_RECORD (long) (ISAMErrStart + 210 ) #define ERROR_NULL_POINTER (long) (ISAMErrStart + 215 ) #define ERROR_RECORDS_LOCKED (long) (ISAMErrStart + 220 ) #define ERROR_RECORD_EXISTS (long) (ISAMErrStart + 225 ) #define ERROR_RECORD_LOCKED (long) (ISAMErrStart + 230 ) #define ERROR_RECORD_TOO_HIGH (long) (ISAMErrStart + 235 ) #define ERROR_RENAME_FAILED_IN_REINDEX (long) (ISAMErrStart + 240 ) #define ERROR_SPECS_FILE_EMPTY (long) (ISAMErrStart + 245 ) #define ERROR_TO_KEY_MISSING (long) (ISAMErrStart + 250 ) #define ERROR_TO_KEY_PRESENT (long) (ISAMErrStart + 255 ) #define IERROR_DELETED_KEYNODE (long) (ISAMErrStart + 400 ) #define IERROR_HEADER_KEYNODE (long) (ISAMErrStart + 405 ) #define IERROR_INDEX_END_OF_FILE (long) (ISAMErrStart + 410 ) #define IERROR_INVALID_AorD (long) (ISAMErrStart + 415 ) #define IERROR_INVALID_INDEX_FILE_SIZE (long) (ISAMErrStart + 420 ) #define IERROR_INVALID_ISAM_COMMAND (long) (ISAMErrStart + 425 ) #define IERROR_KEYNODE_TOO_HIGH (long) (ISAMErrStart + 430 ) #define IERROR_KEY_VALUE_NOT_FOUND (long) (ISAMErrStart + 435 ) #define IERROR_NOT_DELETED_KEYNODE (long) (ISAMErrStart + 440 ) #define IERROR_NOT_DELETED_RECORD (long) (ISAMErrStart + 445 ) #define IERROR_NO_FFILE_FOR_TFILE (long) (ISAMErrStart + 450 ) #define IERROR_NO_RECORDS_IN_FILE (long) (ISAMErrStart + 455 ) #define ISAMErrStop IERROR_NO_RECORDS_IN_FILE ޘ SHAREWARE VERSION have dates more than a year old, we request that you == == contact us for a free upgrade to the current SHAREWARE VERSION. == == Disk distributors and dealers must have written permission before == == selling copies of the SHAREWARE VERSION of this software. When you == == contact us, you will receive a free copy of the latest SHAREWARE == == VERSION and you will be placed on our mailing list to receive updates == == as they are released. == == Disk distributors may charge no more than US$ 10.00 per disk for == == copies of this software. If, as a distributor, you supply copies to == == other resellers, the end price to the user may not exceed US$ 10.00. == == == == Anyone distributing copies of the SHAREWARE VERSION of this software, == == whether for profit or as a nonprofit organization, must conform to == == the following: == == The files [on each disk] may not be modified or adapted in any way. == == All of the files provided [on the disk] must be distributed == == together. == == Individual files or groups of files may not be sold separately. == == Additional files may be added and this software may be combined on == == a disk with other programs. == == This software may not be represented as anything other than share- == == ware, and the shareware concept must be explained in any ad or == == catalog that includes this software and on any packaging used to == == display the disk. == == You must immediatly stop selling/distributing copies of this disk == == upon notice from the author or RedShift Software. == == == =============================================================================== =============================================================================== ISAM FEATURES/LIMITS -------------------- Multiple Keys Unique/Repeatable Keys Multi-"user" Client/Server Design Fixed-length Records File/Record Locking (Exclusive/Shared) Deleted-record-space reclaimed Minimal code size used per program Small server size Resident Library of functions Max. Users : 4,294,967,296 ( largest unsigned long + 1 ) Max. Open ISAM Files : 2,147,483,648 ( largest unsigned long / 2 ) Max. Number of Keys : 65,536/file ( largest unsigned word + 1 ) Max. Key Length : 499 Bytes ( Keynode Size - 13 ) Min. Key Length : 1 Byte Max. Number of Records : 4,294,967,296/file ( largest unsigned long + 1 ) Max. Record Length : 4,294,967,296 Bytes ( largest unsigned long + 1 ) Min. Record Length : 4 Bytes ( used in deleted-record-space reclamation ) The above maximum figures are of course limited by available disk space and/or available memory (and CPU horsepower). If there is an upper limit on the size of a file, then the above maximum Record Count/Length figures may, of course, be smaller. REQUIREMENTS: Any Amiga, AmigaDOS (R) V1.2 or higher. Any Language that can access Resident Libraries (such as the Amiga system libraries (Exec/Intuition/DOS/etc)). Closest fit: users of Lattice (R) C or SAS/C (R). ==== ISAM ==== WHAT IT IS: ISAM - Indexed Sequential Access Method - is a method of storing records, for retrieval in any pre-selected order. As its name implies, records are usually stored sequentially in the DATA File, in the order in which they are received. A separate file, the INDEX File, is used to store the indices (usually referred to as "keys") that order the records. Together, the data and index files are referred to as an ISAM FILE. A RECORD is a group of related information, stored together. Each piece of information is called a FIELD of the record. For example: an "Employee" record in a business might have a field for First Name, a field for Last Name, one for Phone Number, Address, Annual Salary, Social Security Number, etc. For all records in a file, the same field is in the same position in each record. KEYS are special areas of a record that hold information by which the records will be ordered (kept sorted). A key is often a single field. For example: in the above "Employee" record, a likely key would be the employee's Last Name field; another key might be the Social Security Number. The employee's First Name, while an important piece of information, would probably not be made a key. Keys do not have to correspond to single fields. If our "Employee" had the Last Name stored before the First Name, a key could span both the Last Name and the First Name fields. All employees would be ordered as before, but all those with identical Last Names would themselves be ordered by First Names. Also, to save space, a key might consist of just a part of a field. If the Last Name field were 30 characters long, a key might be just 10 bytes long, the first 10 characters of the Last Name. An ITERATION is a sequence of records retrieved in key order. An iteration may consist of all of the records in the file, or it may be limited to records having keys of one key value; it may consist of a RANGE of records from one key value to another,