⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 var.h

📁 smallbasic for linux
💻 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 + -