*Added support for starting .wbfs game files from fat32/ntfs partitions on a sector size > 512 (tested with 4096)

*modified libcustomfat and ntfs fragment fetch function to support >512 bytes per sector
*Added new ehcmodule (thanks rodries)
*Added real support of using both ports simultaniously without shutting down the other (thanks rodries for the ehcmodule works on this). There is no longer the limitation that the settings have to be on SD card for this. (ONLY HERMES CIOS)
*Moved a few settings to Feature Settings and added a new Hard Drive Settings
*Changed Wiinnertag path to only point to the path and not to the file. You must correct the path manually in custom path settings or reset you configs for this change or Winnertag won't work!!
*Removed a few compile warnings for devkitPPC R23
This commit is contained in:
dimok321 2011-06-22 17:57:37 +00:00
parent 868aaee300
commit a3495651f0
78 changed files with 2391 additions and 1862 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>2.1 r1092</version>
<release_date>201106202346</release_date>
<version>2.1 r1093</version>
<release_date>201106221731</release_date>
<no_ios_reload/>
<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.

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: David Jelinek (djelinek@hotmail.com) e->e,r->r,u->u, c->c \n"
"Language-Team: r1056 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Automatický start síte"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "Cesta pro BCA kódy"
@ -231,6 +228,9 @@ msgstr "Zablokovat GUI nastavení"
msgid "Block HBC Menu"
msgstr "Zablokovat HBC nabídku"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Zablokovat opetovné zavedení IOS"
@ -390,6 +390,9 @@ msgstr "Nelze otevrít wiitdb.xml."
msgid "Could not save."
msgstr "Nelze uložit."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Stažení obalu"
@ -611,6 +614,9 @@ msgstr "Opustit kam?"
msgid "Extracting files..."
msgstr "Rozbaluji soubory..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Neúspešné formátování"
@ -768,6 +774,9 @@ msgstr "Hlavní nastavení"
msgid "HOME Menu"
msgstr "Hlavní menu"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Cesta pro Homebrew aplikace"
@ -812,18 +821,18 @@ msgstr "Vložte Wii disk"
msgid "Install"
msgstr "Instalace"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Chyba pri instalaci"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Nainstalovat hru"
msgid "Install directories"
msgstr "Instalacní adresáre"
msgid "Install partitions"
msgstr "Instalacní oddíly"
msgid "Installing content... Ok!"
msgstr "Instaluji obsah... Ok!"
@ -1598,6 +1607,12 @@ msgstr "z "
msgid "seconds left"
msgstr "sekund zbývá"
#~ msgid "Install directories"
#~ msgstr "Instalacní adresáre"
#~ msgid "Install partitions"
#~ msgstr "Instalacní oddíly"
#~ msgid " Wad Saved as:"
#~ msgstr " WAD uložen jako:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Fox888[dk]\n"
"Language-Team: [dk]\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "AutoInit netværk"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Automatisk skift af port er gjort on the fly. For denne mulighed skal du skifte alle brugerdefinerede stier til SD kortet først, for ellers kan det skade dit fil system."
msgid "BCA Codes Path"
msgstr "Sti til BCA koder"
@ -231,6 +228,9 @@ msgstr "Bloker Gui indstillinger"
msgid "Block HBC Menu"
msgstr "Bloker HBC menu"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blokér IOS-reload"
@ -390,6 +390,9 @@ msgstr "Kunne ikke åbne wiitdb.xml"
msgid "Could not save."
msgstr "Kunne ikke gemme."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Cover-download"
@ -611,6 +614,9 @@ msgstr "Hvorhen?"
msgid "Extracting files..."
msgstr "Pakker filer ud..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formateringen mislykkedes"
@ -768,6 +774,9 @@ msgstr "Almindelig Indstillinger"
msgid "HOME Menu"
msgstr ""
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Sti til homebrew-programmer"
@ -812,18 +821,18 @@ msgstr "Indsæt en Wii-DVD!"
msgid "Install"
msgstr "Installér"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Installationsfejl!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Installér nyt spil"
msgid "Install directories"
msgstr "Installer mappe"
msgid "Install partitions"
msgstr "Installationspartitioner"
msgid "Installing content... Ok!"
msgstr "Installerer indhold... Ok!"
@ -1598,6 +1607,15 @@ msgstr "af"
msgid "seconds left"
msgstr "sekunder tilbage"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Automatisk skift af port er gjort on the fly. For denne mulighed skal du skifte alle brugerdefinerede stier til SD kortet først, for ellers kan det skade dit fil system."
#~ msgid "Install directories"
#~ msgstr "Installer mappe"
#~ msgid "Install partitions"
#~ msgstr "Installationspartitioner"
#~ msgid " Wad Saved as:"
#~ msgstr " WAD gemt som:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2011-06-20 07:25+0100\n"
"Last-Translator: glowy\n"
"Language-Team: tj_cool, glowy\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Netwerk Auto init."
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Automatisch poort wisselen word zonder onderbreking gedaan. Je moet eerst alle aangepaste paden veranderen naar SD-kaart voor deze optie anders kan het je bestandssysteem beschadigen."
msgid "BCA Codes Path"
msgstr "Locatie BCA codes"
@ -231,6 +228,9 @@ msgstr "Blokkeer GUI Instellingen"
msgid "Block HBC Menu"
msgstr "Blokkeer HBC Menu"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Stop IOS herladen"
@ -390,6 +390,9 @@ msgstr "Kan wiitdb.xml niet openen."
msgid "Could not save."
msgstr "Kan niet opslaan."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Download hoesjes"
@ -611,6 +614,9 @@ msgstr "Stoppen naar?"
msgid "Extracting files..."
msgstr "Bestanden uitpakken..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formatteren mislukt"
@ -768,6 +774,9 @@ msgstr "Globale instellingen"
msgid "HOME Menu"
msgstr ""
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Locatie homebrew apps"
@ -812,18 +821,18 @@ msgstr "Voer een Wii disk in!"
msgid "Install"
msgstr "Installeer"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Installatiefout!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Spel installeren"
msgid "Install directories"
msgstr "Installeer mappen"
msgid "Install partitions"
msgstr "Installatie partitie"
msgid "Installing content... Ok!"
msgstr "Installeren inhoud... Ok!"
@ -1597,3 +1606,12 @@ msgstr "van"
msgid "seconds left"
msgstr "seconden over"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Automatisch poort wisselen word zonder onderbreking gedaan. Je moet eerst alle aangepaste paden veranderen naar SD-kaart voor deze optie anders kan het je bestandssysteem beschadigen."
#~ msgid "Install directories"
#~ msgstr "Installeer mappen"
#~ msgid "Install partitions"
#~ msgstr "Installatie partitie"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr ""
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr ""
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr ""
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr ""
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr ""
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr ""
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr ""
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr ""
@ -812,18 +821,18 @@ msgstr ""
msgid "Install"
msgstr ""
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr ""
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr ""
msgid "Install directories"
msgstr ""
msgid "Install partitions"
msgstr ""
msgid "Installing content... Ok!"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: c64rmx\n"
"Language-Team: \n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Autom. verkon käynnistys"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blokkaa IOS:in uudelleenlataus"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr ""
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Kansien lataus"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr ""
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formatointi ei onnistunut"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr ""
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Apps polku"
@ -812,18 +821,18 @@ msgstr "Aseta Wii-levy!"
msgid "Install"
msgstr "Asenna"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Asennusvirhe!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Asenna peli"
msgid "Install directories"
msgstr ""
msgid "Install partitions"
msgstr ""
msgid "Installing content... Ok!"
msgstr "Asennetaan sisältöä... Ok!"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Kin8\n"
"Language-Team: Badablek, Amour, ikya, Cyan & Kin8\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "AutoInit réseau"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Vous devez placer tous les dossiers personnalisés sur la carte SD avant d'utiliser cette option, sinon vous risquez d'endommager les données de vos disques USB."
msgid "BCA Codes Path"
msgstr "Dossier codes BCA"
@ -231,6 +228,9 @@ msgstr "Bloquer Config. GUI"
msgid "Block HBC Menu"
msgstr "Bloquer Menu HBC"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Bloquer IOS reload"
@ -390,6 +390,9 @@ msgstr "Impossible d'ouvrir wiitdb.xml."
msgid "Could not save."
msgstr "Sauvegarde impossible."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Téléchargement Jaquettes"
@ -611,6 +614,9 @@ msgstr "Quitter vers où ?"
msgid "Extracting files..."
msgstr "Extraction des fichiers..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Échec du formatage"
@ -768,6 +774,9 @@ msgstr "Paramètres"
msgid "HOME Menu"
msgstr "Menu HOME"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Dossier Apps Homebrew"
@ -812,18 +821,18 @@ msgstr "Insérez un disque Wii !"
msgid "Install"
msgstr "Installer"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Erreur à l'installation !"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Installer un jeu"
msgid "Install directories"
msgstr "Dossiers d'installation"
msgid "Install partitions"
msgstr "Installation"
msgid "Installing content... Ok!"
msgstr "Installation contenu... OK!"
@ -1597,3 +1606,12 @@ msgstr "sur"
msgid "seconds left"
msgstr "secondes restantes"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Vous devez placer tous les dossiers personnalisés sur la carte SD avant d'utiliser cette option, sinon vous risquez d'endommager les données de vos disques USB."
#~ msgid "Install directories"
#~ msgstr "Dossiers d'installation"
#~ msgid "Install partitions"
#~ msgstr "Installation"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 17:00+0100\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2010-07-03 17:35-0800\n"
"Last-Translator: TheRealVisitor\n"
"Language-Team: Bertilax, Snoozer, wishmasterf, ZEN.13, TheRealVisitor\n"
@ -183,9 +183,6 @@ msgstr "Auto"
msgid "AutoInit Network"
msgstr "Autoinit. Netzwerk"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Automatische Portumschaltung wird jetzt direkt zur Programmlaufzeit durchgeführt. Für diese Option müssen zuerst alle eigenen Pfade auf die SD Karte verweisen, da ansonsten das Dateisystem beschädigt werden könnte."
msgid "BCA Codes Path"
msgstr "BCA Codes"
@ -231,6 +228,9 @@ msgstr "Blocke GUI-Optionen"
msgid "Block HBC Menu"
msgstr "Blocke HBC Menü"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blocke IOS-Neuladen"
@ -390,6 +390,9 @@ msgstr "Konnte wiitdb.xml nicht öffnen."
msgid "Could not save."
msgstr "Es konnte nicht gespeichert werden."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Welche Cover herunterladen?"
@ -611,6 +614,9 @@ msgstr "Beenden zum..."
msgid "Extracting files..."
msgstr "Entpacke Dateien..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formatieren fehlgeschlagen"
@ -768,6 +774,9 @@ msgstr "Globale Einstellungen"
msgid "HOME Menu"
msgstr "HOME Menü"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Apps"
@ -812,18 +821,18 @@ msgstr "Eine Wii Disk einlegen!"
msgid "Install"
msgstr "Installieren"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Installationsfehler!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Spiel installieren"
msgid "Install directories"
msgstr "Installationsart"
msgid "Install partitions"
msgstr "Partitionen installier."
msgid "Installing content... Ok!"
msgstr "Installiere Inhalt... OK!"
@ -1597,3 +1606,12 @@ msgstr "von"
msgid "seconds left"
msgstr "Sekunden verbleiben"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Automatische Portumschaltung wird jetzt direkt zur Programmlaufzeit durchgeführt. Für diese Option müssen zuerst alle eigenen Pfade auf die SD Karte verweisen, da ansonsten das Dateisystem beschädigt werden könnte."
#~ msgid "Install directories"
#~ msgstr "Installationsart"
#~ msgid "Install partitions"
#~ msgstr "Partitionen installier."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
"Last-Translator: Springdale\n"
"Language-Team: Tusk, Springdale\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Hálózat AutoInit"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA kód útvonal"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "IOS újratöltés blokkolása"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "A mentés nem sikerült."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Boritó Letöltés"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Fájlok kicsomagolása..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formázás sikertelen"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "HOME Menü"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Útvonal"
@ -812,17 +821,17 @@ msgstr "Helyezz be Wii lemezt!"
msgid "Install"
msgstr "Telepítés"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Telepítési Hiba!"
msgid "Install a game"
msgstr "Játék telepítése"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Partíciók telepítése"
msgid "Install a game"
msgstr "Játék telepítése"
msgid "Installing content... Ok!"
msgstr "Tartalom telepítése... Ok!"
@ -1598,6 +1607,9 @@ msgstr "./"
msgid "seconds left"
msgstr "hátralévõ másodperc"
#~ msgid "Install partitions"
#~ msgstr "Partíciók telepítése"
#~ msgid " Wad Saved as:"
#~ msgstr "Wad elmentve mint:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2011-03-10 21:00+0200\n"
"Last-Translator: Cambo \n"
"Language-Team: Cambo\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Inizializz. Rete Automatica"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Il cambio automatico di porta è istantaneo. Per utilizzare questa opzione si devono preliminarmente impostare tutti i percorsi verso la scheda SD, altrimenti si rischia di danneggiare il filesystem del disco."
msgid "BCA Codes Path"
msgstr "Cart. Codici BCA"
@ -231,6 +228,9 @@ msgstr "Blocca Interf. Grafica"
msgid "Block HBC Menu"
msgstr "Blocca Menu HBC"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blocca Ricarica cIOS"
@ -390,6 +390,9 @@ msgstr "Impossibile aprire il file wiitdb.xml."
msgid "Could not save."
msgstr "Impossibile salvare."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Scaricamento Copertine"
@ -611,6 +614,9 @@ msgstr "Uscita verso?"
msgid "Extracting files..."
msgstr "Sto scompattando i file..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Errore Formattazione"
@ -768,6 +774,9 @@ msgstr "Impostazioni Generali"
msgid "HOME Menu"
msgstr "Menu HOME"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Cart. Applic. Homebrew"
@ -812,18 +821,18 @@ msgstr "Inserisci un Disco nella Wii!"
msgid "Install"
msgstr "Installa"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Errore Installazione!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Installa un gioco"
msgid "Install directories"
msgstr "Installa Cartelle"
msgid "Install partitions"
msgstr "Installa Partizioni"
msgid "Installing content... Ok!"
msgstr "Sto installando il contenuto... Ok!"
@ -1598,6 +1607,15 @@ msgstr "di"
msgid "seconds left"
msgstr "secondi mancanti"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Il cambio automatico di porta è istantaneo. Per utilizzare questa opzione si devono preliminarmente impostare tutti i percorsi verso la scheda SD, altrimenti si rischia di danneggiare il filesystem del disco."
#~ msgid "Install directories"
#~ msgstr "Installa Cartelle"
#~ msgid "Install partitions"
#~ msgstr "Installa Partizioni"
#~ msgid " Wad Saved as:"
#~ msgstr " Wad salvato con il nome:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: hosigumayuugi\n"
"Language-Team: hosigumayuugi, papa, ichiroling\n"
@ -183,9 +183,6 @@ msgstr "自動"
msgid "AutoInit Network"
msgstr "自動ネット接続"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "ポートの自動切換を使用する場合ファイルシステムの破損を避けるため、独自のパス設定は全てSDカードにしてください"
msgid "BCA Codes Path"
msgstr "BCAコード"
@ -231,6 +228,9 @@ msgstr "基本設定を制限"
msgid "Block HBC Menu"
msgstr "HBCメニューを制限"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "IOS再読み込み防止"
@ -390,6 +390,9 @@ msgstr "wiitdb.xmlを開けませんでした"
msgid "Could not save."
msgstr "保存できませんでした"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "何をダウンロードしますか"
@ -611,6 +614,9 @@ msgstr "どこに移動しますか?"
msgid "Extracting files..."
msgstr "解凍中です…"
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "初期化に失敗しました"
@ -768,6 +774,9 @@ msgstr "基本設定"
msgid "HOME Menu"
msgstr "HOMEボタンメニュー"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrewアプリ"
@ -812,18 +821,18 @@ msgstr "Wiiディスクを入れて下さい!"
msgid "Install"
msgstr "インストール"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "インストールエラー!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "ゲームをインストール"
msgid "Install directories"
msgstr "フォルダの構成"
msgid "Install partitions"
msgstr "保存する領域"
msgid "Installing content... Ok!"
msgstr "コンテンツをインストール...成功!"
@ -1597,3 +1606,12 @@ msgstr "中"
msgid "seconds left"
msgstr "秒で完了"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "ポートの自動切換を使用する場合ファイルシステムの破損を避けるため、独自のパス設定は全てSDカードにしてください"
#~ msgid "Install directories"
#~ msgstr "フォルダの構成"
#~ msgid "Install partitions"
#~ msgstr "保存する領域"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nextos@korea.com\n"
"Language-Team: \n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "자동네트웍설정"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "IOS 재로딩 막음"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr ""
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "표지 다운로드"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr ""
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "포맷 실패"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "HOME 메뉴"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "홈브류 경로"
@ -812,18 +821,18 @@ msgstr "Wii 디스크를 넣으세요!"
msgid "Install"
msgstr "설치"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "설치 에러!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "게임을 설치할까요"
msgid "Install directories"
msgstr ""
msgid "Install partitions"
msgstr ""
msgid "Installing content... Ok!"
msgstr "컨텐츠 인스톨중...성공!"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: raschi\n"
"Language-Team: raschi\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Autostart nettverk"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA kode sti"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blokkér IOS Reload"
@ -390,6 +390,9 @@ msgstr "Kan ikke åpne wiitdb.xml."
msgid "Could not save."
msgstr "Kan ikke lagre."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Cover nedlasting"
@ -611,6 +614,9 @@ msgstr "Avslutt til?"
msgid "Extracting files..."
msgstr "Pakker ut filer..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Feil ved formatering"
@ -768,6 +774,9 @@ msgstr "Globale innstillinger"
msgid "HOME Menu"
msgstr "HOME Meny"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Apps sti"
@ -812,18 +821,18 @@ msgstr "Sett inn en Wii plate!"
msgid "Install"
msgstr "Installér"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Installasjonsfeil!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Installér et spill"
msgid "Install directories"
msgstr "Installasjonsmapper"
msgid "Install partitions"
msgstr "Installasjonspartisjoner"
msgid "Installing content... Ok!"
msgstr "Installerer innhold... OK!"
@ -1598,6 +1607,12 @@ msgstr "av"
msgid "seconds left"
msgstr "sekunder gjenstår"
#~ msgid "Install directories"
#~ msgstr "Installasjonsmapper"
#~ msgid "Install partitions"
#~ msgstr "Installasjonspartisjoner"
#~ msgid " Wad Saved as:"
#~ msgstr " WAD lagret som:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
"Language-Team: \n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Autoinicjalizacja sieci"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "Sciezka kodow BCA"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blokoj przeladowanie IOS"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "Nie mozna zapisac"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Pobierz okladki"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Rozpakowywanie plikow..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Nie udalo sie sformatowac"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "Menu"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Sciezka plikacji homebrew"
@ -812,17 +821,17 @@ msgstr "Wloz plyte Wii!"
msgid "Install"
msgstr "Zainstaluj"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Blad instalacji"
msgid "Install a game"
msgstr "Zainstaluj gre"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Zainstaluj partycje"
msgid "Install a game"
msgstr "Zainstaluj gre"
msgid "Installing content... Ok!"
msgstr "Instalowanie zawartosci...Ok!"
@ -1598,6 +1607,9 @@ msgstr "z"
msgid "seconds left"
msgstr "sekund pozostalo"
#~ msgid "Install partitions"
#~ msgstr "Zainstaluj partycje"
#~ msgid " Wad Saved as:"
#~ msgstr " Wad zapisano jako:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
"Last-Translator: aniemotion\n"
"Language-Team: boto12, aniemotion\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Auto-iniciar Rede"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "Caminho do BCA Codes"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Bloquear reload do IOS"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "Não foi possível gravar."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Download de Capas"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Extraindo arquivos..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Falha ao formatar"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "Menu Inicial"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Pasta Apps Homebrew"
@ -812,17 +821,17 @@ msgstr "Insira um Disco do Wii!"
msgid "Install"
msgstr "Instalar"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Erro de Instalação!"
msgid "Install a game"
msgstr "Instalar um jogo"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Instalare partições"
msgid "Install a game"
msgstr "Instalar um jogo"
msgid "Installing content... Ok!"
msgstr "Instalando conteúdo... Ok!"
@ -1598,6 +1607,9 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Install partitions"
#~ msgstr "Instalare partições"
#~ msgid " Wad Saved as:"
#~ msgstr " Wad salvo como:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2011-06-14 00:00-0000\n"
"Last-Translator: pplucky <pplucky@gmail.com>\n"
"Language-Team: Sky8000, pplucky\n"
@ -183,9 +183,6 @@ msgstr "Auto"
msgid "AutoInit Network"
msgstr "Auto-iniciar Rede"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "Mudança automática de porta é feita na hora. Para esta opção, tem de alterar antes todos os caminhos personalizados para o cartão SD ou pode danificar o sistema de ficheiros."
msgid "BCA Codes Path"
msgstr "Cam. Códigos BCA"
@ -231,6 +228,9 @@ msgstr "Bloquear Config. GUI"
msgid "Block HBC Menu"
msgstr "Bloquear Menu HBC"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Bloquear Reload do IOS"
@ -390,6 +390,9 @@ msgstr "Não foi possível abrir o wiitdb.xml"
msgid "Could not save."
msgstr "Não foi possível gravar."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Download de Capas"
@ -611,6 +614,9 @@ msgstr "Sair para onde?"
msgid "Extracting files..."
msgstr "Extraindo ficheiros..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Falha ao formatar"
@ -768,6 +774,9 @@ msgstr "Configurações Globais"
msgid "HOME Menu"
msgstr "Menú Inicial"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Cam. Apps Homebrew"
@ -812,18 +821,18 @@ msgstr "Insira um Disco da Wii!"
msgid "Install"
msgstr "Instalar"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Erro de Instalação!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Instalar um jogo"
msgid "Install directories"
msgstr "Instalar directórios"
msgid "Install partitions"
msgstr "Instalar partições"
msgid "Installing content... Ok!"
msgstr "Instalando conteúdo... Ok!"
@ -1597,3 +1606,12 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "Mudança automática de porta é feita na hora. Para esta opção, tem de alterar antes todos os caminhos personalizados para o cartão SD ou pode danificar o sistema de ficheiros."
#~ msgid "Install directories"
#~ msgstr "Instalar directórios"
#~ msgid "Install partitions"
#~ msgstr "Instalar partições"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nikolai_ca\n"
"Language-Team: Kir, alendit, nikolai_ca\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "АвтоИнициализация Сети"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "Путь к кодам BCA"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Блокировать перезагрузку IOS"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "Не могу сохранить."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Скачать обложку"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Распаковка файлов..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Форматирование не удалось"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "Домашнее Меню"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Путь к хоумбрю-программам"
@ -812,17 +821,17 @@ msgstr "Вставьте диск Wii!"
msgid "Install"
msgstr "Установка"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Ошибка установки!"
msgid "Install a game"
msgstr "Установить игру"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Установить разделы"
msgid "Install a game"
msgstr "Установить игру"
msgid "Installing content... Ok!"
msgstr "Установка контента... ОК!"
@ -1598,6 +1607,9 @@ msgstr "из"
msgid "seconds left"
msgstr "секунд осталось"
#~ msgid "Install partitions"
#~ msgstr "Установить разделы"
#~ msgid " Wad Saved as:"
#~ msgstr " Wad сохранен как:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: knife.hu kavid emul8ion\n"
"Language-Team: kavid\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "自动检测网络"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "接口自动切换已生效。你需要立即更改所有自定义路径为SD卡否则可能会损坏USB分区上的文件系统。"
msgid "BCA Codes Path"
msgstr "BCA代码路径"
@ -231,6 +228,9 @@ msgstr "图形界面设置"
msgid "Block HBC Menu"
msgstr "HBC菜单"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "阻止IOS重新载入"
@ -390,6 +390,9 @@ msgstr "无法打开wiitdb.xml."
msgid "Could not save."
msgstr "无法保存"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "下载封面"
@ -611,6 +614,9 @@ msgstr "退出到哪里?"
msgid "Extracting files..."
msgstr "正在解压缩文件"
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "格式化失败"
@ -768,6 +774,9 @@ msgstr "全局设置"
msgid "HOME Menu"
msgstr "主菜单"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "自制程序路径"
@ -812,18 +821,18 @@ msgstr "插入 Wii 光盘!"
msgid "Install"
msgstr "安装"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "安装错误!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "安装游戏"
msgid "Install directories"
msgstr "安装目录"
msgid "Install partitions"
msgstr "安装分区"
msgid "Installing content... Ok!"
msgstr "正在安装程序主体... 完成!"
@ -1598,6 +1607,15 @@ msgstr "的"
msgid "seconds left"
msgstr "剩余秒数"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "接口自动切换已生效。你需要立即更改所有自定义路径为SD卡否则可能会损坏USB分区上的文件系统。"
#~ msgid "Install directories"
#~ msgstr "安装目录"
#~ msgid "Install partitions"
#~ msgstr "安装分区"
#~ msgid " Wad Saved as:"
#~ msgstr "WAD 保存为:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: SirPalax\n"
"Language-Team: Penn, SirPalax\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "AutoIniciar la Red"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "Ruta Códigos BCA"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Impedir recarga IOS"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "¡No se pudo guardar!"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Descarga de Carátulas"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Extrayendo archivos..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "No se ha podido formatear"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "Menú HOME"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Ruta Apps Homebrew"
@ -812,17 +821,17 @@ msgstr "¡Inserta un Disco Wii!"
msgid "Install"
msgstr "Instalar"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "¡Error de Instalación!"
msgid "Install a game"
msgstr "Instalar un juego"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Instalar particiones"
msgid "Install a game"
msgstr "Instalar un juego"
msgid "Installing content... Ok!"
msgstr "Instalando contenido... ¡Correcto!"
@ -1598,6 +1607,9 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Install partitions"
#~ msgstr "Instalar particiones"
#~ msgid " Wad Saved as:"
#~ msgstr " WAD guardado como:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
"Last-Translator: Katsurou\n"
"Language-Team: Katsurou, pirateX\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Autoinitiera Nätverk"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA kodssökväg"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "Blockera IOS omladdning"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "Kunde inte spara."
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Omslagsnedladdning"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Packar upp filer..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Formatering misslyckad"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "Hemmeny"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Apps"
@ -812,17 +821,17 @@ msgstr "Sätt i en Wii-skiva!"
msgid "Install"
msgstr "Installera"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Fel vid installering!"
msgid "Install a game"
msgstr "Installera ett spel"
msgid "Install directories"
msgid "Install Partitions"
msgstr ""
msgid "Install partitions"
msgstr "Installera partitioner"
msgid "Install a game"
msgstr "Installera ett spel"
msgid "Installing content... Ok!"
msgstr "Installerar innehåll... Ok!"
@ -1598,6 +1607,9 @@ msgstr "av"
msgid "seconds left"
msgstr "sekunder kvar"
#~ msgid "Install partitions"
#~ msgstr "Installera partitioner"
#~ msgid " Wad Saved as:"
#~ msgstr "Wad sparad som:"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2010-02-15 21:00+0800\n"
"Last-Translator: Jane.H\n"
"Language-Team: kyogc, Miller, Mika Li, Jane.H\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "自動檢查網路"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr "立即生效連接埠自動切換功能。首先你需要在這選項改變所有自訂路徑為SD卡否則可能會損壞檔案系統。"
msgid "BCA Codes Path"
msgstr "BAC代碼路徑"
@ -231,6 +228,9 @@ msgstr "封鎖介面設定"
msgid "Block HBC Menu"
msgstr "封鎖 HBC 選單"
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "封鎖 IOS 重新載入"
@ -390,6 +390,9 @@ msgstr "無法開啟wiitdb.xml。"
msgid "Could not save."
msgstr "無法儲存"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "下載封面"
@ -611,6 +614,9 @@ msgstr "退出到?"
msgid "Extracting files..."
msgstr "提取檔案中..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "格式化失敗"
@ -768,6 +774,9 @@ msgstr "整體設定"
msgid "HOME Menu"
msgstr "主選單"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "HBC 應用程式路徑"
@ -812,18 +821,18 @@ msgstr "插入 Wii 光碟!"
msgid "Install"
msgstr "安裝"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "安裝錯誤!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "安裝遊戲"
msgid "Install directories"
msgstr "安裝目錄"
msgid "Install partitions"
msgstr "安裝磁區"
msgid "Installing content... Ok!"
msgstr "正在安裝內容...完成!"
@ -1598,6 +1607,15 @@ msgstr "的"
msgid "seconds left"
msgstr "剩餘秒數"
#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
#~ msgstr "立即生效連接埠自動切換功能。首先你需要在這選項改變所有自訂路徑為SD卡否則可能會損壞檔案系統。"
#~ msgid "Install directories"
#~ msgstr "安裝目錄"
#~ msgid "Install partitions"
#~ msgstr "安裝磁區"
#~ msgid " has been Saved. The text has not been verified. Some of the code may not work right with each other. If you experience trouble, open the text in a real text editor for more information."
#~ msgstr "已經被儲存。內容尚未驗證。部分代碼可能無法作用。如果你遇到問題,請用文字編輯器打開文本文件以獲得更多的信息。"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Nitro_subzero \n"
"Language-Team: Nitro_subzero\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "ทำการเชื่อมต่อเครือข่าย"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "โหลดบล๊อค IOS อีกครั้ง"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "บันทึกไม่ได้"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "ดาวน์โหลดปก"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "กำลังขยายไฟล์..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "ฟอร์แมตไม่ได้"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "เมนู HOME"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "ที่เก็บโปรแกรม Homebrew"
@ -812,18 +821,18 @@ msgstr "ใส่แผ่น Wii !"
msgid "Install"
msgstr "ติดตั้ง"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "ผิดพลาดขณะติดตั้ง!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "ติดตั้งเกมส์"
msgid "Install directories"
msgstr ""
msgid "Install partitions"
msgstr ""
msgid "Installing content... Ok!"
msgstr "ติดตั้งเนื้อหา... สำเร็จ!"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-18 11:39+0200\n"
"POT-Creation-Date: 2011-06-22 19:31+0200\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: omercigingelini\n"
"Language-Team: omercigingelini\n"
@ -183,9 +183,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Ağı ototanımla"
msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA Kod Yolu"
@ -231,6 +228,9 @@ msgstr ""
msgid "Block HBC Menu"
msgstr ""
msgid "Block Hard Drive Settings"
msgstr ""
msgid "Block IOS Reload"
msgstr "IOS Yüklemesini Engelle"
@ -390,6 +390,9 @@ msgstr ""
msgid "Could not save."
msgstr "Kaydedilemedi"
msgid "Could not write to:"
msgstr ""
msgid "Cover Download"
msgstr "Kapak Indirme"
@ -611,6 +614,9 @@ msgstr ""
msgid "Extracting files..."
msgstr "Dosyalar çıkarılıyor..."
msgid "Failed"
msgstr ""
msgid "Failed formating"
msgstr "Biçimlendirme başarısız"
@ -768,6 +774,9 @@ msgstr ""
msgid "HOME Menu"
msgstr "HOME Menü"
msgid "Hard Drive Settings"
msgstr ""
msgid "Homebrew Apps Path"
msgstr "Homebrew Yazılımlarının Yolu"
@ -812,18 +821,18 @@ msgstr "Bir Wii Diski Takın!"
msgid "Install"
msgstr "Kur"
msgid "Install Directories"
msgstr ""
msgid "Install Error!"
msgstr "Kurulum Hatasi!"
msgid "Install Partitions"
msgstr ""
msgid "Install a game"
msgstr "Oyun kur"
msgid "Install directories"
msgstr ""
msgid "Install partitions"
msgstr ""
msgid "Installing content... Ok!"
msgstr "İçerik kuruluyor.. OK!"

File diff suppressed because one or more lines are too long

View File

@ -81,11 +81,14 @@ void DeviceHandler::UnMountAll()
if(sd)
delete sd;
if(usb)
delete usb;
if(usb0)
delete usb0;
if(usb1)
delete usb1;
sd = NULL;
usb = NULL;
usb0 = NULL;
usb1 = NULL;
}
bool DeviceHandler::Mount(int dev)
@ -105,7 +108,12 @@ bool DeviceHandler::IsInserted(int dev)
return SD_Inserted() && sd->IsMounted(0);
else if(dev >= USB1 && dev <= USB8)
return USB_Inserted() && usb->IsMounted(dev-USB1);
{
int portPart = PartitionToPortPartition(dev-USB1);
PartitionHandle *usb = instance->GetUSBHandleFromPartition(dev-USB1);
if(usb)
return usb->IsMounted(portPart);
}
return false;
}
@ -135,86 +143,52 @@ bool DeviceHandler::MountSD()
return sd->Mount(0, DeviceName[SD], true);
}
const DISC_INTERFACE * DeviceHandler::GetUSBInterface()
{
if(IOS_GetVersion() < 200)
return &__io_usbstorage;
return &__io_usbstorage2;
}
static inline bool USBSpinUp()
{
bool started = false;
bool started0 = true;
bool started1 = true;
int retries = 400;
const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface();
const DISC_INTERFACE * handle0 = NULL;
const DISC_INTERFACE * handle1 = NULL;
if(Settings.USBPort == 0 || Settings.USBPort == 2)
handle0 = DeviceHandler::GetUSB0Interface();
if(Settings.USBPort == 1 || Settings.USBPort == 2)
handle1 = DeviceHandler::GetUSB1Interface();
// wait 20 sec for the USB to spin up...stupid slow ass HDD
do
{
started = (handle->startup() && handle->isInserted());
if(started) break;
if(handle0)
started0 = (handle0->startup() && handle0->isInserted());
if(handle1)
started1 = (handle1->startup() && handle1->isInserted());
if(started0 && started1) break;
usleep(50000);
}
while(--retries > 0);
return started;
return (started0 && started1);
}
bool DeviceHandler::SetUSBPort(int port, bool spinup)
bool DeviceHandler::MountUSB(int pos)
{
int ret = USBStorage2_SetPort(port);
if(spinup)
USBSpinUp();
return ret >= 0;
}
void DeviceHandler::SetUSBPortFromPartition(int part)
{
if(Settings.USBPort != 2)
return;
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
if(!usbHandle)
return;
if(part < usbHandle->GetPartitionCount())
SetUSBPort(0);
else
SetUSBPort(1);
}
bool DeviceHandler::MountUSB(int pos, bool spinup)
{
if(spinup && !USBSpinUp())
if(!usb0 && !usb1)
return false;
if(!usb)
{
if(Settings.USBPort == 2) SetUSBPort(0);
usb = new PartitionHandle(GetUSBInterface());
if(Settings.USBPort == 2 && IosLoader::IsHermesIOS())
{
SetUSBPort(1);
usb->GetPort1Partitions();
}
}
if(usb->GetPartitionTotalCount() < 1)
{
delete usb;
usb = NULL;
return false;
}
if(pos >= usb->GetPartitionTotalCount())
if(pos >= GetUSBPartitionCount())
return false;
SetUSBPortFromPartition(pos);
int portPart = PartitionToPortPartition(pos);
return usb->Mount(pos, DeviceName[USB1+pos]);
if(PartitionToUSBPort(pos) == 0 && usb0)
return usb0->Mount(portPart, DeviceName[USB1+pos]);
else if(usb1)
return usb1->Mount(portPart, DeviceName[USB1+pos]);
return false;
}
bool DeviceHandler::MountAllUSB(bool spinup)
@ -222,54 +196,88 @@ bool DeviceHandler::MountAllUSB(bool spinup)
if(spinup && !USBSpinUp())
return false;
if(!usb)
if(!usb0 && (Settings.USBPort == 0 || Settings.USBPort == 2))
usb0 = new PartitionHandle(GetUSB0Interface());
if(!usb1 && (Settings.USBPort == 1 || Settings.USBPort == 2))
usb1 = new PartitionHandle(GetUSB1Interface());
if(usb0 && usb0->GetPartitionCount() < 1)
{
if(Settings.USBPort == 2) SetUSBPort(0);
usb = new PartitionHandle(GetUSBInterface());
if(Settings.USBPort == 2 && IosLoader::IsHermesIOS())
{
SetUSBPort(1);
usb->GetPort1Partitions();
}
delete usb0;
usb0 = NULL;
}
if(usb1 && usb1->GetPartitionCount() < 1)
{
delete usb1;
usb1 = NULL;
}
bool result = false;
int partCount = GetUSBPartitionCount();
for(int i = 0; i < usb->GetPartitionTotalCount(); i++)
for(int i = 0; i < partCount; i++)
{
if(MountUSB(i, false))
if(MountUSB(i))
result = true;
}
if(Settings.USBPort == 2)
SetUSBPort(0);
return result;
}
bool DeviceHandler::MountUSBPort1(bool spinup)
{
if(spinup && !USBSpinUp())
return false;
if(!usb1 && (Settings.USBPort == 1 || Settings.USBPort == 2))
usb1 = new PartitionHandle(GetUSB1Interface());
if(usb1 && usb1->GetPartitionCount() < 1)
{
delete usb1;
usb1 = NULL;
return false;
}
bool result = false;
int partCount = GetUSBPartitionCount();
int partCount0 = 0;
if(usb0)
partCount0 = usb0->GetPartitionCount();
for(int i = partCount0; i < partCount; i++)
{
if(MountUSB(i))
result = true;
}
return result;
}
void DeviceHandler::UnMountUSB(int pos)
{
if(!usb)
if(pos >= GetUSBPartitionCount())
return;
if(pos >= usb->GetPartitionTotalCount())
return;
int portPart = PartitionToPortPartition(pos);
SetUSBPortFromPartition(pos);
usb->UnMount(pos);
if(PartitionToUSBPort(pos) == 0 && usb0)
return usb0->UnMount(portPart);
else if(usb1)
return usb1->UnMount(portPart);
}
void DeviceHandler::UnMountAllUSB()
{
if(!usb)
return;
int partCount = GetUSBPartitionCount();
for(int i = 0; i < usb->GetPartitionTotalCount(); i++)
for(int i = 0; i < partCount; i++)
UnMountUSB(i);
delete usb;
usb = NULL;
delete usb0;
usb0 = NULL;
delete usb1;
usb1 = NULL;
}
int DeviceHandler::PathToDriveType(const char * path)
@ -292,9 +300,19 @@ const char * DeviceHandler::GetFSName(int dev)
{
return DeviceHandler::instance->sd->GetFSName(0);
}
else if(dev >= USB1 && dev <= USB8 && DeviceHandler::instance->usb)
else if(dev >= USB1 && dev <= USB8)
{
return DeviceHandler::instance->usb->GetFSName(dev-USB1);
int partCount0 = 0;
int partCount1 = 0;
if(DeviceHandler::instance->usb0)
partCount0 += DeviceHandler::instance->usb0->GetPartitionCount();
if(DeviceHandler::instance->usb1)
partCount1 += DeviceHandler::instance->usb1->GetPartitionCount();
if(dev-USB1 > partCount0 && DeviceHandler::instance->usb0)
return DeviceHandler::instance->usb0->GetFSName(dev-USB1);
else if(DeviceHandler::instance->usb1)
return DeviceHandler::instance->usb1->GetFSName(dev-USB1-partCount0);
}
return NULL;
@ -305,9 +323,7 @@ int DeviceHandler::GetUSBFilesystemType(int partition)
if(!instance)
return -1;
PartitionHandle * usbHandle = instance->GetUSBHandle();
const char * FSName = usbHandle->GetFSName(partition);
const char *FSName = GetUSBFSName(partition);
if(!FSName) return -1;
if(strncmp(FSName, "WBFS", 4) == 0)
@ -321,3 +337,71 @@ int DeviceHandler::GetUSBFilesystemType(int partition)
return -1;
}
u16 DeviceHandler::GetUSBPartitionCount()
{
if(!instance)
return 0;
u16 partCount0 = 0;
u16 partCount1 = 0;
if(instance->usb0)
partCount0 = instance->usb0->GetPartitionCount();
if(instance->usb1)
partCount1 = instance->usb1->GetPartitionCount();
return partCount0+partCount1;
}
int DeviceHandler::PartitionToUSBPort(int part)
{
if(!DeviceHandler::instance)
return 0;
u16 partCount0 = 0;
if(DeviceHandler::instance->usb0)
partCount0 = instance->usb0->GetPartitionCount();
if(!instance->usb0 || part >= partCount0)
return 1;
else
return 0;
}
int DeviceHandler::PartitionToPortPartition(int part)
{
if(!DeviceHandler::instance)
return 0;
u16 partCount0 = 0;
if(instance->usb0)
partCount0 = instance->usb0->GetPartitionCount();
if(!instance->usb0 || part >= partCount0)
return part-partCount0;
else
return part;
}
const char *DeviceHandler::GetUSBFSName(int partition)
{
if(!instance)
return NULL;
const char * FSName = NULL;
PartitionHandle *handle = instance->GetUSBHandleFromPartition(partition);
if(handle)
FSName = handle->GetFSName(PartitionToPortPartition(partition));
return FSName;
}
PartitionHandle *DeviceHandler::GetUSBHandleFromPartition(int part) const
{
if(PartitionToUSBPort(part) == 0)
return usb0;
else
return usb1;
}

