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

📄 bookmark.c

📁 psp上的reader 这个是以月光老大的cnreader为基础 增加了zip文件浏览功能
💻 C
字号:
#include "main.h"


#define BMAKCOL 5
#define BMAKROW 10
#define BMAKSIZE (BMAKCOL*BMAKROW)

#define BMAKCX  40
#define BMAKCY  41

#define BMAKCW  80 
#define BMAKCH  16

#define BMAKLOAD 0
#define BMAKSAVE 1

typedef struct sbookmark{
	char filepath[256];
	char markpath[256];
} SMARK;


unsigned char bmsel,bmmove;
int bookmark[BMAKSIZE];

extern BOOKINF  gBookInf;

#define BMARKFILENAME "bookmark/bookmark.cfg"
int BookmarkRead( const char* bpath,const char* filename,SMARK *mark)
{
	bool foundMarkFile = false;
	char tname[256];
	strcpy(tname,bpath);
	//strcat(tname,"/");
	strcat(tname,BMARKFILENAME);
	//create bookmark folder
	char *p1 = strrchr(tname,'/');
	*p1=0;
	if(!searchFile(tname))
	{
		sceIoMkdir(tname,FIO_SO_IFDIR);
	}
	*p1='/';

	if(searchFile(tname))
	{
		//read smark
		int fd = sceIoOpen(tname, PSP_O_RDONLY, 0777);
		int bytesRead = sceIoRead(fd, mark, sizeof(*mark));
		while(bytesRead > 0)
		{
			if(!stricmp(mark->filepath,filename))
			{
				foundMarkFile = true;
				break;
			}
			bytesRead = sceIoRead(fd, mark, sizeof(*mark));
		}
		sceIoClose(fd);
	}
	else
	{
		//create smark file
		int fd = sceIoOpen(tname, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
		if(fd < 0)
		{
			debug_disp("Couldn't create BookMarks");
		}
		else
		{
			sceIoClose(fd);
		}

	}
	if(!foundMarkFile){
		//make markseq
		srand( (unsigned)time( NULL ) );
		sprintf(mark->markpath,"%sbookmark/%6d.bmk",bpath,rand() );
		strcpy(mark->filepath,filename);

		int fd = sceIoOpen(tname, PSP_O_WRONLY | PSP_O_APPEND, 0777);
		sceIoWrite(fd, mark, sizeof(*mark));
		sceIoClose(fd);
	}
	
	return 1;
}

void BookMarkDraw(char flag)
{
	char i,j,tmp;
	
	pgFillvram(rgb2col(0,0,0));
	
	chDrawRec(0,18,SCREEN_WIDTH,1, 0xffff,1);
	if(flag==BMAKSAVE)
	{
		chDrawString(0,0,0xffff,"保存书签(记录为行数)",1,1);
		chDrawString(90,256,0xffff,"△删除 □覆盖 ○添加/复制 ×取消/退出",1,1);
	}
	else
	{
		chDrawString(0,0,0xffff,"载入书签(记录为行数)",1,1);
		chDrawString(180,256,0xffff,"○确定  ×取消",1,1);
	}	
	pgPrint(41,0,0x5555,PSPVER);	
	chDrawRec(0,254,SCREEN_WIDTH,1, 0xffff,1);
	//chDrawString(160,256,0xffff,"○         ×",1,1);
	//chDrawString(160,256,0x27af,"  CONFIRM    EXIT",1,1);	
	
	for(i=0;i<BMAKCOL;i++)
		for(j=0;j<BMAKROW;j++)
		{
			//chDrawRecLine(BMAKCX+i*BMAKCW,BMAKCY+j*BMAKCH,BMAKCW-2,BMAKCH,0x3434);
			tmp = i*BMAKROW+j;			
			
			if(tmp==bmsel)
			{
				chDrawRec(BMAKCX+i*BMAKCW,BMAKCY+j*BMAKCH,BMAKCW-10,BMAKCH, 0xaaaa,1);
				chDrawRecLine(BMAKCX+i*BMAKCW,BMAKCY+j*BMAKCH,BMAKCW-10,BMAKCH,0xffff);
			}
			if(tmp==bmmove)
			{
				chDrawRec(BMAKCX+i*BMAKCW,BMAKCY+j*BMAKCH,BMAKCW-10,BMAKCH, 0x2222,1);
				chDrawRecLine(BMAKCX+i*BMAKCW,BMAKCY+j*BMAKCH,BMAKCW-10,BMAKCH,0xffff);
			}
					
			if(bookmark[tmp]!=0xffffffff)
				dsp_numl((BMAKCX+i*BMAKCW)/8+6,(BMAKCY+j*BMAKCH)/8,0xffff,bookmark[tmp]);
			else
				pgPrint((BMAKCX+i*BMAKCW)/8+2,(BMAKCY+j*BMAKCH)/8,0x8888,"empty");
		}
	pgScreenFlipV();
}
void savmark()
{
	int bSave;
	int fd;
	fd = sceIoOpen(BookMarkPath,PSP_O_RDWR,0777);
	if(fd)
	{
		sceIoWrite(fd, bookmark, BMAKSIZE*sizeof(int));
		sceIoClose(fd);
	}
	return;
}

void BookmarkSav()
{
	unsigned char *p;
	int fd,bSave;
	
	//bookmarkfile init!
	memset(bookmark,0xff,BMAKSIZE*sizeof(int));
	//read mark file name form config file
	SMARK mark;
	BookmarkRead(PbpPath,readfilename,&mark);
	strcpy(BookMarkPath, mark.markpath);

	bSave = searchFile(BookMarkPath);
	if(!bSave)
	{	
		fd = sceIoOpen(BookMarkPath,PSP_O_CREAT|PSP_O_WRONLY|PSP_O_TRUNC,0777);		
		if(fd)
		{
			debug_disp("书签不存在,将初始化书签,按任意键继续");

			sceIoWrite(fd, bookmark, BMAKSIZE*sizeof(int));
			sceIoClose(fd);
			if(!searchFile(BookMarkPath))
			{
				debug_disp("书签初始化失败,按任意键返回");
				return;
			}
		}
		else
		{
			debug_disp("书签不存在,创建书签失败,按任意键返回");
			return;
		}
		
	}
	else
	{
		fd = sceIoOpen(BookMarkPath, PSP_O_RDONLY,0777);
		if(fd)
		{
			//debug_disp("书签存在,读取书签成功,任意按键继续");
			sceIoRead(fd, bookmark, BMAKSIZE*sizeof(int));
			sceIoClose(fd);
		}
		else
		{
			debug_disp("书签存在,读取书签失败,按任意键返回");
			return;
		}
	}
	bmmove=0xff;
	bmsel = 0;
	BookMarkDraw(BMAKSAVE);
	for(;;)
	{
		switch(Control())
		{
		case 1:
			//pgPrint(1,7,0xffff,"You pressed square!");
			if(bmmove==0xff)
			{
				if(bookmark[bmsel]!=0xffffffff)
				{
					bookmark[bmsel]=gBookInf.startrow;
					savmark();
				}
			}
			else
			{
				if(bookmark[bmsel]!=0xffffffff)
				{
					bookmark[bmsel]=bookmark[bmmove];
					bmmove = 0xff;
					savmark();
				}
			}
			break;
		case 2:
			//pgPrint(1,7,0xffff,"You pressed triangle!");
			if(bookmark[bmsel]!=0xffffffff)	
			{
				bookmark[bmsel]=0xffffffff;		
				savmark();
			}
			break;
		case 3:
			//pgPrint(1,7,0xffff,"You pressed circle!");				
			if(bmmove==0xff)
			{				
				if(bookmark[bmsel]==0xffffffff)
				{
					bookmark[bmsel]=gBookInf.startrow;
					savmark();
				}
				else
				{
					bmmove=bmsel;
				}
			}
			else
			{
				if(bmsel!=bmmove)
				{
					if(bookmark[bmsel]==0xffffffff)
					{
						bookmark[bmsel]=bookmark[bmmove];
						bmmove = 0xff;
						savmark();
					}
				}
				else
				{
					bmmove = 0xff;
				}
				
			}
			break;
		case 4:
			//pgPrint(1,7,0xffff,"You pressed cross!");	
			if(bmmove!=0xff)
			{
				bmmove=0xff;
				break;
			}
			else
				return;
		case 5:
			//pgPrint(1,7,0xffff,"You pressed up!");			
			if(bmsel-1>=0)
				bmsel--;
			break;
		case 6:
			//pgPrint(1,7,0xffff,"You pressed down!");			
			if(bmsel+1<BMAKSIZE)
				bmsel++;
			break;
		case 7:
			//pgPrint(1,7,0xffff,"You pressed left!");			
			if(bmsel-BMAKROW>=0)
				bmsel-=BMAKROW;		
			break;
		case 8:
			//pgPrint(1,7,0xffff,"You pressed right!");			
			if(bmsel+BMAKROW<BMAKSIZE)
				bmsel+=BMAKROW;
			break;
		case 9:
			//pgPrint(1,7,0xffff,"You pressed start!");		
			break;
		case 10:
			//pgPrint(1,7,0xffff,"You pressed select!");	
			break;
		case 11:
			//pgPrint(1,7,0xffff,"You pressed left trigger!");			
			break;
		case 12:
			//pgPrint(1,7,0xffff,"You pressed right trigger!");			
			break;
		}
		BookMarkDraw(BMAKSAVE);
	}
}

void BookmarkLoad()
{

	unsigned char *p;
	int fd,bSave;
	
	memset(bookmark,0xff,BMAKSIZE*sizeof(int));
	//read mark file name form config file
	SMARK mark;
	BookmarkRead(PbpPath,readfilename,&mark);

	strcpy(BookMarkPath, mark.markpath);

	bSave = searchFile(BookMarkPath);		
	if(bSave)	
	{
		fd = sceIoOpen(BookMarkPath, PSP_O_RDONLY,0777);
		if(fd)
		{
			sceIoRead(fd, bookmark, BMAKSIZE*sizeof(int));
			sceIoClose(fd);	
		}
		else
		{
			debug_disp("书签已存在,但打开书签失败,按任意键返回");
			return;
		}
	}
	else
	{		
		debug_disp("没有可载入的书签,任意按键返回");
		return;
	}
	bmmove=0xff;
	bmsel = 0;
	BookMarkDraw(BMAKLOAD);
	for(;;)
	{
		switch(Control())
		{
		case 1:
			//pgPrint(1,7,0xffff,"You pressed square!");
			break;
		case 2:
			//pgPrint(1,7,0xffff,"You pressed triangle!");	
			break;
		case 3:
			//pgPrint(1,7,0xffff,"You pressed circle!");
			if((bookmark[bmsel]!=0xffffffff)&&(bookmark[bmsel]<=(gBookInf.rows-R_LEN)))
			{
				gBookInf.startrow= 	bookmark[bmsel];
				return;
			}	
			break;			
		case 4:
			//pgPrint(1,7,0xffff,"You pressed cross!");				
			return;
		case 5:
			//pgPrint(1,7,0xffff,"You pressed up!");			
			if(bmsel-1>=0)
				bmsel--;
			break;
		case 6:
			//pgPrint(1,7,0xffff,"You pressed down!");			
			if(bmsel+1<BMAKSIZE)
				bmsel++;
			break;
		case 7:
			//pgPrint(1,7,0xffff,"You pressed left!");			
			if(bmsel-BMAKROW>=0)
				bmsel-=BMAKROW;				
			break;
		case 8:
			//pgPrint(1,7,0xffff,"You pressed right!");			
			if(bmsel+BMAKROW<BMAKSIZE)
				bmsel+=BMAKROW;
			break;
		case 9:
			//pgPrint(1,7,0xffff,"You pressed start!");		
			break;
		case 10:
			//pgPrint(1,7,0xffff,"You pressed select!");	
			break;
		case 11:
			//pgPrint(1,7,0xffff,"You pressed left trigger!");			
			break;
		case 12:
			//pgPrint(1,7,0xffff,"You pressed right trigger!");			
			break;
		}
		BookMarkDraw(BMAKLOAD);
	}
}



⌨️ 快捷键说明

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