which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
277 lines
8.1 KiB
C
Executable File
277 lines
8.1 KiB
C
Executable File
/* e4expr.h (c)Copyright Sequiter Software Inc., 1990-1994. All rights reserved. */
|
|
|
|
#define E4MAX_PARMS 3
|
|
#define E4MAX_STACK_ENTRIES 20
|
|
|
|
struct TOTAL4st ;
|
|
|
|
typedef struct
|
|
{
|
|
void (S4PTR *function_ptr)() ;
|
|
char S4PTR *name ;
|
|
short code ;
|
|
char name_len ;
|
|
char priority ;
|
|
char return_type ;
|
|
#ifdef S4UNIX
|
|
char num_parms ; /* -1 means that the number is flexible */
|
|
#else
|
|
signed char num_parms ; /* -1 means that the number is flexible */
|
|
#endif
|
|
char type[E4MAX_PARMS] ; /* Parameter types */
|
|
} E4FUNCTIONS ;
|
|
|
|
typedef struct
|
|
{
|
|
char S4PTR *ptr ; /* The original string */
|
|
int pos, len ; /* Source expression position and length */
|
|
} S4SCAN ;
|
|
|
|
typedef struct
|
|
{
|
|
char S4PTR *ptr ;
|
|
unsigned int pos, len ;
|
|
int do_extend ;
|
|
CODE4 S4PTR *code_base ;
|
|
} S4STACK ;
|
|
|
|
typedef struct
|
|
{
|
|
EXPR4 expr ;
|
|
S4STACK constants ;
|
|
S4SCAN scan ; /* Character Expression */
|
|
S4STACK op ; /* Operation stack */
|
|
CODE4 S4PTR *code_base ;
|
|
} E4PARSE ;
|
|
|
|
typedef struct
|
|
{
|
|
LINK4 link ;
|
|
EXPR4 S4PTR *expr ;
|
|
struct TOTAL4st *total ; /* If calculation is for a total. */
|
|
char name[20] ;
|
|
int cur_result_pos ;
|
|
} EXPR4CALC ;
|
|
|
|
extern char S4PTR *expr4buf ; /* Pointer to CODE4 Working memory */
|
|
/* expr4buf_len no longer exists... */ /* extern unsigned expr4buf_len ;*/ /* Length, e4execute() assumes length long enough */
|
|
|
|
extern char S4PTR * S4PTR *expr4 ; /* Expression Parms; Points to next parm to be placed */
|
|
|
|
extern EXPR4 S4PTR *expr4ptr ; /* Points to expression being evaluated */
|
|
extern E4INFO S4PTR *expr4info_ptr ;
|
|
extern char S4PTR *expr4constants ; /* Points to constant info */
|
|
|
|
extern E4FUNCTIONS v4functions[] ;
|
|
|
|
/* Types normally used for Function/Operator parameters and returns */
|
|
#define r4date 'D'
|
|
#define r4date_doub 'd'
|
|
#define r4log 'L'
|
|
#define r4num 'N'
|
|
#define r4num_doub 'n'
|
|
#define r4str 'C'
|
|
#define r4memo 'M'
|
|
|
|
/* Codes for Immediate Data in Compile String */
|
|
#define E4FIELD_STR 0
|
|
#define E4FIELD_STR_CAT 1
|
|
#define E4FIELD_LOG 2
|
|
#define E4FIELD_DATE_D 3
|
|
#define E4FIELD_DATE_S 4
|
|
#define E4FIELD_NUM_D 5
|
|
#define E4FIELD_NUM_S 6
|
|
#define E4FIELD_MEMO 7
|
|
|
|
#define E4DOUBLE 8
|
|
#define E4STRING 9
|
|
|
|
#define E4LOG_LOW 10
|
|
#define E4LOG_HIGH 13
|
|
|
|
#define E4LAST_FIELD 7
|
|
|
|
#define E4FIRST_LOG 10 /* Range of Logical Operators */
|
|
#define E4LAST_LOG 14
|
|
#define E4FIRST_OPERATOR 15 /* Range of Other Operators */
|
|
#define E4LAST_OPERATOR 51
|
|
#define E4COMPARE_START 26
|
|
#define E4COMPARE_END 46
|
|
#define E4FIRST_FUNCTION 52 /* Start of the List of Functions */
|
|
|
|
#define E4OR 15
|
|
#define E4AND 16
|
|
#define E4CONCATENATE 17
|
|
#define E4CONCAT_TRIM 18
|
|
#define E4CONCAT_TWO 22
|
|
#define E4EQUAL 26
|
|
#define E4NOT_EQUAL 30
|
|
#define E4GREATER_EQ 35
|
|
#define E4LESS_EQ 38
|
|
#define E4GREATER 41
|
|
#define E4LESS 44
|
|
#define E4DEL 52
|
|
#define E4STR 53
|
|
#define E4SUBSTR 54
|
|
#define E4TIME 55
|
|
#define E4UPPER 56
|
|
#define E4DTOS 57
|
|
#define E4DTOC 59
|
|
#define E4TRIM 61
|
|
#define E4LTRIM 62
|
|
#define E4LEFT 63
|
|
#define E4IIF 64
|
|
#define E4STOD 68
|
|
#define E4CTOD 69
|
|
#define E4DELETED 77
|
|
#define E4RECCOUNT 78
|
|
#define E4RECNO 79
|
|
#define E4CALC_FUNCTION 81
|
|
#define E4TOTAL 82
|
|
#define E4DESCEND_STR 84
|
|
|
|
#define E4DONE -2
|
|
#define E4NO_FUNCTION -3
|
|
#define E4COMMA -4
|
|
#define E4L_BRACKET -5
|
|
#define E4ANOTHER_PARM -6
|
|
|
|
/* Interface Functions */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
S4EXPORT double S4FUNCTION expr4double( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4double2( EXPR4 S4PTR *, double * ) ;
|
|
S4EXPORT void S4FUNCTION expr4free( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4len( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4key( EXPR4 S4PTR *, char S4PTR * S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4key_convert( EXPR4 S4PTR *, char S4PTR * S4PTR *, int, int ) ;
|
|
S4EXPORT int S4FUNCTION expr4key_len( EXPR4 S4PTR * ) ;
|
|
S4EXPORT EXPR4 S4PTR *S4FUNCTION expr4parse( DATA4 S4PTR *, char S4PTR * ) ;
|
|
S4EXPORT char S4PTR *S4FUNCTION expr4source( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4type( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4true( EXPR4 S4PTR * ) ;
|
|
S4EXPORT long S4FUNCTION e4long( EXPR4 S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION e4to_key( EXPR4 S4PTR *, char S4PTR * S4PTR * ) ;
|
|
S4EXPORT int S4FUNCTION expr4vary( EXPR4 S4PTR *, char S4PTR * S4PTR * ) ;
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/* Parsing Functions */
|
|
E4INFO *e4function_add( EXPR4 *, int ) ;
|
|
int e4add_constant( E4PARSE *, int, void *, unsigned ) ;
|
|
|
|
int e4get_operator( E4PARSE S4PTR *, int S4PTR * ) ;
|
|
int S4FUNCTION e4lookup( char S4PTR *,int,int,int ) ;
|
|
int expr4parse_expr( E4PARSE S4PTR * ) ;
|
|
int expr4parse_function( E4PARSE S4PTR *, char S4PTR *,int ) ;
|
|
int expr4parse_value( E4PARSE S4PTR * ) ;
|
|
int expr4true_check( E4PARSE S4PTR * ) ;
|
|
|
|
char s4scan_char( S4SCAN S4PTR * ) ;
|
|
void s4scan_init( S4SCAN S4PTR *, char S4PTR * ) ;
|
|
char s4scan_pop( S4SCAN S4PTR *) ; /* Returns current char and goes to the next */
|
|
int s4scan_search( S4SCAN S4PTR *, char ) ; /* Returns # of characters scanned */
|
|
int s4scan_range( S4SCAN S4PTR *, int, int ) ;
|
|
|
|
int s4stack_cur( S4STACK S4PTR * ) ;
|
|
int s4stack_pop( S4STACK S4PTR * ) ;
|
|
int s4stack_push_int( S4STACK S4PTR *, int ) ;
|
|
int s4stack_push_str( S4STACK S4PTR *, void S4PTR *, int ) ;
|
|
|
|
/* Execute Functions */
|
|
void e4add( void ) ;
|
|
void e4add_date( void ) ;
|
|
void e4and( void ) ;
|
|
void e4calc_function( void ) ;
|
|
void e4calc_total( void ) ;
|
|
void e4concat_special( char ) ;
|
|
void e4concat_trim( void ) ;
|
|
void e4concat_two( void ) ;
|
|
void e4contain( void ) ;
|
|
void e4copy_constant( void ) ;
|
|
void e4field_copy( void ) ;
|
|
void e4copy_parm( void ) ;
|
|
void e4ctod( void ) ;
|
|
void e4date( void ) ;
|
|
void e4day( void ) ;
|
|
void e4day_doub( void ) ;
|
|
void e4del( void ) ;
|
|
void e4deleted( void ) ;
|
|
void e4divide( void ) ;
|
|
void e4dtoc( void ) ;
|
|
void e4dtoc_doub( void ) ;
|
|
void e4dtos_doub( void ) ;
|
|
void e4equal( void ) ;
|
|
void e4false( void ) ;
|
|
void e4field_date_d( void ) ;
|
|
void e4field_log( void ) ;
|
|
void e4field_memo( void ) ;
|
|
void e4field_num_d( void ) ;
|
|
void e4greater( void ) ;
|
|
void e4greater_doub( void ) ;
|
|
void e4greater_eq( void ) ;
|
|
void e4greater_eq_doub( void ) ;
|
|
void e4iif( void ) ;
|
|
void e4less( void ) ;
|
|
void e4less_doub( void ) ;
|
|
void e4less_eq( void ) ;
|
|
void e4less_eq_doub( void ) ;
|
|
void e4ltrim( void ) ;
|
|
void e4month( void ) ;
|
|
void e4month_doub( void ) ;
|
|
void e4multiply( void ) ;
|
|
void e4new_function( void ) ;
|
|
void e4nop( void ) ;
|
|
void e4not( void ) ;
|
|
void e4not_equal( void ) ;
|
|
void e4or( void ) ;
|
|
void e4field_add( void ) ;
|
|
void e4parm_remove( void ) ;
|
|
void e4power( void ) ;
|
|
void e4reccount( void ) ;
|
|
void e4recno( void ) ;
|
|
void e4stod( void ) ;
|
|
void e4str( void ) ;
|
|
void e4sub( void ) ;
|
|
void e4sub_date( void ) ;
|
|
void e4substr( void ) ;
|
|
void e4time( void ) ;
|
|
void e4trim( void ) ;
|
|
void expr4true_function( void ) ;
|
|
void e4upper( void ) ;
|
|
void e4val( void ) ;
|
|
void e4year( void ) ;
|
|
void e4year_doub( void ) ;
|
|
void e4pageno( void ) ;
|
|
#ifdef S4CLIPPER
|
|
void e4descend_str( void ) ;
|
|
void e4descend_num_doub( void ) ;
|
|
void e4descend_num_str( void ) ;
|
|
void e4descend_date_doub( void ) ;
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Relate Module and Report Writer Functions */
|
|
S4EXPORT int S4FUNCTION expr4compare_flip( int ) ;
|
|
S4EXPORT int S4FUNCTION expr4execute( EXPR4 S4PTR *, int, void S4PTR * S4PTR * ) ;
|
|
S4EXPORT void S4FUNCTION expr4functions(E4FUNCTIONS S4PTR * S4PTR *) ;
|
|
|
|
S4EXPORT EXPR4 S4PTR *S4FUNCTION expr4calc_parse( DATA4 S4PTR *, char S4PTR * ) ;
|
|
S4EXPORT void S4FUNCTION expr4calc_delete( EXPR4CALC S4PTR * ) ;
|
|
S4EXPORT void S4FUNCTION expr4calc_reset( CODE4 S4PTR * ) ;
|
|
S4EXPORT void S4FUNCTION expr4calc_massage( EXPR4CALC S4PTR * );
|
|
S4EXPORT EXPR4CALC *S4FUNCTION expr4calc_create( CODE4 S4PTR *, EXPR4 S4PTR *, char S4PTR * ) ;
|
|
S4EXPORT EXPR4CALC *S4FUNCTION expr4calc_lookup( CODE4 S4PTR *, char S4PTR *, unsigned ) ;
|
|
S4EXPORT int S4FUNCTION expr4calc_name_change( EXPR4 S4PTR * S4PTR *, char S4PTR *, char S4PTR * ) ;
|
|
S4EXPORT void S4FUNCTION expr4calc_result_pos( EXPR4CALC S4PTR *, int ) ;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|