version 1.19, 2008/02/12 20:28:51
|
version 1.26, 2008/09/18 02:42:24
|
Line 1
|
Line 1
|
\ lib.fs shared library support package 16aug03py |
\ lib.fs shared library support package 16aug03py |
|
|
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2005,2006,2007 Free Software Foundation, Inc. |
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2005,2006,2007,2008 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 18
|
Line 18
|
\ along with this program. If not, see http://www.gnu.org/licenses/. |
\ along with this program. If not, see http://www.gnu.org/licenses/. |
|
|
\ replacements for former primitives |
\ replacements for former primitives |
require libcc.fs |
c-library fflib |
|
s" avcall" add-lib |
|
s" callback" add-lib |
|
|
\c #include <avcall.h> |
\c #include <avcall.h> |
\c #include <callback.h> |
\c #include <callback.h> |
\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; |
\c static long long llrv; |
\c static long long llrv; |
\c static void * prv; |
\c static void * prv; |
\c static Cell *gforth_RP; |
|
\c static char *gforth_LP; |
|
\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) |
Line 126 c-function va-return-longlong1 va_return
|
Line 133 c-function va-return-longlong1 va_return
|
c-function va-return-float1 va_return_float1 r -- void |
c-function va-return-float1 va_return_float1 r -- void |
\c #define va_return_double1(r) va_return_double(gforth_clist,r) |
\c #define va_return_double1(r) va_return_double(gforth_clist,r) |
c-function va-return-double1 va_return_double1 r -- void |
c-function va-return-double1 va_return_double1 r -- void |
|
end-c-library |
|
|
: av-int-r 2r> >r av-int ; |
: av-int-r 2r> >r av-int ; |
: av-float-r f@local0 lp+ av-float ; |
: av-float-r f@local0 lp+ av-float ; |