input.c
来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 148 行
C
148 行
#include <CsAgb.h>
#include <rb_stdio.h>
#include <graph.h>
#include <rbasic.h>
#include <rb_string.h>
#include <rb_mem.h>
#define mVSV (u16 *) 0x06012C00
const char inp_ENG[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const char inp_eng[]="abcdefghijklmnopqrstuvwxyz";
const char inp_num[]="0123456789.E+-*/=^";
const char inp_sbl[]="{}()[]:;\"',.!?<>#$@%&~`|_\\ ";
extern u32 TM_CN;//时钟遍数器
extern void (*sys_deamon)();
extern void wait(u32 count);
void rin_deamon()
{
r_box(rb_xp*8,rb_yp*10+2,rb_xp*8+8,rb_yp*10+9,0,5);
}
void rb_input(char *str,u8 type)
{
char *inp[4]={inp_ENG,inp_eng,inp_num,inp_sbl};
u8 num[4]={26,26,18,28};
u8 tp=0;
u8 sel=type?2:0;
u8 get=0;
u8 old=0;
u8 done=1;
u8 lp,len=str_len(str);
u8 xp=rb_xp,yp=rb_yp;
u32 loc=rb_yp>13?1:0;
int i;
u16 *vsv;
lp=len;
vsv=(u16 *)new_malloc(6*1024);
CS_BackupScreenMem(&gScreen,0,148-loc*40,239,159-loc*40,mVSV,MODE_3);
RBprint(str);
sys_deamon=rin_deamon;
while (1)
{
readkey();
if (CS_IsKeyDown(KEY_LEFT))
{
done=2;
get=(get+num[sel]-1)%num[sel];
}
else if (CS_IsKeyDown(KEY_RIGHT))
{
done=2;
get=(get+1)%num[sel];
}
else if (CS_IsKeyHold(KEY_UP) && CS_IsKeyDown(KEY_L))
{
done=1;
sel=(sel+3)%4;
}
else if (CS_IsKeyHold(KEY_UP) && CS_IsKeyDown(KEY_R))
{
done=1;
sel=(sel+1)%4;
}
else if (CS_IsKeyDown(KEY_UP))
{
done=2;
get=get>5?(get-5):num[sel]-1;
}
else if(CS_IsKeyDown(KEY_DOWN))
{
done=2;
get=(get+5)%num[sel];
}
else if(CS_IsKeyDown(KEY_L))
{
if (lp)
{
done=3;
lp=lp-1;
}
}
else if(CS_IsKeyDown(KEY_R))
{
if (lp<len)
{
done=3;
lp=lp+1;
}
}
else if (CS_IsKeyDown(KEY_A)) done=4;
else if (CS_IsKeyDown(KEY_B)) done=5;
else if (CS_IsKeyDown(KEY_START)) done=6;
switch(done)
{
case 1://转换字符集
get=0;
old=0;
Q_box(0,148-loc*40,239,159-loc*40,RGB(3,7,15),1);
for (i=0;i<num[sel];i++)
paint_eng(1+i*8,149-loc*40,RGB(30,30,30),inp[sel][i]);
r_box(get*8,149-loc*40,get*8+9,159-loc*40,0,5);
done=0;
break;
case 2://
r_box(old*8,149-loc*40,old*8+9,159-loc*40,0,5);
r_box(get*8,149-loc*40,get*8+9,159-loc*40,0,5);
if (get==old) r_box(get*8,149-loc*40,get*8+9,159-loc*40,0,5);
done=0;
old=get;
case 3://
sys_deamon=NULL;
rb_xp=xp;
rb_yp=yp;
RBprint(str);
RBprint(" ");
sys_deamon=rin_deamon;
rb_xp=(xp+lp)%30;
rb_yp=yp+(xp+lp)/30;
done=0;
break;
case 4://加入字符
for(i=len+1;i>lp;i--) str[i]=str[i-1];
str[lp]=inp[sel][get];
lp++;
len=str_len(str);
done=3;
break;
case 5://删除
if (lp==0) break;
for (i=lp-1;i<len;i++) str[i]=str[i+1];
lp--;
len=str_len(str);
done=3;
break;
case 6://end
sys_deamon=NULL;
rb_xp=xp;
rb_yp=yp;
CS_RestoreScreenMem(&gScreen,0,148-loc*40,239,159-loc*40,mVSV,MODE_3);
new_free(vsv);
RBprint(str);
return;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?