home *** CD-ROM | disk | FTP | other *** search
- /*
- * forth.h -- define function numbers for primitives, and other constants,
- * externals, and globals used in forth.c and prims.c
- */
-
- #define EXECUTE 0
- #define LIT 1
- #define BRANCH 2
- #define ZBRANCH 3
- #define PLOOP 4
- #define PPLOOP 5
- #define PDO 6
- #define I 7
- #define R 58
- #define DIGIT 8
- #define PFIND 9
- #define ENCLOSE 10
- #define KEY 11
- #define PEMIT 12
- #define QTERMINAL 13
- #define CMOVE 14
- #define USTAR 15
- #define USLASH 16
- #define AND 17
- #define OR 18
- #define XOR 19
- #define SPFETCH 20
- #define SPSTORE 21
- #define RPFETCH 22
- #define RPSTORE 23
- #define SEMIS 24
- #define LEAVE 25
- #define TOR 26
- #define FROMR 27
- #define ZEQ 28
- #define ZLESS 29
- #define PLUS 30
- #define DPLUS 31
- #define MINUS 32
- #define DMINUS 33
- #define OVER 34
- #define DROP 35
- #define SWAP 36
- #define DUP 37
- #define TDUP 38
- #define PSTORE 39
- #define TOGGLE 40
- #define FETCH 41
- #define CFETCH 42
- #define TFETCH 43
- #define STORE 44
- #define CSTORE 45
- #define TSTORE 46
- #define DOCOL 47
- #define DOCON 48
- #define DOVAR 49
- #define DOUSE 50
- #define SUBTRACT 51
- #define EQUAL 52
- #define NOTEQ 53
- #define LESS 54
- #define ROT 55
- #define DODOES 56
- #define DOVOC 57
- /* 58 is above */
- #define ALLOT 59
- #define PBYE 60
- #define TRON 61
- #define TROFF 62
- #define DOTRACE 63
- #define PRSLW 64
- #define PSAVE 65
- #define PCOLD 66
-
- /* memory */
- #define GULPFRQ 256 /* if mem[LIMIT] - dp < GULPFRQ, then get */
- #define GULPSIZE 1024 /* a block of GULPSIZE words */
-
- /*
- * User variables and other locations
- */
-
- #define S0 UP+0 /* csp when stack is empty */
- #define R0 UP+1 /* rsp when r stack is empty */
- #define TIB UP+2 /* Terminal Input Buffer location */
- #define WIDTH UP+3 /* screen width */
- #define WARNING UP+4 /* print messages? */
- #define FENCE UP+5 /* can not forget below this mark */
- #define DP UP+6 /* points to first unallocated word */
- #define VOCLINK UP+7 /* vocabulary link */
-
- char *calloc(), *realloc(), *gets();
- long lseek();
-
- /* GLOBALS */
-
- /* STACK POINTERS are registers of our FORTH machine. They, like everything
- else, point into memory (mem[]). They are read by sp@ and rp@, set by sp!
- and rp!. They are initialized by COLD. */
-
- extern unsigned short csp;
- extern unsigned short rsp;
-
- /* This variable is all-important. It will be set to the top of the
- data area by sbrk, and more memory will be allocated. All memory is
- addressed as a subscript to this address -- mem[0] is the first memory
- element, mem[1] is second, and so on.
- */
-
- extern short *mem; /* points to the number of bytes in mem[0], as read
- from COREFILE at startup */
-
- /* two more machine registers: the interpretive pointer */
- extern unsigned short ip; /* for an explanation of these, look in */
- extern unsigned short w; /* interp.doc */
-
- extern int trace, debug; /* global for tracing in next() */
- extern int tracedepth, breakenable, breakpoint, qtermflag, forceip, nobuf;
- extern FILE *blockfile;
- extern long bfilesize;
- extern char *bfilename;
- extern char *cfilename;
- extern char *sfilename;
-