?? db.h
字號:
/****************************************************************************/
/* */
/* */
/* db.h v1.3 (c) 1987-1990 Ken Harris */
/* */
/* */
/****************************************************************************/
/* */
/* This software is made available on an AS-IS basis. Unrestricted */
/* use is granted provided that the copyright notice remains intact. */
/* The author makes no warranties expressed or implied. */
/* */
/****************************************************************************/
#ifdef ALL
#define SEQ 1
#define RAN 1
#define IDX 1
#define VAR 1
#endif
#define DB_VERSION 13 /* Version 1.3 */
#define FILE_NAME_MAX 50
#define YES -1
#define NO 0
#ifdef ULTRIX
#ifndef _TYPES_
typedef unsigned short ushort;
typedef unsigned int uint;
#endif
typedef unsigned char uchar;
typedef unsigned long ulong;
#endif
#ifdef SYSV
#ifndef types_h
typedef unsigned short ushort;
typedef unsigned int uint;
#endif
typedef unsigned char uchar;
typedef unsigned long ulong;
#endif
#ifdef MSC
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
#endif
#ifdef TURBO
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
#endif
/*
* db_file_hdr - File Header Record
*/
struct db_file_hdr
{ ushort fh_db_version; /* Data Base Version # */
ushort fh_file_type; /* File Type */
#define DB_SEQ 1
#define DB_RANDOM 2
#define DB_INDEX 3
#define DB_VAR 4
ushort fh_file_stat; /* File Status */
#define DB_CLOSED 0
#define DB_OPEN 1
#define DB_DUP_ALLOWED 2
ulong fh_last_block; /* Last Allocated Block */
ushort fh_block_size; /* Block Size in bytes */
ushort fh_rec_size; /* Record Size in bytes */
ushort fh_ctl_size; /* Control part of rec size */
ushort fh_data_size; /* User data part of rec size */
ulong fh_rec_cnt; /* Live Record Cnt */
ushort fh_recs_per_blk; /* Records Per Block */
ushort fh_root_ptr; /* Index File Root Pointer */
ushort fh_base_size; /* Random File Base Size */
ushort fh_key_size; /* Size of record key */
ulong fh_next_avail; /* First Available Record */
ushort fh_atr_size; /* Size of Attribute Block */
ulong fh_vfile_size; /* Size of VAR file data V1.3 */
ushort fh_olink_cnt; /* Owner link count V1.3 */
ushort fh_mlink_cnt; /* Member link count V1.3 */
ushort fh_klink_cnt; /* Key link count V1.3 */
/* Last part of the header rec */
/* is reserved for optional */
/* user attribute data. The */
/* size is currently 256 bytes */
};
#define DB_FILE_HDR_SIZE 512
#define DB_ATR_OFFSET 256
typedef struct db_file_hdr *FILE_HDR;
/*
* db_data_buf - Data buffer
*/
struct db_data_buf
{ struct db_data_buf *buf_prev; /* Previous Buffer in list */
struct db_data_buf *buf_next; /* Next Buffer in list */
ushort buf_size; /* Size of Buffer in Bytes */
ushort buf_cur_blk; /* Current Logical Blk (0=none) */
ushort buf_cur_size; /* Current Block Size */
ushort buf_rec_inx; /* Record index into block */
char *buf_data; /* Pointer to data */
};
typedef struct db_data_buf *BUFFER;
/*
* db_data_file - Data File Descriptor Block
*/
struct db_data_file
{ ushort df_stat; /* Data File Status */
BUFFER df_fhdr; /* File Header Buffer */
short df_fd; /* File descriptor */
char df_fname[FILE_NAME_MAX]; /* File name */
ulong df_prev_blk; /* Prev Block Read */
ushort df_prev_rec; /* Prev Record Read */
ushort df_prev_vsize; /* Prev var rec size */
struct db_data_buf *df_buf; /* Data Buffer */
struct db_data_buf *df_tmp; /* Tmp Data Buffer */
struct db_data_buf *df_aux; /* Another Tmp Data Buffer */
};
typedef struct db_data_file *DATA_FILE;
typedef struct db_data_file *DATA_SET;
#define DB_FH(df) ((FILE_HDR)(df->df_fhdr->duf_data))
#define FH_DB_VERSION(df) DB_FH(df)->fh_db_version
#define FH_FILE_TYPE(df) DB_FH(df)->fh_file_type
#define FH_FILE_STAT(df) DB_FH(df)->fh_file_stat
#define FH_LAST_BLOCK(df) DB_FH(df)->fh_last_block
#define FH_BLOCK_SIZE(df) DB_FH(df)->fh_block_size
#define FH_REC_SIZE(df) DB_FH(df)->fh_rec_size
#define FH_CTL_SIZE(df) DB_FH(df)->fh_ctl_size
#define FH_DATA_SIZE(df) DB_FH(df)->fh_data_size
#define FH_REC_CNT(df) DB_FH(df)->fh_rec_cnt
#define FH_RECS_PER_BLK(df) DB_FH(df)->fh_recs_per_blk
#define FH_ROOT_PTR(df) DB_FH(df)->fh_root_ptr
/*
* Record types
*/
struct db_free_rec
{ char fre_stat; /* Status */
#define DB_FREE '0'
#define DB_INUSE '1'
ulong fre_next; /* Next Available */
};
struct db_seq_rec
{ char seq_stat; /* Status */
};
struct db_index_hdr
{ char idx_stat; /* Status */
ushort idx_parent; /* Pointer to Parent */
ushort idx_rec_cnt; /* Keys in this block */
};
struct db_index_rec
{ ushort idx_idx_ptr; /* Pointer to index block */
};
struct db_random_hdr
{ char ran_stat; /* Status */
ushort ran_next; /* Overflow pointer */
ushort ran_rec_cnt; /* Live Recs in this block */
};
/*
* This is a dummy structure that is used in sizeof operations
* to make sure that db_random_hdr is atleast as big as db_free_rec.
*/
struct db_random_uhdr
{ union
{ struct db_free_rec ran_free;
struct db_random_hdr ran_hdr;
} uhdr;
};
struct db_random_rec
{ char ran_stat; /* Status */
};
struct db_var_rec
{ char var_stat; /* Status */
ushort var_dsize; /* size of data in bytes */
char var_data[3]; /* beginning of data area & */
/* dummy for 2nd size field & */
/* 1 byte checksum at end */
};
typedef struct db_free_rec *FREE_REC;
typedef struct db_seq_rec *SEQ_REC;
typedef struct db_index_hdr *INDEX_HDR;
typedef struct db_index_rec *INDEX_REC;
typedef struct db_random_hdr *RANDOM_HDR;
typedef struct db_random_rec *RANDOM_REC;
typedef struct db_var_rec *VAR_REC;
/*
* Link Structures
*/
struct db_link
{ DATA_FILE owner_file; /* Pointer to owner File desc */
short owner_index; /* Index of owner link rec */
short owner_offset; /* Offset of owner link rec */
DATA_FILE member_file; /* Pointer to member File desc */
short member_index; /* Index of member link rec */
short member_offset; /* Offset of member link rec */
};
typedef struct db_link *DB_LINK;
struct db_owner_link
{ long olnk_first; /* rec # of first member */
long olnk_last; /* rec # of last member */
};
typedef struct db_owner_link *OLINK;
struct db_member_link
{ long mlnk_prev; /* rec # of prev member */
long mlnk_next; /* rec # of next member */
long mlnk_owner; /* rec # of owner */
};
typedef struct db_member_link *MLINK;
struct db_key_link
{ long klnk_owner; /* rec # of the master */
};
typedef struct db_key_link *KLINK;
/*
* dictionary (symbol table manager) header defs
*/
#define DICT_HASH_SIZE 127
#define DICT_MAGIC 0xF012
/*
* db_dict_obj - dictionary object header
*/
struct db_dict_obj
{ short o_type; /* object type */
struct db_dict_obj *next; /* next object in hash chain */
short d_size; /* data size */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -