⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db.h

📁 数据库C语言开发工具包,可以方便地移植到嵌入式系统中
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************/
/*                                                                          */
/*                                                                          */
/*      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		     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -