/* * SXextend.c * * Low level ScriptX interface to dynamically loaded C code. * */ #ifndef _SXextend_ #define _SXextend_ 1 typedef long SXint; typedef SXint SXbool; typedef double SXdouble; typedef void *SXobject; typedef char SXchar; typedef SXobject SXclass; typedef SXclass SXString; typedef unsigned char *SXutf; extern SXobject SXcall(SXobject funct, ...); extern SXobject SXmakeString(char *str); extern SXobject SXcharToObject(SXchar c); extern SXobject SXintToObject(SXint val); extern SXint SXintFrom(SXobject val); extern SXdouble SXdoubleFrom(SXobject val); extern SXobject SXdoubleToObject(SXdouble val); extern char *stringOf(SXobject str); extern char *SXstringOf(SXobject str); extern SXobject SXmakePrimitive(void *modulevarOffset, void *fn, SXint minArgs, SXint maxArgs); extern SXobject SXcoerce(SXobject self, SXclass c); extern SXobject SXmakeNameInterned(SXutf source); extern SXobject SXmakeArrayValues(SXobject v1, ...); extern void SXwriteString(SXobject str, char *cstring); extern void SXthreadYield(); extern void SXthreadIdle(); extern void *SXsafe_setfInit(void *lhs_address, void *rhs); extern void *SXallocate(void *kind, int size); extern SXobject SXgprintf(SXobject self, SXchar *formt, ...); extern void SXwriteBlock(SXobject stream, void *data, int size); extern SXobject SXappend(SXobject obj1, SXobject obj2); extern SXobject SXprepend(SXobject obj1, SXobject obj2); #define SXsetfInit(lhs, rhs) SXsafe_setfInit((void *)&(lhs), (void *)(rhs)) extern SXobject debug; extern SXobject SXtrue; extern SXobject SXfalse; extern SXobject SXundefined; #define SXnopointers ((void *)0) #define SXpointers ((void *)0) /* XXX: This is wrong -- FIX! */ /* The module variable offset that indicates "no such variable" */ #define undefinedModuleVariableOffset ((void *)0xffff) #define makePrimitive(fn, minArgs, maxArgs) \ SXmakePrimitive(undefinedModuleVariableOffset, fn, minArgs, maxArgs) #endif