Annotation of gforth/forth.h, revision 1.1

1.1     ! anton       1: /*
        !             2:   $Id: forth.h,v 1.5 1993/11/06 17:06:54 anton Exp $
        !             3:   Copyright 1992 by the ANSI figForth Development Group
        !             4: */
        !             5: 
        !             6: /* common header file */
        !             7: 
        !             8: typedef void *Label;
        !             9: 
        !            10: #include "machine.h"
        !            11: 
        !            12: /* Forth data types */
        !            13: typedef int Bool;
        !            14: #define FLAG(b) (-(b))
        !            15: 
        !            16: #define F_TRUE (FLAG(0==0))
        !            17: #define F_FALSE (FLAG(0!=0))
        !            18: 
        !            19: typedef unsigned char Char;
        !            20: typedef double Float;
        !            21: typedef char *Address;
        !            22: 
        !            23: #ifdef DIRECT_THREADED
        !            24: typedef Label Xt;
        !            25: #else
        !            26: typedef Label *Xt;
        !            27: #endif
        !            28: 
        !            29: Label *engine(Xt *ip, Cell *sp, Cell *rp, Float *fp);
        !            30: 
        !            31: #ifndef DIRECT_THREADED
        !            32: /* i.e. indirect threaded */
        !            33: /* the direct threaded version is machine dependent and resides in machine.h */
        !            34: 
        !            35: /* PFA gives the parameter field address corresponding to a cfa */
        !            36: #define PFA(cfa)       (((Cell *)cfa)+2)
        !            37: /* PFA1 is a special version for use just after a NEXT1 */
        !            38: #define PFA1(cfa)      PFA(cfa)
        !            39: /* CODE_ADDRESS is the address of the code jumped to through the code field */
        !            40: #define CODE_ADDRESS(cfa)      (*(Label *)(cfa))
        !            41:       /* DOES_CODE is the Forth code does jumps to */
        !            42: #define DOES_CODE(cfa)           (cfa[1])
        !            43: #define DOES_CODE1(cfa)          DOES_CODE(cfa)
        !            44: /* MAKE_CF creates an appropriate code field at the cfa;
        !            45:    ca is the code address */
        !            46: #define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca))
        !            47: /* make a code field for a defining-word-defined word */
        !            48: #define MAKE_DOES_CF(cfa,does_code)    ({MAKE_CF(cfa,DODOES);  \
        !            49:                                          ((Cell *)cfa)[1] = (Cell)does_code;})
        !            50: /* the does handler resides between DOES> and the following Forth code */
        !            51: #define DOES_HANDLER_SIZE      8
        !            52: #define MAKE_DOES_HANDLER(addr)        0 /* do nothing */
        !            53: #endif
        !            54: 
        !            55: #ifdef DEBUG
        !            56: #      define  NAME(string)    puts(string);
        !            57: #else
        !            58: #      define  NAME(string)
        !            59: #endif

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