Diff for /gforth/engine/engine.c between versions 1.2 and 1.8

version 1.2, 1998/03/21 21:37:50 version 1.8, 1998/12/12 22:32:05
Line 1 Line 1
 /* Gforth virtual machine (aka inner interpreter)  /* 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.    This file is part of Gforth.
   
Line 24 Line 24
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
 #include <math.h>  #include <math.h>
   #include <assert.h>
   #include <stdlib.h>
   #include <errno.h>
   #include "forth.h"
   #include "io.h"
   #include "threaded.h"
   #ifndef STANDALONE
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/stat.h>  #include <sys/stat.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <assert.h>  
 #include <stdlib.h>  
 #include <time.h>  #include <time.h>
 #include <sys/time.h>  #include <sys/time.h>
 #include <unistd.h>  #include <unistd.h>
 #include <errno.h>  
 #include <pwd.h>  #include <pwd.h>
 #include "forth.h"  #else
 #include "io.h"  #include "systypes.h"
 #include "threaded.h"  #endif
   
 #if defined(HAVE_LIBDL) || defined(HAVE_DLOPEN) /* what else? */  #if defined(HAVE_LIBDL) || defined(HAVE_DLOPEN) /* what else? */
 #include <dlfcn.h>  #include <dlfcn.h>
 #endif  #endif
   #if defined(_WIN32)
   #include <windows.h>
   #endif
 #ifdef hpux  #ifdef hpux
 #include <dl.h>  #include <dl.h>
 #endif  #endif
Line 52 Line 59
   
 #define IOR(flag)       ((flag)? -512-errno : 0)  #define IOR(flag)       ((flag)? -512-errno : 0)
   
 typedef struct F83Name {  struct F83Name {
   struct F83Name        *next;  /* the link field for old hands */    struct F83Name *next;  /* the link field for old hands */
   char                  countetc;    char          countetc;
   Char                  name[0];    char          name[0];
 } F83Name;  };
   
 /* are macros for setting necessary? */  /* are macros for setting necessary? */
 #define F83NAME_COUNT(np)       ((np)->countetc & 0x1f)  #define F83NAME_COUNT(np)       ((np)->countetc & 0x1f)
Line 105  char *cstr(Char *from, UCell size, int c Line 112  char *cstr(Char *from, UCell size, int c
   return b->buffer;    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)  char *tilde_cstr(Char *from, UCell size, int clear)
 /* like cstr(), but perform tilde expansion on the string */  /* like cstr(), but perform tilde expansion on the string */
 {  {
Line 146  char *tilde_cstr(Char *from, UCell size, Line 159  char *tilde_cstr(Char *from, UCell size,
     return cstr(path,s1_len+s2_len,clear);      return cstr(path,s1_len+s2_len,clear);
   }    }
 }  }
      #endif   
   
 #define NEWLINE '\n'  #define NEWLINE '\n'
   
Line 231  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 244  Label *engine(Xt *ip0, Cell *sp0, Cell *
 #else /* !defined(DOUBLY_INDIRECT) */  #else /* !defined(DOUBLY_INDIRECT) */
   static Label symbols[]= {    static Label symbols[]= {
 #endif /* !defined(DOUBLY_INDIRECT) */  #endif /* !defined(DOUBLY_INDIRECT) */
     &&docol,      (Label)&&docol,
     &&docon,      (Label)&&docon,
     &&dovar,      (Label)&&dovar,
     &&douser,      (Label)&&douser,
     &&dodefer,      (Label)&&dodefer,
     &&dofield,      (Label)&&dofield,
     &&dodoes,      (Label)&&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 */
     CPU_DEP1,      CPU_DEP1,
 #include "prim_lab.i"  #include "prim_lab.i"
     0      (Label)0
   };    };
 #ifdef CPU_DEP2  #ifdef CPU_DEP2
   CPU_DEP2    CPU_DEP2
Line 256  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 269  Label *engine(Xt *ip0, Cell *sp0, Cell *
   
   if (ip == NULL) {    if (ip == NULL) {
 #if defined(DOUBLY_INDIRECT)  #if defined(DOUBLY_INDIRECT)
 #define MAX_SYMBOLS 1000  #define MAX_SYMBOLS (sizeof(routines)/sizeof(routines[0]))
   #define CODE_OFFSET (22*sizeof(Cell))
     int i;      int i;
     Cell code_offset = offset_image? 22*sizeof(Cell) : 0;      Cell code_offset = offset_image? CODE_OFFSET : 0;
   
     symbols = (Label *)(malloc(MAX_SYMBOLS*sizeof(Cell)+code_offset)+code_offset);      symbols = (Label *)(malloc(MAX_SYMBOLS*sizeof(Cell)+CODE_OFFSET)+code_offset);
     for (i=0; i<DOESJUMP+1; i++)      for (i=0; i<DOESJUMP+1; i++)
       symbols[i] = (Label)routines[i];        symbols[i] = (Label)routines[i];
     for (; routines[i]!=0; i++) {      for (; routines[i]!=0; i++) {

Removed from v.1.2  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>