desk.c

来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 234 行

C
234
字号
#include <csagb.h>
#include <rbasic.h>
#include <Qgraph.h>
#include <graph.h>

#define MSTRT  0x020020F0

extern int ico_bmp(u8 xp,u8 yp,u8 *bmes);
extern u32 find_file(char *fname,u32 loc);//查询
extern u32 get_floc(u32 fid);
extern void cbmp(u32 loc,u8 x,u8 y);
extern void load_scr(u16 *sav,u8 xp,u8 yp,u8 xsp,u8 ysp);
extern void show_text(char *tit,char *txt);
extern const char redboy_help[];
const u16 deicon[]={//默认图标
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,
1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,32767,32767,32767,32767,
32767,32767,1057,4763,4763,5820,6844,6844,9948,12060,13084,14109,16189,20349,26590,
26590,24510,20349,15165,14109,14109,11004,9948,7900,6844,5820,4763,1057,32767,32767,
32767,32767,32767,32767,1057,3739,4763,5820,6844,9948,9948,9948,14109,14109,16189,
20349,24510,26590,24510,20349,15165,14109,11004,23255,13741,7900,23255,13741,4763,
1057,32767,32767,32767,32767,32767,32767,1057,4763,4763,6844,6844,7900,9948,11004,
14109,14109,16189,20349,26590,29597,26590,20349,16189,14109,14109,11004,9948,7900,
7900,6844,4763,1057,32767,32767,32767,32767,32767,32767,1057,1057,1057,1057,1057,
1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,
1057,1057,1057,1057,1057,32767,32767,32767,32767,32767,32767,1057,23255,23255,23255,
22198,23254,22197,23254,22198,23254,22198,22198,22198,22197,21141,20084,21140,
20083,21140,20084,21140,20084,20084,20083,23255,0,32767,32767,32767,32767,32767,
32767,1057,23255,31710,30653,31710,30653,31710,30653,30653,30654,28540,29597,
29597,28539,29596,28539,29596,28540,28539,29596,27483,27483,26426,27482,31711,1057,
32767,32767,32767,32767,32767,32767,1057,23255,31711,30653,30653,31710,30653,
31710,30654,30654,29597,29597,28540,28539,29596,28539,29596,28539,29596,28539,27483,
27483,27483,26426,30653,1057,32767,32767,32767,32767,32767,32767,1057,22198,
31710,30654,31710,30653,30653,30654,30654,29597,29597,28539,29596,29596,28539,28540,
28539,28539,28540,28540,27483,27483,26425,27482,31711,1057,32767,32767,32767,
32767,32767,32767,1057,23255,30653,30653,30653,31710,30654,30654,29597,29597,28540,
29596,28539,28540,29596,28539,29596,28540,28540,27483,27483,26426,26425,27482,
30654,1057,32767,32767,32767,32767,32767,32767,1057,23254,30653,31710,30654,30654,
30654,28540,29597,29597,28539,29596,28539,29596,28539,28539,28540,28540,27483,
26426,27482,27482,27482,26425,31711,1057,32767,32767,32767,32767,32767,32767,1057,
23254,30654,30653,30653,31710,30654,29597,29597,28540,28539,29596,28539,28540,
29596,28539,29596,27483,26426,27483,26426,26425,26425,26426,30653,1057,32767,32767,
32767,32767,32767,32767,1057,23254,30653,31710,30654,30654,29597,28540,29596,
28539,29596,28539,29596,28539,28540,29596,27483,27483,27483,26425,27482,27482,
27482,26425,31711,1057,32767,32767,32767,32767,32767,32767,1057,23255,30653,30654,
30654,29597,28540,29597,28539,29596,28539,28540,28539,29596,28539,28540,27483,
27483,26426,27482,26425,26426,26425,26426,31710,1057,32767,32767,32767,32767,32767,
32767,1057,22198,31710,30654,29597,28540,29597,28539,29596,28539,29596,28539,
29596,28540,28540,26426,27483,27482,26425,27482,26426,26425,27482,26426,29597,1057,
32767,32767,32767,32767,32767,32767,1057,23255,30654,30654,29597,28540,29596,
29596,28539,29596,28539,28539,28540,28540,27483,27483,27483,26426,27482,26425,
27482,26425,26426,26426,29597,1057,32767,32767,32767,32767,32767,32767,1057,22198,
30654,29597,28540,29596,28539,29596,28539,28540,28539,29596,28540,28540,27483,26426,
27482,26425,27482,26426,26425,26425,27482,26426,29597,1057,32767,32767,32767,
32767,32767,32767,1057,23255,29597,28540,29597,28539,29596,28539,28539,29596,28539,
28540,28540,27483,27483,26426,26425,27482,26425,27482,26425,27482,26426,25369,
28540,1057,32767,32767,32767,32767,32767,32767,1057,22198,29597,28540,29596,28539,
29596,29596,28539,28539,28540,28540,26426,27483,26425,27482,27482,26425,26426,
26425,27482,26426,25369,25369,29597,1057,32767,32767,32767,32767,32767,32767,1057,
23254,28540,29596,28539,29596,28539,28540,29596,28539,29596,27483,27483,26426,
27482,26426,26425,27482,26425,26426,26426,26426,25369,25369,28540,1057,32767,32767,
32767,32767,32767,32767,1057,23254,28539,28539,29596,28539,28539,29596,28539,
28540,28540,27483,26426,27482,26425,27482,26425,26425,27482,26426,26426,25369,
25369,25369,29597,1057,32767,32767,32767,32767,32767,32767,1057,23255,29596,29596,
28540,29596,29596,28539,29596,28540,26426,27483,26426,27482,26425,26425,26426,
26426,26426,26426,25369,25369,25369,25369,28540,1057,32767,32767,32767,32767,32767,
32767,1057,25369,32767,32767,32767,32767,32767,32767,31711,31711,31711,31711,
31711,31711,31711,31711,31711,31711,29597,29597,29597,29597,29597,29597,29597,1057,
32767,32767,32767,32767,32767,32767,1057,1057,1057,1057,1057,1057,1057,1057,1057,
1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,1057,
1057,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767};

const char main_item[10][10]={
   "我的文档","RBASIC", "英语学习","书签浏览","游戏娱乐",
   "科学计算","记事本", "系统设置","附加功能","帮助说明"};
   
void sys_ico(u32 *_ico_loc)//摸索系统图标
{
   int i=0;
   u32 fdloc,fid;
   char fd[20]="SYSTEM\0";
   char icos[11][30]={
   "FILES.BMP",   "RBASIC.BMP",  "ENGLISH.BMP", "BOOKMARK.BMP",   "GAMES.BMP",
   "CALCULATOR.BMP","EDITOR.BMP","SETS.BMP",    "OTHER.BMP",      "HELP.BMP",
   "LOGO.BMP"};
   for (i=0;i<11;i++) _ico_loc[i]=0;
   fdloc=find_file(fd,0);
   if (fdloc==0) return;
   for (i=0;i<11;i++)
   {
      fid=find_file(icos[i],fdloc);
      //if (fid==0) {arlt("AA","AA");break;}
      _ico_loc[i]=get_floc(fid);
   }
}

void redraw_desk()//桌面重绘
{
   int i;
   u32 bmps[11];
   sys_ico(bmps);//获得桌面图标
   if (bmps[10]) cbmp(bmps[10],255,0);//有壁纸
   else DmaClear(3,RGB(7,13,20),mVRAM,240*160*2,16);//没有壁纸
   for (i=0;i<5;i++)//画图标
   {
      if (bmps[i])
      {
         if (!ico_bmp(10+i*40,40,bmps[i]))
         load_scr(deicon,10+i*40,40,10+31+i*40,40+31);
      }
      else load_scr(deicon,10+i*40,40,10+31+i*40,40+31);
      if (bmps[i+5])
      {
         if (!ico_bmp(10+i*40,40+40,bmps[i+5]))
         load_scr(deicon,10+i*40,40+40,10+31+i*40,40+40+31);
      }
      else load_scr(deicon,10+i*40,40+40,10+31+i*40,40+40+31);
   }
   DmaCopy(3,mVRAM,MSTRT,240*160*2,16);//保存屏幂到缓存
}
void cover_desk()
{
   DmaCopy(3,MSTRT,mVRAM,240*160*2,16);//从缓存恢复屏幂
}
void desk()
{
   u8 sel=0,old=0;
   u8 done=1;
   u8 xp,yp;
   redraw_desk();

   while(1)
   {
      readkey();
      //if (CS_IsKeyDown(KEY_START)) SoftResetRom(0);
      if (CS_IsKeyDown(KEY_UP) || CS_IsKeyDown(KEY_DOWN))
      {
         sel=(sel+5)%10;
         done=1;
      }
      else if(CS_IsKeyDown(KEY_LEFT) || CS_IsKeyDown(KEY_L))
      {
         sel=(sel+9)%10;
         done=1;
      }
      else if(CS_IsKeyDown(KEY_RIGHT) || CS_IsKeyDown(KEY_R))
      {
         sel=(sel+1)%10;
         done=1;
      }
      else if(CS_IsKeyDown(KEY_A))
      {
         done=1;
         old=sel;
         myobj_stop();
         switch (sel)
         {
            case 0://我的文件
            dir();
            redraw_desk();
            break;
            case 1://rbasic
            Q_box(0,0,239,159,0);
            rbasic();
            redraw_desk();
            break;
            case 2://english
            eng_menu();
            break;
            case 3://书签
            list_bmark(0,0);
            redraw_desk();
            break;
            case 4://games
            game_menu();
            break;
            case 5://计算器
            calc_menu();
            break;
            case 6://
            cover_desk();
            break;
            case 7://系统设置
            file_menu();
            break;
            case 8://其它功能
            card_menu();
            break;
            case 9://帮助说明
            show_text("REDBOY相关操作指南",redboy_help);
            redraw_desk();
            break;
         }
         myobj_restart();
      }
      if (done)
      {
         done=0;
         xp=old%5;
         if (old>4) yp=1;
         else yp=0;
         if (old!=sel) r_box(10+xp*40,40+yp*40,10+31+xp*40,40+yp*40+31,0,5);
         old=sel;
         xp=old%5;
         if (old>4) yp=1;
         else yp=0;
         r_box(10+xp*40,40+yp*40,10+31+xp*40,40+yp*40+31,0,5);
         r_box(10,10,120,26,0,0);
         r_box(11,11,119,25,RGB(30,30,30),0);
         Q_box(12,12,118,24,RGB(30,30,30));
         cwrite(13,13,RGB(3,7,15),main_item[sel]);
      }
   }
}

⌨️ 快捷键说明

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