diff --git a/ase/lsp/init.c b/ase/lsp/init.c index 0187da51..f8a5ab50 100644 --- a/ase/lsp/init.c +++ b/ase/lsp/init.c @@ -1,5 +1,5 @@ /* - * $Id: init.c,v 1.3 2005-09-18 13:06:43 bacon Exp $ + * $Id: init.c,v 1.4 2005-09-19 03:05:37 bacon Exp $ */ #include @@ -38,7 +38,7 @@ xp_lsp_t* xp_lsp_open (xp_lsp_t* lsp, return XP_NULL; } - if (xp_lsp_add_prims (lsp->mem) == -1) { + if (xp_lsp_add_builtin_prims (lsp->mem) == -1) { xp_lsp_mem_free (lsp->mem); xp_lsp_token_close (&lsp->token); if (lsp->__malloced) xp_free (lsp); diff --git a/ase/lsp/lsp.h b/ase/lsp/lsp.h index 500e7401..d59f6664 100644 --- a/ase/lsp/lsp.h +++ b/ase/lsp/lsp.h @@ -1,5 +1,5 @@ /* - * $Id: lsp.h,v 1.11 2005-09-18 14:05:16 bacon Exp $ + * $Id: lsp.h,v 1.12 2005-09-19 03:05:37 bacon Exp $ */ #ifndef _XP_LSP_LSP_H_ @@ -44,13 +44,13 @@ enum /* * TYPEDEF: xp_lsp_t - * Defines a lisp processor + * Defines a lisp processor type */ typedef struct xp_lsp_t xp_lsp_t; /* * TYPEDEF: xp_lsp_io_t - * Defines an IO handler + * Defines an IO handler type */ typedef xp_ssize_t (*xp_lsp_io_t) ( int cmd, void* arg, xp_char_t* data, xp_size_t count); @@ -62,6 +62,13 @@ enum XP_LSP_IO_DATA }; +/* + * TYPEDEF: xp_lsp_prim_t + * Defines a primitive type + */ +typedef xp_lsp_obj_t* (*xp_lsp_prim_t) (xp_lsp_t* lsp, xp_lsp_obj_t* obj); + + struct xp_lsp_t { /* error number */ @@ -186,12 +193,13 @@ int xp_lsp_print (xp_lsp_t* lsp, const xp_lsp_obj_t* obj); * Adds a user-defined primitive */ int xp_lsp_add_prim (xp_lsp_t* lsp, const xp_char_t* name, xp_lsp_prim_t prim); +int xp_lsp_add_primx (xp_lsp_t* lsp, const xp_char_t* name, xp_size_t len, xp_lsp_prim_t prim); /* * FUNCTION: xp_lsp_remove_prim * Removes a user-defined primitive */ -int xp_lsp_add_prim (xp_lsp_t* lsp, const xp_char_t* name); +int xp_lsp_remove_prim (xp_lsp_t* lsp, const xp_char_t* name); #ifdef __cplusplus } diff --git a/ase/lsp/makefile.in b/ase/lsp/makefile.in index f5aae065..47046ad9 100644 --- a/ase/lsp/makefile.in +++ b/ase/lsp/makefile.in @@ -1,6 +1,6 @@ SRCS = name.c token.c array.c prim.c mem.c env.c init.c read.c eval.c print.c OBJS = $(SRCS:.c=.o) -OUT = libxplisp.a +OUT = libxplsp.a CC = @CC@ RANLIB = @RANLIB@ diff --git a/ase/lsp/mem.c b/ase/lsp/mem.c index fa62d67b..904ece2b 100644 --- a/ase/lsp/mem.c +++ b/ase/lsp/mem.c @@ -1,5 +1,5 @@ /* - * $Id: mem.c,v 1.1 2005-09-18 11:34:35 bacon Exp $ + * $Id: mem.c,v 1.2 2005-09-19 03:05:37 bacon Exp $ */ #include @@ -92,7 +92,7 @@ void xp_lsp_mem_free (xp_lsp_mem_t* mem) xp_free (mem); } -static int xp_lsp_add_prim ( +static int __add_prim ( xp_lsp_mem_t* mem, const xp_char_t* name, xp_size_t len, xp_lsp_pimpl_t prim) { xp_lsp_obj_t* n, * p; @@ -113,11 +113,11 @@ static int xp_lsp_add_prim ( } -int xp_lsp_add_prims (xp_lsp_mem_t* mem) +int xp_lsp_add_builtin_prims (xp_lsp_mem_t* mem) { #define ADD_PRIM(mem,name,len,prim) \ - if (xp_lsp_add_prim(mem,name,len,prim) == -1) return -1; + if (__add_prim(mem,name,len,prim) == -1) return -1; ADD_PRIM (mem, XP_TEXT("abort"), 5, xp_lsp_prim_abort); ADD_PRIM (mem, XP_TEXT("eval"), 4, xp_lsp_prim_eval); diff --git a/ase/lsp/mem.h b/ase/lsp/mem.h index 27776ee4..8636ec58 100644 --- a/ase/lsp/mem.h +++ b/ase/lsp/mem.h @@ -1,5 +1,5 @@ /* - * $Id: mem.h,v 1.2 2005-09-18 11:54:23 bacon Exp $ + * $Id: mem.h,v 1.3 2005-09-19 03:05:37 bacon Exp $ */ #ifndef _XP_LSP_MEM_H_ @@ -54,7 +54,7 @@ extern "C" { xp_lsp_mem_t* xp_lsp_mem_new (xp_size_t ubound, xp_size_t ubound_inc); void xp_lsp_mem_free (xp_lsp_mem_t* mem); -int xp_lsp_add_prims (xp_lsp_mem_t* mem); +int xp_lsp_add_builtin_prims (xp_lsp_mem_t* mem); xp_lsp_obj_t* xp_lsp_allocate (xp_lsp_mem_t* mem, int type, xp_size_t size); void xp_lsp_dispose (xp_lsp_mem_t* mem, xp_lsp_obj_t* prev, xp_lsp_obj_t* obj); diff --git a/ase/test/lsp/lisp.c b/ase/test/lsp/lisp.c index 56712fe5..41b03379 100644 --- a/ase/test/lsp/lisp.c +++ b/ase/test/lsp/lisp.c @@ -155,7 +155,9 @@ int xp_main (int argc, xp_char_t* argv[]) xp_lsp_attach_output (lsp, put_output, XP_NULL); for (;;) { - xp_printf (XP_TEXT("%s> "), argv[0]); + xp_sio_puts (xp_sio_out, argv[0]); + xp_sio_puts (xp_sio_out, XP_TEXT("> ")); + xp_sio_flush (xp_sio_out); obj = xp_lsp_read (lsp); if (obj == XP_NULL) { diff --git a/ase/test/lsp/makefile.in b/ase/test/lsp/makefile.in index eeccbfa7..b464ab6a 100644 --- a/ase/test/lsp/makefile.in +++ b/ase/test/lsp/makefile.in @@ -3,8 +3,8 @@ OUTS = $(SRCS:.c=.x) CC = @CC@ CFLAGS = @CFLAGS@ -I@abs_top_builddir@ -LDFLAGS = @LDFLAGS@ -L@abs_top_builddir@/xp/bas -L@abs_top_builddir@/xp/lisp -LIBS = @LIBS@ -lxpbas -lxplisp +LDFLAGS = @LDFLAGS@ -L@abs_top_builddir@/xp/bas -L@abs_top_builddir@/xp/lsp +LIBS = @LIBS@ -lxpbas -lxplsp all: $(OUTS)