php-src/ext/dbase/dbf_ndx.h
Sascha Schumann 16017f6d78 Change header protection macros to conform to standard.
Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment"

  All identifiers that begin with an underscore and either an uppercase
  letter or another underscore are always reserved for any use by the
  implementation.
2000-07-02 23:46:51 +00:00

99 lines
2.5 KiB
C

/*
* Copyright (c) 1993 Brad Eacker,
* (Music, Intuition, Software, and Computers)
* All Rights Reserved
*/
/*
* dbf .ndx header structure on disk and in memory
*
* Basic info taken from:
* "Clipper Programming Guide, 3rd Edition, Version 5.01"
* by Rick Spence
*/
#ifndef DBF_NDX_H_
#define DBF_NDX_H_
#include "dbf.h"
#define NDX_PAGE_SZ 512
/* on disk ndx header */
struct dndx_header {
char dndx_st_pg[4]; /* starting page number */
char dndx_tot_pg[4]; /* total number of pages */
char dndx_filler1[4]; /* space */
char dndx_key_len[2]; /* key length */
char dndx_keys_ppg[2]; /* number of keys per page */
char dndx_key_type[2]; /* key type */
char dndx_size_key[4]; /* size of the key record */
char dndx_filler2; /* space */
char dndx_unique; /* whether or not done with unique */
char dndx_key_name[488]; /* string defining the key */
};
typedef struct dndx_header dndx_header_t;
/* in memory ndx header */
struct ndx_header {
long ndx_start_pg;
long ndx_total_pgs;
unsigned short ndx_key_len;
unsigned short ndx_keys_ppg;
unsigned short ndx_key_type;
char ndx_unique;
long ndx_key_size;
char *ndx_key_name;
int ndx_fd;
struct ndx_page *ndx_fp;
dndx_header_t *ndx_hpage;
struct ndx_record *ndx_cur_rec;
};
typedef struct ndx_header ndx_header_t;
/* these are the possible values in the key type field */
#define NDX_CHAR_TYPE 00
#define NDX_NUM_TYPE 01
/* on disk key record */
struct dndx_record {
char dndx_left_pg[4]; /* number of left page */
char dndx_dbf_rec[4]; /* dbf record number */
char dndx_key_data; /* key data */
};
typedef struct dndx_record dndx_record_t;
struct ndx_record {
long ndxr_left;
long ndxr_rec;
char *ndxr_key_data;
struct ndx_page *ndxr_page; /* page pointer to where we are from*/
int ndxr_p_nrec; /* number of the record within page */
};
typedef struct ndx_record ndx_record_t;
struct dndx_page {
char dndxp_num_keys[4]; /* number of keys on this page */
struct dndx_record dndx_rp;
};
typedef struct dndx_page dndx_page_t;
struct ndx_page {
long ndxp_page_no;
long ndxp_num_keys;
dndx_page_t *ndxp_page_data;
ndx_header_t *ndxp_header_p;
long ndxp_last_key;
struct ndx_page *ndxp_parent; /* parent page */
int ndxp_par_rno; /* record number within parent */
struct ndx_record *ndxp_records;
};
typedef struct ndx_page ndx_page_t;
extern ndx_header_t *ndx_get_header(int);
extern ndx_record_t *ndx_get_first_rec(ndx_header_t *);
extern ndx_record_t *ndx_get_next_rec(ndx_header_t *, ndx_record_t *);
#endif /* DBF_NDX_H_ */