View File

@ -27,6 +27,7 @@
#define DEVICE_HANDLER_HPP_
#include "PartitionHandle.h"
#include "usbloader/usbstorage2.h"
enum
{
@ -70,31 +71,39 @@ class DeviceHandler
//! Individual Mounts/UnMounts...
bool MountSD();
bool MountAllUSB(bool spinUp = true);
bool MountUSB(int part, bool spinUp = true);
bool MountUSBPort1(bool spinUp = true);
bool SD_Inserted() { if(sd) return sd->IsInserted(); return false; };
bool USB_Inserted() { if(usb) return usb->IsInserted(); return false; };
bool USB0_Inserted() { if(usb0) return usb0->IsInserted(); return false; };
bool USB1_Inserted() { if(usb1) return usb1->IsInserted(); return false; };
void UnMountSD() { if(sd) delete sd; sd = NULL; };
void UnMountUSB(int pos);
void UnMountAllUSB();
PartitionHandle * GetSDHandle() const { return sd; };
PartitionHandle * GetUSBHandle() const { return usb; };
PartitionHandle * GetUSB0Handle() const { return usb0; };
PartitionHandle * GetUSB1Handle() const { return usb1; };
PartitionHandle * GetUSBHandleFromPartition(int part) const;
static const DISC_INTERFACE *GetUSB0Interface() { return &__io_usbstorage2_port0; }
static const DISC_INTERFACE *GetUSB1Interface() { return &__io_usbstorage2_port1; }
static int GetUSBFilesystemType(int part);
static int PathToDriveType(const char * path);
static const char * GetFSName(int dev);
static const char * PathToFSName(const char * path) { return GetFSName(PathToDriveType(path)); };
static const DISC_INTERFACE * GetUSBInterface();
static bool SetUSBPort(int port, bool spinup = true);
static void SetUSBPortFromPartition(int part);
static int PartitionToUSBPort(int part);
static u16 GetUSBPartitionCount();
static int PartitionToPortPartition(int part);
static const char *GetUSBFSName(int partition);
private:
DeviceHandler() : sd(0), usb(0) { };
DeviceHandler() : sd(0), gca(0), gcb(0), usb0(0), usb1(0) { };
~DeviceHandler();
bool MountUSB(int part);
static DeviceHandler *instance;
PartitionHandle * sd;
PartitionHandle * gca;
PartitionHandle * gcb;
PartitionHandle * usb;
PartitionHandle * usb0;
PartitionHandle * usb1;
};
#endif

View File

@ -67,10 +67,8 @@ static inline const char * PartFromType(int type)
}
PartitionHandle::PartitionHandle(const DISC_INTERFACE *discio)
: interface(discio)
{
Port0Size = 0;
interface = discio;
// Sanity check
if (!interface)
return;
@ -93,23 +91,6 @@ PartitionHandle::~PartitionHandle()
interface->shutdown();
}
void PartitionHandle::GetPort1Partitions()
{
if(Port0Size != 0)
return;
Port0Size = PartitionList.size();
// Start the device and check that it is inserted
if (!interface->startup())
return;
if (!interface->isInserted())
return;
FindPartitions();
}
bool PartitionHandle::IsMounted(int pos)
{
if(pos < 0 || pos >= (int) MountNameList.size())
@ -254,7 +235,7 @@ int PartitionHandle::FindPartitions()
continue;
}
if(le32(partition->block_count) > 0 && (!IsExisting(le32(partition->lba_start)) || Port0Size))
if(le32(partition->block_count) > 0 && !IsExisting(le32(partition->lba_start)))
{
AddPartition(PartFromType(partition->type), le32(partition->lba_start),
le32(partition->block_count), (partition->status == PARTITION_BOOTABLE),

View File

@ -145,17 +145,13 @@ class PartitionHandle
//! Get the entrie number in MBR of this partition
int GetPartitionNum(int pos) { if(valid(pos)) return PartitionList[pos].PartitionNum; else return -1; };
//! Get the count of found partitions
int GetPartitionCount() const { if(Port0Size) return Port0Size; else return PartitionList.size(); };
int GetPartitionCount() const { return PartitionList.size(); };
//! Get the partition size in bytes
u64 GetSize(int pos) { if(valid(pos)) return (u64) PartitionList[pos].SecCount*BYTES_PER_SECTOR; else return 0; };
//! Get the whole partition record struct
PartitionFS * GetPartitionRecord(int pos) { if(valid(pos)) return &PartitionList[pos]; else return NULL; };
//! Get the disc interface of this handle
const DISC_INTERFACE * GetDiscInterface() { return interface; };
//! Get the port 1 partitions on usb
void GetPort1Partitions();
//! Get the count of found partitions including second port partitions on usb
int GetPartitionTotalCount() const { return PartitionList.size(); };
protected:
bool valid(int pos) { return (pos >= 0 && pos < (int) PartitionList.size()); }
void AddPartition(const char * name, u64 lba_start, u64 sec_count, bool bootable, u8 part_type, u8 part_num);
@ -167,7 +163,6 @@ class PartitionHandle
const DISC_INTERFACE *interface;
std::vector<PartitionFS> PartitionList;
std::vector<std::string> MountNameList;
int Port0Size;
};
#endif

View File

@ -253,7 +253,6 @@ void Text::CalcLineOffsets()
const wchar_t * origTxt = wText->c_str();
int ch = 0;
int lastSpace = -1;
int lastSpaceIndex = -1;
int currWidth = 0;
int i = 0;
@ -288,7 +287,6 @@ void Text::CalcLineOffsets()
else if (origTxt[ch] == ' ')
{
lastSpace = ch;
lastSpaceIndex = i;
}
ch++;

View File

@ -69,8 +69,7 @@ int StartUpProcess::ParseArguments(int argc, char *argv[])
ptr = strcasestr(argv[i], "-usbport=");
if(ptr)
{
Settings.USBPort = LIMIT(atoi(ptr+strlen("-usbport=")), 0, 1);
DeviceHandler::SetUSBPort(Settings.USBPort, false);
Settings.USBPort = LIMIT(atoi(ptr+strlen("-usbport=")), 0, 2);
}
if(strlen(argv[i]) == 6 && strchr(argv[i], '=') == 0 && strchr(argv[i], '-') == 0)
@ -125,7 +124,7 @@ void StartUpProcess::SetTextf(const char * format, ...)
bool StartUpProcess::USBSpinUp()
{
bool started = false;
const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface();
const DISC_INTERFACE * handle = Settings.USBPort == 1 ? DeviceHandler::GetUSB1Interface() : DeviceHandler::GetUSB0Interface();
Timer countDown;
// wait 10 sec for the USB to spin up...stupid slow ass HDD
do
@ -186,6 +185,7 @@ int StartUpProcess::Execute()
SetTextf("Loading cIOS %i\n", Settings.cios);
DeviceHandler::DestroyInstance();
USBStorage2_Deinit();
// Loading now the cios setup in the settings
IosLoader::LoadAppCios();
@ -205,9 +205,13 @@ int StartUpProcess::Execute()
{
SetTextf("Changing USB Port to %i\n", Settings.USBPort);
DeviceHandler::Instance()->UnMountAllUSB();
DeviceHandler::SetUSBPort(Settings.USBPort);
DeviceHandler::Instance()->MountAllUSB();
}
else if(Settings.USBPort == 2)
{
SetTextf("Mounting USB Port to 1\n");
DeviceHandler::Instance()->MountUSBPort1();
}
gprintf("\tLoading game categories...%s\n", GameCategories.Load(Settings.ConfigPath) ? "done" : "failed");
gprintf("\tLoading font...%s\n", Theme::LoadFont(Settings.ConfigPath) ? "done" : "failed (using default)");

Binary file not shown.

Binary file not shown.

View File

@ -621,7 +621,6 @@ u32 wbfs_extract_disc(wbfs_disc_t*d, rw_sector_callback_t write_dst_wii_sector,
u64 wbfs_estimate_disc(wbfs_t *p, read_wiidisc_callback_t read_src_wii_disc, void *callback_data, partition_selector_t sel)
{
u8 *b;
int i;
u32 tot;
u32 wii_sec_per_wbfs_sect = 1 << (p->wbfs_sec_sz_s - p->wii_sec_sz_s);
@ -648,7 +647,6 @@ u64 wbfs_estimate_disc(wbfs_t *p, read_wiidisc_callback_t read_src_wii_disc, voi
d = 0;
info = wbfs_ioalloc( p->disc_info_sz );
b = (u8 *) info;
read_src_wii_disc(callback_data, 0, 0x100, info->disc_header_copy);
for (i = 0; i < p->n_wbfs_sec_per_disc; i++)
@ -739,12 +737,10 @@ int wbfs_extract_file(wbfs_disc_t*d, char *path, void **data)
error: return ret;
}
int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data)
int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data, u32 hdd_sector_size)
{
if (!d) return -1;
//! Use here real physical HDD sector size
extern u32 hdd_sector_size;
wbfs_t *p = d->p;
int src_wbs_nlb = p->wbfs_sec_sz / hdd_sector_size;
int i, ret, last = 0;

View File

@ -221,7 +221,7 @@ extern "C"
partition_selector_t sel, u32 *comp_size, u32 *real_size);
typedef int (*_frag_append_t)(void *ff, u32 offset, u32 sector, u32 count);
int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data);
int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data, u32 hdd_sector_size);
extern wbfs_t wbfs_iso_file;
u32 wbfs_disc_sector_used(wbfs_disc_t *d);

View File

@ -91,11 +91,9 @@ int MenuInstall()
}
else
{
USBStorage2_Watchdog(0);
StartProgress(gametxt, name, 0, true, true);
ret = WBFS_AddGame();
ProgressStop();
USBStorage2_Watchdog(1);
wiilight(0);
if (ret != 0)
{

View File

@ -20,17 +20,17 @@ int SelectPartitionMenu()
int choice = -1;
int ret = -1;
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
//create the partitionlist
for (int cnt = 0; cnt < usbHandle->GetPartitionCount(); cnt++)
for (int cnt = 0; cnt < DeviceHandler::GetUSBPartitionCount(); cnt++)
{
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(cnt);
int portPart = DeviceHandler::PartitionToPortPartition(cnt);
/* Calculate size in gigabytes */
f32 size = usbHandle->GetSize(cnt) / GB_SIZE;
f32 size = usbHandle->GetSize(portPart) / GB_SIZE;
if (size)
{
options.SetName(counter, "%s %d %s: ", tr( "Partition" ), cnt + 1, usbHandle->GetFSName(cnt));
options.SetName(counter, "%s %d %s: ", tr( "Partition" ), cnt + 1, usbHandle->GetFSName(portPart));
options.SetValue(counter, "%.2fGB", size);
}
else
@ -98,7 +98,7 @@ int SelectPartitionMenu()
if (ret >= 0)
{
if (usbHandle->GetSize(ret))
if (strcmp(options.GetValue(ret), tr( "Can't be formatted" )) != 0)
{
choice = ret;
ExitSelect = true;

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
#define size_ehcmodule_5 26234
#define size_ehcmodule_5 27134
extern unsigned char ehcmodule_5[26234];
extern unsigned char ehcmodule_5[27134];

View File

@ -114,12 +114,10 @@ char * HTML_Stream::CopyString(const char * stopat)
u32 blocksize = 1024;
u32 counter = 0;
u32 allocatedsize = 0;
char * outtext = (char*) malloc(blocksize);
if (!outtext) return NULL;
allocatedsize = blocksize;
memset(outtext, 0, blocksize);
while ((htmlstringcompare( HTML_File, stopat, position ) != 0) && (position + strlen(stopat) < filesize))

View File

@ -97,7 +97,15 @@ bool Wiinnertag::Send(const char *gameID)
bool Wiinnertag::TagGame(const char *gameID)
{
Wiinnertag Tag(Settings.WiinnertagPath);
string fullpath = Settings.WiinnertagPath;
if(fullpath.size() == 0)
return false;
if(fullpath[fullpath.size()-1] != '/')
fullpath += '/';
fullpath += "Wiinnertag.xml";
Wiinnertag Tag(fullpath);
return Tag.Send(gameID);
}
@ -115,7 +123,15 @@ static const char * XMLSaveCallback(mxml_node_t *node, int where)
bool Wiinnertag::CreateExample(const string &filepath)
{
FILE * f = fopen(filepath.c_str(), "wb");
if(filepath.size() == 0)
return false;
string fullpath = filepath;
if(fullpath[fullpath.size()-1] != '/')
fullpath += '/';
fullpath += "Wiinnertag.xml";
FILE * f = fopen(fullpath.c_str(), "wb");
if(!f)
return false;

View File

@ -210,7 +210,7 @@ s32 download_request(const char * url, char * filename)
//Form a nice request header to send to the webserver
char header[strlen(path) + strlen(domain) + strlen(url) + 100];
sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\nReferer: %s\r\nConnection: close\r\n\r\n", path, domain, url);
sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\nReferer: %s\r\nUser-Agent: USBLoaderGX\r\nConnection: close\r\n\r\n", path, domain, url);
s32 filesize = network_request(connection, header, filename);

View File

@ -1077,10 +1077,11 @@ int DiscWait(const char *title, const char *msg, const char *btn1Label, const ch
***************************************************************************/
int FormatingPartition(const char *title, int part_num)
{
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(part_num);
int portPart = DeviceHandler::PartitionToPortPartition(part_num);
char text[255];
sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(part_num) / GB_SIZE);
sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(portPart) / GB_SIZE);
int choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" ));
if (choice == 0)
return -666;
@ -1117,7 +1118,7 @@ int FormatingPartition(const char *title, int part_num)
ResumeGui();
VIDEO_WaitVSync();
ret = WBFS_Format(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num));
ret = WBFS_Format(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), DeviceHandler::PartitionToUSBPort(part_num));
if (ret < 0)
{
@ -1125,7 +1126,7 @@ int FormatingPartition(const char *title, int part_num)
}
else
{
PartitionFS * partition = usbHandle->GetPartitionRecord(part_num);
PartitionFS * partition = usbHandle->GetPartitionRecord(portPart);
partition->PartitionType = 0xBF;
partition->FSName = "WBFS";
sleep(1);

View File

@ -35,10 +35,16 @@ CCategoryList CategoryList;
CCategoryList::CCategoryList()
{
nameList[0] = tr("All");
clear();
goToFirst();
}
void CCategoryList::clear()
{
nameList.clear();
nameList[0] = tr("All");
}
const char * CCategoryList::operator[](unsigned int id)
{
map<unsigned int, string>::iterator itr = nameList.find(id);

View File

@ -51,7 +51,7 @@ class CCategoryList
bool findCategory(unsigned int id) { listIter = nameList.find(id); return listIter != nameList.end(); };
int pos() const { return distance(nameList.begin(), listIter); }
int size() const { return nameList.size(); }
void clear() { nameList.clear(); }
void clear();
private:
string configPath;
map<unsigned int, string>::const_iterator listIter;

View File

@ -59,6 +59,8 @@ const vector<unsigned int> &CGameCategories::operator[](const char *id) const
static const char * XMLSaveCallback(mxml_node_t *node, int where)
{
const char *name = node->value.element.name;
if(!name)
return NULL;
if (where == MXML_WS_BEFORE_OPEN)
{
@ -76,7 +78,7 @@ static const char * XMLSaveCallback(mxml_node_t *node, int where)
else if(!strcmp(name, "Game"))
return "\n\t";
}
return (NULL);
return NULL;
}
bool CGameCategories::Load(string filepath)
@ -389,6 +391,7 @@ bool CGameCategories::ImportFromWiiTDB(const string &xmlpath)
}
XML_DB.CloseFile();
gameList.FilterList(filter.c_str());
return true;
}

View File

@ -67,7 +67,7 @@ void CSettings::SetDefault()
snprintf(BcaCodepath, sizeof(BcaCodepath), "%s/bca/", BootDevice);
snprintf(WipCodepath, sizeof(WipCodepath), "%s/wip/", BootDevice);
snprintf(WDMpath, sizeof(WDMpath), "%s/wdm/", BootDevice);
snprintf(WiinnertagPath, sizeof(WiinnertagPath), "%s/Wiinnertag.xml", ConfigPath);
snprintf(WiinnertagPath, sizeof(WiinnertagPath), "%s/", ConfigPath);
snprintf(theme_path, sizeof(theme_path), "%stheme/", ConfigPath);
snprintf(dolpath, sizeof(dolpath), "%s/", BootDevice);
strcpy(theme, "");

View File

@ -171,6 +171,7 @@ enum
BLOCK_GAMEID_CHANGE = 0x8000,
BLOCK_CATEGORIES_MOD = 0x010000,
BLOCK_FEATURE_SETTINGS = 0x020000,
BLOCK_HARD_DRIVE_SETTINGS = 0x040000,
BLOCK_ALL = 0xFFFFFFFF,
};

View File

@ -39,12 +39,23 @@ static const char * OnOffText[] =
trNOOP( "ON" )
};
static const char * WiilightText[WIILIGHT_MAX] =
{
trNOOP( "OFF" ),
trNOOP( "ON" ),
trNOOP( "Only for Install" )
};
FeatureSettingsMenu::FeatureSettingsMenu()
: SettingsMenu(tr("Features Settings"), &GuiOptions, MENU_NONE)
{
int Idx = 0;
Options->SetName(Idx++, "%s", tr( "Titles from WiiTDB" ));
Options->SetName(Idx++, "%s", tr( "Cache Titles" ));
Options->SetName(Idx++, "%s", tr( "Wiilight" ));
Options->SetName(Idx++, "%s", tr( "Rumble" ));
Options->SetName(Idx++, "%s", tr( "AutoInit Network" ));
Options->SetName(Idx++, "%s", tr( "Messageboard Update" ));
Options->SetName(Idx++, "%s", tr( "Wiinnertag" ));
Options->SetName(Idx++, "%s", tr( "Import Categories" ));
@ -61,6 +72,18 @@ void FeatureSettingsMenu::SetOptionValues()
//! Settings: Cache Titles
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.CacheTitles] ));
//! Settings: Wiilight
Options->SetValue(Idx++, "%s", tr( WiilightText[Settings.wiilight] ));
//! Settings: Rumble
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.rumble] ));
//! Settings: AutoInit Network
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.autonetwork] ));
//! Settings: Messageboard Update
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.PlaylogUpdate] ));
//! Settings: Wiinnertag
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.Wiinnertag] ));
@ -93,6 +116,30 @@ int FeatureSettingsMenu::GetMenuInternal()
GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path);
}
//! Settings: Wiilight
else if (ret == ++Idx)
{
if (++Settings.wiilight >= WIILIGHT_MAX) Settings.wiilight = 0;
}
//! Settings: Rumble
else if (ret == ++Idx)
{
if (++Settings.rumble >= MAX_ON_OFF) Settings.rumble = 0; //RUMBLE
}
//! Settings: AutoInit Network
else if (ret == ++Idx)
{
if (++Settings.autonetwork >= MAX_ON_OFF) Settings.autonetwork = 0;
}
//! Settings: Messageboard Update
else if (ret == ++Idx )
{
if (++Settings.PlaylogUpdate >= MAX_ON_OFF) Settings.PlaylogUpdate = 0;
}
//! Settings: Winnertag
else if (ret == ++Idx)
{
@ -109,7 +156,10 @@ int FeatureSettingsMenu::GetMenuInternal()
}
}
if(Settings.Wiinnertag == ON && !CheckFile(Settings.WiinnertagPath))
char filepath[200];
snprintf(filepath, sizeof(filepath), "%sWiinnertag.xml", Settings.WiinnertagPath);
if(Settings.Wiinnertag == ON && !CheckFile(filepath))
{
int choice = WindowPrompt(tr("Warning"), tr("No Wiinnertag.xml found in the config path. Do you want an example file created?"), tr("Yes"), tr("No"));
if(choice)
@ -117,9 +167,15 @@ int FeatureSettingsMenu::GetMenuInternal()
if(Wiinnertag::CreateExample(Settings.WiinnertagPath))
{
char text[200];
snprintf(text, sizeof(text), "%s %s", tr("An example file was created here:"), Settings.WiinnertagPath);
snprintf(text, sizeof(text), "%s %s", tr("An example file was created here:"), filepath);
WindowPrompt(tr("Success"), text, tr("OK"));
}
else
{
char text[200];
snprintf(text, sizeof(text), "%s %s", tr("Could not write to:"), filepath);
WindowPrompt(tr("Failed"), text, tr("OK"));
}
}
}
}

View File

@ -41,13 +41,6 @@ static const char * OnOffText[MAX_ON_OFF] =
trNOOP( "ON" )
};
static const char * WiilightText[WIILIGHT_MAX] =
{
trNOOP( "OFF" ),
trNOOP( "ON" ),
trNOOP( "Only for Install" )
};
static const char * GameInfoText[GAMEINFO_MAX] =
{
trNOOP( "Game ID" ),
@ -118,9 +111,6 @@ GuiSettingsMenu::GuiSettingsMenu()
Options->SetName(Idx++, "%s", tr( "Font Scale Factor" ));
Options->SetName(Idx++, "%s", tr( "Keyboard" ));
Options->SetName(Idx++, "%s", tr( "Disc Artwork Download" ));
Options->SetName(Idx++, "%s", tr( "Wiilight" ));
Options->SetName(Idx++, "%s", tr( "Rumble" ));
Options->SetName(Idx++, "%s", tr( "AutoInit Network" ));
Options->SetName(Idx++, "%s", tr( "Screensaver" ));
Options->SetName(Idx++, "%s", tr( "Mark new games" ));
Options->SetName(Idx++, "%s", tr( "Show Free Space" ));
@ -187,15 +177,6 @@ void GuiSettingsMenu::SetOptionValues()
//! Settings: Disc Artwork Download
Options->SetValue(Idx++, "%s", tr( DiscArtDownloadText[Settings.discart] ));
//! Settings: Wiilight
Options->SetValue(Idx++, "%s", tr( WiilightText[Settings.wiilight] ));
//! Settings: Rumble
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.rumble] ));
//! Settings: AutoInit Network
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.autonetwork] ));
//! Settings: Screensaver
Options->SetValue(Idx++, "%s", tr( ScreensaverText[Settings.screensaver] ));
@ -336,24 +317,6 @@ int GuiSettingsMenu::GetMenuInternal()
if (++Settings.discart >= DISCARTS_MAX_CHOICE) Settings.discart = 0;
}
//! Settings: Wiilight
else if (ret == ++Idx)
{
if (++Settings.wiilight >= WIILIGHT_MAX) Settings.wiilight = 0;
}
//! Settings: Rumble
else if (ret == ++Idx)
{
if (++Settings.rumble >= MAX_ON_OFF) Settings.rumble = 0; //RUMBLE
}
//! Settings: AutoInit Network
else if (ret == ++Idx)
{
if (++Settings.autonetwork >= MAX_ON_OFF) Settings.autonetwork = 0;
}
//! Settings: Screensaver
else if (ret == ++Idx)
{

View File

@ -69,8 +69,8 @@ void GameSettingsMenu::SetupMainButtons()
SetMainButton(pos++, tr( "Game Load" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Ocarina" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Categories" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Uninstall Menu" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Default Gamesettings" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Uninstall Menu" ), MainButtonImgData, MainButtonImgOverData);
}
void GameSettingsMenu::CreateSettingsMenu(int menuNr)
@ -126,15 +126,6 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr)
ShowMenu();
}
//! Uninstall Menu
else if(menuNr == Idx++)
{
HideMenu();
ResumeGui();
CurrentMenu = new UninstallSM(DiscHeader);
Append(CurrentMenu);
}
//! Default Gamesettings
else if(menuNr == Idx++)
{
@ -145,6 +136,15 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr)
GameSettings.Save();
}
}
//! Uninstall Menu
else if(menuNr == Idx++)
{
HideMenu();
ResumeGui();
CurrentMenu = new UninstallSM(DiscHeader);
Append(CurrentMenu);
}
}
void GameSettingsMenu::DeleteSettingsMenu()

