-general code cleanup

-added crc32 buffer and limited checked filesize to 1gb
This commit is contained in:
fix94.1 2012-11-18 13:40:26 +00:00
parent f61d9dac0c
commit f57507c4f3
20 changed files with 281 additions and 282 deletions

View File

@ -73,7 +73,6 @@ protected:
bool reducedVol; bool reducedVol;
int returnVal; int returnVal;
int gameSelected; int gameSelected;
dir_discHdr dvdheader;
float Brightness; float Brightness;
int MaxAnimSteps; int MaxAnimSteps;

View File

@ -35,7 +35,7 @@ static u64 folderSize = 0;
u64 FolderProgressBytes; u64 FolderProgressBytes;
// return false if the file doesn't exist // return false if the file doesn't exist
bool fsop_GetFileSizeBytes(char *path, size_t *filesize) // for me stats st_size report always 0 :( bool fsop_GetFileSizeBytes(const char *path, size_t *filesize) // for me stats st_size report always 0 :(
{ {
FILE *f; FILE *f;
size_t size = 0; size_t size = 0;
@ -73,11 +73,9 @@ u64 fsop_GetFolderBytes(const char *source)
while((pent = readdir(pdir)) != NULL) while((pent = readdir(pdir)) != NULL)
{ {
// Skip it // Skip it
if(strcmp(pent->d_name, ".") == 0 || strcmp(pent->d_name, "..") == 0) if(pent->d_name[0] == '.')
continue; continue;
snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name); snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name);
// If it is a folder... recurse... // If it is a folder... recurse...
if(fsop_DirExist(newSource)) if(fsop_DirExist(newSource))
bytes += fsop_GetFolderBytes(newSource); bytes += fsop_GetFolderBytes(newSource);
@ -138,7 +136,7 @@ bool fsop_DirExist(const char *path)
} }
void fsop_MakeFolder(char *path) void fsop_MakeFolder(const char *path)
{ {
if(fsop_DirExist(path)) if(fsop_DirExist(path))
return; return;
@ -168,7 +166,7 @@ static void *thread_CopyFileReader()
return 0; return 0;
} }
bool fsop_CopyFile(char *source, char *target, progress_callback_t spinner, void *spinner_data) bool fsop_CopyFile(const char *source, const char *target, progress_callback_t spinner, void *spinner_data)
{ {
gprintf("Creating file: %s\n", target); gprintf("Creating file: %s\n", target);
int err = 0; int err = 0;
@ -282,7 +280,7 @@ bool fsop_CopyFile(char *source, char *target, progress_callback_t spinner, void
/* /*
Recursive copyfolder Recursive copyfolder
*/ */
static bool doCopyFolder(char *source, char *target, progress_callback_t spinner, void *spinner_data) static bool doCopyFolder(const char *source, const char *target, progress_callback_t spinner, void *spinner_data)
{ {
DIR *pdir; DIR *pdir;
struct dirent *pent; struct dirent *pent;
@ -290,20 +288,15 @@ static bool doCopyFolder(char *source, char *target, progress_callback_t spinner
bool ret = true; bool ret = true;
// If target folder doesn't exist, create it ! // If target folder doesn't exist, create it !
if(!fsop_DirExist(target))
{
gprintf("Creating directory: %s\n",target);
fsop_MakeFolder(target); fsop_MakeFolder(target);
}
pdir = opendir(source); pdir = opendir(source);
while((pent = readdir(pdir)) != NULL && ret == true) while((pent = readdir(pdir)) != NULL && ret == true)
{ {
// Skip it // Skip it
if(strcmp(pent->d_name, ".") == 0 || strcmp(pent->d_name, "..") == 0) if(pent->d_name[0] == '.')
continue; continue;
snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name); snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name);
snprintf(newTarget, sizeof(newTarget), "%s/%s", target, pent->d_name); snprintf(newTarget, sizeof(newTarget), "%s/%s", target, pent->d_name);
@ -319,7 +312,7 @@ static bool doCopyFolder(char *source, char *target, progress_callback_t spinner
return ret; return ret;
} }
bool fsop_CopyFolder(char *source, char *target, progress_callback_t spinner, void *spinner_data) bool fsop_CopyFolder(const char *source, const char *target, progress_callback_t spinner, void *spinner_data)
{ {
gprintf("DML game USB->SD job started!\n"); gprintf("DML game USB->SD job started!\n");
@ -328,6 +321,11 @@ bool fsop_CopyFolder(char *source, char *target, progress_callback_t spinner, vo
return doCopyFolder(source, target, spinner, spinner_data); return doCopyFolder(source, target, spinner, spinner_data);
} }
static inline void fsop_silentDelete(const char *source)
{
remove(source);
}
void fsop_deleteFolder(const char *source) void fsop_deleteFolder(const char *source)
{ {
DIR *pdir; DIR *pdir;
@ -339,16 +337,22 @@ void fsop_deleteFolder(const char *source)
while((pent = readdir(pdir)) != NULL) while((pent = readdir(pdir)) != NULL)
{ {
// Skip it // Skip it
if(strcmp(pent->d_name, ".") == 0 || strcmp(pent->d_name, "..") == 0) if(pent->d_name[0] == '.')
continue; continue;
snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name); snprintf(newSource, sizeof(newSource), "%s/%s", source, pent->d_name);
// If it is a folder... recurse... // If it is a folder... recurse...
if(fsop_DirExist(newSource)) if(fsop_DirExist(newSource))
{
closedir(pdir);
fsop_deleteFolder(newSource); fsop_deleteFolder(newSource);
pdir = opendir(source);
}
else // It is a file ! else // It is a file !
fsop_deleteFile(newSource); {
closedir(pdir);
fsop_silentDelete(newSource);
pdir = opendir(source);
}
} }
closedir(pdir); closedir(pdir);
gprintf("Deleting directory: %s\n", source); gprintf("Deleting directory: %s\n", source);
@ -357,9 +361,8 @@ void fsop_deleteFolder(const char *source)
void fsop_deleteFile(const char *source) void fsop_deleteFile(const char *source)
{ {
if(fsop_FileExist(source)) if(!fsop_FileExist(source))
{ return;
gprintf("Deleting file: %s\n", source); gprintf("Deleting file: %s\n", source);
remove(source); fsop_silentDelete(source);
}
} }

View File

@ -8,15 +8,15 @@ extern "C"
typedef void (*progress_callback_t)(int status,int total,void *user_data); typedef void (*progress_callback_t)(int status,int total,void *user_data);
bool fsop_GetFileSizeBytes(char *path, size_t *filesize); bool fsop_GetFileSizeBytes(const char *path, size_t *filesize);
u64 fsop_GetFolderBytes(const char *source); u64 fsop_GetFolderBytes(const char *source);
u32 fsop_GetFolderKb(const char *source); u32 fsop_GetFolderKb(const char *source);
u32 fsop_GetFreeSpaceKb(const char *path); u32 fsop_GetFreeSpaceKb(const char *path);
bool fsop_FileExist(const char *fn); bool fsop_FileExist(const char *fn);
bool fsop_DirExist(const char *path); bool fsop_DirExist(const char *path);
void fsop_MakeFolder(char *path); void fsop_MakeFolder(const char *path);
bool fsop_CopyFile(char *source, char *target, progress_callback_t spinner, void *spinner_data); bool fsop_CopyFile(const char *source, const char *target, progress_callback_t spinner, void *spinner_data);
bool fsop_CopyFolder(char *source, char *target, progress_callback_t spinner, void *spinner_data); bool fsop_CopyFolder(const char *source, const char *target, progress_callback_t spinner, void *spinner_data);
void fsop_deleteFile(const char *source); void fsop_deleteFile(const char *source);
void fsop_deleteFolder(const char *source); void fsop_deleteFolder(const char *source);

View File

@ -18,7 +18,6 @@
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <malloc.h>
#include <ogc/machine/processor.h> #include <ogc/machine/processor.h>
// for directory parsing and low-level file I/O // for directory parsing and low-level file I/O
@ -36,6 +35,7 @@
#include "loader/disc.h" #include "loader/disc.h"
#include "loader/sys.h" #include "loader/sys.h"
#include "memory/memory.h" #include "memory/memory.h"
#include "memory/mem2.hpp"
// DIOS-MIOS // DIOS-MIOS
DML_CFG DMLCfg; DML_CFG DMLCfg;
@ -70,14 +70,14 @@ void DML_New_SetOptions(const char *GamePath, char *CheatPath, const char *NewCh
if(CheatPath != NULL && NewCheatPath != NULL && cheats) if(CheatPath != NULL && NewCheatPath != NULL && cheats)
{ {
char *ptr; const char *ptr = NULL;
if(strstr(CheatPath, partition) == NULL) if(strncasecmp(CheatPath, partition, strlen(partition)) != 0)
{ {
fsop_CopyFile(CheatPath, (char*)NewCheatPath, NULL, NULL); fsop_CopyFile(CheatPath, NewCheatPath, NULL, NULL);
ptr = strstr(NewCheatPath, ":/") + 1; ptr = strchr(NewCheatPath, '/');
} }
else else
ptr = strstr(CheatPath, ":/") + 1; ptr = strchr(CheatPath, '/');
strncpy(DMLCfg.CheatPath, ptr, sizeof(DMLCfg.CheatPath)); strncpy(DMLCfg.CheatPath, ptr, sizeof(DMLCfg.CheatPath));
gprintf("DIOS-MIOS: Cheat Path %s\n", ptr); gprintf("DIOS-MIOS: Cheat Path %s\n", ptr);
DMLCfg.Config |= DML_CFG_CHEAT_PATH; DMLCfg.Config |= DML_CFG_CHEAT_PATH;
@ -109,8 +109,7 @@ void DML_New_SetOptions(const char *GamePath, char *CheatPath, const char *NewCh
void DML_Old_SetOptions(const char *GamePath) void DML_Old_SetOptions(const char *GamePath)
{ {
gprintf("DIOS-MIOS: Launch game '%s' through boot.bin (old method)\n", GamePath); gprintf("DIOS-MIOS: Launch game '%s' through boot.bin (old method)\n", GamePath);
FILE *f; FILE *f = fopen("sd:/games/boot.bin", "wb");
f = fopen("sd:/games/boot.bin", "wb");
fwrite(GamePath, 1, strlen(GamePath) + 1, f); fwrite(GamePath, 1, strlen(GamePath) + 1, f);
fclose(f); fclose(f);
@ -124,7 +123,6 @@ void DML_Old_SetOptions(const char *GamePath)
void DML_New_SetBootDiscOption(bool new_dm_cfg) void DML_New_SetBootDiscOption(bool new_dm_cfg)
{ {
gprintf("DIOS-MIOS: Booting Disc in Drive\n");
memset(&DMLCfg, 0, sizeof(DML_CFG)); memset(&DMLCfg, 0, sizeof(DML_CFG));
DMLCfg.Magicbytes = 0xD1050CF6; DMLCfg.Magicbytes = 0xD1050CF6;
@ -150,7 +148,9 @@ void DML_New_WriteOptions()
// Devolution // Devolution
u8 *tmp_buffer = NULL;
u8 *loader_bin = NULL; u8 *loader_bin = NULL;
u32 loader_size = 0;
extern "C" { extern void __exception_closeall(); } extern "C" { extern void __exception_closeall(); }
static gconfig *DEVO_CONFIG = (gconfig*)0x80000020; static gconfig *DEVO_CONFIG = (gconfig*)0x80000020;
#define DEVO_Entry() ((void(*)(void))loader_bin)() #define DEVO_Entry() ((void(*)(void))loader_bin)()
@ -183,11 +183,10 @@ void DEVO_GetLoader(const char *path)
{ {
gprintf("Devolution: Reading %s\n", loader_path); gprintf("Devolution: Reading %s\n", loader_path);
fseek(f, 0, SEEK_END); fseek(f, 0, SEEK_END);
u32 size = ftell(f); loader_size = ftell(f);
rewind(f); rewind(f);
loader_bin = (u8*)memalign(32, size); tmp_buffer = (u8*)MEM2_alloc(loader_size);
fread(loader_bin, 1, size, f); fread(tmp_buffer, 1, loader_size, f);
DCFlushRange(loader_bin, size);
fclose(f); fclose(f);
} }
else else
@ -195,7 +194,6 @@ void DEVO_GetLoader(const char *path)
gprintf("Devolution: Loader not found!\n"); gprintf("Devolution: Loader not found!\n");
return; return;
} }
gprintf("%s\n", (u8*)loader_bin + 4);
} }
void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu) void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu)
@ -292,9 +290,15 @@ void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu)
void DEVO_Boot() void DEVO_Boot()
{ {
/* Move our loader into low MEM1 */
loader_bin = (u8*)MEM1_lo_alloc(loader_size);
memcpy(loader_bin, tmp_buffer, loader_size);
DCFlushRange(loader_bin, ALIGN32(loader_size));
MEM2_free(tmp_buffer);
gprintf("%s\n", (loader_bin+4));
/* cleaning up and load bin */
u32 cookie; u32 cookie;
gprintf("Jumping to Entry 0x%08x\n", loader_bin);
/* cleaning up and load dol */
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
_CPU_ISR_Disable(cookie); _CPU_ISR_Disable(cookie);
__exception_closeall(); __exception_closeall();

View File

@ -28,9 +28,6 @@ Config CustomTitles;
GameTDB gameTDB; GameTDB gameTDB;
dir_discHdr ListElement; dir_discHdr ListElement;
discHdr WiiGameHeader;
gc_discHdr GCGameHeader;
void ListGenerator::Init(const char *settingsDir, const char *Language) void ListGenerator::Init(const char *settingsDir, const char *Language)
{ {
if(settingsDir != NULL) if(settingsDir != NULL)
@ -94,10 +91,10 @@ static void Create_Wii_WBFS_List(wbfs_t *handle)
{ {
for(u32 i = 0; i < wbfs_count_discs(handle); i++) for(u32 i = 0; i < wbfs_count_discs(handle); i++)
{ {
memset((void*)&WiiGameHeader, 0, sizeof(discHdr)); memset((void*)&wii_hdr, 0, sizeof(discHdr));
s32 ret = wbfs_get_disc_info(handle, i, (u8*)&WiiGameHeader, sizeof(discHdr), NULL); s32 ret = wbfs_get_disc_info(handle, i, (u8*)&wii_hdr, sizeof(discHdr), NULL);
if(ret == 0 && WiiGameHeader.magic == WII_MAGIC) if(ret == 0 && wii_hdr.magic == WII_MAGIC)
AddISO((const char*)WiiGameHeader.id, (const char*)WiiGameHeader.title, AddISO((const char*)wii_hdr.id, (const char*)wii_hdr.title,
NULL, 1, TYPE_WII_GAME); NULL, 1, TYPE_WII_GAME);
} }
} }
@ -108,9 +105,9 @@ static void Create_Wii_EXT_List(char *FullPath)
if(fp) if(fp)
{ {
fseek(fp, strcasestr(FullPath, ".wbfs") != NULL ? 512 : 0, SEEK_SET); fseek(fp, strcasestr(FullPath, ".wbfs") != NULL ? 512 : 0, SEEK_SET);
fread((void*)&WiiGameHeader, 1, sizeof(discHdr), fp); fread((void*)&wii_hdr, 1, sizeof(discHdr), fp);
if(WiiGameHeader.magic == WII_MAGIC) if(wii_hdr.magic == WII_MAGIC)
AddISO((const char*)WiiGameHeader.id, (const char*)WiiGameHeader.title, AddISO((const char*)wii_hdr.id, (const char*)wii_hdr.title,
FullPath, 1, TYPE_WII_GAME); FullPath, 1, TYPE_WII_GAME);
fclose(fp); fclose(fp);
} }
@ -130,10 +127,10 @@ static void Create_GC_List(char *FullPath)
} }
if(fp) if(fp)
{ {
fread((void*)&GCGameHeader, 1, sizeof(gc_discHdr), fp); fread((void*)&gc_hdr, 1, sizeof(gc_discHdr), fp);
if(GCGameHeader.magic == GC_MAGIC) if(gc_hdr.magic == GC_MAGIC)
{ {
AddISO((const char*)GCGameHeader.id, (const char*)GCGameHeader.title, AddISO((const char*)gc_hdr.id, (const char*)gc_hdr.title,
FullPath, 0, TYPE_GC_GAME); FullPath, 0, TYPE_GC_GAME);
/* Check for disc 2 */ /* Check for disc 2 */
fseek(fp, 6, SEEK_SET); fseek(fp, 6, SEEK_SET);

View File

@ -23,14 +23,8 @@
#include "gecko/gecko.h" #include "gecko/gecko.h"
#include "memory/memory.h" #include "memory/memory.h"
/* Constants */ struct discHdr wii_hdr ATTRIBUTE_ALIGN(32);
#define PTABLE_OFFSET 0x40000 struct gc_discHdr gc_hdr ATTRIBUTE_ALIGN(32);
//appentrypoint
u32 appentrypoint;
/* Disc pointers */
static u32 *buffer = (u32 *)0x93000000;
static u8 *diskid = (u8*)0x80000000; static u8 *diskid = (u8*)0x80000000;
s32 Disc_Open(bool boot_disc) s32 Disc_Open(bool boot_disc)
@ -95,19 +89,17 @@ s32 Disc_Type(bool gc)
if (!gc) if (!gc)
{ {
check = WII_MAGIC; check = WII_MAGIC;
struct discHdr *header = (struct discHdr *)buffer; ret = Disc_ReadHeader(&wii_hdr);
ret = Disc_ReadHeader(header); magic = wii_hdr.magic;
magic = header->magic;
} }
else else
{ {
check = GC_MAGIC; check = GC_MAGIC;
struct gc_discHdr *header = (struct gc_discHdr *)buffer; ret = Disc_ReadGCHeader(&gc_hdr);
ret = Disc_ReadGCHeader(header); if(strcmp((char *)gc_hdr.id, "GCOPDV") == 0)
if(strcmp((char *)header->id, "GCOPDV") == 0)
magic = GC_MAGIC; magic = GC_MAGIC;
else else
magic = header->magic; magic = gc_hdr.magic;
} }
if (ret < 0) if (ret < 0)

View File

@ -102,6 +102,10 @@ s32 Disc_Type(bool);
s32 Disc_IsWii(void); s32 Disc_IsWii(void);
s32 Disc_IsGC(void); s32 Disc_IsGC(void);
/* Headers for general usage */
extern struct discHdr wii_hdr;
extern struct gc_discHdr gc_hdr;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@ -44,7 +44,6 @@
using namespace std; using namespace std;
static u8 *FSTable ATTRIBUTE_ALIGN(32); static u8 *FSTable ATTRIBUTE_ALIGN(32);
static gc_discHdr gcheader ATTRIBUTE_ALIGN(32);
void GCDump::__AnalizeMultiDisc() void GCDump::__AnalizeMultiDisc()
{ {
@ -292,7 +291,7 @@ s32 GCDump::DumpGame()
NextOffset = 0; NextOffset = 0;
Disc = 0; Disc = 0;
char *FSTNameOff = (char *)NULL; char *FSTNameOff = NULL;
char folder[MAX_FAT_PATH]; char folder[MAX_FAT_PATH];
bzero(folder, MAX_FAT_PATH); bzero(folder, MAX_FAT_PATH);
@ -303,17 +302,17 @@ s32 GCDump::DumpGame()
{ {
u8 *FSTBuffer; u8 *FSTBuffer;
u32 wrote = 0; u32 wrote = 0;
memset(&gcheader, 0, sizeof(gcheader)); memset(&gc_hdr, 0, sizeof(gc_hdr));
s32 ret = Disc_ReadGCHeader(&gcheader); s32 ret = Disc_ReadGCHeader(&gc_hdr);
if(memcmp((char *)gcheader.id, "GCOPDV", 6) == 0) if(memcmp(gc_hdr.id, "GCOPDV", 6) == 0)
{ {
multigamedisc = true; multigamedisc = true;
__AnalizeMultiDisc(); __AnalizeMultiDisc();
__DiscReadRaw(ReadBuffer, NextOffset, sizeof(gc_discHdr)); __DiscReadRaw(ReadBuffer, NextOffset, sizeof(gc_discHdr));
memcpy(gcheader.id, ReadBuffer, 6); memcpy(gc_hdr.id, ReadBuffer, 6);
strcpy(gcheader.title, (char *)ReadBuffer+0x20); strcpy(gc_hdr.title, (char *)ReadBuffer+0x20);
} }
Asciify2(gcheader.title); Asciify2(gc_hdr.title);
if(!Disc) if(!Disc)
{ {
@ -324,7 +323,7 @@ s32 GCDump::DumpGame()
fsop_MakeFolder(folder); fsop_MakeFolder(folder);
} }
memset(folder, 0, sizeof(folder)); memset(folder, 0, sizeof(folder));
snprintf(folder, sizeof(folder), "%s/%s [%.06s]", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id); snprintf(folder, sizeof(folder), "%s/%s [%.06s]", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gc_hdr.title, gc_hdr.id);
if(!fsop_DirExist(folder)) if(!fsop_DirExist(folder))
{ {
gprintf("Creating directory: %s\n", folder); gprintf("Creating directory: %s\n", folder);
@ -332,7 +331,7 @@ s32 GCDump::DumpGame()
} }
else else
{ {
gprintf("Skipping game: %s (Already installed)(%d)\n", gcheader.title, Gamesize[MultiGameDump]); gprintf("Skipping game: %s (Already installed)(%d)\n", gc_hdr.title, Gamesize[MultiGameDump]);
break; break;
} }
} }
@ -377,14 +376,14 @@ s32 GCDump::DumpGame()
FSTNameOff = (char*)(FSTable + FSTEnt * 0x0C); FSTNameOff = (char*)(FSTable + FSTEnt * 0x0C);
FST *fst = (FST *)(FSTable); FST *fst = (FST *)(FSTable);
snprintf(minfo, sizeof(minfo), "[%.06s] %s", (char *)gcheader.id, gcheader.title); snprintf(minfo, sizeof(minfo), "[%.06s] %s", gc_hdr.id, gc_hdr.title);
if(FSTTotal > FSTSize) if(FSTTotal > FSTSize)
message(4, Disc+1, minfo, u_data); message(4, Disc+1, minfo, u_data);
else else
message(3, 0, minfo, u_data); message(3, 0, minfo, u_data);
gprintf("Dumping: %s %s\n", gcheader.title, compressed ? "compressed" : "full"); gprintf("Dumping: %s %s\n", gc_hdr.title, compressed ? "compressed" : "full");
gprintf("Apploader size : %d\n", ApploaderSize); gprintf("Apploader size : %d\n", ApploaderSize);
gprintf("DOL offset : 0x%08x\n", DOLOffset); gprintf("DOL offset : 0x%08x\n", DOLOffset);
@ -398,7 +397,7 @@ s32 GCDump::DumpGame()
if(writeexfiles && !Disc) if(writeexfiles && !Disc)
{ {
memset(folder, 0, sizeof(folder)); memset(folder, 0, sizeof(folder));
snprintf(folder, sizeof(folder), "%s/%s [%.06s]/sys", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id); snprintf(folder, sizeof(folder), "%s/%s [%.06s]/sys", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gc_hdr.title, gc_hdr.id);
if(!fsop_DirExist(folder)) if(!fsop_DirExist(folder))
{ {
gprintf("Creating directory: %s\n", folder); gprintf("Creating directory: %s\n", folder);
@ -418,7 +417,7 @@ s32 GCDump::DumpGame()
gc_done += __DiscWrite(gamepath, 0x2440+NextOffset, ApploaderSize, ReadBuffer); gc_done += __DiscWrite(gamepath, 0x2440+NextOffset, ApploaderSize, ReadBuffer);
} }
snprintf(gamepath, sizeof(gamepath), "%s/%s [%.06s]/game.iso", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gcheader.title, (char *)gcheader.id); snprintf(gamepath, sizeof(gamepath), "%s/%s [%.06s]/game.iso", fmt((strncmp(gamepartition, "sd", 2) != 0) ? usb_dml_game_dir : DML_DIR, gamepartition), gc_hdr.title, gc_hdr.id);
if(Disc) if(Disc)
{ {
char *ptz = strstr(gamepath, "game.iso"); char *ptz = strstr(gamepath, "game.iso");
@ -554,17 +553,17 @@ s32 GCDump::CheckSpace(u32 *needed, bool comp)
while(!gamedone) while(!gamedone)
{ {
u32 multisize = 0; u32 multisize = 0;
memset(&gcheader, 0, sizeof(gcheader)); memset(&gc_hdr, 0, sizeof(gc_hdr));
Disc_ReadGCHeader(&gcheader); Disc_ReadGCHeader(&gc_hdr);
if(memcmp((char *)gcheader.id, "GCOPDV", 6) == 0) if(memcmp(gc_hdr.id, "GCOPDV", 6) == 0)
{ {
multigamedisc = true; multigamedisc = true;
__AnalizeMultiDisc(); __AnalizeMultiDisc();
__DiscReadRaw(ReadBuffer, NextOffset, sizeof(gc_discHdr)); __DiscReadRaw(ReadBuffer, NextOffset, sizeof(gc_discHdr));
memcpy(gcheader.id, ReadBuffer, sizeof(gcheader.id)); memcpy(gc_hdr.id, ReadBuffer, sizeof(gc_hdr.id));
strcpy(gcheader.title, (char *)ReadBuffer+0x20); strcpy(gc_hdr.title, (char *)ReadBuffer+0x20);
} }
Asciify2(gcheader.title); Asciify2(gc_hdr.title);
s32 ret = __DiscReadRaw(ReadBuffer, NextOffset, 0x440); s32 ret = __DiscReadRaw(ReadBuffer, NextOffset, 0x440);
if(ret > 0) if(ret > 0)
@ -585,7 +584,7 @@ s32 GCDump::CheckSpace(u32 *needed, bool comp)
DataSize = *(vu32*)(ReadBuffer+0x438); DataSize = *(vu32*)(ReadBuffer+0x438);
DiscSize = DataSize + GamePartOffset; DiscSize = DataSize + GamePartOffset;
snprintf(minfo, sizeof(minfo), "[%.06s] %s", (char *)gcheader.id, gcheader.title); snprintf(minfo, sizeof(minfo), "[%.06s] %s", gc_hdr.id, gc_hdr.title);
message( 2, 0, minfo, u_data); message( 2, 0, minfo, u_data);

View File

@ -186,7 +186,6 @@ void CMenu::init()
if (DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS) if (DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS)
{ {
drive = DeviceName[i]; drive = DeviceName[i];
fsop_MakeFolder((char *)fmt("%s:/%s", DeviceName[i], APPDATA_DIR2)); //Make the apps dir, so saving wiiflow.ini does not fail.
break; break;
} }
loadDefaultFont(); loadDefaultFont();
@ -198,21 +197,22 @@ void CMenu::init()
m_exit = true; m_exit = true;
return; return;
} }
/* Handle apps dir first, so handling wiiflow.ini does not fail */
m_appDir = sfmt("%s:/%s", drive, APPDATA_DIR2); m_appDir = fmt("%s:/%s", drive, APPDATA_DIR2);
m_cfg.load(sfmt("%s/" CFG_FILENAME, m_appDir.c_str()).c_str()); gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
fsop_MakeFolder(m_appDir.c_str());
/* Load/Create our wiiflow.ini */
m_cfg.load(fmt("%s/" CFG_FILENAME, m_appDir.c_str()));
/* Check if we want WiFi/SD Gecko */
m_use_wifi_gecko = m_cfg.getBool("DEBUG", "wifi_gecko"); m_use_wifi_gecko = m_cfg.getBool("DEBUG", "wifi_gecko");
if (m_cfg.getBool("GENERAL", "async_network") || has_enabled_providers() || m_use_wifi_gecko) if (m_cfg.getBool("GENERAL", "async_network") || has_enabled_providers() || m_use_wifi_gecko)
_reload_wifi_gecko(); _reload_wifi_gecko();
gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
//Gecko Output to SD
if(!WriteToSD) if(!WriteToSD)
{ {
WriteToSD = m_cfg.getBool("DEBUG", "sd_write_log", false); WriteToSD = m_cfg.getBool("DEBUG", "sd_write_log", false);
bufferMessages = WriteToSD; bufferMessages = WriteToSD;
} }
/* Check if we want a cIOS loaded */
int ForceIOS = min(m_cfg.getInt("GENERAL", "force_cios_rev", 0), 254); int ForceIOS = min(m_cfg.getInt("GENERAL", "force_cios_rev", 0), 254);
if(ForceIOS > 0) if(ForceIOS > 0)
{ {
@ -220,37 +220,45 @@ void CMenu::init()
mainIOS = ForceIOS; mainIOS = ForceIOS;
} }
useMainIOS = m_cfg.getBool("GENERAL", "force_cios_load", false); useMainIOS = m_cfg.getBool("GENERAL", "force_cios_load", false);
/* Do our USB HDD Checks */
bool onUSB = m_cfg.getBool("GENERAL", "data_on_usb", strncmp(drive, "usb", 3) == 0); bool onUSB = m_cfg.getBool("GENERAL", "data_on_usb", strncmp(drive, "usb", 3) == 0);
drive = check; //reset the drive variable for the check drive = check; //reset the drive variable for the check
if(onUSB) if(onUSB)
{ {
for(int i = USB1; i <= USB8; i++) //Look for first partition with a wiiflow folder in root for(u8 i = USB1; i <= USB8; i++) //Look for first partition with a wiiflow folder in root
{
if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS && stat(fmt("%s:/%s", DeviceName[i], APPDATA_DIR), &dummy) == 0) if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS && stat(fmt("%s:/%s", DeviceName[i], APPDATA_DIR), &dummy) == 0)
{ {
drive = DeviceName[i]; drive = DeviceName[i];
break; break;
} }
} }
else if(DeviceHandle.IsInserted(SD)) drive = DeviceName[SD]; }
else if(DeviceHandle.IsInserted(SD))
drive = DeviceName[SD];
if(drive == check && onUSB) //No wiiflow folder found in root of any usb partition, and data_on_usb=yes if(drive == check && onUSB) //No wiiflow folder found in root of any usb partition, and data_on_usb=yes
for(int i = USB1; i <= USB8; i++) // Try first USB partition with wbfs folder. {
for(u8 i = USB1; i <= USB8; i++) // Try first USB partition with wbfs folder.
{
if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS && stat(fmt(GAMES_DIR, DeviceName[i]), &dummy) == 0) if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS && stat(fmt(GAMES_DIR, DeviceName[i]), &dummy) == 0)
{ {
drive = DeviceName[i]; drive = DeviceName[i];
break; break;
} }
}
}
if(drive == check && onUSB) // No wbfs folder found and data_on_usb=yes if(drive == check && onUSB) // No wbfs folder found and data_on_usb=yes
for(int i = USB1; i <= USB8; i++) // Try first available USB partition. {
for(u8 i = USB1; i <= USB8; i++) // Try first available USB partition.
{
if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS) if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) != PART_FS_WBFS)
{ {
drive = DeviceName[i]; drive = DeviceName[i];
break; break;
} }
}
}
if(drive == check) if(drive == check)
{ {
_buildMenus(); _buildMenus();
@ -266,7 +274,7 @@ void CMenu::init()
return; return;
} }
} }
/* DIOS_MIOS stuff */
if(m_cfg.getBool(GC_DOMAIN, "always_show_button", false)) if(m_cfg.getBool(GC_DOMAIN, "always_show_button", false))
{ {
gprintf("Force enabling DML view\n"); gprintf("Force enabling DML view\n");
@ -274,15 +282,14 @@ void CMenu::init()
} }
else else
m_show_dml = MIOSisDML(); m_show_dml = MIOSisDML();
m_new_dml = m_cfg.getBool(GC_DOMAIN, "dml_r52+", true); m_new_dml = m_cfg.getBool(GC_DOMAIN, "dml_r52+", true);
m_new_dm_cfg = m_cfg.getBool(GC_DOMAIN, "dm_r2.1+", true); m_new_dm_cfg = m_cfg.getBool(GC_DOMAIN, "dm_r2.1+", true);
m_DMLgameDir = sfmt("%%s:/%s", m_cfg.getString(GC_DOMAIN, "dir_usb_games", "games").c_str()); m_DMLgameDir = fmt("%%s:/%s", m_cfg.getString(GC_DOMAIN, "dir_usb_games", "games").c_str());
/* Emu NAND */
m_cfg.getString(CHANNEL_DOMAIN, "path", ""); m_cfg.getString(CHANNEL_DOMAIN, "path", "");
m_cfg.getInt(CHANNEL_DOMAIN, "partition", 1); m_cfg.getInt(CHANNEL_DOMAIN, "partition", 1);
m_cfg.getBool(CHANNEL_DOMAIN, "disable", true); m_cfg.getBool(CHANNEL_DOMAIN, "disable", true);
/* Load cIOS Map */
_installed_cios.clear(); _installed_cios.clear();
if(!neek2o()) if(!neek2o())
_load_installed_cioses(); _load_installed_cioses();
@ -290,35 +297,35 @@ void CMenu::init()
_installed_cios[CurrentIOS.Version] = CurrentIOS.Version; _installed_cios[CurrentIOS.Version] = CurrentIOS.Version;
snprintf(m_app_update_drive, sizeof(m_app_update_drive), "%s:/", drive); snprintf(m_app_update_drive, sizeof(m_app_update_drive), "%s:/", drive);
m_dataDir = sfmt("%s:/%s", drive, APPDATA_DIR); m_dataDir = fmt("%s:/%s", drive, APPDATA_DIR);
gprintf("Data Directory: %s\n", m_dataDir.c_str()); gprintf("Data Directory: %s\n", m_dataDir.c_str());
m_dol = sfmt("%s/boot.dol", m_appDir.c_str()); m_dol = fmt("%s/boot.dol", m_appDir.c_str());
m_ver = sfmt("%s/versions", m_appDir.c_str()); m_ver = fmt("%s/versions", m_appDir.c_str());
m_app_update_zip = sfmt("%s/update.zip", m_appDir.c_str()); m_app_update_zip = fmt("%s/update.zip", m_appDir.c_str());
m_data_update_zip = sfmt("%s/update.zip", m_dataDir.c_str()); m_data_update_zip = fmt("%s/update.zip", m_dataDir.c_str());
m_customBnrDir = m_cfg.getString("GENERAL", "dir_custom_banners", sfmt("%s/custom_banners", m_dataDir.c_str())); m_customBnrDir = m_cfg.getString("GENERAL", "dir_custom_banners", fmt("%s/custom_banners", m_dataDir.c_str()));
m_pluginsDir = m_cfg.getString("GENERAL", "dir_plugins", sfmt("%s/plugins", m_dataDir.c_str())); m_pluginsDir = m_cfg.getString("GENERAL", "dir_plugins", fmt("%s/plugins", m_dataDir.c_str()));
m_cacheDir = m_cfg.getString("GENERAL", "dir_cache", sfmt("%s/cache", m_dataDir.c_str())); m_cacheDir = m_cfg.getString("GENERAL", "dir_cache", fmt("%s/cache", m_dataDir.c_str()));
m_listCacheDir = m_cfg.getString("GENERAL", "dir_list_cache", sfmt("%s/lists", m_cacheDir.c_str())); m_listCacheDir = m_cfg.getString("GENERAL", "dir_list_cache", fmt("%s/lists", m_cacheDir.c_str()));
m_bnrCacheDir = m_cfg.getString("GENERAL", "dir_banner_cache", sfmt("%s/banners", m_cacheDir.c_str())); m_bnrCacheDir = m_cfg.getString("GENERAL", "dir_banner_cache", fmt("%s/banners", m_cacheDir.c_str()));
m_txtCheatDir = m_cfg.getString("GENERAL", "dir_txtcheat", sfmt("%s/codes", m_dataDir.c_str())); m_txtCheatDir = m_cfg.getString("GENERAL", "dir_txtcheat", fmt("%s/codes", m_dataDir.c_str()));
m_cheatDir = m_cfg.getString("GENERAL", "dir_cheat", sfmt("%s/gct", m_txtCheatDir.c_str())); m_cheatDir = m_cfg.getString("GENERAL", "dir_cheat", fmt("%s/gct", m_txtCheatDir.c_str()));
m_wipDir = m_cfg.getString("GENERAL", "dir_wip", sfmt("%s/wip", m_txtCheatDir.c_str())); m_wipDir = m_cfg.getString("GENERAL", "dir_wip", fmt("%s/wip", m_txtCheatDir.c_str()));
m_settingsDir = m_cfg.getString("GENERAL", "dir_settings", sfmt("%s/settings", m_dataDir.c_str())); m_settingsDir = m_cfg.getString("GENERAL", "dir_settings", fmt("%s/settings", m_dataDir.c_str()));
m_languagesDir = m_cfg.getString("GENERAL", "dir_languages", sfmt("%s/languages", m_dataDir.c_str())); m_languagesDir = m_cfg.getString("GENERAL", "dir_languages", fmt("%s/languages", m_dataDir.c_str()));
m_boxPicDir = m_cfg.getString("GENERAL", "dir_box_covers", sfmt("%s/boxcovers", m_dataDir.c_str())); m_boxPicDir = m_cfg.getString("GENERAL", "dir_box_covers", fmt("%s/boxcovers", m_dataDir.c_str()));
m_picDir = m_cfg.getString("GENERAL", "dir_flat_covers", sfmt("%s/covers", m_dataDir.c_str())); m_picDir = m_cfg.getString("GENERAL", "dir_flat_covers", fmt("%s/covers", m_dataDir.c_str()));
m_themeDir = m_cfg.getString("GENERAL", "dir_themes", sfmt("%s/themes", m_dataDir.c_str())); m_themeDir = m_cfg.getString("GENERAL", "dir_themes", fmt("%s/themes", m_dataDir.c_str()));
m_musicDir = m_cfg.getString("GENERAL", "dir_music", sfmt("%s/music", m_dataDir.c_str())); m_musicDir = m_cfg.getString("GENERAL", "dir_music", fmt("%s/music", m_dataDir.c_str()));
m_videoDir = m_cfg.getString("GENERAL", "dir_trailers", sfmt("%s/trailers", m_dataDir.c_str())); m_videoDir = m_cfg.getString("GENERAL", "dir_trailers", fmt("%s/trailers", m_dataDir.c_str()));
m_fanartDir = m_cfg.getString("GENERAL", "dir_fanart", sfmt("%s/fanart", m_dataDir.c_str())); m_fanartDir = m_cfg.getString("GENERAL", "dir_fanart", fmt("%s/fanart", m_dataDir.c_str()));
m_screenshotDir = m_cfg.getString("GENERAL", "dir_screenshot", sfmt("%s/screenshots", m_dataDir.c_str())); m_screenshotDir = m_cfg.getString("GENERAL", "dir_screenshot", fmt("%s/screenshots", m_dataDir.c_str()));
m_helpDir = m_cfg.getString("GENERAL", "dir_help", sfmt("%s/help", m_dataDir.c_str())); m_helpDir = m_cfg.getString("GENERAL", "dir_help", fmt("%s/help", m_dataDir.c_str()));
//DeviceHandler::SetWatchdog(m_cfg.getUInt("GENERAL", "watchdog_timeout", 10)); //DeviceHandler::SetWatchdog(m_cfg.getUInt("GENERAL", "watchdog_timeout", 10));
@ -348,35 +355,35 @@ void CMenu::init()
} }
CoverFlow.init(m_base_font, m_base_font_size, m_vid.vid_50hz()); CoverFlow.init(m_base_font, m_base_font_size, m_vid.vid_50hz());
//Make important folders first. /* Create our Folder Structure */
fsop_MakeFolder((char *)m_dataDir.c_str()); //D'OH! fsop_MakeFolder(m_dataDir.c_str()); //D'OH!
fsop_MakeFolder((char *)m_customBnrDir.c_str()); fsop_MakeFolder(m_customBnrDir.c_str());
fsop_MakeFolder((char *)m_pluginsDir.c_str()); fsop_MakeFolder(m_pluginsDir.c_str());
fsop_MakeFolder((char *)m_cacheDir.c_str()); fsop_MakeFolder(m_cacheDir.c_str());
fsop_MakeFolder((char *)m_listCacheDir.c_str()); fsop_MakeFolder(m_listCacheDir.c_str());
fsop_MakeFolder((char *)m_bnrCacheDir.c_str()); fsop_MakeFolder(m_bnrCacheDir.c_str());
fsop_MakeFolder((char *)m_txtCheatDir.c_str()); fsop_MakeFolder(m_txtCheatDir.c_str());
fsop_MakeFolder((char *)m_cheatDir.c_str()); fsop_MakeFolder(m_cheatDir.c_str());
fsop_MakeFolder((char *)m_wipDir.c_str()); fsop_MakeFolder(m_wipDir.c_str());
fsop_MakeFolder((char *)m_settingsDir.c_str()); fsop_MakeFolder(m_settingsDir.c_str());
fsop_MakeFolder((char *)m_languagesDir.c_str()); fsop_MakeFolder(m_languagesDir.c_str());
fsop_MakeFolder((char *)m_boxPicDir.c_str()); fsop_MakeFolder(m_boxPicDir.c_str());
fsop_MakeFolder((char *)m_picDir.c_str()); fsop_MakeFolder(m_picDir.c_str());
fsop_MakeFolder((char *)m_themeDir.c_str()); fsop_MakeFolder(m_themeDir.c_str());
fsop_MakeFolder((char *)m_musicDir.c_str()); fsop_MakeFolder(m_musicDir.c_str());
fsop_MakeFolder((char *)m_videoDir.c_str()); fsop_MakeFolder(m_videoDir.c_str());
fsop_MakeFolder((char *)m_fanartDir.c_str()); fsop_MakeFolder(m_fanartDir.c_str());
fsop_MakeFolder((char *)m_screenshotDir.c_str()); fsop_MakeFolder(m_screenshotDir.c_str());
fsop_MakeFolder((char *)m_helpDir.c_str()); fsop_MakeFolder(m_helpDir.c_str());
// INI files // INI files
m_cat.load(fmt("%s/" CAT_FILENAME, m_settingsDir.c_str())); m_cat.load(fmt("%s/" CAT_FILENAME, m_settingsDir.c_str()));
string themeName = m_cfg.getString("GENERAL", "theme", "default"); string themeName = m_cfg.getString("GENERAL", "theme", "default");
m_themeDataDir = sfmt("%s/%s", m_themeDir.c_str(), themeName.c_str()); m_themeDataDir = fmt("%s/%s", m_themeDir.c_str(), themeName.c_str());
m_theme.load(fmt("%s.ini", m_themeDataDir.c_str())); m_theme.load(fmt("%s.ini", m_themeDataDir.c_str()));
m_plugin.init(m_pluginsDir); m_plugin.init(m_pluginsDir);
@ -441,7 +448,7 @@ void CMenu::init()
} }
m_btnMgr.init(); m_btnMgr.init();
MusicPlayer.Init(m_cfg, m_musicDir, sfmt("%s/music", m_themeDataDir.c_str())); MusicPlayer.Init(m_cfg, m_musicDir, fmt("%s/music", m_themeDataDir.c_str()));
m_music_info = m_cfg.getBool("GENERAL", "display_music_info", true); m_music_info = m_cfg.getBool("GENERAL", "display_music_info", true);
_buildMenus(); _buildMenus();
@ -668,10 +675,10 @@ void CMenu::_loadCFCfg()
new GuiSound(fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "sound_cancel").c_str())) new GuiSound(fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "sound_cancel").c_str()))
); );
// Textures // Textures
string texLoading = sfmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "loading_cover_box").c_str()); string texLoading = fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "loading_cover_box").c_str());
string texNoCover = sfmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "missing_cover_box").c_str()); string texNoCover = fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "missing_cover_box").c_str());
string texLoadingFlat = sfmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "loading_cover_flat").c_str()); string texLoadingFlat = fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "loading_cover_flat").c_str());
string texNoCoverFlat = sfmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "missing_cover_flat").c_str()); string texNoCoverFlat = fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "missing_cover_flat").c_str());
CoverFlow.setTextures(texLoading, texLoadingFlat, texNoCover, texNoCoverFlat); CoverFlow.setTextures(texLoading, texLoadingFlat, texNoCover, texNoCoverFlat);
// Font // Font
CoverFlow.setFont(_font(theme.fontSet, domain, "font", TITLEFONT), m_theme.getColor(domain, "font_color", CColor(0xFFFFFFFF))); CoverFlow.setFont(_font(theme.fontSet, domain, "font", TITLEFONT), m_theme.getColor(domain, "font_color", CColor(0xFFFFFFFF)));
@ -1584,7 +1591,7 @@ void CMenu::_addUserLabels(s16 *ids, u32 start, u32 size, const char *domain)
for(u32 i = start; i < start + size; ++i) for(u32 i = start; i < start + size; ++i)
{ {
string dom(sfmt("%s/USER%i", domain, i + 1)); string dom(fmt("%s/USER%i", domain, i + 1));
if (m_theme.hasDomain(dom)) if (m_theme.hasDomain(dom))
{ {
STexture emptyTex; STexture emptyTex;
@ -1620,7 +1627,7 @@ void CMenu::_initCF(void)
gameAgeList.load(fmt("%s/" AGE_LOCK_FILENAME, m_settingsDir.c_str())); gameAgeList.load(fmt("%s/" AGE_LOCK_FILENAME, m_settingsDir.c_str()));
if (m_current_view == COVERFLOW_USB || m_current_view == COVERFLOW_CHANNEL) if (m_current_view == COVERFLOW_USB || m_current_view == COVERFLOW_CHANNEL)
{ {
gametdb.OpenFile(sfmt("%s/wiitdb.xml", m_settingsDir.c_str()).c_str()); gametdb.OpenFile(fmt("%s/wiitdb.xml", m_settingsDir.c_str()));
gametdb.SetLanguageCode(m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str()); gametdb.SetLanguageCode(m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str());
} }
} }

View File

@ -175,8 +175,8 @@ void CMenu::_showCFTheme(u32 curParam, int version, bool wide)
{ {
const CMenu::SCFParamDesc &p = CMenu::_cfParams[curParam]; const CMenu::SCFParamDesc &p = CMenu::_cfParams[curParam];
bool selected = CoverFlow.selected(); bool selected = CoverFlow.selected();
string domUnsel(sfmt(_cfDomain(), version)); string domUnsel(fmt(_cfDomain(), version));
string domSel(sfmt(_cfDomain(true), version)); string domSel(fmt(_cfDomain(true), version));
CoverFlow.simulateOtherScreenFormat(p.scrnFmt && wide != m_vid.wide()); CoverFlow.simulateOtherScreenFormat(p.scrnFmt && wide != m_vid.wide());
_setBg(m_mainBg, m_mainBgLQ); _setBg(m_mainBg, m_mainBgLQ);
@ -343,8 +343,8 @@ void CMenu::_cfTheme(void)
} }
else if(copyVersion > 0 && BTN_B_HELD && BTN_2_PRESSED) else if(copyVersion > 0 && BTN_B_HELD && BTN_2_PRESSED)
{ {
string domSrc(sfmt(_cfDomain(copySelected), copyVersion)); string domSrc(fmt(_cfDomain(copySelected), copyVersion));
string domDst(sfmt(_cfDomain(CoverFlow.selected()), cfVersion)); string domDst(fmt(_cfDomain(CoverFlow.selected()), cfVersion));
if (copyVersion != cfVersion || copySelected != CoverFlow.selected()) if (copyVersion != cfVersion || copySelected != CoverFlow.selected())
m_theme.copyDomain(domDst, domSrc); m_theme.copyDomain(domDst, domSrc);
else if (copyWide != wide) else if (copyWide != wide)
@ -474,7 +474,7 @@ void CMenu::_cfParam(bool inc, int i, const CMenu::SCFParamDesc &p, int cfVersio
int k = i / 4; int k = i / 4;
string key(p.key[k]); string key(p.key[k]);
const char *d = _cfDomain((p.domain != CMenu::SCFParamDesc::PDD_NORMAL && CoverFlow.selected()) || p.domain == CMenu::SCFParamDesc::PDD_SELECTED); const char *d = _cfDomain((p.domain != CMenu::SCFParamDesc::PDD_NORMAL && CoverFlow.selected()) || p.domain == CMenu::SCFParamDesc::PDD_SELECTED);
string domain(sfmt(d, cfVersion)); string domain(fmt(d, cfVersion));
float step = p.step[k]; float step = p.step[k];
if (!wide && p.scrnFmt && (p.paramType[k] == CMenu::SCFParamDesc::PDT_V3D || p.paramType[k] == CMenu::SCFParamDesc::PDT_FLOAT || p.paramType[k] == CMenu::SCFParamDesc::PDT_INT)) if (!wide && p.scrnFmt && (p.paramType[k] == CMenu::SCFParamDesc::PDT_V3D || p.paramType[k] == CMenu::SCFParamDesc::PDT_FLOAT || p.paramType[k] == CMenu::SCFParamDesc::PDT_INT))
key += "_4_3"; key += "_4_3";
@ -581,7 +581,7 @@ void CMenu::_initCFThemeMenu()
// //
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
{ {
domain = sfmt("CFTHEME/VAL%i%c_%%s", i / 3 + 1, (char)(i % 3) + 'A'); domain = fmt("CFTHEME/VAL%i%c_%%s", i / 3 + 1, (char)(i % 3) + 'A');
x = 20 + (i / 4) * 150; x = 20 + (i / 4) * 150;
y = 340 + (i % 4) * 32; y = 340 + (i % 4) * 32;
m_cfThemeLblVal[i] = _addLabel(fmt(domain.c_str(), "BTN"), theme.btnFont, L"", x + 32, y, 86, 32, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC); m_cfThemeLblVal[i] = _addLabel(fmt(domain.c_str(), "BTN"), theme.btnFont, L"", x + 32, y, 86, 32, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);

View File

@ -507,13 +507,13 @@ int CMenu::_coverDownloader(bool missingOnly)
strncpy(gamePath, &m_gameList[i].path[string(m_gameList[i].path).find_last_of("/")+1], sizeof(gamePath)); strncpy(gamePath, &m_gameList[i].path[string(m_gameList[i].path).find_last_of("/")+1], sizeof(gamePath));
else else
strncpy(gamePath, m_gameList[i].path, sizeof(gamePath)); strncpy(gamePath, m_gameList[i].path, sizeof(gamePath));
path = sfmt("%s/%s.png", m_boxPicDir.c_str(), gamePath); path = fmt("%s/%s.png", m_boxPicDir.c_str(), gamePath);
id = path; id = path;
} }
else else
{ {
id = (const char *)m_gameList[i].id; id = (const char *)m_gameList[i].id;
path = sfmt("%s/%s.png", m_boxPicDir.c_str(), id.c_str()); path = fmt("%s/%s.png", m_boxPicDir.c_str(), id.c_str());
} }
if(!missingOnly || (!CoverFlow.fullCoverCached(id.c_str()) && !checkPNGFile(path.c_str()))) if(!missingOnly || (!CoverFlow.fullCoverCached(id.c_str()) && !checkPNGFile(path.c_str())))
{ {
@ -596,7 +596,7 @@ int CMenu::_coverDownloader(bool missingOnly)
original = false; original = false;
if (!success && !m_thrdStop && original) if (!success && !m_thrdStop && original)
{ {
path = sfmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str()); path = fmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
if (!checkPNGFile(path.c_str())) if (!checkPNGFile(path.c_str()))
{ {
for (u32 j = 0; !success && j < fmtURLBox.size() && !m_thrdStop; ++j) for (u32 j = 0; !success && j < fmtURLBox.size() && !m_thrdStop; ++j)
@ -742,7 +742,7 @@ int CMenu::_coverDownloader(bool missingOnly)
c_altCase = c_gameTDB.GetCaseVersions( coverList[i].c_str() ); c_altCase = c_gameTDB.GetCaseVersions( coverList[i].c_str() );
if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom) if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
{ {
path = sfmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str()); path = fmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
if (!checkPNGFile(path.c_str())) if (!checkPNGFile(path.c_str()))
{ {
for (u32 j = 0; !success && j < fmtURLCBox.size() && !m_thrdStop; ++j) for (u32 j = 0; !success && j < fmtURLCBox.size() && !m_thrdStop; ++j)
@ -889,7 +889,7 @@ int CMenu::_coverDownloader(bool missingOnly)
original = false; original = false;
if (!success && !m_thrdStop && original) if (!success && !m_thrdStop && original)
{ {
path = sfmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str()); path = fmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
if (!checkPNGFile(path.c_str())) if (!checkPNGFile(path.c_str()))
{ {
// Try to get the front cover // Try to get the front cover
@ -1036,7 +1036,7 @@ int CMenu::_coverDownloader(bool missingOnly)
custom = true; custom = true;
if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom) if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
{ {
path = sfmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str()); path = fmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
if (!checkPNGFile(path.c_str())) if (!checkPNGFile(path.c_str()))
{ {
// Try to get the front cover // Try to get the front cover
@ -2019,7 +2019,7 @@ int CMenu::_gametdbDownloaderAsync()
} }
else else
{ {
string zippath = sfmt("%s/wiitdb.zip", m_settingsDir.c_str()); string zippath = fmt("%s/wiitdb.zip", m_settingsDir.c_str());
gprintf("Downloading file to '%s'\n", zippath.c_str()); gprintf("Downloading file to '%s'\n", zippath.c_str());
@ -2051,7 +2051,7 @@ int CMenu::_gametdbDownloaderAsync()
remove(zippath.c_str()); remove(zippath.c_str());
// We should always remove the offsets file to make sure it's reloaded // We should always remove the offsets file to make sure it's reloaded
string offsetspath = sfmt("%s/gametdb_offsets.bin", m_settingsDir.c_str()); string offsetspath = fmt("%s/gametdb_offsets.bin", m_settingsDir.c_str());
remove(offsetspath.c_str()); remove(offsetspath.c_str());
// Update cache // Update cache

View File

@ -611,10 +611,10 @@ void CMenu::_game(bool launch)
} }
if(hdr->type != TYPE_HOMEBREW && hdr->type != TYPE_PLUGIN) if(hdr->type != TYPE_HOMEBREW && hdr->type != TYPE_PLUGIN)
{ {
if(Playlog_Update((char *)hdr->id, banner_title) < 0) if(Playlog_Update(hdr->id, banner_title) < 0)
Playlog_Delete(); Playlog_Delete();
} }
gprintf("Launching game %s\n", (char *)hdr->id); gprintf("Launching game %s\n", hdr->id);
_launch(hdr); _launch(hdr);
if(m_exit) if(m_exit)
@ -813,14 +813,14 @@ void CMenu::_launch(dir_discHdr *hdr)
void CMenu::_launchGC(dir_discHdr *hdr, bool disc) void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
{ {
string id(hdr->id); const char *id = hdr->id;
string path(hdr->path); const char *path = hdr->path;
m_cfg.setString(GC_DOMAIN, "current_item", id); m_cfg.setString(GC_DOMAIN, "current_item", id);
m_gcfg1.setInt("PLAYCOUNT", id, m_gcfg1.getInt("PLAYCOUNT", id, 0) + 1); m_gcfg1.setInt("PLAYCOUNT", id, m_gcfg1.getInt("PLAYCOUNT", id, 0) + 1);
m_gcfg1.setUInt("LASTPLAYED", id, time(NULL)); m_gcfg1.setUInt("LASTPLAYED", id, time(NULL));
if(has_enabled_providers() && _initNetwork() == 0) if(has_enabled_providers() && _initNetwork() == 0)
add_game_to_card(id.c_str()); add_game_to_card(id);
u8 videoSetting = min(m_cfg.getInt(GC_DOMAIN, "video_setting", 1), 2); u8 videoSetting = min(m_cfg.getInt(GC_DOMAIN, "video_setting", 1), 2);
@ -831,7 +831,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
videoMode = (videoMode == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "video_mode", 0), ARRAY_SIZE(CMenu::_GlobalDMLvideoModes) - 1u) : videoMode-1; videoMode = (videoMode == 0) ? min((u32)m_cfg.getInt(GC_DOMAIN, "video_mode", 0), ARRAY_SIZE(CMenu::_GlobalDMLvideoModes) - 1u) : videoMode-1;
if(videoMode == 0) if(videoMode == 0)
{ {
if(id.c_str()[3] == 'E' || id.c_str()[3] == 'J') if(id[3] == 'E' || id[3] == 'J')
videoMode = 2; //NTSC 480i videoMode = 2; //NTSC 480i
else else
videoMode = 1; //PAL 576i videoMode = 1; //PAL 576i
@ -843,9 +843,10 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
if(disc) if(disc)
{ {
loader = 1; loader = 1;
gprintf("Booting GC Disc: %s\n", id);
DML_New_SetBootDiscOption(m_new_dm_cfg); DML_New_SetBootDiscOption(m_new_dm_cfg);
} }
else if(loader == 1 || strcasestr(path.c_str(), "boot.bin") != NULL || !m_devo_installed) else if(loader == 1 || strcasestr(path, "boot.bin") != NULL || !m_devo_installed)
{ {
loader = 1; loader = 1;
m_cfg.setString(GC_DOMAIN, "current_item", id); m_cfg.setString(GC_DOMAIN, "current_item", id);
@ -855,28 +856,29 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
u8 nodisc = min((u32)m_gcfg2.getInt(id, "no_disc_patch", 0), ARRAY_SIZE(CMenu::_NoDVD) - 1u); u8 nodisc = min((u32)m_gcfg2.getInt(id, "no_disc_patch", 0), ARRAY_SIZE(CMenu::_NoDVD) - 1u);
nodisc = (nodisc == 0) ? m_cfg.getInt(GC_DOMAIN, "no_disc_patch", 0) : nodisc-1; nodisc = (nodisc == 0) ? m_cfg.getInt(GC_DOMAIN, "no_disc_patch", 0) : nodisc-1;
bool cheats = m_gcfg2.testOptBool(id, "cheat", m_cfg.getBool(GC_DOMAIN, "cheat", false)); bool cheats = m_gcfg2.testOptBool(id, "cheat", m_cfg.getBool(GC_DOMAIN, "cheat", false));
string NewCheatPath;
bool DML_debug = m_gcfg2.getBool(id, "debugger", false); bool DML_debug = m_gcfg2.getBool(id, "debugger", false);
bool DM_Widescreen = m_gcfg2.getBool(id, "dm_widescreen", false); bool DM_Widescreen = m_gcfg2.getBool(id, "dm_widescreen", false);
bool activity_led = m_cfg.getBool(GC_DOMAIN, "dml_activity_led", true); bool activity_led = m_cfg.getBool(GC_DOMAIN, "dml_activity_led", true);
if(strcasestr(path.c_str(), "boot.bin") != NULL) /* Generate gct path */
char GC_Path[1024];
GC_Path[1023] = '\0';
strncpy(GC_Path, path, 1023);
if(strcasestr(path, "boot.bin") != NULL)
{ {
path.erase(path.end() - 12, path.end()); *strrchr(GC_Path, '/') = '\0'; //boot.bin
NewCheatPath = sfmt("%s%s", path.c_str(), fmt("%s.gct", id.c_str())); *(strrchr(GC_Path, '/')+1) = '\0'; //sys
} }
else else
{ *(strrchr(GC_Path, '/')+1) = '\0'; //iso path
NewCheatPath = sfmt("%s/%s", path.c_str(), fmt("%s.gct", id.c_str())); const char *NewCheatPath = fmt("%s%s.gct", GC_Path, id);
NewCheatPath.erase(NewCheatPath.end() - 19, NewCheatPath.end() - 10);
}
if(cheats) if(cheats)
snprintf(CheatPath, sizeof(CheatPath), "%s/%s", m_cheatDir.c_str(), fmt("%s.gct", id.c_str())); snprintf(CheatPath, sizeof(CheatPath), "%s/%s", m_cheatDir.c_str(), fmt("%s.gct", id));
string newPath = &path[path.find_first_of(":/")+1]; const char *newPath = strcasestr(path, "boot.bin") == NULL ? strchr(path, '/') : strchr(GC_Path, '/');
if(m_new_dml) if(m_new_dml)
DML_New_SetOptions(newPath.c_str(), CheatPath, NewCheatPath.c_str(), DeviceName[currentPartition], DML_New_SetOptions(newPath, CheatPath, NewCheatPath, DeviceName[currentPartition],
cheats, DML_debug, NMM, nodisc, videoMode, videoSetting, DM_Widescreen, m_new_dm_cfg, activity_led); cheats, DML_debug, NMM, nodisc, videoMode, videoSetting, DM_Widescreen, m_new_dm_cfg, activity_led);
else else
DML_Old_SetOptions(newPath.c_str()); DML_Old_SetOptions(newPath);
if(!nodisc || !m_new_dml) if(!nodisc || !m_new_dml)
WDVD_StopMotor(); WDVD_StopMotor();
} }
@ -910,7 +912,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool disc)
else //use cIOS instead to make sure Devolution works anyways else //use cIOS instead to make sure Devolution works anyways
loadIOS(mainIOS, false); loadIOS(mainIOS, false);
ShutdownBeforeExit(); ShutdownBeforeExit();
DEVO_SetOptions(path.c_str(), id.c_str(), memcard_emu); DEVO_SetOptions(path, id, memcard_emu);
DEVO_Boot(); DEVO_Boot();
} }
Sys_Exit(); Sys_Exit();
@ -1185,21 +1187,18 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
else else
{ {
/* Read GC disc header */ /* Read GC disc header */
struct gc_discHdr *gcHeader = (struct gc_discHdr *)memalign(32, sizeof(struct gc_discHdr)); Disc_ReadGCHeader(&gc_hdr);
Disc_ReadGCHeader(gcHeader); memcpy(hdr->id, gc_hdr.id, 6);
strncpy(hdr->id, (char*)gcHeader->id, 6);
free(gcHeader);
/* Launching GC Game */ /* Launching GC Game */
_launchGC(hdr, true); _launchGC(hdr, true);
return;
} }
} }
else else
{ {
/* Read header */ /* Read header */
struct discHdr *header = (struct discHdr *)memalign(32, sizeof(struct discHdr)); Disc_ReadHeader(&wii_hdr);
Disc_ReadHeader(header); id = string((char*)wii_hdr.id, 6);
id = string((const char*)header->id);
free(header);
} }
gprintf("Game ID: %s\n", id.c_str()); gprintf("Game ID: %s\n", id.c_str());
} }

View File

@ -276,14 +276,14 @@ void CMenu::_initGameInfoMenu()
for(u8 i = 0; i < ARRAY_SIZE(m_gameinfoLblControlsReq); ++i) for(u8 i = 0; i < ARRAY_SIZE(m_gameinfoLblControlsReq); ++i)
{ {
string dom(sfmt("GAMEINFO/CONTROLSREQ%i", i + 1)); string dom(fmt("GAMEINFO/CONTROLSREQ%i", i + 1));
m_gameinfoLblControlsReq[i] = _addLabel(dom.c_str(), theme.txtFont, L"", 40 + (i*60), 310, 60, 40, theme.txtFontColor, 0, emptyTex); m_gameinfoLblControlsReq[i] = _addLabel(dom.c_str(), theme.txtFont, L"", 40 + (i*60), 310, 60, 40, theme.txtFontColor, 0, emptyTex);
_setHideAnim(m_gameinfoLblControlsReq[i], dom.c_str(), 0, -100, 0.f, 0.f); _setHideAnim(m_gameinfoLblControlsReq[i], dom.c_str(), 0, -100, 0.f, 0.f);
} }
for(u8 i = 0; i < ARRAY_SIZE(m_gameinfoLblControls); ++i) for(u8 i = 0; i < ARRAY_SIZE(m_gameinfoLblControls); ++i)
{ {
string dom(sfmt("GAMEINFO/CONTROLS%i", i + 1)); string dom(fmt("GAMEINFO/CONTROLS%i", i + 1));
m_gameinfoLblControls[i] = _addLabel(dom.c_str(), theme.txtFont, L"", 40 + (i*60), 380, 60, 40, theme.txtFontColor, 0, emptyTex); m_gameinfoLblControls[i] = _addLabel(dom.c_str(), theme.txtFont, L"", 40 + (i*60), 380, 60, 40, theme.txtFontColor, 0, emptyTex);
_setHideAnim(m_gameinfoLblControls[i], dom.c_str(), 0, -100, 0.f, 0.f); _setHideAnim(m_gameinfoLblControls[i], dom.c_str(), 0, -100, 0.f, 0.f);
} }

View File

@ -168,8 +168,8 @@ bool CMenu::_checkSave(string id, bool nand)
if(nand) if(nand)
{ {
u32 temp = 0; u32 temp = 0;
if(ISFS_ReadDir(sfmt("/title/00010000/%08x", savePath).c_str(), NULL, &temp) < 0) if(ISFS_ReadDir(fmt("/title/00010000/%08x", savePath), NULL, &temp) < 0)
if(ISFS_ReadDir(sfmt("/title/00010004/%08x", savePath).c_str(), NULL, &temp) < 0) if(ISFS_ReadDir(fmt("/title/00010004/%08x", savePath), NULL, &temp) < 0)
return false; return false;
} }
else else
@ -180,8 +180,8 @@ bool CMenu::_checkSave(string id, bool nand)
return false; return false;
struct stat fstat; struct stat fstat;
if((stat(sfmt("%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), savePath).c_str(), &fstat) != 0 ) if((stat(fmt("%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), savePath), &fstat) != 0 )
&& (stat(sfmt("%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), savePath).c_str(), &fstat) != 0)) && (stat(fmt("%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), savePath), &fstat) != 0))
return false; return false;
} }
return true; return true;
@ -708,15 +708,16 @@ int CMenu::_NandFlasher(void *obj)
else if(m.m_current_view == COVERFLOW_USB) else if(m.m_current_view == COVERFLOW_USB)
m.m_partRequest = m.m_cfg.getInt(WII_DOMAIN, "savepartition", -1); m.m_partRequest = m.m_cfg.getInt(WII_DOMAIN, "savepartition", -1);
const char *SaveGameID = m.m_saveExtGameId.c_str();
int emuPartition = m._FindEmuPart(&emuPath, m.m_partRequest, false); int emuPartition = m._FindEmuPart(&emuPath, m.m_partRequest, false);
int flashID = m.m_saveExtGameId.c_str()[0] << 24 | m.m_saveExtGameId.c_str()[1] << 16 | m.m_saveExtGameId.c_str()[2] << 8 | m.m_saveExtGameId.c_str()[3]; int flashID = SaveGameID[0] << 24 | SaveGameID[1] << 16 | SaveGameID[2] << 8 | SaveGameID[3];
if(_saveExists(sfmt("%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID).c_str())) if(_saveExists(fmt("%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID)))
{ {
snprintf(source, sizeof(source), "%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID); snprintf(source, sizeof(source), "%s:%s/title/00010000/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID);
snprintf(dest, sizeof(dest), "/title/00010000/%08x", flashID); snprintf(dest, sizeof(dest), "/title/00010000/%08x", flashID);
} }
else if(_saveExists(sfmt("%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID).c_str())) else if(_saveExists(fmt("%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID)))
{ {
snprintf(source, sizeof(source), "%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID); snprintf(source, sizeof(source), "%s:%s/title/00010004/%08x", DeviceName[emuPartition], emuPath.c_str(), flashID);
snprintf(dest, sizeof(dest), "/title/00010004/%08x", flashID); snprintf(dest, sizeof(dest), "/title/00010004/%08x", flashID);

View File

@ -148,8 +148,8 @@ bool CMenu::_Source()
while((pent = readdir(pdir)) != NULL) while((pent = readdir(pdir)) != NULL)
{ {
if(strcmp(pent->d_name, ".") == 0 || strcmp(pent->d_name, "..") == 0 if(pent->d_name[0] == '.'|| strcasecmp(pent->d_name, "plugins.ini") == 0 ||
|| strcasecmp(pent->d_name, "plugins.ini") == 0 || strcasecmp(pent->d_name, "scummvm.ini") == 0) strcasecmp(pent->d_name, "scummvm.ini") == 0)
continue; continue;
if(strcasestr(pent->d_name, ".ini") != NULL) if(strcasestr(pent->d_name, ".ini") != NULL)
{ {
@ -412,7 +412,7 @@ void CMenu::_initSourceMenu()
m_sourceBtnPageM = _addPicButton("SOURCE/PAGE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 10, 400, 52, 56); m_sourceBtnPageM = _addPicButton("SOURCE/PAGE_MINUS", theme.btnTexMinus, theme.btnTexMinusS, 10, 400, 52, 56);
m_sourceBtnPageP = _addPicButton("SOURCE/PAGE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 160, 400, 52, 56); m_sourceBtnPageP = _addPicButton("SOURCE/PAGE_PLUS", theme.btnTexPlus, theme.btnTexPlusS, 160, 400, 52, 56);
m_sourceDir = m_cfg.getString("GENERAL", "dir_Source", sfmt("%s/source_menu", m_dataDir.c_str())); m_sourceDir = m_cfg.getString("GENERAL", "dir_Source", fmt("%s/source_menu", m_dataDir.c_str()));
if(!m_source.loaded()) if(!m_source.loaded())
m_source.load(fmt("%s/%s", m_sourceDir.c_str(), SOURCE_FILENAME)); m_source.load(fmt("%s/%s", m_sourceDir.c_str(), SOURCE_FILENAME));

View File

@ -267,8 +267,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
lwp_t thread = 0; lwp_t thread = 0;
char GameID[7]; char GameID[7];
GameID[6] = '\0'; GameID[6] = '\0';
static discHdr header ATTRIBUTE_ALIGN(32);
static gc_discHdr gcheader ATTRIBUTE_ALIGN(32);
bool done = false; bool done = false;
bool upd_usb = false; bool upd_usb = false;
bool upd_dml = false; bool upd_dml = false;
@ -335,8 +334,8 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
} }
if (Disc_IsWii() == 0) if (Disc_IsWii() == 0)
{ {
Disc_ReadHeader(&header); Disc_ReadHeader(&wii_hdr);
memcpy(GameID, header.id, 6); memcpy(GameID, wii_hdr.id, 6);
if(_searchGamesByID(GameID)) if(_searchGamesByID(GameID))
{ {
error(_t("wbfsoperr4", L"Game already installed")); error(_t("wbfsoperr4", L"Game already installed"));
@ -344,7 +343,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
break; break;
} }
cfPos = string(GameID); cfPos = string(GameID);
m_btnMgr.setText(m_wbfsLblDialog, wfmt(_fmt("wbfsop6", L"Installing [%s] %s..."), GameID, header.title)); m_btnMgr.setText(m_wbfsLblDialog, wfmt(_fmt("wbfsop6", L"Installing [%s] %s..."), GameID, wii_hdr.title));
done = true; done = true;
upd_usb = true; upd_usb = true;
m_thrdWorking = true; m_thrdWorking = true;
@ -354,8 +353,8 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
} }
else if(Disc_IsGC() == 0) else if(Disc_IsGC() == 0)
{ {
Disc_ReadGCHeader(&gcheader); Disc_ReadGCHeader(&gc_hdr);
memcpy(GameID, gcheader.id, 6); memcpy(GameID, gc_hdr.id, 6);
if(_searchGamesByID(GameID)) if(_searchGamesByID(GameID))
{ {
error(_t("wbfsoperr4", L"Game already installed")); error(_t("wbfsoperr4", L"Game already installed"));
@ -363,7 +362,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
break; break;
} }
cfPos = string(GameID); cfPos = string(GameID);
m_btnMgr.setText(m_wbfsLblDialog, wfmt(_fmt("wbfsop6", L"Installing [%s] %s..."), GameID, gcheader.title)); m_btnMgr.setText(m_wbfsLblDialog, wfmt(_fmt("wbfsop6", L"Installing [%s] %s..."), GameID, gc_hdr.title));
done = true; done = true;
upd_dml = true; upd_dml = true;
m_thrdWorking = true; m_thrdWorking = true;

View File

@ -48,6 +48,9 @@
#include <stdio.h> #include <stdio.h>
#include <ogc/system.h> #include <ogc/system.h>
#include "crc32.h" #include "crc32.h"
#include "memory/mem2.hpp"
#define FILEBUFFER 0x200000 /* 2MB */
static u32 crc_32_tab[] = { /* CRC polynomial 0xedb88320 */ static u32 crc_32_tab[] = { /* CRC polynomial 0xedb88320 */
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
@ -95,44 +98,37 @@ static u32 crc_32_tab[] = { /* CRC polynomial 0xedb88320 */
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
}; };
u32 crc32file(char *name) u32 crc32buffer(const u8 *buffer, const u32 len, u32 oldcrc32)
{ {
FILE *fin; u32 i;
s32 c; for(i = 0; i < len; i++)
oldcrc32 = UPDC32(buffer[i], oldcrc32);
u32 oldcrc32 = 0xFFFFFFFF;
s32 charcnt = 0;
if((fin = fopen(name, "rb")) == NULL)
{
perror(name);
return oldcrc32; return oldcrc32;
} }
while((c = getc(fin)) != EOF) u32 crc32file(const char *name)
{ {
++charcnt; FILE *fp = fopen(name, "rb");
oldcrc32 = UPDC32(c, oldcrc32); if(fp == NULL)
} return 0;
u32 Length = 0;
if(ferror(fin))
{
perror(name);
charcnt = -1;
}
fclose(fin);
u32 crc32 = oldcrc32 = ~oldcrc32;
return crc32;
}
u32 crc32buffer(const u8 *buffer, const u32 len)
{
u32 i;
u32 oldcrc32 = 0xFFFFFFFF; u32 oldcrc32 = 0xFFFFFFFF;
for(i = 0; i < len; i++) /* Check our filesize */
oldcrc32 = UPDC32(buffer[i], oldcrc32); fseek(fp, 0, SEEK_END);
if(ftell(fp) > 0x40000000) //pfff over 1gb would take ages
u32 crc32 = oldcrc32 = ~oldcrc32; return oldcrc32;
return crc32; rewind(fp);
/* Get a Buffer and begin */
u8 *Buffer = (u8*)MEM2_alloc(FILEBUFFER);
while(1)
{
Length = fread(Buffer, 1, FILEBUFFER, fp);
if(Length == 0)
break;
oldcrc32 = crc32buffer(Buffer, Length, oldcrc32);
}
MEM2_free(Buffer);
fclose(fp);
return oldcrc32 = ~oldcrc32;
} }

View File

@ -10,8 +10,7 @@ extern "C"
#define UPDC32(octet, crc) (crc_32_tab[((crc)\ #define UPDC32(octet, crc) (crc_32_tab[((crc)\
^ (octet)) & 0xff] ^ ((crc) >> 8)) ^ (octet)) & 0xff] ^ ((crc) >> 8))
u32 crc32file(char *name); u32 crc32file(const char *name);
u32 crc32buffer(const u8 *s, const u32 len);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -122,17 +122,17 @@ u32 Plugin::GetBannerSoundSize()
return 0; return 0;
} }
char* Plugin::GetDolName(u32 magic) const char *Plugin::GetDolName(u32 magic)
{ {
if((Plugin_Pos = GetPluginPosition(magic)) >= 0) if((Plugin_Pos = GetPluginPosition(magic)) >= 0)
return (char*)Plugins[Plugin_Pos].DolName.c_str(); return Plugins[Plugin_Pos].DolName.c_str();
return NULL; return NULL;
} }
char* Plugin::GetCoverFolderName(u32 magic) const char *Plugin::GetCoverFolderName(u32 magic)
{ {
if((Plugin_Pos = GetPluginPosition(magic)) >= 0) if((Plugin_Pos = GetPluginPosition(magic)) >= 0)
return (char*)Plugins[Plugin_Pos].coverFolder.c_str(); return Plugins[Plugin_Pos].coverFolder.c_str();
return NULL; return NULL;
} }
@ -207,7 +207,7 @@ vector<dir_discHdr> Plugin::ParseScummvmINI(Config &ini, const char *Device, u32
continue; continue;
} }
memset((void*)&ListElement, 0, sizeof(dir_discHdr)); memset((void*)&ListElement, 0, sizeof(dir_discHdr));
strncpy((char*)ListElement.id, PLUGIN_INI_DEF, 6); strncpy(ListElement.id, PLUGIN_INI_DEF, 6);
ListElement.casecolor = Plugins.back().caseColor; ListElement.casecolor = Plugins.back().caseColor;
mbstowcs(ListElement.title, GameName.c_str(), 63); mbstowcs(ListElement.title, GameName.c_str(), 63);
strncpy(ListElement.path, GameDomain->c_str(), sizeof(ListElement.path)); strncpy(ListElement.path, GameDomain->c_str(), sizeof(ListElement.path));

View File

@ -56,8 +56,8 @@ public:
bool AddPlugin(Config &plugin); bool AddPlugin(Config &plugin);
u8 *GetBannerSound(u32 magic); u8 *GetBannerSound(u32 magic);
u32 GetBannerSoundSize(); u32 GetBannerSoundSize();
char* GetDolName(u32 magic); const char *GetDolName(u32 magic);
char* GetCoverFolderName(u32 magic); const char *GetCoverFolderName(u32 magic);
string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums); string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums);
wstringEx GetPluginName(u8 pos); wstringEx GetPluginName(u8 pos);
u32 getPluginMagic(u8 pos); u32 getPluginMagic(u8 pos);