bassv.c
来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 183 行
C
183 行
#include <CsAgb.h>
#include <string.h>
#include <rb_string.h>
#include <rb_stdio.h>
#include <graph.h>
#include <Qgraph.h>
#define rb_indx 4
#define rb_base 104
extern u8 *rb_peek_M;//可操作内存
extern void show_text(char *tit,char *txt);
extern u8 arlt(char *tit,char *mes);
void sv_creat()
{
char sign[4]="xxx";
CS_InitSRAM();
CS_LoadFromSRAM(sign,3);
if (strcmp(sign,"LNG")!=0)//尚未建立
{
CS_SeekInSRAM(SRAM_SEEK_START,0);
CS_SaveToSRAM("LNG",3);
}
}
int rb_open_srm(char *name,int type)//打开存栏文件 type=1没有则创建
{
char get[21];
int i,found=0;
int blank=-1;//是否有剩余空间
get[20]='\0';
str_up(name);
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx);
for (i=0;i<5;i++)
{
CS_LoadFromSRAM(get,20);
str_up(get);
if (get[0]!='#') {if (blank<0) blank=i;continue;}//最近一个空文件
else if (strcmp(name,get+1)==0) return i;//#号为文件正常标识;返回文件编号
}
if (blank>=0 && type)//文件没有找到但有剩余空间
{
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx+blank*20);
CS_SaveToSRAM("#",1);//置文件可用标识
name[19]='\0';
CS_SaveToSRAM(name,19);//创建文件
return blank;//返回新文件代号
}
return -1;//失败啦
}
void rb_del_srm(char *name)//删除basic存档
{
int id=rb_open_srm(name,0);
if (id<0) return;//没有找到文件
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx+id*20);
CS_SaveToSRAM("*",1);//置文件为空标识
}
void rb_list_srm()//列出basic存档文件
{
int i;
char get[21];
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx);
for (i=0;i<5;i++)
{
CS_LoadFromSRAM(get,20);
str_up(get);
if (get[0]!='#') continue;//不可读文件
RBprint(get+1);
endl();
}
}
int rb_load_srm(char *name)//将储备文件调入内存
{
int id=rb_open_srm(name,0);
if (id<0) return 1;//文件打开失败
CS_SeekInSRAM(SRAM_SEEK_START,rb_base+id*2048);
CS_LoadFromSRAM(rb_peek_M,2048);//保存数据
return 0;
}
int rb_save_srm(char *name)//将内存数据存入储备区
{
int id=rb_open_srm(name,1);//以创建方式打开储备文件
if (id<0) return 1;//文件打开失败
CS_SeekInSRAM(SRAM_SEEK_START,rb_base+id*2048);
CS_SaveToSRAM(rb_peek_M,2048);
return 0;
}
void rb_sv_files()
{
char get[20];
char name[5][20];
char id[5][3]={"#1","#2","#3","#4","#5"};
char text[2*1024+1];
u8 used[5];
int i;
u8 sel=0,old=0,done=1;
again:
for (i=0;i<5;i++)
{
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx);
for (i=0;i<5;i++)
{
CS_LoadFromSRAM(get,20);
if (get[0]=='#') {strcpy(name[i],get+1);used[i]=1;}
else {strcpy(name[i],"空闲");used[i]=0;}
}
}
r_box(40,27,200,134,RGB(24,15,13),1);
Q_box(41,28,199,133,RGB(30,30,30));
for (i=0;i<7;i++) Q_box(42,29+i*15,198,29+13+i*15,RGB(24,15,13));
cwrite(44,31,0,"RBASIC储备管理");
cwrite(43,30,RGB(30,30,30),"RBASIC储备管理");
for (i=0;i<5;i++)
{
cwrite(44,31+(i+1)*15,0,id[i]);
cwrite(43,30+(i+1)*15,RGB(30,30,30),id[i]);
cwrite(65,31+(i+1)*15,0,name[i]);
cwrite(64,30+(i+1)*15,RGB(30,30,30),name[i]);
}
cwrite(44,31+6*15,0,"[A]查看[R]删除[B]退出");
cwrite(43,30+6*15,RGB(30,30,30),"[A]查看[R]删除[B]退出");
while (1)
{
CS_ReadKey();
if (CS_IsKeyDown(KEY_LEFT) || CS_IsKeyDown(KEY_UP))
{
sel=(sel+4)%5;
done=1;
}
else if(CS_IsKeyDown(KEY_RIGHT) || CS_IsKeyDown(KEY_DOWN))
{
sel=(sel+1)%5;
done=1;
}
else if (CS_IsKeyDown(KEY_A) && used[sel])//查看
{
CS_SeekInSRAM(SRAM_SEEK_START,rb_base+sel*2048);
CS_LoadFromSRAM(text,2048);
show_text(name[sel],text);
done=1;
goto again;
}
else if (CS_IsKeyDown(KEY_B)) return;
else if (CS_IsKeyDown(KEY_R)&&used[sel])
{
text[0]='\0';
strcpy(text,"您真要删除储备文件");
str_cat(text,name[sel]);
str_cat(text,"吗?\n [A]确定 [B]取消");
if (arlt("系统提示:",text))
{
CS_SeekInSRAM(SRAM_SEEK_START,rb_indx+sel*20);
CS_SaveToSRAM("*",1);
used[sel]=0;
strcpy(name[sel],"空闲");
}
done=1;
goto again;
}
if (done)
{
Q_box(42,29+(old+1)*15,198,29+13+(old+1)*15,RGB(24,15,13));
cwrite(44,31+(old+1)*15,0,id[old]);
cwrite(43,30+(old+1)*15,RGB(30,30,30),id[old]);
cwrite(65,31+(old+1)*15,0,name[old]);
cwrite(64,30+(old+1)*15,RGB(30,30,30),name[old]);
Q_box(42,29+(sel+1)*15,198,29+13+(sel+1)*15,RGB(13,15,24));
cwrite(44,31+(sel+1)*15,0,id[sel]);
cwrite(43,30+(sel+1)*15,RGB(30,30,13),id[sel]);
cwrite(65,31+(sel+1)*15,0,name[sel]);
cwrite(64,30+(sel+1)*15,RGB(30,30,13),name[sel]);
old=sel;
done=0;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?