View File

@ -32,6 +32,7 @@
#include "SoundSettingsMenu.hpp"
#include "CustomPathsSM.hpp"
#include "FeatureSettingsMenu.hpp"
#include "HardDriveSM.hpp"
GlobalSettings::GlobalSettings()
: FlyingButtonsMenu(tr("Global Settings"))
@ -70,12 +71,13 @@ void GlobalSettings::SetupMainButtons()
SetMainButton(pos++, tr( "GUI Settings" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Loader Settings" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Parental Control" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Hard Drive Settings" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Features" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Parental Control" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Sound" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Custom Paths" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Theme Menu" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Theme Downloader" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Custom Paths" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Update" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Default Settings" ), MainButtonImgData, MainButtonImgOverData);
SetMainButton(pos++, tr( "Credits" ), creditsImgData, creditsImgOverData);
@ -116,10 +118,10 @@ void GlobalSettings::CreateSettingsMenu(int menuNr)
CurrentMenu = new LoaderSettings();
Append(CurrentMenu);
}
//! Parental Control
//! Hard Drive Settings
else if(menuNr == Idx++)
{
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS))
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_HARD_DRIVE_SETTINGS))
{
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
return;
@ -127,7 +129,7 @@ void GlobalSettings::CreateSettingsMenu(int menuNr)
HideMenu();
ResumeGui();
CurrentMenu = new ParentalControlSM();
CurrentMenu = new HardDriveSM();
Append(CurrentMenu);
}
//! Feature
@ -144,6 +146,20 @@ void GlobalSettings::CreateSettingsMenu(int menuNr)
CurrentMenu = new FeatureSettingsMenu();
Append(CurrentMenu);
}
//! Parental Control
else if(menuNr == Idx++)
{
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS))
{
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
return;
}
HideMenu();
ResumeGui();
CurrentMenu = new ParentalControlSM();
Append(CurrentMenu);
}
//! Sound
else if(menuNr == Idx++)
{
@ -158,20 +174,6 @@ void GlobalSettings::CreateSettingsMenu(int menuNr)
CurrentMenu = new SoundSettingsMenu();
Append(CurrentMenu);
}
//! Custom Paths
else if(menuNr == Idx++)
{
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS))
{
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
return;
}
HideMenu();
ResumeGui();
CurrentMenu = new CustomPathsSM();
Append(CurrentMenu);
}
//! Theme Menu
else if(menuNr == Idx++)
{
@ -194,6 +196,20 @@ void GlobalSettings::CreateSettingsMenu(int menuNr)
returnMenu = MENU_THEMEDOWNLOADER;
}
//! Custom Paths
else if(menuNr == Idx++)
{
if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS))
{
WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" ));
return;
}
HideMenu();
ResumeGui();
CurrentMenu = new CustomPathsSM();
Append(CurrentMenu);
}
//! Update
else if(menuNr == Idx++)
{
@ -270,6 +286,9 @@ void GlobalSettings::DeleteSettingsMenu()
case CFeatureSettings:
delete ((FeatureSettingsMenu *) CurrentMenu);
break;
case CHardDriveSM:
delete ((HardDriveSM *) CurrentMenu);
break;
case CSettingsMenu:
default:
delete CurrentMenu;

View File

@ -0,0 +1,271 @@
/****************************************************************************
* Copyright (C) 2011
* by Dimok
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
***************************************************************************/
#include <unistd.h>
#include <sys/statvfs.h>
#include "HardDriveSM.hpp"
#include "Controls/DeviceHandler.hpp"
#include "settings/CSettings.h"
#include "prompts/PromptWindows.h"
#include "language/gettext.h"
#include "usbloader/GameList.h"
#include "usbloader/wbfs.h"
#include "usbloader/utils.h"
#include "prompts/ProgressWindow.h"
#include "settings/GameTitles.h"
#include "system/IosLoader.h"
#include "wad/nandtitle.h"
static const char * OnOffText[] =
{
trNOOP( "OFF" ),
trNOOP( "ON" )
};
static const char * InstallToText[INSTALL_TO_MAX] =
{
trNOOP( "None" ),
trNOOP( "GAMEID_Gamename" ),
trNOOP( "Gamename [GAMEID]" )
};
static const char * SplitSizeText[INSTALL_TO_MAX] =
{
trNOOP( "No Splitting" ),
trNOOP( "Split each 2GB" ),
trNOOP( "Split each 4GB" ),
};
static inline bool IsValidPartition(int fs_type, int cios)
{
if (IosLoader::IsWaninkokoIOS(cios) && NandTitles.VersionOf(TITLE_ID(1, cios)) < 18)
{
return fs_type == PART_FS_WBFS;
}
else
{
return fs_type == PART_FS_WBFS || fs_type == PART_FS_FAT || fs_type == PART_FS_NTFS || fs_type == PART_FS_EXT;
}
}
HardDriveSM::HardDriveSM()
: SettingsMenu(tr("Hard Drive Settings"), &GuiOptions, MENU_NONE)
{
int Idx = 0;
Options->SetName(Idx++, "%s", tr( "Game/Install Partition" ));
Options->SetName(Idx++, "%s", tr( "Multiple Partitions" ));
Options->SetName(Idx++, "%s", tr( "USB Port" ));
Options->SetName(Idx++, "%s", tr( "Install Directories" ));
Options->SetName(Idx++, "%s", tr( "Game Split Size" ));
Options->SetName(Idx++, "%s", tr( "Install Partitions" ));
Options->SetName(Idx++, "%s", tr( "Sync FAT32 FS Info" ));
OldSettingsPartition = Settings.partition;
OldSettingsMultiplePartitions = Settings.MultiplePartitions;
NewSettingsUSBPort = Settings.USBPort;
SetOptionValues();
}
HardDriveSM::~HardDriveSM()
{
//! if partition has changed, Reinitialize it
if (Settings.partition != OldSettingsPartition ||
Settings.MultiplePartitions != OldSettingsMultiplePartitions ||
Settings.USBPort != NewSettingsUSBPort)
{
WBFS_CloseAll();
if(Settings.USBPort != NewSettingsUSBPort)
{
DeviceHandler::Instance()->UnMountAllUSB();
Settings.USBPort = NewSettingsUSBPort;
DeviceHandler::Instance()->MountAllUSB();
if(Settings.partition >= DeviceHandler::GetUSBPartitionCount())
Settings.partition = 0;
}
if(Settings.MultiplePartitions)
WBFS_OpenAll();
else
WBFS_OpenPart(Settings.partition);
//! Reload the new game titles
gameList.ReadGameList();
GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path);
}
}
void HardDriveSM::SetOptionValues()
{
int Idx = 0;
//! Settings: Game/Install Partition
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(Settings.partition);
int checkPart = DeviceHandler::PartitionToPortPartition(Settings.partition);
//! Get the partition name and it's size in GB's
Options->SetValue(Idx++, "%s (%.2fGB)", usbHandle->GetFSName(checkPart), usbHandle->GetSize(checkPart)/GB_SIZE);
//! Settings: Multiple Partitions
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.MultiplePartitions] ));
//! Settings: USB Port
if(NewSettingsUSBPort == 2)
Options->SetValue(Idx++, tr("Both Ports"));
else
Options->SetValue(Idx++, "%i", NewSettingsUSBPort);
//! Settings: Install directories
Options->SetValue(Idx++, "%s", tr( InstallToText[Settings.InstallToDir] ));
//! Settings: Game Split Size
Options->SetValue(Idx++, "%s", tr( SplitSizeText[Settings.GameSplit] ));
//! Settings: Install partitions
if(Settings.InstallPartitions == ONLY_GAME_PARTITION)
Options->SetValue(Idx++, "%s", tr("Only Game Partition"));
else if(Settings.InstallPartitions == ALL_PARTITIONS)
Options->SetValue(Idx++, "%s", tr("All Partitions"));
else if(Settings.InstallPartitions == REMOVE_UPDATE_PARTITION)
Options->SetValue(Idx++, "%s", tr("Remove update"));
//! Settings: Sync FAT32 FS Info
Options->SetValue(Idx++, " ");
}
int HardDriveSM::GetMenuInternal()
{
int ret = optionBrowser->GetClickedOption();
if (ret < 0)
return MENU_NONE;
int Idx = -1;
//! Settings: Game/Install Partition
if (ret == ++Idx)
{
// Select the next valid partition, even if that's the same one
int fs_type = 0;
int ios = IOS_GetVersion();
int retries = 20;
do
{
Settings.partition = (Settings.partition + 1) % DeviceHandler::GetUSBPartitionCount();
fs_type = DeviceHandler::GetUSBFilesystemType(Settings.partition);
}
while (!IsValidPartition(fs_type, ios) && --retries > 0);
if(fs_type == PART_FS_FAT && Settings.GameSplit == GAMESPLIT_NONE)
Settings.GameSplit = GAMESPLIT_4GB;
}
//! Settings: Multiple Partitions
else if (ret == ++Idx)
{
if (++Settings.MultiplePartitions >= MAX_ON_OFF) Settings.MultiplePartitions = 0;
}
//! Settings: USB Port
else if (ret == ++Idx)
{
if(!IosLoader::IsHermesIOS())
{
WindowPrompt(tr("ERROR:"), tr("USB Port changing is only supported on Hermes cIOS."), tr("OK"));
NewSettingsUSBPort = 0;
Settings.USBPort = 0;
}
else if (++NewSettingsUSBPort >= 3) // 2 = both ports
NewSettingsUSBPort = 0;
}
//! Settings: Install directories
else if (ret == ++Idx)
{
if (++Settings.InstallToDir >= INSTALL_TO_MAX) Settings.InstallToDir = 0;
}
//! Settings: Game Split Size
else if (ret == ++Idx)
{
if (++Settings.GameSplit >= GAMESPLIT_MAX)
{
if(DeviceHandler::GetUSBFilesystemType(Settings.partition) == PART_FS_FAT)
Settings.GameSplit = GAMESPLIT_2GB;
else
Settings.GameSplit = GAMESPLIT_NONE;
}
}
//! Settings: Install partitions
else if (ret == ++Idx)
{
switch(Settings.InstallPartitions)
{
case ONLY_GAME_PARTITION:
Settings.InstallPartitions = ALL_PARTITIONS;
break;
case ALL_PARTITIONS:
Settings.InstallPartitions = REMOVE_UPDATE_PARTITION;
break;
default:
case REMOVE_UPDATE_PARTITION:
Settings.InstallPartitions = ONLY_GAME_PARTITION;
break;
}
}
//! Settings: Sync FAT32 FS Info
else if (ret == ++Idx )
{
int choice = WindowPrompt(0, tr("Do you want to sync free space info sector on all FAT32 partitions?"), tr("Yes"), tr("Cancel"));
if(choice)
{
StartProgress(tr("Synchronizing..."), tr("Please wait..."), 0, false, false);
int partCount = DeviceHandler::GetUSBPartitionCount();
for(int i = 0; i < partCount; ++i)
{
ShowProgress(i, partCount);
if(DeviceHandler::GetUSBFilesystemType(i) == PART_FS_FAT)
{
PartitionHandle *usb = DeviceHandler::Instance()->GetUSBHandleFromPartition(i);
if(!usb) continue;
struct statvfs stats;
char drive[20];
snprintf(drive, sizeof(drive), "%s:/", usb->MountName(i));
memset(&stats, 0, sizeof(stats));
memcpy(&stats.f_flag, "SCAN", 4);
statvfs(drive, &stats);
}
}
ProgressStop();
}
}
SetOptionValues();
return MENU_NONE;
}

View File

@ -0,0 +1,47 @@
/****************************************************************************
* Copyright (C) 2011
* by Dimok
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
***************************************************************************/
#ifndef HARDDRIVE_MENU_HPP_
#define HARDDRIVE_MENU_HPP_
#include "SettingsMenu.hpp"
class HardDriveSM : public SettingsMenu
{
public:
HardDriveSM();
~HardDriveSM();
virtual int GetType() { return CHardDriveSM; };
protected:
void SetOptionValues();
int GetMenuInternal();
int OldSettingsPartition;
int OldSettingsMultiplePartitions;
int NewSettingsUSBPort;
OptionList GuiOptions;
};
#endif

View File

