30#include "EST_String.h"
32#include "EST_StringTrie.h"
33#include "EST_cutils.h"
34#include "EST_strcasecmp.h"
37#include "siodeditline.h"
39#ifdef EST_SIOD_ENABLE_PYTHON
40#include "slib_python.h"
43extern "C" const char * repl_prompt;
48#if defined(INSTANTIATE_TEMPLATES)
49#include "../base_class/EST_THash.cc"
56int siod_init(
int heap_size)
76 #ifdef EST_SIOD_ENABLE_PYTHON
85 #ifdef EST_SIOD_ENABLE_PYTHON
92LISP siod_get_lval(
const char *name,
const char *
message)
100 if (symbol_boundp(
iii,current_env) == NIL)
106 rval = symbol_value(
iii, current_env);
111LISP siod_set_lval(
const char *name,
LISP val)
118 rval = setvar(
iii,val,current_env);
129 for (l=
alist; CONSP(l); l=CDR(l))
135 if (NULLP(
lcc))
continue;
136 else if TYPEP(
lcc,tc_symbol)
141 else if TYPEP(
lcc,tc_flonum)
143 if (FLONMPNAME(
lcc) == NULL)
147 FLONMPNAME(
lcc) = (
char *)must_malloc(
strlen(b)+1);
153 else if TYPEP(
lcc,tc_string)
155 if (
strcmp(key,
lcc->storage_as.string.data)==0)
165LISP siod_member_str(
const char *key,
LISP list)
170 for (l=list; CONSP(l); l=CDR(l))
171 if (
strcmp(key,get_c_string(CAR(l))) == 0)
182 for (l=list; CONSP(l); l=CDR(l))
183 if (key.
matches(make_regex(get_c_string(CAR(l)))))
189LISP siod_member_int(
const int key,
LISP list)
194 for (l=list; CONSP(l); l=CDR(l))
195 if (key == get_c_int(CAR(l)))
200int siod_llength(
LISP list)
206 for (
len=0,l=list; CONSP(l); l=CDR(l),
len++);
218 for (i=0,l=list; CONSP(l); l=CDR(l),i++)
226int siod_atomic_list(
LISP list)
231 for (p=list; p != NIL; p=cdr(p))
238int siod_eof(
LISP item)
242 (cdr(item) == NIL) &&
243 (SYMBOLP(car(item))) &&
244 (
strcmp(
"eof",get_c_string(car(item))) == 0))
253 return cons(rintern(
"quote"),cons(l,NIL));
260 if ((list == NIL) || (NCONSP(list)))
264 for (l=list; cdr(l) != NIL; l=cdr(l));
279 else if FLONUMP(car(cdr(
pair)))
280 return (
int)FLONM(car(cdr(
pair)));
283 cerr <<
"param " << name <<
" not of type int" <<
endl;
300 else if (FLONUMP(car(cdr(
pair))))
301 return (
float)FLONM(car(cdr(
pair)));
304 cerr <<
"param " << name <<
" not of type float" <<
endl;
322 return get_c_string(car(cdr(
pair)));
336 return car(cdr(
pair));
339LISP make_param_str(
const char *name,
const char *val)
341 return cons(rintern(name),cons(rintern(val),NIL));
344LISP make_param_int(
const char *name,
int val)
346 return cons(rintern(name),cons(flocons(val),NIL));
349LISP make_param_float(
const char *name,
float val)
351 return cons(rintern(name),cons(flocons(val),NIL));
354LISP make_param_lisp(
const char *name,
LISP val)
356 return cons(rintern(name),cons(val,NIL));
371 regexes.add_item(
sr,
rx);
386 r = leval(cons(
hooks,cons(quote(
arg),NIL)),NIL);
388 for (h=
hooks; h != NIL; h=cdr(h))
389 r = leval(cons(car(h),cons(quote(
arg),NIL)),NIL);
403 else if (!CONSP(
hooks))
404 r = apply(
hooks,args);
406 for (r=args,h=
hooks; h != NIL; h=cdr(h))
415 for (
qa=NIL,a=args; a; a=cdr(a))
416 qa = cons(quote(car(a)),
qa);
417 return leval(cons(func,reverse(
qa)),NIL);
420LISP stringexplode(
const char *str)
428 for (i=0; i <
strlen(str); i++)
431 l = cons(rintern(
id),l);
439char **siod_variable_generator(
char *text,
int length)
443 char **matches = NULL;
447 for(
lmatches=NIL,l=oblistvar;CONSP(l);l=CDR(l))
449 if (VCELL(car(l)) == NIL)
continue;
450 switch(TYPE(VCELL(CAR(l))))
464 name = PNAME(CAR(l));
465 if (
strncmp(name, text, length) == 0)
471 matches = walloc(
char *,siod_llength(
lmatches)+1);
472 for (l=
lmatches,i=0; l; l=cdr(l),i++)
473 matches[i] = wstrdup(PNAME(car(l)));
479char **siod_command_generator (
char *text,
int length)
483 char **matches = NULL;
487 for(
lmatches=NIL,l=oblistvar;CONSP(l);l=CDR(l))
489 if (VCELL(car(l)) == NIL)
continue;
490 switch(TYPE(VCELL(CAR(l))))
502 name = PNAME(CAR(l));
503 if (
strncmp(name, text, length) == 0)
510 matches = walloc(
char *,siod_llength(
lmatches)+1);
511 for (l=
lmatches,i=0; l; l=cdr(l),i++)
512 matches[i] = wstrdup(PNAME(car(l)));
525 for (b=l; b != NIL; b=cdr(b))
526 a.
append(get_c_string(car(b)));
536 for (p=a.head(); p != 0; p=p->next())
537 b = cons(rintern(a(p)),b);
int matches(const char *e, int pos=0) const
Exactly match this string?
void clear(void)
remove all items in list
void append(const T &item)
add item onto end of list