📄 var.h
字号:
/*** SmallBasic Variable Manager.** 2000-05-27, Nicholas Christopoulos** This program is distributed under the terms of the GPL v2.0 or later* Download the GNU Public License (GPL) from www.gnu.org*/#if !defined(_sb_var_h)#define _sb_var_h#include "pmem.h"#define V_NULL 0#define V_INT 0#define V_NUM 2#define V_STR 3#define V_ARRAY 4#define V_PTR 5#define V_ANY 6// predefined system variables - index#define SYSVAR_OSVER 0#define SYSVAR_OSNAME 1#define SYSVAR_SBVER 2#define SYSVAR_PI 3#define SYSVAR_XMAX 4#define SYSVAR_YMAX 5#define SYSVAR_BPP 6#define SYSVAR_TRUE 7#define SYSVAR_FALSE 8#define SYSVAR_LINECHART 9#define SYSVAR_BARCHART 10//#define MAXDIM 4 // think before increase this, (possible stack overflow)#if defined(__cplusplus)extern "C" {#endif// needed for BCDUMPstruct keyword_s { char name[16]; byte code; };extern struct keyword_s keyword_table[];// VARIANT DATA TYPEstruct var_s { byte type; byte const_flag; // value double n; long i; // generic ptr byte *ptr; int size; // the size of ptr, for array the number of the variables // array int lbound[MAXDIM]; // bounds int ubound[MAXDIM]; byte maxdim; };typedef struct var_s var_t;typedef var_t* var_p_t;struct lab_s { word ip; };typedef struct lab_s lab_t;struct stknode_s { byte type; word exit_ip; union { struct { var_t *var_ptr; // 'FOR' variable word to_expr_ip; // IP of 'TO' expression word step_expr_ip; // IP of 'STEP' expression word jump_ip; // code block IP } vfor; // CMD: FOR-TO-NEXT struct { word lcond; // result of the last condition } vif; // CMD: IF/ELIF struct { word ret_ip; // return ip } vgosub; // CMD: GOSUB struct { word ret_ip; // return ip word pcount; // number of parameters word rvid; // return-variable ID var_t* retvar; // return-variable data } vcall; // CMD: CALL UDP/F struct { word vid; // variable index in tvar var_t *vptr; // previous variable } vdvar; // CMD: Create dynamic variable (LOCAL or PARAMETER) struct { word vcheck; // checks (1=BYVAL ONLY, 3=BYVAL|BYREF, 2=BYREF ONLY) var_t *res; // variable pointer (for BYVAL this is a clone) } param; // CMD: parameter (CALL UDP/F) } x; };typedef struct stknode_s stknode_t;var_t* v_new();int v_is_nonzero(var_t *v) ;double v_getval(var_t *v) ;long v_igetval(var_t *v) ;#define v_getint(a) v_igetval((a))int v_compare(var_t *a, var_t *b) ;int v_addtype(var_t *a, var_t *b) ;void v_add(var_t *result, var_t *a, var_t *b) ;void v_init(var_t *v) ;void v_free(var_t *v) ;void v_set(var_t *dest, const var_t *src) ;void v_inc(var_t *a, var_t *b) ;int v_sign(var_t *x) ;var_t* v_getelemptr(var_t *v, word index) ;void v_createstr(var_t *v, const char *src) ;void v_tostr(var_t *arg) ;var_t* v_clone(const var_t *source);void v_resize_array(var_t *v, int size);//void rt_raise(const char *fmt, ...);dword code_getnext32(void) ;double code_getnext64f(void) ;int code_checkop(byte op) ;int code_checkop_s(byte *str) ;void code_jump_label(word label_id) ;//void code_jump(word id) ;#define code_jump(newip) prog_ip=(newip)void code_push(stknode_t *node) ;void code_pop(stknode_t *node) ;var_t *code_getvarptr(void) ;int code_isnullarray_nc(int start) ;int code_isnullarray(void);#define code_peek() prog_source[prog_ip]#define code_getnext() prog_source[prog_ip++]#define code_skipnext() prog_ip++#define code_skipnext16() prog_ip+=2#if defined(_PalmOS) // Motorola CPUs#define code_getnext16() (prog_ip+=2, (prog_source[prog_ip-2]<<8)|prog_source[prog_ip-1])#define code_peeknext16() ((prog_source[prog_ip]<<8)|prog_source[prog_ip+1])#define code_peek16(o) ((prog_source[prog_ip+(o)]<<8)|prog_source[prog_ip+(o)+1])#else // Intel CPUs#define code_getnext16() (prog_ip+=2, (prog_source[prog_ip-1]<<8)|prog_source[prog_ip-2])#define code_peeknext16() ((prog_source[prog_ip+1]<<8)|prog_source[prog_ip])#define code_peek16(o) ((prog_source[prog_ip+(o)+1]<<8)|prog_source[prog_ip+(o)])#endifvoid setsysvar_int(int index, long val);void setsysvar_num(int index, double val);#if defined(__cplusplus)}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -