File: eval.h

package info (click to toggle)
ht 2.0.14-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 6,296 kB
  • ctags: 17,147
  • sloc: cpp: 97,008; ansic: 16,159; sh: 3,455; lex: 226; makefile: 213; yacc: 127
file content (216 lines) | stat: -rw-r--r-- 5,742 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/* 
 *	HT Editor
 *	eval.h
 *
 *	Copyright (C) 1999, 2000, 2001 Stefan Weyergraf
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License version 2 as
 *	published by the Free Software Foundation.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef __EVAL_H__
#define __EVAL_H__

/*#define EVAL_DEBUG*/

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#include <math.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "evaltype.h"

#ifndef __cplusplus
#define bool int
#endif

typedef bool (*eval_func_handler)(eval_scalar *result, char *name, eval_scalarlist *params);
typedef bool (*eval_symbol_handler)(eval_scalar *result, char *name);

#include "lex.h"
#include "evalx.h"

#ifdef EVAL_DEBUG

int debug_dump_ident;

#endif

/*
 *
 */

#define MAX_FUNCNAME_LEN		16
#define MAX_SYMBOLNAME_LEN	32
#define MAX_ERRSTR_LEN		128

/*
int f2i(double f);
char *binstr2cstr(char *s, int len);
int bin2str(char *result, void *S, int len);
*/

/*
 *	ERROR HANDLING
 */

void clear_eval_error();
int get_eval_error(const char **str, int *pos);
void set_eval_error(const char *format,...);
void set_eval_error_ex(int pos, const char *format, ...);

/*
 *
 */


#ifdef EVAL_DEBUG

void integer_dump(eval_int *i);
void float_dump(eval_float *f);
void string_dump(eval_str *s);

#endif

void string_destroy(eval_str *s);

/*
 *	SCALARLIST
 */

void scalarlist_set(eval_scalarlist *l, eval_scalar *s);
void scalarlist_concat(eval_scalarlist *l, eval_scalarlist *a, eval_scalarlist *b);
void scalarlist_destroy(eval_scalarlist *l);
void scalarlist_destroy_gentle(eval_scalarlist *l);

#ifdef EVAL_DEBUG
void scalarlist_dump(eval_scalarlist *l);
#endif

/*
 *	SCALAR
 */

void scalar_setint(eval_scalar *s, eval_int *i);
void scalar_setstr(eval_scalar *s, eval_str *t);

#ifdef EVAL_DEBUG
void scalar_dump(eval_scalar *s);
#endif

void scalar_create_int(eval_scalar *result, const eval_int *t);
void scalar_create_int_c(eval_scalar *result, const int i);
void scalar_create_int_q(eval_scalar *result, const uint64 q);
void scalar_create_str(eval_scalar *result, const eval_str *t);
void scalar_create_str_c(eval_scalar *result, const char *cstr);
void scalar_create_float(eval_scalar *result, const eval_float *t);
void scalar_create_float_c(eval_scalar *result, const double f);

void scalar_clone(eval_scalar *result, const eval_scalar *s);

void scalar_context_str(const eval_scalar *s, eval_str *t);
void scalar_context_int(const eval_scalar *s, eval_int *t);
void scalar_context_float(const eval_scalar *s, eval_float *t);
void string_concat(eval_str *s, eval_str *a, eval_str *b);
void scalar_concat(eval_scalar *s, const eval_scalar *a, const eval_scalar *b);
void scalar_destroy(eval_scalar *s);
int string_compare(const eval_str *a, const eval_str *b);
int scalar_strop(eval_scalar *xr, const eval_scalar *xa, const eval_scalar *xb, int op);
int scalar_float_op(eval_scalar *xr, const eval_scalar *xa, const eval_scalar *xb, int op);
int scalar_int_op(eval_scalar *xr, const eval_scalar *xa, const eval_scalar *xb, int op);
int scalar_op(eval_scalar *xr, eval_scalar *xa, eval_scalar *xb, int op);
void scalar_negset(eval_scalar *xr, eval_scalar *xa);
void scalar_notset(eval_scalar *xr, eval_scalar *xa);
void scalar_lnotset(eval_scalar *xr, eval_scalar *xa);
void scalar_miniif(eval_scalar *xr, eval_scalar *xa, eval_scalar *xb, eval_scalar *xc);
void sprintf_puts(char **b, char *blimit, const char *buf);
int sprintf_percent(char **fmt, int *fmtl, char **b, char *blimit, eval_scalar *s);
int func_sprintf(eval_scalar *r, const eval_str *format, const eval_scalarlist *scalars);

/*
 *	FUNCTIONS
 */

int func_eval(eval_scalar *r, eval_str *p);
int func_error(eval_scalar *r, eval_str *s);
eval_protomatch match_evalfunc_proto(char *name, eval_scalarlist *params, eval_func *proto);
int exec_evalfunc(eval_scalar *r, eval_scalarlist *params, eval_func *proto);
int evalsymbol(eval_scalar *r, char *sname);
int std_eval_func_handler(eval_scalar *r, char *fname, eval_scalarlist *params, eval_func *protos);
int evalfunc(eval_scalar *r, char *fname, eval_scalarlist *params);
void *eval_get_context();
void eval_set_context(void *context);
void eval_set_func_handler(eval_func_handler func_handler);
void eval_set_symbol_handler(eval_symbol_handler symbol_handler);

#ifdef __cplusplus
}
#endif /* __cplusplus */

/*
 *	Debugging
 */

#ifdef EVAL_DEBUG

extern int debug_dump_ident;

#define DEBUG_DUMP_INDENT {\
	int i;\
	for (i=0; i<debug_dump_ident; i++) printf("\t");\
}

#define DEBUG_DUMP(text...) {\
	DEBUG_DUMP_INDENT;\
	printf(text);\
	printf("\n");\
}
	
#define DEBUG_DUMP_SCALAR(scalarptr, text...) {\
	DEBUG_DUMP_INDENT;\
	printf(text);\
	scalar_dump(scalarptr);\
	printf("\n");\
}

#define DEBUG_DUMP_SCALARLIST(scalarlistptr, text...) {\
	DEBUG_DUMP_INDENT;\
	printf(text);\
	scalarlist_dump(scalarlistptr);\
	printf("\n");\
}

#define DEBUG_DUMP_INDENT_IN debug_dump_ident++
#define DEBUG_DUMP_INDENT_OUT debug_dump_ident--

#else

#define DEBUG_DUMP(text...)
#define DEBUG_DUMP_SCALAR(scalarptr, text...)
#define DEBUG_DUMP_SCALARLIST(scalarlistptr, text...)
#define DEBUG_DUMP_INDENT_IN
#define DEBUG_DUMP_INDENT_OUT

#endif

#endif /* __EVAL_H__ */