/*
* pq stuff for ev database
*/
#define INDX_BLK 4096
#define OFF_LEN 4 /* # of bytes in binary rep of offset */
#define OFF_MAX 10
#define NB 8
#define ATTR_NAME_SZ 64 /* max len of attribute name */
#define NUM_DUP 32 /* # of values that can be assigned to an attr */
#define MULT_ATTR_SZ 12 /* size of mult attr value */
#define NIX 64 /* max num of attributes */
#define SYSERR 1 /* just need a non-zero value */
#define A_READ 4
#define DB_SEP '|' /* default field separator (-d option) */
#define LEVEL_SEP '=' /* to create multi-level index filenames */
#define BLANK ' '
#define COMMENT '#'
#define PREFIX '*'
#define ATTRIBUTE "attribute"
#define TOKEN_SEPS "@!.&-,_:/ \f\n\r\t\v"
#define ev_cpy(f, s, l) (strncpy((f), (s), (l)), (f)[l] = 0)
typedef struct {
unsigned int exact: 1;
unsigned int prefix: 1;
unsigned int star: 1;
unsigned int word: 1;
unsigned int numeric: 1;
unsigned int alpha: 1;
unsigned int ignore: 1;
unsigned int token: 1;
unsigned int xtoken: 1;
} FLAGS;
typedef struct {
char p_type[ATTR_NAME_SZ+1]; /* the name of this attribute */
int p_field; /* position of field within record */
int i_size;
int i2_size;
FLAGS* p_match;
char multiple[MULT_ATTR_SZ+1];
int p_make; /* set if this attr is indexed */
} PROTO_INFO;
typedef struct {
int proto_no; /* where in the proto file this attr is located */
char* val[NUM_DUP]; /* the values assigned to this attribute */
int pre[NUM_DUP]; /* specify if the values of val have a prefix */
int num_val; /* num of vals this attr has been assigned */
int equal; /* does this attribute have a value ? */
int x_vector;
} IN_INFO;
typedef struct {
char path_name[256]; /* Directory containing index files */
char db_nm[256]; /* Full name of database file */
char p_nm[256]; /* Full name of proto file */
char sep; /* Delimiter character for data file */
int db_ptr; /* File descriptor of the database file */
PROTO_INFO* pptr[NIX]; /* Structure containing proto file */
int num_flds; /* Number of proto file entries */
char x_vector[MULT_ATTR_SZ]; /* Holds value of multiple attribute */
int x_fld; /* Proto entry location of mult. fld */
int valid_extra; /* Set if x_vector exists */
char db_buf[PQ_REC+1]; /* Current line from data file */
char read_buf[INDX_BLK+1]; /* Stores INDX_BLK from index files */
char* buf_ptr; /* Pointer into read_buf */
IN_INFO* in_info[PQ_VEC]; /* Contains modified input array */
IN_INFO* in_blk; /* Pointer input array malloced space */
int in_num; /* Number of qualifiers in input vector */
IN_INFO* maj_val; /* Values of major key used to search */
int maj_loc; /* Location in Proto file of major type */
int maj_no; /* Number of major keys */
char key[PQ_REC]; /* Current key value used to search */
FLAGS* mf; /* Current matching type */
int pre; /* Set for prefix match of star type */
int depth; /* Number of index files for key */
int db_offset; /* Holds offset into lowest level index */
int index_end; /* Number of characters in read_buf */
int add_vector; /* Set if x_vector was added */
char free_blk[NIX*PQ_REC]; /* Extra core memory */
char* free_ptr; /* Points to next empty free_blk place */
int no_index; /* Set if no index files for key exists */
int attribute; /* Set if "attribute" attribute is used */
int lockfd; /* fd of lock file, if one was specified */
} EV_INFO;
typedef struct {
int key[NIX]; /* index into PROTO_INFO, indicating attrs w/indexes */
Biobuf* f_ptr[NIX];
int num_index; /* number of attributes to build indexes on */
} INDEX_INFO;
char ev_err_msg[256];
char ev_err[256];
char x_val[MULT_ATTR_SZ];
int ev_err_no;
int number_fields;
int ev_len(char*, char);
int ev_addr(char*, char, char**);
int ev_proto(char*, PROTO_INFO**, int);
char* ev_file(char*, char*, int);
int ev_root(char*, int);
int ev_ld(char*, PROTO_INFO**);
char* ev_elem(void);
FLAGS* ev_match(char*);
char* ev_modify(int, char*, PROTO_INFO**);
char* ev_tmodify(int, char*, PROTO_INFO**);
void ev_lower(char*);
char* ev_alphanum(char*);
char* ev_token(char*);
int ev_word_match(char*, char*);
char* ev_error_proc(char*);
int ev_paths(char**, EV_INFO*);
#pragma lib "/sys/src/cmd/pq/lib/libpq.a"
syntax highlighted by Code2HTML, v. 0.9.1