282 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			282 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* r4relate.h   (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */
 | |
| 
 | |
| #define relate4filterRecord 101
 | |
| #define relate4doRemove 102
 | |
| #define relate4skipped 104
 | |
| #define relate4blank 105
 | |
| #define relate4skipRec 106
 | |
| #define relate4terminate 107
 | |
| #define relate4exact 108
 | |
| #define relate4scan 109
 | |
| #define relate4approx 110
 | |
| #define relate4sortSkip 120
 | |
| #define relate4sortDone 121
 | |
| #define relate4continue 200
 | |
| /* backward compatibility redefinitions */
 | |
| #define relate4skip_rec relate4skipRec
 | |
| 
 | |
| struct DATA4LISTSt ;
 | |
| struct RELATE4St ;
 | |
| struct RELATION4St ;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    struct DATA4LISTSt *relateDataList ;
 | |
|    TAG4FILE S4PTR *tag ;  /* The tag whose expression could replace the sub-expression */
 | |
| } E4INFO_REPORT ;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|    EXPR4 S4PTR *expr ;
 | |
|    E4INFO_REPORT S4PTR *infoReport ;  /* One per E4INFO entry */
 | |
|    struct RELATION4St S4PTR *relation ;
 | |
|    CODE4 S4PTR *codeBase ;
 | |
|    char  S4PTR *buf ;
 | |
|    unsigned bufPos, bufLen ;
 | |
| } L4LOGICAL ;
 | |
| 
 | |
| typedef struct DATA4LISTSt
 | |
| {
 | |
|     struct RELATE4St S4PTR * S4PTR *pointers ;
 | |
|     unsigned memAllocated ;
 | |
|     int pointersTot ;
 | |
|     int pointersUsed ;
 | |
| } DATA4LIST ;
 | |
| 
 | |
| typedef struct RELATE4St
 | |
