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

📄 file_com.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
字号:
#include <CsAgb.h>
#include <rb_stdio.h>
#include <rbasic.h>
#include <graph.h>
#include <Qgraph.h>
#include <rb_var.h>
#include <rb_file.h>
#define mod_rd 1 //只读方式
#define mod_wt 2 //只写方式
#define mod_rn 3 //随机方式
#define mod_ap 4 //追加方式

extern u8 get_para(char *exp,double *nump,char *strp,char *tp);
extern double rb_cal(char *exp);
extern void save_scr(u16 *sav,u8 xp,u8 yp,u8 xsp,u8 ysp);
extern void load_scr(u16 *sav,u8 xp,u8 yp,u8 xsp,u8 ysp);
extern u32 myfopen(char *fname,u32 *size);
extern void rb_get_str(char *exp,char *str);
extern u8 get_pstr(char lp,char rp,char *exp,char *sv);
extern int rb_load_srm(char *name);//将储备文件调入内存
extern int rb_save_srm(char *name);//将内存数据存入储备区
extern void rb_get_str(char *exp,char *str);
extern void rb_del_srm(char *name);

void rb_open(char *exp)
{
   u8 fid,fmod;
   int i,sp;
   char temp[str_max_len];
   char fname[str_max_len];
   i=0;
   sp=0;
   while (1)
   {
      if (exp[i]=='K' && exp[i+1]==bg_id+15) break;
      if (exp[i]=='\0') {rb_error=6;return;}
      temp[sp]=exp[i];
      i++;
      sp++;
   }
   temp[sp-1]='\0';
   rb_get_str(temp,fname);//取得文件名
   i+=3;
   if (exp[i]!='K') {rb_error=6;return;}
   i++;
   switch(exp[i])//fmod
   {
      case bg_id+2://input
         fmod=mod_rd;
         break;
      case bg_id+67://output
         fmod=mod_wt;
         break;
      case bg_id+68://append
         fmod=mod_ap;
         break;
      case bg_id+69://random
         fmod=mod_rn;
         break;
      default:
         rb_error=6;
         return;
   }
   i+=2;
   if (exp[i]!='K' || exp[i+1]!=bg_id+34 || exp[i+3]!='#') {rb_error=6;return;}
   i+=4;
   sp=0;
   while (exp[i]!='\0')
   {
      temp[sp]=exp[i];
      i++;
      sp++;
   }
   temp[sp]='\0';
   fid=rb_cal(temp);//show_float(fid,RGB(30,30,0));
   rb_fopen(fname,fid,fmod);
}

void rb_close(char *exp)
{
   if (exp[0]!='#') {rb_error=6;return;}
   rb_fclose(rb_cal(exp+1));
}

void rb_seek(char *exp)
{
   double num[2];
   if (exp[0]!='#') {rb_error=6;return;}
   if (get_para(exp+1,num,NULL,"2NN")) return;
   rb_fseek(num[0],num[1]);
}

void rb_put(char *exp)
{
   int i,sp,type,len,id;
   int int_num;
   double float_num;
   char str[str_max_len];
   switch(exp[0])
   {
      case 'F':
         type=1;
         i=2;
         break;
      case 'I':
         type=2;
         i=2;
         break;
      case 'C':
         type=3;
         i=2;
         break;
      case 'c':
         type=4;
         i=3;
         i+=get_pstr('[',']',exp+i,str);
         if (i==3) {rb_error=6;return;}
         len=rb_cal(str);
      default:
         rb_error=6;
         return;
   }
   if (exp[i]!=',' || exp[i+1]!='#') {rb_error=6;return;}
   i+=2;
   id=rb_cal(exp+i);
   switch (type)
   {
      case 1:
         float_num=get_float_val(exp[1]-bg_id);
         rb_fwrite(id,&float_num,sizeof(float));
         break;
      case 2:
         int_num=get_int_val(exp[1]-bg_id);
         rb_fwrite(id,&int_num,sizeof(int));
         break;
      case 3:
         str_copy(str,get_str_val(exp[1]-bg_id));
         rb_fwrite(id,str,str_max_len);
         break;
      case 4:
         str_copy(str,get_str_val(exp[1]-bg_id));
         rb_fwrite(id,str,len);
         break;
   }
}
void rb_get(char *exp)
{
   int i,sp,type,len,id;
   int int_num;
   double float_num;
   char str[str_max_len];
   switch(exp[0])
   {
      case 'F':
         type=1;
         i=2;
         break;
      case 'I':
         type=2;
         i=2;
         break;
      case 'C':
         type=3;
         i=2;
         break;
      case 'c':
         type=4;
         i=3;
         i+=get_pstr('[',']',exp+i,str);
         if (i==3) {rb_error=6;return;}
         len=rb_cal(str);
      default:
         rb_error=6;
         return;
   }
   if (exp[i]!=',' || exp[i+1]!='#') {rb_error=6;return;}
   i+=2;
   id=rb_cal(exp+i);
   switch (type)
   {
      case 1:
         rb_fread(id,&float_num,sizeof(float));
         give_float_val(exp[1]-bg_id,float_num);
         break;
      case 2:
         rb_fread(id,&int_num,sizeof(int));
         give_int_val(exp[1]-bg_id,int_num);
         break;
      case 3:
         rb_fread(id,str,str_max_len);
         give_str_val(exp[1]-bg_id,str);
         break;
      case 4:
         rb_fread(id,str,len);
         str[len]='\0';
         give_str_val(exp[1]-bg_id,str);
         break;
   }
}
void rb_load(char *exp)
{
   char fname[str_max_len];
   rb_get_str(exp,fname);
   if (rb_load_srm(fname)) rb_error=20;
}

void rb_save(char *exp)
{
   char fname[str_max_len];
   rb_get_str(exp,fname);
   if (rb_load_srm(fname)) rb_error=21;
}

void rb_del(char *exp)
{
   char fname[str_max_len];
   rb_get_str(exp,fname);
   rb_del_srm(fname);
}
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -