/********************************************
copyright 1991, Michael D. Brennan
This is a source file for mawk, an implementation of
the AWK programming language.
Mawk is distributed without warranty under the terms of
the GNU General Public License, version 2, 1991.
********************************************/
* Revision 3.6 92/01/21 17:31:45 brennan
* moved ison() macro out of rexp[23].c
* Revision 3.5 91/10/29 10:53:55 brennan
* Revision 3.4 91/08/13 09:10:02 brennan
* Revision 3.3 91/06/15 09:40:25 brennan
* gcc defines __STDC__ but might not have stdlib.h
* Revision 3.2 91/06/10 16:18:19 brennan
* Revision 3.1 91/06/07 10:33:18 brennan
* Revision 1.3 91/06/05 08:57:57 brennan
* Revision 1.2 91/06/03 07:23:26 brennan
* changed type of RE_error_trap
* Revision 1.1 91/06/03 07:05:41 brennan
#define MAWK /* THINK C doesn't allow compile-time definitions */
#define SIZE_T(x) (size_t)(x)
#define PROTO(name, args) name args
#define PROTO(name, args) name()
VOID
*malloc(), *realloc() ;
VOID
*PROTO( RE_malloc
, (unsigned) ) ;
VOID
*PROTO( RE_realloc
, (void *,unsigned) ) ;
/* finite machine state types */
typedef unsigned char BV
[32] ; /* bit vector */
unsigned char len
; /* used for M_STR */
#define STATESZ (sizeof(STATE))
{ STATE
*start
, *stop
; } MACHINE
;
#define T_START 8 /* ^ */
#define T_CLASS 11 /* starts with [ */
#define T_SLASH 12 /* \ */
#define T_CHAR 13 /* all the rest */
/* precedences and error codes */
#define ison(b,x) ((b)[((unsigned char)(x))>>3] & (1<<((x)&7)))
/* struct for the run time stack */
STATE
*m
; /* save the machine ptr */
int u
; /* save the u_flag */
char *s
; /* save the active string ptr */
char *ss
; /* save the match start -- only used by REmatch */
} RT_STATE
; /* run time state */
void PROTO(RE_error_trap
, (int) ) ;
MACHINE
PROTO( RE_u
, (void) ) ;
MACHINE
PROTO( RE_start
, (void) ) ;
MACHINE
PROTO( RE_end
, (void) ) ;
MACHINE
PROTO( RE_any
, (void) ) ;
MACHINE
PROTO( RE_str
, (char *, unsigned) ) ;
MACHINE
PROTO( RE_class
, (BV
*) ) ;
void PROTO( RE_cat
, (MACHINE
*, MACHINE
*) ) ;
void PROTO( RE_or
, (MACHINE
*, MACHINE
*) ) ;
void PROTO( RE_close
, (MACHINE
*) ) ;
void PROTO( RE_poscl
, (MACHINE
*) ) ;
void PROTO( RE_01
, (MACHINE
*) ) ;
void PROTO( RE_panic
, (char *) ) ;
char *PROTO( str_str
, (char *, char *, unsigned) ) ;
void PROTO( RE_lex_init
, (char *) ) ;
int PROTO( RE_lex
, (MACHINE
*) ) ;
void PROTO( RE_run_stack_init
, (void) ) ;
RT_STATE
*PROTO( RE_new_run_stack
, (void) ) ;