259 lines
10 KiB
C
259 lines
10 KiB
C
|
/* r4relate.h (c)Copyright Sequiter Software Inc., 1992-1994. All rights reserved. */
|
||
|
|
||
|
#define relate4filter_record 101
|
||
|
#define relate4do_remove 102
|
||
|
#define relate4skipped 104
|
||
|
#define relate4blank 105
|
||
|
#define relate4skip_rec 106
|
||
|
#define relate4terminate 107
|
||
|
#define relate4exact 108
|
||
|
#define relate4scan 109
|
||
|
#define relate4approx 110
|
||
|
#define relate4sort_skip 120
|
||
|
#define relate4sort_done 121
|
||
|
|
||
|
struct DATA4LIST_ST ;
|
||
|
struct RELATE4_ST ;
|
||
|
struct RELATION4_ST ;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
struct DATA4LIST_ST *data_list ;
|
||
|
TAG4 S4PTR *tag ; /* The tag whose expression could replace the sub-expression */
|
||
|
} E4INFO_REPORT ;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
EXPR4 S4PTR *expr ;
|
||
|
E4INFO_REPORT S4PTR *info_report ; /* One per E4INFO entry */
|
||
|
struct RELATION4_ST S4PTR *relation ;
|
||
|
CODE4 S4PTR *code_base ;
|
||
|
char S4PTR *buf ;
|
||
|
unsigned buf_pos, buf_len ;
|
||
|
} L4LOGICAL ;
|
||
|
|
||
|
typedef struct DATA4LIST_ST
|
||
|
{
|
||
|
struct RELATE4_ST S4PTR * S4PTR *pointers ;
|
||
|
unsigned mem_allocated ;
|
||
|
int pointers_tot ;
|
||
|
int pointers_used ;
|
||
|
} DATA4LIST ;
|
||
|
|
||
|
typedef struct RELATE4_ST
|
||
|
{
|
||
|
LINK4 link ;
|
||
|
|
||
|
EXPR4 S4PTR *master_expr ; /* master expression */
|
||
|
int match_len ; /* Number of characters to match */
|
||
|
TAG4 S4PTR *data_tag ; /* Null means record # lookup */
|
||
|
int relation_type, sort_type ; /* relate4exact, relate4scan, relate4approx */
|
||
|
/* Top data file is considered to be a Scan */
|
||
|
int error_action ; /* relate4blank, relate4skip_rec, relate4terminate */
|
||
|
char S4PTR *scan_value ; /* Allocated Memory */
|
||
|
int scan_value_len ;
|
||
|
|
||
|
int is_read ; /* 0 - Neither this data file nor its slaves read */
|
||
|
/* 1 - This data file read, slaves unknown */
|
||
|
DATA4 S4PTR *data ; /* This is the master for 'slaves' (if any) and */
|
||
|
/* possibly the slave for another data file. */
|
||
|
struct RELATE4_ST S4PTR *master ;
|
||
|
LIST4 slaves ;
|
||
|
|
||
|
F4FLAG set ; /* Specify records for bitmap optimizable sub-expression. */
|
||
|
struct RELATION4_ST S4PTR *relation ;
|
||
|
CODE4 S4PTR *code_base ;
|
||
|
char S4PTR *old_record;
|
||
|
|
||
|
#ifdef S4WINDOWS
|
||
|
HWND hWnd;
|
||
|
int total_children;
|
||
|
#endif
|
||
|
} RELATE4 ;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
LINK4 link ;
|
||
|
RELATE4 S4PTR *ptr ;
|
||
|
} RELATE4LIST ;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
LINK4 link ;
|
||
|
DATA4 S4PTR *data ;
|
||
|
RELATE4 S4PTR *relate ;
|
||
|
} R4DATA_LIST ;
|
||
|
|
||
|
typedef struct RELATION4_ST
|
||
|
{
|
||
|
RELATE4 relate ;
|
||
|
|
||
|
LIST4 sort_data_list ; /* data list for the sort */
|
||
|
LIST4 relate_list ; /* A list of scan Relate pointers; */
|
||
|
/* Includes the top level Relate */
|
||
|
char S4PTR *expr_source ;
|
||
|
|
||
|
char locked ;
|
||
|
|
||
|
SORT4 sort ;
|
||
|
char S4PTR *sort_source ;
|
||
|
char S4PTR *other_data, bitmaps_freed, sort_eof_flag, sort_done_flag ;
|
||
|
int sort_other_len ;
|
||
|
long sort_rec_to, sort_rec_on, sort_file_pos, sort_rec_count ;
|
||
|
FILE4 sorted_file ;
|
||
|
char sorted_file_name[13] ;
|
||
|
|
||
|
L4LOGICAL log ;
|
||
|
int is_initialized ;
|
||
|
char in_sort ; /* are we skipping for sorting purposes? */
|
||
|
char skip_backwards ; /* is backwards skipping enabled? */
|
||
|
|
||
|
MEM4 S4PTR *relate_memory ;
|
||
|
MEM4 S4PTR *relate_list_memory ;
|
||
|
MEM4 S4PTR *data_list_memory ;
|
||
|
} RELATION4 ;
|
||
|
|
||
|
|
||
|
#define BITMAP4LEAF 0x40
|
||
|
#define BITMAP4AND 0x20
|
||
|
|
||
|
typedef struct CONST4_st
|
||
|
{
|
||
|
LINK4 link ;
|
||
|
int offset ;
|
||
|
int len ;
|
||
|
} CONST4 ;
|
||
|
|
||
|
typedef struct BITMAP4_st
|
||
|
{
|
||
|
LINK4 link ;
|
||
|
LINK4 eval ;
|
||
|
|
||
|
/* flags */
|
||
|
char branch ;
|
||
|
char and_or ; /* 1 = and, 2 = or, 0 means neither */
|
||
|
char evaluated ;
|
||
|
char finished;
|
||
|
char save_count ;
|
||
|
char flip_base ;
|
||
|
char pure_map ;
|
||
|
char no_match ; /* no records match an and case */
|
||
|
|
||
|
L4LOGICAL S4PTR *log ;
|
||
|
RELATE4 S4PTR *relate ;
|
||
|
struct BITMAP4_st S4PTR *base ;
|
||
|
int type ; /* r4num, etc. */
|
||
|
|
||
|
/* Branch only */
|
||
|
LIST4 children ;
|
||
|
TAG4 S4PTR *tag ;
|
||
|
|
||
|
CONST4 lt ;
|
||
|
CONST4 le ;
|
||
|
CONST4 gt ;
|
||
|
CONST4 ge ;
|
||
|
CONST4 eq ;
|
||
|
LIST4 ne ;
|
||
|
} BITMAP4 ;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
S4EXPORT int S4FUNCTION bitmap4evaluate( L4LOGICAL S4PTR *, int ) ;
|
||
|
S4EXPORT BITMAP4 S4PTR * S4FUNCTION bitmap4redistribute( BITMAP4 S4PTR *, BITMAP4 S4PTR *, char ) ;
|
||
|
S4EXPORT BITMAP4 S4PTR * S4FUNCTION bitmap4redistribute_leaf( BITMAP4 S4PTR *, BITMAP4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT BITMAP4 S4PTR * S4FUNCTION bitmap4redistribute_branch( BITMAP4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT BITMAP4 S4PTR * S4FUNCTION bitmap4create( L4LOGICAL S4PTR *, RELATE4 S4PTR *, char, char ) ;
|
||
|
S4EXPORT void S4FUNCTION bitmap4destroy( BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT BITMAP4 S4PTR * S4FUNCTION bitmap4combine_leafs( BITMAP4 S4PTR *, BITMAP4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT long S4FUNCTION bitmap4seek( BITMAP4 S4PTR *, CONST4 S4PTR *, char, long, int ) ;
|
||
|
S4EXPORT void S4FUNCTION bitmap4copy( BITMAP4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
|
||
|
S4EXPORT void S4PTR * S4FUNCTION const4return( L4LOGICAL S4PTR *, CONST4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION const4mem_alloc( L4LOGICAL S4PTR *, unsigned ) ;
|
||
|
S4EXPORT int S4FUNCTION const4duplicate( CONST4 S4PTR *, CONST4 S4PTR *, L4LOGICAL S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION const4get( CONST4 S4PTR *, BITMAP4 S4PTR *, L4LOGICAL S4PTR *, int ) ;
|
||
|
S4EXPORT int S4FUNCTION const4less( CONST4 S4PTR *, CONST4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION const4eq( CONST4 S4PTR *, CONST4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION const4less_eq( CONST4 S4PTR *, CONST4 S4PTR *, BITMAP4 S4PTR * ) ;
|
||
|
S4EXPORT void S4FUNCTION const4add_ne( BITMAP4 S4PTR *, CONST4 S4PTR * ) ;
|
||
|
S4EXPORT void S4FUNCTION const4delete_ne( LIST4 S4PTR *, CONST4 S4PTR * ) ;
|
||
|
|
||
|
|
||
|
/* functions used to build the sort data list */
|
||
|
S4EXPORT int S4FUNCTION r4data_list_add( LIST4 S4PTR *, DATA4 S4PTR *, RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION r4data_list_find( LIST4 S4PTR *, RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT void S4FUNCTION r4data_list_free( LIST4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION r4data_list_build( LIST4 S4PTR *, RELATE4 S4PTR *, EXPR4 S4PTR *, int ) ;
|
||
|
|
||
|
S4EXPORT int S4FUNCTION e4is_constant( E4INFO S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION e4is_tag( E4INFO_REPORT S4PTR *, EXPR4 S4PTR *, E4INFO S4PTR *, DATA4 S4PTR * ) ;
|
||
|
|
||
|
S4EXPORT int S4FUNCTION log4add_to_list( L4LOGICAL S4PTR *, E4INFO S4PTR *, DATA4LIST S4PTR * ) ;
|
||
|
/*static int log4build_database_lists( L4LOGICAL S4PTR * ) ;*/
|
||
|
S4EXPORT int S4FUNCTION log4true( L4LOGICAL S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION log4bitmap_do( L4LOGICAL S4PTR * ) ; /* Do everything regarding bitmaps */
|
||
|
S4EXPORT int S4FUNCTION log4determine_evaluation_order( L4LOGICAL S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION log4swap_entries( L4LOGICAL S4PTR *, int, int ) ;
|
||
|
|
||
|
S4EXPORT int S4FUNCTION data_list4add( DATA4LIST S4PTR *, CODE4 S4PTR *, RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION data_list4expand_from_db_tree( DATA4LIST S4PTR *, CODE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION data_list4is_in( DATA4LIST S4PTR *, RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION data_list4read_records( DATA4LIST S4PTR * ) ;
|
||
|
S4EXPORT void S4FUNCTION data_list4remove( DATA4LIST S4PTR *, DATA4LIST S4PTR * ) ;
|
||
|
|
||
|
S4EXPORT void S4FUNCTION relate4init_relate( RELATE4 S4PTR *, RELATION4 S4PTR *, DATA4 S4PTR *, CODE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4blank_set( RELATE4 S4PTR *, char ) ; /* Recursive Blank */
|
||
|
S4EXPORT int S4FUNCTION relate4build_scan_list( RELATE4 S4PTR *, RELATION4 S4PTR * ) ;
|
||
|
S4EXPORT RELATE4 S4PTR * S4FUNCTION relate4create_slave( RELATE4 S4PTR *, DATA4 S4PTR *,
|
||
|
char S4PTR *, TAG4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4free_relate( RELATE4 S4PTR *, int ) ;
|
||
|
S4EXPORT void S4FUNCTION relate4changed( RELATE4 S4PTR * ) ; /* Slave has been added or freed */
|
||
|
S4EXPORT RELATE4 S4PTR * S4FUNCTION relate4lookup_relate( RELATE4 S4PTR *, DATA4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4lookup( RELATE4 S4PTR *, char ) ; /* Lookup the record */
|
||
|
S4EXPORT int S4FUNCTION relate4match_len( RELATE4 S4PTR *, int ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4next_record_in_scan( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4prev_record_in_scan( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4read_in( RELATE4 S4PTR * ) ; /* Read a record for this specific data file. */
|
||
|
/* Assume Master has already been read ! */
|
||
|
S4EXPORT int S4FUNCTION relate4read_rest( RELATE4 S4PTR *, char ) ;
|
||
|
S4EXPORT void S4FUNCTION relate4set_not_read( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4sort( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4lock( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4unlock( RELATE4 S4PTR * ) ;
|
||
|
|
||
|
S4EXPORT int S4FUNCTION relate4error_action( RELATE4 S4PTR *, int ) ; /* Set the error action */
|
||
|
S4EXPORT int S4FUNCTION relate4type( RELATE4 S4PTR *, int ) ; /* Set the relate type */
|
||
|
|
||
|
S4EXPORT int S4FUNCTION relate4do( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4do_one( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4skip_enable( RELATE4 S4PTR *, int ) ;
|
||
|
|
||
|
S4EXPORT int S4FUNCTION relate4dbf_in_relation( RELATE4 S4PTR *, DATA4 S4PTR * ) ;
|
||
|
|
||
|
|
||
|
/* RELATION4 functions */
|
||
|
S4EXPORT RELATE4 S4PTR * S4FUNCTION relate4init( DATA4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4free( RELATE4 S4PTR *, int ) ;
|
||
|
S4EXPORT void S4FUNCTION relate4free_bitmaps( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4next_scan_record( RELATION4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4prev_scan_record( RELATION4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4skip( RELATE4 S4PTR *, long ) ; /* Extended record skip */
|
||
|
S4EXPORT int S4FUNCTION relate4bottom( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4top( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4query_set( RELATE4 S4PTR *, char S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4eof( RELATE4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4sort_set( RELATE4 S4PTR *, char S4PTR * ) ;
|
||
|
S4EXPORT void S4FUNCTION relate4sort_free( RELATION4 S4PTR *, int ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4sort_next_record( RELATION4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4sort_prev_record( RELATION4 S4PTR * ) ;
|
||
|
S4EXPORT int S4FUNCTION relate4sort_get_record( RELATION4 S4PTR *, long ) ;
|
||
|
|
||
|
/* Used in designer, 1 Moved Down, 0 No Move, -X Moved Up X, 2 Done */
|
||
|
S4EXPORT int S4FUNCTION relate4next( RELATE4 S4PTR * S4PTR * ) ;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|