📄 sub.c
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <rb_mem.h>
extern u32 myfopen(char *fname,u32 *size);
extern void rb_get_str(char *exp,char *str);
extern int basic_open(u32 loc);
typedef struct
{
u8 int_cnt;
u8 float_cnt;
u8 str_cnt;
u8 int_dim_cnt;
u8 float_dim_cnt;
u8 mark_cnt;
u8 def_cnt;
int *int_var;
double *float_var;
char *str_var;
int **int_dim;
u8 *int_dim_indx;
double **float_dim;
u8 *float_dim_indx;
u32 *marks;
u32 *mes;
u32 bas;
u32 pc;
u32 clen;
u32 fbas;
} RB_DAT;
RB_DAT *rb_sv;
u8 is_in_sub=0;
void rb_save_mes()//保存当前信息
{
rb_sv=(RB_DAT *)mymalloc(sizeof(RB_DAT));
if (rb_sv==NULL) {rb_error=1;return;}
rb_sv->int_cnt=rb_int_cnt;
rb_sv->float_cnt=rb_float_cnt;
rb_sv->str_cnt=rb_str_cnt;
rb_sv->int_dim_cnt=rb_int_dim_cnt;
rb_sv->float_dim_cnt=rb_float_dim_cnt;
rb_sv->def_cnt=rb_def_cnt;
rb_sv->mark_cnt=rb_mark_cnt;
rb_sv->int_var=rb_int_var;
rb_int_var=NULL;
rb_sv->float_var=rb_float_var;
rb_float_var=NULL;
rb_sv->str_var=rb_str_var;
rb_str_var=NULL;
rb_sv->int_dim=rb_int_dim;
rb_int_dim=NULL;
rb_sv->float_dim=rb_float_dim;
rb_float_dim=NULL;
rb_sv->int_dim_indx=rb_int_dim_indx;
rb_int_dim_indx=NULL;
rb_sv->float_dim_indx=rb_float_dim_indx;
rb_float_dim_indx=NULL;
rb_sv->marks=rb_marks;
rb_marks=NULL;
rb_sv->pc=rb_pc;
rb_sv->bas=rb_bas;
rb_sv->fbas=rb_fbas;
rb_sv->clen=rb_clen;
rb_sv->mes=rb_mes;
rb_mes=(u32 *)mymalloc(4*7);
}
void rb_load_mes()
{
rb_int_cnt=rb_sv->int_cnt;
rb_float_cnt=rb_sv->float_cnt;
rb_str_cnt=rb_sv->str_cnt;
rb_int_dim_cnt=rb_sv->int_dim_cnt;
rb_float_dim_cnt=rb_sv->float_dim_cnt;
rb_def_cnt=rb_sv->def_cnt;
rb_mark_cnt=rb_sv->mark_cnt;
rb_int_var=rb_sv->int_var;
rb_float_var=rb_sv->float_var;
rb_str_var=rb_sv->str_var;
rb_int_dim=rb_sv->int_dim;
rb_int_dim_indx=rb_sv->int_dim_indx;
rb_float_dim=rb_sv->float_dim;
rb_float_dim_indx=rb_sv->float_dim_indx;
rb_marks=rb_sv->marks;
rb_pc=rb_sv->pc;
rb_bas=rb_sv->bas;
rb_fbas=rb_sv->fbas;
rb_clen=rb_sv->clen;
myfree(rb_mes);
rb_mes=rb_sv->mes;
myfree(rb_sv->marks);
myfree(rb_sv);
}
void rb_sub(char *exp)
{
u32 loc,size;
char fname[str_max_len];
rb_get_str(exp,fname);
loc=myfopen(fname,&size);
if (is_in_sub){rb_error=31;return;}
if (loc==0) {rb_error=17;return;}
rb_save_mes();//保存当前数据
if (rb_error) return;
if (basic_open(loc)==0)//正常打开BAS文档
{
is_in_sub=1;
rb_fbas=loc;
rb_pc=0;//设置程序入口
var_mem();//分配变量空间并初始化
rb_def_save();
if (rb_def_cnt) rb_def_mem();//分配自定义函数数据空间
rb_exe();//执行程序
if (rb_error==0) is_basic_run=1;//设置basic正常运行态
free_var();//释放变量空间
rb_free_def();//释放自定义函数空间
}
else rb_error=17;
rb_def_load();//载入老数据
is_in_sub=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -