fix DVD loading

This commit is contained in:
dborth 2009-03-19 07:46:51 +00:00
parent bab9a078a5
commit 0aabe352af
4 changed files with 50 additions and 63 deletions

View File

@ -432,7 +432,7 @@ getentry (int entrycount, unsigned char dvdbuffer[])
if(dvddir == dvdrootdir) // at root already, don't show .. if(dvddir == dvdrootdir) // at root already, don't show ..
fname[0] = 0; fname[0] = 0;
else else
strcpy (fname, "Up One Level"); strcpy (fname, "..");
} }
else else
{ {
@ -463,8 +463,16 @@ getentry (int entrycount, unsigned char dvdbuffer[])
memset(&(browserList[entrycount]), 0, sizeof(BROWSERENTRY)); // clear the new entry memset(&(browserList[entrycount]), 0, sizeof(BROWSERENTRY)); // clear the new entry
strncpy (browserList[entrycount].filename, fname, MAXJOLIET); strncpy (browserList[entrycount].filename, fname, MAXJOLIET);
StripExt(tmpname, fname); // hide file extension
strncpy (browserList[entrycount].displayname, tmpname, MAXDISPLAY); if(strcmp(fname,"..") == 0)
{
sprintf(browserList[entrycount].displayname, "Up One Level");
}
else
{
StripExt(tmpname, fname); // hide file extension
strncpy (browserList[entrycount].displayname, tmpname, MAXDISPLAY);
}
memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4); memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4);
@ -588,13 +596,18 @@ static bool SwitchDVDFolderR(char * dir, int maxDepth)
if(dirindex >= 0) if(dirindex >= 0)
{ {
dvddir = browserList[dirindex].offset;
dvddirlength = browserList[dirindex].length;
browser.selIndex = dirindex; browser.selIndex = dirindex;
UpdateDirName(METHOD_DVD);
if(browserList[dirindex].isdir) // only parse directories if(browserList[dirindex].isdir) // only parse directories
{
UpdateDirName(METHOD_DVD);
ParseDVDdirectory(); ParseDVDdirectory();
}
else
{
dvddir = browserList[dirindex].offset;
dvddirlength = browserList[dirindex].length;
}
if(lastdir) if(lastdir)
return true; return true;
@ -709,16 +722,27 @@ done:
int int
LoadDVDFile(char * buffer, char *filepath, int datasize, bool silent) LoadDVDFile(char * buffer, char *filepath, int datasize, bool silent)
{ {
int ret = 0;
// retain original browser information
char origDir[MAXPATHLEN];
memset(origDir, 0, MAXPATHLEN);
strncpy(origDir, browser.dir, MAXPATHLEN);
int origSelIndex = browser.selIndex;
int origPageIndex = browser.selIndex;
if(SwitchDVDFolder(filepath)) if(SwitchDVDFolder(filepath))
{ ret = LoadDVDFileOffset ((unsigned char *)buffer, datasize);
return LoadDVDFileOffset ((unsigned char *)buffer, datasize); else if(!silent)
} ErrorPrompt("Error loading file!");
else
{ // restore browser information
if(!silent) memset(browser.dir, 0, MAXPATHLEN);
ErrorPrompt("Error loading file!"); strncpy(browser.dir, origDir, MAXPATHLEN);
return 0; browser.selIndex = origSelIndex;
} browser.pageIndex = origPageIndex;
return ret;
} }
/**************************************************************************** /****************************************************************************

View File

@ -390,39 +390,6 @@ FreeSaveBuffer ()
savebuffer = NULL; savebuffer = NULL;
} }
/****************************************************************************
* FindBufferSize()
* Finds the position of the last bit written to the buffer
* This function isn't perfect, but it should get the job done
***************************************************************************/
int FindBufferSize(char * buffer, int maxsize)
{
int datasize = maxsize; // we'll start at the max size
char check = buffer[datasize];
while(check == 0)
{
datasize -= 16384;
check = buffer[datasize];
}
datasize += 16384;
check = buffer[datasize];
while(check == 0)
{
datasize -= 1024;
check = buffer[datasize];
}
datasize += 1024;
check = buffer[datasize];
while(check == 0)
{
datasize -= 1;
check = buffer[datasize];
}
datasize += 2; // include last byte AND a null byte
return datasize;
}
/**************************************************************************** /****************************************************************************
* LoadSzFile * LoadSzFile
* Loads the selected file # from the specified 7z into rbuffer * Loads the selected file # from the specified 7z into rbuffer

View File

@ -30,7 +30,6 @@ bool ChangeInterface(int method, bool silent);
int ParseDirectory(); int ParseDirectory();
void AllocSaveBuffer(); void AllocSaveBuffer();
void FreeSaveBuffer(); void FreeSaveBuffer();
int FindBufferSize(char * buffer, int maxsize);
u32 LoadFile(char * rbuffer, char *filepath, u32 length, int method, bool silent); u32 LoadFile(char * rbuffer, char *filepath, u32 length, int method, bool silent);
u32 LoadFile(char * filepath, int method, bool silent); u32 LoadFile(char * filepath, int method, bool silent);
u32 LoadSzFile(char * filepath, unsigned char * rbuffer); u32 LoadSzFile(char * filepath, unsigned char * rbuffer);

View File

@ -211,7 +211,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, const ch
/*static u32 arena1mem = 0; /*static u32 arena1mem = 0;
static u32 arena2mem = 0; static u32 arena2mem = 0;
static char mem[150] = { 0 }; static char mem[150] = { 0 };
static GuiText * memTxt;*/ static GuiText * memTxt = NULL;*/
static void * static void *
UpdateGUI (void *arg) UpdateGUI (void *arg)
@ -229,7 +229,7 @@ UpdateGUI (void *arg)
arena2mem = (u32)SYS_GetArena2Hi() - (u32)SYS_GetArena2Lo(); arena2mem = (u32)SYS_GetArena2Hi() - (u32)SYS_GetArena2Lo();
#endif #endif
sprintf(mem, "A1: %u / A2: %u", arena1mem, arena2mem); sprintf(mem, "A1: %u / A2: %u", arena1mem, arena2mem);
memTxt->SetText(mem);*/ if(memTxt) memTxt->SetText(mem);*/
mainWindow->Draw(); mainWindow->Draw();
@ -3276,6 +3276,12 @@ MainMenu (int menu)
mainWindow->Append(bgBottomImg); mainWindow->Append(bgBottomImg);
mainWindow->Append(btnLogo); mainWindow->Append(btnLogo);
/*// memory usage - for debugging
memTxt = new GuiText(NULL, 18, (GXColor){255, 255, 255, 255});
memTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
memTxt->SetPosition(20, 20);
mainWindow->Append(memTxt);*/
if(currentMenu == MENU_GAMESELECTION) if(currentMenu == MENU_GAMESELECTION)
ResumeGui(); ResumeGui();
@ -3284,20 +3290,11 @@ MainMenu (int menu)
SavePrefs(SILENT); SavePrefs(SILENT);
#ifndef NO_SOUND #ifndef NO_SOUND
if(currentMenu == MENU_GAMESELECTION) bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, SOUND_OGG);
{ bgMusic->SetVolume(GCSettings.MusicVolume);
bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, SOUND_OGG); if(currentMenu == MENU_GAMESELECTION) bgMusic->Play(); // startup music
bgMusic->SetVolume(GCSettings.MusicVolume);
bgMusic->Play(); // startup music
}
#endif #endif
// memory usage - for debugging
/*memTxt = new GuiText(NULL, 18, (GXColor){255, 255, 255, 255});
memTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
memTxt->SetPosition(-20, 40);
mainWindow->Append(memTxt);*/
while(currentMenu != MENU_EXIT || SNESROMSize <= 0) while(currentMenu != MENU_EXIT || SNESROMSize <= 0)
{ {
switch (currentMenu) switch (currentMenu)