[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

foreign C code



I've been writing  some foreign C code using Allegro 4.0.1, and while
not extremely familiar with the manual, it seems that it would be
simple to make it a lot easier to pass information, especially
strings, back and forth between Lisp and C. All that would be needed
is for you to supply functions that convert between C and LISP
objects. Some obvious functions would be

lisp_value	*MakeLispInt (int)
lisp_value	*MakeLispFloat (float)
lisp_value	*MakeLispChar (char)
lisp_value	*MakeLispSymbol (char*)
lisp_value	*MakeLispString (char*)
etc.

plus  functions

lisp_value	*MakeLispList (...)
lisp_value	*MakeLispVector (...)
lisp_value	*MakeLispArray (int, int, ...)

which take a variable number of lisp_value* objects to make a lisp
list, vector or array. A C programmer could then simply pass
information back to lisp by using for example

return MakeLispString (c_result_str);

This would be much simpler than the methods described in the 4.0.1
manual and it seems to me it would be extremely simple for you to
offer these functions and implement them appropriately.

In the reverse direction, arguments to foreign C code could be
lisp_value* objects and be decoded by functions such as

int	IntFromLispValue (lisp_value*)
double	DoubleFromLispValue (lisp_value*)

boolean StringFromLispValue (lisp_value*, char)
/* returns the string in the prellocated char vector */
int	LengthOfLispString (lisp_value*)
/* returns length of string so space can be allocated in C */
int	TypeOfLispValue (lisp_value*)

If its safe to operate on an uncopied string, you might supply

char*	DirectStringFromLispValue (lisp_value*)

etc.

This would simplify foreign function coding a great deal. Any
comments?


|Bryan M. Kramer	      416-978-7330, fax 416-978-1455|
|Department of Computer Science, University of Toronto      |
|6 King's College Road, Room 283E			    |
|Toronto, Ontario, Canada      M5S 1A4                      |