2 * Copyright (C) 1994, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.3 1994-09-26 16:08:42 quinn
8 * Most of the functionality in place.
10 * Revision 1.2 1994/09/14 13:10:35 quinn
13 * Revision 1.1 1994/09/12 08:02:07 quinn
24 #define IS_MAX_BLOCKTYPES 4
25 #define IS_MAX_RECORD 512
26 #define IS_DEF_REPACK_PERCENT "30" /* how much relative change before repack */
28 typedef unsigned int SYSNO; /* should be somewhere else */
29 typedef unsigned int ISAM_P;
32 * Description of a blocktype (part of an isam file)
34 typedef struct isam_blocktype
36 BFile bf; /* blocked file */
38 int first_block; /* position of first data block */
39 int max_keys_block; /* max num of keys per block */
40 int max_keys_block0; /* max num of keys in first block */
41 int nice_keys_block; /* nice number of keys per block */
42 int max_keys; /* max number of keys per table */
43 int freelist; /* fist free block */
44 int top; /* first unused block */
45 int index; /* placeholder. Always 0. */
46 char *dbuf; /* buffer for use in I/O operations */
50 * Handle to an open isam complex.
52 typedef struct isam_struct
54 isam_blocktype types[IS_MAX_BLOCKTYPES]; /* block_types used in this file */
55 int num_types; /* number of block types used */
57 int keysize; /* size of the keys (records) used */
58 int repack; /* how many percent to grow before repack */
59 int (*cmp)(const void *k1, const void *k2); /* compare function */
62 typedef struct ispt_struct
64 ISAM is; /* which file do we belong to? */
65 int ptr; /* current key offset */
67 struct ispt_struct *next; /* freelist */
70 #define is_type(x) ((x) & 3) /* type part of position */
71 #define is_block(x) ((x) >> 2) /* block # part of position */
73 #define is_keysize(is) ((is)->keysize)
77 *******************************************************************
83 ISAM is_open(const char *name, int writeflag);
88 int is_close(ISAM is);
91 * Locate a table of keys in an isam file. The ISPT is an individual
92 * position marker for that table.
94 ISPT is_position(ISAM is, ISAM_P pos);
99 void is_pt_free(ISPT ip);
102 * Read a key from a table.
104 int is_readkey(ISPT ip, void *buf);
106 int is_writekey(ISPT ip, const void *buf);
108 ISAM_P is_merge(ISAM is, ISAM_P pos, int num, const char *data);