亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? book.c

?? psp上的reader 這個是以月光老大的cnreader為基礎 增加了zip文件瀏覽功能
?? C
字號:
#include "main.h" 
 
//#define TEMPFILE "fatms0:/PSP/GAME/cnreader/moonread_tempfile.tmp"

#include "uni2cjk.c"
//#include "jisunicode.c"
#include "sjis.h"
#include "big5hkscs.h"

unsigned char* gPr;
BOOKINF  gBookInf;
unsigned char gTextBuf[BUF_MAX];

/*
  trans single unicode to cjk coke
*/
int uni2cjk(unsigned char *uni,unsigned char *cjk){
	//if(cjk==NULL)cjk=uni;
	int transcount = 0;

	unsigned char tmp[2];
	tmp[0]=uni[0];
	tmp[1]=uni[1];
	if(tmp[0]<0x81 && tmp[1]==0){
		cjk[0]=tmp[0];
		transcount = 1;
	}else{
		int pos = (int)(*(unsigned short*)tmp)*2;
		cjk[0]=UNI_CJK[pos];
		cjk[1]=UNI_CJK[pos+1];
		transcount = 2;
		if(cjk[0]==0x3f && cjk[1]==0)
		{
			cjk[0]=0xa1;
			cjk[1]=0xf6;
		}
	}
	return transcount;
}
//bg5hk -> unicode
int bg5hk2cjk(unsigned char *big5hk,unsigned char *cjk){
	//if(cjk==NULL)cjk=jis;
	int transcount = 0;

	if(big5hk[0]<0x81){
		cjk[0]=big5hk[0];
		transcount = 1;
	}else{
		unsigned int iunic=0x1fff;
		big5hkscs_mbtowc(&iunic,big5hk,2);

		transcount = uni2cjk((unsigned char*)&iunic,cjk);
	}
	return transcount;
}
/*
  conv a string 
*/
void big52cjk(unsigned char *gib5,unsigned char *cjk){
	if(cjk==NULL)cjk=gib5;

	int ilen = strlen((const char*)gib5);
	int i=0;

	for(;i<ilen;){
		i+=bg5hk2cjk(gib5+i,cjk+i);
	}
}

//sjis -> unicode
int sjis2cjk(unsigned char *jis,unsigned char *cjk){
	//if(cjk==NULL)cjk=jis;
	int transcount = 0;

	if(jis[0]<0x81){
		cjk[0]=jis[0];
		transcount = 1;
	}else{
		unsigned int iunic=0x1fff;
		//cancel moon's jis2uni table
		//iunic = (int)JIS_UNICODE[*(unsigned short*)tmp]*2;
		sjis_mbtowc(&iunic,jis,2);

		transcount = uni2cjk((unsigned char*)&iunic,cjk);
	}
	return transcount;
}
/*
  conv a string 
*/
void jis2cjk(unsigned char *jis,unsigned char *cjk){
	if(cjk==NULL)cjk=jis;

	int ilen = strlen((const char*)jis);
	int i=0;

	for(;i<ilen;){
		i+=sjis2cjk(jis+i,cjk+i);
	}
}

void dsp_num(int x,int y,int col,int num) 
{
	char str[10];
	
	sprintf(str,"%d",num);
	pgPrint(x,y,col,str);
}
void dsp_numl(int x,int y,int col,int num) 
{
	char str[10];
	
	sprintf(str,"%d",num);
	pgPrint(x-(strlen(str)-1),y,col,str);
}

void disp(char *str,bool wait){
	pgWaitV();
	pgFillvram(rgb2col(0,0,0));
	
	chDrawString((SCREEN_WIDTH-strlen(str)*8)/2,200,0xffff,str,1,1);
	chDrawRec(0,254,SCREEN_WIDTH,1, 0xffff,1);
	pgPrint(0,32,0x5555,PSPVER);
	pgScreenFlipV();
	if(wait){
		wait_button();
	}
}

void debug_disp(char *str)
{
	/*
	pgWaitV();
	pgFillvram(rgb2col(0,0,0));
	
	chDrawString((SCREEN_WIDTH-strlen(str)*8)/2,200,0xffff,str,1,1);
	chDrawRec(0,254,SCREEN_WIDTH,1, 0xffff,1);
	pgPrint(0,32,0x5555,PSPVER);
	pgScreenFlipV();
	if(wait){
		wait_button();
	}
	*/
	disp(str,true);
}

int unZipFile(const char* zipfilename,unsigned char* szBuffer,int size)
{
	char zipname[264];
	strcpy(zipname,zipfilename);

	char * pzn;
	char * pfn;
	//get zip file name
	char *p = strchr(zipname,'?');
	*p=0;
	pzn = zipname;
	//get compress file name
	pfn = p+1;
	//

	unzFile hUnzip = unzOpen(pzn);
	if (!hUnzip)	return 0;

	unz_file_info fileInfo;
	int nLen,i;

	if (unzLocateFile(hUnzip,pfn, 1) != UNZ_OK)
	return 0;

	if (unzOpenCurrentFile(hUnzip) != UNZ_OK)	return 0;

	unsigned long dwSizeRead = unzReadCurrentFile(hUnzip, szBuffer, size);

	if(dwSizeRead<0)
	{
		debug_disp("讀取zip文件時出錯,按任意鍵繼續");
		dwSizeRead = 0;
	}
	if(unzCloseCurrentFile(hUnzip)==UNZ_CRCERROR)
	{
		debug_disp("CRC校驗錯誤.按任意鍵繼續");
		dwSizeRead = 0;
	}

	unzClose(hUnzip);
	return dwSizeRead;
}

int open_book(const char* filename){
	int fp;
	int re = 0;

	bool isZip = false;
	if(strchr(filename,'?')){
		isZip = true;
	}
	unzFile hUnzip=NULL;
	if(isZip){
		//open zip file
		char zipname[264];
		strcpy(zipname,filename);

		char * pzn;
		char * pfn;
		//get zip file name
		char *p = strchr(zipname,'?');
		*p=0;
		pzn = zipname;
		//get compress file name
		pfn = p+1;
		//
		hUnzip = unzOpen(pzn);
		if (!hUnzip)	return 0;

		unz_file_info fileInfo;
		int nLen,i;
		if (unzLocateFile(hUnzip,pfn, 1) != UNZ_OK)	return 0;
		if (unzOpenCurrentFile(hUnzip) != UNZ_OK)	return 0;
	}else{
		fp=sceIoOpen(filename,PSP_O_RDONLY,0777);
	}
	if(fp<0) 
	{
		//失敗
		pgFillvram(rgb2col(0,0,0));
		pgPrint(0,0,rgb2col(255,0,0),"ERROR : CANNOT OPEN FILE");
		pgPrint(0,1,rgb2col(255,0,0),filename);
		wait_button();
		return 0;
	}
	if(isZip){
		re = unzReadCurrentFile(hUnzip, gTextBuf, BUF_MAX);
	}else{
		re = sceIoRead(fp,gTextBuf,BUF_MAX);
	}
	if(isZip){
		if(unzCloseCurrentFile(hUnzip)==UNZ_CRCERROR){
			debug_disp("CRC校驗錯誤.按任意鍵繼續");
			gBookInf.filesize = 0;
		}
		unzClose(hUnzip);
		re = 0;
	}else{
		sceIoClose(fp);
	}
	return re;

}

int moo_open_book(const char* filename)
{
	int re;
	int pos,j,i;
	//unsigned char tmp[2];
	unsigned char tmpbuf[256];
		
	gBookInf.rows=0;
	gBookInf.startrow=0;

	memset(gTextBuf,0,BUF_MAX);
	//read zip file
	re = open_book(filename);

	if(re>=2 && *(unsigned short*)gTextBuf==0xFEFF)
	{
		int buffp=0;
		isUnicode = true;
		//unicode轉CJK ASCII 0xFF 0xFF
		for(j=0;j<re;)
		{
			int tc = uni2cjk(gTextBuf+j+2,gTextBuf+buffp);
			j+=2;
			buffp+=tc;
		}
		gBookInf.filesize=buffp;
	}else{
		isUnicode = false;
		//*(gTextBuf+re+1)=0;
		if(bookconf.encodeing==SHIFT_JIS){
			jis2cjk(gTextBuf,NULL);
		}else if(bookconf.encodeing==BIG5HK){
			big52cjk(gTextBuf,NULL);
		}
		//else use gb2312
	}

	if(gBookInf.filesize<=0)
	{
		gBookInf.filesize = 0;
		return 0;
	}

	powerControl(true);

	return gBookInf.filesize;
}


void moo_Init_Index(void)
{
	char chflag;//中文標識
	int len,i;
	int seekoffset;
	int offset;
	
	gBookInf.rows=0;
	gBookInf.startrow=0;
	
	gPr = gTextBuf;
	offset =0;
	seekoffset=0;
	len=0;
	
	//memset((unsigned char *)gBookInf.row,0,ROW_MAX*sizeof(int));
	
	while(1)
	{
		gBookInf.row[gBookInf.rows] = offset;		
		
		if(offset>=gBookInf.filesize)//判斷是否到結尾
			break;
		else
		{
			if((gBookInf.filesize-offset)>C_LEN)
				len =C_LEN;
			else			
				len =gBookInf.filesize-offset+1;
			chflag = 0;
			for(i=0;i<len;i++)
			{
				if(gPr[i]>=0x81)
				{
					if(chflag)
						chflag = 0;
					else
						chflag = 1;
				}
				else
				{
					chflag = 0;
				}
				
				if(gPr[i]==0x0D && gPr[i+1]==0x0A&&gPr[i+2]==0x0D && gPr[i+3]==0x0A)
				{
					seekoffset =offset+i;
					gBookInf.rows++;
					gBookInf.row[gBookInf.rows]=seekoffset;
					seekoffset +=2;
					break;
				}
				if(gPr[i]==0x0A)
				{
					seekoffset =offset+i+1;
					break;
				}
				else if(gPr[i]==0x0D && gPr[i+1]==0x0A)
				{					
					seekoffset =offset+i+2;
					break;
				}
				
			}
			if(i==len)
				seekoffset =offset+i-chflag;			
			offset = seekoffset;
			gPr    = gTextBuf+seekoffset;
			if(i>0)
				gBookInf.rows++;
		}
	}
}

void moo_disp_pagenumber(int x,int y,int col)
{
	int pg;
	int pgc;
	pg = (gBookInf.startrow)/R_LEN;
	if(gBookInf.startrow%R_LEN)
		pg++;
	pg++;
	pgc = gBookInf.rows/R_LEN;
	if(gBookInf.rows%R_LEN)
		pgc++;
	
	
	dsp_numl(x-1,y,col,pg);
	pgPrint(x,y,col,"/");
	dsp_num(x+1,y,col,pgc);	
}
void moo_disp_page(void)
{	
	unsigned char buf[C_LEN+1];
	char i,j;
	char chflag;	
	int len;

	pgWaitV();
	pgFillvram(BG_COLOR);
	for(i=0;i<R_LEN;i++)
	{
		gPr = gTextBuf+gBookInf.row[gBookInf.startrow+i];
		if(gBookInf.startrow+i+1>=gBookInf.rows)
		{
			len = gBookInf.filesize-gBookInf.row[gBookInf.startrow+i];
			if(len<=0)break;
			if(len>C_LEN)
				len =C_LEN;
			memcpy(buf,gPr,len);
		}
		else
		{
			len =C_LEN;
			memcpy(buf,gPr,C_LEN+1);
		}
		
		if(len==2&&buf[0]==0x0d&&buf[1]==0x0a)
			continue;
		
		chflag = 0;
		for(j=0;j<len;j++)
		{
			if(buf[j]>=0x81)
			{
				if(chflag)
					chflag = 0;
				else
					chflag = 1;
			}
			else
			{
				chflag = 0;
			}
			if(buf[j]==0x0a)
				break;
			else if(buf[j]==0x0D && buf[j+1]==0x0A)
				break;
		}		
		buf[j-chflag]=0;
		
		chDrawStringEx(CX,CY+i*(16*bookconf.magnify+bookconf.rowinter),FONT_COLOR,buf,bookconf.magnify,1,bookconf.colinter); 
	}	
	if(bookconf.isdippage)
	{
		chDrawRec(0,254,SCREEN_WIDTH,1, FONT_COLOR,1);
		pgPrint(0,32,subtitlecol,PSPVER);
		moo_disp_pagenumber(53,32,FONT_COLOR);
		//to display c/b speed
		char tname[256];
		sprintf(tname,"Cup/Bus:%d/%d",scePowerGetCpuClockFrequency(),scePowerGetBusClockFrequency());
		pgPrint(33-strlen(tname),32,rgb2col(0,0xff,0),tname);
		//print current encoding
		*tname=0;
		if(isUnicode){
			strcat(tname,"UNICODE");
		}else if(bookconf.encodeing==GB2312){
			strcat(tname,"GB2312");
		}else if(bookconf.encodeing==BIG5HK){
			strcat(tname,"BIG5HK");
		}else if(bookconf.encodeing==SHIFT_JIS){
			strcat(tname,"SHIFT_JIS");
		}else{
			strcat(tname,"GB2312");
		}
		if(isUnicode){
			pgPrint(45-strlen(tname),32,uniitem,tname);
		}else{
			pgPrint(45-strlen(tname),32,selitem,tname);
		}
	}

	pgScreenFlipV();
}

