/* (C) Copyright, 1988, 1989 Marcus J. Ranum All rights reserved This software, its documentation, and supporting files are copyrighted material and may only be distributed in accordance with the terms listed in the COPYRIGHT document. */ A few words about the arrangement of these modules:: Contents:: btree.h - needed by anything using the btree code. defines various constants and macros, as well as forward declarations. btconf.h - put system specific configuration stuff here. this file contains compile-time options settings and system macros. btintern.h - NEVER include this in user level code unless you know bloody well what you're about. this file contains the internal page structures and mystical secret stuff that should never need to be edited. btclose.c - function to close a btree. btdelete.c - function to delete a key from a btree. bterrors.c - error strings and bt_perror(). btfind.c - function to locate a key in a btree. btgoto.c - function to go to first/last key of btree. btinsert.c - insert function. btio.c - cache manipulation routines, also functions for syncing buffers, writing superblocks, and allocating and freeing new pages. btlabel.c - functions for manipulating a label hidden in free space between first page and the end of the superblock. btload.c - function for optimal load of reverse sorted keys. btopen.c - simple btree opening function that doesn't provide much in the way of options. btoopen.c - btree opening function that provides access to every option supported by the library. uses varargs and will not compile on machines without varargs. btpage1.c - first half of the internal page manipulation routines. contains page search functions, page insert, and page split. btpage2.c - second half of the internal page manipulation routines. contains page delete function, and a function to grab a specific key/ptr pair out of a page. btravrs.c - function to scan forward/backwards in btree. btseek.c - internal function that navigates to leaf level. called in bt_insert(), bt_delete(), bt_find(), etc. btzap.c - function that resets an index. Notes: 1) stdio.h is not included in every module, and should not be. Unfortunately I had to include it for NULL and BUFSIZ in a couple of places, but I hate having it wasting space when I compile stuff. 2) btpage1.c and btpage2.c are separate because of the hairy use of macros and symbols that makes it hard to fit in the memory of a small compiler. please keep them separate. 3) static functions: I normally would make 99% of these functions static so they would not clutter up the name space, BUT, because of compiler space constraints on my Amiga, and the fact that I want to be able to use the page handling code in record management, I need access to them externally. please do not change this. (though I may make a version of this library that IS all staticed out, and all the code is in one BIG module. ick, poo.) 4) library size: all these modules are carefully arranged so that no extraneous functions will get linked in (if your linker is not totally dead-brained). Please do not destroy that, since, IMHO, libraries should never give you more than you need. To Do: 1) make (if possible) the page insertion and manipulation routines more portable. I simply don't know how to do this myself, so anyone who knows how is invited to tell me! 2) It would be nice if there was an EFFICIENT way to tell the tree to store records off the leaves. This could be really bad, if it was not implemented properly, though. If someone does this, or wants to, let me know. --mjr();