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

📄 comexe.c

📁 可以在嵌入式应用中
💻 C
📖 第 1 页 / 共 2 页
字号:
   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 + -