version 1.241, 2009/04/20 19:14:46
|
version 1.246, 2010/04/05 22:17:56
|
Line 1
|
Line 1
|
\ Gforth primitives |
\ Gforth primitives |
|
|
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc. |
\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 233 SET_IP(DOES_CODE1(CFA));
|
Line 233 SET_IP(DOES_CODE1(CFA));
|
""just a slot to have an encoding for the DOESJUMP, |
""just a slot to have an encoding for the DOESJUMP, |
which is no longer used anyway (!! eliminate this)"" |
which is no longer used anyway (!! eliminate this)"" |
|
|
|
(doabicode) ( s:... f:... -- s:... f:...) gforth-internal paren_doabicode |
|
""run-time routine for ABI-CODE definitions"" |
|
struct abi_code_ret_t { |
|
Cell *sp; |
|
double * fp; |
|
} ret = ((struct abi_code_ret_t(*)(Cell *, double *))(PFA(CFA)))(sp, fp); |
|
sp = ret.sp; |
|
fp = ret.fp; |
|
#ifdef NO_IP |
|
INST_TAIL; |
|
goto *next_code; |
|
#endif /* defined(NO_IP) */ |
|
|
\F [endif] |
\F [endif] |
|
|
\g control |
\g control |
Line 625 k ( R:w R:w1 R:w2 R:w3 R:w4 -- w R:w R:w
|
Line 638 k ( R:w R:w1 R:w2 R:w3 R:w4 -- w R:w R:w
|
|
|
\ digit is high-level: 0/0% |
\ digit is high-level: 0/0% |
|
|
|
abi-call ( #a_callee s:... f:... -- s:... f:... ) gforth abi_call |
|
struct abi_code_ret_t { |
|
Cell *sp; |
|
double * fp; |
|
} ret = ((struct abi_code_ret_t(*)(Cell *, double *))(a_callee))(sp, fp); |
|
sp = ret.sp; |
|
fp = ret.fp; |
|
|
\g strings |
\g strings |
|
|
move ( c_from c_to ucount -- ) core |
move ( c_from c_to ucount -- ) core |
Line 1836 wior = IOR(ftruncate(fileno((FILE *)wfil
|
Line 1857 wior = IOR(ftruncate(fileno((FILE *)wfil
|
read-file ( c_addr u1 wfileid -- u2 wior ) file read_file |
read-file ( c_addr u1 wfileid -- u2 wior ) file read_file |
/* !! fread does not guarantee enough */ |
/* !! fread does not guarantee enough */ |
u2 = fread(c_addr, sizeof(Char), u1, (FILE *)wfileid); |
u2 = fread(c_addr, sizeof(Char), u1, (FILE *)wfileid); |
|
if (u2>0) |
|
gf_regetc((FILE *)wfileid); |
wior = FILEIO(u2<u1 && ferror((FILE *)wfileid)); |
wior = FILEIO(u2<u1 && ferror((FILE *)wfileid)); |
/* !! is the value of ferror errno-compatible? */ |
/* !! is the value of ferror errno-compatible? */ |
if (wior) |
if (wior) |
clearerr((FILE *)wfileid); |
clearerr((FILE *)wfileid); |
|
|
(read-line) ( c_addr u1 wfileid -- u2 flag u3 wior ) file paren_read_line |
(read-line) ( c_addr u1 wfileid -- u2 flag u3 wior ) file paren_read_line |
struct Cellquad r = read_line(c_addr, u1, wfileid); |
struct Cellquad r = read_line(c_addr, u1, (FILE *)wfileid); |
u2 = r.n1; |
u2 = r.n1; |
flag = r.n2; |
flag = r.n2; |
u3 = r.n3; |
u3 = r.n3; |
Line 2150 int flag;
|
Line 2173 int flag;
|
int decpt; |
int decpt; |
sig=ecvt(r, u, &decpt, &flag); |
sig=ecvt(r, u, &decpt, &flag); |
n=(r==0. ? 1 : decpt); |
n=(r==0. ? 1 : decpt); |
// workaround Mac OS X bug in ecvt |
flag=signbit(r); /* not all ecvt()s do this as desired */ |
flag=signbit(r); |
|
f1=FLAG(flag!=0); |
f1=FLAG(flag!=0); |
f2=FLAG(isdigit((unsigned)(sig[0]))!=0); |
f2=FLAG(isdigit((unsigned)(sig[0]))!=0); |
siglen=strlen((char *)sig); |
siglen=strlen((char *)sig); |
Line 2464 lib-error ( -- c_addr u ) gforth
|
Line 2486 lib-error ( -- c_addr u ) gforth
|
#ifdef HAVE_LIBLTDL |
#ifdef HAVE_LIBLTDL |
c_addr = (Char *)lt_dlerror(); |
c_addr = (Char *)lt_dlerror(); |
u = (c_addr == NULL) ? 0 : strlen((char *)c_addr); |
u = (c_addr == NULL) ? 0 : strlen((char *)c_addr); |
|
#elif defined(HAVE_LIBDL) || defined(HAVE_DLOPEN) |
|
c_addr = dlerror(); |
|
u = strlen(c_addr); |
#else |
#else |
c_addr = "libltdl is not configured"; |
c_addr = "libltdl is not configured"; |
u = strlen(c_addr); |
u = strlen(c_addr); |