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

📄 card.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
字号:
#include <csagb.h>
#include <rb_stdio.h>
#include <graph.h>
#include <Qgraph.h>
#include <rb_string.h>
#include <string.h>
#include <rb_math.h>
#include <rb_mem.h>
#define bgcolor RGB(24,15,13)
#define hicolor RGB(3,7,15)
#define lcnt 7
extern u32 _file_loc;
extern void card_set(char *M,u8 act);
typedef struct
{
   char name[10];
   s16 byear;
   u8 bmon;
   u8 bday;
   char tel[16];
   char qq[12];
   char mail[26];
   char adr[32];
   char other[52];
} card;//名片结构体
void item_pro(char *item,int len)
{
   int i=0;
   while (item[i]!='\0' && item[i]!='#' && i<len) i++;
   if (i>=len) i--;
   item[i]='\0';
}
void get_card(card *crd,u32 loc)
{
   int i;
   char *temp=(char *)crd;
   for (i=0;i<sizeof(card);i++) temp[i]=*(char *)(loc+i);
   item_pro(crd->name,10);
   item_pro(crd->tel,16);
   item_pro(crd->qq,12);
   item_pro(crd->mail,26);
   item_pro(crd->adr,32);
   item_pro(crd->other,52);
}
int open_card(u32 loc)
{
   card head;
   get_card(&head,loc);
   head.name[3]='\0';
   str_up(head.name);
   if (strcmp(head.name,"CDR")!=0) return 0;
   return head.byear;
}
void list_card(card *crd,int id,int type)
{
   char *txt=crd->tel;
   if (txt[0]=='\0') txt=crd->qq;
   Q_box(31,28+16*id,209,41+16*id,(type?hicolor:bgcolor));
   cwrite(34,30+16*id,0,crd->name);
   cwrite(105,30+16*id,0,txt);
   cwrite(33,29+16*id,RGB(30,30,30),crd->name);
   cwrite(104,29+16*id,RGB(30,30,30),txt);
}
void card_to_text(card *crd,char *txt)
{
   char temp[10];
   txt[0]='\0';
   if (crd->byear>1920)
   {
      str_cat(txt,"生日:");
      num_to_str(crd->byear,temp);
      str_cat(txt,temp);
      str_cat(txt,"年");
      num_to_str(crd->bmon,temp);
      str_cat(txt,temp);
      str_cat(txt,"月");
      num_to_str(crd->bday,temp);
      str_cat(txt,temp);
      str_cat(txt,"日\n");
   }
   if (crd->tel[0]!='\0')
   {
      str_cat(txt,"电话:");
      str_cat(txt,crd->tel);
      str_cat(txt,"\n");
   }
   if (crd->qq[0]!='\0')
   {
      str_cat(txt,"QQ:");
      str_cat(txt,crd->qq);
      str_cat(txt,"\n");
   }
   if (crd->mail[0]!='\0')
   {
      str_cat(txt,"邮箱:");
      str_cat(txt,crd->mail);
      str_cat(txt,"\n");
   }
   if (crd->adr[0]!='\0')
   {
      str_cat(txt,"住址:");
      str_cat(txt,crd->adr);
      str_cat(txt,"\n");
   }
   if (crd->other[0]!='\0')
   {
      str_cat(txt,"备注:");
      str_cat(txt,crd->other);
   }
}
void show_card_mes(card *crd)
{
   char txt[sizeof(card)+100];
   char tit[100]="查看";
   u16 *sav=(u16 *)new_malloc(54600);
   save_scr(sav,49,4,231,151);
   str_cat(tit,crd->name);
   str_cat(tit,"的资料:");
   Q_box(49,4,231,151,bgcolor);
   r_box(50,5,230,150,RGB(30,30,30),0);
   Q_box(51,6,229,20,hicolor);
   cwrite(52,8,RGB(30,30,30),tit);
   r_line(51,21,230,21,RGB(30,30,30),1);
   card_to_text(crd,txt);
   box_text(53,24,230,151,0,txt);
   box_text(52,23,229,151,RGB(30,30,30),txt);
   wait_key();
   load_scr(sav,49,4,231,151);
   new_free(sav);
}
void set_to_be_card()
{
   card_set((char *)&_file_loc,1);
}
void card_main()
{
   s16 cnt=0;
   int i,j;
   char path[80];
   u32 loc=0;
   u32 size;
   int done=2;
   int sel=0,old=0;
   int bas=0;
   int flag=1;
   card cards[255];
   card_set((char *)&loc,2);
   cnt=open_card(loc);
   if (cnt==0 || loc==0)
   {
      arlt("系统提示:","找不到名片薄或者名片薄没有记录!");
      return;
   }
   for (i=0;i<cnt;i++) get_card(&cards[i],loc+(i+1)*sizeof(card));
   Q_box(29,9,211,141,bgcolor);
   r_box(30,10,210,140,RGB(30,30,30),0);
   Q_box(31,11,209,25,hicolor);
   cwrite(32,13,RGB(30,30,30),"通讯录");
   while (1)
   {
      if (flag) {CS_ReadKey();flag=0;} else readkey();
      if (CS_IsKeyDown(KEY_B)) return;
      else if(CS_IsKeyDown(KEY_A)) show_card_mes(&cards[bas+sel]);
      else if(CS_IsKeyDown(KEY_UP))
      {
         if (sel) {sel--;done=1;}
         else if(bas) {bas--;done=2;}
      }
      else if(CS_IsKeyDown(KEY_DOWN))
      {
         if (sel+bas+1<cnt)
         {
            if (sel+1<lcnt) {sel++;done=1;}
            else {bas++;done=2;}
         }
      }
      else if(CS_IsKeyDown(KEY_R) || CS_IsKeyDown(KEY_RIGHT))
      {
         if (sel+bas+1+lcnt<cnt)
         {
            bas+=lcnt;
            done=2;
         }
         else if(sel+bas+1<cnt)
         {
            bas=cnt-1;
            sel=0;
            done=2;
         }
      }
      else if(CS_IsKeyDown(KEY_L) || CS_IsKeyDown(KEY_LEFT))
      {
         if (bas>=lcnt) {bas-=lcnt;done=2;}
         else if(sel) {done=(bas?2:1);bas=0;sel=0;}
      }
      if (done==1)
      {
         done=0;
         if (old!=sel) list_card(&cards[bas+old],old,0);
         list_card(&cards[bas+sel],sel,1);
         old=sel;
      }
      else if (done==2)
      {
         done=0;
         for (i=0;i<lcnt;i++)
         {
            if (bas+i>=cnt) break;
            list_card(&cards[bas+i],i,0);
         }
         for (j=i;j<lcnt;j++) Q_box(31,28+16*j,209,41+16*j,bgcolor);
         list_card(&cards[bas+sel],sel,1);
         old=sel;
      }
   }
}

⌨️ 快捷键说明

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