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

📄 conf.c

📁 psp上的reader 这个是以月光老大的cnreader为基础 增加了zip文件浏览功能
💻 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 + -