📄 rbasic.c
字号:
#include <CsAgb.h>
#include <rb_stdio.h>
#define LDBAS 0x8100000
u8 is_basic_run;
u8 basic_auto_run=0;//basic自动运行
u8 rb_error=0;//出错类型
u8 rb_xp=0,rb_yp=0;//当前光标
u16 rb_bg=0,rb_co=RGB(30,30,30);//背景与字体颜色
char *rb_peek_M;//内存区
int *rb_int_var;//整型变量基址
double *rb_float_var;//实型变量基址
char *rb_str_var;//字符串变量基址
int **rb_int_dim;//整型数组
u16 *rb_int_dim_indx;//整型数组下标基址
double **rb_float_dim;//实型数组
u16 *rb_float_dim_indx;//实型数组下标基址
u8 rb_int_dim_cnt;
u8 rb_float_dim_cnt;
u8 rb_int_cnt;
u8 rb_float_cnt;
u8 rb_str_cnt;
u8 rb_def_cnt;
u8 rb_mark_cnt;
u32 rb_fbas;//文件基址
u32 rb_clen;//代码长度
u32 *rb_marks;//行标识
u32 rb_pc;//程序计数器
u32 rb_bas;//代码基址
u32 rb_nbas;//当前代码基址
char *rb_codes;//代码缓冲区
u32 *rb_mes;//文本信息区
char *rb_txt;//文本存储区
extern int basic_load(u32 loc);
extern u32 list_fsys(u32 loc);
u8 basic_menu(u8 sel)
{
u8 done=1;
u8 xp,yp;
char com[7][80]={":EXIT",":LOAD",":RUN",":LIST",":CLS",":NEW",":FILES"};
if (rb_xp) endl();
xp=rb_xp;
yp=rb_yp;
while (1)
{
CS_ReadKey();
if (CS_IsKeyDown(KEY_A)) return sel;
else if(CS_IsKeyDown(KEY_B)) return 0;
else if(CS_IsKeyDown(KEY_UP)||CS_IsKeyDown(KEY_LEFT)
||CS_IsKeyDown(KEY_L))
{
sel=(sel+6)%7;
done=1;
}
else if(CS_IsKeyDown(KEY_DOWN)||CS_IsKeyDown(KEY_RIGHT)
||CS_IsKeyDown(KEY_R))
{
sel=(sel+1)%7;
done=1;
}
if (done)
{
done=0;
rb_xp=xp;rb_yp=yp;
RBprint(" ");
rb_xp=xp;rb_yp=yp;
Rprint(RGB(30,30,0),com[sel]);
}
}
}
u32 rb_select_file()
{
r_box(0,16,239,159,RGB(0,9,16),1);
r_box(0,0,239,159,RGB(30,30,30),0);
title("请选择BASIC源文件");
return list_fsys(0);
}
int rbasic(u32 lc)
{
u8 sel=1;
u32 loc=lc;
basic_init();//初始化BASIC设定
//loc=LDBAS;
rb_pc=0;rb_error=0;is_basic_run=1;
if (basic_auto_run)
{
if (basic_load(loc)) arlt("系统提示:","您打开的不是BASIC文件或者文件不能运行.\nRBASIC 2.0");
rb_exe();
free_var();
myfree(rb_marks);
rb_free_def();
rb_file_free();
dat_clean();//数据清除
free_cyc();
is_basic_run=0;
basic_auto_run=0;
music_reset();
stop_dsound();
myfree(rb_mes);
rb_deamon_clear();
myfree(rb_peek_M);
return 0;
}
else loc=0;
while (1)
{
sel=basic_menu(sel);
switch(sel)
{
case 0://退出BASIC
rb_free_def();
rb_file_free();
dat_clean();//数据清除
free_cyc();
is_basic_run=0;
stop_dsound();
music_reset();
free_var();
myfree(rb_marks);
myfree(rb_mes);
myfree(rb_peek_M);
return 1;
case 1://载入文件
if (rb_bas==0) loc=rb_select_file();
if (loc) basic_load(loc);
rb_cls(NULL);
break;
case 2://执行文件
stop_dsound();
music_reset();
if (rb_bas) rb_exe();
rb_def_clear();
free_dim();
rb_error=0;
is_basic_run=1;
rb_pc=0;
rb_close_files();//关闭所有打开的文件
dat_clean();//数据清除
clean_cyc();
rb_deamon_clear();
break;
case 3://LIST
if (rb_bas) rb_list_all();
break;
case 4://CLS
rb_cls(NULL);
break;
case 5://NEW
free_var();//清除变量
rb_free_def();
myfree(rb_marks);//清除标识
rb_bas=0;
break;
case 6://
rb_list_srm();
break;
}
RBprint("\nOK.\n");
}
return 1;
}
void test()
{
run_again:
basic_init();//初始化BASIC设定
//loc=LDBAS;
rb_pc=0;rb_error=0;is_basic_run=1;
basic_load(LDBAS);
rb_exe();
rb_free_def();
rb_file_free();
dat_clean();//数据清除
free_cyc();
is_basic_run=0;
stop_dsound();
music_reset();
free_var();
myfree(rb_marks);
myfree(rb_mes);
RBprint("\nOK.\n");
RBprint("PRESS ANY KEY TO RUN AGAIN\n");
wait_key();
goto run_again;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -