--- gforth/engine/engine.c 1997/05/21 20:40:07 1.1 +++ gforth/engine/engine.c 1998/12/08 22:03:02 1.6 @@ -1,6 +1,6 @@ /* Gforth virtual machine (aka inner interpreter) - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. This file is part of Gforth. @@ -24,19 +24,23 @@ #include #include #include +#include +#include +#include +#include "forth.h" +#include "io.h" +#include "threaded.h" +#ifndef STANDALONE #include #include #include -#include -#include #include #include #include -#include #include -#include "forth.h" -#include "io.h" -#include "threaded.h" +#else +#include "systypes.h" +#endif #if defined(HAVE_LIBDL) || defined(HAVE_DLOPEN) /* what else? */ #include @@ -52,11 +56,11 @@ #define IOR(flag) ((flag)? -512-errno : 0) -typedef struct F83Name { - struct F83Name *next; /* the link field for old hands */ - char countetc; - Char name[0]; -} F83Name; +struct F83Name { + struct F83Name *next; /* the link field for old hands */ + char countetc; + char name[0]; +}; /* are macros for setting necessary? */ #define F83NAME_COUNT(np) ((np)->countetc & 0x1f) @@ -105,6 +109,12 @@ char *cstr(Char *from, UCell size, int c return b->buffer; } +#ifdef STANDALONE +char *tilde_cstr(Char *from, UCell size, int clear) +{ + return cstr(from, size, clear); +} +#else char *tilde_cstr(Char *from, UCell size, int clear) /* like cstr(), but perform tilde expansion on the string */ { @@ -146,7 +156,7 @@ char *tilde_cstr(Char *from, UCell size, return cstr(path,s1_len+s2_len,clear); } } - +#endif #define NEWLINE '\n' @@ -231,18 +241,18 @@ Label *engine(Xt *ip0, Cell *sp0, Cell * #else /* !defined(DOUBLY_INDIRECT) */ static Label symbols[]= { #endif /* !defined(DOUBLY_INDIRECT) */ - &&docol, - &&docon, - &&dovar, - &&douser, - &&dodefer, - &&dofield, - &&dodoes, + (Label)&&docol, + (Label)&&docon, + (Label)&&dovar, + (Label)&&douser, + (Label)&&dodefer, + (Label)&&dofield, + (Label)&&dodoes, /* the following entry is normally unused; it's there because its index indicates a does-handler */ - CPU_DEP1, + (Label)CPU_DEP1, #include "prim_lab.i" - 0 + (Label)0 }; #ifdef CPU_DEP2 CPU_DEP2 @@ -256,27 +266,28 @@ Label *engine(Xt *ip0, Cell *sp0, Cell * if (ip == NULL) { #if defined(DOUBLY_INDIRECT) -#define MAX_SYMBOLS 1000 +#define MAX_SYMBOLS (sizeof(routines)/sizeof(routines[0])) +#define CODE_OFFSET (22*sizeof(Cell)) int i; - Cell code_offset = offset_image? 11*sizeof(Cell) : 0; - - symbols = (Label *)(malloc(MAX_SYMBOLS*sizeof(Cell)+code_offset)+code_offset); + Cell code_offset = offset_image? CODE_OFFSET : 0; + + symbols = (Label *)(malloc(MAX_SYMBOLS*sizeof(Cell)+CODE_OFFSET)+code_offset); for (i=0; i=MAX_SYMBOLS) { fprintf(stderr,"gforth-ditc: more than %d primitives\n",MAX_SYMBOLS); exit(1); + } + symbols[i] = &routines[i]; } - symbols[i] = &routines[i]; - } #endif /* defined(DOUBLY_INDIRECT) */ - return symbols; -} + return symbols; + } IF_TOS(TOS = sp[0]); IF_FTOS(FTOS = fp[0]); -/* prep_terminal(); */ + /* prep_terminal(); */ NEXT_P0; NEXT;