| |
|
| Cell *SP; |
Cell *SP; |
| Float *FP; |
Float *FP; |
| |
Address UP=NULL; |
| |
|
| #if 0 |
#if 0 |
| /* not used currently */ |
/* not used currently */ |
| int emitcounter; |
int emitcounter; |
| return cstr(from, size, clear); |
return cstr(from, size, clear); |
| if (size<2 || from[1]=='/') { |
if (size<2 || from[1]=='/') { |
| s1 = (char *)getenv ("HOME"); |
s1 = (char *)getenv ("HOME"); |
| |
if(s1 == NULL) |
| |
s1 = ""; |
| s2 = from+1; |
s2 = from+1; |
| s2_len = size-1; |
s2_len = size-1; |
| } else { |
} else { |
| |
|
| static char* fileattr[6]={"r","rb","r+","r+b","w","wb"}; |
static char* fileattr[6]={"r","rb","r+","r+b","w","wb"}; |
| |
|
| static Address up0=NULL; |
#ifndef O_BINARY |
| |
#define O_BINARY 0 |
| |
#endif |
| |
#ifndef O_TEXT |
| |
#define O_TEXT 0 |
| |
#endif |
| |
|
| |
static int ufileattr[6]= { |
| |
O_RDONLY|O_TEXT, O_RDONLY|O_BINARY, |
| |
O_RDWR |O_TEXT, O_RDWR |O_BINARY, |
| |
O_WRONLY|O_TEXT, O_WRONLY|O_BINARY }; |
| |
|
| /* if machine.h has not defined explicit registers, define them as implicit */ |
/* if machine.h has not defined explicit registers, define them as implicit */ |
| #ifndef IPREG |
#ifndef IPREG |
| #define FTOSREG |
#define FTOSREG |
| #endif |
#endif |
| |
|
| |
#ifndef CPU_DEP1 |
| |
# define CPU_DEP1 0 |
| |
#endif |
| |
|
| /* declare and compute cfa for certain threading variants */ |
/* declare and compute cfa for certain threading variants */ |
| /* warning: this is nonsyntactical; it will not work in place of a statement */ |
/* warning: this is nonsyntactical; it will not work in place of a statement */ |
| #ifdef CFA_NEXT |
#ifdef CFA_NEXT |
| #ifdef CFA_NEXT |
#ifdef CFA_NEXT |
| register Xt cfa CFAREG; |
register Xt cfa CFAREG; |
| #endif |
#endif |
| register Address up UPREG = up0; |
register Address up UPREG = UP; |
| IF_TOS(register Cell TOS TOSREG;) |
IF_TOS(register Cell TOS TOSREG;) |
| IF_FTOS(register Float FTOS FTOSREG;) |
IF_FTOS(register Float FTOS FTOSREG;) |
| |
#if defined(DOUBLY_INDIRECT) |
| |
static Label *symbols; |
| |
static void *routines[]= { |
| |
#else /* !defined(DOUBLY_INDIRECT) */ |
| static Label symbols[]= { |
static Label symbols[]= { |
| |
#endif /* !defined(DOUBLY_INDIRECT) */ |
| &&docol, |
&&docol, |
| &&docon, |
&&docon, |
| &&dovar, |
&&dovar, |
| &&dodoes, |
&&dodoes, |
| /* the following entry is normally unused; |
/* the following entry is normally unused; |
| it's there because its index indicates a does-handler */ |
it's there because its index indicates a does-handler */ |
| #ifdef CPU_DEP1 |
|
| CPU_DEP1, |
CPU_DEP1, |
| #else |
|
| (Label)0, |
|
| #endif |
|
| #include "prim_labels.i" |
#include "prim_labels.i" |
| (Label)0 |
0 |
| }; |
}; |
| #ifdef CPU_DEP2 |
#ifdef CPU_DEP2 |
| CPU_DEP2 |
CPU_DEP2 |
| (unsigned)fp,(unsigned)lp,(unsigned)up); |
(unsigned)fp,(unsigned)lp,(unsigned)up); |
| #endif |
#endif |
| |
|
| if (ip == NULL) |
if (ip == NULL) { |
| |
#if defined(DOUBLY_INDIRECT) |
| |
#define MAX_SYMBOLS 1000 |
| |
int i; |
| |
Cell code_offset = offset_image? 11*sizeof(Cell) : 0; |
| |
|
| |
symbols = (Label *)(malloc(MAX_SYMBOLS*sizeof(Cell)+code_offset)+code_offset); |
| |
for (i=0; i<DOESJUMP+1; i++) |
| |
symbols[i] = (Label)routines[i]; |
| |
for (; routines[i]!=0; i++) { |
| |
if (i>=MAX_SYMBOLS) { |
| |
fprintf(stderr,"gforth-ditc: more than %d primitives\n",MAX_SYMBOLS); |
| |
exit(1); |
| |
} |
| |
symbols[i] = &routines[i]; |
| |
} |
| |
#endif /* defined(DOUBLY_INDIRECT) */ |
| return symbols; |
return symbols; |
| |
} |
| |
|
| IF_TOS(TOS = sp[0]); |
IF_TOS(TOS = sp[0]); |
| IF_FTOS(FTOS = fp[0]); |
IF_FTOS(FTOS = fp[0]); |