Diff for /gforth/engine/forth.h between versions 1.116 and 1.133

version 1.116, 2011/12/31 15:29:26 version 1.133, 2012/12/31 15:25:19
Line 1 Line 1
 /* common header file  /* common header file
   
   Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc.    Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012 Free Software Foundation, Inc.
   
   This file is part of Gforth.    This file is part of Gforth.
   
Line 303  typedef Label *Xt; Line 303  typedef Label *Xt;
 #define rpTOS (rp[0])  #define rpTOS (rp[0])
   
 typedef struct {  typedef struct {
     Cell next_task;
     Cell prev_task;
     Cell save_task;
     Cell* sp0;
     Cell* rp0;
     Float* fp0;
     Address lp0;
     Xt *throw_entry;
   } user_area;
   
   typedef struct {
   Address base;         /* base address of image (0 if relocatable) */    Address base;         /* base address of image (0 if relocatable) */
   UCell checksum;       /* checksum of ca's to protect against some    UCell checksum;       /* checksum of ca's to protect against some
                            incompatible binary/executable combinations                             incompatible binary/executable combinations
Line 315  typedef struct { Line 326  typedef struct {
   UCell locals_stack_size;    UCell locals_stack_size;
   Xt *boot_entry;       /* initial ip for booting (in BOOT) */    Xt *boot_entry;       /* initial ip for booting (in BOOT) */
   Xt *throw_entry;      /* ip after signal (in THROW) */    Xt *throw_entry;      /* ip after signal (in THROW) */
   Cell unused1;         /* possibly tib stack size */    Xt *quit_entry;
     Xt *execute_entry;
     Xt *find_entry;
   Label *xt_base;         /* base of DOUBLE_INDIRECT xts[], for comp-i.fs */    Label *xt_base;         /* base of DOUBLE_INDIRECT xts[], for comp-i.fs */
   Address data_stack_base; /* this and the following fields are initialized by the loader */  
   Address fp_stack_base;  
   Address return_stack_base;  
   Address locals_stack_base;  
 } ImageHeader;  } ImageHeader;
 /* the image-header is created in main.fs */  /* the image-header is created in main.fs */
   
Line 363  typedef struct saved_regs { Line 372  typedef struct saved_regs {
   Xt *sr_saved_ip;    Xt *sr_saved_ip;
   Cell *sr_rp;    Cell *sr_rp;
 } saved_regs;  } saved_regs;
 extern saved_regs saved_regs_v, *saved_regs_p;  extern saved_regs saved_regs_v;
   extern PER_THREAD saved_regs *saved_regs_p;
 #define saved_ip (saved_regs_p->sr_saved_ip)  #define saved_ip (saved_regs_p->sr_saved_ip)
 #define rp       (saved_regs_p->sr_rp)  #define rp       (saved_regs_p->sr_rp)
 /* for use in gforth_engine header */  /* for use in gforth_engine header */
Line 371  extern saved_regs saved_regs_v, *saved_r Line 381  extern saved_regs saved_regs_v, *saved_r
 #define sr_proto , struct saved_regs *saved_regs_p0  #define sr_proto , struct saved_regs *saved_regs_p0
 #define sr_call  , saved_regs_p  #define sr_call  , saved_regs_p
 #else /* !defined(GLOBALS_NONRELOC) */  #else /* !defined(GLOBALS_NONRELOC) */
 extern Xt *saved_ip;  extern PER_THREAD Xt *saved_ip;
 extern Cell *rp;  extern PER_THREAD Cell *rp;
 #define sr_proto  #define sr_proto
 #define sr_call  #define sr_call
 #endif /* !defined(GLOBALS_NONRELOC) */  #endif /* !defined(GLOBALS_NONRELOC) */
