123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- /* header file for S-Lang internal structures that users do not (should not)
- need. Use slang.h for that purpose. */
- /* Copyright (c) 1992, 1995 John E. Davis
- * All rights reserved.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Perl Artistic License.
- */
- #include "config.h"
- #include <string.h>
- #include <glib.h>
- #include "slang-mc.h"
- #include "jdmacros.h"
- #ifdef VMS
- # define SLANG_SYSTEM_NAME "_VMS"
- #else
- # if defined (__GO32__) || defined (__EMX__) || \
- defined (msdos) || defined (__os2__)
- # define SLANG_SYSTEM_NAME "_IBMPC"
- # else
- # define SLANG_SYSTEM_NAME "_UNIX"
- # endif
- #endif /* VMS */
- #ifdef msdos
- #define SLANG_MAX_SYMBOLS 500
- #else
- #define SLANG_MAX_SYMBOLS 2500
- #endif
- /* maximum number of global symbols--- slang builtin, functions, global vars */
- /* These quantities are main_types for byte-compiled code. They are used
- * by the inner_interp routine. The ones commented out with a // are
- * actually defined in slang.h because they are also used as the main_type in
- * the name table.
- */
- /* // #define SLANG_LVARIABLE 0x01 */
- #define SLANG_LOGICAL 0x02
- #define SLANG_BINARY 0x03
- /* // #define SLANG_INTRINSIC 0x06 */
- /* // #define SLANG_FUNCTION 0x07 */
- #define SLANG_LITERAL 0x08 /* constant objects */
- #define SLANG_BLOCK 0x09
- #define SLANG_EQS 0x0A
- #define SLANG_UNARY 0x0B
- #define SLANG_LUNARY 0x0C
- /* // #define SLANG_GVARIABLE 0x0D */
- /* // #define SLANG_IVARIABLE 0x0E */ /* intrinsic variables */
- /* // #define SLANG_RVARIABLE 0x0F */ /* read only variable */
- /* These 3 MUST be in this order too ! */
- #define SLANG_RETURN 0x10
- #define SLANG_BREAK 0x11
- #define SLANG_CONTINUE 0x12
- #define SLANG_EXCH 0x13
- #define SLANG_LABEL 0x14
- #define SLANG_LOBJPTR 0x15
- #define SLANG_GOBJPTR 0x16
- #define SLANG_X_ERROR 0x17
- /* These must be in this order */
- #define SLANG_X_USER0 0x18
- #define SLANG_X_USER1 0x19
- #define SLANG_X_USER2 0x1A
- #define SLANG_X_USER3 0x1B
- #define SLANG_X_USER4 0x1C
- #ifdef SLANG_NOOP
- # define SLANG_NOOP_DIRECTIVE 0x2F
- #endif
- /* If SLANG_DATA occurs as the main_type for an object in the interpreter's
- * byte-code, it currently refers to a STRING.
- */
- /* // #define SLANG_DATA 0x30 */ /* real objects which may be destroyed */
- /* Subtypes */
- #define ERROR_BLOCK 0x01
- /* gets executed if block encounters error other than stack related */
- #define EXIT_BLOCK 0x02
- #define USER_BLOCK0 0x03
- #define USER_BLOCK1 0x04
- #define USER_BLOCK2 0x05
- #define USER_BLOCK3 0x06
- #define USER_BLOCK4 0x07
- /* The user blocks MUST be in the above order */
- /* directive subtypes */
- #define SLANG_LOOP_MASK 0x80
- #define SLANG_LOOP 0x81
- #define SLANG_WHILE 0x82
- #define SLANG_FOR 0x83
- #define SLANG_FOREVER 0x84
- #define SLANG_CFOR 0x85
- #define SLANG_DOWHILE 0x86
- #define SLANG_IF_MASK 0x40
- #define SLANG_IF 0x41
- #define SLANG_IFNOT 0x42
- #define SLANG_ELSE 0x43
- /* local, global variable assignments
- * The order here is important. See interp_variable_eqs to see how this
- * is exploited. */
- #define SLANG_EQS_MASK 0x20
- /* local variables */
- /* Keep these in this order!! */
- #define SLANG_LEQS 0x21
- #define SLANG_LPEQS 0x22
- #define SLANG_LMEQS 0x23
- #define SLANG_LPP 0x24
- #define SLANG_LMM 0x25
- /* globals */
- /* Keep this on this order!! */
- #define SLANG_GEQS 0x26
- #define SLANG_GPEQS 0x27
- #define SLANG_GMEQS 0x28
- #define SLANG_GPP 0x29
- #define SLANG_GMM 0x2A
- /* intrinsic variables */
- #define SLANG_IEQS 0x2B
- #define SLANG_IPEQS 0x2C
- #define SLANG_IMEQS 0x2D
- #define SLANG_IPP 0x2E
- #define SLANG_IMM 0x2F
- #define SLANG_ELSE_MASK 0x10
- #define SLANG_ANDELSE 0x11
- #define SLANG_ORELSE 0x12
- #define SLANG_SWITCH 0x13
- /* LOGICAL SUBTYPES (operate on integers) */
- #define SLANG_MOD 16
- #define SLANG_OR 17
- #define SLANG_AND 18
- #define SLANG_BAND 19
- #define SLANG_BOR 20
- #define SLANG_BXOR 21
- #define SLANG_SHL 22
- #define SLANG_SHR 23
- /* LUnary Subtypes */
- #define SLANG_NOT 24
- #define SLANG_BNOT 25
- typedef struct SLBlock_Type
- {
- unsigned char main_type;
- unsigned char sub_type;
- union
- {
- struct SLBlock_Type *blk;
- int i_blk;
- SLang_Name_Type *n_blk;
- char *s_blk;
- #ifdef FLOAT_TYPE
- float64 *f_blk; /*literal float is a pointer */
- #endif
- long l_blk;
- }
- b;
- }
- SLBlock_Type;
- typedef struct
- {
- unsigned char main_type; /* block, intrinsic... */
- unsigned char sub_type; /* SLANG_WHILE, SLANG_DATA, ... */
- union
- {
- long l_val;
- char *s_val;
- int i_val;
- SLuser_Object_Type *uobj;
- SLang_Name_Type *n_val;
- #ifdef FLOAT_TYPE
- float64 f_val;
- #endif
- } v;
- } SLang_Object_Type;
- extern void SLang_free_object (SLang_Object_Type *);
- extern int SLang_pop_non_object (SLang_Object_Type *);
- extern void _SLdo_error (char *, ...);
- extern void SLcompile(char *);
- extern void (*SLcompile_ptr)(char *);
- typedef struct
- {
- char *name; int type;
- } SLang_Name2_Type;
- extern void SLstupid_hash(void);
- typedef struct SLName_Table
- {
- struct SLName_Table *next; /* next table */
- SLang_Name_Type *table; /* pointer to table */
- int n; /* entries in this table */
- char name[32]; /* name of table */
- int ofs[256]; /* offsets into table */
- } SLName_Table;
- extern SLName_Table *SLName_Table_Root;
- #ifdef MSWINDOWS
- extern SLang_Name_Type *SLang_Name_Table;
- #else
- extern SLang_Name_Type SLang_Name_Table[SLANG_MAX_SYMBOLS];
- #endif
- extern SLang_Name2_Type SL_Binary_Ops [];
- extern SLang_Object_Type *SLStack_Pointer;
- extern char *SLbyte_compile_name(char *);
- extern int SLang_pop(SLang_Object_Type *);
- extern char *SLexpand_escaped_char(char *, char *);
- extern void SLexpand_escaped_string (char *, char *, char *);
- extern SLang_Object_Type *_SLreverse_stack (int);
- extern SLang_Name_Type *SLang_locate_name(char *);
- /* returns a pointer to a MALLOCED string */
- extern char *SLstringize_object (SLang_Object_Type *);
- /* array types */
- typedef struct SLArray_Type
- {
- unsigned char type; /* int, float, etc... */
- int dim; /* # of dims (max 3) */
- int x, y, z; /* actual dims */
- union
- {
- unsigned char *c_ptr;
- unsigned char **s_ptr;
- int *i_ptr;
- #ifdef FLOAT_TYPE
- float64 *f_ptr;
- #endif
- SLuser_Object_Type **u_ptr;
- }
- buf;
- unsigned char flags; /* readonly, etc... If this is non-zero,
- * the buf pointer will NOT be freed.
- * See SLarray_free_array.
- */
- } SLArray_Type;
- /* Callback to delete array */
- extern void SLarray_free_array (long *);
- /* maximum size of run time stack */
- #ifdef msdos
- #define SLANG_MAX_STACK_LEN 500
- #else
- #define SLANG_MAX_STACK_LEN 2500
- #endif
- #ifdef MSWINDOWS
- extern SLang_Object_Type *SLRun_Stack;
- #else
- extern SLang_Object_Type SLRun_Stack[SLANG_MAX_STACK_LEN];
- #endif
- extern SLang_Object_Type *SLStack_Pointer;
- extern int SLang_Trace;
- extern int SLstack_depth(void);
- extern void SLang_trace_fun(char *);
- extern void SLexecute_function(SLang_Name_Type *);
- extern char *SLmake_string (char *);
- extern int _SLeqs_name(char *, SLang_Name2_Type *);
- extern void SLang_push(SLang_Object_Type *);
- extern void SLang_push_float(float64);
- extern void SLadd_variable(char *);
- extern void SLang_clear_error(void);
- extern void SLarray_info (void);
- extern int SLPreprocess_Only; /* preprocess instead of
- * bytecompiling
- */
- extern void SLdo_pop (void);
- extern unsigned int SLsys_getkey (void);
- extern int SLsys_input_pending (int);
- #ifdef REAL_UNIX_SYSTEM
- extern int SLtt_tigetflag (char *, char **);
- extern int SLtt_tigetnum (char *, char **);
- extern char *SLtt_tigetstr (char *, char **);
- extern char *SLtt_tigetent (char *);
- #endif
- #ifdef msdos
- #define MAX_INPUT_BUFFER_LEN 40
- #else
- #define MAX_INPUT_BUFFER_LEN 1024
- #endif
- extern unsigned char SLang_Input_Buffer [MAX_INPUT_BUFFER_LEN];
- extern unsigned int SLang_Input_Buffer_Len;
- extern int SLregister_types (void);
- #ifndef pc_system
- extern char *SLtt_Graphics_Char_Pairs;
- #endif /* NOT pc_system */
- extern void _SLerrno_set_return_status (void);
- extern char *_SLerrno_strerror (void);
- extern int _SLerrno_Return_Status;
|