@ -22,22 +22,13 @@
* distribution.
***************************************************************************/
#include <unistd.h>
#include <sys/statvfs.h>
#include "LoaderSettings.hpp"
#include "Controls/DeviceHandler.hpp"
#include "usbloader/usbstorage2.h"
#include "settings/CSettings.h"
#include "prompts/ProgressWindow.h"
#include "prompts/PromptWindows.h"
#include "language/gettext.h"
#include "wad/nandtitle.h"
#include "prompts/TitleBrowser.h"
#include "usbloader/GameList.h"
#include "usbloader/wbfs.h"
#include "usbloader/utils.h"
#include "system/IosLoader.h"
#include "settings/GameTitles.h"
#include "xml/xml.h"
#include "menu.h"
static const char * OnOffText[] =
@ -74,20 +65,6 @@ static const char * LanguageText[MAX_LANGUAGE] =
trNOOP( "Console Default" )
};
static const char * InstallToText[INSTALL_TO_MAX] =
{
trNOOP( "None" ),
trNOOP( "GAMEID_Gamename" ),
trNOOP( "Gamename [GAMEID]" )
};
static const char * SplitSizeText[INSTALL_TO_MAX] =
{
trNOOP( "No Splitting" ),
trNOOP( "Split each 2GB" ),
trNOOP( "Split each 4GB" ),
};
static const char * Error002Text[] =
{
trNOOP( "No" ),
@ -95,18 +72,6 @@ static const char * Error002Text[] =
trNOOP( "Anti" )
};
static inline bool IsValidPartition(int fs_type, int cios)
{
if (IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, cios)) < 18)
{
return fs_type == PART_FS_WBFS;
}
else
{
return fs_type == PART_FS_WBFS || fs_type == PART_FS_FAT || fs_type == PART_FS_NTFS || fs_type == PART_FS_EXT;
}
}
LoaderSettings::LoaderSettings()
: SettingsMenu(tr("Loader Settings"), &GuiOptions, MENU_NONE)
{
@ -118,57 +83,14 @@ LoaderSettings::LoaderSettings()
Options->SetName(Idx++, "%s", tr( "Patch Country Strings" ));
Options->SetName(Idx++, "%s", tr( "Ocarina" ));
Options->SetName(Idx++, "%s", tr( "Boot/Standard" ));
Options->SetName(Idx++, "%s", tr( "Game/Install Partition" ));
Options->SetName(Idx++, "%s", tr( "Multiple Partitions" ));
Options->SetName(Idx++, "%s", tr( "USB Port" ));
Options->SetName(Idx++, "%s", tr( "Install directories" ));
Options->SetName(Idx++, "%s", tr( "Game Split Size" ));
Options->SetName(Idx++, "%s", tr( "Quick Boot" ));
Options->SetName(Idx++, "%s", tr( "Error 002 fix" ));
Options->SetName(Idx++, "%s", tr( "Block IOS Reload" ));
Options->SetName(Idx++, "%s", tr( "Install partitions" ));
Options->SetName(Idx++, "%s", tr( "Return To" ));
Options->SetName(Idx++, "%s", tr( "Messageboard Update" ));
Options->SetName(Idx++, "%s", tr( "Sync FAT32 FS Info" ));
OldSettingsPartition = Settings.partition;
OldSettingsMultiplePartitions = Settings.MultiplePartitions;
NewSettingsUSBPort = Settings.USBPort;
SetOptionValues();
}
LoaderSettings::~LoaderSettings()
{
//! if partition has changed, Reinitialize it
if (Settings.partition != OldSettingsPartition ||
Settings.MultiplePartitions != OldSettingsMultiplePartitions ||
Settings.USBPort != NewSettingsUSBPort)
{
WBFS_CloseAll();
if(Settings.USBPort != NewSettingsUSBPort)
{
DeviceHandler::Instance()->UnMountAllUSB();
Settings.USBPort = NewSettingsUSBPort;
DeviceHandler::SetUSBPort(Settings.USBPort);
DeviceHandler::Instance()->MountAllUSB();
if(Settings.partition >= DeviceHandler::Instance()->GetUSBHandle()->GetPartitionTotalCount())
Settings.partition = 0;
}
if(Settings.MultiplePartitions)
WBFS_OpenAll();
else
WBFS_OpenPart(Settings.partition);
//! Reload the new game titles
gameList.ReadGameList();
GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path);
}
}
void LoaderSettings::SetOptionValues()
{
int Idx = 0;
@ -194,25 +116,6 @@ void LoaderSettings::SetOptionValues()
else
Options->SetValue(Idx++, "********");
//! Settings: Game/Install Partition
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
// Get the partition name and it's size in GB's
Options->SetValue(Idx++, "%s (%.2fGB)", usbHandle->GetFSName(Settings.partition), usbHandle->GetSize(Settings.partition)/GB_SIZE);
//! Settings: Multiple Partitions
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.MultiplePartitions] ));
//! Settings: USB Port
if(NewSettingsUSBPort == 2)
Options->SetValue(Idx++, tr("Both Ports"));
else
Options->SetValue(Idx++, "%i", NewSettingsUSBPort);
//! Settings: Install directories
Options->SetValue(Idx++, "%s", tr( InstallToText[Settings.InstallToDir] ));
//! Settings: Game Split Size
Options->SetValue(Idx++, "%s", tr( SplitSizeText[Settings.GameSplit] ));
//! Settings: Quick Boot
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.quickboot] ));
@ -223,14 +126,6 @@ void LoaderSettings::SetOptionValues()
//! Settings: Block IOS Reload
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.BlockIOSReload] ));
//! Settings: Install partitions
if(Settings.InstallPartitions == ONLY_GAME_PARTITION)
Options->SetValue(Idx++, "%s", tr("Only Game Partition"));
else if(Settings.InstallPartitions == ALL_PARTITIONS)
Options->SetValue(Idx++, "%s", tr("All Partitions"));
else if(Settings.InstallPartitions == REMOVE_UPDATE_PARTITION)
Options->SetValue(Idx++, "%s", tr("Remove update"));
//! Settings: Return To
const char* TitleName = NULL;
u64 tid = NandTitles.FindU32(Settings.returnTo);
@ -238,12 +133,6 @@ void LoaderSettings::SetOptionValues()
TitleName = NandTitles.NameOf(tid);
TitleName = TitleName ? TitleName : strlen(Settings.returnTo) > 0 ? Settings.returnTo : tr(OnOffText[0]);
Options->SetValue(Idx++, "%s", TitleName);
//! Settings: Messageboard Update
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.PlaylogUpdate] ));
//! Settings: Sync FAT32 FS Info
Options->SetValue(Idx++, " ");
}
int LoaderSettings::GetMenuInternal()
@ -310,101 +199,6 @@ int LoaderSettings::GetMenuInternal()
}
}
//! Settings: Game/Install Partition
else if (ret == ++Idx)
{
// Select the next valid partition, even if that's the same one
int fs_type = 0;
int ios = IOS_GetVersion();
int retries = 20;
do
{
Settings.partition = (Settings.partition + 1) % DeviceHandler::Instance()->GetUSBHandle()->GetPartitionTotalCount();
fs_type = DeviceHandler::GetUSBFilesystemType(Settings.partition);
}
while (!IsValidPartition(fs_type, ios) && --retries > 0);
if(fs_type == PART_FS_FAT && Settings.GameSplit == GAMESPLIT_NONE)
Settings.GameSplit = GAMESPLIT_4GB;
}
//! Settings: Multiple Partitions
else if (ret == ++Idx)
{
if (++Settings.MultiplePartitions >= MAX_ON_OFF) Settings.MultiplePartitions = 0;
}
//! Settings: USB Port
else if (ret == ++Idx)
{
if(!IosLoader::IsHermesIOS())
{
WindowPrompt(tr("ERROR:"), tr("USB Port changing is only supported on Hermes cIOS."), tr("OK"));
NewSettingsUSBPort = 0;
Settings.USBPort = 0;
}
else if (++NewSettingsUSBPort >= 3) // 2 = both ports
NewSettingsUSBPort = 0;
if(NewSettingsUSBPort == 2)
{
bool allSDPaths = true;
if(strncmp(Settings.covers_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.coversFull_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.disc_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.theme_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.titlestxt_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.update_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.Cheatcodespath, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.TxtCheatcodespath, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.dolpath, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.homebrewapps_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.BcaCodepath, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.WipCodepath, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.languagefiles_path, "usb", 3) == 0)
allSDPaths = false;
else if(strncmp(Settings.WDMpath, "usb", 3) == 0)
allSDPaths = false;
if(!allSDPaths)
{
WindowPrompt(tr("ERROR:"), tr("Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."), tr("OK"));
NewSettingsUSBPort = 0;
}
}
}
//! Settings: Install directories
else if (ret == ++Idx)
{
if (++Settings.InstallToDir >= INSTALL_TO_MAX) Settings.InstallToDir = 0;
}
//! Settings: Game Split Size
else if (ret == ++Idx)
{
if (++Settings.GameSplit >= GAMESPLIT_MAX)
{
if(DeviceHandler::GetUSBFilesystemType(Settings.partition) == PART_FS_FAT)
Settings.GameSplit = GAMESPLIT_2GB;
else
Settings.GameSplit = GAMESPLIT_NONE;
}
}
//! Settings: Quick Boot
else if (ret == ++Idx)
{
@ -423,24 +217,6 @@ int LoaderSettings::GetMenuInternal()
if (++Settings.BlockIOSReload >= 3) Settings.BlockIOSReload = 0;
}
//! Settings: Install partitions
else if (ret == ++Idx)
{
switch(Settings.InstallPartitions)
{
case ONLY_GAME_PARTITION:
Settings.InstallPartitions = ALL_PARTITIONS;
break;
case ALL_PARTITIONS:
Settings.InstallPartitions = REMOVE_UPDATE_PARTITION;
break;
default:
case REMOVE_UPDATE_PARTITION:
Settings.InstallPartitions = ONLY_GAME_PARTITION;
break;
}
}
//! Settings: Return To
else if (ret == ++Idx)
{
@ -450,37 +226,6 @@ int LoaderSettings::GetMenuInternal()
snprintf(Settings.returnTo, sizeof(Settings.returnTo), "%s", tidChar);
}
//! Settings: Messageboard Update
else if (ret == ++Idx )
{
if (++Settings.PlaylogUpdate >= MAX_ON_OFF) Settings.PlaylogUpdate = 0;
}
//! Settings: Sync FAT32 FS Info
else if (ret == ++Idx )
{
int choice = WindowPrompt(0, tr("Do you want to sync free space info sector on all FAT32 partitions?"), tr("Yes"), tr("Cancel"));
if(choice)
{
StartProgress(tr("Synchronizing..."), tr("Please wait..."), 0, false, false);
PartitionHandle * usb = DeviceHandler::Instance()->GetUSBHandle();
for(int i = 0; i < usb->GetPartitionCount(); ++i)
{
ShowProgress(i, usb->GetPartitionCount());
if(strncmp(usb->GetFSName(i), "FAT", 3) == 0)
{
struct statvfs stats;
char drive[20];
snprintf(drive, sizeof(drive), "%s:/", usb->MountName(i));
memset(&stats, 0, sizeof(stats));
memcpy(&stats.f_flag, "SCAN", 4);
statvfs(drive, &stats);
}
}
ProgressStop();
}
}
SetOptionValues();
return MENU_NONE;

View File

@ -30,16 +30,11 @@ class LoaderSettings : public SettingsMenu
{
public:
LoaderSettings();
~LoaderSettings();
virtual int GetType() { return CLoaderSettings; };
protected:
void SetOptionValues();
int GetMenuInternal();
int OldSettingsPartition;
int OldSettingsMultiplePartitions;
int NewSettingsUSBPort;
OptionList GuiOptions;
};

View File

@ -59,14 +59,15 @@ ParentalControlSM::ParentalControlSM()
Options->SetName(Idx++, "%s", tr( "Block Global Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Gui Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Loader Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Parental Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Hard Drive Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Feature Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Parental Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Sound Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Theme Downloader" ));
Options->SetName(Idx++, "%s", tr( "Block Theme Menu" ));
Options->SetName(Idx++, "%s", tr( "Block Custom Paths" ));
Options->SetName(Idx++, "%s", tr( "Block Updates" ));
Options->SetName(Idx++, "%s", tr( "Block Reset Settings" ));
Options->SetName(Idx++, "%s", tr( "Block Theme Downloader" ));
Options->SetName(Idx++, "%s", tr( "Block Theme Menu" ));
Options->SetName(Idx++, "%s", tr( "Block Game Settings" ));
Options->SetName(Idx++, "%s", tr( "Block HBC Menu" ));
Options->SetName(Idx++, "%s", tr( "Block Title Launcher" ));
@ -111,15 +112,24 @@ void ParentalControlSM::SetOptionValues()
//! Settings: Block Loader Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_LOADER_SETTINGS) != 0)]));
//! Settings: Block Parental Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS) != 0)]));
//! Settings: Block Hard Drive Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_HARD_DRIVE_SETTINGS) != 0)]));
//! Settings: Block Feature Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_FEATURE_SETTINGS) != 0)]));
//! Settings: Block Parental Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS) != 0)]));
//! Settings: Block Sound Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_SOUND_SETTINGS) != 0)]));
//! Settings: Block Theme Downloader
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_DOWNLOADER) != 0)]));
//! Settings: Block Theme Menu
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_MENU) != 0)]));
//! Settings: Block Custom Paths
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS) != 0)]));
@ -129,12 +139,6 @@ void ParentalControlSM::SetOptionValues()
//! Settings: Block Reset Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_RESET_SETTINGS) != 0)]));
//! Settings: Block Theme Downloader
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_DOWNLOADER) != 0)]));
//! Settings: Block Theme Menu
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_MENU) != 0)]));
//! Settings: Block Game Settings
Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_GAME_SETTINGS) != 0)]));
@ -240,10 +244,10 @@ int ParentalControlSM::GetMenuInternal()
Settings.ParentalBlocks ^= BLOCK_LOADER_SETTINGS;
}
//! Settings: Block Parental Settings
//! Settings: Hard Drive Settings
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_PARENTAL_SETTINGS;
Settings.ParentalBlocks ^= BLOCK_HARD_DRIVE_SETTINGS;
}
//! Settings: Block Feature Settings
@ -252,12 +256,30 @@ int ParentalControlSM::GetMenuInternal()
Settings.ParentalBlocks ^= BLOCK_FEATURE_SETTINGS;
}
//! Settings: Block Parental Settings
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_PARENTAL_SETTINGS;
}
//! Settings: Block Sound Settings
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_SOUND_SETTINGS;
}
//! Settings: Block Theme Downloader
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_THEME_DOWNLOADER;
}
//! Settings: Block Theme Menu
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_THEME_MENU;
}
//! Settings: Block Custom Paths
else if (ret == ++Idx)
{
@ -276,18 +298,6 @@ int ParentalControlSM::GetMenuInternal()
Settings.ParentalBlocks ^= BLOCK_RESET_SETTINGS;
}
//! Settings: Block Theme Downloader
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_THEME_DOWNLOADER;
}
//! Settings: Block Theme Menu
else if (ret == ++Idx)
{
Settings.ParentalBlocks ^= BLOCK_THEME_MENU;
}
//! Settings: Block Game Settings
else if (ret == ++Idx)
{

View File

@ -39,6 +39,7 @@ enum
CGameLoadSM,
CUninstallSM,
CFeatureSettings,
CHardDriveSM,
};
class SettingsMenu : public GuiWindow

View File

@ -113,6 +113,7 @@ s32 IosLoader::LoadGameCios(s32 ios)
WBFS_CloseAll();
WDVD_Close();
DeviceHandler::DestroyInstance();
USBStorage2_Deinit();
ret = ReloadIosSafe(ios);

View File

@ -32,7 +32,6 @@
u32 AppEntrypoint = 0;
struct discHdr *dvdheader = NULL;
extern u32 hdd_sector_size;
extern int mountMethod;
int GameBooter::BootGCMode()
@ -126,8 +125,7 @@ int GameBooter::SetupDisc(u8 * gameID)
int ret = -1;
if(((IosLoader::IsWaninkokoIOS() && IOS_GetRevision() < 18) ||
hdd_sector_size != 512) && gameList.GetGameFS(gameID) == PART_FS_WBFS)
if(IosLoader::IsWaninkokoIOS() && IOS_GetRevision() < 18)
{
gprintf("Disc_SetUSB...");
ret = Disc_SetUSB(gameID);
@ -185,6 +183,10 @@ int GameBooter::BootGame(const char * gameID)
if(ret < 0)
return ret;
//! Remember game's USB port
int partition = gameList.GetPartitionNumber(gameHeader.id);
int usbport = DeviceHandler::PartitionToUSBPort(partition);
//! Setup game configuration from game settings. If no game settings exist use global/default.
GameCFG * game_cfg = GameSettings.GetGameCFG(gameHeader.id);
u8 videoChoice = game_cfg->video == INHERIT ? Settings.videomode : game_cfg->video;
@ -270,20 +272,14 @@ int GameBooter::BootGame(const char * gameID)
//! Shadow mload - Only needed on some games with Hermes v5.1 (Check is inside the function)
shadow_mload();
//! Remember game's USB port
int usbport = USBStorage2_GetPort();
gprintf("Shutting down devices...\n");
//! Flush all caches and close up all devices
WBFS_CloseAll();
DeviceHandler::DestroyInstance();
if(Settings.USBPort == 2)
{
//! Reset USB port because device handler changes it for cache flushing
USBStorage2_Init();
USBStorage2_SetPort(usbport);
USBStorage2_Deinit();
}
USBStorage2_Deinit();
USB_Deinitialize();
//! Modify Wii Message Board to display the game starting here

View File

@ -167,10 +167,10 @@ int GameList::ReadGameList()
}
else
{
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
int cnt = 0;
int partitions = DeviceHandler::GetUSBPartitionCount();
for(int part = 0; part < usbHandle->GetPartitionTotalCount(); ++part)
for(int part = 0; part < partitions; ++part)
{
int ret = InternalReadList(part);
if(ret > 0) cnt += ret;

View File

@ -14,11 +14,12 @@
static int FindGamePartition()
{
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
int partCount = DeviceHandler::GetUSBPartitionCount();
// Loop through all WBFS partitions first to check them in case IOS249 Rev < 18
for(int i = 0; i < usbHandle->GetPartitionCount(); ++i)
for(int i = 0; i < partCount; ++i)
{
if(strncmp(usbHandle->GetFSName(i), "WBFS", 4) != 0)
if(DeviceHandler::GetUSBFilesystemType(i) != PART_FS_WBFS)
continue;
if (WBFS_OpenPart(i) == 0)
@ -33,11 +34,11 @@ static int FindGamePartition()
return -1;
// Loop through FAT/NTFS/EXT partitions, and find the first partition with games on it (if there is one)
for(int i = 0; i < usbHandle->GetPartitionCount(); ++i)
for(int i = 0; i < partCount; ++i)
{
if(strncmp(usbHandle->GetFSName(i), "NTFS", 4) != 0 &&
strncmp(usbHandle->GetFSName(i), "FAT", 3) != 0 &&
strncmp(usbHandle->GetFSName(i), "LINUX", 5) != 0)
if(DeviceHandler::GetUSBFilesystemType(i) != PART_FS_NTFS &&
DeviceHandler::GetUSBFilesystemType(i) != PART_FS_FAT &&
DeviceHandler::GetUSBFilesystemType(i) != PART_FS_EXT)
{
continue;
}
@ -64,7 +65,6 @@ static int FindGamePartition()
static int PartitionChoice()
{
int ret = -1;
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
int choice = WindowPrompt(tr( "No WBFS or FAT/NTFS/EXT partition found" ),
tr( "You need to select or format a partition" ), tr( "Select" ), tr( "Format" ), tr( "Return" ));
@ -79,9 +79,9 @@ static int PartitionChoice()
if(part_num >= 0)
{
if(IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, IOS_GetVersion())) < 18 &&
(strncmp(usbHandle->GetFSName(part_num), "NTFS", 4) == 0 ||
strncmp(usbHandle->GetFSName(part_num), "FAT", 3) == 0 ||
strncmp(usbHandle->GetFSName(part_num), "LINUX", 5) == 0))
(DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_NTFS ||
DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_FAT ||
DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_EXT))
{
WindowPrompt(tr("Warning:"), tr("You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."), tr("OK"));
}

View File

@ -161,7 +161,7 @@ int frag_remap(FragList *ff, FragList *log, FragList *phy)
return 0;
}
int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset)
int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset, const u32 hdd_sector_size)
{
struct stat st;
FragList *fs = NULL;
@ -220,7 +220,7 @@ int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32
// if wbfs file format, remap.
wbfs_disc_t *d = WBFS_OpenDisc(id);
if (!d) { ret_val = -4; WBFS_CloseDisc(d); goto out; }
ret = wbfs_get_fragments(d, &frag_append, fs);
ret = wbfs_get_fragments(d, &frag_append, fs, hdd_sector_size);
WBFS_CloseDisc(d);
if (ret) { ret_val = -5; goto out; }
}
@ -234,7 +234,7 @@ int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32
wbfs_disc_t *d = WBFS_OpenDisc(id);
if (!d) { ret_val = -4; goto out; }
frag_init(fw, MAX_FRAG);
ret = wbfs_get_fragments(d, &frag_append, fw);
ret = wbfs_get_fragments(d, &frag_append, fw, hdd_sector_size);
if (ret) { ret_val = -5; goto out; }
WBFS_CloseDisc(d);
// DEBUG: frag_list->num = MAX_FRAG-10; // stress test

View File

@ -39,7 +39,7 @@ int frag_get(FragList *ff, u32 offset, u32 count, u32 *poffset, u32 *psector, u3
int frag_remap(FragList *ff, FragList *log, FragList *phy);
int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset);
int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset, const u32 hdd_sector_size);
int get_frag_list(u8 *id);
int set_frag_list(u8 *id);

View File

@ -59,8 +59,9 @@
#define isMEM2Buffer(p) (((u32) p & 0x10000000) != 0)
#define MAX_BUFFER_SECTORS 256
#define UMS_HEAPSIZE 0x8000
#define MAX_SECTOR_SIZE 4096
#define MAX_BUFFER_SECTORS 128
#define UMS_HEAPSIZE 2*1024
/* Variables */
static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/usb2";
@ -69,15 +70,14 @@ static char fs3[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ehc";
static u8 * mem2_ptr = NULL;
static s32 hid = -1, fd = -1;
static u32 usb2_port = 0; //autodetect mode (works only with hermes ios & rodries ehcmodule)
u32 hdd_sector_size = 512;
static u32 usb2_port = -1; //current USB port
bool hddInUse[2] = { false, false };
u32 hdd_sector_size[2] = { 512, 512 };
s32 USBStorage2_Init(void)
s32 USBStorage2_Init(u32 port)
{
s32 ret;
/* Already open */
if (fd >= 0) return 0;
if(hddInUse[port])
return 0;
/* Create heap */
if (hid < 0)
@ -87,46 +87,33 @@ s32 USBStorage2_Init(void)
}
/* Open USB device */
fd = IOS_Open(fs, 0);
if (fd < 0) fd = IOS_Open(fs, 0);
if (fd < 0) fd = IOS_Open(fs2, 0);
if (fd < 0) fd = IOS_Open(fs3, 0);
if (fd < 0) return fd;
IOS_IoctlvFormat(hid, fd, USB_IOCTL_SET_PORT, "i:", usb2_port);
USBStorage2_SetPort(port);
/* Initialize USB storage */
ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":");
IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":");
/* Get device capacity */
if (USBStorage2_GetCapacity(&hdd_sector_size) == 0)
{
ret = IPC_ENOENT;
goto err;
}
if (USBStorage2_GetCapacity(port, &hdd_sector_size[port]) == 0)
return IPC_ENOENT;
hddInUse[port] = true;
return 0; // 0->HDD, 1->DVD
err:
/* Close USB device */
if (fd >= 0)
{
IOS_Close(fd);
fd = -1;
}
return ret;
}
void USBStorage2_Deinit(void)
void USBStorage2_Deinit()
{
/* Close USB device */
if (fd >= 0)
{
IOS_Close(fd);
IOS_Close(fd); // not sure to close the fd is needed
fd = -1;
}
hdd_sector_size = 512;
}
s32 USBStorage2_SetPort(u32 port)
@ -154,13 +141,17 @@ s32 USBStorage2_GetPort()
return usb2_port;
}
s32 USBStorage2_Watchdog(u32 on_off)
s32 USBStorage2_GetCapacity(u32 port, u32 *_sector_size)
{
if (fd >= 0)
{
s32 ret;
u32 sector_size = 0;
USBStorage2_SetPort(port);
ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WATCHDOG, "i:", on_off);
ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", &sector_size);
if (ret && _sector_size) *_sector_size = sector_size;
return ret;
}
@ -168,23 +159,7 @@ s32 USBStorage2_Watchdog(u32 on_off)
return IPC_ENOENT;
}
s32 USBStorage2_GetCapacity(u32 *_sector_size)
{
if (fd >= 0)
{
s32 ret;
ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", &hdd_sector_size);
if (ret && _sector_size) *_sector_size = hdd_sector_size;
return ret;
}
return IPC_ENOENT;
}
s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer)
s32 USBStorage2_ReadSectors(u32 port, u32 sector, u32 numSectors, void *buffer)
{
u8 *buf = (u8 *) buffer;
s32 ret = -1;
@ -193,14 +168,16 @@ s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer)
if (fd < 0) return fd;
if (!mem2_ptr)
mem2_ptr = (u8 *) MEM2_alloc(hdd_sector_size * MAX_BUFFER_SECTORS);
mem2_ptr = (u8 *) MEM2_alloc(MAX_SECTOR_SIZE * MAX_BUFFER_SECTORS);
USBStorage2_SetPort(port);
s32 read_secs, read_size;
while(numSectors > 0)
{
read_secs = numSectors > MAX_BUFFER_SECTORS ? MAX_BUFFER_SECTORS : numSectors;
read_size = read_secs*hdd_sector_size;
read_size = read_secs*hdd_sector_size[port];
// Do not read more than MAX_BUFFER_SECTORS sectors at once and create a mem overflow!
if (!isMEM2Buffer(buffer))
@ -227,7 +204,7 @@ s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer)
return ret;
}
s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer)
s32 USBStorage2_WriteSectors(u32 port, u32 sector, u32 numSectors, const void *buffer)
{
u8 *buf = (u8 *) buffer;
s32 ret = -1;
@ -237,14 +214,16 @@ s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer)
/* Device not opened */
if (!mem2_ptr)
mem2_ptr = (u8 *) MEM2_alloc(hdd_sector_size * MAX_BUFFER_SECTORS);
mem2_ptr = (u8 *) MEM2_alloc(MAX_SECTOR_SIZE * MAX_BUFFER_SECTORS);
USBStorage2_SetPort(port);
s32 write_size, write_secs;
while(numSectors > 0)
{
write_secs = numSectors > MAX_BUFFER_SECTORS ? MAX_BUFFER_SECTORS : numSectors;
write_size = write_secs*hdd_sector_size;
write_size = write_secs*hdd_sector_size[port];
/* MEM1 buffer */
if (!isMEM2Buffer(buffer))
@ -274,22 +253,22 @@ s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer)
static bool __usbstorage_Startup(void)
{
return USBStorage2_Init() >= 0;
return USBStorage2_Init(0) >= 0;
}
static bool __usbstorage_IsInserted(void)
{
return (USBStorage2_GetCapacity(NULL) != 0);
return (USBStorage2_GetCapacity(0, NULL) != 0);
}
static bool __usbstorage_ReadSectors(u32 sector, u32 numSectors, void *buffer)
{
return (USBStorage2_ReadSectors(sector, numSectors, buffer) >= 0);
return (USBStorage2_ReadSectors(0, sector, numSectors, buffer) >= 0);
}
static bool __usbstorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer)
{
return (USBStorage2_WriteSectors(sector, numSectors, buffer) >= 0);
return (USBStorage2_WriteSectors(0, sector, numSectors, buffer) >= 0);
}
static bool __usbstorage_ClearStatus(void)
@ -299,11 +278,12 @@ static bool __usbstorage_ClearStatus(void)
static bool __usbstorage_Shutdown(void)
{
USBStorage2_Deinit();
hddInUse[0] = false;
hdd_sector_size[0] = 512;
return true;
}
const DISC_INTERFACE __io_usbstorage2 = {
const DISC_INTERFACE __io_usbstorage2_port0 = {
DEVICE_TYPE_WII_UMS, FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB,
(FN_MEDIUM_STARTUP) &__usbstorage_Startup,
(FN_MEDIUM_ISINSERTED) &__usbstorage_IsInserted,
@ -312,3 +292,40 @@ const DISC_INTERFACE __io_usbstorage2 = {
(FN_MEDIUM_CLEARSTATUS) &__usbstorage_ClearStatus,
(FN_MEDIUM_SHUTDOWN) &__usbstorage_Shutdown
};
static bool __usbstorage_Startup2(void)
{
return USBStorage2_Init(1) >= 0;
}
static bool __usbstorage_IsInserted2(void)
{
return (USBStorage2_GetCapacity(1, NULL) != 0);
}
static bool __usbstorage_ReadSectors2(u32 sector, u32 numSectors, void *buffer)
{
return (USBStorage2_ReadSectors(1, sector, numSectors, buffer) >= 0);
}
static bool __usbstorage_WriteSectors2(u32 sector, u32 numSectors, const void *buffer)
{
return (USBStorage2_WriteSectors(1, sector, numSectors, buffer) >= 0);
}
static bool __usbstorage_Shutdown2(void)
{
hddInUse[1] = false;
hdd_sector_size[1] = 512;
return true;
}
const DISC_INTERFACE __io_usbstorage2_port1 = {
DEVICE_TYPE_WII_UMS, FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB,
(FN_MEDIUM_STARTUP) &__usbstorage_Startup2,
(FN_MEDIUM_ISINSERTED) &__usbstorage_IsInserted2,
(FN_MEDIUM_READSECTORS) &__usbstorage_ReadSectors2,
(FN_MEDIUM_WRITESECTORS) &__usbstorage_WriteSectors2,
(FN_MEDIUM_CLEARSTATUS) &__usbstorage_ClearStatus,
(FN_MEDIUM_SHUTDOWN) &__usbstorage_Shutdown2
};

View File

@ -9,22 +9,20 @@ extern "C"
#endif
/* Prototypes */
s32 USBStorage2_Init(void);
void USBStorage2_Deinit(void);
s32 USBStorage2_Umount(void);
s32 USBStorage2_GetCapacity(u32 *);
s32 USBStorage2_Init(u32 port);
void USBStorage2_Deinit();
s32 USBStorage2_GetCapacity(u32 port, u32 *size);
s32 USBStorage2_ReadSectors(u32, u32, void *);
s32 USBStorage2_WriteSectors(u32, u32, const void *);
s32 USBStorage2_Watchdog(u32 on_off);
s32 USBStorage2_ReadSectors(u32 port, u32 sector, u32 numSectors, void *buffer);
s32 USBStorage2_WriteSectors(u32 port, u32 sector, u32 numSectors, const void *buffer);
s32 USBStorage2_SetPort(u32 port);
s32 USBStorage2_GetPort();
#define DEVICE_TYPE_WII_UMS (('W'<<24)|('U'<<16)|('M'<<8)|'S')
extern const DISC_INTERFACE __io_usbstorage2;
extern const DISC_INTERFACE __io_usbstorage2_port0;
extern const DISC_INTERFACE __io_usbstorage2_port1;
#ifdef __cplusplus
}

View File

@ -28,8 +28,6 @@ wbfs_disc_t* WBFS_OpenDisc(u8 *discid)
if(!VALID(part))
return NULL;
DeviceHandler::SetUSBPortFromPartition(part);
return WbfsList[part]->OpenDisc(discid);
}
@ -42,8 +40,6 @@ void WBFS_CloseDisc(wbfs_disc_t *disc)
if(!VALID(part_num))
return;
DeviceHandler::SetUSBPortFromPartition(part_num);
WbfsList[part_num]->CloseDisc(disc);
}
@ -55,10 +51,9 @@ s32 WBFS_Init(u32 device)
s32 WBFS_OpenAll()
{
int ret = -1;
int partCount = DeviceHandler::GetUSBPartitionCount();
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
for(int i = 0; i < usbHandle->GetPartitionTotalCount(); ++i)
for(int i = 0; i < partCount; ++i)
{
if(WBFS_OpenPart(i) == 0)
ret = 0;
@ -69,14 +64,9 @@ s32 WBFS_OpenAll()
s32 WBFS_OpenPart(int part_num)
{
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
if(part_num < 0 || part_num >= usbHandle->GetPartitionTotalCount())
return -1;
//! No need to switch ports on other partitions than WBFS
//! the open() function does not actually read from drive there.
if(strncmp(usbHandle->GetFSName(part_num), "WBFS", 4) == 0)
DeviceHandler::SetUSBPortFromPartition(part_num);
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(part_num);
if(!usbHandle || part_num < 0 || part_num >= DeviceHandler::GetUSBPartitionCount())
return -1;
// close
WBFS_Close(part_num);
@ -84,23 +74,26 @@ s32 WBFS_OpenPart(int part_num)
if(part_num >= (int) WbfsList.size())
WbfsList.resize(part_num+1);
gprintf("\tWBFS_OpenPart: filesystem: %s, start sector %u, sector count: %u\n", usbHandle->GetFSName(part_num), usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num));
int portPart = DeviceHandler::PartitionToPortPartition(part_num);
int usbPort = DeviceHandler::PartitionToUSBPort(part_num);
if (strncmp(usbHandle->GetFSName(part_num), "FAT", 3) == 0)
gprintf("\tWBFS_OpenPart: filesystem: %s, start sector %u, sector count: %u\n", usbHandle->GetFSName(portPart), usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart));
if (strncmp(usbHandle->GetFSName(portPart), "FAT", 3) == 0)
{
WbfsList[part_num] = new Wbfs_Fat(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num);
WbfsList[part_num] = new Wbfs_Fat(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort);
}
else if (strncmp(usbHandle->GetFSName(part_num), "NTFS", 4) == 0)
else if (strncmp(usbHandle->GetFSName(portPart), "NTFS", 4) == 0)
{
WbfsList[part_num] = new Wbfs_Ntfs(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num);
WbfsList[part_num] = new Wbfs_Ntfs(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort);
}
else if (strncmp(usbHandle->GetFSName(part_num), "LINUX", 5) == 0)
else if (strncmp(usbHandle->GetFSName(portPart), "LINUX", 5) == 0)
{
WbfsList[part_num] = new Wbfs_Ext(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num);
WbfsList[part_num] = new Wbfs_Ext(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort);
}
else if (strncmp(usbHandle->GetFSName(part_num), "WBFS", 4) == 0)
else if (strncmp(usbHandle->GetFSName(portPart), "WBFS", 4) == 0)
{
WbfsList[part_num] = new Wbfs_Wbfs(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num);
WbfsList[part_num] = new Wbfs_Wbfs(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort);
}
else
{
@ -122,11 +115,6 @@ bool WBFS_Close(int part_num)
if(!VALID(part_num))
return false;
//! No need to switch ports on other partitions than WBFS
//! the close() function does not actually write to drive there.
if(WbfsList[part_num]->GetFSType() == PART_FS_WBFS)
DeviceHandler::SetUSBPortFromPartition(part_num);
delete WbfsList[part_num];
WbfsList[part_num] = NULL;
@ -143,9 +131,9 @@ void WBFS_CloseAll()
WBFS_Close(i);
}
s32 WBFS_Format(u32 lba, u32 size)
s32 WBFS_Format(u32 lba, u32 size, u32 port)
{
Wbfs_Wbfs Part(WBFS_MIN_DEVICE, lba, size);
Wbfs_Wbfs Part(WBFS_MIN_DEVICE, lba, size, port);
return Part.Format();
}
@ -155,7 +143,6 @@ s32 WBFS_GetCount(int part_num, u32 *count)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
int ret = WbfsList[part_num]->GetCount(count);
return ret;
@ -166,8 +153,6 @@ s32 WBFS_GetHeaders(int part_num, struct discHdr *outbuf, u32 cnt, u32 len)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->GetHeaders(outbuf, cnt, len);
}
@ -177,8 +162,6 @@ s32 WBFS_CheckGame(u8 *discid)
if(!VALID(part_num))
return 0;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->CheckGame(discid);
}
@ -187,8 +170,6 @@ s32 WBFS_AddGame(void)
if(!VALID(Settings.partition))
return -1;
DeviceHandler::SetUSBPortFromPartition(Settings.partition);
return WbfsList[Settings.partition]->AddGame();
}
@ -198,8 +179,6 @@ s32 WBFS_RemoveGame(u8 *discid)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->RemoveGame(discid);
}
@ -209,8 +188,6 @@ s32 WBFS_GameSize(u8 *discid, f32 *size)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->GameSize(discid, size);
}
@ -219,8 +196,6 @@ s32 WBFS_DiskSpace(f32 *used, f32 *free)
if(!VALID(Settings.partition))
return -1;
DeviceHandler::SetUSBPortFromPartition(Settings.partition);
return WbfsList[Settings.partition]->DiskSpace(used, free);
}
@ -230,8 +205,6 @@ s32 WBFS_RenameGame(u8 *discid, const void *newname)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->RenameGame(discid, newname);
}
@ -241,8 +214,6 @@ s32 WBFS_ReIDGame(u8 *discid, const void *newID)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->ReIDGame(discid, newID);
}
@ -251,8 +222,6 @@ u64 WBFS_EstimeGameSize(void)
if(!VALID(Settings.partition))
return 0;
DeviceHandler::SetUSBPortFromPartition(Settings.partition);
return WbfsList[Settings.partition]->EstimateGameSize();
}
@ -262,8 +231,6 @@ int WBFS_GetFragList(u8 *id)
if(!VALID(part_num))
return -1;
DeviceHandler::SetUSBPortFromPartition(part_num);
return WbfsList[part_num]->GetFragList(id);
}

View File

@ -20,7 +20,7 @@ extern "C"
/* Prototypes */
s32 WBFS_Init(u32 device);
s32 WBFS_Format(u32 lba, u32 size);
s32 WBFS_Format(u32 lba, u32 size, u32 port);
s32 WBFS_GetCount(int part, u32 *count);
s32 WBFS_GetHeaders(int part, struct discHdr *, u32, u32);
s32 WBFS_CheckGame(u8 *gameid);

View File

@ -12,24 +12,22 @@
#include "wbfs_base.h"
Wbfs::Wbfs(u32 l, u32 s, u32 part)
: hdd(NULL), lba(l), size(s), partition(part)
Wbfs::Wbfs(u32 l, u32 s, u32 part, u32 port)
: hdd(NULL), lba(l), size(s), partition(part), usbport(port)
{
}
s32 Wbfs::Init(u32 device)
{
s32 ret;
const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface();
switch (WBFS_DEVICE_USB)
{
case WBFS_DEVICE_USB:
/* Initialize USB storage */
ret = handle->startup();
if (ret)
if (DeviceHandler::GetUSBPartitionCount() > 0)
{
currentHandle = handle;
/* Setup callbacks */
readCallback = __ReadUSB;
writeCallback = __WriteUSB;

View File

@ -12,7 +12,7 @@
class Wbfs
{
public:
Wbfs(u32 lba, u32 size, u32 part);
Wbfs(u32 lba, u32 size, u32 part, u32 usbport);
~Wbfs() { Close(); };
static s32 Init(u32);
s32 CheckGame(u8 *);
@ -40,6 +40,7 @@ class Wbfs
const u32 lba;
const u32 size;
const u32 partition;
const u32 usbport;
};
#endif //_H

View File

@ -6,8 +6,8 @@
class Wbfs_Ext: public Wbfs_Fat
{
public:
Wbfs_Ext(u32 lba, u32 size, u32 part) :
Wbfs_Fat(lba, size, part)
Wbfs_Ext(u32 lba, u32 size, u32 part, u32 port) :
Wbfs_Fat(lba, size, part, port)
{
}
virtual u8 GetFSType(void) { return PART_FS_EXT; }

View File

@ -36,10 +36,10 @@ using namespace std;
static const char wbfs_fat_dir[] = "/wbfs";
static const char invalid_path[] = "/\\:|<>?*\"'";
extern u32 hdd_sector_size;
extern u32 hdd_sector_size[2];
Wbfs_Fat::Wbfs_Fat(u32 lba, u32 size, u32 part) :
Wbfs(lba, size, part), fat_hdr_list(NULL), fat_hdr_count(0)
Wbfs_Fat::Wbfs_Fat(u32 lba, u32 size, u32 part, u32 port) :
Wbfs(lba, size, part, port), fat_hdr_list(NULL), fat_hdr_count(0)
{
memset(wbfs_fs_drive, 0, sizeof(wbfs_fs_drive));
}
@ -48,13 +48,13 @@ s32 Wbfs_Fat::Open()
{
Close();
PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle();
if(partition < (u32) usbHandle->GetPartitionTotalCount())
if(partition < (u32) DeviceHandler::GetUSBPartitionCount())
{
if (lba == usbHandle->GetLBAStart(partition))
PartitionHandle *usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(partition);
int portPart = DeviceHandler::PartitionToPortPartition(partition);
if (lba == usbHandle->GetLBAStart(portPart))
{
sprintf(wbfs_fs_drive, "%s:", usbHandle->MountName(partition));
sprintf(wbfs_fs_drive, "%s:", usbHandle->MountName(portPart));
return 0;
}
}
@ -90,7 +90,7 @@ wbfs_disc_t* Wbfs_Fat::OpenDisc(u8 *discid)
wbfs_disc_t *iso_file = (wbfs_disc_t *) calloc(sizeof(wbfs_disc_t), 1);
if (iso_file == NULL) return NULL;
// mark with a special wbfs_part
wbfs_iso_file.wbfs_sec_sz = 512;
wbfs_iso_file.wbfs_sec_sz = hdd_sector_size[usbport];
iso_file->p = &wbfs_iso_file;
iso_file->header = (wbfs_disc_info_t*) malloc(sizeof(wbfs_disc_info_t));
if(!iso_file->header)
@ -307,14 +307,14 @@ u64 Wbfs_Fat::EstimateGameSize()
{
wbfs_t *part = NULL;
u64 size = (u64) 143432 * 2 * 0x8000ULL;
u32 n_sector = size / hdd_sector_size;
u32 wii_sec_sz;
u32 n_sector = size / hdd_sector_size[usbport];
// init a temporary dummy part
// as a placeholder for wbfs_size_disc
part = wbfs_open_partition(nop_rw_sector, nop_rw_sector, NULL, hdd_sector_size, n_sector, 0, 1);
wbfs_set_force_mode(1);
part = wbfs_open_partition(nop_rw_sector, nop_rw_sector, NULL, hdd_sector_size[usbport], n_sector, 0, 1);
wbfs_set_force_mode(0);
if (!part) return -1;
wii_sec_sz = part->wii_sec_sz;
partition_selector_t part_sel = (partition_selector_t) Settings.InstallPartitions;
@ -649,12 +649,17 @@ wbfs_t* Wbfs_Fat::OpenPart(char *fname)
// wbfs 'partition' file
ret = split_open(&split, fname);
if (ret) return NULL;
wbfs_set_force_mode(1);
part = wbfs_open_partition(split_read_sector, nop_rw_sector, //readonly //split_write_sector,
&split, hdd_sector_size, split.total_sec, 0, 0);
&split, hdd_sector_size[usbport], split.total_sec, 0, 0);
wbfs_set_force_mode(0);
if (!part)
{
split_close(&split);
}
return part;
}
@ -732,11 +737,15 @@ wbfs_t* Wbfs_Fat::CreatePart(u8 *id, char *path)
return NULL;
}
part = wbfs_open_partition(split_read_sector, split_write_sector, &split, hdd_sector_size, n_sector, 0, 1);
wbfs_set_force_mode(1);
part = wbfs_open_partition(split_read_sector, split_write_sector, &split, hdd_sector_size[usbport], n_sector, 0, 1);
wbfs_set_force_mode(0);
if (!part)
{
split_close(&split);
}
return part;
}
@ -813,5 +822,5 @@ int Wbfs_Fat::GetFragList(u8 *id)
int ret = FindFilename(id, fname, sizeof(fname));
if (!ret) return -1;
return get_frag_list_for_file(fname, id, GetFSType(), lba);
return get_frag_list_for_file(fname, id, GetFSType(), lba, hdd_sector_size[usbport]);
}

View File

@ -10,7 +10,7 @@
class Wbfs_Fat: public Wbfs
{
public:
Wbfs_Fat(u32 lba, u32 size, u32 part);
Wbfs_Fat(u32 lba, u32 size, u32 part, u32 port);
virtual s32 Open();
virtual void Close();

View File

@ -6,8 +6,8 @@
class Wbfs_Ntfs: public Wbfs_Fat
{
public:
Wbfs_Ntfs(u32 lba, u32 size, u32 part) :
Wbfs_Fat(lba, size, part)
Wbfs_Ntfs(u32 lba, u32 size, u32 part, u32 port) :
Wbfs_Fat(lba, size, part, port)
{
}
virtual u8 GetFSType(void) { return PART_FS_NTFS; }

View File

@ -12,7 +12,6 @@
rw_sector_callback_t readCallback = NULL;
rw_sector_callback_t writeCallback = NULL;
const DISC_INTERFACE * currentHandle = NULL;
s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf)
{
@ -80,7 +79,7 @@ s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf)
if (sectors > MAX_NB_SECTORS) sectors = MAX_NB_SECTORS;
/* USB read */
ret = currentHandle->readSectors(partition_offset + cnt, sectors, ptr);
ret = info->handle->readSectors(partition_offset + cnt, sectors, ptr);
if (!ret) return -1;
/* Increment counter */
@ -108,7 +107,7 @@ s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf)
if (sectors > MAX_NB_SECTORS) sectors = MAX_NB_SECTORS;
/* USB write */
ret = currentHandle->writeSectors(partition_offset + cnt, sectors, ptr);
ret = info->handle->writeSectors(partition_offset + cnt, sectors, ptr);
if (!ret) return -1;
/* Increment counter */

View File

@ -15,11 +15,11 @@ extern "C"
u32 hdd_sector_size;
u32 partition_lba;
u32 partition_num_sec;
const DISC_INTERFACE * handle;
} WBFS_PartInfo;
extern rw_sector_callback_t readCallback;
extern rw_sector_callback_t writeCallback;
extern const DISC_INTERFACE * currentHandle;
s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf);
s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf);

View File

@ -1,21 +1,24 @@
#include "wbfs_wbfs.h"
#include "Controls/DeviceHandler.hpp"
#include "prompts/ProgressWindow.h"
#include "settings/CSettings.h"
#include "usbloader/wbfs.h"
#include "usbloader/usbstorage2.h"
#include "wbfs_rw.h"
#define MAX_WBFS_SECTORSIZE 4096
extern u32 hdd_sector_size;
extern u32 hdd_sector_size[2];
s32 Wbfs_Wbfs::Open()
{
wbfs_t *part = NULL;
PartInfo.wbfs_sector_size = MAX_WBFS_SECTORSIZE;
PartInfo.hdd_sector_size = hdd_sector_size;
PartInfo.hdd_sector_size = hdd_sector_size[usbport];
PartInfo.partition_lba = lba;
PartInfo.partition_num_sec = size;
PartInfo.handle = (usbport == 0) ? DeviceHandler::GetUSB0Interface() : DeviceHandler::GetUSB1Interface();
u8 * buffer = (u8 *) malloc(MAX_WBFS_SECTORSIZE);
memset(buffer, 0, MAX_WBFS_SECTORSIZE);
@ -80,17 +83,18 @@ void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc)
s32 Wbfs_Wbfs::Format()
{
WBFS_PartInfo HDD_Inf;
HDD_Inf.wbfs_sector_size = hdd_sector_size;
HDD_Inf.hdd_sector_size = hdd_sector_size;
HDD_Inf.wbfs_sector_size = hdd_sector_size[usbport];
HDD_Inf.hdd_sector_size = hdd_sector_size[usbport];
HDD_Inf.partition_lba = lba;
HDD_Inf.partition_num_sec = size;
HDD_Inf.handle = (usbport == 0) ? DeviceHandler::GetUSB0Interface() : DeviceHandler::GetUSB1Interface();
//! If size is over 500GB in sectors and sector size is 512
//! set 2048 as hdd sector size
if(size > 1048576000 && hdd_sector_size == 512)
if(size > 1048576000 && hdd_sector_size[usbport] == 512)
{
HDD_Inf.wbfs_sector_size = 2048;
HDD_Inf.partition_num_sec = size/(2048/hdd_sector_size);
HDD_Inf.partition_num_sec = size/(2048/hdd_sector_size[usbport]);
}
wbfs_t *partition = NULL;
@ -221,5 +225,5 @@ s32 Wbfs_Wbfs::GetFragList(u8 *id)
{
//! Doesn't have to be called ".iso" just something different than .wbfs but with a dot.
//! So that the code doesn't fail.
return get_frag_list_for_file((char *) ".iso", id, GetFSType(), lba);
return get_frag_list_for_file((char *) ".iso", id, GetFSType(), lba, hdd_sector_size[usbport]);
}

View File

@ -9,8 +9,8 @@
class Wbfs_Wbfs: public Wbfs
{
public:
Wbfs_Wbfs(u32 device, u32 lba, u32 size) :
Wbfs(device, lba, size)
Wbfs_Wbfs(u32 device, u32 lba, u32 size, u32 port) :
Wbfs(device, lba, size, port)
{
}

View File

@ -665,7 +665,7 @@ bool WiiTDB::GetGenreList(const char * id, vector<string> & genre)
++ptr;
}
while(genre_num > 0 && genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ')
while(genre.size() > genre_num && genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ')
genre[genre_num].erase(genre[genre_num].size()-1);
delete [] data;