Line 381  extern Cell *rp; Line 391  extern Cell *rp;
 #define sr_call  #define sr_call
 #endif /* !defined(GFORTH_DEBUGGING) */  #endif /* !defined(GFORTH_DEBUGGING) */
   
 Label *gforth_engine(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);  Label *gforth_engine(Xt *ip sr_proto);
 Label *gforth_engine2(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);  Label *gforth_engine2(Xt *ip sr_proto);
 Label *gforth_engine3(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);  Label *gforth_engine3(Xt *ip sr_proto);
   
   
   int gforth_main(int argc, char **argv, char **env);
   void gforth_args(int argc, char ** argv, char ** path, char ** imagename);
   Address gforth_loader(char* imagename, char* path);
   user_area* gforth_stacks(Cell dsize, Cell rsize, Cell fsize, Cell lsize);
   void gforth_free_stacks(user_area* t);
   void gforth_free();
   Cell gforth_go(Xt* ip0);
   int gforth_boot(int argc, char** argv, char* path);
   int gforth_start(int argc, char ** argv);
   int gforth_quit();
   Xt gforth_find(Char * name);
   int gforth_execute(Xt xt);
   void gforth_cleanup();
   void gforth_printmetrics();
   #if defined(DOUBLY_INDIRECT)
   int gforth_make_image(int debugflag);
   #endif
   
 /* for ABI-CODE and ;ABI-CODE */  /* for ABI-CODE and ;ABI-CODE */
 typedef Cell *abifunc(Cell *sp, Float **fpp);  typedef Cell *abifunc(Cell *sp, Float **fpp);
Line 391  typedef Cell *semiabifunc(Cell *sp, Floa Line 420  typedef Cell *semiabifunc(Cell *sp, Floa
   
 /* engine/prim support routines */  /* engine/prim support routines */
 Address gforth_alloc(Cell size);  Address gforth_alloc(Cell size);
 char *cstr(Char *from, UCell size, int clear);  char *cstr(Char *from, UCell size);
 char *tilde_cstr(Char *from, UCell size, int clear);  char *tilde_cstr(Char *from, UCell size);
 Cell opencreate_file(char *s, Cell wfam, int flags, Cell *wiorp);  Cell opencreate_file(char *s, Cell wfam, int flags, Cell *wiorp);
 DCell timeval2us(struct timeval *tvp);  DCell timeval2us(struct timeval *tvp);
 DCell timespec2ns(struct timespec *tvp);  DCell timespec2ns(struct timespec *tvp);
Line 407  struct Cellpair parse_white(Char *c_addr Line 436  struct Cellpair parse_white(Char *c_addr
 Cell rename_file(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);  Cell rename_file(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);
 struct Cellquad read_line(Char *c_addr, UCell u1, FILE *wfileid);  struct Cellquad read_line(Char *c_addr, UCell u1, FILE *wfileid);
 struct Cellpair file_status(Char *c_addr, UCell u);  struct Cellpair file_status(Char *c_addr, UCell u);
 Cell to_float(Char *c_addr, UCell u, Float *r_p);  Cell to_float(Char *c_addr, UCell u, Float *r_p, Char dot);
 Float v_star(Float *f_addr1, Cell nstride1, Float *f_addr2, Cell nstride2, UCell ucount);  Float v_star(Float *f_addr1, Cell nstride1, Float *f_addr2, Cell nstride2, UCell ucount);
 void faxpy(Float ra, Float *f_x, Cell nstridex, Float *f_y, Cell nstridey, UCell ucount);  void faxpy(Float ra, Float *f_x, Cell nstridex, Float *f_y, Cell nstridey, UCell ucount);
 UCell lshift(UCell u1, UCell n);  UCell lshift(UCell u1, UCell n);
Line 464  extern int debug; Line 493  extern int debug;
 # define debug 0  # define debug 0
 #endif  #endif
   
 extern Cell *gforth_SP;  extern PER_THREAD Cell *gforth_SP;
 extern Cell *gforth_RP;  extern PER_THREAD Cell *gforth_RP;
 extern Address gforth_LP;  extern PER_THREAD Address gforth_LP;
 extern Float *gforth_FP;  extern PER_THREAD Float *gforth_FP;
 extern Address gforth_UP;  extern PER_THREAD user_area* gforth_UP;
 #ifndef HAS_LINKBACK  
 extern void * gforth_pointers[];  extern void * gforth_pointers(Cell n);
 #endif  
   
 #ifdef HAS_FFCALL  #ifdef HAS_FFCALL
 extern Cell *gforth_RP;  
 extern Address gforth_LP;  
 extern void gforth_callback(Xt* fcall, void * alist);  extern void gforth_callback(Xt* fcall, void * alist);
 #endif  #endif
   

Removed from v.1.116  
changed lines
  Added in v.1.133


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