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

📄 rbasic.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 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 + -