void moo_ctrl_nextrow(void)
{
	if(((gBookInf.startrow+1)<gBookInf.rows)&&(gBookInf.startrow+R_LEN<gBookInf.rows))
	{
		gBookInf.startrow++;
		moo_disp_page();
	}
}
void moo_ctrl_prerow(void)
{
	if((gBookInf.startrow-1)>=0)
	{
		gBookInf.startrow--;
		moo_disp_page();
	}
}

void moo_ctrl_nextpage(void)
{
	if(gBookInf.startrow+R_LEN>=gBookInf.rows || gBookInf.rows<=R_LEN)
		return;
	
	if(bookconf.isnextfirst)
	{
		if((gBookInf.startrow+2*R_LEN-1)<gBookInf.rows)
			gBookInf.startrow+=R_LEN-1;
		else
		{
			gBookInf.startrow=gBookInf.rows-R_LEN;
		}
	}
	else
	{
		if((gBookInf.startrow+2*R_LEN)<gBookInf.rows)
			gBookInf.startrow+=R_LEN;
		else
		{
			gBookInf.startrow=gBookInf.rows-R_LEN;
		}
	}
	moo_disp_page();
}


void moo_ctrl_prepage(void)
{
	if(gBookInf.startrow==0)
		return;
	if(bookconf.isnextfirst)
	{
		if((gBookInf.startrow-R_LEN+1)>=0)
			gBookInf.startrow-=R_LEN-1;
		else
			gBookInf.startrow=0;
	}
	else
	{
		if((gBookInf.startrow-R_LEN)>=0)
			gBookInf.startrow-=R_LEN;
		else
			gBookInf.startrow=0;
	}
	moo_disp_page();
}

void moo_ctrl_nextmorepage(void)
{
	if(gBookInf.startrow+R_LEN>=gBookInf.rows || gBookInf.rows<=R_LEN)
		return;
	
	if((gBookInf.startrow+1000+R_LEN)<gBookInf.rows)
		gBookInf.startrow+=1000;
	else
	{
		gBookInf.startrow=gBookInf.rows-R_LEN;
	}
	moo_disp_page();
}

void moo_ctrl_premorepage(void)
{
	if(gBookInf.startrow==0)
		return;
	if((gBookInf.startrow-1000)>=0)
		gBookInf.startrow-=1000;
	else
		gBookInf.startrow=0;
	moo_disp_page();
}




//------------------------------------------------------------------------------------------------
// taken from:
// .../psp/trunk/pspgl/test-q3/generic/main.c
// returns number of milliseconds since game started
int Sys_Milliseconds(void)
{
	static long sys_timeBase = 0;
	struct timeval tp;

	gettimeofday(&tp, NULL);

	if (!sys_timeBase) {
		sys_timeBase = tp.tv_sec;
		return tp.tv_usec / 1000;
	}

	return (tp.tv_sec - sys_timeBase) * 1000 + tp.tv_usec / 1000;
}


