📄 _slang.h
字号:
extern int SLadd_global_variable (char *);extern void _SLang_clear_error (void);extern int _SLdo_pop (void);extern unsigned int _SLsys_getkey (void);extern int _SLsys_input_pending (int);#ifdef IBMPC_SYSTEMextern unsigned int _SLpc_convert_scancode (unsigned int, unsigned int, int);#define _SLTT_KEY_SHIFT 1#define _SLTT_KEY_CTRL 2#define _SLTT_KEY_ALT 4#endiftypedef struct _SLterminfo_Type SLterminfo_Type;extern SLterminfo_Type *_SLtt_tigetent (char *);extern char *_SLtt_tigetstr (SLterminfo_Type *, char *);extern int _SLtt_tigetnum (SLterminfo_Type *, char *);extern int _SLtt_tigetflag (SLterminfo_Type *, char *);#if SLTT_HAS_NON_BCE_SUPPORTextern int _SLtt_get_bce_color_offset (void);#endifextern void (*_SLtt_color_changed_hook)(void);extern unsigned char SLang_Input_Buffer [SL_MAX_INPUT_BUFFER_LEN];extern int _SLregister_types (void);extern SLang_Class_Type *_SLclass_get_class (SLtype);extern VOID_STAR _SLclass_get_ptr_to_value (SLang_Class_Type *, SLang_Object_Type *);extern void _SLclass_type_mismatch_error (SLtype, SLtype);extern int _SLclass_init (void);extern int _SLclass_copy_class (SLtype, SLtype);extern int (*_SLclass_get_typecast (SLtype, SLtype, int))(SLtype, VOID_STAR, unsigned int, SLtype, VOID_STAR);extern int (*_SLclass_get_binary_fun (int, SLang_Class_Type *, SLang_Class_Type *, SLang_Class_Type **, int))(int, SLtype, VOID_STAR, unsigned int, SLtype, VOID_STAR, unsigned int, VOID_STAR);extern int (*_SLclass_get_unary_fun (int, SLang_Class_Type *, SLang_Class_Type **, int))(int, SLtype, VOID_STAR, unsigned int, VOID_STAR);extern int _SLarith_register_types (void);extern SLtype _SLarith_Arith_Types [];extern int _SLang_is_arith_type (SLtype);extern void _SLang_set_arith_type (SLtype, unsigned char);#if _SLANG_OPTIMIZE_FOR_SPEEDextern int _SLang_get_class_type (SLtype);extern void _SLang_set_class_type (SLtype, SLtype);#endifextern int _SLarith_bin_op (SLang_Object_Type *, SLang_Object_Type *, int);extern int _SLarray_add_bin_op (SLtype);extern int _SLang_call_funptr (SLang_Name_Type *);extern void _SLset_double_format (char *);extern SLang_Name_Type *_SLlocate_global_name (char *);extern SLang_Name_Type *_SLlocate_name (char *);extern char *_SLdefines[];#define SL_ERRNO_NOT_IMPLEMENTED 0x7FFFextern int _SLerrno_errno;extern int _SLerrno_init (void);extern int _SLstdio_fdopen (char *, int, char *);extern void _SLstruct_pop_args (int *);extern void _SLstruct_push_args (SLang_Array_Type *);extern int _SLarray_aput (void);extern int _SLarray_aget (void);extern int _SLarray_inline_implicit_array (void);extern int _SLarray_inline_array (void);extern int _SLarray_wildcard_array (void);extern int_SLarray_typecast (SLtype, VOID_STAR, unsigned int, SLtype, VOID_STAR, int);extern int _SLarray_aput_transfer_elem (SLang_Array_Type *, int *, VOID_STAR, unsigned int, int);extern int _SLarray_aget_transfer_elem (SLang_Array_Type *, int *, VOID_STAR, unsigned int, int);extern void _SLarray_free_array_elements (SLang_Class_Type *, VOID_STAR, unsigned int);extern SLang_Foreach_Context_Type *_SLarray_cl_foreach_open (SLtype, unsigned int);extern void _SLarray_cl_foreach_close (SLtype, SLang_Foreach_Context_Type *);extern int _SLarray_cl_foreach (SLtype, SLang_Foreach_Context_Type *);extern int _SLarray_matrix_multiply (void);extern void (*_SLang_Matrix_Multiply)(void);extern int _SLarray_next_index (int *, int *, unsigned int);extern int _SLarray_init_slarray (void);extern SLang_Array_Type *SLang_create_array1 (SLtype, int, VOID_STAR, int *, unsigned int, int);extern int _SLassoc_aput (SLtype, unsigned int);extern int _SLassoc_aget (SLtype, unsigned int);extern int _SLcompile_push_context (SLang_Load_Type *);extern int _SLcompile_pop_context (void);extern int _SLang_Auto_Declare_Globals;typedef struct{ union { long long_val; char *s_val; /* Used for IDENT_TOKEN, FLOAT, etc... */ SLang_BString_Type *b_val; } v; int free_sval_flag; unsigned int num_refs; unsigned long hash;#if _SLANG_HAS_DEBUG_CODE int line_number;#endif SLtype type;}_SLang_Token_Type;extern void _SLcompile (_SLang_Token_Type *);extern void (*_SLcompile_ptr)(_SLang_Token_Type *);/* slmisc.c */extern char *_SLskip_whitespace (char *s);/* slospath.c */extern char *_SLpath_find_file (char *); /* slstring returned *//* *** TOKENS *** *//* Note that that tokens corresponding to ^J, ^M, and ^Z should not be used. * This is because a file that contains any of these characters will * have an OS dependent interpretation, e.g., ^Z is EOF on MSDOS. *//* Special tokens */#define ILLEGAL_TOKEN 0x00 /* no token has this value */#define EOF_TOKEN 0x01#define RPN_TOKEN 0x02#define NL_TOKEN 0x03#define NOP_TOKEN 0x05#define FARG_TOKEN 0x06#define TMP_TOKEN 0x07#define RESERVED1_TOKEN 0x0A /* \n */#define RESERVED2_TOKEN 0x0D /* \r *//* Literal tokens */#define CHAR_TOKEN 0x10#define UCHAR_TOKEN 0x11#define SHORT_TOKEN 0x12#define USHORT_TOKEN 0x13#define INT_TOKEN 0x14#define UINT_TOKEN 0x15#define LONG_TOKEN 0x16#define ULONG_TOKEN 0x17#define IS_INTEGER_TOKEN(x) ((x >= CHAR_TOKEN) && (x <= ULONG_TOKEN))#define FLOAT_TOKEN 0x18#define DOUBLE_TOKEN 0x19#define RESERVED3_TOKEN 0x1A /* ^Z */#define COMPLEX_TOKEN 0x1B#define STRING_TOKEN 0x1C#define BSTRING_TOKEN 0x1D#define _BSTRING_TOKEN 0x1E /* byte-compiled BSTRING */#define ESC_STRING_TOKEN 0x1F/* Tokens that can be LVALUES */#define IDENT_TOKEN 0x20#define ARRAY_TOKEN 0x21#define DOT_TOKEN 0x22#define METHOD_TOKEN 0x24#define IS_LVALUE_TOKEN (((t) <= METHOD_TOKEN) && ((t) >= IDENT_TOKEN))/* do not use these values */#define RESERVED4_TOKEN 0x23 /* # */#define RESERVED5_TOKEN 0x25 /* % *//* Flags for struct fields */#define STATIC_TOKEN 0x26#define READONLY_TOKEN 0x27#define PRIVATE_TOKEN 0x28#define PUBLIC_TOKEN 0x29/* Punctuation tokens */#define OBRACKET_TOKEN 0x2a#define CBRACKET_TOKEN 0x2b#define OPAREN_TOKEN 0x2c#define CPAREN_TOKEN 0x2d#define OBRACE_TOKEN 0x2e#define CBRACE_TOKEN 0x2f#define COMMA_TOKEN 0x31#define SEMICOLON_TOKEN 0x32#define COLON_TOKEN 0x33#define NAMESPACE_TOKEN 0x34/* Operators */#define POW_TOKEN 0x38/* The order here must match the order in the Binop_Level table in slparse.c */#define FIRST_BINARY_OP 0x39#define ADD_TOKEN 0x39#define SUB_TOKEN 0x3a#define TIMES_TOKEN 0x3b#define DIV_TOKEN 0x3c#define LT_TOKEN 0x3d#define LE_TOKEN 0x3e#define GT_TOKEN 0x3f#define GE_TOKEN 0x40#define EQ_TOKEN 0x41#define NE_TOKEN 0x42#define AND_TOKEN 0x43#define OR_TOKEN 0x44#define MOD_TOKEN 0x45#define BAND_TOKEN 0x46#define SHL_TOKEN 0x47#define SHR_TOKEN 0x48#define BXOR_TOKEN 0x49#define BOR_TOKEN 0x4a#define POUND_TOKEN 0x4b /* matrix multiplication */#define LAST_BINARY_OP 0x4b#define IS_BINARY_OP(t) ((t >= FIRST_BINARY_OP) && (t <= LAST_BINARY_OP))/* unary tokens -- but not all of them (see grammar) */#define DEREF_TOKEN 0x4d#define NOT_TOKEN 0x4e#define BNOT_TOKEN 0x4f#define IS_INTERNAL_FUNC(t) ((t >= 0x50) && (t <= 0x56))#define POP_TOKEN 0x50#define CHS_TOKEN 0x51#define SIGN_TOKEN 0x52#define ABS_TOKEN 0x53#define SQR_TOKEN 0x54#define MUL2_TOKEN 0x55#define EXCH_TOKEN 0x56/* Assignment tokens. Note: these must appear with sequential values. * The order here must match the specific lvalue assignments below. * These tokens are used by rpn routines in slang.c. slparse.c maps them * onto the specific lvalue tokens while parsing infix. * Also the assignment _SLANG_BCST_ assumes this order */#define ASSIGN_TOKEN 0x57#define PLUSEQS_TOKEN 0x58#define MINUSEQS_TOKEN 0x59#define TIMESEQS_TOKEN 0x5A#define DIVEQS_TOKEN 0x5B#define BOREQS_TOKEN 0x5C#define BANDEQS_TOKEN 0x5D#define PLUSPLUS_TOKEN 0x5E#define POST_PLUSPLUS_TOKEN 0x5F#define MINUSMINUS_TOKEN 0x60#define POST_MINUSMINUS_TOKEN 0x61/* Directives */#define FIRST_DIRECTIVE_TOKEN 0x62#define IFNOT_TOKEN 0x62#define IF_TOKEN 0x63#define ELSE_TOKEN 0x64#define FOREVER_TOKEN 0x65#define WHILE_TOKEN 0x66#define FOR_TOKEN 0x67#define _FOR_TOKEN 0x68#define LOOP_TOKEN 0x69#define SWITCH_TOKEN 0x6A#define DOWHILE_TOKEN 0x6B#define ANDELSE_TOKEN 0x6C#define ORELSE_TOKEN 0x6D#define ERRBLK_TOKEN 0x6E#define EXITBLK_TOKEN 0x6F/* These must be sequential */#define USRBLK0_TOKEN 0x70#define USRBLK1_TOKEN 0x71#define USRBLK2_TOKEN 0x72#define USRBLK3_TOKEN 0x73#define USRBLK4_TOKEN 0x74#define CONT_TOKEN 0x75#define BREAK_TOKEN 0x76#define RETURN_TOKEN 0x77#define CASE_TOKEN 0x78#define DEFINE_TOKEN 0x79#define DO_TOKEN 0x7a#define VARIABLE_TOKEN 0x7b#define GVARIABLE_TOKEN 0x7c#define _REF_TOKEN 0x7d#define PUSH_TOKEN 0x7e#define STRUCT_TOKEN 0x7f#define TYPEDEF_TOKEN 0x80#define NOTELSE_TOKEN 0x81#define DEFINE_STATIC_TOKEN 0x82#define FOREACH_TOKEN 0x83#define USING_TOKEN 0x84#define DEFINE_PRIVATE_TOKEN 0x85#define DEFINE_PUBLIC_TOKEN 0x86/* Note: the order here must match the order of the generic assignment tokens. * Also, the first token of each group must be the ?_ASSIGN_TOKEN. * slparse.c exploits this order, as well as slang.h. */#define FIRST_ASSIGN_TOKEN 0x90#define _STRUCT_ASSIGN_TOKEN 0x90#define _STRUCT_PLUSEQS_TOKEN 0x91#define _STRUCT_MINUSEQS_TOKEN 0x92#define _STRUCT_TIMESEQS_TOKEN 0x93#define _STRUCT_DIVEQS_TOKEN 0x94#define _STRUCT_BOREQS_TOKEN 0x95#define _STRUCT_BANDEQS_TOKEN 0x96#define _STRUCT_PLUSPLUS_TOKEN 0x97#define _STRUCT_POST_PLUSPLUS_TOKEN 0x98#define _STRUCT_MINUSMINUS_TOKEN 0x99#define _STRUCT_POST_MINUSMINUS_TOKEN 0x9A#define _ARRAY_ASSIGN_TOKEN 0xA0#define _ARRAY_PLUSEQS_TOKEN 0xA1#define _ARRAY_MINUSEQS_TOKEN 0xA2#define _ARRAY_TIMESEQS_TOKEN 0xA3#define _ARRAY_DIVEQS_TOKEN 0xA4#define _ARRAY_BOREQS_TOKEN 0xA5#define _ARRAY_BANDEQS_TOKEN 0xA6#define _ARRAY_PLUSPLUS_TOKEN 0xA7#define _ARRAY_POST_PLUSPLUS_TOKEN 0xA8#define _ARRAY_MINUSMINUS_TOKEN 0xA9#define _ARRAY_POST_MINUSMINUS_TOKEN 0xAA#define _SCALAR_ASSIGN_TOKEN 0xB0#define _SCALAR_PLUSEQS_TOKEN 0xB1#define _SCALAR_MINUSEQS_TOKEN 0xB2#define _SCALAR_TIMESEQS_TOKEN 0xB3#define _SCALAR_DIVEQS_TOKEN 0xB4#define _SCALAR_BOREQS_TOKEN 0xB5#define _SCALAR_BANDEQS_TOKEN 0xB6#define _SCALAR_PLUSPLUS_TOKEN 0xB7#define _SCALAR_POST_PLUSPLUS_TOKEN 0xB8#define _SCALAR_MINUSMINUS_TOKEN 0xB9#define _SCALAR_POST_MINUSMINUS_TOKEN 0xBA#define _DEREF_ASSIGN_TOKEN 0xC0#define _DEREF_PLUSEQS_TOKEN 0xC1#define _DEREF_MINUSEQS_TOKEN 0xC2#define _DEREF_TIMESEQS_TOKEN 0xC3#define _DEREF_DIVEQS_TOKEN 0xC4#define _DEREF_BOREQS_TOKEN 0xC5#define _DEREF_BANDEQS_TOKEN 0xC6#define _DEREF_PLUSPLUS_TOKEN 0xC7#define _DEREF_POST_PLUSPLUS_TOKEN 0xC8#define _DEREF_MINUSMINUS_TOKEN 0xC9#define _DEREF_POST_MINUSMINUS_TOKEN 0xCA#define LAST_ASSIGN_TOKEN 0xCA#define IS_ASSIGN_TOKEN(t) (((t)>=FIRST_ASSIGN_TOKEN)&&((t)<=LAST_ASSIGN_TOKEN))#define _INLINE_ARRAY_TOKEN 0xE0#define _INLINE_IMPLICIT_ARRAY_TOKEN 0xE1#define _NULL_TOKEN 0xE2#define _INLINE_WILDCARD_ARRAY_TOKEN 0xE3#define LINE_NUM_TOKEN 0xFC#define ARG_TOKEN 0xFD#define EARG_TOKEN 0xFE#define NO_OP_LITERAL 0xFFtypedef struct{ /* sltoken.c */ /* SLang_eval_object */ SLang_Load_Type *llt; SLPreprocess_Type *this_slpp; /* prep_get_char() */ char *input_line; char cchar; /* get_token() */ int want_nl_token; /* slparse.c */ _SLang_Token_Type ctok; int block_depth; int assignment_expression; /* slang.c : SLcompile() */ _SLang_Token_Type save_token; _SLang_Token_Type next_token; void (*slcompile_ptr)(_SLang_Token_Type *);}_SLEval_Context;extern int _SLget_token (_SLang_Token_Type *);extern void _SLparse_error (char *, _SLang_Token_Type *, int);extern void _SLparse_start (SLang_Load_Type *);extern int _SLget_rpn_token (_SLang_Token_Type *);extern void _SLcompile_byte_compiled (void);extern int (*_SLprep_eval_hook) (char *);#ifdef HAVE_VSNPRINTF#define _SLvsnprintf vsnprintf#elseextern int _SLvsnprintf (char *, unsigned int, char *, va_list);#endif#ifdef HAVE_SNPRINTF# define _SLsnprintf snprintf#elseextern int _SLsnprintf (char *, unsigned int, char *, ...);#endifextern int _SLsecure_issetugid (void);extern char *_SLsecure_getenv (char *);#undef _INLINE_#if defined(__GNUC__) && _SLANG_USE_INLINE_CODE# define _INLINE_ __inline__#else# define _INLINE_#endif#endif /* _PRIVATE_SLANG_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -