version 1.25, 2008/07/29 09:24:31
|
version 1.26, 2008/09/18 02:42:24
|
Line 24 s" callback" add-lib
|
Line 24 s" callback" add-lib
|
|
|
\c #include <avcall.h> |
\c #include <avcall.h> |
\c #include <callback.h> |
\c #include <callback.h> |
\c extern Cell *gforth_RP; |
|
\c extern unsigned char *gforth_LP; |
|
\c static av_alist alist; |
\c static av_alist alist; |
\c static va_alist gforth_clist; |
\c static va_alist gforth_clist; |
|
\c #ifndef HAS_BACKLINK |
|
\c static void **saved_gforth_pointers; |
|
\c #endif |
\c static float frv; |
\c static float frv; |
\c static int irv; |
\c static int irv; |
\c static double drv; |
\c static double drv; |
Line 35 s" callback" add-lib
|
Line 36 s" callback" add-lib
|
\c static void * prv; |
\c static void * prv; |
\c typedef void *Label; |
\c typedef void *Label; |
\c typedef Label *Xt; |
\c typedef Label *Xt; |
\c Label *gforth_engine(Xt *ip, Cell *sp, Cell *rp0, Float *fp, char *lp); |
|
\c |
\c |
\c void gforth_callback_ffcall(Xt* fcall, void * alist) |
\c void gforth_callback_ffcall(Xt* fcall, void * alist) |
\c { |
\c { |
\c /* save global valiables */ |
\c #ifndef HAS_BACKLINK |
\c Cell *rp = gforth_RP; |
\c void **gforth_pointers = saved_gforth_pointers; |
\c Cell *sp = gforth_SP; |
\c #endif |
\c Float *fp = gforth_FP; |
\c { |
\c char *lp = gforth_LP; |
\c /* save global valiables */ |
\c va_alist clist = gforth_clist; |
\c Cell *rp = gforth_RP; |
|
\c Cell *sp = gforth_SP; |
|
\c Float *fp = gforth_FP; |
|
\c char *lp = gforth_LP; |
|
\c va_alist clist = gforth_clist; |
\c |
\c |
\c gforth_clist = (va_alist)alist; |
\c gforth_clist = (va_alist)alist; |
\c |
\c |
\c gforth_engine(fcall, sp, rp, fp, lp); |
\c gforth_engine(fcall, sp, rp, fp, lp, gforth_UP); |
\c |
\c |
\c /* restore global variables */ |
\c /* restore global variables */ |
\c gforth_RP = rp; |
\c gforth_RP = rp; |
\c gforth_SP = sp; |
\c gforth_SP = sp; |
\c gforth_FP = fp; |
\c gforth_FP = fp; |
\c gforth_LP = lp; |
\c gforth_LP = lp; |
\c gforth_clist = clist; |
\c gforth_clist = clist; |
|
\c } |
\c } |
\c } |
|
|
\c #define av_start_void1(c_addr) av_start_void(alist, c_addr) |
\c #define av_start_void1(c_addr) av_start_void(alist, c_addr) |