void moo_ctrl_autonextpage(void)  
{
	SceCtrlData padd;
	
	sceCtrlSetSamplingCycle(0);
    sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
    
	unsigned int oldButtons = 0;
	
	int end,delta;
	int timer=0;
	int start=Sys_Milliseconds();
	while(isautob==1)
	{
	end = Sys_Milliseconds();
    delta=end-start;
    start=end;
    timer += delta;

    if (timer>bookconf.frequency*1000)	
		{
			moo_ctrl_nextpage();
			timer = 0;
		}
			
	sceCtrlReadBufferPositive(&padd, 1);         // read control pad
	if (padd.Buttons != 0)
	{

			
			
			if ((padd.Buttons&PSP_CTRL_CIRCLE) && !(oldButtons&PSP_CTRL_CIRCLE))
			{   
			     isautob=0;
			}
			
			// only if L button wasn't in 'down' state previously
			if ((padd.Buttons&PSP_CTRL_LTRIGGER) && !(oldButtons&PSP_CTRL_LTRIGGER))	
			{
			moo_ctrl_prepage();
	
			
			// only if R button wasn't in 'down' state previously
			if ((padd.Buttons&PSP_CTRL_RTRIGGER) && !(oldButtons&PSP_CTRL_RTRIGGER))
			{
			moo_ctrl_nextpage();
		
	        }
	        
	}
		oldButtons = padd.Buttons;

	}
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费视频观看| 97久久久精品综合88久久| 中文一区一区三区高中清不卡| 91精品国产手机| 欧美私模裸体表演在线观看| 不卡欧美aaaaa| 成人成人成人在线视频| 丰满白嫩尤物一区二区| 韩国三级中文字幕hd久久精品| 午夜精品久久久久久久99樱桃 | 麻豆精品蜜桃视频网站| 亚洲激情自拍偷拍| 樱花草国产18久久久久| 日本一区二区视频在线| 国产精品视频一区二区三区不卡| 久久蜜桃一区二区| 国产调教视频一区| 日本一区二区高清| 中文字幕一区二区三中文字幕| 中文字幕中文字幕一区| 亚洲欧美日韩电影| 天堂一区二区在线免费观看| 丝袜a∨在线一区二区三区不卡| 日本免费新一区视频| 看片网站欧美日韩| 国产一区二区三区久久久| 国产福利一区二区| aaa欧美色吧激情视频| 成人av电影在线观看| 国产精品88888| 99久久婷婷国产精品综合| 色婷婷国产精品综合在线观看| 色婷婷国产精品综合在线观看| 欧美在线观看18| 日韩精品一区在线| 中文字幕不卡一区| 午夜免费久久看| 精品综合久久久久久8888| 东方欧美亚洲色图在线| 在线免费观看日韩欧美| 欧美α欧美αv大片| 国产精品久久久久四虎| 亚洲国产人成综合网站| 韩国三级电影一区二区| 99久久久无码国产精品| 91麻豆精品国产91久久久更新时间| 日韩免费一区二区三区在线播放| 国产精品欧美久久久久一区二区| 亚洲一区二区三区视频在线 | 欧美精品一区二区不卡| 中文字幕字幕中文在线中不卡视频| 亚洲动漫第一页| 国产精品一区二区你懂的| 91黄色免费看| 久久久蜜臀国产一区二区| 亚洲自拍都市欧美小说| 国精产品一区一区三区mba视频| 91.麻豆视频| 中文字幕亚洲一区二区va在线| 视频一区二区三区中文字幕| 国产91精品一区二区麻豆亚洲| 欧美精品自拍偷拍| 综合电影一区二区三区| 国产精品1区2区3区在线观看| 欧美人狂配大交3d怪物一区| 国产精品电影院| 国产一区二区在线影院| 91精品国产综合久久精品app| 中文字幕中文字幕一区二区| 久久99在线观看| 欧美久久久一区| 一区二区三区免费观看| 成人毛片老司机大片| 久久久久一区二区三区四区| 美腿丝袜在线亚洲一区| 在线成人av网站| 亚洲国产日韩综合久久精品| 99re这里都是精品| 国产精品嫩草久久久久| 国产福利视频一区二区三区| 久久亚洲一区二区三区四区| 美女久久久精品| 欧美一区二区黄色| 日韩国产欧美三级| 欧美精品一二三| 日韩电影在线一区| 欧美一区二区高清| 久久精品久久99精品久久| 欧美日韩高清在线播放| 亚洲国产一区在线观看| 精品视频在线免费观看| 亚洲超丰满肉感bbw| 欧美日韩卡一卡二| 日韩精品电影一区亚洲| 51精品视频一区二区三区| 日本麻豆一区二区三区视频| 日韩欧美国产午夜精品| 免费欧美在线视频| 久久亚洲精品国产精品紫薇| 国产一区二区三区蝌蚪| 国产精品美女久久久久久久| 不卡的av在线播放| 亚洲一区在线观看免费| 欧美日韩色综合| 日产欧产美韩系列久久99| 精品理论电影在线观看| 国产精品影视在线观看| 国产精品久久久久影视| 在线精品国精品国产尤物884a| 亚洲高清在线精品| 精品成人免费观看| 99久久精品国产导航| 亚洲成av人在线观看| 久久综合色之久久综合| 91麻豆产精品久久久久久| 日本一不卡视频| 久久免费精品国产久精品久久久久| 成人免费va视频| 日韩高清在线一区| 中文字幕国产一区二区| 欧美日本免费一区二区三区| 国产精品91xxx| 亚洲国产成人精品视频| 国产日韩精品一区二区浪潮av | 国产一二精品视频| 国产精品国产精品国产专区不片 | 狠狠色狠狠色合久久伊人| 国产精品久久久一本精品 | 日本一区二区在线不卡| 欧美曰成人黄网| 国产福利91精品一区二区三区| 中文字幕欧美日韩一区| 51精品久久久久久久蜜臀| 丁香天五香天堂综合| 蜜臀久久99精品久久久画质超高清| 欧美激情一区不卡| 日韩一级大片在线| 在线免费av一区| 99国产欧美久久久精品| 国产在线视视频有精品| 亚洲sss视频在线视频| 国产精品嫩草99a| www欧美成人18+| 日韩三级av在线播放| 欧美在线视频不卡| 91麻豆精品在线观看| 国产成人免费在线观看不卡| 蜜臀av性久久久久蜜臀aⅴ | 国产欧美精品一区二区色综合| 欧美女孩性生活视频| 色婷婷狠狠综合| 色一情一伦一子一伦一区| 福利一区二区在线| 国产精品自拍网站| 黄色精品一二区| 久久国产福利国产秒拍| 五月激情综合网| 丝袜美腿一区二区三区| 尤物视频一区二区| 亚洲精品国产成人久久av盗摄| 国产精品丝袜黑色高跟| 久久久久久久综合色一本| 精品盗摄一区二区三区| ww久久中文字幕| 国产日韩欧美精品电影三级在线| 26uuu色噜噜精品一区| 久久综合色之久久综合| 久久久久久麻豆| 国产精品色呦呦| 国产精品不卡在线观看| 综合网在线视频| 亚洲国产日产av| 日韩高清在线观看| 精品一区二区三区av| 国产精品亚洲视频| 粉嫩久久99精品久久久久久夜| 国产老肥熟一区二区三区| 国产成人av网站| 99精品黄色片免费大全| 日本精品视频一区二区| 欧美日韩国产乱码电影| 日韩欧美一区在线观看| 久久一留热品黄| 亚洲天堂久久久久久久| 亚洲6080在线| 国产老肥熟一区二区三区| 成a人片国产精品| 欧美日韩综合不卡| 精品卡一卡二卡三卡四在线| 中文成人综合网| 亚洲国产精品影院| 国产在线播精品第三| 成人黄色一级视频| 欧美日韩不卡一区| 国产午夜精品一区二区| 亚洲一区二区三区四区在线免费观看 | 欧美三级韩国三级日本三斤| 日韩一区二区影院| 国产精品欧美一级免费| 丝袜美腿亚洲色图|