| {
 | |
|    LINK4 link ;
 | |
| 
 | |
|    S4CONV( int relationType, int relation_type ) ;  /* relate4exact, relate4scan, relate4approx */
 | |
|    S4CONV( int sortType, int sort_type ) ;
 | |
|    S4CONV( int errorAction, int error_action ) ;   /* relate4blank, relate4skipRec, relate4terminate */
 | |
|    S4CONV( int matchLen, int match_len ) ;      /* Number of characters to match */
 | |
| 
 | |
|    unsigned short int id ;
 | |
| 
 | |
|    char S4PTR *scanValue ;      /* Allocated Memory */
 | |
| 
 | |
|    struct RELATE4St S4PTR *master ;
 | |
|    struct RELATION4St S4PTR *relation ;
 | |
| 
 | |
|    S4CONV( CODE4 S4PTR *codeBase, CODE4 S4PTR *code_base ) ;
 | |
|    S4CONV( EXPR4 S4PTR *masterExpr, EXPR4 S4PTR *master_expr ) ; /* master expression */
 | |
|    S4CONV( TAG4 S4PTR *dataTag, TAG4 S4PTR *data_tag ) ;        /* Null means record # lookup */
 | |
|    DATA4 S4PTR *data ;   /* This is the master for 'slaves' (if any) and */
 | |
|                          /* possibly the slave for another data file. */
 | |
| 
 | |
|    LIST4 slaves ;
 | |
|    LIST4 relateList ;  /* A list of scan Relate pointers; */
 | |
| 
 | |
|    #ifndef S4CLIENT
 | |
|       int scanValueLen ;
 | |
|       int isRead ;
 | |
|       F4FLAG  set ;  /* Specify records for bitmap optimizable sub-expression. */
 | |
|       #ifndef S4STAND_ALONE
 | |
|          DATA4 S4PTR *dataOld ; /* the DATA4 that originally derived the relation */
 | |
|          int freeData ;         /* did the relate create the data structure */
 | |
|       #endif
 | |
|    #endif
 | |
| 
 | |
|    #ifdef S4SERVER
 | |
|       long dataId ;    /* used for client identification purposes (locking) */
 | |
|    #else
 | |
|       S4CONV( char S4PTR *oldRecord, char S4PTR *old_record ) ;
 | |
|    #endif
 | |
| 
 | |
|    #ifdef S4WINDOWS
 | |
|       HWND hWnd;
 | |
|       S4CONV( int totalChildren, 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 RELATION4St
 | |
| {
 | |
|    LINK4 link ;     /* for server version, the list of relations */
 | |
|    RELATE4 relate ;
 | |
| 
 | |
|    S4CONV( char S4PTR *exprSource, char S4PTR *expr_source ) ;
 | |
| 
 | |
|    char locked ;
 | |
| 
 | |
|    S4CONV( char S4PTR *sortSource, char S4PTR *sort_source ) ;
 | |
|    char sortEofFlag ;
 | |
|    int bitmapDisable ;     /* used for testing purposes to test disabled bitmaps */
 | |
| 
 | |
|    #ifndef S4CLIENT
 | |
|       char inSort ;       /* are we skipping for sorting purposes? */
 | |
|       LIST4 sortDataList ;  /* data list for the sort */
 | |
|       L4LOGICAL log ;
 | |
|       char S4PTR *otherData, bitmapsFreed, sortDoneFlag ;
 | |
|       SORT4 sort ;
 | |
|       FILE4 sortedFile ;
 | |
|       int  sortOtherLen ;
 | |
|       long sortRecTo, sortRecOn, sortFilePos, sortRecCount ;
 | |
|    #endif
 | |
|    int isInitialized ;
 | |
|    char skipBackwards ;   /* is backwards skipping enabled? */
 | |
| 
 | |
|    #ifdef S4CLIENT
 | |
|       int needsFreeing ;
 | |
|    #endif
 | |
| 
 | |
|    unsigned long relationId ;
 | |
| 
 | |
|    RELATE4 *currentRelateLevel ;   /* current pos for scans */
 | |
|    #ifdef S4SERVER
 | |
|       LIST4 localDataList ;
 | |
|       unsigned short int relateIdCount ;
 | |
|    #endif
 | |
| 
 | |
| /*   MEM4 S4PTR *relateMemory ;                  */
 | |
| /*   MEM4 S4PTR *relateListMemory ;              */
 | |
| /*   MEM4 S4PTR *relateDataListMemory ; */
 | |
| } RELATION4 ;
 | |
| 
 | |
| #define BITMAP4LEAF 0x40
 | |
| #define BITMAP4AND  0x20
 | |
| 
 | |
| typedef struct CONST4St
 | |
| {
 | |
|    LINK4  link ;
 | |
|    int    offset ;
 | |
|    int    len ;
 | |
| } CONST4 ;
 | |
| 
 | |
| typedef struct BITMAP4St
 | |
| {
 | |
|    LINK4 link ;
 | |
|    LINK4 eval ;
 | |
| 
 | |
|    /* flags */
 | |
|    char  branch ;
 | |
|    char  andOr ;    /* 1 = and, 2 = or, 0 means neither */
 | |
|    char  evaluated ;
 | |
|    char  finished;
 | |
|    char  saveCount ;
 | |
|    char  flipBase ;
 | |
|    char  pureMap ;
 | |
|    char  noMatch ;    /* no records match an and case */
 | |
| 
 | |
|    L4LOGICAL  S4PTR *log ;
 | |
|    RELATE4    S4PTR *relate ;
 | |
|    struct BITMAP4St S4PTR *base ;
 | |
|    int type ;   /* r4num, etc. */
 | |
| 
 | |
|    /* Branch only */
 | |
|    LIST4 children ;
 | |
|    TAG4FILE S4PTR *tag ;
 | |
| 
 | |
|    CONST4 lt ;
 | |
|    CONST4 le ;
 | |
|    CONST4 gt ;
 | |
|    CONST4 ge ;
 | |
|    CONST4 eq ;
 | |
|    LIST4 ne ;
 | |
| } BITMAP4 ;
 | |
| 
 | |
| #ifdef __cplusplus
 | |
|    extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* exported functions */
 | |
| S4EXPORT int S4FUNCTION relate4bottom( RELATE4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4changed( RELATE4 S4PTR * ) ;  /* Slave has been added or freed */
 | |
| S4EXPORT RELATE4 S4PTR * S4FUNCTION relate4createSlave( RELATE4 S4PTR *, DATA4 S4PTR *, char S4PTR *, TAG4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4doAll( RELATE4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4doOne( RELATE4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4eof( RELATE4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4errorAction( RELATE4 S4PTR *, const int ) ;  /* Set the error action */
 | |
| S4EXPORT int S4FUNCTION relate4free( RELATE4 S4PTR *, const int ) ;
 | |
| S4EXPORT RELATE4 S4PTR * S4FUNCTION relate4init( DATA4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4matchLen( RELATE4 S4PTR *, const int ) ;
 | |
| S4EXPORT int S4FUNCTION relate4next( RELATE4 S4PTR * S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4querySet( RELATE4 S4PTR *, const char S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4skip( RELATE4 S4PTR *, const long ) ;        /* Extended record skip */
 | |
| S4EXPORT int S4FUNCTION relate4skipEnable( RELATE4 S4PTR *, const int ) ;
 | |
| S4EXPORT int S4FUNCTION relate4sortSet( RELATE4 S4PTR *, const char S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4top( RELATE4 S4PTR * ) ;
 | |
| S4EXPORT int S4FUNCTION relate4type( RELATE4 S4PTR *, int ) ;          /* Set the relate type */
 | |
| /* used by codeReporter */
 | |
| S4EXPORT int S4FUNCTION relate4freeRelate( RELATE4 S4PTR *, const int ) ;
 | |
| #ifdef S4CB51
 | |
|    S4EXPORT int   S4FUNCTION relate4lock( RELATE4 S4PTR * ) ;
 | |
|    S4EXPORT int   S4FUNCTION relate4unlock( RELATE4 S4PTR * ) ;
 | |
| #else
 | |
|    #define relate4data( r4 ) ( (r4)->data )
 | |
|    #define relate4dataTag( r4 ) ( (r4)->dataTag )
 | |
|    #define relate4master( r4 ) ( (r4)->master )
 | |
|    #define relate4masterExpr( r4 ) ( ( (r4)->masterExpr == 0 ) ? ( 0 ) : ( (r4)->masterExpr->source ) )
 | |
| #endif
 | |
| #ifdef S4COMPILE_TEST
 | |
|    #ifndef S4OFF_MULTI
 | |
|       S4EXPORT int S4FUNCTION relate4lockAdd( RELATE4 S4PTR * ) ;
 | |
|    #endif
 | |
| #else
 | |
|    S4EXPORT int S4FUNCTION relate4lockAdd( RELATE4 S4PTR * ) ;
 | |
| #endif
 | |
| S4EXPORT int S4FUNCTION relate4optimizeable( RELATE4 S4PTR * ) ;
 | |
| 
 | |
| /* internally used functions */
 | |
| int bitmap4evaluate( L4LOGICAL *, const int ) ;
 | |
| BITMAP4 * bitmap4redistribute( BITMAP4 *, BITMAP4 *, const char ) ;
 | |
| BITMAP4 * bitmap4redistributeLeaf( BITMAP4 *, BITMAP4 *, BITMAP4 * ) ;
 | |
| BITMAP4 * bitmap4redistributeBranch( BITMAP4 *, BITMAP4 * ) ;
 | |
| BITMAP4 * bitmap4create( L4LOGICAL *, RELATE4 *, const char, const char ) ;
 | |
| int  bitmap4destroy( BITMAP4 * ) ;
 | |
| BITMAP4 * bitmap4combineLeafs( BITMAP4 *, BITMAP4 *, BITMAP4 * ) ;
 | |
| long bitmap4seek( BITMAP4 *, const CONST4 *, const char, const long, const int ) ;
 | |
| int  bitmap4copy( BITMAP4 *, const BITMAP4 * ) ;
 | |
| 
 | |
| void * const4return( L4LOGICAL *, const CONST4 * ) ;
 | |
| int const4memAlloc( L4LOGICAL *, const unsigned ) ;
 | |
| int const4duplicate( CONST4 *, const CONST4 *, L4LOGICAL * ) ;
 | |
| int const4get( CONST4 *, BITMAP4 *, L4LOGICAL *, const int ) ;
 | |
| int const4less( CONST4 *, CONST4 *, BITMAP4 * ) ;
 | |
| int const4eq( CONST4 *, CONST4 *, BITMAP4 * ) ;
 | |
| int const4lessEq( CONST4 *, CONST4 *, BITMAP4 * ) ;
 | |
| void const4addNe( BITMAP4 *, CONST4 * ) ;
 | |
| void const4deleteNe( LIST4 *, CONST4 * ) ;
 | |
| 
 | |
| int e4isConstant( E4INFO * ) ;
 | |
| int e4isTag( E4INFO_REPORT *, EXPR4 *, E4INFO *, DATA4 * ) ;
 | |
| 
 | |
| int log4buildDatabaseLists( L4LOGICAL * ) ;
 | |
| int log4true( L4LOGICAL * ) ;
 | |
| int log4bitmapDo( L4LOGICAL * ) ; /* Do everything regarding bitmaps */
 | |
| int log4determineEvaluationOrder( L4LOGICAL * ) ;
 | |
| 
 | |
| /* functions used to build the sort data list */
 | |
| int r4dataListAdd( LIST4 *, DATA4 *, RELATE4 * ) ;
 | |
| int r4dataListFind( LIST4 *, RELATE4 * ) ;
 | |
| void r4dataListFree( LIST4 * ) ;
 | |
| int r4dataListBuild( LIST4 *, RELATE4 *, EXPR4 *, int ) ;
 | |
| 
 | |
| void relate4freeBitmaps( RELATE4 * ) ;
 | |
| RELATE4 *relate4lookupRelate( RELATE4 *, const DATA4 * ) ;
 | |
| int relate4readIn( RELATE4 * ) ;   /* Read a record for this specific data file. */
 | |
| #ifndef S4STAND_ALONE
 | |
|    int relate4unpack( RELATION4 *, CONNECTION4 * ) ;
 | |
| #endif
 | |
| 
 | |
| #ifdef S4CLIENT
 | |
|    int relate4clientInit( RELATE4 * ) ;
 | |
| #endif
 | |
| 
 | |
| #ifdef __cplusplus
 | |
|    }
 | |
| #endif
 |