diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-11-12 16:27:47 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2002-11-12 16:27:47 +0000 |
commit | 2233fe22de4e6ff71d711b833cff595bd98b2b09 (patch) | |
tree | 16120b9787ed52f41dd868e26f70d88d988ed987 /include/mailutils/libsieve.h | |
parent | 0ba30cb1092adadc9cfef3bb9217f13fe272f612 (diff) | |
download | mailutils-2233fe22de4e6ff71d711b833cff595bd98b2b09.tar.gz mailutils-2233fe22de4e6ff71d711b833cff595bd98b2b09.tar.bz2 |
Added basic code generation and debugging
Diffstat (limited to 'include/mailutils/libsieve.h')
-rw-r--r-- | include/mailutils/libsieve.h | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/include/mailutils/libsieve.h b/include/mailutils/libsieve.h index bb99c3581..064e7176c 100644 --- a/include/mailutils/libsieve.h +++ b/include/mailutils/libsieve.h @@ -16,11 +16,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <sys/types.h> +#include <stdarg.h> #include <mailutils/mailutils.h> typedef struct sieve_machine sieve_machine_t; -typedef int (*sieve_instr_t) __P((sieve_machine_t *mach, list_t *args)); +typedef int (*sieve_handler_t) __P((sieve_machine_t *mach, + list_t args, list_t tags)); +typedef int (*sieve_printf_t) __P((void *data, const char *fmt, va_list ap)); +typedef int (*sieve_vprintf_t) __P((void *data, const char *fmt, va_list ap)); typedef enum { SVT_VOID, @@ -32,12 +36,15 @@ typedef enum { SVT_VALUE_LIST } sieve_data_type; +typedef struct sieve_runtime_tag sieve_runtime_tag_t; + typedef struct { sieve_data_type type; union { char *string; long number; list_t list; + sieve_runtime_tag_t *tag; } v; } sieve_value_t; @@ -47,10 +54,15 @@ typedef struct { sieve_data_type argtype; } sieve_tag_def_t; +struct sieve_runtime_tag { + int tag; + sieve_value_t *arg; +}; + typedef struct { char *name; int required; - sieve_instr_t instr; + sieve_handler_t handler; int num_req_args; sieve_data_type *req_args; int num_tags; @@ -59,18 +71,28 @@ typedef struct { void *sieve_alloc __P((size_t size)); -int sieve_open_source __P((const char *name)); -int sieve_parse __P((const char *name)); +void *sieve_palloc __P((list_t *pool, size_t size)); +void *sieve_prealloc __P((list_t *pool, void *ptr, size_t size)); +void sieve_pfree __P((list_t *pool, void *ptr)); +char *sieve_pstrdup __P((list_t *pool, const char *str)); + +int sieve_compile __P((sieve_machine_t *mach, const char *name, void *data, + sieve_printf_t errfn)); +void sieve_set_debug __P((sieve_machine_t *mach, sieve_printf_t debug, + int level)); + sieve_value_t * sieve_value_create __P((sieve_data_type type, void *data)); sieve_register_t *sieve_test_lookup __P((const char *name)); sieve_register_t *sieve_action_lookup __P((const char *name)); -int sieve_register_test __P((const char *name, sieve_instr_t instr, +int sieve_register_test __P((const char *name, sieve_handler_t handler, sieve_data_type *arg_types, sieve_tag_def_t *tags, int required)); -int sieve_register_action __P((const char *name, sieve_instr_t instr, +int sieve_register_action __P((const char *name, sieve_handler_t handler, sieve_data_type *arg_types, sieve_tag_def_t *tags, int required)); void sieve_slist_destroy __P((list_t *plist)); void sieve_require __P((list_t slist)); + +void sieve_abort __P((sieve_machine_t *mach)); |