30 |
#include <setjmp.h> |
#include <setjmp.h> |
31 |
#include <errno.h> |
#include <errno.h> |
32 |
|
|
33 |
|
unsigned scheme_gc_interval = 3600; |
34 |
|
|
35 |
/* Protos to be moved to radscm */ |
/* Protos to be moved to radscm */ |
36 |
SCM scm_makenum (unsigned long val); |
SCM scm_makenum (unsigned long val); |
37 |
SCM radscm_avl_to_list(VALUE_PAIR *pair); |
SCM radscm_avl_to_list(VALUE_PAIR *pair); |
46 |
radscm_init(); |
radscm_init(); |
47 |
rscm_radlog_init(); |
rscm_radlog_init(); |
48 |
rscm_rewrite_init(); |
rscm_rewrite_init(); |
49 |
rad_mainloop(data); |
radiusd_main(); |
50 |
return SCM_BOOL_F; |
return SCM_BOOL_F; |
51 |
} |
} |
52 |
|
|
58 |
|
|
59 |
|
|
60 |
void |
void |
61 |
rad_boot(void *closure, int argc, char **argv) |
scheme_boot(void *closure, int argc, char **argv) |
62 |
{ |
{ |
63 |
scm_internal_catch(SCM_BOOL_T, |
scm_internal_catch(SCM_BOOL_T, |
64 |
catch_body, closure, |
catch_body, closure, |
78 |
static SCM |
static SCM |
79 |
eval_catch_body (void *list) |
eval_catch_body (void *list) |
80 |
{ |
{ |
81 |
return scm_eval((SCM)list); |
return scm_primitive_eval_x((SCM)list); |
82 |
} |
} |
83 |
|
|
84 |
static SCM |
static SCM |
130 |
if (SCM_IMP(res) && SCM_BOOLP(res)) |
if (SCM_IMP(res) && SCM_BOOLP(res)) |
131 |
return res == SCM_BOOL_F; |
return res == SCM_BOOL_F; |
132 |
if (SCM_NIMP(res) && SCM_CONSP(res)) { |
if (SCM_NIMP(res) && SCM_CONSP(res)) { |
133 |
int code = SCM_CAR(res); |
SCM code = SCM_CAR(res); |
134 |
VALUE_PAIR *list = radscm_list_to_avl(SCM_CDR(res)); |
VALUE_PAIR *list = radscm_list_to_avl(SCM_CDR(res)); |
135 |
avl_merge(user_reply_ptr, &list); |
avl_merge(user_reply_ptr, &list); |
136 |
avl_free(list); |
avl_free(list); |
169 |
return 1; |
return 1; |
170 |
} |
} |
171 |
|
|
172 |
|
void |
173 |
|
scheme_add_load_path(char *path) |
174 |
|
{ |
175 |
|
rscm_add_load_path(path); |
176 |
|
} |
177 |
|
|
178 |
void |
void |
179 |
scheme_load(char *filename) |
scheme_load(char *filename) |
190 |
void |
void |
191 |
scheme_read_eval_loop() |
scheme_read_eval_loop() |
192 |
{ |
{ |
193 |
SCM list; |
SCM list; |
194 |
int status; |
int status; |
195 |
SCM sym_top_repl = scm_symbol_value0("top-repl"); |
SCM sym_top_repl = RAD_SCM_SYMBOL_VALUE("top-repl"); |
196 |
SCM sym_begin = scm_symbol_value0("begin"); |
SCM sym_begin = RAD_SCM_SYMBOL_VALUE("begin"); |
197 |
|
|
198 |
list = scm_cons(sym_begin, SCM_LIST1(scm_cons(sym_top_repl, SCM_EOL))); |
list = scm_cons(sym_begin, scm_list_1(scm_cons(sym_top_repl, SCM_EOL))); |
199 |
status = scm_exit_status(scm_eval_x(list)); |
status = scm_exit_status(scm_primitive_eval_x(list)); |
200 |
printf("%d\n", status); |
printf("%d\n", status); |
201 |
} |
} |
202 |
|
|
203 |
|
|
204 |
|
|
205 |
/* *************************** Configuration ******************************* */ |
/* *************************** Configuration ******************************* */ |
206 |
|
|
270 |
{ "debug", CS_STMT, NULL, scheme_cfg_debug, NULL, NULL, NULL }, |
{ "debug", CS_STMT, NULL, scheme_cfg_debug, NULL, NULL, NULL }, |
271 |
{ "gc-interval", CS_STMT, NULL, cfg_get_integer, &scheme_gc_interval, |
{ "gc-interval", CS_STMT, NULL, cfg_get_integer, &scheme_gc_interval, |
272 |
NULL, NULL }, |
NULL, NULL }, |
|
{ "task-timeout", CS_STMT, NULL, cfg_get_integer, &scheme_task_timeout, |
|
|
NULL, NULL}, |
|
273 |
{ NULL } |
{ NULL } |
274 |
}; |
}; |
275 |
|
|