gpgscm: Fix string.
[gnupg.git] / tests / gpgscm / scheme-private.h
1 /* scheme-private.h */
2
3 #ifndef _SCHEME_PRIVATE_H
4 #define _SCHEME_PRIVATE_H
5
6 #include "scheme.h"
7 /*------------------ Ugly internals -----------------------------------*/
8 /*------------------ Of interest only to FFI users --------------------*/
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 enum scheme_port_kind {
15   port_free=0,
16   port_file=1,
17   port_string=2,
18   port_srfi6=4,
19   port_input=16,
20   port_output=32,
21   port_saw_EOF=64
22 };
23
24 typedef struct port {
25   unsigned char kind;
26   union {
27     struct {
28       FILE *file;
29       int closeit;
30 #if SHOW_ERROR_LINE
31       int curr_line;
32       char *filename;
33 #endif
34     } stdio;
35     struct {
36       char *start;
37       char *past_the_end;
38       char *curr;
39     } string;
40   } rep;
41 } port;
42
43 /* cell structure */
44 struct cell {
45   unsigned int _flag;
46   union {
47     struct {
48       char   *_svalue;
49       int   _length;
50     } _string;
51     num _number;
52     port *_port;
53     foreign_func _ff;
54     struct {
55       struct cell *_car;
56       struct cell *_cdr;
57     } _cons;
58     struct {
59          char *_data;
60          const foreign_object_vtable *_vtable;
61     } _foreign_object;
62   } _object;
63 };
64
65 struct scheme {
66 /* arrays for segments */
67 func_alloc malloc;
68 func_dealloc free;
69
70 /* return code */
71 int retcode;
72 int tracing;
73
74
75 #ifndef CELL_SEGSIZE
76 #define CELL_SEGSIZE    5000  /* # of cells in one segment */
77 #endif
78 #ifndef CELL_NSEGMENT
79 #define CELL_NSEGMENT   10    /* # of segments for cells */
80 #endif
81 void *alloc_seg[CELL_NSEGMENT];
82 pointer cell_seg[CELL_NSEGMENT];
83 int     last_cell_seg;
84
85 /* We use 4 registers. */
86 pointer args;            /* register for arguments of function */
87 pointer envir;           /* stack register for current environment */
88 pointer code;            /* register for current code */
89 pointer dump;            /* stack register for next evaluation */
90
91 int interactive_repl;    /* are we in an interactive REPL? */
92
93 struct cell _sink;
94 pointer sink;            /* when mem. alloc. fails */
95 struct cell _NIL;
96 pointer NIL;             /* special cell representing empty cell */
97 struct cell _HASHT;
98 pointer T;               /* special cell representing #t */
99 struct cell _HASHF;
100 pointer F;               /* special cell representing #f */
101 struct cell _EOF_OBJ;
102 pointer EOF_OBJ;         /* special cell representing end-of-file object */
103 pointer oblist;          /* pointer to symbol table */
104 pointer global_env;      /* pointer to global environment */
105 pointer c_nest;          /* stack for nested calls from C */
106
107 /* global pointers to special symbols */
108 pointer LAMBDA;               /* pointer to syntax lambda */
109 pointer QUOTE;           /* pointer to syntax quote */
110
111 pointer QQUOTE;               /* pointer to symbol quasiquote */
112 pointer UNQUOTE;         /* pointer to symbol unquote */
113 pointer UNQUOTESP;       /* pointer to symbol unquote-splicing */
114 pointer FEED_TO;         /* => */
115 pointer COLON_HOOK;      /* *colon-hook* */
116 pointer ERROR_HOOK;      /* *error-hook* */
117 pointer SHARP_HOOK;  /* *sharp-hook* */
118 #if USE_COMPILE_HOOK
119 pointer COMPILE_HOOK;  /* *compile-hook* */
120 #endif
121
122 pointer free_cell;       /* pointer to top of free cells */
123 long    fcells;          /* # of free cells */
124 size_t  inhibit_gc;      /* nesting of gc_disable */
125 size_t  reserved_cells;  /* # of reserved cells */
126 #ifndef NDEBUG
127 int     reserved_lineno;   /* location of last reservation */
128 #endif
129
130 pointer inport;
131 pointer outport;
132 pointer save_inport;
133 pointer loadport;
134
135 #ifndef MAXFIL
136 #define MAXFIL 64
137 #endif
138 port load_stack[MAXFIL];     /* Stack of open files for port -1 (LOADing) */
139 int nesting_stack[MAXFIL];
140 int file_i;
141 int nesting;
142
143 char    gc_verbose;      /* if gc_verbose is not zero, print gc status */
144 char    no_memory;       /* Whether mem. alloc. has failed */
145
146 #ifndef LINESIZE
147 #define LINESIZE 1024
148 #endif
149 char    linebuff[LINESIZE];
150 #ifndef STRBUFFSIZE
151 #define STRBUFFSIZE 256
152 #endif
153 char    *strbuff;
154 size_t strbuff_size;
155 FILE *tmpfp;
156 int tok;
157 int print_flag;
158 pointer value;
159 int op;
160
161 void *ext_data;     /* For the benefit of foreign functions */
162 long gensym_cnt;
163
164 struct scheme_interface *vptr;
165 };
166
167 /* operator code */
168 enum scheme_opcodes {
169 #define _OP_DEF(A,B,C,D,E,OP) OP,
170 #include "opdefines.h"
171   OP_MAXDEFINED
172 };
173
174
175 #define cons(sc,a,b) _cons(sc,a,b,0)
176 #define immutable_cons(sc,a,b) _cons(sc,a,b,1)
177
178 int is_string(pointer p);
179 char *string_value(pointer p);
180 int is_number(pointer p);
181 num nvalue(pointer p);
182 long ivalue(pointer p);
183 double rvalue(pointer p);
184 int is_integer(pointer p);
185 int is_real(pointer p);
186 int is_character(pointer p);
187 long charvalue(pointer p);
188 int is_vector(pointer p);
189
190 int is_port(pointer p);
191
192 int is_pair(pointer p);
193 pointer pair_car(pointer p);
194 pointer pair_cdr(pointer p);
195 pointer set_car(pointer p, pointer q);
196 pointer set_cdr(pointer p, pointer q);
197
198 int is_symbol(pointer p);
199 char *symname(pointer p);
200 int hasprop(pointer p);
201
202 int is_syntax(pointer p);
203 int is_proc(pointer p);
204 int is_foreign(pointer p);
205 char *syntaxname(pointer p);
206 int is_closure(pointer p);
207 #ifdef USE_MACRO
208 int is_macro(pointer p);
209 #endif
210 pointer closure_code(pointer p);
211 pointer closure_env(pointer p);
212
213 int is_continuation(pointer p);
214 int is_promise(pointer p);
215 int is_environment(pointer p);
216 int is_immutable(pointer p);
217 void setimmutable(pointer p);
218
219 int is_foreign_object(pointer p);
220 const foreign_object_vtable *get_foreign_object_vtable(pointer p);
221 void *get_foreign_object_data(pointer p);
222
223 #ifdef __cplusplus
224 }
225 #endif
226
227 #endif
228
229 /*
230 Local variables:
231 c-file-style: "k&r"
232 End:
233 */