📄 bookmark.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 + -