mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-29 14:44:17 +01:00
*Clean up in partition mount/format process
*Clean up in game boot process
This commit is contained in:
parent
78ff6447a4
commit
6baa46b1e6
@ -2,8 +2,8 @@
|
|||||||
<app version="1">
|
<app version="1">
|
||||||
<name> USB Loader GX</name>
|
<name> USB Loader GX</name>
|
||||||
<coder>USB Loader GX Team</coder>
|
<coder>USB Loader GX Team</coder>
|
||||||
<version>1.0 r991</version>
|
<version>1.0 r992</version>
|
||||||
<release_date>201010270652</release_date>
|
<release_date>201010271735</release_date>
|
||||||
<short_description>Loads games from USB-devices</short_description>
|
<short_description>Loads games from USB-devices</short_description>
|
||||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||||
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
||||||
|
129
source/GameBootProcess.cpp
Normal file
129
source/GameBootProcess.cpp
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
#include "menu/menus.h"
|
||||||
|
#include "mload/mload.h"
|
||||||
|
#include "mload/mload_modules.h"
|
||||||
|
#include "usbloader/disc.h"
|
||||||
|
#include "usbloader/GameList.h"
|
||||||
|
#include "settings/Settings.h"
|
||||||
|
#include "settings/CGameSettings.h"
|
||||||
|
#include "usbloader/frag.h"
|
||||||
|
#include "usbloader/wbfs.h"
|
||||||
|
#include "settings/newtitles.h"
|
||||||
|
#include "patches/fst.h"
|
||||||
|
#include "wad/nandtitle.h"
|
||||||
|
|
||||||
|
struct discHdr *dvdheader = NULL;
|
||||||
|
extern int load_from_fs;
|
||||||
|
extern int mountMethod;
|
||||||
|
|
||||||
|
int BootGame(const char * gameID)
|
||||||
|
{
|
||||||
|
if(!gameID || strlen(gameID) < 3)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
gprintf("\tSettings.partition: %d\n", Settings.partition);
|
||||||
|
|
||||||
|
gameList.LoadUnfiltered();
|
||||||
|
|
||||||
|
struct discHdr *header = gameList.GetDiscHeader(gameID);
|
||||||
|
if(!header)
|
||||||
|
{
|
||||||
|
gprintf("Game was not found: %s\n", gameID);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = 0;
|
||||||
|
header = (mountMethod ? dvdheader : header);
|
||||||
|
|
||||||
|
u8 videoChoice = Settings.videomode;
|
||||||
|
u8 languageChoice = Settings.language;
|
||||||
|
u8 ocarinaChoice = Settings.ocarina;
|
||||||
|
u8 viChoice = Settings.videopatch;
|
||||||
|
u8 iosChoice = Settings.cios;
|
||||||
|
u8 fix002 = Settings.error002;
|
||||||
|
u8 countrystrings = Settings.patchcountrystrings;
|
||||||
|
u8 alternatedol = OFF;
|
||||||
|
u32 alternatedoloffset = 0;
|
||||||
|
u8 reloadblock = OFF;
|
||||||
|
u8 returnToLoaderGV = 1;
|
||||||
|
|
||||||
|
GameCFG * game_cfg = GameSettings.GetGameCFG(header->id);
|
||||||
|
|
||||||
|
if (game_cfg)
|
||||||
|
{
|
||||||
|
videoChoice = game_cfg->video;
|
||||||
|
languageChoice = game_cfg->language;
|
||||||
|
ocarinaChoice = game_cfg->ocarina;
|
||||||
|
viChoice = game_cfg->vipatch;
|
||||||
|
fix002 = game_cfg->errorfix002;
|
||||||
|
iosChoice = game_cfg->ios;
|
||||||
|
countrystrings = game_cfg->patchcountrystrings;
|
||||||
|
alternatedol = game_cfg->loadalternatedol;
|
||||||
|
alternatedoloffset = game_cfg->alternatedolstart;
|
||||||
|
reloadblock = game_cfg->iosreloadblock;
|
||||||
|
returnToLoaderGV = game_cfg->returnTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mountMethod)
|
||||||
|
{
|
||||||
|
gprintf("Loading fragment list...");
|
||||||
|
ret = get_frag_list(header->id);
|
||||||
|
gprintf("%d\n", ret);
|
||||||
|
|
||||||
|
gprintf("Setting fragment list...");
|
||||||
|
ret = set_frag_list(header->id);
|
||||||
|
gprintf("%d\n", ret);
|
||||||
|
|
||||||
|
ret = Disc_SetUSB(header->id);
|
||||||
|
if (ret < 0) Sys_BackToLoader();
|
||||||
|
gprintf("\tUSB set to game\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gprintf("\tUSB not set, loading DVD\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = Disc_Open();
|
||||||
|
|
||||||
|
if (ret < 0) Sys_BackToLoader();
|
||||||
|
|
||||||
|
if (dvdheader) delete dvdheader;
|
||||||
|
|
||||||
|
gprintf("Loading BCA data...");
|
||||||
|
ret = do_bca_code(header->id);
|
||||||
|
gprintf("%d\n", ret);
|
||||||
|
|
||||||
|
if (reloadblock == ON && Sys_IsHermes())
|
||||||
|
{
|
||||||
|
enable_ES_ioctlv_vector();
|
||||||
|
if (load_from_fs == PART_FS_WBFS)
|
||||||
|
{
|
||||||
|
mload_close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 channel = 0;
|
||||||
|
if (returnToLoaderGV)
|
||||||
|
{
|
||||||
|
int idx = NandTitles.FindU32(Settings.returnTo);
|
||||||
|
if (idx >= 0) channel = TITLE_LOWER( NandTitles.At( idx ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//This is temporary
|
||||||
|
SetCheatFilepath(Settings.Cheatcodespath);
|
||||||
|
SetBCAFilepath(Settings.BcaCodepath);
|
||||||
|
|
||||||
|
gprintf("\tDisc_wiiBoot\n");
|
||||||
|
|
||||||
|
shadow_mload();
|
||||||
|
|
||||||
|
ret = Disc_WiiBoot(Settings.dolpath, videoChoice, languageChoice, ocarinaChoice, viChoice, countrystrings,
|
||||||
|
alternatedol, alternatedoloffset, channel, fix002);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
Sys_LoadMenu();
|
||||||
|
|
||||||
|
//should never get here
|
||||||
|
printf("Returning entry point: 0x%0x\n", ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
6
source/GameBootProcess.h
Normal file
6
source/GameBootProcess.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef GAMEBOOTPROCESS_H_
|
||||||
|
#define GAMEBOOTPROCESS_H_
|
||||||
|
|
||||||
|
int BootGame(const char * gameID);
|
||||||
|
|
||||||
|
#endif
|
@ -35,6 +35,7 @@ extern "C"
|
|||||||
#include "FontSystem.h"
|
#include "FontSystem.h"
|
||||||
#include "video.h"
|
#include "video.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
|
#include "menu/menus.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "filelist.h"
|
#include "filelist.h"
|
||||||
@ -53,10 +54,9 @@ extern "C"
|
|||||||
#include "usbloader/usbstorage2.h"
|
#include "usbloader/usbstorage2.h"
|
||||||
#include "wad/nandtitle.h"
|
#include "wad/nandtitle.h"
|
||||||
#include "system/IosLoader.h"
|
#include "system/IosLoader.h"
|
||||||
|
#include "GameBootProcess.h"
|
||||||
|
|
||||||
extern bool geckoinit;
|
extern bool geckoinit;
|
||||||
extern char headlessID[8];
|
|
||||||
char bootDevice[10];
|
|
||||||
|
|
||||||
PartList partitions;
|
PartList partitions;
|
||||||
|
|
||||||
@ -100,19 +100,12 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
printf("\tLoaded cIOS = %u (Rev %u)\n", IOS_GetVersion(), IOS_GetRevision());
|
printf("\tLoaded cIOS = %u (Rev %u)\n", IOS_GetVersion(), IOS_GetRevision());
|
||||||
|
|
||||||
printf("\tWaiting for USB:\n");
|
|
||||||
if (MountWBFS() < 0)
|
|
||||||
{
|
|
||||||
printf("ERROR: No WBFS drive mounted.\n");
|
|
||||||
sleep(5);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//if a ID was passed via args copy it and try to boot it after the partition is mounted
|
//if a ID was passed via args copy it and try to boot it after the partition is mounted
|
||||||
//its not really a headless mode. more like hairless.
|
//its not really a headless mode. more like hairless.
|
||||||
if (argc > 1 && argv[1])
|
if (argc > 1 && argv[1])
|
||||||
{
|
{
|
||||||
if (strlen(argv[1]) == 6) strncpy(headlessID, argv[1], sizeof(headlessID));
|
MountGamePartition(false);
|
||||||
|
return BootGame(argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Init the rest of the System
|
//! Init the rest of the System
|
||||||
@ -127,6 +120,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
//gprintf("\tEnd of Main()\n");
|
//gprintf("\tEnd of Main()\n");
|
||||||
InitGUIThreads();
|
InitGUIThreads();
|
||||||
MainMenu( MENU_CHECK);
|
MainMenu(MENU_DISCLIST);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
160
source/menu.cpp
160
source/menu.cpp
@ -36,6 +36,7 @@
|
|||||||
#include "usbloader/frag.h"
|
#include "usbloader/frag.h"
|
||||||
#include "usbloader/wbfs.h"
|
#include "usbloader/wbfs.h"
|
||||||
#include "wad/nandtitle.h"
|
#include "wad/nandtitle.h"
|
||||||
|
#include "GameBootProcess.h"
|
||||||
|
|
||||||
/*** Variables that are also used extern ***/
|
/*** Variables that are also used extern ***/
|
||||||
GuiWindow * mainWindow = NULL;
|
GuiWindow * mainWindow = NULL;
|
||||||
@ -45,7 +46,6 @@ GuiImageData * background = NULL;
|
|||||||
GuiBGM * bgMusic = NULL;
|
GuiBGM * bgMusic = NULL;
|
||||||
GuiSound *btnClick2 = NULL;
|
GuiSound *btnClick2 = NULL;
|
||||||
|
|
||||||
struct discHdr *dvdheader = NULL;
|
|
||||||
int currentMenu;
|
int currentMenu;
|
||||||
u8 mountMethod = 0;
|
u8 mountMethod = 0;
|
||||||
|
|
||||||
@ -58,7 +58,6 @@ GuiText * GameRegionTxt = NULL;
|
|||||||
GuiImage * coverImg = NULL;
|
GuiImage * coverImg = NULL;
|
||||||
GuiImageData * cover = NULL;
|
GuiImageData * cover = NULL;
|
||||||
bool altdoldefault = true;
|
bool altdoldefault = true;
|
||||||
char headlessID[8] = { 0 };
|
|
||||||
|
|
||||||
static lwp_t guithread = LWP_THREAD_NULL;
|
static lwp_t guithread = LWP_THREAD_NULL;
|
||||||
static bool guiHalt = true;
|
static bool guiHalt = true;
|
||||||
@ -165,7 +164,7 @@ static void * UpdateGUI(void *arg)
|
|||||||
|
|
||||||
for (i = 5; i < 255; i += 10)
|
for (i = 5; i < 255; i += 10)
|
||||||
{
|
{
|
||||||
if (strcmp(headlessID, "") == 0) mainWindow->Draw();
|
mainWindow->Draw();
|
||||||
Menu_DrawRectangle(0, 0, screenwidth, screenheight, (GXColor) {0, 0, 0, i}, 1);
|
Menu_DrawRectangle(0, 0, screenwidth, screenheight, (GXColor) {0, 0, 0, i}, 1);
|
||||||
Menu_Render();
|
Menu_Render();
|
||||||
}
|
}
|
||||||
@ -255,6 +254,8 @@ int MainMenu(int menu)
|
|||||||
{
|
{
|
||||||
currentMenu = menu;
|
currentMenu = menu;
|
||||||
|
|
||||||
|
MountGamePartition();
|
||||||
|
|
||||||
pointer[0] = Resources::GetImageData("player1_point.png");
|
pointer[0] = Resources::GetImageData("player1_point.png");
|
||||||
pointer[1] = Resources::GetImageData("player2_point.png");
|
pointer[1] = Resources::GetImageData("player2_point.png");
|
||||||
pointer[2] = Resources::GetImageData("player3_point.png");
|
pointer[2] = Resources::GetImageData("player3_point.png");
|
||||||
@ -267,7 +268,7 @@ int MainMenu(int menu)
|
|||||||
bgImg = new GuiImage(background);
|
bgImg = new GuiImage(background);
|
||||||
mainWindow->Append(bgImg);
|
mainWindow->Append(bgImg);
|
||||||
|
|
||||||
if (strcmp(headlessID, "") == 0) ResumeGui();
|
ResumeGui();
|
||||||
|
|
||||||
bgMusic = new GuiBGM(bg_music_ogg, bg_music_ogg_size, Settings.volume);
|
bgMusic = new GuiBGM(bg_music_ogg, bg_music_ogg_size, Settings.volume);
|
||||||
bgMusic->SetLoop(Settings.musicloopmode); //loop music
|
bgMusic->SetLoop(Settings.musicloopmode); //loop music
|
||||||
@ -281,12 +282,6 @@ int MainMenu(int menu)
|
|||||||
|
|
||||||
switch (currentMenu)
|
switch (currentMenu)
|
||||||
{
|
{
|
||||||
case MENU_CHECK:
|
|
||||||
currentMenu = MenuCheck();
|
|
||||||
break;
|
|
||||||
case MENU_FORMAT:
|
|
||||||
currentMenu = MenuFormat();
|
|
||||||
break;
|
|
||||||
case MENU_INSTALL:
|
case MENU_INSTALL:
|
||||||
currentMenu = MenuInstall();
|
currentMenu = MenuInstall();
|
||||||
break;
|
break;
|
||||||
@ -300,10 +295,8 @@ int MainMenu(int menu)
|
|||||||
currentMenu = MenuHomebrewBrowse();
|
currentMenu = MenuHomebrewBrowse();
|
||||||
break;
|
break;
|
||||||
case MENU_DISCLIST:
|
case MENU_DISCLIST:
|
||||||
currentMenu = MenuDiscList();
|
|
||||||
break;
|
|
||||||
default: // unrecognized menu
|
default: // unrecognized menu
|
||||||
currentMenu = MenuCheck();
|
currentMenu = MenuDiscList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -314,7 +307,6 @@ int MainMenu(int menu)
|
|||||||
CloseXMLDatabase();
|
CloseXMLDatabase();
|
||||||
NewTitles::DestroyInstance();
|
NewTitles::DestroyInstance();
|
||||||
|
|
||||||
if (strcmp(headlessID, "") != 0) //the GUIthread was never started, so it cant be ended and joined properly if headless mode was used. so we resume it and close it.
|
|
||||||
ResumeGui();
|
ResumeGui();
|
||||||
ExitGUIThreads();
|
ExitGUIThreads();
|
||||||
|
|
||||||
@ -356,146 +348,14 @@ int MainMenu(int menu)
|
|||||||
{
|
{
|
||||||
gprintf("\nBootHomebrew");
|
gprintf("\nBootHomebrew");
|
||||||
BootHomebrew(Settings.selected_homebrew);
|
BootHomebrew(Settings.selected_homebrew);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else if (boothomebrew == 2)
|
else if (boothomebrew == 2)
|
||||||
{
|
{
|
||||||
gprintf("\nBootHomebrew from Menu");
|
gprintf("\nBootHomebrew from Menu");
|
||||||
//BootHomebrew();
|
|
||||||
BootHomebrewFromMem();
|
BootHomebrewFromMem();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gprintf("\tSettings.partition: %d\n", Settings.partition);
|
|
||||||
struct discHdr *header = NULL;
|
|
||||||
//if the GUI was "skipped" to boot a game from main(argv[1])
|
|
||||||
if (strcmp(headlessID, "") != 0)
|
|
||||||
{
|
|
||||||
gprintf("\tHeadless mode (%s)\n", headlessID);
|
|
||||||
gameList.LoadUnfiltered();
|
|
||||||
if (!gameList.size())
|
|
||||||
{
|
|
||||||
gprintf(" ERROR : !gameCnt");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
//gprintf("\n\tgameCnt:%d",gameCnt);
|
|
||||||
for (int i = 0; i < gameList.size(); i++)
|
|
||||||
{
|
|
||||||
header = gameList[i];
|
|
||||||
char tmp[8];
|
|
||||||
sprintf(tmp, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4],
|
|
||||||
header->id[5]);
|
|
||||||
if (strcmp(tmp, headlessID) == 0)
|
|
||||||
{
|
|
||||||
gameSelected = i;
|
|
||||||
gprintf(" found (%d)\n", i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//if the game was not found
|
|
||||||
if (i == gameList.GameCount() - 1)
|
|
||||||
{
|
|
||||||
gprintf(" not found (%d IDs checked)\n", i);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret = 0;
|
|
||||||
header = (mountMethod ? dvdheader : gameList[gameSelected]);
|
|
||||||
|
|
||||||
u8 videoChoice = Settings.videomode;
|
|
||||||
u8 languageChoice = Settings.language;
|
|
||||||
u8 ocarinaChoice = Settings.ocarina;
|
|
||||||
u8 viChoice = Settings.videopatch;
|
|
||||||
u8 iosChoice = Settings.cios;
|
|
||||||
u8 fix002 = Settings.error002;
|
|
||||||
u8 countrystrings = Settings.patchcountrystrings;
|
|
||||||
u8 alternatedol = OFF;
|
|
||||||
u32 alternatedoloffset = 0;
|
|
||||||
u8 reloadblock = OFF;
|
|
||||||
u8 returnToLoaderGV = 1;
|
|
||||||
|
|
||||||
GameCFG * game_cfg = GameSettings.GetGameCFG(header->id);
|
|
||||||
|
|
||||||
if (game_cfg)
|
|
||||||
{
|
|
||||||
videoChoice = game_cfg->video;
|
|
||||||
languageChoice = game_cfg->language;
|
|
||||||
ocarinaChoice = game_cfg->ocarina;
|
|
||||||
viChoice = game_cfg->vipatch;
|
|
||||||
fix002 = game_cfg->errorfix002;
|
|
||||||
iosChoice = game_cfg->ios;
|
|
||||||
countrystrings = game_cfg->patchcountrystrings;
|
|
||||||
//if (!altdoldefault)
|
|
||||||
//{
|
|
||||||
alternatedol = game_cfg->loadalternatedol;
|
|
||||||
alternatedoloffset = game_cfg->alternatedolstart;
|
|
||||||
//}
|
|
||||||
reloadblock = game_cfg->iosreloadblock;
|
|
||||||
returnToLoaderGV = game_cfg->returnTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mountMethod)
|
|
||||||
{
|
|
||||||
gprintf("Loading fragment list...");
|
|
||||||
ret = get_frag_list(header->id);
|
|
||||||
gprintf("%d\n", ret);
|
|
||||||
|
|
||||||
gprintf("Setting fragment list...");
|
|
||||||
ret = set_frag_list(header->id);
|
|
||||||
gprintf("%d\n", ret);
|
|
||||||
|
|
||||||
ret = Disc_SetUSB(header->id);
|
|
||||||
if (ret < 0) Sys_BackToLoader();
|
|
||||||
gprintf("\tUSB set to game\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gprintf("\tUSB not set, loading DVD\n");
|
|
||||||
}
|
|
||||||
ret = Disc_Open();
|
|
||||||
|
|
||||||
if (ret < 0) Sys_BackToLoader();
|
|
||||||
|
|
||||||
if (dvdheader) delete dvdheader;
|
|
||||||
|
|
||||||
gprintf("Loading BCA data...");
|
|
||||||
ret = do_bca_code(header->id);
|
|
||||||
gprintf("%d\n", ret);
|
|
||||||
|
|
||||||
if (reloadblock == ON && Sys_IsHermes())
|
|
||||||
{
|
|
||||||
enable_ES_ioctlv_vector();
|
|
||||||
if (load_from_fs == PART_FS_WBFS)
|
|
||||||
{
|
|
||||||
mload_close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 channel = 0;
|
|
||||||
if (returnToLoaderGV)
|
|
||||||
{
|
|
||||||
int idx = NandTitles.FindU32(Settings.returnTo);
|
|
||||||
if (idx >= 0) channel = TITLE_LOWER( NandTitles.At( idx ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
//This is temporary
|
|
||||||
SetCheatFilepath(Settings.Cheatcodespath);
|
|
||||||
SetBCAFilepath(Settings.BcaCodepath);
|
|
||||||
|
|
||||||
gprintf("\tDisc_wiiBoot\n");
|
|
||||||
|
|
||||||
shadow_mload();
|
|
||||||
|
|
||||||
ret = Disc_WiiBoot(Settings.dolpath, videoChoice, languageChoice, ocarinaChoice, viChoice, countrystrings,
|
|
||||||
alternatedol, alternatedoloffset, channel, fix002);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
//should never get here
|
|
||||||
printf("Returning entry point: 0x%0x\n", ret);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return BootGame((const char *) gameList[gameSelected]->id);
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,7 @@ enum
|
|||||||
MENU_NONE,
|
MENU_NONE,
|
||||||
MENU_SETTINGS,
|
MENU_SETTINGS,
|
||||||
MENU_DISCLIST,
|
MENU_DISCLIST,
|
||||||
MENU_FORMAT,
|
|
||||||
MENU_INSTALL,
|
MENU_INSTALL,
|
||||||
MENU_CHECK,
|
|
||||||
MENU_GAME_SETTINGS,
|
MENU_GAME_SETTINGS,
|
||||||
MENU_HOMEBREWBROWSE,
|
MENU_HOMEBREWBROWSE,
|
||||||
BOOTHOMEBREW,
|
BOOTHOMEBREW,
|
||||||
|
155
source/menu/MountGamePartition.cpp
Normal file
155
source/menu/MountGamePartition.cpp
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
#include <dirent.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "FileOperations/fileops.h"
|
||||||
|
#include "menus.h"
|
||||||
|
#include "wpad.h"
|
||||||
|
#include "fatmounter.h"
|
||||||
|
#include "usbloader/wbfs.h"
|
||||||
|
#include "xml/xml.h"
|
||||||
|
|
||||||
|
extern int load_from_fs;
|
||||||
|
extern char game_partition[6];
|
||||||
|
extern PartList partitions;
|
||||||
|
|
||||||
|
static int FindGamesPartition(PartList * partitions)
|
||||||
|
{
|
||||||
|
if (partitions->wbfs_n != 0)
|
||||||
|
{
|
||||||
|
WBFS_Open();
|
||||||
|
|
||||||
|
for (int p = 0; p < partitions->num; p++)
|
||||||
|
{
|
||||||
|
if (partitions->pinfo[p].fs_type == FS_TYPE_WBFS)
|
||||||
|
{
|
||||||
|
Settings.partition = p;
|
||||||
|
load_from_fs = PART_FS_WBFS;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through FAT/NTFS partitions, and find the first partition with games on it (if there is one)
|
||||||
|
for (int i = 0; i < partitions->num; i++)
|
||||||
|
{
|
||||||
|
if (partitions->pinfo[i].fs_type == FS_TYPE_FAT32 || partitions->pinfo[i].fs_type == FS_TYPE_NTFS)
|
||||||
|
{
|
||||||
|
if (!WBFS_OpenPart(partitions->pinfo[i].part_fs, partitions->pinfo[i].index,
|
||||||
|
partitions->pentry[i].sector, partitions->pentry[i].size, (char *) &game_partition))
|
||||||
|
{
|
||||||
|
u32 count;
|
||||||
|
// Get the game count...
|
||||||
|
WBFS_GetCount(&count);
|
||||||
|
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
load_from_fs = partitions->pinfo[i].part_fs;
|
||||||
|
Settings.partition = i;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WBFS_Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int PartitionChoice()
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
int choice = WindowPrompt(tr( "No WBFS or FAT/NTFS partition found" ),
|
||||||
|
tr( "You need to select or format a partition" ), tr( "Select" ), tr( "Format" ), tr( "Return" ));
|
||||||
|
|
||||||
|
if (choice == 0)
|
||||||
|
{
|
||||||
|
Sys_LoadMenu();
|
||||||
|
}
|
||||||
|
else if(choice == 1)
|
||||||
|
{
|
||||||
|
int part_num = SelectPartitionMenu();
|
||||||
|
if(part_num >= 0)
|
||||||
|
{
|
||||||
|
ret = WBFS_OpenPart(partitions.pinfo[part_num].part_fs, partitions.pinfo[part_num].index, partitions.pentry[part_num].sector, partitions.pentry[part_num].size, (char *) &game_partition);
|
||||||
|
|
||||||
|
load_from_fs = partitions.pinfo[part_num].part_fs;
|
||||||
|
Settings.partition = part_num;
|
||||||
|
Settings.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(choice == 2)
|
||||||
|
{
|
||||||
|
while(ret < 0 || ret == -666)
|
||||||
|
{
|
||||||
|
int part_num = SelectPartitionMenu();
|
||||||
|
if(part_num >= 0)
|
||||||
|
ret = FormatingPartition(tr( "Formatting, please wait..." ), &partitions.pentry[part_num]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* MountGamePartition
|
||||||
|
***************************************************************************/
|
||||||
|
int MountGamePartition(bool ShowGUI)
|
||||||
|
{
|
||||||
|
gprintf("MenuCheck()\n");
|
||||||
|
|
||||||
|
s32 wbfsinit = MountWBFS(ShowGUI);
|
||||||
|
if (wbfsinit < 0)
|
||||||
|
{
|
||||||
|
WindowPrompt(tr( "Error !" ), tr( "USB Device not found" ), tr( "OK" ));
|
||||||
|
Sys_LoadMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 ret = -1;
|
||||||
|
memset(game_partition, 0, 6);
|
||||||
|
load_from_fs = -1;
|
||||||
|
|
||||||
|
// Added for slow HDD
|
||||||
|
for (int retries = 10; retries > 0; retries--)
|
||||||
|
{
|
||||||
|
if (Partition_GetList(WBFS_DEVICE_USB, &partitions) != 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Settings.partition != -1 && partitions.num > Settings.partition)
|
||||||
|
{
|
||||||
|
PartInfo pinfo = partitions.pinfo[Settings.partition];
|
||||||
|
if (!WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector,
|
||||||
|
partitions.pentry[Settings.partition].size, (char *) &game_partition))
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
load_from_fs = pinfo.part_fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ret < 0)
|
||||||
|
ret = FindGamesPartition(&partitions);
|
||||||
|
|
||||||
|
if (ret < 0 && ShowGUI)
|
||||||
|
ret = PartitionChoice();
|
||||||
|
|
||||||
|
if(ret < 0)
|
||||||
|
Sys_LoadMenu();
|
||||||
|
|
||||||
|
ret = Disc_Init();
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
if(ShowGUI)
|
||||||
|
WindowPrompt(tr( "Error !" ), tr( "Could not initialize DIP module!" ), tr( "OK" ));
|
||||||
|
Sys_LoadMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
// open database if needed, load titles if needed
|
||||||
|
if (CheckFile(Settings.titlestxt_path))
|
||||||
|
OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, true, Settings.titlesOverride == 1 ? true : false, true);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@ -1,195 +0,0 @@
|
|||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "menus.h"
|
|
||||||
#include "wpad.h"
|
|
||||||
#include "fatmounter.h"
|
|
||||||
#include "usbloader/wbfs.h"
|
|
||||||
#include "xml/xml.h"
|
|
||||||
|
|
||||||
extern int load_from_fs;
|
|
||||||
extern char game_partition[6];
|
|
||||||
extern char headlessID[8];
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* MenuCheck
|
|
||||||
***************************************************************************/
|
|
||||||
int MenuCheck()
|
|
||||||
{
|
|
||||||
gprintf("MenuCheck()\n");
|
|
||||||
int menu = MENU_NONE;
|
|
||||||
int i = 0;
|
|
||||||
int choice;
|
|
||||||
s32 ret2, wbfsinit;
|
|
||||||
OptionList options;
|
|
||||||
options.length = i;
|
|
||||||
|
|
||||||
VIDEO_WaitVSync();
|
|
||||||
|
|
||||||
wbfsinit = WBFS_Init(WBFS_DEVICE_USB);
|
|
||||||
if (wbfsinit < 0)
|
|
||||||
{
|
|
||||||
ret2 = WindowPrompt(tr( "No USB Device found." ), tr( "Do you want to retry for 30 secs?" ), "cIOS249",
|
|
||||||
"cIOS222", tr( "Back to Wii Menu" ));
|
|
||||||
SDCard_deInit();
|
|
||||||
USBDevice_deInit();
|
|
||||||
WPAD_Flush(0);
|
|
||||||
WPAD_Disconnect(0);
|
|
||||||
WPAD_Shutdown();
|
|
||||||
if (ret2 == 1)
|
|
||||||
{
|
|
||||||
Settings.cios = 249;
|
|
||||||
}
|
|
||||||
else if (ret2 == 2)
|
|
||||||
{
|
|
||||||
Settings.cios = 222;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
ret2 = DiscWait(tr( "No USB Device" ), tr( "Waiting for USB Device" ), 0, 0, 1);
|
|
||||||
//reinitialize SD and USB
|
|
||||||
Wpad_Init();
|
|
||||||
WPAD_SetDataFormat(WPAD_CHAN_ALL, WPAD_FMT_BTNS_ACC_IR);
|
|
||||||
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
|
|
||||||
if (ret2 < 0)
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "Error !" ), tr( "USB Device not found" ), tr( "OK" ));
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret2 = -1;
|
|
||||||
memset(game_partition, 0, 6);
|
|
||||||
load_from_fs = -1;
|
|
||||||
|
|
||||||
extern PartList partitions;
|
|
||||||
// Added for slow HDD
|
|
||||||
for (int runs = 0; runs < 10; runs++)
|
|
||||||
{
|
|
||||||
if (Partition_GetList(WBFS_DEVICE_USB, &partitions) != 0)
|
|
||||||
{
|
|
||||||
sleep(1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Settings.partition != -1 && partitions.num > Settings.partition)
|
|
||||||
{
|
|
||||||
PartInfo pinfo = partitions.pinfo[Settings.partition];
|
|
||||||
if (!WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector,
|
|
||||||
partitions.pentry[Settings.partition].size, (char *) &game_partition))
|
|
||||||
{
|
|
||||||
ret2 = 0;
|
|
||||||
load_from_fs = pinfo.part_fs;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (partitions.wbfs_n != 0)
|
|
||||||
{
|
|
||||||
ret2 = WBFS_Open();
|
|
||||||
for (int p = 0; p < partitions.num; p++)
|
|
||||||
{
|
|
||||||
if (partitions.pinfo[p].fs_type == FS_TYPE_WBFS)
|
|
||||||
{
|
|
||||||
Settings.partition = p;
|
|
||||||
load_from_fs = PART_FS_WBFS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Sys_IsHermes() && (partitions.fat_n != 0 || partitions.ntfs_n != 0))
|
|
||||||
{
|
|
||||||
// Loop through FAT/NTFS partitions, and find the first partition with games on it (if there is one)
|
|
||||||
u32 count;
|
|
||||||
|
|
||||||
for (int i = 0; i < partitions.num; i++)
|
|
||||||
{
|
|
||||||
if (partitions.pinfo[i].fs_type == FS_TYPE_FAT32 || partitions.pinfo[i].fs_type == FS_TYPE_NTFS)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!WBFS_OpenPart(partitions.pinfo[i].part_fs, partitions.pinfo[i].index,
|
|
||||||
partitions.pentry[i].sector, partitions.pentry[i].size, (char *) &game_partition))
|
|
||||||
{
|
|
||||||
// Get the game count...
|
|
||||||
WBFS_GetCount(&count);
|
|
||||||
|
|
||||||
if (count > 0)
|
|
||||||
{
|
|
||||||
load_from_fs = partitions.pinfo[i].part_fs;
|
|
||||||
Settings.partition = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WBFS_Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ret2 >= 0 || load_from_fs != PART_FS_WBFS) && isInserted(Settings.BootDevice))
|
|
||||||
{
|
|
||||||
Settings.Save();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret2 < 0 && load_from_fs != PART_FS_WBFS)
|
|
||||||
{
|
|
||||||
choice = WindowPrompt(tr( "No WBFS or FAT/NTFS partition found" ),
|
|
||||||
tr( "You need to select or format a partition" ), tr( "Select" ), tr( "Format" ), tr( "Return" ));
|
|
||||||
if (choice == 0)
|
|
||||||
{
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
load_from_fs = choice == 1 ? PART_FS_FAT : PART_FS_WBFS;
|
|
||||||
menu = MENU_FORMAT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret2 = Disc_Init();
|
|
||||||
if (ret2 < 0)
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "Error !" ), tr( "Could not initialize DIP module!" ), tr( "OK" ));
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shutdown == 1) Sys_Shutdown();
|
|
||||||
if (reset == 1) Sys_Reboot();
|
|
||||||
|
|
||||||
if (wbfsinit < 0)
|
|
||||||
{
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// open database if needed, load titles if needed
|
|
||||||
if (isInserted(Settings.BootDevice)) OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN,
|
|
||||||
true, Settings.titlesOverride == 1 ? true : false, true);
|
|
||||||
|
|
||||||
// titles.txt loaded after database to override database titles with custom titles
|
|
||||||
//snprintf(pathname, sizeof(pathname), "%stitles.txt", Settings.titlestxt_path);
|
|
||||||
//cfg_parsefile(pathname, &title_set);
|
|
||||||
|
|
||||||
//Spieleliste laden
|
|
||||||
//__Menu_GetEntries(0);//no point getting the gamelist here
|
|
||||||
|
|
||||||
if (strcmp(headlessID, "") != 0) menu = MENU_EXIT;
|
|
||||||
|
|
||||||
if (menu == MENU_NONE) menu = MENU_DISCLIST;
|
|
||||||
|
|
||||||
//for HDDs with issues
|
|
||||||
if (wbfsinit < 0)
|
|
||||||
{
|
|
||||||
sleep(1);
|
|
||||||
USBDevice_Init();
|
|
||||||
SDCard_Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
return menu;
|
|
||||||
}
|
|
@ -1446,7 +1446,7 @@ int MenuDiscList()
|
|||||||
{
|
{
|
||||||
sprintf(nipple, "%s %s", nipple, tr( "does not exist!" ));
|
sprintf(nipple, "%s %s", nipple, tr( "does not exist!" ));
|
||||||
WindowPrompt(tr( "Error" ), nipple, tr( "OK" ));
|
WindowPrompt(tr( "Error" ), nipple, tr( "OK" ));
|
||||||
menu = MENU_CHECK;
|
menu = MENU_DISCLIST;
|
||||||
wiilight(0);
|
wiilight(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1508,7 +1508,7 @@ int MenuDiscList()
|
|||||||
gprintf("\n\tTried to load alt dol that isn't there");
|
gprintf("\n\tTried to load alt dol that isn't there");
|
||||||
sprintf(nipple, "%s %s", nipple, tr( "does not exist! You Messed something up, Idiot." ));
|
sprintf(nipple, "%s %s", nipple, tr( "does not exist! You Messed something up, Idiot." ));
|
||||||
WindowPrompt(tr( "Error" ), nipple, tr( "OK" ));
|
WindowPrompt(tr( "Error" ), nipple, tr( "OK" ));
|
||||||
menu = MENU_CHECK;
|
menu = MENU_DISCLIST;
|
||||||
wiilight(0);
|
wiilight(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -8,28 +8,19 @@
|
|||||||
#include "libwiigui/gui_customoptionbrowser.h"
|
#include "libwiigui/gui_customoptionbrowser.h"
|
||||||
#include "themes/CTheme.h"
|
#include "themes/CTheme.h"
|
||||||
|
|
||||||
extern int load_from_fs;
|
extern PartList partitions;
|
||||||
extern char game_partition[6];
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* MenuFormat
|
* SelectPartitionMenu
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
int MenuFormat()
|
int SelectPartitionMenu()
|
||||||
{
|
{
|
||||||
|
bool ExitSelect = false;
|
||||||
USBDevice_deInit();
|
|
||||||
sleep(1);
|
|
||||||
|
|
||||||
USBStorage2_Init();
|
|
||||||
|
|
||||||
int menu = MENU_NONE;
|
|
||||||
|
|
||||||
customOptionList options(MAX_PARTITIONS_EX);
|
customOptionList options(MAX_PARTITIONS_EX);
|
||||||
extern PartList partitions;
|
|
||||||
|
|
||||||
u32 cnt, counter = 0;
|
u32 cnt, counter = 0;
|
||||||
int choice, ret;
|
int choice = -1;
|
||||||
char text[ISFS_MAXPATH];
|
int ret = -1;
|
||||||
|
|
||||||
//create the partitionlist
|
//create the partitionlist
|
||||||
for (cnt = 0; cnt < (u32) partitions.num; cnt++)
|
for (cnt = 0; cnt < (u32) partitions.num; cnt++)
|
||||||
@ -98,106 +89,41 @@ int MenuFormat()
|
|||||||
|
|
||||||
ResumeGui();
|
ResumeGui();
|
||||||
|
|
||||||
while (menu == MENU_NONE)
|
while (!ExitSelect)
|
||||||
{
|
{
|
||||||
|
|
||||||
VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
|
|
||||||
|
if (shutdown)
|
||||||
|
Sys_Shutdown();
|
||||||
|
if (reset)
|
||||||
|
Sys_Reboot();
|
||||||
|
|
||||||
ret = optionBrowser.GetClickedOption();
|
ret = optionBrowser.GetClickedOption();
|
||||||
|
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
{
|
|
||||||
if (Settings.godmode == 1)
|
|
||||||
{
|
{
|
||||||
partitionEntry *entry = &partitions.pentry[ret];
|
partitionEntry *entry = &partitions.pentry[ret];
|
||||||
if (entry->size)
|
if (entry->size)
|
||||||
{
|
{
|
||||||
if (load_from_fs == PART_FS_FAT)
|
choice = ret;
|
||||||
{
|
ExitSelect = true;
|
||||||
WBFS_OpenPart(partitions.pinfo[ret].part_fs, partitions.pinfo[ret].index, entry->sector,
|
|
||||||
entry->size, (char *) &game_partition);
|
|
||||||
load_from_fs = partitions.pinfo[ret].part_fs;
|
|
||||||
menu = MENU_DISCLIST;
|
|
||||||
|
|
||||||
Settings.partition = ret;
|
|
||||||
Settings.Save();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sprintf(text, "%s %d : %.2fGB", tr( "Partition" ), ret + 1, entry->size
|
|
||||||
* (partitions.sector_size / GB_SIZE));
|
|
||||||
choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" ));
|
|
||||||
if (choice == 1)
|
|
||||||
{
|
|
||||||
ret = FormatingPartition(tr( "Formatting, please wait..." ), entry);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "Error !" ), tr( "Failed formating" ), tr( "Return" ));
|
|
||||||
menu = MENU_SETTINGS;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sleep(1);
|
|
||||||
ret = WBFS_Open();
|
|
||||||
sprintf(text, "%s %s", text, tr( "formatted!" ));
|
|
||||||
WindowPrompt(tr( "Success:" ), text, tr( "OK" ));
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "ERROR" ), tr( "Failed to open partition" ), tr( "OK" ));
|
|
||||||
Sys_LoadMenu();
|
|
||||||
}
|
|
||||||
menu = MENU_DISCLIST;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Settings.godmode == 0)
|
|
||||||
{
|
|
||||||
mainWindow->Remove(&optionBrowser);
|
|
||||||
char entered[20] = "";
|
|
||||||
int result = OnScreenKeyboard(entered, 20, 0);
|
|
||||||
mainWindow->Append(&optionBrowser);
|
|
||||||
if (result == 1)
|
|
||||||
{
|
|
||||||
if (!strcmp(entered, Settings.unlockCode)) //if password correct
|
|
||||||
{
|
|
||||||
if (Settings.godmode == 0)
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "Correct Password" ),
|
|
||||||
tr( "All the features of USB Loader GX are unlocked." ), tr( "OK" ));
|
|
||||||
Settings.godmode = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WindowPrompt(tr( "Wrong Password" ), tr( "USB Loader GX is protected" ), tr( "OK" ));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shutdown == 1) Sys_Shutdown();
|
|
||||||
if (reset == 1) Sys_Reboot();
|
|
||||||
|
|
||||||
if (poweroffBtn.GetState() == STATE_CLICKED)
|
if (poweroffBtn.GetState() == STATE_CLICKED)
|
||||||
{
|
{
|
||||||
choice = WindowPrompt(tr( "Shutdown System" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
|
choice = WindowPrompt(tr( "Shutdown System" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
|
||||||
if (choice == 1)
|
if (choice == 1)
|
||||||
{
|
|
||||||
Sys_Shutdown();
|
Sys_Shutdown();
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (exitBtn.GetState() == STATE_CLICKED)
|
else if (exitBtn.GetState() == STATE_CLICKED)
|
||||||
{
|
{
|
||||||
choice = WindowPrompt(tr( "Return to Wii Menu" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
|
choice = WindowPrompt(tr( "Return to Wii Menu" ), tr( "Are you sure?" ), tr( "Yes" ), tr( "No" ));
|
||||||
if (choice == 1)
|
if (choice == 1)
|
||||||
{
|
|
||||||
Sys_LoadMenu();
|
Sys_LoadMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
HaltGui();
|
HaltGui();
|
||||||
|
|
||||||
@ -205,6 +131,6 @@ int MenuFormat()
|
|||||||
mainWindow->Remove(&w);
|
mainWindow->Remove(&w);
|
||||||
ResumeGui();
|
ResumeGui();
|
||||||
|
|
||||||
return menu;
|
return choice;
|
||||||
}
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ extern u8 reset;
|
|||||||
|
|
||||||
int MenuInstall();
|
int MenuInstall();
|
||||||
int MenuDiscList();
|
int MenuDiscList();
|
||||||
int MenuFormat();
|
int SelectPartitionMenu();
|
||||||
int MenuCheck();
|
int MountGamePartition(bool ShowGUI = true);
|
||||||
|
|
||||||
#endif // _MENUS_H
|
#endif // _MENUS_H
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "usbloader/partition_usbloader.h"
|
#include "usbloader/partition_usbloader.h"
|
||||||
#include "usbloader/usbstorage2.h"
|
#include "usbloader/usbstorage2.h"
|
||||||
#include "usbloader/GameList.h"
|
#include "usbloader/GameList.h"
|
||||||
|
#include "usbloader/utils.h"
|
||||||
#include "language/gettext.h"
|
#include "language/gettext.h"
|
||||||
#include "libwiigui/gui.h"
|
#include "libwiigui/gui.h"
|
||||||
#include "libwiigui/gui_diskcover.h"
|
#include "libwiigui/gui_diskcover.h"
|
||||||
@ -1902,13 +1903,13 @@ int DiscWait(const char *title, const char *msg, const char *btn1Label, const ch
|
|||||||
{
|
{
|
||||||
VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
timerTxt.SetTextf("%u %s", i, tr( "seconds left" ));
|
timerTxt.SetTextf("%u %s", i, tr( "seconds left" ));
|
||||||
sleep(1);
|
|
||||||
USBDevice_deInit();
|
USBDevice_deInit();
|
||||||
USBDevice_Init();
|
USBDevice_Init();
|
||||||
ret = WBFS_Init(WBFS_DEVICE_USB);
|
ret = WBFS_Init(WBFS_DEVICE_USB);
|
||||||
if (ret >= 0) break;
|
if (ret >= 0) break;
|
||||||
|
|
||||||
i--;
|
i--;
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1941,6 +1942,14 @@ int DiscWait(const char *title, const char *msg, const char *btn1Label, const ch
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
int FormatingPartition(const char *title, partitionEntry *entry)
|
int FormatingPartition(const char *title, partitionEntry *entry)
|
||||||
{
|
{
|
||||||
|
extern PartList partitions;
|
||||||
|
|
||||||
|
char text[255];
|
||||||
|
sprintf(text, "%s: %.2fGB", tr( "Partition" ), entry->size * (partitions.sector_size / GB_SIZE));
|
||||||
|
int choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" ));
|
||||||
|
if (choice == 0)
|
||||||
|
return -666;
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
GuiWindow promptWindow(472, 320);
|
GuiWindow promptWindow(472, 320);
|
||||||
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||||
@ -1975,6 +1984,23 @@ int FormatingPartition(const char *title, partitionEntry *entry)
|
|||||||
VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
ret = WBFS_Format(entry->sector, entry->size);
|
ret = WBFS_Format(entry->sector, entry->size);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
WindowPrompt(tr( "Error !" ), tr( "Failed formating" ), tr( "Return" ));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sleep(1);
|
||||||
|
ret = WBFS_Open();
|
||||||
|
sprintf(text, "%s %s", text, tr( "formatted!" ));
|
||||||
|
WindowPrompt(tr( "Success:" ), text, tr( "OK" ));
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
WindowPrompt(tr( "ERROR" ), tr( "Failed to open partition" ), tr( "OK" ));
|
||||||
|
Sys_LoadMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50);
|
||||||
while (promptWindow.GetEffect() > 0)
|
while (promptWindow.GetEffect() > 0)
|
||||||
usleep(50);
|
usleep(50);
|
||||||
|
@ -56,6 +56,17 @@ struct discHdr * GameList::at(int i)
|
|||||||
return FilteredList[i];
|
return FilteredList[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct discHdr * GameList::GetDiscHeader(const char * gameID)
|
||||||
|
{
|
||||||
|
for (u32 i = 0; i < FilteredList.size(); ++i)
|
||||||
|
{
|
||||||
|
if(strncasecmp(gameID, (const char *) FilteredList[i]->id, 6) == 0)
|
||||||
|
return FilteredList[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int GameList::ReadGameList()
|
int GameList::ReadGameList()
|
||||||
{
|
{
|
||||||
FullGameList.clear();
|
FullGameList.clear();
|
||||||
|
@ -10,34 +10,15 @@ class GameList
|
|||||||
public:
|
public:
|
||||||
GameList();
|
GameList();
|
||||||
int ReadGameList();
|
int ReadGameList();
|
||||||
int size()
|
int size() { return FilteredList.size(); };
|
||||||
{
|
int GameCount() { return FullGameList.size(); };
|
||||||
return FilteredList.size();
|
|
||||||
}
|
|
||||||
;
|
|
||||||
int GameCount()
|
|
||||||
{
|
|
||||||
return FullGameList.size();
|
|
||||||
}
|
|
||||||
;
|
|
||||||
int FilterList(const wchar_t * gameFilter = NULL);
|
int FilterList(const wchar_t * gameFilter = NULL);
|
||||||
int LoadUnfiltered();
|
int LoadUnfiltered();
|
||||||
struct discHdr * at(int i);
|
struct discHdr * at(int i);
|
||||||
struct discHdr * operator[](int i)
|
struct discHdr * operator[](int i) { return at(i); };
|
||||||
{
|
struct discHdr * GetDiscHeader(const char * gameID);
|
||||||
return at(i);
|
const wchar_t * GetCurrentFilter() { return GameFilter.c_str(); };
|
||||||
}
|
const wchar_t * GetAvailableSearchChars() { return AvailableSearchChars.c_str(); };
|
||||||
;
|
|
||||||
const wchar_t * GetCurrentFilter()
|
|
||||||
{
|
|
||||||
return GameFilter.c_str();
|
|
||||||
}
|
|
||||||
;
|
|
||||||
const wchar_t * GetAvailableSearchChars()
|
|
||||||
{
|
|
||||||
return AvailableSearchChars.c_str();
|
|
||||||
}
|
|
||||||
;
|
|
||||||
void SortList();
|
void SortList();
|
||||||
void clear();
|
void clear();
|
||||||
protected:
|
protected:
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "usbloader/partition_usbloader.h"
|
#include "usbloader/partition_usbloader.h"
|
||||||
#include "usbloader/GameList.h"
|
#include "usbloader/GameList.h"
|
||||||
|
#include "menu/menus.h"
|
||||||
#include "gecko.h"
|
#include "gecko.h"
|
||||||
|
|
||||||
Wbfs *current = NULL;
|
Wbfs *current = NULL;
|
||||||
@ -301,8 +302,11 @@ bool WBFS_ShowFreeSpace(void)
|
|||||||
return current->ShowFreeSpace();
|
return current->ShowFreeSpace();
|
||||||
}
|
}
|
||||||
|
|
||||||
int MountWBFS()
|
int MountWBFS(bool ShowGUI)
|
||||||
{
|
{
|
||||||
|
if(ShowGUI)
|
||||||
|
return DiscWait(tr( "Waiting for USB Device" ), 0, 0, 0, 1);
|
||||||
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
time_t currTime = time(0);
|
time_t currTime = time(0);
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ extern "C"
|
|||||||
bool WBFS_Close();
|
bool WBFS_Close();
|
||||||
bool WBFS_Mounted();
|
bool WBFS_Mounted();
|
||||||
bool WBFS_Selected();
|
bool WBFS_Selected();
|
||||||
int MountWBFS();
|
int MountWBFS(bool ShowGUI);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user