📄 conf.c
字号:
#include "main.h"
#define CONFIG_FILE "config.cfg"
#define CF_BGC 0
#define CF_FONTC 1
#define CF_ROWINTER 2
#define CF_CLOINTER 3
#define CF_ISDSPPAGE 4
#define CF_ISNEXTFIRST 5
#define CF_ENCODING 6
#define CF_MAG 7
#define CF_FREQUENCY 8
#define CF_EXIT 9
#define CF_YES 10
#define CF_MAX 11
#define ROWINTER_MAX 6
#define COLINTER_MAX 6
#define MAG_MAX 2
#define FREQUENCY_MAX 90
#define menucolor 0x5555
#define selmenucolor 0xffff
BOOKCONF bookconf;
long moo_load_font(const char* fontpath) //打开字体
{
long fontsize = 0;
long size = searchFile(fontpath);
if(size)
{
if(hazfont)
{
free(hazfont);
hazfont=NULL;
}
size *= sizeof(unsigned char);
hazfont = malloc(size);
if(strchr(fontpath,'?'))
{
fontsize = unZipFile(fontpath,hazfont,size);
}
else
{
int fp=sceIoOpen(fontpath,PSP_O_RDONLY,0777);
if(fp){
fontsize = sceIoRead(fp,hazfont,size);
sceIoClose(fp);
}
else
{
debug_disp("read font(no zip)error. hit any key continue");
}
}
}
else
{
debug_disp("read font error! hit any key continue");
}
return fontsize;
}
void moo_load_conf(void)
{
unsigned char conffile[0x108];
int fd,re;
memset(conffile,0,0x108);
strcpy(conffile, PbpPath);
strcat(conffile, CONFIG_FILE);
re = searchFile(conffile);
if(!re)
{
bookconf.bgcolorR=0;
bookconf.bgcolorG=0;
bookconf.bgcolorB=0;
bookconf.fontcolorR=0xff;
bookconf.fontcolorG=0xff;
bookconf.fontcolorB=0xff;
bookconf.rowinter=3;
bookconf.colinter=0;
bookconf.magnify=1;
bookconf.frequency=5;
bookconf.isdippage=0;
bookconf.isnextfirst=0;
bookconf.encodeing=GB2312;
}
else
{
fd = sceIoOpen(conffile, PSP_O_RDONLY,0777);
if(fd)
{
sceIoRead(fd, &bookconf, sizeof(BOOKCONF));
sceIoClose(fd);
}
else
{
debug_disp("配置文件损坏,按任意键继续");
bookconf.bgcolorR=0;
bookconf.bgcolorG=0;
bookconf.bgcolorB=0;
bookconf.fontcolorR=0xff;
bookconf.fontcolorG=0xff;
bookconf.fontcolorB=0xff;
bookconf.rowinter=3;
bookconf.colinter=0;
bookconf.magnify=1;
bookconf.frequency=5;
bookconf.isdippage=0;
bookconf.isnextfirst=0;
bookconf.encodeing=GB2312;
}
}
}
void moo_save_conf(void)
{
unsigned char conffile[0x108];
int fd,re;
memset(conffile,0,0x108);
strcpy(conffile, PbpPath);
strcat(conffile, CONFIG_FILE);
re = searchFile(conffile);
if(!re)
{
fd = sceIoOpen(conffile,PSP_O_CREAT|PSP_O_WRONLY|PSP_O_TRUNC,0777);
}
else
{
fd = sceIoOpen(conffile,PSP_O_RDWR,0777);
}
if(fd)
{
sceIoWrite(fd, &bookconf, sizeof(BOOKCONF));
sceIoClose(fd);
}
else
{
debug_disp("写入配置文件失败,按任意键继续");
}
}
void moo_draw_conf(unsigned char selmenu)
{
char i,j,tmp;
int cxmenu,cxvalue;
cxmenu=20;
cxvalue=160;
pgFillvram(rgb2col(0,0,0));
chDrawRec(0,18,SCREEN_WIDTH,1, 0xffff,1);
chDrawString(0,0,0xffff,"自定义设置",1,1);
chDrawString(200,256,0xffff,"×取消/退出",1,1);
pgPrint(41,0,0x5555,PSPVER);
chDrawRec(0,254,SCREEN_WIDTH,1, 0xffff,1);
if(selmenu==CF_BGC)
chDrawString(cxmenu,32,selmenucolor,"背景颜色",1,1);
else
chDrawString(cxmenu,32,menucolor,"背景颜色",1,1);
chDrawRec(cxvalue,30,40,20,BG_COLOR,1);
chDrawRecLine(cxvalue,30,40,20,0xffff);
if(selmenu==CF_FONTC)
chDrawString(cxmenu,57,selmenucolor,"字体颜色",1,1);
else
chDrawString(cxmenu,57,menucolor,"字体颜色",1,1);
chDrawRec(cxvalue,56,40,20,FONT_COLOR,1);
chDrawRecLine(cxvalue,56,40,20,0xffff);
if(selmenu==CF_ROWINTER )
chDrawString(cxmenu,84,selmenucolor,"行 间 距",1,1);
else
chDrawString(cxmenu,84,menucolor,"行 间 距",1,1);
char tname[256];
sprintf(tname,"%d",bookconf.rowinter);
chDrawString(cxvalue,84,0xffff,tname,1,1);
if(selmenu==CF_CLOINTER)
chDrawString(cxmenu,104,selmenucolor,"字 间 距",1,1);
else
chDrawString(cxmenu,104,menucolor,"字 间 距",1,1);
sprintf(tname,"%d",bookconf.colinter);
chDrawString(cxvalue,104,0xffff,tname,1,1);
if(selmenu==CF_ISDSPPAGE)
chDrawString(cxmenu,122,selmenucolor,"显示底栏",1,1);
else
chDrawString(cxmenu,122,menucolor,"显示底栏",1,1);
if(bookconf.isdippage==0)
{
chDrawString(cxvalue,122,0xffff,"NO",1,1);
}
else
{
chDrawString(cxvalue,122,0xffff,"YES",1,1);
}
if(selmenu==CF_ISNEXTFIRST)
chDrawString(cxmenu,140,selmenucolor,"翻页保留一行",1,1);
else
chDrawString(cxmenu,140,menucolor,"翻页保留一行",1,1);
if(bookconf.isnextfirst==0)
{
chDrawString(cxvalue,140,0xffff,"NO",1,1);
}
else
{
chDrawString(cxvalue,140,0xffff,"YES",1,1);
}
if(selmenu==CF_ENCODING)
chDrawString(cxmenu,158,selmenucolor,"编码",1,1);
else
chDrawString(cxmenu,158,menucolor,"编码",1,1);
if(isUnicode)
{
chDrawString(cxvalue,158,uniitem,"UNICODE",1,1);
}
else
{
chDrawString(cxvalue,158,0xffff,"UNICODE",1,1);
}
if(bookconf.encodeing==GB2312)
{
chDrawString(cxvalue+60,158,selitem,"GB2312",1,1);
}
else
{
chDrawString(cxvalue+60,158,0xffff,"GB2312",1,1);
}
if(bookconf.encodeing==BIG5HK)
{
chDrawString(cxvalue+120,158,selitem,"BIG5HK",1,1);
}
else
{
chDrawString(cxvalue+120,158,0xffff,"BIG5HK",1,1);
}
if(bookconf.encodeing==SHIFT_JIS)
{
chDrawString(cxvalue+180,158,selitem,"SHIFT_JIS",1,1);
}
else
{
chDrawString(cxvalue+180,158,0xffff,"SHIFT_JIS",1,1);
}
if(selmenu==CF_MAG)
chDrawString(cxmenu,174,selmenucolor,"字体放大倍数",1,1);
else
chDrawString(cxmenu,174,menucolor,"字体放大倍数",1,1);
sprintf(tname,"%d",bookconf.magnify);
chDrawString(cxvalue,174,0xffff,tname,1,1);
if(selmenu==CF_FREQUENCY)
chDrawString(cxmenu,192,selmenucolor,"自动翻页速度",1,1);
else
chDrawString(cxmenu,192,menucolor,"自动翻页速度",1,1);
sprintf(tname,"%d",bookconf.frequency);
chDrawString(cxvalue,192,0xffff,tname,1,1);
if(selmenu==CF_EXIT )
chDrawString(cxmenu,210,selmenucolor,"取消",1,1);
else
chDrawString(cxmenu,210,menucolor,"取消",1,1);
if(selmenu==CF_YES)
chDrawString(cxmenu,230,selmenucolor,"确定",1,1);
else
chDrawString(cxmenu,230,menucolor,"确定",1,1);
pgScreenFlipV();
}
void moo_drawcolorpage(unsigned char *color,unsigned char *name,unsigned char sel)
{
int cxbar,cybar,i;
char msg[3][6]={"红色:","绿色:","蓝色:"};
cxbar=10;
cybar=30;
pgFillvram(rgb2col(0,0,0));
chDrawRec(0,18,SCREEN_WIDTH,1, 0xffff,1);
chDrawString(0,0,0xffff,name,1,1);
chDrawString(190,256,0xffff,"○确定 ×取消",1,1);
for(i=0;i<3;i++)
{
chDrawRec(cxbar,cybar+i*60,255,1, 0xffff,1);
if(sel==i)
chDrawRec(cxbar+color[i]-3,cybar+i*60-7,7,15,0x1f5f,1);
else
chDrawRec(cxbar+color[i]-3,cybar+i*60-7,7,15,0xffff,1);
chDrawString(cxbar,cybar+i*60+20,0xffff,msg[i],1,1);
char tname[256];
sprintf(tname,"%d",color[i]);
chDrawString(cxbar+50,cybar+i*60+20,0xffff,tname,1,1);
}
chDrawRec(350,80,80,100, rgb2col(color[0],color[1],color[2]),1);
chDrawRecLine(350,80,80,100,0xffff);
pgPrint(41,0,0x5555,PSPVER);
chDrawRec(0,254,SCREEN_WIDTH,1, 0xffff,1);
pgScreenFlipV();
}
void moo_getcolor(unsigned char *color,unsigned char *name)
{
unsigned char tpcolor[3];
unsigned char i;
tpcolor[0]=color[0];
tpcolor[1]=color[1];
tpcolor[2]=color[2];
i=0;
moo_drawcolorpage(tpcolor,name,i);
for(;;)
{
switch(Control())
{
case 3:
//pgPrint(1,7,0xffff,"You pressed circle!");
color[0]=tpcolor[0];
color[1]=tpcolor[1];
color[2]=tpcolor[2];
return;
case 4:
//pgPrint(1,7,0xffff,"You pressed cross!");
return;
case 5:
//pgPrint(1,7,0xffff,"You pressed up!");
if(i-1>=0)
i--;
else
i=2;
break;
case 6:
//pgPrint(1,7,0xffff,"You pressed down!");
if(i+1<3)
i++;
else
i=0;
break;
case 7:
//pgPrint(1,7,0xffff,"You pressed left!");
if(tpcolor[i]-1>=0)
tpcolor[i]--;
break;
case 8:
//pgPrint(1,7,0xffff,"You pressed right!");
if(tpcolor[i]+1<=255)
tpcolor[i]++;
break;
}
moo_drawcolorpage(tpcolor,name,i);
}
}
void moo_conf(void)
{
unsigned char selmenu;
unsigned char key,color[3];
moo_load_conf();
selmenu = CF_BGC;
moo_draw_conf(selmenu);
for(;;)
{
key =Control();
switch(key)
{
case 5:
//pgPrint(1,7,0xffff,"You pressed up!");
if(selmenu-1>=0)
selmenu--;
else
selmenu=CF_MAX-1;
break;
case 6:
//pgPrint(1,7,0xffff,"You pressed down!");
if(selmenu+1<CF_MAX)
selmenu++;
else
selmenu=0;
break;
case 4:
//pgPrint(1,7,0xffff,"You pressed cross!");
moo_load_conf();
return;
default:
switch(selmenu)
{
case CF_BGC :
if(key==3)
{
color[0]=bookconf.bgcolorR;
color[1]=bookconf.bgcolorG;
color[2]=bookconf.bgcolorB;
moo_getcolor(color,"背景颜色选择");
bookconf.bgcolorR=color[0];
bookconf.bgcolorG=color[1];
bookconf.bgcolorB=color[2];
}
break;
case CF_FONTC :
if(key==3)
{
color[0]=bookconf.fontcolorR;
color[1]=bookconf.fontcolorG;
color[2]=bookconf.fontcolorB;
moo_getcolor(color,"字体颜色选择");
bookconf.fontcolorR=color[0];
bookconf.fontcolorG=color[1];
bookconf.fontcolorB=color[2];
}
break;
case CF_CLOINTER:
switch(key)
{
case 7:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.colinter-1>=0)
bookconf.colinter--;
else
bookconf.colinter=ROWINTER_MAX;
break;
case 8:
//pgPrint(1,7,0xffff,"You pressed right!");
if(bookconf.colinter+1<=ROWINTER_MAX)
bookconf.colinter++;
else
bookconf.colinter=0;
break;
}
break;
case CF_ROWINTER:
switch(key)
{
case 7:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.rowinter-1>=0)
bookconf.rowinter--;
else
bookconf.rowinter=ROWINTER_MAX;
break;
case 8:
//pgPrint(1,7,0xffff,"You pressed right!");
if(bookconf.rowinter+1<=ROWINTER_MAX)
bookconf.rowinter++;
else
bookconf.rowinter=0;
break;
}
break;
case CF_ISDSPPAGE:
switch(key)
{
case 7:
case 8:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.isdippage==0)
bookconf.isdippage=1;
else
bookconf.isdippage=0;
break;
}
break;
case CF_ISNEXTFIRST:
switch(key)
{
case 7:
case 8:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.isnextfirst==0)
bookconf.isnextfirst=1;
else
bookconf.isnextfirst=0;
break;
}
break;
case CF_ENCODING:
switch(key)
{
case 7:
//<-
if(bookconf.encodeing==GB2312)
bookconf.encodeing=SHIFT_JIS;
else
bookconf.encodeing--;
isChangeEncode = true;
break;
case 8:
//->
if(bookconf.encodeing==SHIFT_JIS)
bookconf.encodeing=GB2312;
else
bookconf.encodeing++;
isChangeEncode = true;
break;
}
break;
case CF_MAG:
switch(key)
{
case 7:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.magnify-1>=1)
bookconf.magnify--;
else
bookconf.magnify=MAG_MAX;
break;
case 8:
//pgPrint(1,7,0xffff,"You pressed right!");
if(bookconf.magnify+1<=MAG_MAX)
bookconf.magnify++;
else
bookconf.magnify=1;
break;
}
break;
case CF_FREQUENCY:
switch(key)
{
case 7:
//pgPrint(1,7,0xffff,"You pressed left!");
if(bookconf.frequency-1>=1)
bookconf.frequency--;
else
bookconf.frequency=FREQUENCY_MAX;
break;
case 8:
//pgPrint(1,7,0xffff,"You pressed right!");
if(bookconf.frequency+1<=FREQUENCY_MAX)
bookconf.frequency++;
else
bookconf.frequency=1;
break;
}
break;
case CF_EXIT :
if(key==3)
{
moo_load_conf();
return;
}
break;
case CF_YES :
if(key==3)
{
moo_save_conf();
return;
}
break;
}
break;
}
moo_draw_conf(selmenu);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -