* added nand channel emulation (big thanks to TriiForce guys and Miigotu for laying out the foundation)

* added direct list of emu nand channels without activating emu nand (for speed up)
* removed autoclose of search bar and changed the search engine to have both methods
* added setting for switching "Beginning" and "Content" search methods and a quick switch button on search window
* added autocomplete if only one search character is available and more than one match
* added seperate path and setting for emu nand channels/saves
* added caching of emu nand channel titles
* fixed a few alignment issues when activating emu nand (thanks daveboal)
* some minor clean ups

TODO/Next Rev:
* add channels banner sounds
* remove unneeded game settings options on channels
This commit is contained in:
strtoul 2011-11-12 18:14:09 +00:00
parent 164889c917
commit c51b2304c2
67 changed files with 1378 additions and 361 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>2.3 r1127</version>
<release_date>201111111858</release_date>
<version>2.3 r1128</version>
<release_date>201111112324</release_date>
<!-- // remove this line to enable arguments
<arguments>
<arg>--ios=250</arg>

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\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"
@ -202,6 +202,9 @@ msgstr "Zpet do HBC nebo Wii nabídky"
msgid "Backgroundmusic"
msgstr "Hudba na pozadí"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Velké díky pro:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "Zmena cesty prehrávání"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Soubor s cheaty je prázdný"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Konzole musí být odemcena pro tuto zmenu"
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Pokracovat pri instalaci hry"
@ -1006,6 +1015,9 @@ msgstr "Nahrát soubor z: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Spustit tento DOL jako náhradní DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Nstavení spoustení"
@ -1063,6 +1075,12 @@ msgstr "Mód hudební smycky"
msgid "Music Volume"
msgstr "Hlasitost hudby"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Žádný"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Sporic obrazovky"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Vyber"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Fox888[dk]\n"
"Language-Team: [dk]\n"
@ -202,6 +202,9 @@ msgstr "Tilbage til HBC eller Wii-menuen"
msgid "Backgroundmusic"
msgstr "Baggrundsmusik"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "En stor tak til:"
@ -314,6 +317,9 @@ msgstr "Kategorier:"
msgid "Change Play Path"
msgstr "Ændre sti til musik"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Cheatfilen er tom"
@ -363,6 +369,9 @@ msgstr "Konsollen skal være låst op for at kunne bruge dette."
msgid "Console should be unlocked to modify it."
msgstr "Konsollen skal være låst op for ændre dette."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Fortsæt med at installere spillet?"
@ -1006,6 +1015,9 @@ msgstr "Indlæs fil fra %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Indlæs denne DOL som alternativ DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader Indstillinger"
@ -1063,6 +1075,12 @@ msgstr "Musik i løkke"
msgid "Music Volume"
msgstr "Lydstyrke"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Sti til Nand Emu."
@ -1075,6 +1093,9 @@ msgstr "Nand emulering er kun mulig med d2x cIOS"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "Nand emulering virker kun med FAT/FAT32 partitioner!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Ingen"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Pauseskærm"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Vælg"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2011-06-30 14:22+0100\n"
"Last-Translator: glowy\n"
"Language-Team: tj_cool, glowy\n"
@ -202,6 +202,9 @@ msgstr "Terug naar HBC of Wii Menu"
msgid "Backgroundmusic"
msgstr "Achtergrondmuziek"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Grote dank aan:"
@ -314,6 +317,9 @@ msgstr "Categorieën:"
msgid "Change Play Path"
msgstr "Verander afspeel locatie"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Cheatbestand is leeg"
@ -363,6 +369,9 @@ msgstr "Console moet worden vrijgegeven om dit te kunnen gebruiken."
msgid "Console should be unlocked to modify it."
msgstr "Console moet worden vrijgegeven om te wijzigen."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Installatie spel voortzetten?"
@ -1006,6 +1015,9 @@ msgstr "Laad bestand van %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Deze DOL als alt DOL gebruiken?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader Instellingen"
@ -1063,6 +1075,12 @@ msgstr "Muziek Herhaal Mode"
msgid "Music Volume"
msgstr "Muziekvolume"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Geen"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Schermbeveiliging"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Selecteer"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -202,6 +202,9 @@ msgstr ""
msgid "Backgroundmusic"
msgstr ""
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr ""
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr ""
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr ""
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr ""
@ -1006,6 +1015,9 @@ msgstr ""
msgid "Load this DOL as alternate DOL?"
msgstr ""
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr ""
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr ""
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr ""
msgid "Search Mode"
msgstr ""
msgid "Select"
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-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: c64rmx\n"
"Language-Team: \n"
@ -202,6 +202,9 @@ msgstr "Takaisin HBC:hen tai Wii Menuun"
msgid "Backgroundmusic"
msgstr "Taustamusiikki"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Isot kiitokset:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Kooditiedosto tyhjä"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Avaa konsolin lukitus muokataksesi asetuksia."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Jatka pelin asennusta?"
@ -1006,6 +1015,9 @@ msgstr "Lataa tiedosto: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Lataa tämä vaihtoehtoisesti tämä dol?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Voimakkuus"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Ei kumpikaan"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Näytönsäästäjä"
msgid "Search Mode"
msgstr ""
msgid "Select"
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-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Cyan\n"
"Language-Team: Badablek, Amour, ikya, Cyan & Kin8\n"
@ -202,6 +202,9 @@ msgstr "Retour HBC / Menu Wii"
msgid "Backgroundmusic"
msgstr "Fond sonore"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Grand merci à:"
@ -314,6 +317,9 @@ msgstr "Catégories:"
msgid "Change Play Path"
msgstr "Changer dossier"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Fichier de triche vide"
@ -363,6 +369,9 @@ msgstr "La console doit être déverrouillée."
msgid "Console should be unlocked to modify it."
msgstr "La console doit être déverrouillée."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Continuer l'installation ?"
@ -1006,6 +1015,9 @@ msgstr "Charger le fichier de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Charger comme DOL alternatif ?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Paramètres du Loader"
@ -1063,6 +1075,12 @@ msgstr "Type de boucle"
msgid "Music Volume"
msgstr "Volume musique"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Dossier Émulation Nand"
@ -1075,6 +1093,9 @@ msgstr "L'Émulation Nand n'est disponible qu'avec le cIOS D2X!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "L'Émulation Nand ne fonctionne qu'avec une partition FAT/FAT32!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Aucun"
@ -1360,6 +1381,9 @@ msgstr "La sauvegarde de ce jeu est peut-être existante."
msgid "Screensaver"
msgstr "Économiseur d'écran"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Choisir"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 16:15+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2010-07-03 17:35-0800\n"
"Last-Translator: TheRealVisitor\n"
"Language-Team: Bertilax, Snoozer, wishmasterf, ZEN.13, TheRealVisitor\n"
@ -202,6 +202,9 @@ msgstr "Zurück zum Homebrewkanal oder Wii Menü"
msgid "Backgroundmusic"
msgstr "Hintergrundmusik"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Großen Dank an:"
@ -314,6 +317,9 @@ msgstr "Kategorien:"
msgid "Change Play Path"
msgstr "Pfad ändern"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Cheatdatei ist leer"
@ -363,6 +369,9 @@ msgstr "Gerät muss für diese Nutzung entsperrt werden."
msgid "Console should be unlocked to modify it."
msgstr "Konsole muss zum Bearbeiten entsperrt werden."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Fortfahren um Spiel zu installieren?"
@ -1006,6 +1015,9 @@ msgstr "Datei von %s laden?"
msgid "Load this DOL as alternate DOL?"
msgstr "Diese DOL als Alternative DOL laden?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader Einstellungen"
@ -1063,6 +1075,12 @@ msgstr "HGM Wiederholung"
msgid "Music Volume"
msgstr "Musik Lautstärke"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Nand Emu Pfad"
@ -1075,6 +1093,9 @@ msgstr "Nand Emulation ist nur für D2X cIOS verfügbar!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "Nand Emulation funktionier nut mit FAT/FAT32 Partitionen!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Keine"
@ -1360,6 +1381,9 @@ msgstr "Möglicherweise existiert kein Spielstand für dieses Spiel."
msgid "Screensaver"
msgstr "Bildschirmschoner"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Auswählen"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
"Last-Translator: Springdale\n"
"Language-Team: Tusk, Springdale\n"
@ -202,6 +202,9 @@ msgstr "Visszatérés a HBC-be vagy Wii Menübe"
msgid "Backgroundmusic"
msgstr "Háttérzene"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Köszönet:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr "Csatornák"
msgid "Cheatfile is blank"
msgstr "A cheat-fájl üres"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "A konzol zárolva, ezért nem változtatható meg."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Játék telepítésének folytatása?"
@ -1006,6 +1015,9 @@ msgstr "Fájl betöltése innen: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "DOL betöltése alternatív DOL-ként?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Zene Hangerõ"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Egyik sem"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Képernyõkimélõ"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Válassz"
@ -1965,9 +1989,6 @@ msgstr "hátralévõ másodperc"
#~ msgid "Back to Wii Menu"
#~ msgstr "Visszatérés a Wii Menübe"
#~ msgid "Channels"
#~ msgstr "Csatornák"
#~ msgid "Checking existing artwork"
#~ msgstr "Meglévõ képek ellenõrzése"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2011-09-11 12:19+0100\n"
"Last-Translator: xFede, Bovirus \n"
"Language-Team: Cambo\n"
@ -202,6 +202,9 @@ msgstr "Torna a HBC/Menu Wii"
msgid "Backgroundmusic"
msgstr "Musica di sottofondo"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Grazie mille a:"
@ -314,6 +317,9 @@ msgstr "Categorie:"
msgid "Change Play Path"
msgstr "Cambia Percorso Musica"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Il file dei trucchi è vuoto"
@ -363,6 +369,9 @@ msgstr "La Wii deve essere sbloccata per usare questa opzione."
msgid "Console should be unlocked to modify it."
msgstr "La Wii deve essere sbloccata per modificarla."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Proseguire con l'installarazione del gioco?"
@ -1006,6 +1015,9 @@ msgstr "Caricare il file da: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Usare questo DOL come DOL alternativo?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Impostazioni Loader"
@ -1063,6 +1075,12 @@ msgstr "Ripeti Musica Sottof."
msgid "Music Volume"
msgstr "Volume Musica"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Percorso NAND Emulata"
@ -1075,6 +1093,9 @@ msgstr "L'emulazione della NAND è disponibile solo con i cIOS d2x!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "L'emulazione della NAND funziona solo con le partizioni FAT/FAT32!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Neanche"
@ -1360,6 +1381,9 @@ msgstr "Il salvataggio potrebbe non esistere per questo gioco."
msgid "Screensaver"
msgstr "Salvaschermo"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Seleziona"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: hosigumayuugi\n"
"Language-Team: hosigumayuugi, papa, ichiroling\n"
@ -202,6 +202,9 @@ msgstr "HBC/Wiiメニューへ"
msgid "Backgroundmusic"
msgstr "BGM"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "協力:"
@ -314,6 +317,9 @@ msgstr "カテゴリ:"
msgid "Change Play Path"
msgstr "パスの変更"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "チートファイルがありません"
@ -363,6 +369,9 @@ msgstr "これを使うにはロックの解除が必要です"
msgid "Console should be unlocked to modify it."
msgstr "変更にはロックの解除が必要です"
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "このゲームをインストールしますか?"
@ -1006,6 +1015,9 @@ msgstr "%sからファイルをロードしますか"
msgid "Load this DOL as alternate DOL?"
msgstr "このDOLを代替DOLとしてロードしますか"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "ローダーの設定"
@ -1063,6 +1075,12 @@ msgstr "ループ機能"
msgid "Music Volume"
msgstr "BGMの音量"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "NANDエミュ"
@ -1075,6 +1093,9 @@ msgstr "NANDエミュレーションはd2x cIOSのみで動作します!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "NANDエミュレーションはFAT/FAT32領域のみで動作します!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "非表示"
@ -1360,6 +1381,9 @@ msgstr "このゲームのセーブはありません"
msgid "Screensaver"
msgstr "スクリーンセーバー"
msgid "Search Mode"
msgstr ""
msgid "Select"
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-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nextos@korea.com\n"
"Language-Team: \n"
@ -202,6 +202,9 @@ msgstr "홈브류 메뉴 또는 Wii 메뉴로"
msgid "Backgroundmusic"
msgstr "배경음악"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "감사 :"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "치트화일 내용없음"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "변경하려면 콘솔 잠김을 해제하세요."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "계속 설치하겠습니까?"
@ -1006,6 +1015,9 @@ msgstr "화일 로드는 %s 에서?"
msgid "Load this DOL as alternate DOL?"
msgstr "이 DOL화일을 alternate DOL로 로딩할까요?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "음량"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "표시 없음"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "화면보호기"
msgid "Search Mode"
msgstr ""
msgid "Select"
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-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: raschi\n"
"Language-Team: raschi\n"
@ -202,6 +202,9 @@ msgstr "Tilbake til HBC eller Wii meny"
msgid "Backgroundmusic"
msgstr "Bakgrunnsmusikk"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Stor takk til:"
@ -314,6 +317,9 @@ msgstr "Kategorier:"
msgid "Change Play Path"
msgstr "Endre spill sti"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Juksefil er tom"
@ -363,6 +369,9 @@ msgstr "Konsoll må være opplåst for å bruke dette."
msgid "Console should be unlocked to modify it."
msgstr "Konsoll må være opplåst for å modifisere."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Fortsett å installere spill?"
@ -1006,6 +1015,9 @@ msgstr "Start fil fra: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Last denne DOL som alternativ DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader innstillinger"
@ -1063,6 +1075,12 @@ msgstr "Musikk loop modus"
msgid "Music Volume"
msgstr "Musikk volum"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Ingen"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Skjermbeskytter"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Velg"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
"Language-Team: \n"
@ -202,6 +202,9 @@ msgstr "Powrot do HBC/Wii Menu"
msgid "Backgroundmusic"
msgstr "Muzyka w tle"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Podziekowania dla"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr "Kanaly"
msgid "Cheatfile is blank"
msgstr "Plik z kodami pusty"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Aby zmodyfikowac, odblokuj konsole"
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Kontynuowac instalacje?"
@ -1006,6 +1015,9 @@ msgstr "Zaladowac plik z: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Zaladowac ten DOL jako alternatywnt?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Poziom glosnosci"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "zadne"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Wygaszacz ekranu"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Wybierz"
@ -1968,9 +1992,6 @@ msgstr "sekund pozostalo"
#~ msgid "Back to Wii Menu"
#~ msgstr "Powrit do Wii Menu"
#~ msgid "Channels"
#~ msgstr "Kanaly"
#~ msgid "Checking existing artwork"
#~ msgstr "Sprawdzam istniejace prace graficzne"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
"Last-Translator: aniemotion\n"
"Language-Team: boto12, aniemotion\n"
@ -202,6 +202,9 @@ msgstr "Voltar ao Loader/Menu do Wii"
msgid "Backgroundmusic"
msgstr "Música de fundo"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Agradecimentos:"
@ -314,6 +317,9 @@ msgstr "Categorias:"
msgid "Change Play Path"
msgstr "Alterar Caminho para Play"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "arquivo de truques vazio"
@ -363,6 +369,9 @@ msgstr "Configuração deve está destravada para habilitar esta."
msgid "Console should be unlocked to modify it."
msgstr "É necessário desbloquear a configuração para poder modificar o parâmetro."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Continuar instalação do jogo?"
@ -1006,6 +1015,9 @@ msgstr "Carregar arquivo de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Carregar este DOL como DOL alternativo?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr "Modo Repetição de Música"
msgid "Music Volume"
msgstr "Volume da Música"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Nenhum"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Proteção de tela"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "selecionar"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2011-11-03 11:00+0000\n"
"Last-Translator: pplucky <pplucky@gmail.com>\n"
"Language-Team: Sky8000, pplucky\n"
@ -202,6 +202,9 @@ msgstr "Voltar ao HBC ou Menu Wii"
msgid "Backgroundmusic"
msgstr "Música de fundo"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Agradecimentos:"
@ -314,6 +317,9 @@ msgstr "Categorias:"
msgid "Change Play Path"
msgstr "Alterar Caminho de Músicas"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "Ficheiro de batota vazio"
@ -363,6 +369,9 @@ msgstr "Consola tem de estar desbloqueada para usar isto."
msgid "Console should be unlocked to modify it."
msgstr "Consola deve estar desbloqueada para modificar o parâmetro."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Continuar instalação do jogo?"
@ -1006,6 +1015,9 @@ msgstr "Carregar ficheiro de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Carregar este DOL como DOL alternativo?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Definições do Loader"
@ -1063,6 +1075,12 @@ msgstr "Modo de Repetição"
msgid "Music Volume"
msgstr "Volume Música"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Caminho Nand Emu"
@ -1075,6 +1093,9 @@ msgstr "Emulação Nand apenas disponível em cIOS D2X!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "Emulação Nand apenas funciona em partições FAT/FAT32!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Nenhum"
@ -1360,6 +1381,9 @@ msgstr "Gravação pode não existir para este jogo."
msgid "Screensaver"
msgstr "Protector de ecrã"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Seleccionar"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nikolai_ca\n"
"Language-Team: Kir, alendit, nikolai_ca\n"
@ -202,6 +202,9 @@ msgstr "Вернуться в HBC или меню Wii"
msgid "Backgroundmusic"
msgstr "Фоновая музыка"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Большое спасибо:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr "Каналы"
msgid "Cheatfile is blank"
msgstr "Файл с читами пустой"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Для изменения консоль должна быть разблокирована."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Продолжить установку игры ?"
@ -1006,6 +1015,9 @@ msgstr "Загрузить файл из %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Загрузить этот DOL в качестве альтернативного ?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Громкость"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Ни то, ни другое"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Скринсейвер"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr ""
@ -1968,9 +1992,6 @@ msgstr "секунд осталось"
#~ msgid "Back to Wii Menu"
#~ msgstr "Вернуться в меню Wii"
#~ msgid "Channels"
#~ msgstr "Каналы"
#~ msgid "Checking existing artwork"
#~ 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-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: knife.hu kavid emul8ion\n"
"Language-Team: kavid\n"
@ -202,6 +202,9 @@ msgstr "返回 HBC 或 Wii 系统菜单"
msgid "Backgroundmusic"
msgstr "背景音乐"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "非常感谢:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "更改游戏路径"
msgid "Channels"
msgstr "频道"
msgid "Cheatfile is blank"
msgstr "作弊码文件是空的"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "需解锁以开启设定功能."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "继续安装游戏?"
@ -1006,6 +1015,9 @@ msgstr "从%s 加载文件?"
msgid "Load this DOL as alternate DOL?"
msgstr "加载这个 DOL 作为 ALT DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader设置"
@ -1063,6 +1075,12 @@ msgstr "音乐循环模式"
msgid "Music Volume"
msgstr "音量"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "全不"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "屏幕保护"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "选择"
@ -1956,9 +1980,6 @@ msgstr "剩余秒数"
#~ msgid "Back to Wii Menu"
#~ msgstr "返回 Wii 系统菜单"
#~ msgid "Channels"
#~ msgstr "频道"
#~ msgid "Checking existing artwork"
#~ 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-11-08 15:25+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2011-07-25 16:40+0200\n"
"Last-Translator: Galen/xFede\n"
"Language-Team: Penn, SirPalax, hvy109\n"
@ -202,6 +202,9 @@ msgstr "Volver a HBC o Menú Wii"
msgid "Backgroundmusic"
msgstr "Música de fondo"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Gracias a:"
@ -314,6 +317,9 @@ msgstr "Categorías:"
msgid "Change Play Path"
msgstr "Cambiar Ruta"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "El archivo de Trucos está vacio"
@ -363,6 +369,9 @@ msgstr "Debes desbloquear la consola para poder usar esto."
msgid "Console should be unlocked to modify it."
msgstr "Debes desbloquear la consola para modificarlo."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "¿Continuar instalando juego?"
@ -1006,6 +1015,9 @@ msgstr "¿Cargar el archivo desde: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "¿Cargar este DOL como DOL Alternativo?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Configuración del Cargador"
@ -1063,6 +1075,12 @@ msgstr "Modo Bucle Musical"
msgid "Music Volume"
msgstr "Volumen de la Música"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Ruta Emul. Nand"
@ -1075,6 +1093,9 @@ msgstr "¡La emulación Nand solo está disponible en cIOS D2X!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "¡La emulación Nand solo funciona en particiones FAT/FAT32!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Ninguno"
@ -1360,6 +1381,9 @@ msgstr "Puede no existir partida guardada para este juego"
msgid "Screensaver"
msgstr "Salvapantallas"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Seleccionar"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
"Last-Translator: Katsurou\n"
"Language-Team: Katsurou, pirateX\n"
@ -202,6 +202,9 @@ msgstr "Tillbaka till HBC eller Wii-Menyn"
msgid "Backgroundmusic"
msgstr "Bakgrundsmusik"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Stort tack till:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr "Ändra spel sökväg"
msgid "Channels"
msgstr "Kannaler"
msgid "Cheatfile is blank"
msgstr "Fuskfilen är blank"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Konsolen måste vara upplåst för att kunna ändra det."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Fortsätt installera spel?"
@ -1006,6 +1015,9 @@ msgstr "Ladda fil från: %s?"
msgid "Load this DOL as alternate DOL?"
msgstr "Ladda denna DOL som alternativ DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr "Musik Återuppspelningsläge"
msgid "Music Volume"
msgstr "Volym"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Inget"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Skärmsläckare"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Välj"
@ -1968,9 +1992,6 @@ msgstr "sekunder kvar"
#~ msgid "Back to Wii Menu"
#~ msgstr "Tillbaka till Wii-menyn"
#~ msgid "Channels"
#~ msgstr "Kannaler"
#~ msgid "Checking existing artwork"
#~ msgstr "Kontrollera befintliga konstverk"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-08 20:25+0100\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\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"
@ -202,6 +202,9 @@ msgstr "返回 HBC 或 Wii 系統選單"
msgid "Backgroundmusic"
msgstr "背景音樂"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "非常感謝:"
@ -314,6 +317,9 @@ msgstr "類別:"
msgid "Change Play Path"
msgstr "變更執行路徑"
msgid "Channels"
msgstr ""
msgid "Cheatfile is blank"
msgstr "金手指檔是空的"
@ -363,6 +369,9 @@ msgstr "控制台必須解鎖才可使用此項。"
msgid "Console should be unlocked to modify it."
msgstr "控制台須解鎖才可變更設定。"
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "繼續安裝遊戲?"
@ -1006,6 +1015,9 @@ msgstr "檔案載入位置: %s"
msgid "Load this DOL as alternate DOL?"
msgstr "載入這個 DOL 作為替代 DOL"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr "Loader設定"
@ -1063,6 +1075,12 @@ msgstr "音樂循環模式"
msgid "Music Volume"
msgstr "音樂音量"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr "Nand 模擬器路徑"
@ -1075,6 +1093,9 @@ msgstr "Nand 模擬器僅可用D2X cIOS!"
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr "Nand 模擬器僅能在 FAT/FAT32 格式磁區執行!"
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "皆不顯示"
@ -1360,6 +1381,9 @@ msgstr "這個遊戲的遊戲存檔可能不存在。"
msgid "Screensaver"
msgstr "螢幕保護"
msgid "Search Mode"
msgstr ""
msgid "Select"
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-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Nitro_subzero \n"
"Language-Team: Nitro_subzero\n"
@ -202,6 +202,9 @@ msgstr "กลับไป HBC หรือ เมนู Wii"
msgid "Backgroundmusic"
msgstr "ดนตรีเบื้องหลัง"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "ขอขอบคุณ:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr "แชนแนล"
msgid "Cheatfile is blank"
msgstr "ไฟล์สูตรโกง ว่างเปล่า"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "ปลดล๊อคคอนโซลก่อน ถึงจะทำการเปลี่ยนแปลงได้"
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "ทำต่อ เพื่อติดตั้งเกมส์?"
@ -1006,6 +1015,9 @@ msgstr "โหลดไฟล์จาก: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "โหลด DOL นี้เป็น alternate DOL?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "ความดังเสียงเพลง"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "ไม่ทั้งสอง"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "รักษาหน้าจอ"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr ""
@ -1926,9 +1950,6 @@ msgstr "วินาทีที่เหลือ"
#~ msgid "Back to Wii Menu"
#~ msgstr "กลับไป เมนู Wii"
#~ msgid "Channels"
#~ msgstr "แชนแนล"
#~ msgid "Checking existing artwork"
#~ 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-10-22 12:10+0200\n"
"POT-Creation-Date: 2011-11-12 18:58+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: omercigingelini\n"
"Language-Team: omercigingelini\n"
@ -202,6 +202,9 @@ msgstr "HBC veya Wii Menüye dönüş"
msgid "Backgroundmusic"
msgstr "Arkaplan müziği"
msgid "Beginning"
msgstr ""
msgid "Big thanks to:"
msgstr "Teşekkürler:"
@ -314,6 +317,9 @@ msgstr ""
msgid "Change Play Path"
msgstr ""
msgid "Channels"
msgstr "Kanallar"
msgid "Cheatfile is blank"
msgstr "Hile dosyası boş"
@ -363,6 +369,9 @@ msgstr ""
msgid "Console should be unlocked to modify it."
msgstr "Degiştirmek için konsolun kilidini açmalısın."
msgid "Content"
msgstr ""
msgid "Continue to install game?"
msgstr "Oyunu kurmaya devam et?"
@ -1006,6 +1015,9 @@ msgstr "Dosya %s 'ten yüklensin mi?"
msgid "Load this DOL as alternate DOL?"
msgstr "Bu DOL alternatif DOL olarak mı yüklensin?"
msgid "Loader Mode"
msgstr ""
msgid "Loader Settings"
msgstr ""
@ -1063,6 +1075,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Ses Seviyesi"
msgid "Nand Channel Emulation"
msgstr ""
msgid "Nand Emu Channel Path"
msgstr ""
msgid "Nand Emu Path"
msgstr ""
@ -1075,6 +1093,9 @@ msgstr ""
msgid "Nand Emulation only works on FAT/FAT32 partitions!"
msgstr ""
msgid "Nand Saves Emulation"
msgstr ""
msgid "Neither"
msgstr "Hiçbiri"
@ -1360,6 +1381,9 @@ msgstr ""
msgid "Screensaver"
msgstr "Ekran Koruyucu"
msgid "Search Mode"
msgstr ""
msgid "Select"
msgstr "Seç"
@ -1932,9 +1956,6 @@ msgstr "saniye kaldı"
#~ msgid "Back to Wii Menu"
#~ msgstr "Wii Menüye dönüş"
#~ msgid "Channels"
#~ msgstr "Kanallar"
#~ msgid "Checking existing artwork"
#~ msgstr "Hazır görsel kontrol ediliyor"

View File

@ -33,6 +33,7 @@ SOURCES := source \
source/prompts \
source/wad \
source/banner \
source/Channels \
source/BoxCover \
source/cheats \
source/homebrewboot \

View File

@ -1,9 +1,11 @@
#include <wctype.h>
#include "gui.h"
#include "gui_searchbar.h"
#include "../wpad.h"
#include "../main.h"
#include "../settings/CSettings.h"
#include "../settings/GameTitles.h"
#include "../themes/CTheme.h"
#include "../usbloader/GameList.h"
@ -29,9 +31,11 @@ class cSearchButton
};
GuiSearchBar::GuiSearchBar(const std::set<wchar_t> &SearchChars) :
inSide(0), text((char *) NULL, 22, ( GXColor )
{ 0, 0, 0, 255}), buttons(0),
static wchar_t lastSearchChar = 0;
std::set<wchar_t> GuiSearchBar::SearchChars;
GuiSearchBar::GuiSearchBar() :
inSide(0), text((char *) NULL, 22, ( GXColor ) {0, 0, 0, 255}), buttons(0),
keyImageData(Resources::GetFile("keyboard_key.png"), Resources::GetFileSize("keyboard_key.png")),
keyOverImageData(Resources::GetFile("keyboard_key_over.png"), Resources::GetFileSize("keyboard_key_over.png"))
{
@ -63,11 +67,15 @@ GuiSearchBar::GuiSearchBar(const std::set<wchar_t> &SearchChars) :
}
height = 10 + 42 + y * 42 + 10;
charstr[0] = Settings.SearchMode == SEARCH_BEGINNING ? L'=' : L'*';
searchModeBtn = new cSearchButton(charstr, &keyImageData, &keyOverImageData, 10, 10, &trig, btnSoundOver, btnSoundClick);
this->Append(&searchModeBtn->button);
text.SetText(gameList.GetCurrentFilter());
text.SetPosition(10, 15);
text.SetPosition(55, 15);
text.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
text.SetWidescreen(Settings.widescreen);
text.SetMaxWidth(width - (10 + 2 * 42 + 10), SCROLL_HORIZONTAL);
text.SetMaxWidth(width - (55 + 2 * 42 + 10), SCROLL_HORIZONTAL);
this->Append(&text);
imgBacspaceBtn = Resources::GetImageData("keyboard_backspace_over.png");
@ -105,6 +113,7 @@ GuiSearchBar::~GuiSearchBar()
delete imgClearBtn;
delete CloseBtn;
delete searchModeBtn;
delete BacspaceBtn;
delete BacspaceBtnImg;
@ -114,10 +123,8 @@ GuiSearchBar::~GuiSearchBar()
}
void GuiSearchBar::Draw()
{
Menu_DrawRectangle(this->GetLeft(), this->GetTop(), width, height, ( GXColor )
{ 0, 0, 0, 0xa0}, 1);
Menu_DrawRectangle(this->GetLeft() + 10, this->GetTop() + 15, width - (10 + 2 * 42 + 10), 22, ( GXColor )
{ 255, 255, 255, 255}, 1);
Menu_DrawRectangle(this->GetLeft(), this->GetTop(), width, height, ( GXColor ) {0, 0, 0, 0xa0}, 1);
Menu_DrawRectangle(this->GetLeft() + 55, this->GetTop() + 15, width - (55 + 2 * 42 + 10), 22, ( GXColor ) {255, 255, 255, 255}, 1);
GuiWindow::Draw();
}
void GuiSearchBar::Update(GuiTrigger * t)
@ -146,6 +153,8 @@ void GuiSearchBar::Update(GuiTrigger * t)
}
wchar_t GuiSearchBar::GetClicked()
{
lastSearchChar = 0;
if (buttons)
{
for (int i = 0; i < cnt; i++)
@ -153,15 +162,96 @@ wchar_t GuiSearchBar::GetClicked()
if (buttons[i]->button.GetState() == STATE_CLICKED)
{
buttons[i]->button.ResetState();
return buttons[i]->wchar;
lastSearchChar = buttons[i]->wchar;
}
}
}
if (BacspaceBtn->GetState() == STATE_CLICKED) return 8;
else if (ClearBtn->GetState() == STATE_CLICKED) return 7;
else if (CloseBtn->GetState() == STATE_CLICKED) return 27;
return 0;
if (BacspaceBtn->GetState() == STATE_CLICKED) lastSearchChar = 8;
else if (ClearBtn->GetState() == STATE_CLICKED) lastSearchChar = 7;
else if (CloseBtn->GetState() == STATE_CLICKED) lastSearchChar = 27;
else if (searchModeBtn->button.GetState() == STATE_CLICKED) lastSearchChar = 6;
return lastSearchChar;
}
void GuiSearchBar::FilterList(std::vector<struct discHdr *> &List, wString &GameFilter)
{
SearchChars.clear();
for (u32 i = 0; i < List.size(); ++i)
{
struct discHdr *header = List.at(i);
wchar_t *gameName = charToWideChar(GameTitles.GetTitle(header));
if (!gameName)
{
List.erase(List.begin()+i);
i--;
continue;
}
if(Settings.SearchMode == SEARCH_BEGINNING)
{
if (GameFilter.size() > 0 && wcsncasecmp(gameName, GameFilter.c_str(), GameFilter.size()) != 0)
{
delete [] gameName;
List.erase(List.begin()+i);
i--;
continue;
}
if ( wcslen(gameName) > GameFilter.size()
&& SearchChars.find(towupper(gameName[GameFilter.size()])) == SearchChars.end()
&& SearchChars.find(towlower(gameName[GameFilter.size()])) == SearchChars.end())
{
SearchChars.insert(gameName[GameFilter.size()]);
}
}
else if(Settings.SearchMode == SEARCH_CONTENT)
{
if(GameFilter.size() > 0)
{
if (wcscasestr(gameName, GameFilter.c_str()) == 0)
{
delete [] gameName;
List.erase(List.begin()+i);
i--;
continue;
}
const wchar_t *found = gameName;
while((found = wcscasestr(found, GameFilter.c_str())) != 0)
{
found += GameFilter.size();
wchar_t ch = towupper(*found);
if(ch)
SearchChars.insert(ch);
}
}
else
{
for(const wchar_t *wPtr = gameName; *wPtr != 0; wPtr++)
{
wchar_t ch = towupper(*wPtr);
if(ch > L'@')
SearchChars.insert(ch);
}
}
}
delete [] gameName;
}
if(List.size() < 2)
SearchChars.clear();
// If the last character was not backslash try autocomplete
if(SearchChars.size() == 1 && GameFilter.size() > 0 && lastSearchChar != 8)
{
GameFilter += *SearchChars.begin();
FilterList(List, GameFilter);
}
}
/*

View File

@ -1,19 +1,27 @@
#ifndef GUI_SEARCHBAR_H_
#define GUI_SEARCHBAR_H_
#include "gui.h"
#include <set>
#include <vector>
#include "gui.h"
#include "usbloader/disc.h"
#include "wstring.hpp"
class cSearchButton;
class GuiSearchBar: public GuiWindow
{
public:
GuiSearchBar(const std::set<wchar_t> &SearchChars);
GuiSearchBar();
virtual ~GuiSearchBar();
void Draw();
void Update(GuiTrigger * t);
wchar_t GetClicked();
static void FilterList(std::vector<struct discHdr *> &List, wString &GameFilter);
private:
static std::set<wchar_t> SearchChars;
u16 inSide;
GuiText text;
@ -30,6 +38,7 @@ class GuiSearchBar: public GuiWindow
GuiButton* CloseBtn;
cSearchButton *searchModeBtn;
cSearchButton **buttons;
int cnt;
GuiImageData keyImageData;

View File

@ -1,26 +1,25 @@
#include <gccore.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <malloc.h>
#include <sys/iosupport.h>
/* init-globals */
static bool geckoinit = false;
#ifndef NO_DEBUG
#include <stdarg.h>
void gprintf(const char *format, ...)
{
if (!geckoinit)
return;
char * tmp = NULL;
static char stringBuf[4096];
int len;
va_list va;
va_start(va, format);
if((vasprintf(&tmp, format, va) >= 0) && tmp)
if((len = vsnprintf(stringBuf, sizeof(stringBuf), format, va)) > 0)
{
usb_sendbuffer(1, tmp, strlen(tmp));
usb_sendbuffer(1, stringBuf, len);
#ifdef DEBUG_TO_FILE
FILE *debugF = fopen("sd:/debug.txt", "a");
if(!debugF)
@ -31,9 +30,6 @@ void gprintf(const char *format, ...)
#endif
}
va_end(va);
if(tmp)
free(tmp);
}
bool InitGecko()
@ -84,7 +80,7 @@ void hexdump(void *d, int len)
static ssize_t __out_write(struct _reent *r, int fd, const char *ptr, size_t len)
{
gprintf(ptr);
gprintf("%s", ptr);
return len;
}
@ -122,5 +118,3 @@ void USBGeckoOutput()
devoptab_list[STD_OUT] = &gecko_out;
devoptab_list[STD_ERR] = &gecko_out;
}
#endif /* NO_DEBUG */

