📄 run.c
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <command.h>
#include <rb_stdio.h>
#include <rb_var.h>
//"LET","PRINT","INPUT","TAB","READ","DATA","RESTORE","END","STOP","REM",//10
//"IF","THEN","ELSE","GOTO","ON","FOR","NEXT","TO","STEP","WHILE","WEND",//21
//"BREAK","DEF","DIM","CLS","LOCATE","COLOR","SCREEN","DRAW","LINE","BOX",//31
//"CIRCLE","WRITE","OPEN","AS","CLOSE","GET","CALL","POKE","DEL","PLAY","GOSUB",//42
//"RET","WAIT","LOAD","SEEK","PUT","EDIT","TEXT","ELLIPSE","MVSCR","SVSCR",//52
//"LDSCR","EXEC","SAVE","SORT","DEAMON","DEND","CLEAN","DCNT","DFRQ","SUB",//62
//"BMP","QUAD","TRIAN","PUSH","POP","OUTPUT","APPEND","RANDOM","SWAP"//71
//命令或语句关健词
#define LDBAS 0x8100000
#define end_tp 8
extern void rb_list(char *exp);
extern int basic_open(u32 loc);
extern int var_mem();//分配变量空间
void rb_ek(char *exp)
{
rb_error=6;
}
void rb_rem(char *exp)
{
return;
}
void rb_run(char *exp)
{
static void (* keyfun[72])(char *)={
rb_let,rb_print,rb_inputs,rb_tab,rb_read,rb_data,rb_restore,rb_end,rb_stop,rb_rem,
rb_if,rb_ek,rb_ek,rb_goto,rb_on,rb_for,rb_next,rb_ek,rb_ek,rb_while,rb_wend,
rb_ek,rb_def,rb_dim,rb_cls,rb_locate,rb_color,rb_screen,rb_draw,rb_line,rb_box,
rb_circle,rb_write,rb_open,rb_ek,rb_close,rb_get,rb_ek,rb_poke,rb_del,rb_play,rb_gosub,
rb_ret,rb_ek,rb_load,rb_seek,rb_put,rb_edit,rb_text,rb_ellipse,rb_mvscr,rb_svscr,
rb_ldscr,rb_ek,rb_save,rb_sort,rb_deamon_com,rb_dend,rb_clean,rb_dcnt,rb_dfrq,rb_sub,
rb_bmp,rb_quad,rb_trian,rb_ek,rb_ek,rb_ek,rb_ek,rb_ek,rb_swap,rb_textbox};
if (exp[0]=='@') return;//标识行
if (exp[0]!='K') {rb_let(exp);return;}//是赋值语句
keyfun[exp[1]-bg_id](exp+3);
}
void rb_exe()
{
int sp;
int cp=0;
int pp=0xffffffff;
char code[256*2];
char *temp;
u32 loc;
rb_codes=(char *)rb_bas;
while (rb_pc<rb_clen && is_basic_run!=basic_end)
{
sp=0;
DmaWait(3);
//temp[sp]=rb_codes[rb_pc];
if (pp!=rb_pc)
{
loc=(u32)rb_codes+rb_pc;
DmaCopy(3,loc&0xFFFFFFFC,code+cp,200,16);
DmaWait(3);
}
temp=code+(loc&0x3)+cp;
while (temp[sp]!=end_tp)
{
sp++;
rb_pc++;
//temp[sp]=rb_codes[rb_pc];
}
temp[sp]='\0';
if (sp<2) break;
rb_pc++;
pp=rb_pc;
cp=cp?0:256;
loc=(u32)rb_codes+rb_pc;
DmaCopy(3,loc&0xFFFFFFFC,code+cp,200,16);//预取下一条语句
if (temp[0]!='@') rb_run(temp);
if (rb_error)
{
rb_say_error();
rb_list(temp);
return;
}
}
return;
}
int basic_load(u32 loc)//载入bascic文件
{
if (basic_open(loc)) {rb_bas=0;return 1;}
rb_fbas=loc;
var_mem();//分配变量空间并初始化
if (rb_def_cnt) rb_def_mem();//分配自定义函数数据空间
rb_pc=0;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -