| #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> |
| |
|
| #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) |
| 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 */ |
| { |
{ |
| return cstr(path,s1_len+s2_len,clear); |
return cstr(path,s1_len+s2_len,clear); |
| } |
} |
| } |
} |
| |
#endif |
| |
|
| #define NEWLINE '\n' |
#define NEWLINE '\n' |
| |
|
| #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 |