View File

@ -216,13 +216,13 @@ int MainMenu(int menu)
currentMenu = MenuInstall();
break;
case MENU_SETTINGS:
currentMenu = GlobalSettings::Show();
currentMenu = GlobalSettings::Execute();
break;
case MENU_THEMEMENU:
currentMenu = ThemeMenu::Run();
currentMenu = ThemeMenu::Execute();
break;
case MENU_THEMEDOWNLOADER:
currentMenu = ThemeDownloader::Run();
currentMenu = ThemeDownloader::Execute();
break;
case MENU_HOMEBREWBROWSE:
currentMenu = HomebrewBrowser::Execute();

View File

@ -59,8 +59,7 @@ GameBrowseMenu::GameBrowseMenu()
GameIDTxt = NULL;
GameRegionTxt = NULL;
WDVD_GetCoverStatus(&DiscDriveCoverOld);
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
HDDSizeCallback.SetCallback(this, &GameBrowseMenu::UpdateFreeSpace);
btnInstall = Resources::GetImageData("button_install.png");
@ -763,7 +762,7 @@ void GameBrowseMenu::ReloadBrowser()
if (show_searchwindow)
{
searchBar = new GuiSearchBar(gameList.GetAvailableSearchChars());
searchBar = new GuiSearchBar;
mainWindow->Append(searchBar);
}
@ -842,8 +841,7 @@ int GameBrowseMenu::MainLoop()
gprintf("\tLoading font...%s\n", Theme::LoadFont(Settings.theme_path) ? "done" : "failed (using default)");
gprintf("\tLoading theme...%s\n", Theme::Load(Settings.theme) ? "done" : "failed (using default)");
bgMusic->Resume();
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
ResumeGui();
sdcardBtn->ResetState();
@ -879,13 +877,12 @@ int GameBrowseMenu::MainLoop()
else
Settings.GameSort |= SORT_FAVORITE;
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
if((Settings.GameSort & SORT_FAVORITE) && gameList.size() == 0)
{
Settings.GameSort &= ~SORT_FAVORITE;
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ShowError(tr("No favorites selected."));
}
else
@ -896,8 +893,7 @@ int GameBrowseMenu::MainLoop()
{
gprintf("\tsearchBtn Clicked\n");
show_searchwindow = !show_searchwindow;
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
searchBtn->ResetState();
if(show_searchwindow && wcslen(gameList.GetCurrentFilter()) == 0)
@ -908,39 +904,13 @@ int GameBrowseMenu::MainLoop()
{
if (searchChar > 27) //! Character clicked
{
for(;;)
{
int len = wcslen(gameList.GetCurrentFilter());
int len = gameList.GetCurrentFilter() ? wcslen(gameList.GetCurrentFilter()) : 0;
wchar_t newFilter[len + 2];
wcscpy(newFilter, gameList.GetCurrentFilter());
if (gameList.GetCurrentFilter()) wcscpy(newFilter, gameList.GetCurrentFilter());
newFilter[len] = searchChar;
newFilter[len + 1] = 0;
gameList.FilterList(newFilter);
if(gameList.GetAvailableSearchChars().size() != 1)
break;
searchChar = *gameList.GetAvailableSearchChars().begin();
}
bool autoClose = false;
switch(Settings.gameDisplay)
{
case LIST_MODE:
autoClose = gameList.size()<=9;
break;
case CAROUSEL_MODE:
autoClose = gameList.size()<=5;
break;
case GRID_MODE:
autoClose = gameList.size()<=3;
default:
break;
}
if(autoClose) // Close Searchwindow when less than 5 Games found
{
show_searchwindow = false;
searchBtn->StopEffect();
}
}
else if (searchChar == 27) //! Close
{
@ -956,16 +926,16 @@ int GameBrowseMenu::MainLoop()
{
int len = wcslen(gameList.GetCurrentFilter());
wchar_t newFilter[len + 1];
wcscpy(newFilter, gameList.GetCurrentFilter());
int old_game_count = gameList.size();
for(; len > 0; len--)
{
newFilter[len - 1] = 0; // remove last char
if (gameList.GetCurrentFilter()) wcscpy(newFilter, gameList.GetCurrentFilter());
newFilter[len > 0 ? len - 1 : 0] = 0;
gameList.FilterList(newFilter);
if(len == 1)
Settings.gridRows = GridRowsPreSearch; //! restore old rows amount so we don't stay on one row
if(gameList.FilterList(newFilter) != old_game_count)
break;
}
else if (searchChar == 6)
{
Settings.SearchMode = Settings.SearchMode == SEARCH_BEGINNING ? SEARCH_CONTENT : SEARCH_BEGINNING;
gameList.FilterList();
}
ReloadBrowser();
return MENU_NONE;
@ -996,8 +966,7 @@ int GameBrowseMenu::MainLoop()
Settings.GameSort |= SORT_ABC;
}
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
}
@ -1065,8 +1034,7 @@ int GameBrowseMenu::MainLoop()
if(WindowPrompt(tr( "Parental Control" ), tr( "Are you sure you want to lock USB Loader GX?" ), tr( "Yes" ), tr( "No" )) == 1)
{
Settings.godmode = 0;
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
}
}
@ -1081,8 +1049,7 @@ int GameBrowseMenu::MainLoop()
if(result == 1)
WindowPrompt( tr( "Correct Password" ), tr( "All the features of USB Loader GX are unlocked." ), tr( "OK" ));
Settings.godmode = 1;
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
}
else if(result < 0)
@ -1115,8 +1082,7 @@ int GameBrowseMenu::MainLoop()
mainWindow->SetState(STATE_DEFAULT);
if(promptMenu.categoriesChanged())
{
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
ReloadBrowser();
}
}

View File

@ -57,8 +57,6 @@ void gamepatches(u8 videoSelected, u8 languageChoice, u8 patchcountrystring,
es_fd = IOS_Open(es_fs, 0);
int i;
load_wip_code((u8*) Disc_ID);
/* If a wip file is loaded for this game this does nothing - Dimok */
PoPPatch();
NSMBPatch();

View File

@ -44,6 +44,8 @@ static int code_size = 0;
static u32 gameconfsize = 0;
static u32 *gameconf = NULL;
static u32 tempgameconfsize = 0;
static u8 *tempgameconf = NULL;
extern void patchhook(u32 address, u32 len);
@ -342,70 +344,29 @@ void app_pokevalues()
}
//---------------------------------------------------------------------------------
static void app_loadgameconfig(const char *CheatFilepath)
static void app_loadgameconfig()
//---------------------------------------------------------------------------------
{
gameconfsize = 0;
if (gameconf == NULL)
{
gameconf = (u32*) malloc(65536);
if (gameconf == NULL)
return;
}
FILE* fp;
const char *discid = (const char *) Disc_ID;
if(!tempgameconf)
{
tempgameconf = (u8 *) defaultgameconfig;
tempgameconfsize = defaultgameconfig_size;
}
u32 ret;
u32 filesize;
s32 gameidmatch, maxgameidmatch = -1, maxgameidmatch2 = -1;
u32 i, numnonascii, parsebufpos;
u32 codeaddr, codeval, codeaddr2, codeval2, codeoffset;
u32 temp, tempoffset = 0;
char parsebuffer[18];
u8 *tempgameconf = (u8 *) defaultgameconfig;
u32 tempgameconfsize = defaultgameconfig_size;
char filepath[200];
snprintf(filepath, sizeof(filepath), "%s/gameconfig.txt", CheatFilepath);
fp = fopen(filepath, "rb");
if (!fp)
{
snprintf(filepath, sizeof(filepath), "sd:/gameconfig.txt");
fp = fopen(filepath, "rb");
for(i = 1; i <= 8; ++i)
{
if(fp) break;
snprintf(filepath, sizeof(filepath), "usb%i:/gameconfig.txt", i);
fp = fopen(filepath, "rb");
}
}
if (fp)
{
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
tempgameconf = (u8*) malloc(filesize);
if (tempgameconf == NULL)
return;
ret = fread((void*) tempgameconf, 1, filesize, fp);
fclose(fp);
if (ret != filesize)
{
free(tempgameconf);
return;
}
tempgameconfsize = filesize;
}
// Remove non-ASCII characters
numnonascii = 0;
for (i = 0; i < tempgameconfsize; i++)
@ -582,7 +543,7 @@ static void app_loadgameconfig(const char *CheatFilepath)
}
//---------------------------------------------------------------------------------
void load_handler(const char *gameconfigPath, u32 hooktype, u32 debugger, u32 pauseAtStart)
void load_handler(u32 hooktype, u32 debugger, u32 pauseAtStart)
//---------------------------------------------------------------------------------
{
if (hooktype != 0x00)
@ -590,7 +551,7 @@ void load_handler(const char *gameconfigPath, u32 hooktype, u32 debugger, u32 pa
if (debugger == 0x01)
codelist = (u8 *) 0x800028B8;
codelistend = (u8 *) 0x80003000;
app_loadgameconfig(gameconfigPath);
app_loadgameconfig();
if (debugger == 0x01)
{
@ -707,6 +668,60 @@ void load_handler(const char *gameconfigPath, u32 hooktype, u32 debugger, u32 pa
}
}
static int LoadGameConfig(const char *CheatFilepath)
{
int filesize = 0;
tempgameconf = (u8 *) defaultgameconfig;
tempgameconfsize = defaultgameconfig_size;
gameconfsize = 0;
FILE* fp;
char filepath[200];
snprintf(filepath, sizeof(filepath), "%s/gameconfig.txt", CheatFilepath);
fp = fopen(filepath, "rb");
if (!fp)
{
snprintf(filepath, sizeof(filepath), "sd:/gameconfig.txt");
fp = fopen(filepath, "rb");
int i;
for(i = 1; i <= 8; ++i)
{
if(fp) break;
snprintf(filepath, sizeof(filepath), "usb%i:/gameconfig.txt", i);
fp = fopen(filepath, "rb");
}
}
if (!fp)
return 0;
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
tempgameconf = (u8*) malloc(filesize);
if (tempgameconf == NULL) {
fclose(fp);
return -1;
}
int ret = fread((void*) tempgameconf, 1, filesize, fp);
fclose(fp);
if (ret != filesize)
{
free(tempgameconf);
return -1;
}
tempgameconfsize = filesize;
return 0;
}
int ocarina_load_code(const char *CheatFilepath)
{
char filepath[150];
@ -765,6 +780,8 @@ int ocarina_load_code(const char *CheatFilepath)
gprintf("Ocarina: Codes found.\n");
LoadGameConfig(CheatFilepath);
return code_size;
}

View File

@ -31,7 +31,7 @@ extern "C"
// Function prototypes
void dogamehooks(u32 hooktype, void *addr, u32 len);
void load_handler(const char *gameconfigPath, u32 hooktype, u32 debugger, u32 pauseAtStart);
void load_handler(u32 hooktype, u32 debugger, u32 pauseAtStart);
void langpatcher(void *addr, u32 len, u8 languageChoice);
void vidolpatcher(void *addr, u32 len);
void patchdebug(void *addr, u32 len);

View File

@ -174,6 +174,7 @@ GameWindow::GameWindow(int Selected)
if (!mountMethod)//stuff we don't show if it is a DVD mounted
{
Append(nameBtn);
if(Settings.LoaderMode != LOAD_CHANNELS)
Append(sizeTxt);
Append(btnLeft);
Append(btnRight);
@ -411,13 +412,14 @@ void GameWindow::SetWindowEffect(int direction, int in_out)
void GameWindow::ChangeGame(int EffectDirection)
{
struct discHdr * header = (mountMethod ? dvdheader : gameList[gameSelected]);
LoadGameSound(header->id);
if(Settings.LoaderMode != LOAD_CHANNELS)
LoadGameSound(header->id); // Temporary no sounds for channels, will be added later
LoadDiscImage(header->id);
SetWindowEffect(EffectDirection, OUT);
HaltGui();
if (!mountMethod)
if (!mountMethod && Settings.LoaderMode != LOAD_CHANNELS)
{
float size = 0.0f;
WBFS_GameSize(header->id, &size);
@ -486,7 +488,7 @@ int GameWindow::MainLoop()
ResumeGui();
wiilight(0);
int settret = GameSettingsMenu::Show(browserMenu, mountMethod ? dvdheader : gameList[gameSelected]);
int settret = GameSettingsMenu::Execute(browserMenu, mountMethod ? dvdheader : gameList[gameSelected]);
SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);
if(parentElement)

View File

@ -26,6 +26,8 @@
#include "../usbloader/utils.h"
#include "../gecko.h"
#include "Controls/DeviceHandler.hpp"
#include "usbloader/NandEmu.h"
extern u8 shutdown;
extern u8 reset;
@ -199,7 +201,6 @@ bool TitleSelector(char output[])
int TitleBrowser()
{
u32 num_titles;
u32 num_sys_titles;
s32 ret = -1;

View File

@ -300,7 +300,7 @@ void CGameCategories::RemoveCategory(const char *gameID, unsigned int id)
if(!gameID) return;
string gameID6;
for(int i = 0; i < 6; ++i)
for(int i = 0; i < 6 && gameID[i] != 0; ++i)
gameID6.push_back(gameID[i]);
RemoveCategory(gameID6, id);
@ -333,7 +333,7 @@ bool CGameCategories::isInCategory(const char *gameID, unsigned int id)
if(!gameID) return false;
string gameID6;
for(int i = 0; i < 6; ++i)
for(int i = 0; i < 6 && gameID[i] != 0; ++i)
gameID6.push_back(gameID[i]);
for (map<string, vector<unsigned int> >::iterator itr = GameCategories.List.begin(); itr != GameCategories.List.end(); itr++)

View File

@ -383,7 +383,7 @@ void CGameSettings::ParseLine(char *line)
if(!ReadGameID(line, GameID, 6))
return;
if(strlen(GameID) != 6)
if(strlen(GameID) != 6 && strlen(GameID) != 4)
return;
GameCFG NewCFG;

View File

@ -217,7 +217,7 @@ void CGameStatistics::ParseLine(char *line)
if(!ReadGameID(line, GameID, 6))
return;
if(strlen(GameID) != 6)
if(strlen(GameID) != 6 && strlen(GameID) != 4)
return;
GameStatus NewGame;

View File

@ -71,6 +71,7 @@ void CSettings::SetDefault()
snprintf(theme_path, sizeof(theme_path), "%stheme/", ConfigPath);
snprintf(dolpath, sizeof(dolpath), "%s/", BootDevice);
snprintf(NandEmuPath, sizeof(NandEmuPath), "%s/nand/", BootDevice);
strcpy(NandEmuChanPath, NandEmuPath);
strcpy(theme, "");
strcpy(language_path, "");
strcpy(ogg_path, "");
@ -128,12 +129,15 @@ void CSettings::SetDefault()
GameListOffset = 0;
sneekVideoPatch = OFF;
NandEmuMode = OFF;
NandEmuChanMode = OFF;
UseSystemFont = ON;
Hooktype = 0;
WiirdDebugger = OFF;
WiirdDebuggerPause = OFF;
ShowPlayCount = ON;
RememberUnlock = ON;
LoaderMode = LOAD_GAMES;
SearchMode = SEARCH_BEGINNING;
}
bool CSettings::Load()
@ -296,11 +300,15 @@ bool CSettings::Save()
fprintf(file, "sneekVideoPatch = %d\n", sneekVideoPatch);
fprintf(file, "NandEmuMode = %d\n", NandEmuMode);
fprintf(file, "NandEmuPath = %s\n", NandEmuPath);
fprintf(file, "NandEmuChanMode = %d\n", NandEmuChanMode);
fprintf(file, "NandEmuChanPath = %s\n", NandEmuChanPath);
fprintf(file, "UseSystemFont = %d\n", UseSystemFont);
fprintf(file, "Hooktype = %d\n", Hooktype);
fprintf(file, "WiirdDebugger = %d\n", WiirdDebugger);
fprintf(file, "WiirdDebuggerPause = %d\n", WiirdDebuggerPause);
fprintf(file, "ShowPlayCount = %d\n", ShowPlayCount);
fprintf(file, "LoaderMode = %d\n", LoaderMode);
fprintf(file, "SearchMode = %d\n", SearchMode);
fclose(file);
return true;
@ -610,6 +618,18 @@ bool CSettings::SetSetting(char *name, char *value)
{
if (sscanf(value, "%d", &i) == 1) NandEmuMode = i;
}
else if(strcmp(name, "NandEmuChanMode") == 0)
{
if (sscanf(value, "%d", &i) == 1) NandEmuChanMode = i;
}
else if(strcmp(name, "LoaderMode") == 0)
{
if (sscanf(value, "%d", &i) == 1) LoaderMode = i;
}
else if(strcmp(name, "SearchMode") == 0)
{
if (sscanf(value, "%d", &i) == 1) SearchMode = i;
}
else if (strcmp(name, "InstallPartitions") == 0)
{
InstallPartitions = strtoul(value, 0, 16);
@ -735,6 +755,11 @@ bool CSettings::SetSetting(char *name, char *value)
strcpy(NandEmuPath, value);
return true;
}
else if (strcmp(name, "NandEmuChanPath") == 0)
{
strcpy(NandEmuChanPath, value);
return true;
}
else if (strcmp(name, "EnabledCategories") == 0)
{
EnabledCategories.clear();

View File

@ -75,6 +75,7 @@ class CSettings
char WDMpath[100];
char WiinnertagPath[100];
char NandEmuPath[50];
char NandEmuChanPath[50];
short videomode;
short language;
short ocarina;
@ -128,12 +129,15 @@ class CSettings
std::vector<u32> EnabledCategories;
u8 EntryIOS;
short NandEmuMode;
short NandEmuChanMode;
short UseSystemFont;
short Hooktype;
short WiirdDebugger;
short WiirdDebuggerPause;
short ShowPlayCount;
short RememberUnlock;
short LoaderMode;
short SearchMode;
protected:
bool ValidVersion(FILE * file);
bool SetSetting(char *name, char *value);

View File

@ -2,6 +2,7 @@
#include "GameTitles.h"
#include "CSettings.h"
#include "usbloader/GameList.h"
#include "Channels/channels.h"
#include "xml/GameTDB.hpp"
CGameTitles GameTitles;
@ -38,10 +39,6 @@ const char * CGameTitles::GetTitle(const char * id) const
return TitleList[i].Title.c_str();
}
//! Since not found in the GameTDB search in the game header for a title
if(gameList.GameCount() != gameList.size())
gameList.LoadUnfiltered();
for(int i = 0; i < gameList.size(); ++i)
{
if(strncasecmp(id, (char *) gameList[i]->id, 6) == 0)
@ -178,15 +175,21 @@ void CGameTitles::WriteCachedTitles(const char * path)
void CGameTitles::RemoveUnusedCache(std::vector<std::string> &MissingTitles)
{
std::vector<struct discHdr> &FullList = gameList.GetFullGameList();
if(FullList.empty())
gameList.ReadGameList();
std::vector<struct discHdr> &ChanList = Channels::Instance()->GetDiscHeaderList();
std::vector<bool> UsedCachedList(TitleList.size(), false);
for(int i = 0; i < gameList.GameCount(); ++i)
for(u32 i = 0; i < FullList.size(); ++i)
{
bool isCached = false;
for(u32 n = 0; n < TitleList.size(); ++n)
{
if(strncasecmp(TitleList[n].GameID, (const char *) gameList[i]->id, 6) == 0)
if(strncasecmp(TitleList[n].GameID, (const char *) FullList[i].id, 6) == 0)
{
UsedCachedList[n] = true;
isCached = true;
@ -197,7 +200,29 @@ void CGameTitles::RemoveUnusedCache(std::vector<std::string> &MissingTitles)
if(!isCached)
{
char gameID[7];
snprintf(gameID, sizeof(gameID), (const char *) gameList[i]->id);
snprintf(gameID, sizeof(gameID), (const char *) FullList[i].id);
MissingTitles.push_back(std::string(gameID));
}
}
for(u32 i = 0; i < ChanList.size(); ++i)
{
bool isCached = false;
for(u32 n = 0; n < TitleList.size(); ++n)
{
if(strncasecmp(TitleList[n].GameID, (const char *) ChanList[i].id, 4) == 0)
{
UsedCachedList[n] = true;
isCached = true;
break;
}
}
if(!isCached)
{
char gameID[7];
snprintf(gameID, sizeof(gameID), (const char *) ChanList[i].id);
MissingTitles.push_back(std::string(gameID));
}
}

View File

@ -9,6 +9,12 @@ enum
AUTO = 2
};
enum
{
LOAD_GAMES = 0,
LOAD_CHANNELS = 1
};
enum
{
JAPANESE,
@ -195,4 +201,11 @@ enum
HOME_MENU_MAX_CHOICE,
};
enum
{
SEARCH_BEGINNING,
SEARCH_CONTENT,
SEARCH_MAX_CHOICE
};
#endif

View File

@ -22,10 +22,12 @@
* distribution.
***************************************************************************/
#include <unistd.h>
#include "Channels/channels.h"
#include "Controls/DeviceHandler.hpp"
#include "CustomPathsSM.hpp"
#include "settings/SettingsPrompts.h"
#include "settings/CSettings.h"
#include "settings/SettingsEnums.h"
#include "prompts/PromptWindows.h"
#include "language/gettext.h"
#include "prompts/filebrowser.h"
@ -53,6 +55,7 @@ CustomPathsSM::CustomPathsSM()
Options->SetName(Idx++, tr("WDM Files Path"));
Options->SetName(Idx++, tr("Wiinnertag Path"));
Options->SetName(Idx++, tr("Nand Emu Path"));
Options->SetName(Idx++, tr("Nand Emu Channel Path"));
SetOptionValues();
}
@ -111,6 +114,9 @@ void CustomPathsSM::SetOptionValues()
//! Settings: Nand Emu Path
Options->SetValue(Idx++, Settings.NandEmuPath);
//! Settings: Nand Emu Channel Path
Options->SetValue(Idx++, Settings.NandEmuChanPath);
}
int CustomPathsSM::GetMenuInternal()
@ -249,6 +255,25 @@ int CustomPathsSM::GetMenuInternal()
}
}
//! Settings: Nand Emu Channel Path
else if (ret == ++Idx)
{
char oldPath[sizeof(Settings.NandEmuChanPath)];
snprintf(oldPath, sizeof(oldPath), Settings.NandEmuChanPath);
titleTxt->SetText(tr( "Nand Emu Channel Path" ));
ChangePath(Settings.NandEmuChanPath, sizeof(Settings.NandEmuChanPath));
if(strncasecmp(DeviceHandler::PathToFSName(Settings.NandEmuChanPath), "FAT", 3) != 0)
{
snprintf(Settings.NandEmuChanPath, sizeof(Settings.NandEmuChanPath), oldPath);
WindowPrompt(tr("Error:"), tr("Nand Emulation only works on FAT/FAT32 partitions!"), tr("OK"));
}
else if(Settings.NandEmuChanMode != OFF)
{
Channels::Instance()->GetEmuChannelList();
}
}
//! Global set back of the titleTxt after a change
titleTxt->SetText(tr( "Custom Paths" ));
SetOptionValues();

View File

@ -96,6 +96,12 @@ static const char * HomeMenuText[HOME_MENU_MAX_CHOICE] =
trNOOP( "Default" )
};
static const char * searchModeText[] =
{
trNOOP( "Beginning" ),
trNOOP( "Content" ),
};
GuiSettingsMenu::GuiSettingsMenu()
: SettingsMenu(tr("GUI Settings"), &GuiOptions, MENU_NONE)
{
@ -116,6 +122,7 @@ GuiSettingsMenu::GuiSettingsMenu()
Options->SetName(Idx++, "%s", tr( "Show Free Space" ));
Options->SetName(Idx++, "%s", tr( "HOME Menu" ));
Options->SetName(Idx++, "%s", tr( "Use System Font" ));
Options->SetName(Idx++, "%s", tr( "Search Mode" ));
SetOptionValues();
}
@ -183,6 +190,9 @@ void GuiSettingsMenu::SetOptionValues()
//! Settings: Use System Font
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.UseSystemFont] ));
//! Settings: Search Mode
Options->SetValue(Idx++, "%s", tr( searchModeText[Settings.SearchMode] ));
}
int GuiSettingsMenu::GetMenuInternal()
@ -359,6 +369,12 @@ int GuiSettingsMenu::GetMenuInternal()
Settings.FontScaleFactor = 1.0f;
}
//! Settings: Search Mode
else if (ret == ++Idx)
{
if (++Settings.SearchMode >= SEARCH_MAX_CHOICE) Settings.SearchMode = 0;
}
SetOptionValues();
return MENU_NONE;

View File

@ -47,7 +47,7 @@ GameSettingsMenu::~GameSettingsMenu()
{
}
int GameSettingsMenu::Show(GameBrowseMenu *parent, struct discHdr * header)
int GameSettingsMenu::Execute(GameBrowseMenu *parent, struct discHdr * header)
{
GameSettingsMenu * Menu = new GameSettingsMenu(parent, header);
mainWindow->Append(Menu);
@ -124,8 +124,7 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr)
mainWindow->Remove(&promptMenu);
if(promptMenu.categoriesChanged())
{
wString oldFilter(gameList.GetCurrentFilter());
gameList.FilterList(oldFilter.c_str());
gameList.FilterList();
browserMenu->ReloadBrowser();
}
mainWindow->SetState(STATE_DEFAULT);

View File

@ -34,7 +34,7 @@ class GameSettingsMenu : public FlyingButtonsMenu
public:
GameSettingsMenu(GameBrowseMenu *parent, struct discHdr * header);
virtual ~GameSettingsMenu();
static int Show(GameBrowseMenu *parent, struct discHdr *header);
static int Execute(GameBrowseMenu *parent, struct discHdr *header);
protected:
virtual void CreateSettingsMenu(int index);
virtual void DeleteSettingsMenu();

View File

@ -49,7 +49,7 @@ GlobalSettings::~GlobalSettings()
delete creditsImgOverData;
}
int GlobalSettings::Show()
int GlobalSettings::Execute()
{
GlobalSettings * Menu = new GlobalSettings();
mainWindow->Append(Menu);

View File

@ -31,7 +31,7 @@ class GlobalSettings : public FlyingButtonsMenu
public:
GlobalSettings();
virtual ~GlobalSettings();
static int Show();
static int Execute();
protected:
virtual void CreateSettingsMenu(int index);
virtual void DeleteSettingsMenu();

View File

@ -25,6 +25,7 @@
#include "LoaderSettings.hpp"
#include "usbloader/usbstorage2.h"
#include "settings/CSettings.h"
#include "settings/GameTitles.h"
#include "prompts/PromptWindows.h"
#include "language/gettext.h"
#include "wad/nandtitle.h"
@ -32,6 +33,12 @@
#include "system/IosLoader.h"
#include "menu.h"
static const char * dispMethText[] =
{
trNOOP( "Games" ),
trNOOP( "Channels" )
};
static const char * OnOffText[] =
{
trNOOP( "OFF" ),
@ -97,6 +104,7 @@ LoaderSettings::LoaderSettings()
{
int Idx = 0;
Options->SetName(Idx++, "%s", tr( "Loader Mode" ));
Options->SetName(Idx++, "%s", tr( "Video Mode" ));
Options->SetName(Idx++, "%s", tr( "VIDTV Patch" ));
Options->SetName(Idx++, "%s", tr( "Sneek Video Patch" ));
@ -108,18 +116,30 @@ LoaderSettings::LoaderSettings()
Options->SetName(Idx++, "%s", tr( "Error 002 fix" ));
Options->SetName(Idx++, "%s", tr( "Block IOS Reload" ));
Options->SetName(Idx++, "%s", tr( "Return To" ));
Options->SetName(Idx++, "%s", tr( "Nand Emulation" ));
Options->SetName(Idx++, "%s", tr( "Nand Saves Emulation" ));
Options->SetName(Idx++, "%s", tr( "Nand Channel Emulation" ));
Options->SetName(Idx++, "%s", tr( "Hooktype" ));
Options->SetName(Idx++, "%s", tr( "Wiird Debugger" ));
Options->SetName(Idx++, "%s", tr( "Debugger Paused Start" ));
SetOptionValues();
oldLoaderMode = Settings.LoaderMode;
}
LoaderSettings::~LoaderSettings()
{
if(oldLoaderMode != Settings.LoaderMode)
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
}
void LoaderSettings::SetOptionValues()
{
int Idx = 0;
//! Settings: Loader Mode
Options->SetValue(Idx++, "%s", tr(dispMethText[Settings.LoaderMode]));
//! Settings: Video Mode
Options->SetValue(Idx++, "%s", tr(VideoModeText[Settings.videomode]));
@ -165,6 +185,9 @@ void LoaderSettings::SetOptionValues()
//! Settings: Nand Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuMode] ));
//! Settings: Nand Channel Emulation
Options->SetValue(Idx++, "%s", tr( NandEmuText[Settings.NandEmuChanMode] ));
//! Settings: Hooktype
Options->SetValue(Idx++, "%s", tr( HooktypeText[Settings.Hooktype] ));
@ -184,6 +207,12 @@ int LoaderSettings::GetMenuInternal()
int Idx = -1;
//! Settings: Loader Mode
if (ret == ++Idx)
{
if (++Settings.LoaderMode >= MAX_ON_OFF) Settings.LoaderMode = LOAD_GAMES;
}
//! Settings: Video Mode
if (ret == ++Idx)
{
@ -280,6 +309,14 @@ int LoaderSettings::GetMenuInternal()
else if (++Settings.NandEmuMode >= 3) Settings.NandEmuMode = 0;
}
//! Settings: Nand Channel Emulation
else if (ret == ++Idx )
{
if(!IosLoader::IsD2X())
WindowPrompt(tr("Error:"), tr("Nand Emulation is only available on D2X cIOS!"), tr("OK"));
else if (++Settings.NandEmuChanMode >= 3) Settings.NandEmuChanMode = 0;
}
//! Settings: Hooktype
else if (ret == ++Idx )
{

View File

@ -30,10 +30,12 @@ class LoaderSettings : public SettingsMenu
{
public:
LoaderSettings();
~LoaderSettings();
protected:
void SetOptionValues();
int GetMenuInternal();
short oldLoaderMode;
OptionList GuiOptions;
};

View File

@ -108,7 +108,7 @@ ThemeDownloader::~ThemeDownloader()
delete ThemePreviews[i];
}
int ThemeDownloader::Run()
int ThemeDownloader::Execute()
{
ThemeDownloader * Menu = new ThemeDownloader();
mainWindow->Append(Menu);

View File

@ -32,7 +32,7 @@ class ThemeDownloader : public FlyingButtonsMenu
public:
ThemeDownloader();
virtual ~ThemeDownloader();
static int Run();
static int Execute();
int MainLoop();
protected:
void CreateSettingsMenu(int index) { MainButtonClicked(index); };

View File

@ -89,7 +89,7 @@ ThemeMenu::~ThemeMenu()
delete ThemePreviews[i];
}
int ThemeMenu::Run()
int ThemeMenu::Execute()
{
ThemeMenu * Menu = new ThemeMenu();
mainWindow->Append(Menu);

View File

@ -35,7 +35,7 @@ class ThemeMenu : public FlyingButtonsMenu
public:
ThemeMenu();
virtual ~ThemeMenu();
static int Run();
static int Execute();
int MainLoop();
protected:
void CreateSettingsMenu(int index) { MainButtonClicked(index); };

View File

@ -20,6 +20,7 @@
#include "mload/mload_modules.h"
#include "system/IosLoader.h"
#include "Controls/DeviceHandler.hpp"
#include "Channels/channels.h"
#include "usbloader/disc.h"
#include "usbloader/apploader.h"
#include "usbloader/usbstorage2.h"
@ -134,28 +135,28 @@ void GameBooter::SetupAltDOL(u8 * gameID, u8 &alternatedol, u32 &alternatedoloff
alternatedol = OFF;
}
void GameBooter::SetupNandEmu(u8 NandEmuMode, struct discHdr &gameHeader)
void GameBooter::SetupNandEmu(u8 NandEmuMode, const char *NandEmuPath, struct discHdr &gameHeader)
{
if(NandEmuMode && strchr(Settings.NandEmuPath, '/'))
if(NandEmuMode && strchr(NandEmuPath, '/'))
{
//! Create save game path and title.tmd for not existing saves
CreateSavePath(&gameHeader);
gprintf("Enabling Nand Emulation on: %s\n", Settings.NandEmuPath);
gprintf("Enabling Nand Emulation on: %s\n", NandEmuPath);
Set_FullMode(NandEmuMode == 2);
Set_Path(strchr(Settings.NandEmuPath, '/'));
Set_Path(strchr(NandEmuPath, '/'));
//! Set which partition to use (USB only)
if(strncmp(Settings.NandEmuPath, "usb", 3) == 0)
Set_Partition(atoi(Settings.NandEmuPath+3)-1);
if(strncmp(NandEmuPath, "usb", 3) == 0)
Set_Partition(atoi(NandEmuPath+3)-1);
//! Unmount SD since NAND Emu mount fails otherwise
else if(strncmp(Settings.NandEmuPath, "sd", 2) == 0)
else if(strncmp(NandEmuPath, "sd", 2) == 0)
DeviceHandler::Instance()->UnMountSD();
Enable_Emu(strncmp(Settings.NandEmuPath, "usb", 3) == 0 ? EMU_USB : EMU_SD);
Enable_Emu(strncmp(NandEmuPath, "usb", 3) == 0 ? EMU_USB : EMU_SD);
//! Remount SD again after activating NAND emu
if(strncmp(Settings.NandEmuPath, "sd", 2) == 0)
if(strncmp(NandEmuPath, "sd", 2) == 0)
DeviceHandler::Instance()->MountSD();
}
}
@ -259,8 +260,21 @@ int GameBooter::BootGame(const char * gameID)
Playlog_Update((char *) gameHeader.id, BNRInstance::Instance()->GetIMETTitle(CONF_GetLanguage()));
//! Setup NAND emulation
SetupNandEmu(NandEmuMode, gameHeader);
if(Settings.LoaderMode != LOAD_CHANNELS)
SetupNandEmu(NandEmuMode, Settings.NandEmuPath, gameHeader);
else
SetupNandEmu(Settings.NandEmuChanMode, Settings.NandEmuChanPath, gameHeader);
// Load wip codes
load_wip_code(gameHeader.id);
//! Load Ocarina codes
if (ocarinaChoice)
ocarina_load_code(Settings.Cheatcodespath);
//! Setup disc stuff if we load a game
if(Settings.LoaderMode != LOAD_CHANNELS)
{
//! Setup disc in cIOS and open it
ret = SetupDisc(gameHeader.id);
if (ret < 0)
@ -270,6 +284,7 @@ int GameBooter::BootGame(const char * gameID)
gprintf("Loading BCA data...");
ret = do_bca_code(Settings.BcaCodepath, gameHeader.id);
gprintf("%d\n", ret);
}
//! Setup IOS reload block
if (IosLoader::IsHermesIOS())
@ -290,16 +305,38 @@ int GameBooter::BootGame(const char * gameID)
reloadblock = 0;
}
//! Now we can free up the memory used by the game list
//! Now we can free up the memory used by the game/channel lists
gameList.clear();
Channels::DestroyInstance();
//! Load main.dol or alternative dol into memory, start the game apploader and get game entrypoint
gprintf("\tDisc_wiiBoot\n");
if(Settings.LoaderMode != LOAD_CHANNELS)
{
gprintf("\tGame Boot\n");
AppEntrypoint = BootPartition(Settings.dolpath, videoChoice, alternatedol, alternatedoloffset);
//! Flush all caches and close up all devices
DeviceHandler::DestroyInstance();
}
else
{
gprintf("\tChannel Boot\n");
//! Flush all caches and close up all devices
//! Avoid later crashs with free if memory gets overwritten by game
DeviceHandler::DestroyInstance();
/* Setup low memory */
Disc_SetLowMem();
/* Setup video mode */
Disc_SelectVMode(videoChoice);
// Load dol
u64 tid;
memcpy(&tid, gameHeader.tid, 8);
AppEntrypoint = Channels::LoadChannel(tid);
}
//! No entrypoint found...back to HBC/SystemMenu
if(AppEntrypoint == 0)
{
gprintf("AppEntryPoint is 0, something went wrong\n");
WDVD_ClosePartition();
Sys_BackToLoader();
}
@ -308,20 +345,15 @@ int GameBooter::BootGame(const char * gameID)
gprintf("Applying game patches...\n");
gamepatches(videoChoice, languageChoice, countrystrings, viChoice, sneekChoice, Hooktype, fix002, reloadblock, iosChoice, returnToChoice);
//! Load Ocarina codes
if (ocarinaChoice)
ocarina_load_code(Settings.Cheatcodespath);
//! Load Code handler if needed
load_handler(Settings.Cheatcodespath, Hooktype, WiirdDebugger, Settings.WiirdDebuggerPause);
load_handler(Hooktype, WiirdDebugger, Settings.WiirdDebuggerPause);
//! Shadow mload - Only needed on some games with Hermes v5.1 (Check is inside the function)
shadow_mload();
gprintf("Shutting down devices...\n");
//! Flush all caches and close up all devices
// Close all handlers
WBFS_CloseAll();
DeviceHandler::DestroyInstance();
if(Settings.USBPort == 2)
//! Reset USB port because device handler changes it for cache flushing
USBStorage2_SetPort(usbport);

View File

@ -27,7 +27,7 @@ class GameBooter
private:
static int FindDiscHeader(const char * gameID, struct discHdr &gameHeader);
static void SetupAltDOL(u8 * gameID, u8 &alternatedol, u32 &alternatedoloffset);
static void SetupNandEmu(u8 NandEmuMode, struct discHdr &gameHeader);
static void SetupNandEmu(u8 NandEmuMode, const char *NandEmuPath, struct discHdr &gameHeader);
static int SetupDisc(u8 *gameID);
static u32 BootPartition(char * dolpath, u8 videoselected, u8 alternatedol, u32 alternatedoloffset);
};

View File

@ -23,8 +23,8 @@
***************************************************************************/
#include <algorithm>
#include <string>
#include <wctype.h>
#include <malloc.h>
#include "GUI/gui_searchbar.h"
#include "usbloader/wbfs.h"
#include "settings/newtitles.h"
#include "settings/CSettings.h"
@ -35,13 +35,13 @@
#include "FreeTypeGX.h"
#include "GameList.h"
#include "memory/memory.h"
#include "Channels/channels.h"
GameList gameList;
void GameList::clear()
{
GameFilter.clear();
AvailableSearchChars.clear();
FullGameList.clear();
GamePartitionList.clear();
FilteredList.clear();
@ -90,10 +90,7 @@ void GameList::RemovePartition(int part)
}
if(FullGameList.size() > 0)
{
wString filter(GameFilter);
FilterList(filter.c_str());
}
FilterList();
}
int GameList::InternalReadList(int part)
@ -156,6 +153,9 @@ int GameList::InternalReadList(int part)
int GameList::ReadGameList()
{
if(Settings.LoaderMode == LOAD_CHANNELS)
return 0;
// Clear list
clear();
@ -183,15 +183,22 @@ int GameList::ReadGameList()
int GameList::FilterList(const wchar_t * gameFilter)
{
if (FullGameList.size() == 0) ReadGameList();
if (gameFilter) GameFilter.assign(gameFilter);
std::vector<struct discHdr> *FullList = &FullGameList;
if(Settings.LoaderMode == LOAD_CHANNELS)
FullList = &(Channels::Instance()->GetDiscHeaderList());
else if (FullGameList.size() == 0)
ReadGameList();
if (gameFilter)
GameFilter.assign(gameFilter);
FilteredList.clear();
AvailableSearchChars.clear();
for (u32 i = 0; i < FullGameList.size(); ++i)
for (u32 i = 0; i < FullList->size(); ++i)
{
struct discHdr *header = &FullGameList[i];
struct discHdr *header = &FullList->at(i);
/* Register game */
NewTitles::Instance()->CheckGame(header->id);
@ -240,47 +247,14 @@ int GameList::FilterList(const wchar_t * gameFilter)
if(GameCategories.isInCategory((char *) header->id, Settings.EnabledCategories[n]))
break;
}
if(n == Settings.EnabledCategories.size()) continue;
wchar_t *gameName = charToWideChar(GameTitles.GetTitle(header));
if (gameName)
{
if ( GameFilter.size() ) // has Filter
{
bool found = false;
wchar_t *s1 = gameName, *s2;
while( (s2 = wcscasestr(s1, GameFilter.c_str())) ) // search filter in gameName
{
found = true;
wchar_t ch = towupper(s2[GameFilter.size()]);
if(ch) AvailableSearchChars.insert(ch);
s1++; // try search filter in gameName more times
}
if(!found)
{
delete [] gameName;
if(n == Settings.EnabledCategories.size())
continue;
}
}
else // no Filter -> makes all chars as aviable
{
for(wchar_t *ch = gameName; *ch; ch++)
if(*ch >= '@') // limit chars by empty filter
AvailableSearchChars.insert(towupper(*ch));
}
delete [] gameName;
}
FilteredList.push_back(header);
}
NewTitles::Instance()->Save();
if (FilteredList.size() < 2)
if (FilteredList.size() < 2)
AvailableSearchChars.clear();
GuiSearchBar::FilterList(FilteredList, GameFilter);
SortList();
@ -289,36 +263,29 @@ int GameList::FilterList(const wchar_t * gameFilter)
int GameList::LoadUnfiltered()
{
if (FullGameList.size() == 0) ReadGameList();
std::vector<struct discHdr> *FullList = &FullGameList;
if(Settings.LoaderMode == LOAD_CHANNELS)
FullList = &(Channels::Instance()->GetDiscHeaderList());
else if (FullGameList.size() == 0)
ReadGameList();
GameFilter.clear();
AvailableSearchChars.clear();
FilteredList.clear();
for (u32 i = 0; i < FullGameList.size(); ++i)
for (u32 i = 0; i < FullList->size(); ++i)
{
struct discHdr *header = &FullGameList[i];
struct discHdr *header = &FullList->at(i);
/* Register game */
NewTitles::Instance()->CheckGame(header->id);
wchar_t *gameName = charToWideChar(GameTitles.GetTitle(header));
if (gameName)
{
for(wchar_t *ch = gameName; *ch; ch++)
if(*ch >= '@') // limit chars by unfiltered list
AvailableSearchChars.insert(towupper(*ch));
delete [] gameName;
}
FilteredList.push_back(header);
}
NewTitles::Instance()->Save();
if (FilteredList.size() < 2)
AvailableSearchChars.clear();
GuiSearchBar::FilterList(FilteredList, GameFilter);
SortList();

View File

@ -2,7 +2,6 @@
#define GAME_LIST_H_
#include <vector>
#include <set>
#include "Controls/DeviceHandler.hpp"
#include "wstring.hpp"
#include "usbloader/disc.h"
@ -20,7 +19,6 @@ class GameList
struct discHdr * operator[](int i) const { if (i < 0 || i >= (int) FilteredList.size()) return NULL; return FilteredList[i]; }
struct discHdr * GetDiscHeader(const char * gameID) const;
const wchar_t * GetCurrentFilter() const { return GameFilter.c_str(); }
const std::set<wchar_t> &GetAvailableSearchChars() const { return AvailableSearchChars; }
void SortList();
void clear();
bool operator!() const { return (FullGameList.size() == 0); }
@ -35,6 +33,8 @@ class GameList
int GetPartitionNumber(const u8 *gameid) const;
int GetGameFS(const u8 *gameID) const { return DeviceHandler::Instance()->GetFilesystemType(USB1+GetPartitionNumber(gameID)); }
void RemovePartition(int part_num);
std::vector<struct discHdr *> &GetFilteredList(void) { return FilteredList; }
std::vector<struct discHdr> &GetFullGameList(void) { return FullGameList; }
protected:
int InternalReadList(int part);
static bool NameSortCallback(const struct discHdr *a, const struct discHdr *b);
@ -42,7 +42,6 @@ class GameList
static bool RankingSortCallback(const struct discHdr *a, const struct discHdr *b);
static bool PlayersSortCallback(const struct discHdr *a, const struct discHdr *b);
std::set<wchar_t> AvailableSearchChars;
wString GameFilter;
int selectedGame;
std::vector<struct discHdr *> FilteredList;

View File

@ -9,6 +9,7 @@
#include <string.h>
#include "system/IosLoader.h"
#include "utils/tools.h"
#include "gecko.h"
#include "NandEmu.h"
@ -33,20 +34,18 @@ static nandDevice ndevList[] =
};
/* Buffer */
static u32 inbuf[8] ATTRIBUTE_ALIGN(32);
static const char fs[] ATTRIBUTE_ALIGN(32) = "/dev/fs";
static const char fat[] ATTRIBUTE_ALIGN(32) = "fat";
static int mounted = 0;
static int partition = 0;
static u32 partition ATTRIBUTE_ALIGN(32) = 0;
static u32 mode ATTRIBUTE_ALIGN(32) = 0;
static char path[32] ATTRIBUTE_ALIGN(32) = "\0";
static int fullmode = 0;
static char path[32] = "\0";
static int mounted = 0;
static s32 Nand_Mount(nandDevice *dev)
{
s32 fd, ret;
u32 inlen = 0;
ioctlv *vector = NULL;
u32 *buffer = NULL;
/* Open FAT module */
fd = IOS_Open(fat, 0);
@ -58,27 +57,27 @@ static s32 Nand_Mount(nandDevice *dev)
// and the nand is always expected to be on the 1st partition.
// However this way earlier d2x betas having revision 21 take in
// consideration the partition argument.
inlen = 1;
/* Allocate memory */
buffer = (u32 *)memalign(32, sizeof(u32)*3);
vector = (ioctlv *) memalign(32, sizeof(ioctlv));
if(vector == NULL)
{
/* Close FAT module */
IOS_Close(fd);
return -2;
}
/* Set vector pointer */
vector = (ioctlv *)buffer;
buffer[0] = (u32)(buffer + 2);
buffer[1] = sizeof(u32);
buffer[2] = (u32)partition;
vector[0].data = &partition;
vector[0].len = sizeof(u32);
/* Mount device */
ret = IOS_Ioctlv(fd, dev->mountCmd, inlen, 0, vector);
ret = IOS_Ioctlv(fd, dev->mountCmd, 1, 0, vector);
/* Close FAT module */
IOS_Close(fd);
/* Free memory */
if(buffer != NULL)
free(buffer);
free(vector);
return ret;
}
@ -104,7 +103,7 @@ static s32 Nand_Unmount(nandDevice *dev)
static s32 Nand_Enable(nandDevice *dev)
{
s32 fd, ret;
u32 *buffer = NULL;
ioctlv *vector = NULL;
// Open /dev/fs
fd = IOS_Open(fs, 0);
@ -113,29 +112,31 @@ static s32 Nand_Enable(nandDevice *dev)
//FULL NAND emulation since rev18
//needed for reading images on triiforce mrc folder using ISFS commands
inbuf[0] = dev->mode | fullmode;
mode = dev->mode | fullmode;
// NOTE:
// The official cIOSX rev21 by Waninkoko provides an undocumented feature
// to set nand path when mounting the device.
// This feature has been discovered during d2x development.
int pathlen = strlen(path)+1;
/* Allocate memory */
buffer = (u32 *)memalign(32, (sizeof(u32)*5)+pathlen);
vector = (ioctlv *)memalign(32, sizeof(ioctlv)*2);
if(vector == NULL)
{
/* Close FAT module */
IOS_Close(fd);
return -2;
}
buffer[0] = (u32)(buffer + 4);
buffer[1] = sizeof(u32); // actually not used by cios
buffer[2] = (u32)(buffer + 5);
buffer[3] = pathlen; // actually not used by cios
buffer[4] = inbuf[0];
strcpy((char*)(buffer+5), path);
vector[0].data = &mode;
vector[0].len = sizeof(u32);
vector[1].data = path;
vector[1].len = sizeof(path);
ret = IOS_Ioctlv(fd, 100, 2, 0, (ioctlv *)buffer);
ret = IOS_Ioctlv(fd, 100, 2, 0, vector);
/* Free memory */
if(buffer != NULL)
free(buffer);
free(vector);
// Close /dev/fs
IOS_Close(fd);
@ -153,10 +154,10 @@ static s32 Nand_Disable(void)
return fd;
// Set input buffer
inbuf[0] = 0;
mode = 0;
// Disable NAND emulator
ret = IOS_Ioctl(fd, 100, inbuf, sizeof(inbuf), NULL, 0);
ret = IOS_Ioctl(fd, 100, &mode, sizeof(mode), NULL, 0);
// Close /dev/fs
IOS_Close(fd);

View File

@ -17,6 +17,10 @@
#include "../settings/SettingsEnums.h"
#include "../gecko.h"
// Global app entry point
extern u32 AppEntrypoint;
void _unstub_start();
/* Constants */
#define PTABLE_OFFSET 0x40000
#define WII_MAGIC 0x5D1C9EA3
@ -284,7 +288,33 @@ s32 Disc_JumpToEntrypoint(s32 hooktype, u32 dolparameter)
/* Originally from tueidj - taken from NeoGamme (thx) */
*(vu32*)0xCC003024 = dolparameter != 0 ? dolparameter : 1;
if (hooktype)
if(AppEntrypoint == 0x3400 && hooktype)
{
__asm__(
"lis %r3, returnpoint@h\n"
"ori %r3, %r3, returnpoint@l\n"
"mtlr %r3\n"
"lis %r3, 0x8000\n"
"ori %r3, %r3, 0x18A8\n"
"mtctr %r3\n"
"bctr\n"
"returnpoint:\n"
"bl DCDisable\n"
"bl ICDisable\n"
"li %r3, 0\n"
"mtsrr1 %r3\n"
"lis %r4, AppEntrypoint@h\n"
"ori %r4,%r4,AppEntrypoint@l\n"
"lwz %r4, 0(%r4)\n"
"mtsrr0 %r4\n"
"rfi\n"
);
}
else if(AppEntrypoint == 0x3400)
{
_unstub_start();
}
else if (hooktype)
{
__asm__(
"lis %r3, AppEntrypoint@h\n"

View File

@ -23,7 +23,9 @@ extern "C"
/* Padding */
u8 is_ciso;
u8 unused1[13];
/* Unused, on channel list mode this is the full 64 bit tid and zeros */
u8 tid[13];
/* Magic word */
u32 magic;

214
source/utils/lz77.c Executable file
View File

@ -0,0 +1,214 @@
/*******************************************************************************
* lz77.c
*
* Copyright (c) 2009 The Lemon Man
* Copyright (c) 2009 Nicksasa
* Copyright (c) 2009 WiiPower
*
* Distributed under the terms of the GNU General Public License (v2)
* See http://www.gnu.org/licenses/gpl-2.0.txt for more info.
*
* Description:
* -----------
*
******************************************************************************/
#include <gccore.h>
#include <malloc.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "lz77.h"
#define ALIGN32(x) (((x) + 31) & ~31)
u32 packBytes(int a, int b, int c, int d)
{
return (d << 24) | (c << 16) | (b << 8) | (a);
}
s32 __decompressLZ77_11(u8 *in, u32 inputLen, u8 **output, u32 *outputLen)
{
int x, y;
u8 *out = NULL;
u32 compressedPos = 0x4;
u32 decompressedPos = 0x0;
u32 decompressedSize = 0;
decompressedSize = packBytes(in[0], in[1], in[2], in[3]) >> 8;
if (!decompressedSize)
{
decompressedSize = packBytes(in[4], in[5], in[6], in[7]);
compressedPos += 0x4;
}
printf("Decompressed size : %i\n", decompressedSize);
out = memalign(32, ALIGN32(decompressedSize));
if (out == NULL)
{
printf("Out of memory\n");
return -1;
}
while (compressedPos < inputLen && decompressedPos < decompressedSize)
{
u8 byteFlag = in[compressedPos];
compressedPos++;
for (x = 7; x >= 0; x--)
{
if ((byteFlag & (1 << x)) > 0)
{
u8 first = in[compressedPos];
u8 second = in[compressedPos + 1];
u32 pos, copyLen;
if (first < 0x20)
{
u8 third = in[compressedPos + 2];
if (first >= 0x10)
{
u32 fourth = in[compressedPos + 3];
pos = (u32)(((third & 0xF) << 8) | fourth) + 1;
copyLen = (u32)((second << 4) | ((first & 0xF) << 12) | (third >> 4)) + 273;
compressedPos += 4;
} else
{
pos = (u32)(((second & 0xF) << 8) | third) + 1;
copyLen = (u32)(((first & 0xF) << 4) | (second >> 4)) + 17;
compressedPos += 3;
}
} else
{
pos = (u32)(((first & 0xF) << 8) | second) + 1;
copyLen = (u32)(first >> 4) + 1;
compressedPos += 2;
}
for (y = 0; y < (int) copyLen; y++)
{
out[decompressedPos + y] = out[decompressedPos - pos + y];
}
decompressedPos += copyLen;
} else
{
out[decompressedPos] = in[compressedPos];
decompressedPos++;
compressedPos++;
}
if (compressedPos >= inputLen || decompressedPos >= decompressedSize)
break;
}
}
*output = out;
*outputLen = decompressedSize;
return 0;
}
s32 __decompressLZ77_10(u8 *in, u32 inputLen, u8 **output, u32 *outputLen)
{
int x, y;
u8 *out = NULL;
u32 compressedPos = 0;
u32 decompressedSize = 0x4;
u32 decompressedPos = 0;
decompressedSize = packBytes(in[0], in[1], in[2], in[3]) >> 8;
//int compressionType = (packBytes(in[0], in[1], in[2], in[3]) >> 4) & 0xF;
printf("Decompressed size : %i\n", decompressedSize);
out = memalign(32, ALIGN32(decompressedSize));
if (out == NULL)
{
printf("Out of memory\n");
return -1;
}
compressedPos += 0x4;
while (decompressedPos < decompressedSize)
{
u8 flag = *(u8*)(in + compressedPos);
compressedPos += 1;
for (x = 0; x < 8; x++)
{
if (flag & 0x80)
{
u8 first = in[compressedPos];
u8 second = in[compressedPos + 1];
u16 pos = (u16)((((first << 8) + second) & 0xFFF) + 1);
u8 copyLen = (u8)(3 + ((first >> 4) & 0xF));
for (y = 0; y < copyLen; y++)
{
out[decompressedPos + y] = out[decompressedPos - pos + (y % pos)];
}
compressedPos += 2;
decompressedPos += copyLen;
} else
{
out[decompressedPos] = in[compressedPos];
compressedPos += 1;
decompressedPos += 1;
}
flag <<= 1;
if (decompressedPos >= decompressedSize)
break;
}
}
*output = out;
*outputLen = decompressedSize;
return 0;
}
int isLZ77compressed(u8 *buffer)
{
if ((buffer[0] == LZ77_0x10_FLAG) || (buffer[0] == LZ77_0x11_FLAG))
{
return 1;
}
return 0;
}
int decompressLZ77content(u8 *buffer, u32 length, u8 **output, u32 *outputLen)
{
int ret;
switch (buffer[0])
{
case LZ77_0x10_FLAG:
ret = __decompressLZ77_10(buffer, length, output, outputLen);
break;
case LZ77_0x11_FLAG:
ret = __decompressLZ77_11(buffer, length, output, outputLen);
break;
default:
ret = -1;
break;
}
return ret;
}

34
source/utils/lz77.h Executable file
View File

@ -0,0 +1,34 @@
/*******************************************************************************
* lz77.h
*
* Copyright (c) 2009 The Lemon Man
* Copyright (c) 2009 Nicksasa
* Copyright (c) 2009 WiiPower
*
* Distributed under the terms of the GNU General Public License (v2)
* See http://www.gnu.org/licenses/gpl-2.0.txt for more info.
*
* Description:
* -----------
*
******************************************************************************/
#ifndef _LZ77_MODULE
#define _LZ77_MODULE
#define LZ77_0x10_FLAG 0x10
#define LZ77_0x11_FLAG 0x11
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
int isLZ77compressed(u8 *buffer);
int decompressLZ77content(u8 *buffer, u32 length, u8 **output, u32 *outputLen);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif

View File

@ -425,7 +425,7 @@ u64 NandTitle::FindU32(const char *s)
return 0;
}
int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize)
int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize, bool isfsInit)
{
if(!filepath)
return -1;
@ -434,13 +434,13 @@ int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfi
if(!stats)
return IPC_ENOMEM;
ISFS_Initialize();
if(isfsInit) ISFS_Initialize();
int fd = ISFS_Open(filepath, ISFS_OPEN_READ);
if(fd < 0)
{
free(stats);
ISFS_Deinitialize();
if(isfsInit) ISFS_Deinitialize();
return fd;
}
@ -449,7 +449,7 @@ int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfi
{
free(stats);
ISFS_Close(fd);
ISFS_Deinitialize();
if(isfsInit) ISFS_Deinitialize();
return ret;
}
@ -461,14 +461,14 @@ int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfi
if(!buffer)
{
ISFS_Close(fd);
ISFS_Deinitialize();
if(isfsInit) ISFS_Deinitialize();
return IPC_ENOMEM;
}
ret = ISFS_Read(fd, buffer, filesize);
ISFS_Close(fd);
ISFS_Deinitialize();
if(isfsInit) ISFS_Deinitialize();
if (ret < 0)
{

View File

@ -95,7 +95,9 @@ class NandTitle
u64 operator[](u32 i) { return At(i); }
static int LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize);
bool GetName(u64 tid, int language, wchar_t* name);
static int LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize, bool isfsInit = true);
static int ExtractFile(const char *nandPath, const char *filepath, bool isfsInit = true);
static int ExtractDir(const char *wiipath, const char *filepath, bool isfsInit = true);
private:
@ -103,7 +105,6 @@ class NandTitle
std::vector<u64> titleIds;
std::map<u64, string> NameList;
bool GetName(u64 tid, int language, wchar_t* name);
tmd* GetTMD(u64 tid);
u32 currentIndex;

View File

@ -147,15 +147,21 @@ size_t utf8Len(const char *s)
return len;
}
wchar_t *wcscasestr(const wchar_t *s1, const wchar_t *s2)
const wchar_t *wcscasestr(const wchar_t *s1, const wchar_t *s2)
{
if(*s2==0) return (wchar_t *)s1;
if(*s2 == 0)
return (wchar_t *)s1;
int s1_len = wcslen(s1);
int s2_len = wcslen(s2);
if(s1_len < s2_len) return 0;
if(s1_len < s2_len)
return 0;
const wchar_t *end = &s1[s1_len-s2_len];
for(wchar_t *s=(wchar_t *)s1; s<=end; s++)
for(const wchar_t *s = s1; s <= end; s++)
if(wcsncasecmp(s, s2, s2_len)==0)
return s;
return 0;
}

View File

@ -23,6 +23,6 @@ class wString: public std::basic_string<wchar_t, std::char_traits<wchar_t>, std:
size_t utf8Len(const char *s);
wchar_t *wcscasestr(const wchar_t *s1, const wchar_t *s2);
const wchar_t *wcscasestr(const wchar_t *s1, const wchar_t *s2);
#endif // !defined(__WSTRING_HPP)