📄 file_com.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 + -