campo-sirio/cb5/r4relate.h

259 lines
10 KiB
C
Raw Normal View History

/* 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