diff --git a/source/appboot.c b/source/appboot.c index fac9f41..d8c6a21 100644 --- a/source/appboot.c +++ b/source/appboot.c @@ -32,6 +32,7 @@ u32 appIos = 0; #define MEM2PROT 0x0D8B420A #define ESMODULESTART (u16*)0x939F0000 +#define MB_SIZE 1048576.0 static const u16 ticket[] = { 0x685B, // ldr r3,[r3,#4] ; get TMD pointer @@ -64,7 +65,7 @@ static bool patchahbprot(void) } } -bool LoadApp(const char* path) +bool LoadApp(const char* path, const char* filename) { Con_Clear(); @@ -88,6 +89,8 @@ bool LoadApp(const char* path) *(vu32*)0x91000000 = 0; } +/* + // This causes crashes when XML nodes are empty struct MetaData* appData = LoadMetaData(currentPath); if (appData) @@ -100,19 +103,14 @@ bool LoadApp(const char* path) printf("\n"); } +*/ - snprintf(currentPath, sizeof(currentPath), "%s/boot.dol", path); + snprintf(currentPath, sizeof(currentPath), "%s/%s", path, filename); FILE* f = fopen(currentPath, "rb"); if (f == NULL) - { - snprintf(currentPath, sizeof(currentPath), "%s/boot.elf", path); - f = fopen(currentPath, "rb"); - - if (f == NULL) - return false; - } + return false; printf("-> Load: %s\n", currentPath); @@ -135,7 +133,8 @@ bool LoadApp(const char* path) } else { - printf("-> App size: 0x%X\n\n", appSize); + f32 filesize = (appSize / MB_SIZE); + printf("-> App size: %.2f MB\n\n", filesize); } DCFlushRange(appBuffer, appSize); diff --git a/source/appboot.h b/source/appboot.h index 212bc26..8bd2d6e 100644 --- a/source/appboot.h +++ b/source/appboot.h @@ -16,7 +16,7 @@ typedef struct _dolhdr u32 entrypoint; } dolhdr; -bool LoadApp(const char* path); +bool LoadApp(const char* path, const char* filename); u8* GetApp(u32* size); void LaunchApp(void); void SetIos(int ios); diff --git a/source/menu.c b/source/menu.c index 1b57ad1..0ed273d 100644 --- a/source/menu.c +++ b/source/menu.c @@ -664,11 +664,23 @@ int Menu_FileOperations(fatFile *file, char *inFilePath) { Con_Clear(); - printf("[+] WAD Filename : %s\n", file->filename); - printf(" WAD Filesize : %.2f MB\n\n\n", filesize); - - - printf("[+] Select action: < %s WAD >\n\n", "Delete"); //There's yet nothing else than delete + if(file->iswad) { + printf("[+] WAD Filename : %s\n", file->filename); + printf(" WAD Filesize : %.2f MB\n\n\n", filesize); + printf("[+] Select action: < %s WAD >\n\n", "Delete"); //There's yet nothing else than delete + } + else if(file->isdol) { + printf("[+] DOL Filename : %s\n", file->filename); + printf(" DOL Filesize : %.2f MB\n\n\n", filesize); + printf("[+] Select action: < %s DOL >\n\n", "Delete"); + } + else if(file->iself) { + printf("[+] ELF Filename : %s\n", file->filename); + printf(" ELF Filesize : %.2f MB\n\n\n", filesize); + printf("[+] Select action: < %s ELF >\n\n", "Delete"); + } + else + return 0; printf(" Press LEFT/RIGHT to change selected action.\n\n"); @@ -721,7 +733,7 @@ void Menu_WadManage(fatFile *file, char *inFilePath) /* Clear console */ Con_Clear(); if(file->iswad) { - printf("[+] WAD Filename : %s\n", file->filename); + printf("[+] WAD Filename : %s\n", file->filename); printf(" WAD Filesize : %.2f MB\n\n\n", filesize); @@ -732,12 +744,12 @@ void Menu_WadManage(fatFile *file, char *inFilePath) } else { if(file->isdol) { - printf("[+] DOL Filename : %s\n", file->filename); + printf("[+] DOL Filename : %s\n", file->filename); printf(" DOL Filesize : %.2f MB\n\n\n", filesize); printf(" Press A to launch DOL.\n"); } if(file->iself) { - printf("[+] ELF Filename : %s\n", file->filename); + printf("[+] ELF Filename : %s\n", file->filename); printf(" ELF Filesize : %.2f MB\n\n\n", filesize); printf(" Press A to launch ELF.\n"); } @@ -790,7 +802,7 @@ void Menu_WadManage(fatFile *file, char *inFilePath) else { printf("launch dol/elf here \n"); - if(LoadApp(inFilePath)) { + if(LoadApp(inFilePath, file->filename)) { LaunchApp(); } return;