home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c163 / 3.ddi / SCRE_SOU.EXE / E4EXPR.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-10-29  |  6.5 KB  |  221 lines

  1. /* e4expr.h   (c)Copyright Sequiter Software Inc., 1990-1992.  All rights reserved. */
  2.  
  3. #define E4PARM_STACK_SIZE 20
  4. #define E4MAX_PARMS 3
  5.  
  6. extern unsigned e4buf_len ;
  7. extern char    S4PTR *e4buf ;
  8.  
  9. typedef struct
  10. {
  11.    char    S4PTR *ptr ;         /* The original string */
  12.    int      pos, len ;    /* Source expression position and length */
  13. } S4SCAN ;
  14.  
  15. typedef struct
  16. {
  17.    char S4PTR *ptr ;
  18.    int   pos, len ;
  19.    int   do_extend ;
  20.    C4CODE S4PTR *code_base ;
  21. } S4STACK ;
  22.  
  23. typedef struct parse_parm_st
  24. {
  25.    char    S4PTR *ptr ;
  26.    int      type ;
  27. } E4PARSE_PARM ;
  28.  
  29. typedef struct 
  30. {
  31.    unsigned pos ;       /* Parameter position within the string */
  32.    int      type ;      /* The type of the parameter */
  33.    unsigned len ;       /* The number of bytes in the parameter */
  34. } E4EXPR_PARM ;
  35.  
  36. typedef struct 
  37. {
  38.    E4EXPR_PARM  parms[E4PARM_STACK_SIZE] ;
  39.    int     on_parm ;
  40.    D4DATA S4PTR *data ;
  41.    C4CODE S4PTR *code_base ;
  42. } E4PARMS ;
  43.  
  44. typedef struct
  45. {
  46.    E4EXPR   expr ;
  47.  
  48.    S4SCAN   scan ;     /* Character Expression */
  49.    S4STACK  op ;    /* Operation stack */
  50.    S4STACK  result ;
  51.    C4CODE  S4PTR *code_base ;
  52. } E4PARSE ;
  53.  
  54. typedef struct
  55. {
  56.    int      code ;
  57.    int      name_len ;
  58.    char     name[12] ;
  59.    #ifdef S4UNIX
  60.       void     (S4PTR *function_ptr)() ;
  61.    #else
  62.       void     (S4PTR *function_ptr)(E4PARMS S4PTR *) ;
  63.    #endif
  64.    int      priority ;
  65.    int      return_type ;
  66.    int      num_parms ;             /* 0 - No Return;  -1 First Parm. Specifies # */
  67.    int      type[E4MAX_PARMS] ;        /* type[0] is the return type */
  68. }  E4FUNCTIONS ;
  69.  
  70. /* Integer Codes for Function/Operator parameters and returns */
  71. #define  t4num_str   'n'
  72. #define  t4num_doub  'F'
  73. #define  t4num_bcd   'N'
  74. #define  t4date_doub 'D'
  75. #define  t4date_str  'd'
  76. #define  t4str       'C'
  77. #define  t4log       'L'
  78. #ifdef S4CLIPPER
  79. #define  t4num_clip  'c'
  80. #endif
  81. #ifdef S4FOX
  82.    #define  t4num_fox       'f'
  83.    #define  t4date_fox      'x'
  84. #endif
  85.  
  86. /* This section specifies the breakdown of the functions in file 'e4functi.c'. */
  87.  
  88. /* Codes for Immediate Data in Compile String */
  89. #define  I4FIELD_STR        0
  90. #define  I4FIELD_LOG        1
  91. #define  I4FIELD_DATE_D     2
  92. #define  I4FIELD_DATE_S     3
  93. #define  I4FIELD_NUM_D      4
  94. #define  I4FIELD_NUM_S      5
  95. #define  I4FIELD_MEMO       6
  96.  
  97. #define  LAST_I4FIELD       5
  98.  
  99. #define  I4STRING           6
  100. #define  I4DOUBLE           7
  101.  
  102. #define  I4LAST_IMMEDIATE   7
  103.  
  104. #define  E4FIRST_LOG          8  /* Range of Logical Operators */
  105. #define  E4LAST_LOG          12
  106.          
  107. #define  E4FIRST_OPERATOR    13  /* Range of Other Operators */
  108. #define  E4LAST_OPERATOR     48
  109.  
  110. #define  E4FIRST_FUNCTION    49  /* Start of the List of Functions */
  111.  
  112. /* Additional Definitions */
  113.  
  114. extern E4FUNCTIONS  v4functions[] ;
  115.  
  116. #define E4OPERATOR_LEN  128
  117.  
  118. /* Quasi Operators */
  119. #define  Q4NO_FUNCTION  -2
  120. #define  Q4L_BRACKET    -3
  121. #define  Q4R_BRACKET    -4
  122. #define  Q4COMMA        -5
  123.  
  124. #ifdef __cplusplus
  125.    extern "C" {
  126. #endif
  127.  
  128. double  S4FUNCTION e4double( E4EXPR S4PTR * ) ;
  129. void    S4FUNCTION e4free( E4EXPR S4PTR * ) ;
  130. int     S4FUNCTION e4key( E4EXPR S4PTR *, char S4PTR ** ) ;
  131. E4EXPR S4PTR *S4FUNCTION e4parse( D4DATA S4PTR *, char S4PTR * ) ;
  132. char  S4PTR *  S4FUNCTION e4source( E4EXPR S4PTR * ) ;
  133. int     S4FUNCTION e4true( E4EXPR S4PTR * ) ;
  134. int     S4FUNCTION e4type( E4EXPR S4PTR * ) ;
  135. int     S4FUNCTION e4vary( E4EXPR S4PTR *, char S4PTR ** ) ;
  136.  
  137. #ifdef __cplusplus
  138.    }
  139. #endif
  140.  
  141. int    e4field_function( F4FIELD S4PTR *) ;
  142. int    e4get_f_code( E4PARSE S4PTR *, char S4PTR *, E4PARSE_PARM S4PTR * ) ;
  143. int    e4get_operator( E4PARSE S4PTR *, int S4PTR * ) ;
  144. int    e4lookup( char S4PTR *,int,int,int ) ;
  145. int    e4parse_expr( E4PARSE S4PTR * ) ;
  146. int    e4parse_function( E4PARSE S4PTR *, char S4PTR *,int ) ;
  147. int    e4parse_value( E4PARSE S4PTR * ) ;
  148. int    e4type_check( E4PARSE S4PTR * ) ;
  149.  
  150. char   s4scan_char( S4SCAN S4PTR * ) ;
  151. void   s4scan_init( S4SCAN S4PTR *, char S4PTR * ) ;
  152. char   s4scan_pop( S4SCAN S4PTR *) ; /* Returns current char and goes to the next */
  153. int    s4scan_search( S4SCAN S4PTR *, char ) ; /* Returns # of characters scanned */
  154. int    s4scan_range( S4SCAN S4PTR *, char, char ) ;
  155.  
  156. int    s4stack_cur( S4STACK S4PTR * ) ;
  157. int    s4stack_pop( S4STACK S4PTR * ) ;
  158. int    s4stack_push_int( S4STACK S4PTR *, int ) ;
  159. int    s4stack_push_str( S4STACK S4PTR *, void S4PTR *, int ) ;
  160.  
  161. void   e4parms_set( E4PARMS S4PTR *, void S4PTR *, unsigned, int ) ;
  162. void   e4parms_set_logical( E4PARMS S4PTR *, int ) ;
  163. void   e4parms_set_double( E4PARMS S4PTR *, double ) ;
  164. #ifdef S4FOX
  165.    signed char  S4PTR *e4parms_int_ptr( E4PARMS S4PTR *, int ) ;
  166. #else
  167.    int   S4PTR *e4parms_int_ptr( E4PARMS S4PTR *, int ) ;
  168. #endif
  169. double S4PTR *e4parms_double_ptr( E4PARMS S4PTR *, int ) ;
  170.  
  171. void   e4parms_init( E4PARMS S4PTR *, D4DATA S4PTR * ) ;
  172. int    e4parms_check( E4PARMS S4PTR * ) ;
  173. int    e4parms_pop( E4PARMS S4PTR *, int ) ;
  174. void   e4parms_pos_align( E4PARMS S4PTR *) ;
  175. void   e4parms_fix_pos( E4PARMS S4PTR * );
  176. int    e4parms_push( E4PARMS S4PTR * ) ;
  177.  
  178. int    e4parms_space_reserve( E4PARMS S4PTR *, unsigned ) ;
  179.  
  180. void   e4true_eval(E4PARMS S4PTR *) ;
  181. void   e4false(E4PARMS S4PTR *) ;
  182. void   e4add(E4PARMS S4PTR *) ;
  183. void   e4concatenate(E4PARMS S4PTR *) ;
  184. void   e4sub(E4PARMS S4PTR *) ;
  185. void   e4concat_two(E4PARMS S4PTR *) ;
  186. void   e4multiply(E4PARMS S4PTR *) ;
  187. void   e4divide(E4PARMS S4PTR *) ;
  188. void   e4power(E4PARMS S4PTR *) ;
  189. void   e4not_equal(E4PARMS S4PTR *) ;
  190. void   e4equal(E4PARMS S4PTR *) ;
  191. void   e4greater(E4PARMS S4PTR *) ;
  192. void   e4less(E4PARMS S4PTR *) ;
  193. void   e4greater_eq(E4PARMS S4PTR *) ;
  194. void   e4less_eq(E4PARMS S4PTR *) ;
  195. void   e4not(E4PARMS S4PTR *) ;
  196. void   e4or(E4PARMS S4PTR *) ;
  197. void   e4and(E4PARMS S4PTR *) ;
  198. void   e4ctod(E4PARMS S4PTR *) ;
  199. void   e4dtoc(E4PARMS S4PTR *) ;
  200. void   e4dtos(E4PARMS S4PTR *) ;
  201. void   e4stod(E4PARMS S4PTR *) ;
  202. void   e4date(E4PARMS S4PTR *) ;
  203. void   e4year(E4PARMS S4PTR *) ;
  204. void   e4month(E4PARMS S4PTR *) ;
  205. void   e4day(E4PARMS S4PTR *) ;
  206. void   e4del(E4PARMS S4PTR *) ;
  207. void   e4deleted(E4PARMS S4PTR *) ;
  208. void   e4iif(E4PARMS S4PTR *) ;
  209. void   e4reccount(E4PARMS S4PTR *) ;
  210. void   e4recno(E4PARMS S4PTR *) ;
  211. void   e4str(E4PARMS S4PTR *) ;
  212. void   e4substr(E4PARMS S4PTR *) ;
  213. void   e4time(E4PARMS S4PTR *) ;
  214. void   e4upper(E4PARMS S4PTR *) ;
  215. void   e4val(E4PARMS S4PTR *) ;
  216. void   e4contain(E4PARMS S4PTR *) ;
  217.  
  218. #ifdef S4CLIPPER
  219.    void e4descend(E4PARMS S4PTR *);
  220. #endif
  221.