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 + -
显示快捷键?