📄 comexe.c
字号:
if (rb_error) return;
if (x1<0 || x1>239 || y2<0 || x2>239 || y1<0 || y1>159 || y2<0 || y2>159)
{
rb_error=25;
return;
}
r_line(x1,y1,x2,y2,color,mod);
}
void rb_box(char *exp)//BOX
{
char temp[6];
double x1,x2,y1,y2,color,mod;
if (get_para(temp,exp,6)) return;
x1=rb_cal(exp);
y1=rb_cal(exp+temp[0]);
x2=rb_cal(exp+temp[1]);
y2=rb_cal(exp+temp[2]);
color=rb_cal(exp+temp[3]);
mod=rb_cal(exp+temp[4]);
if (rb_error) return;
if (x1<0 || x1>239 || y2<0 || x2>239 || y1<0 || y1>159 || y2<0 || y2>159)
{
rb_error=25;
return;
}
r_box(x1,y1,x2,y2,color,mod);
}
void rb_circle(char *exp)//CIRCLE
{
char temp[5];
double x,y,r,color,mod;
if (get_para(temp,exp,5)) return;
x=rb_cal(exp);
y=rb_cal(exp+temp[0]);
r=rb_cal(exp+temp[1]);
color=rb_cal(exp+temp[2]);
mod=rb_cal(exp+temp[3]);
if (rb_error) return;
if (x<0 || x>239 || y<0 || y>159)
{
rb_error=25;
return;
}
r_circle(x,y,r,color,mod);
}
void rb_poke(char *exp)
{
double id;
double val;
char temp[2];
if (get_para(temp,exp,2)) return;
id=rb_cal(exp);
val=rb_cal(exp+temp[0]);
if (rb_error) return;
if (id<0 || id>=512 || val<0 || val>=256)
{
rb_error=25;
return;
}
rb_peek_M[(u16)id]=(u8)val;
}
void rb_write(char *exp)
{
double x,y,color;
char temp[4];
char str[str_max_len];
if (get_para(temp,exp,4)) return;
x=rb_cal(exp);
y=rb_cal(exp+temp[0]);
color=rb_cal(exp+temp[1]);
get_str(str,exp+temp[2]);
if (rb_error) return;
write(x,y,color,str);
}
void rb_goto(char *exp)
{
u8 i=0;
char com[str_max_len];
struct comtree *next;
double line=rb_cal(exp);
if (rb_error) return;
next=seek_line(line);
if (next==NULL)
{
rb_error=15;
return;
}
while(next->com[i]!='\n' && next->com[i]!='\0')
{
com[i]=next->com[i];
i++;
}
com[i]='\0';
rb_now_line=next;
rb_exe_line(com);
}
void rb_inputs(char *exp)
{
char str[str_max_len];
u8 i=0;
u8 loc=0;
u8 type=0;
u8 fla;
double suf;
char *strp;
while (exp[i]!='\0')
{
if ((exp[i]=='$' || exp[i]=='#') && loc==0) type=i;
else if (exp[i]=='[' && loc==0) loc=i;
i++;
}
if (loc)//是数组元素
{
fla=1;
i=loc+i;
while (fla && exp[i]!='\0')
{
if (exp[i]=='[' ) fla++;
else if(exp[i]==']') fla--;
i++;
}
if (exp[i]=='\0')
{
rb_error=6;
return;
}
exp[i]='\0';
i++;
while (exp[i]!='\0')
{
if (exp[i]!=' ')
{
rb_error=6;
return;
}
i++;
}
suf=rb_cal(exp+loc+1);
if (rb_error) return;
}
rb_input(str);
if (type)
{
if (exp[type]=='$') fla=0;
else if(exp[type]=='#') fla=2;
exp[type]='\0';
}
else fla=1;
if(fla)
{
if (loc)
{
if (fla==1) rb_give_float_dim(exp,rb_cal(str),suf);
else rb_give_int_dim(exp,rb_cal(str),suf);
}
else if (fla==1) rb_give_float(exp,rb_cal(str));
else rb_give_int(exp,rb_cal(str));
}
else
{
if (loc)
{
strp=rb_get_str(exp);
if (suf<1 || suf>=str_max_len)
{
rb_error=3;
return;
}
strp[(u8)suf]=str[0];
}
else rb_give_str(exp,str);
}
endl();
}
void rb_exe_com(u8 comid,char *com)
{
switch(comid)
{
case 1://LET
rb_let(com);
break;
case 2://PRINT
rb_print(com);
break;
case 3://INPUT
rb_inputs(com);
break;
case 4://TAB
rb_tab(com);
break;
case 5://READ
rb_read(com);
break;
case 6://DATA
rb_data(com);
break;
case 7://RESTORE
rb_restore(com);
break;
case 8://EDN
rb_end=1;
break;
case 9://STOP
rb_end=2;//可继续
break;
case 11://IF
rb_if(com);
break;
case 14://GOTO
rb_goto(com);
break;
case 15://ON
rb_on(com);
break;
case 16://FOR
push_for(com);
break;
case 17://NEXT
rb_next();
break;
case 19://WHILE
push_while(com);
break;
case 20://WEND
rb_wend();
break;
case 23://DIM
rb_dim(com);
break;
case 24://CLS
rb_cls();
break;
case 25://LOCATE
rb_locate(com);
break;
case 26://COLOR
rb_color(com);
break;
case 27://SCREEN
rb_screen(com);
break;
case 28://DRAW
rb_draw(com);
break;
case 29://LINE
rb_line(com);
break;
case 30://BOX
rb_box(com);
break;
case 31://CIRCLE
rb_circle(com);
break;
case 32://WRITE
rb_write(com);
break;
case 37://POKE
rb_poke(com);
break;
case 40://GOSUB
push_gosub(com);
break;
case 41://RET
rb_ret();
break;
}
}
void rb_exe_line(char *com)
{
char str[str_max_len];
u8 cp=0;
u8 strp=0;
u8 ctype;
u8 iis=0;
u8 flag=0;
while (com[cp]!='\0' && com[cp]!='\r')
{
if(com[cp]=='[' || com[cp]=='=')//是赋值语句
{
while ((iis || com[cp]!=':') && com[cp]!='\0')
{
str[strp]=com[cp];
if (com[cp]=='\"') iis=!iis;
strp++;
cp++;
}
str[strp]='\0';
rb_let(str);
if (rb_error || com[cp]=='\0') return;
strp=0;
cp++;
while (com[cp]==' ') cp++;
}
else if (com[cp]==' ')//找到分隔标志
{
while (com[cp]!=' ') cp++;
if (com[cp]=='=')//是赋值语句
{
while ((iis || com[cp]!=':') && com[cp]!='\0')
{
str[strp]=com[cp];
if (com[cp]=='\"') iis=!iis;
strp++;
cp++;
}
str[strp]='\0';
rb_let(str);
if (rb_error || com[cp]=='\0') return;
strp=0;
cp++;
while (com[cp]==' ') cp++;
}
else
{
str[strp]='\0';
exp_adj(str);
str_up(str);
ctype=is_keyword(rb_key,str);
if (ctype<1)//找不到相应的关健字
{
rb_error=6;
return;
}
strp=0;
iis=1;
while ((flag || com[cp]!=':' || iis==0) && com[cp]!='\0')
{
str[strp]=com[cp];
if (com[cp]=='(' && iis) flag++;
else if (com[cp]==')' && iis) flag--;
else if (com[cp]=='\"') iis=!iis;
strp++;
cp++;
}
str[strp]='\0';
rb_exe_com(ctype,str);
if (rb_error || com[cp]=='\0') return;
strp=0;
cp++;
while (com[cp]==' ') cp++;
}
}
else
{
str[strp]=com[cp];
if (com[cp]=='\"')
{
rb_error=6;
return;
}
strp++;
cp++;
}
}
if (strp)//是不含参数的语句
{
str[strp]='\0';
exp_adj(str);
str_up(str);
ctype=is_keyword(rb_key,str);
if (ctype<1)//找不到相应的关健字
{
rb_error=6;
return;
}
rb_exe_com(ctype,str);
}
}
void get_com(char *str,char *com)
{
u8 i=0;
while (com[i]!='\r' && com[i]!='\n' && com[i]!='\0')
{
str[i]=com[i];
i++;
}
str[i]='\0';
}
void rb_run()
{
char com[str_max_len];
while (rb_now_line!=NULL)
{
get_com(com,rb_now_line->com);
rb_exe_line(com);
if (rb_error || rb_end) return;
rb_now_line=rb_now_line->next;
}
return;
}
void rb_command()
{
u8 i=1,chg=1,done=0;
u8 xp=0,yp=3;
while(TRUE)
{
CS_ReadKey();
if (CS_IsKeyDown(KEY_R))
{
i++;
if (i>4) i=1;
chg=1;
}
else if (CS_IsKeyDown(KEY_L))
{
if (i>1) i--;
else i=4;
chg=1;
}
else if(CS_IsKeyDown(KEY_A)) done=1;
if (chg)
{
rb_xp=xp;rb_yp=yp;
switch(i)
{
case 1://
RBprint("C:LOAD");
break;
case 2://
RBprint("C:LIST");
break;
case 3://
RBprint("C:RUN ");
break;
case 4://
RBprint("C:NEW ");
break;
}
chg=0;
}
if (done)
{
switch(i)
{
case 1://
if (comstart==NULL)
{
rb_load(rbcoms);
sort_list();
}
break;
case 2://
list_all();
break;
case 3://
rb_end=0;
rb_error=0;
endl();
rb_now_line=comstart;
rb_run();
if (rb_cycp && !rb_error)//有循环未完成
{
rb_error=7+rb_cycs[rb_cycp-1]->type;
rb_now_line=rb_cycs[rb_cycp-1]->begin;
}
clear_dat();
cyc_clear();
clear_dim();
build_dim();
break;
case 4://
clear_var();
build_var();
clear_com();
//clear_com();
break;
}
done=0;
//if (rb_error) rb_say_error("ERROR.");
//else rb_say_error("OK.");
rb_report();
xp=rb_xp;
yp=rb_yp;
chg=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -